
    sg1                         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y)    N)DatasetIterableDataset   )ModelOutputc                       e Zd Zd Zd Zd Zy)PipelineDatasetc                 .    || _         || _        || _        y Ndatasetprocessparams)selfr   r   r   s       R/var/www/html/venv/lib/python3.12/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                 ^    | j                   |   } | j                  |fi | j                  }|S r
   r   )r   iitem	processeds       r   __getitem__zPipelineDataset.__getitem__   s.    ||A DLL55	r   N)__name__
__module____qualname__r   r   r    r   r   r   r      s    
!r   r   c                   ,    e Zd ZddZd Zd Zd Zd Zy)PipelineIteratorNc                 f    || _         || _        || _        |dk(  rd}|| _        d| _        d| _        y)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__   sA    6 
! $!2 $( "&r   c                 ,    t        | j                        S r
   )r   r&   r   s    r   r   zPipelineIterator.__len__?   s    4;;r   c                 :    t        | j                        | _        | S r
   iterr&   iteratorr   s    r   __iter__zPipelineIterator.__iter__B       T[[)r   c                     t         j                  t        j                        r* j                   j                     j                  d      }ni } j                  j                         D ]  \  }}t        |t              rz|j                         }t        |d   t        j                        rt         fd|D              ||<   n4t        |d   t        j                        rt         fd|D              ||<   |dv r{t        |t              rkt        |d   t        j                        rt         fd|D              ||<   n4t        |d   t        j                        rt         fd|D              ||<   |d||<   t        | j                     t        j                        r#| j                     j                  d      ||<   ct        | j                     t        j                        r(t        j                  | j                     d      ||<   | j                     ||<     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   Z   K   | ]"  }|j                      j                  d        $ ywr   Nr)   	unsqueeze.0elr   s     r   	<genexpr>z5PipelineIterator.loader_batch_item.<locals>.<genexpr>U   )     1n`b"T5M5M2N2X2XYZ2[1n   (+c              3   d   K   | ]'  }t        j                  |j                     d        ) ywr4   npexpand_dimsr)   r7   s     r   r:   z5PipelineIterator.loader_batch_item.<locals>.<genexpr>W   )     1tfh"..DD\D\A]_`2a1t   -0>   
attentionshidden_statespast_key_valuesc              3   Z   K   | ]"  }|j                      j                  d        $ ywr4   r5   r7   s     r   r:   z5PipelineIterator.loader_batch_item.<locals>.<genexpr>\   r;   r<   c              3   d   K   | ]'  }t        j                  |j                     d        ) ywr4   r>   r7   s     r   r:   z5PipelineIterator.loader_batch_item.<locals>.<genexpr>^   rA   rB   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||<,,T-E-EFPPQRSF  N"55;;= J
7g{3%..0G!'!*ell;,11nfm1n,nq)#GAJ

;,11tls1t,tq)JJzZachOi!'!*ell;,11nfm1n,nq)#GAJ

;,11tls1t,tq)?(,N1%(@(@ A5<<P )00H0H(I(S(STU(VN1%(@(@ A2::N )+wt?W?W7XZ[(\N1% )00H0H(IN1%=JB ,,66~FF  A% r   c                    | j                   )| j                   | j                  k  r| j                         S t        | j                        } | j
                  |fi | j                  }| j                  t        |t        j                        r|}n7t        |t              r|d   }n!t        |j                               d   }||   }t        |t              rt        |      }n|j                  d   }d|cxk  r| j                  k  r
n n|| _        t        |t              r|d   n|| _        d| _         | j                         S |S )Nr   )r)   r(   rT   nextr/   r'   r   rH   rI   rJ   rM   listkeysr   shaper*   )r   r   r   first_tensorkeyobserved_batch_sizes         r   __next__zPipelineIterator.__next__u   s'   ##/D4L4LtOeOe4e ))++ DMM"DJJt3t{{3	!!-)U\\2(Iu-(|9>>+,Q/(~,-&),&7#&2&8&8&;#&?)?)?? *=&6@E6RilXaD#'(D$))++ r   r
   )r   r   r    r   r   r0   rT   r]   r!   r   r   r#   r#      s    %'N -^"r   r#   c                   ,     e Zd Zd fd	Zd Zd Z xZS )PipelineChunkIteratorc                 (    t         |   |||       y)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(   rO   s        r   r   zPipelineChunkIterator.__init__   s    $ 	/r   c                 H    t        | j                        | _        d | _        | S r
   )r.   r&   r/   subiteratorr   s    r   r0   zPipelineChunkIterator.__iter__   s    T[[)r   c                 j   | j                   6	  | j                  t        | j                        fi | j                  | _         	 t        | j                         }|S # t
        $ rN  | j                  t        | j                        fi | j                  | _         t        | j                         }Y |S w xY wr
   )rc   r'   rV   r/   r   StopIteration)r   r   s     r   r]   zPipelineChunkIterator.__next__   s    #\)tzz$t}}*=MMD	/T--.I   	/  *tzz$t}}*=MMDT--.I	/s   A AB21B2r
   )r   r   r    r   r0   r]   __classcell__)rO   s   @r   r_   r_      s    0(
r   r_   c                       e Zd ZdZd Zd Zy)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                 :    t        | j                        | _        | S r
   r-   r   s    r   r0   zPipelinePackIterator.__iter__   r1   r   c                    d}g }| j                   | j                   | j                  k  ri| j                   | j                  k  rP| j                         }|j                  d      }|j	                  |       |r|S | j                   | j                  k  rP|se | j
                  t        | j                        fi | j                  }| j                   t        |t        j                        r|}n!t        |j                               d   }||   }t        |t              rt        |      }n|j                  d   }d|cxk  r| j                  k  r
n n|| _        || _        d| _         | j                   | j                  k  ru| j                         }|j                  d      }|j	                  |       |r|S | j                   | j                  k  rPn$|}|j                  d      }|j	                  |       |se|S )NFis_lastr   )r)   r(   rT   popappendr'   rV   r/   r   rH   rI   rJ   rW   rX   r   rY   r*   )r   rk   accumulatorr   r   rZ   r[   r\   s           r   r]   zPipelinePackIterator.__next__   s    ##/D4L4LtOeOe4e**T-C-CC--/((9-""4(&& **T-C-CC "

4#6F$++FI%%1i6#,Ly~~/03C#,S>LlD1*-l*;'*6*<*<Q*?'*CT-C-CC .AD**3'+,(..1G1GG113D"hhy1G&&t,** ..1G1GG !((9-""4(7 8 r   N)r   r   r    __doc__r0   r]   r!   r   r   rh   rh      s    +Z/r   rh   c                   (    e Zd ZdedefdZd Zd Zy)
KeyDatasetr   r[   c                      || _         || _        y r
   r   r[   )r   r   r[   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                 :    | j                   |   | j                     S r
   rs   r   r   s     r   r   zKeyDataset.__getitem__3  s    ||Atxx((r   Nr   r   r    r   strr   r   r   r!   r   r   rq   rq   +  s     c !)r   rq   c                   ,    e Zd ZdededefdZd Zd Zy)KeyPairDatasetr   key1key2c                 .    || _         || _        || _        y r
   r   r{   r|   )r   r   r{   r|   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                 t    | j                   |   | j                     | j                   |   | j                     dS )N)text	text_pairr~   rv   s     r   r   zKeyPairDataset.__getitem__@  s2    Q		2aQUQZQZA[\\r   Nrw   r!   r   r   rz   rz   7  s'     s # 
!]r   rz   )numpyr?   rI   torch.utils.datar   r   utils.genericr   r   r#   r_   rh   rq   rz   r!   r   r   <module>r      sd      5 'g @ @F*, *Za+ aH	) 	)
]W 
]r   