U
    Z$dP  ã                   @   s   G d d„ dƒZ ddd„ZdS )c                   @   s0   e Zd ZdZdd„ Zdd„ Zdd„ Zdd	„ Zd
S )ÚIteratora-  
    This class implements an iterator object that can be used to loop
    over an image sequence.

    You can use the ``[]`` operator to access elements by index. This operator
    will raise an :py:exc:`IndexError` if you try to access a nonexistent
    frame.

    :param im: An image object.
    c                 C   s0   t |dƒsd}t|ƒ‚|| _t| jddƒ| _d S )NÚseekzim must have seek methodZ
_min_frameé    )ÚhasattrÚAttributeErrorÚimÚgetattrÚposition)Úselfr   Úmsg© r   ú5/tmp/pip-unpacked-wheel-s9vr6rj9/PIL/ImageSequence.pyÚ__init__   s
    
zIterator.__init__c              
   C   sB   z| j  |¡ | j W S  tk
r< } z
t|‚W 5 d }~X Y nX d S ©N)r   r   ÚEOFErrorÚ
IndexError)r	   ÚixÚer   r   r   Ú__getitem__&   s
    zIterator.__getitem__c                 C   s   | S r   r   )r	   r   r   r   Ú__iter__-   s    zIterator.__iter__c              
   C   sR   z$| j  | j¡ |  jd7  _| j W S  tk
rL } z
t|‚W 5 d }~X Y nX d S )Né   )r   r   r   r   ÚStopIteration)r	   r   r   r   r   Ú__next__0   s    zIterator.__next__N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r   r   r   r   r   r   r   r      s
   r   Nc                    s`   t | tƒs| g} g }| D ],}| ¡ }|dd„ t|ƒD ƒ7 }| |¡ qˆ r\‡ fdd„|D ƒS |S )a  
    Applies a given function to all frames in an image or a list of images.
    The frames are returned as a list of separate images.

    :param im: An image, or a list of images.
    :param func: The function to apply to all of the image frames.
    :returns: A list of images.
    c                 S   s   g | ]}|  ¡ ‘qS r   )Úcopy)Ú.0Zim_framer   r   r   Ú
<listcomp>I   s     zall_frames.<locals>.<listcomp>c                    s   g | ]}ˆ |ƒ‘qS r   r   )r   r   ©Úfuncr   r   r   L   s     )Ú
isinstanceÚlistÚtellr   r   )r   r    ZimsZ
imSequenceÚcurrentr   r   r   Ú
all_frames9   s    	
r%   )N)r   r%   r   r   r   r   Ú<module>   s   &