
    g1                         d dl Zd dlZd dlmZmZ ddlmZ  G d de          Z G d de          Z	 G d	 d
e	          Z
 G d de	          Z G d de          Z G d de          ZdS )    N)DatasetIterableDataset   )ModelOutputc                        e Zd Zd Zd Zd ZdS )PipelineDatasetc                 0    || _         || _        || _        d S Ndatasetprocessparams)selfr   r   r   s       [/var/www/html/ai-engine/env/lib/python3.11/site-packages/transformers/pipelines/pt_utils.py__init__zPipelineDataset.__init__	   s        c                 *    t          | j                  S r
   lenr   r   s    r   __len__zPipelineDataset.__len__       4<   r   c                 F    | j         |         } | j        |fi | j        }|S r
   r   )r   iitem	processeds       r   __getitem__zPipelineDataset.__getitem__   s.    |A DL5555	r   N)__name__
__module____qualname__r   r   r    r   r   r   r      sA          
! ! !    r   r   c                   .    e Zd ZddZd Zd Zd Zd ZdS )PipelineIteratorNc                 j    || _         || _        || _        |dk    rd}|| _        d| _        d| _        dS )a  
        Roughly equivalent to

        ```
        for item in loader:
            yield infer(item, **params)
        ```

                Arguments:
                    loader (`torch.utils.data.DataLoader` or `Iterable`):
                        The iterator that will be used to apply `infer` on.
                    infer (any function):
                        The function to apply of each element of `loader`.
                    params (`dict`):
                        The parameters passed to `infer` along with every item
                    loader_batch_size (`int`, *optional*):
                        If specified, the items of `loader` are supposed to come as batch, and are loader_batched here
                        making it roughly behave as


        ```
        for items in loader:
            for i in loader_batch_size:
                item = items[i]
                yield infer(item, **params)
        ```   N)loaderinferr   loader_batch_size_loader_batch_index_loader_batch_data)r   r&   r'   r   r(   s        r   r   zPipelineIterator.__init__   sJ    6 
!! $!2 $( "&r   c                 *    t          | j                  S r
   )r   r&   r   s    r   r   zPipelineIterator.__len__?   s    4;r   c                 8    t          | j                  | _        | S r
   iterr&   iteratorr   s    r   __iter__zPipelineIterator.__iter__B       T[))r   c                     t           j        t          j                  r' j         j                                     d          }n)i } j                                        D ]\  }}t          |t                    r|                                }t          |d         t          j                  rt           fd|D                       ||<   n>t          |d         t          j                  rt           fd|D                       ||<   |dv rt          |t                    rt          |d         t          j                  rt           fd|D                       ||<   n>t          |d         t          j                  rt           fd|D                       ||<   E|d||<   Nt          | j                 t          j                  r%| j                                     d          ||<   t          | j                 t          j                  r%t          j        | j                 d          ||<   | j                 ||<    j                            |          } xj        dz  c_        |S )	ze
        Return item located at `loader_batch_index` within the current `loader_batch_data`.
        r   c              3   X   K   | ]$}|j                                      d           V  %dS r   Nr)   	unsqueeze.0elr   s     r   	<genexpr>z5PipelineIterator.loader_batch_item.<locals>.<genexpr>U   ;      1n1n`b"T5M2N2X2XYZ2[2[1n1n1n1n1n1nr   c              3   X   K   | ]$}t          j        |j                 d           V  %dS r4   npexpand_dimsr)   r7   s     r   r:   z5PipelineIterator.loader_batch_item.<locals>.<genexpr>W   9      1t1tfh".DD\A]_`2a2a1t1t1t1t1t1tr   >   
attentionshidden_statespast_key_valuesc              3   X   K   | ]$}|j                                      d           V  %dS r4   r5   r7   s     r   r:   z5PipelineIterator.loader_batch_item.<locals>.<genexpr>\   r;   r   c              3   X   K   | ]$}t          j        |j                 d           V  %dS r4   r=   r7   s     r   r:   z5PipelineIterator.loader_batch_item.<locals>.<genexpr>^   r@   r   Nr%   )
isinstancer*   torchTensorr)   r6   itemsr   to_tupletupler>   ndarrayr?   	__class__)r   resultloader_batchedkelements   `    r   loader_batch_itemz"PipelineIterator.loader_batch_itemF   s    d-u|<< '	G,T-EFPPQRSSFF  N"5;;== J J
7g{33 %..00G!'!*el;; u,11n1n1n1nfm1n1n1n,n,nq))#GAJ
;; u,11t1t1t1tls1t1t1t,t,tq)JJJzZachOiOiJ!'!*el;; u,11n1n1n1nfm1n1n1n,n,nq))#GAJ
;; u,11t1t1t1tls1t1t1t,t,tq)?(,N1%%(@ A5<PP J )00H(I(S(STU(V(VN1%%(@ A2:NN J )+wt?W7XZ[(\(\N1%% )00H(IN1%% ,66~FFF  A%  r   c                    | j         $| j         | j        k     r|                                 S t          | j                  } | j        |fi | j        }| j        t          |t          j	                  r|}nMt          |t                    r	|d         }n/t          |                                          d         }||         }t          |t                    rt          |          }n|j        d         }d|cxk     r| j        k     r
n n|| _        t          |t                    r|d         n|| _        d| _         |                                 S |S )Nr   )r)   r(   rR   nextr/   r'   r   rF   rG   rH   rK   listkeysr   shaper*   )r   r   r   first_tensorkeyobserved_batch_sizes         r   __next__zPipelineIterator.__next__u   sd   #/D4LtOe4e4e ))+++ DM""DJt33t{33	!-)U\22 .(Iu-- .(|9>>++,,Q/(~,-- <&),&7&7##&2&8&;#&????)?????? *=&6@E6R6R&aillXaD#'(D$))+++ r   r
   )r   r   r    r   r   r0   rR   r[   r!   r   r   r#   r#      sf        %' %' %' %'N       - - -^" " " " "r   r#   c                   ,     e Zd Zd fd	Zd Zd Z xZS )PipelineChunkIteratorNc                 N    t                                          |||           dS )aI  
        Roughly equivalent to

        ```
        for iterator in loader:
            for item in iterator:
                yield infer(item, **params)
        ```

                Arguments:
                    loader (`torch.utils.data.DataLoader` or `Iterable`):
                        The iterator that will be used to apply `infer` on.
                    infer (any function):
                        The function to apply of each element of `loader`.
                    params (`dict`):
                        The parameters passed to `infer` along with every item
        N)superr   )r   r&   r'   r   r(   rM   s        r   r   zPipelineChunkIterator.__init__   s'    $ 	/////r   c                 F    t          | j                  | _        d | _        | S r
   )r.   r&   r/   subiteratorr   s    r   r0   zPipelineChunkIterator.__iter__   s     T[))r   c                 2   | j         +	  | j        t          | j                  fi | j        | _         	 t          | j                   }nN# t
          $ rA  | j        t          | j                  fi | j        | _         t          | j                   }Y nw xY w|S r
   )ra   r'   rT   r/   r   StopIteration)r   r   s     r   r[   zPipelineChunkIterator.__next__   s    #\)tz$t}*=*=MMMMD	/T-..II 	/ 	/ 	/  *tz$t}*=*=MMMMDT-..III	/ s   A	 	ABBr
   )r   r   r    r   r0   r[   __classcell__)rM   s   @r   r]   r]      s[        0 0 0 0 0 0(  
      r   r]   c                       e Zd ZdZd Zd ZdS )PipelinePackIteratora  
    Roughly equivalent to

    ```
    packed =  []
    for item in loader:
        packed.append(item)
        if item["is_last"]:
            yield packed
            packed = []
    ```

        but it also handles cases where `item` are batched (meaning it's a dict of Tensor with first dimension > 1. In
        that case it does

    ```
    packed =  []
    for batch in loader:
        # item is batched
        for item in batch:
            packed.append(item)
            if item["is_last"]:
                yield packed
                packed = []
    ```

        Arguments:
            loader (`torch.utils.data.DataLoader` or `Iterable`):
                The iterator that will be used to apply `infer` on.
            infer (any function):
                The function to apply of each element of `loader`.
            params (`dict`):
                The parameters passed to `infer` along with every item
            loader_batch_size (`int`, *optional*):
                If specified, the items of `loader` are supposed to come as batch, and are loader_batched here making
                it roughly behave as


    ```
    for items in loader:
        for i in loader_batch_size:
            item = items[i]
            yield infer(item, **params)
    ```c                 8    t          | j                  | _        | S r
   r-   r   s    r   r0   zPipelinePackIterator.__iter__   r1   r   c                    d}g }| j         r| j         | j        k     rb| j         | j        k     rR|                                 }|                    d          }|                    |           |r|S | j         | j        k     R|sg | j        t          | j                  fi | j        }| j        t          |t          j                  r|}n/t          |                                          d         }||         }t          |t                    rt          |          }n|j        d         }d|cxk     r| j        k     r
n n|| _        || _        d| _         | j         | j        k     rR|                                 }|                    d          }|                    |           |r|S | j         | j        k     Rn,|}|                    d          }|                    |           |g|S )NFis_lastr   )r)   r(   rR   popappendr'   rT   r/   r   rF   rG   rH   rU   rV   r   rW   r*   )r   ri   accumulatorr   r   rX   rY   rZ   s           r   r[   zPipelinePackIterator.__next__   s!    #/D4LtOe4e4e*T-CCC--//((9--""4((( '&& *T-CCC  	)"
4#6#6FF$+FFI%1i66 2#,LLy~~//003C#,S>LlD11 @*-l*;*;''*6*<Q*?'*CCCCT-CCCCCC .AD**3'+,(.1GGG1133D"hhy11G&&t,,, +** .1GGG !((9--""4(((7  	)8 r   N)r   r   r    __doc__r0   r[   r!   r   r   rf   rf      s=        + +Z  / / / / /r   rf   c                   *    e Zd ZdedefdZd Zd ZdS )
KeyDatasetr   rY   c                 "    || _         || _        d S r
   r   rY   )r   r   rY   s      r   r   zKeyDataset.__init__,  s    r   c                 *    t          | j                  S r
   r   r   s    r   r   zKeyDataset.__len__0  r   r   c                 2    | j         |         | j                 S r
   rq   r   r   s     r   r   zKeyDataset.__getitem__3  s    |Atx((r   Nr   r   r    r   strr   r   r   r!   r   r   ro   ro   +  sT         c    ! ! !) ) ) ) )r   ro   c                   .    e Zd ZdededefdZd Zd ZdS )KeyPairDatasetr   key1key2c                 0    || _         || _        || _        d S r
   r   ry   rz   )r   r   ry   rz   s       r   r   zKeyPairDataset.__init__8  s    				r   c                 *    t          | j                  S r
   r   r   s    r   r   zKeyPairDataset.__len__=  r   r   c                 d    | j         |         | j                 | j         |         | j                 dS )N)text	text_pairr|   rt   s     r   r   zKeyPairDataset.__getitem__@  s,    Q	2aQUQZA[\\\r   Nru   r!   r   r   rx   rx   7  s`         s #    
! ! !] ] ] ] ]r   rx   )numpyr>   rG   torch.utils.datar   r   utils.genericr   r   r#   r]   rf   ro   rx   r!   r   r   <module>r      si        5 5 5 5 5 5 5 5 ' ' ' ' ' '    g   @ @ @ @ @ @ @ @F* * * * *, * * *Za a a a a+ a a aH	) 	) 	) 	) 	) 	) 	) 	)
] 
] 
] 
] 
]W 
] 
] 
] 
] 
]r   