
    fTh1                         S SK rS SKrS SKJrJr  SSKJr   " S S\5      r " S S\5      r	 " S	 S
\	5      r
 " S S\	5      r " S S\5      r " S S\5      rg)    N)DatasetIterableDataset   )ModelOutputc                   &    \ rS rSrS rS rS rSrg)PipelineDataset   c                 (    Xl         X l        X0l        g Ndatasetprocessparams)selfr   r   r   s       W/var/www/auris/envauris/lib/python3.13/site-packages/transformers/pipelines/pt_utils.py__init__PipelineDataset.__init__	   s        c                 ,    [        U R                  5      $ r   lenr   r   s    r   __len__PipelineDataset.__len__       4<<  r   c                 ^    U R                   U   nU R                  " U40 U R                  D6nU$ r   r   )r   iitem	processeds       r   __getitem__PipelineDataset.__getitem__   s,    ||ALL55	r   )r   r   r   N)__name__
__module____qualname____firstlineno__r   r   r    __static_attributes__ r   r   r   r      s    
!r   r   c                   6    \ rS rSrS	S jrS rS rS rS rSr	g)
PipelineIterator   Nc                 `    Xl         X l        X0l        US:X  a  SnX@l        SU l        SU l        g)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   PipelineIterator.__init__   s9    6 
! $!2 $( "&r   c                 ,    [        U R                  5      $ r   )r   r-   r   s    r   r   PipelineIterator.__len__?   s    4;;r   c                 :    [        U R                  5      U l        U $ r   iterr-   iteratorr   s    r   __iter__PipelineIterator.__iter__B       T[[)r   c                 0  ^  [        T R                  [        R                  5      (       a*  T R                  T R                     R                  S5      nGO,0 nT R                  R                  5        GH  u  p4[        U[        5      (       a  UR                  5       n[        US   [        R                  5      (       a  [        U 4S jU 5       5      X#'   O9[        US   [        R                  5      (       a  [        U 4S jU 5       5      X#'   M  US;   a  [        U[        5      (       av  [        US   [        R                  5      (       a  [        U 4S jU 5       5      X#'   O9[        US   [        R                  5      (       a  [        U 4S jU 5       5      X#'   GM1  Uc  SX#'   GM;  [        UT R                     [        R                  5      (       a#  UT R                     R                  S5      X#'   GM  [        UT R                     [        R                  5      (       a)  [        R                  " UT R                     S5      X#'   GM  UT R                     X#'   GM     T R                  R                  U5      nT =R                  S-  sl        U$ )	zU
Return item located at `loader_batch_index` within the current `loader_batch_data`.
r   c              3   ^   >#    U  H"  oTR                      R                  S 5      v   M$     g7fr   Nr0   	unsqueeze.0elr   s     r   	<genexpr>5PipelineIterator.loader_batch_item.<locals>.<genexpr>U   ,     1nfm`bT5M5M2N2X2XYZ2[2[fm   *-c              3   l   >#    U  H)  n[         R                  " UTR                     S 5      v   M+     g7fr>   npexpand_dimsr0   rA   s     r   rD   rE   W   .     1tlsfh"..DD\D\A]_`2a2als   14>   
attentionshidden_statespast_key_valuesc              3   ^   >#    U  H"  oTR                      R                  S 5      v   M$     g7fr>   r?   rA   s     r   rD   rE   \   rF   rG   c              3   l   >#    U  H)  n[         R                  " UTR                     S 5      v   M+     g7fr>   rI   rA   s     r   rD   rE   ^   rL   rM   Nr,   )
isinstancer1   torchTensorr0   r@   itemsr   to_tupletuplerJ   ndarrayrK   	__class__)r   resultloader_batchedkelements   `    r   loader_batch_item"PipelineIterator.loader_batch_itemF   s    d--u||<<,,T-E-EFPPQRSF  N"55;;=
g{33%..0G!'!*ell;;,11nfm1n,n)#GAJ

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

;;,11tls1t,t)?(,N%(@(@ A5<<PP )00H0H(I(S(STU(VN%(@(@ A2::NN )+wt?W?W7XZ[(\N% )00H0H(IN%= >B ,,66~FF  A% r   c                    U R                   b*  U R                   U R                  :  a  U R                  5       $ [        U R                  5      nU R
                  " U40 U R                  D6nU R                  b  [        U[        R                  5      (       a  UnO;[        U[        5      (       a  US   nO [        UR                  5       5      S   nX$   n[        U[        5      (       a  [        U5      nOUR                  S   nSUs=:  a  U R                  :  a	  O  OXPl        [        U[        5      (       a  US   OUU l        SU l         U R                  5       $ U$ )Nr   )r0   r/   r_   nextr8   r.   r   rS   rT   rU   rX   listkeysr   shaper1   )r   r   r   first_tensorkeyobserved_batch_sizes         r   __next__PipelineIterator.__next__u   s-   ##/D4L4LtOeOe4e ))++ DMM"JJt3t{{3	!!-)U\\22(Iu--(|9>>+,Q/(~,--&),&7#&2&8&8&;#&?)?)?? *=&6@E6R6RilXaD#'(D$))++ r   )r1   r0   r.   r8   r-   r/   r   r   )
r"   r#   r$   r%   r   r   r9   r_   ri   r&   r'   r   r   r)   r)      s    %'N -^"r   r)   c                   8   ^  \ rS rSrSU 4S jjrS rS rSrU =r$ )PipelineChunkIterator   c                 &   > [         TU ]  XU5        g)a  
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/   rZ   s        r   r   PipelineChunkIterator.__init__   s    $ 	/r   c                 H    [        U R                  5      U l        S U l        U $ r   )r7   r-   r8   subiteratorr   s    r   r9   PipelineChunkIterator.__iter__   s    T[[)r   c                 n   U R                   c6   U R                  " [        U R                  5      40 U R                  D6U l          [        U R                   5      nU$ ! [
         aN    U R                  " [        U R                  5      40 U R                  D6U l         [        U R                   5      n U$ f = fr   )rr   r.   rb   r8   r   StopIteration)r   r   s     r   ri   PipelineChunkIterator.__next__   s    #\#zz$t}}*=MMD	/T--.I   	/  $zz$t}}*=MMDT--.I	/s   A AB43B4)r8   rr   r   )	r"   r#   r$   r%   r   r9   ri   r&   __classcell__)rZ   s   @r   rl   rl      s    0(
 r   rl   c                   $    \ rS rSrSrS rS rSrg)PipelinePackIterator   ah  
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                 :    [        U R                  5      U l        U $ r   r6   r   s    r   r9   PipelinePackIterator.__iter__   r;   r   c                 H   Sn/ nU R                   b  U R                   U R                  :  aq  U R                   U R                  :  aW  U R                  5       nUR                  S5      nUR	                  U5        U(       a  U$ U R                   U R                  :  a  MW  U(       Gd}  U R
                  " [        U R                  5      40 U R                  D6nU R                  Gb  [        U[        R                  5      (       a  UnO [        UR                  5       5      S   nXF   n[        U[        5      (       a  [        U5      nOUR                  S   nSUs=:  a  U R                  :  a	  O  OXpl        X@l        SU l         U R                   U R                  :  aW  U R                  5       nUR                  S5      nUR	                  U5        U(       a  U$ U R                   U R                  :  a  MW  O$UnUR                  S5      nUR	                  U5        U(       d  GM}  U$ )NFis_lastr   )r0   r/   r_   popappendr.   rb   r8   r   rS   rT   rU   rc   rd   r   re   r1   )r   r~   accumulatorr   r   rf   rg   rh   s           r   ri   PipelinePackIterator.__next__   s    ##/D4L4LtOeOe4e**T-C-CC--/((9-""4(&& **T-C-CC 

4#6F$++FI%%1i66#,Ly~~/03C#,>LlD11*-l*;'*6*<*<Q*?'*CT-C-CC .A**3'+,(..1G1GG113D"hhy1G&&t,** ..1G1GG !((9-""4(7 '8 r   )r1   r0   r8   r/   N)r"   r#   r$   r%   __doc__r9   ri   r&   r'   r   r   ry   ry      s    +Z/r   ry   c                   2    \ rS rSrS\S\4S jrS rS rSr	g)	
KeyDataseti+  r   rg   c                     Xl         X l        g r   r   rg   )r   r   rg   s      r   r   KeyDataset.__init__,  s    r   c                 ,    [        U R                  5      $ r   r   r   s    r   r   KeyDataset.__len__0  r   r   c                 :    U R                   U   U R                     $ r   r   r   r   s     r   r    KeyDataset.__getitem__3  s    ||Atxx((r   r   N
r"   r#   r$   r%   r   strr   r   r    r&   r'   r   r   r   r   +  s     c !)r   r   c                   6    \ rS rSrS\S\S\4S jrS rS rSr	g	)
KeyPairDataseti7  r   key1key2c                 (    Xl         X l        X0l        g r   r   r   r   )r   r   r   r   s       r   r   KeyPairDataset.__init__8  s    		r   c                 ,    [        U R                  5      $ r   r   r   s    r   r   KeyPairDataset.__len__=  r   r   c                 t    U R                   U   U R                     U R                   U   U R                     S.$ )N)text	text_pairr   r   s     r   r    KeyPairDataset.__getitem__@  s2    Q		2aQUQZQZA[\\r   r   Nr   r'   r   r   r   r   7  s'     s # 
!]r   r   )numpyrJ   rT   torch.utils.datar   r   utils.genericr   r   r)   rl   ry   r   r   r'   r   r   <module>r      sd      5 'g @ @F*, *Za+ aH	) 	)
]W 
]r   