
    ϑi8                       S SK Jr  S SKrS SKrS SKrS SKrS SKJrJr  S SK	r
S SKrSSKJr  SSKJrJrJr  SS	KJrJr  SS
KJr  \(       a  S SKJr   " S S5      r " S S5      r " S S5      r " S S5      rSqS#S jr " S S5      r " S S5      r Sr!Sr"Sr#Sr$Sr%Sr&\
RN                  " \
RP                  5      RR                  S-  S-  r*S r+S$S! jr, S%S" jr-g)&    )annotationsN)TYPE_CHECKINGAny   )core   )MP_STATUS_CHECK_INTERVALCleanupFuncRegistrar_cleanup_mmap   )_IterableDatasetFetcher_MapDatasetFetcher)_flatten_batch)Datasetc                      \ rS rSrS rSrg)_IterableDatasetStopIteration'   c                    Xl         g N	worker_id)selfr   s     [/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/io/dataloader/worker.py__init__&_IterableDatasetStopIteration.__init__(   s    "    r   N)__name__
__module____qualname____firstlineno__r   __static_attributes__ r   r   r   r   '   s    #r   r   c                      \ rS rSrSrg)_ResumeIteration,   r"   N)r   r   r   r    r!   r"   r   r   r$   r$   ,   s    r   r$   c                  ,    \ rS rSrSrSr\S 5       rSrg)_DatasetKind0   r   r   c                    U [         R                  :X  a  [        XX45      $ U [         R                  :X  a  [	        XX45      $ [        SU  35      e)Nzunknown Dataset kind )r'   MAPr   ITERr   NotImplementedError)kinddatasetauto_collate_batch
collate_fn	drop_lasts        r   create_fetcher_DatasetKind.create_fetcher4   s[     <###%Z  \&&&*Z  &(=dV&DEEr   r"   N)	r   r   r   r    r*   r+   staticmethodr2   r!   r"   r   r   r'   r'   0   s     
CDF Fr   r'   c                       \ rS rSrS rS rSrg)ParentWatchDogD   c                F    [         R                  " 5       U l        SU l        g NT)osgetppid_parent_pid_parent_aliver   s    r   r   ParentWatchDog.__init__E   s    ::<!r   c                    U R                   (       a'  [        R                  " 5       U R                  :H  U l         U R                   $ r   )r=   r:   r;   r<   r>   s    r   is_aliveParentWatchDog.is_aliveI   s0    !#1A1A!AD!!!r   )r=   r<   N)r   r   r   r    r   rA   r!   r"   r   r   r6   r6   D   s    ""r   r6   
WorkerInfoc                     [         $ )a!  
Get DataLoader worker process information function, this function is
used to split data copy in worker process for IterableDataset
(see :code:`paddle.io.IterableDataset`), worker information contains
following fields:

:attr:`num_workers`: total worker process number, see `paddle.io.DataLoader`

:attr:`id`: the worker process id, count from 0 to :attr:`num_workers - 1`

:attr:`dataset`: the dataset object in this worker process

Returns:
    WorkerInfo: an instance of WorkerInfo which contains fields above.

Notes:
    For more usage and examples, please see :code:`paddle.io.IterableDataset`

Example:

    .. code-block:: python

        >>> import math
        >>> import paddle
        >>> import numpy as np
        >>> from paddle.io import IterableDataset, DataLoader, get_worker_info

        >>> class SplitedIterableDataset(IterableDataset): # type: ignore[type-arg]
        ...     def __init__(self, start, end):
        ...         self.start = start
        ...         self.end = end
        ...
        ...     def __iter__(self):
        ...         worker_info = get_worker_info()
        ...         if worker_info is None:
        ...             iter_start = self.start
        ...             iter_end = self.end
        ...         else:
        ...             per_worker = int(
        ...                 math.ceil((self.end - self.start) / float(
        ...                     worker_info.num_workers)))
        ...             worker_id = worker_info.id
        ...             iter_start = self.start + worker_id * per_worker
        ...             iter_end = min(iter_start + per_worker, self.end)
        ...
        ...         for i in range(iter_start, iter_end):
        ...             yield np.array([i])
        ...
        >>> place = paddle.CPUPlace()
        >>> dataset = SplitedIterableDataset(start=2, end=9)
        >>> dataloader = DataLoader(
        ...     dataset,
        ...     places=place,
        ...     num_workers=2,
        ...     batch_size=1,
        ...     drop_last=True)
        ...
        >>> for data in dataloader:
        ...     print(data) # doctest: +SKIP("The output depends on the environment.")
        Tensor(shape=[1, 1], dtype=int64, place=Place(cpu), stop_gradient=True,
        [[2]])
        Tensor(shape=[1, 1], dtype=int64, place=Place(cpu), stop_gradient=True,
        [[6]])
        Tensor(shape=[1, 1], dtype=int64, place=Place(cpu), stop_gradient=True,
        [[3]])
        Tensor(shape=[1, 1], dtype=int64, place=Place(cpu), stop_gradient=True,
        [[7]])
        Tensor(shape=[1, 1], dtype=int64, place=Place(cpu), stop_gradient=True,
        [[4]])
        Tensor(shape=[1, 1], dtype=int64, place=Place(cpu), stop_gradient=True,
        [[8]])
        Tensor(shape=[1, 1], dtype=int64, place=Place(cpu), stop_gradient=True,
        [[5]])

)_worker_infor"   r   r   get_worker_inforF   T   s    X r   c                  \   ^  \ rS rSr% S\S'   S\S'   S\S'   S\S'   SrS	 rU 4S
 jrSrU =r	$ )rC      intnum_workersidzDataset[Any]r.   seedFc                \    UR                  5        H  u  p#[        XU5        M     SU l        g r9   )itemssetattr_WorkerInfo__initialized)r   kwargskvs       r   r   WorkerInfo.__init__   s&    LLNDADQ #!r   c                   > U R                   (       a#  [        SU R                  R                   S35      e[        TU ]  X5      $ )NzCannot assign attributes to z objects)rP   RuntimeError	__class__r   super__setattr__)r   keyvalrW   s      r   rY   WorkerInfo.__setattr__   sB    .t~~/F/F.GxP  w"3,,r   )__initialized)
r   r   r   r    __annotations__rP   r   rY   r!   __classcell__)rW   s   @r   rC   rC      s-    G
IM"
- -r   c                  $    \ rS rSrSS jrS rSrg)_WorkerException   Nc                    Xl         U=(       d    [        R                  " 5       nUS   U l        SR	                  [
        R                  " U6 5      U l        g )Nr    )r   sysexc_infoexc_typejoin	tracebackformat_exceptionexc_msg)r   r   rf   s      r   r   _WorkerException.__init__   s=    "-s||~ wwy998DEr   c                    SU R                    SU R                  R                   SU R                   3n[	        U R                  SS 5      (       a  U R                  US9eU R                  U5      e)NzDataLoader worker(z	) caught z with message:
message)rn   )r   rg   r   rk   getattr)r   msgs     r   reraise_WorkerException.reraise   sf    "4>>"2)DMM<R<R;SScdhdpdpcqr4==)T22---,,mmC  r   )rk   rg   r   r   )r   r   r   r    r   rq   r!   r"   r   r   ra   ra      s    F!r   ra   iװCl   u=& l   y iXl   y isI   l    c           	       ^ [         m[        nU4S jnS nX[        -  U S-	  S/nU Vs/ s H
  oc" U5      PM     nn[        [	        U5      5       H:  n[        [	        U5      5       H  n	X:w  d  M
  U" Xy   U" Xx   5      5      Xy'   M!     M<     / n
U HL  nX-  [        -  nU[
        -  [        -  nX-  [        -  nX[        -	  -  [        -  nU
R                  U5        MN     U
$ s  snf )Nc                |   > U T-  [         -  n T[        -  [         -  mU T-  [         -  n X [        -	  -  [         -  n U $ r   )MASK32MULT_AXSHIFT)valuehash_const_As    r   hash_generate_states.<locals>.hash   sF    %/$v-7%/6/*f4r   c                    [         U -  [        -  n[        U-  [        -  nX#-
  [        -  nXD[        -	  -  [        -  nU$ r   )
MIX_MULT_Lrv   
MIX_MULT_Rrx   )xyresult_xresult_yresults        r   mix_generate_states.<locals>.mix   sB    Nf,Nf,%/f,-7r       r   )INIT_AINIT_Brv   rangelenMULT_Brx   append)	base_seedr   hash_const_Br{   r   	entropiesentropypoolijstatespstaterz   s                @r   _generate_statesr      s    LL .	RCI)23gDMD3 3t9s4y!AvdgtDG}5 " 
 F!V+$v-7%/6/*f4e  M! 4s   C%c                    [         R                  " [        5        [        R                  " 5         [        R
                  " U5         SS KnSS KnX-   nUR                  U5        [        R                  " U5        UR                  R                  [        X5      5        [        U	U
U US9qS n Ub  U" U	5        [        R                  XXVU5      nSn[#        5       nUR%                  5       (       Ga   UR'                  [(        5      n[/        U[0        5      (       a/  UR3                  US S 45        Sn[        R                  XXVS5      nMp  Uc%  UR5                  5       (       d  U(       d   S5       eGOFUR5                  5       (       d  U(       a  M  Uu  nn Ub  UnS nOT[        R6                  R8                  R;                  [        R<                  " 5       S9   WR?                  U5      nS S S 5        [/        W[         5      (       a  UR3                  UUS 45        [A        U5      u  nnU(       a[  S nU Vs/ s H6  n[/        UWRB                  5      (       a  U" U5      OURE                  5       PM8     nnUR3                  UUU45        OUR3                  UUU45         UR%                  5       (       a  GM  U(       a
  [        5         UR5                  5       (       a!  URQ                  5         URS                  5         g g ! [         a     GNpf = f!   [!        U	5      n GNS= f! [*        R,                   a     GMb  f = f! , (       d  f       GN]= fs  snf ! [F         as  n[/        U[H        5      (       a6  U[        RJ                  :X  a"  UR3                  [M        U	5      5        Sn S nAGNUR3                  U[!        U	5      S 45         S nAGN/S nAff = f! [N         a     GN,  e = f! U(       a  [        5         f f = f)Nr   )rK   rJ   r.   rL   FTz#get None when worker done_event set)placec                z    [         R                  " 5       nUR                  U [         R                  " 5       5        U$ r   )r   DenseTensorsetCPUPlace)arr	lodtensors     r   numpy2lodtensor%_worker_loop.<locals>.numpy2lodtensor  s*    $($4$4$6	!c4==?;((r   )*r
   registerr   r   _set_process_signal_handler(_set_max_memory_map_allocation_pool_sizerandomnumpyrL   paddler   ImportErrorrC   rE   r'   r2   ra   r6   rA   getr	   queueEmpty
isinstancer$   putis_setbasedygraphguardr   fetchr   ndarray
get_tensor	ExceptionStopIterationr+   r   KeyboardInterruptcancel_join_threadclose)r.   dataset_kindindices_queue	out_queue
done_eventr/   r0   r1   init_fnr   rJ   use_shared_memoryr   shm_cache_sizer   nprL   init_exceptionfetcheriterator_drainedparent_watch_dogdataidxindicesbatch	structurer   btensor_listes                                 r   _worker_loopr     s    z
 	%%m4 	((*55nE
	C (DKKKKIINN+IAB "#	
 	9"	""11'9yG !)+''))$(()AB $ 011tT401#( &55 +=4  |!((**.> 9>    ""&6LC*;!-*E%)N  ,,229J2K 'g 6 L e%566MM3t"45#1%#8 y$) "'# "'A  *!RZZ88 ,A.!"0 "'   # MM3Y"?@MM3y"9:I ''))V O$$& U  		.	9-i8N ;; B LK,#)  Lq-00$(9(99MM"?	"JK'+$MM3(8(CT"JKKL>  O s   AO L AO ."L "O 3L& A*O 2O+ 4#O AM M,M 4AO 9=M6AO 
LO LO L# O &L?:O >L??O 
MM O 
O#AO(O .OO OO 
O(#O+ &O((O+ +O?)returnrC   )r   r   )r   ).
__future__r   r:   r   re   ri   typingr   r   r   r   r   	frameworkr   multiprocess_utilsr	   r
   r   r   r   r   flatr   	paddle.ior   r   r$   r'   r6   rE   rF   rC   ra   r   rw   r   r   r~   r   dtypeuint32itemsizerx   rv   r   r   r"   r   r   <module>r      s    # 	  
  %    
 A  !# #
	 	F F(" " L^- -*! !\ 
			

	"))		%	%	)Q	.	&n Mr   