
    Pi                     v   d dl Z d dlmZmZmZmZmZmZ d dlZ	d dl
mZ d dlmZ d dlmZ ddlmZ  G d d	ee         e          Z G d
 dee                   Z G d deee                  e          Z G d de	j        j        j        j                  Z G d de	j        j        j        j                  ZdS )    N)AnyDictIteratorListOptionalSized)Dataset)_InfiniteConstantSampler)Sampler   )Statefulc                   \    e Zd ZdZdZd Zd Zdee         fdZ	d Z
defdZd	edd
fdZd
S )_StatefulRandomSamplerIterator	generatoryieldedc                 4   || _         | j         j                                        | _        d| _        d | _        t          |j                  | _        |j	        | _	        |j
        | _
        d| _        |                                 | _        d| _        d| _        d S )Nr       )samplerr   	get_stategenerator_stater   next_yieldedlendata_sourcenreplacementnum_samples
chunk_size	_get_permperm
perm_indexchunk_index)selfr   s     y/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torchdata/stateful_dataloader/sampler.py__init__z'_StatefulRandomSamplerIterator.__init__   s    #|5??AA W())".".#~~//	    c                     | S N r"   s    r#   __iter__z'_StatefulRandomSamplerIterator.__iter__#   s    r%   returnc                    | j         rIt          j        | j        | j        ft          j        | j        j                                                  S t          j	        | j        | j        j                                                  S )N)highsizedtyper   )r   )
r   torchrandintr   r   int64r   r   tolistrandpermr)   s    r#   r   z(_StatefulRandomSamplerIterator._get_perm&   sv     	U=Vo'k,0	  
 fhh >$&DL4JKKKRRTTTr%   c                     | j         | j        k    rt                      | j        t	          | j                  k    r |                                 | _        d| _        | j        | j                 }| xj        dz  c_        | xj         dz  c_         |S Nr   r   )r   r   StopIterationr    r   r   r   )r"   vals     r#   __next__z'_StatefulRandomSamplerIterator.__next__1   s|    <4+++//!?c$)nn,,((DIDOi(1
r%   c                 6    | j         | j        | j        | j        iS r'   )_YIELDEDr   
_GENERATORr   r)   s    r#   
state_dictz)_StatefulRandomSamplerIterator.state_dict<   s    M4<OT1
 	
r%   r=   Nc                 L   || j                  | _        || j                 | _        | j        j                            | j                   | j        T|                                 | _        t          | j                  D ]}t          |            | j        | _        d | _        d S d S r'   )r;   r   r<   r   r   r   	set_stater   r   rangenextr   r"   r=   _s      r#   load_state_dictz._StatefulRandomSamplerIterator.load_state_dictB   s    &t}5)$/:(()=>>>(((DI4,--  T



,DL $D )(r%   )__name__
__module____qualname__r<   r;   r$   r*   r   intr   r9   dictr=   rD   r(   r%   r#   r   r      s        JH    	U49 	U 	U 	U 	U	 	 	
D 
 
 
 

%$ 
%4 
% 
% 
% 
% 
% 
%r%   r   c            	       z    e Zd Z	 	 	 ddededee         ddfdZedefd            Z	de
e         fd	Zdefd
ZdS )RandomSamplerFNr   r   r   r+   c                    || _         || _        || _        |yt          t	          j        dt          j                                                                                            }t	          j	                    }|
                    |           || _        t          | j        t                    st          d| j                   t          | j        t                    r| j        dk    rt!          d| j                   d S )Nr(   )r/   z;replacement should be a boolean value, but got replacement=r   zDnum_samples should be a positive integer value, but got num_samples=)r   r   _num_samplesrH   r0   emptyr2   random_item	Generatormanual_seedr   
isinstancebool	TypeErrorr   
ValueError)r"   r   r   r   r   seeds         r#   r$   zRandomSampler.__init__P   s     '&'u{2U[999AACCHHJJKKD))I!!$'''"$*D11 	nlZ^Zjllmmm$*C00 	xD4D4I4Ivdhdtvvwww 5J4Ir%   c                 F    | j         t          | j                  S | j         S r'   )rM   r   r   r)   s    r#   r   zRandomSampler.num_samplese   s'     $t'(((  r%   c                      t          |           S r'   )r   r)   s    r#   r*   zRandomSampler.__iter__l   s    -d333r%   c                     | j         S r'   )r   r)   s    r#   __len__zRandomSampler.__len__o   s    r%   )FNN)rE   rF   rG   r   rT   r   rH   r$   propertyr   r   r*   r[   r(   r%   r#   rK   rK   O   s         "%)x xx x c]	x 
x x x x* !S ! ! ! X!4(3- 4 4 4 4             r%   rK   c                       e Zd ZdZdZdZdedefdZde	e         fdZ
deeef         fd	Zd
eeef         ddfdZddZdS )_BatchSamplerIteratorsamples_yieldedsampler_statesampler_iter_state
batch_size	drop_lastc                 p    || _         t          | j                   | _        || _        || _        d| _        d S Nr   )r   itersampler_iterrb   rc   r_   )r"   r   rb   rc   s       r#   r$   z_BatchSamplerIterator.__init__x   s7     ..$" r%   r+   c                    g }	 t          | j                  D ]9}|                    t          | j                             | xj        dz  c_        :|S # t          $ r& | j        st          |          dk    rt          |cY S w xY w)Nr   r   )	r@   rb   appendrA   rg   r_   r7   rc   r   )r"   batchrC   s      r#   r9   z_BatchSamplerIterator.__next__   s    		4?++ * *T$"344555$$)$$$L 	 	 	~ Uq##		s   AA -BBc                    | j         | j        i}t          | j        t                    r!| j                                        || j        <   t          | j        t                    r!| j                                        || j        <   |S r'   )	_SAMPLES_YIELDEDr_   rS   r   r   r=   _SAMPLER_STATErg   _SAMPLER_ITER_STATE)r"   sds     r#   r=   z _BatchSamplerIterator.state_dict   sy    "3T5IJdlH-- 	@&*l&=&=&?&?Bt"#d'22 	J+/+<+G+G+I+IBt'(	r%   r=   Nc                    || j                  | _        | j        |v rAt          | j        t
                    sJ | j                            || j                            t          | j                  | _        | j	        |v rAt          | j        t
                    sJ | j                            || j	                            t          | j        t
                    s_t          | j        t
                    sGt          | j        t                    s/t          | j                  D ]}t          | j                   d S d S d S d S r'   )rl   r_   rm   rS   r   r   rD   rf   rg   rn   r
   r@   rA   rB   s      r#   rD   z%_BatchSamplerIterator.load_state_dict   sK   )$*?@*,,dlH55555L((D4G)HIII ..#z11d/:::::--j9Q.RSSS4<22 	(jART\6]6] 	(gqL2h
 h
 	( 4/00 ( (T&''''	( 	( 	( 	( 	( 	(( (r%   c                     t          | j        t                    r0t          | j        d          r| j                                         d S d S d S )Nupdate_state_dict)rS   rg   r   hasattrrr   r)   s    r#   rr   z'_BatchSamplerIterator.update_state_dict   s[    d'22 	2wt?PRe7f7f 	2//11111	2 	2 	2 	2r%   )r+   N)rE   rF   rG   rl   rm   rn   rH   rT   r$   listr9   r   strr   r=   rD   rr   r(   r%   r#   r^   r^   s   s        ($N.!C !D ! ! ! !$s)    DcN    ($sCx. (T ( ( ( ("2 2 2 2 2 2r%   r^   c                   $     e Zd Z fdZd Z xZS )BatchSamplerc                 N    t                                          |||           d S r'   )superr$   )r"   r   rb   rc   	__class__s       r#   r$   zBatchSampler.__init__   s%    *i88888r%   c                 D    t          | j        | j        | j                  S )N)r   rb   rc   )r^   r   rb   rc   r)   s    r#   r*   zBatchSampler.__iter__   s(    $Ln
 
 
 	
r%   )rE   rF   rG   r$   r*   __classcell__rz   s   @r#   rw   rw      sG        9 9 9 9 9
 
 
 
 
 
 
r%   rw   c                        e Zd ZdZ	 	 	 	 	 ddedee         dee         d	ed
ededdf fdZ fdZ	de
eef         fdZde
eef         ddfdZ xZS )StatefulDistributedSamplerr   NTr   Fdatasetnum_replicasrankshufflerW   rc   r+   c                 p    t                                          ||||||           d| _        d | _        d S re   )ry   r$   r   r   )r"   r   r   r   r   rW   rc   rz   s          r#   r$   z#StatefulDistributedSampler.__init__   s<     	,gtYOOO r%   c              #      K   d| _         | j        | j        | _         d | _        t                                                      }t	          j        || j         d           D ]}| xj         dz  c_         |V  d S r6   )r   r   ry   r*   	itertoolsislice)r"   itidxrz   s      r#   r*   z#StatefulDistributedSampler.__iter__   s      (,DL $DWW#Bd;; 	 	CLLALLIIII	 	r%   c                     | j         | j        iS r'   )r;   r   r)   s    r#   r=   z%StatefulDistributedSampler.state_dict   s    t|,,r%   r=   c                     | j         |vrt          d          || j                  dk     rt          d          || j                  | _        d S )NzInvalid state_dictr   z2Cannot load state_dict with negative yielded value)r;   rV   r   )r"   r=   s     r#   rD   z*StatefulDistributedSampler.load_state_dict   sT    =
**1222dm$q((QRRR&t}5r%   )NNTr   F)rE   rF   rG   r;   r	   r   rH   rT   r$   r*   r   ru   r   r=   rD   r|   r}   s   @r#   r   r      s
       H
 '+"! !! sm! sm	!
 ! ! ! 
! ! ! ! ! !    -DcN - - - -6$sCx. 6T 6 6 6 6 6 6 6 6r%   r   )r   typingr   r   r   r   r   r   torch.utils.data.samplerr0   torch.utils.datar	   torch.utils.data.dataloaderr
   r   statefulr   rH   r   rK   rt   r^   utilsdatar   rw   distributedDistributedSamplerr   r(   r%   r#   <module>r      s       = = = = = = = = = = = = = = = =     $ $ $ $ $ $ @ @ @ @ @ @ , , , , , ,      :% :% :% :% :%Xc]H :% :% :%z!  !  !  !  ! GCL !  !  ! H42 42 42 42 42HT#Y/ 42 42 42n	
 	
 	
 	
 	
5;#+8 	
 	
 	
"6 "6 "6 "6 "6!1!=!P "6 "6 "6 "6 "6r%   