
    ϑi:                     <    S SK r S SKJrJr  S SKrS SKrSrS rS r	g)    N)MappingSequence_paddle_field_c                    ^ U4S jm[        U [        5      (       d  / nT" U /U/ S5      u  p#XS   4$ / nT" X/ S5      u  p#X4$ )a  
For lod_blocking_queue only receive tensor array, flatten batch
data, extract numpy.array data out as a list of numpy.array to
send to lod_blocking_queue, and save the batch data structure
such as fields in other types (str, int, etc) or key-value map
of dictionaries
c                 r  > [        U [        5      (       GaS  U  GHI  n[        U[        R                  [        R
                  [        R                  R                  R                  R
                  45      (       a1  UR                  [         U 35        UR                  U5        US-  nM  [        U[        [        [        R                  45      (       a  UR                  U5        M  [        U[        5      (       a   T" XA/ U5      u  pSUR                  U5        GM  [        U[        5      (       a   T" XA0 U5      u  pSUR                  U5        GM8  UR                  U5        GML     X#4$ [        U [        5      (       Ga!  U R!                  5        GH	  u  pd[        U[        R                  [        R
                  [        R                  R                  R                  R
                  45      (       a$  [         U 3X&'   UR                  U5        US-  nM  [        U[        [        [        R                  45      (       a  XBU'   M  [        U[        5      (       a  T" XA/ U5      u  pSXRU'   M  [        U[        5      (       a  T" XA0 U5      u  pSXRU'   GM  XBU'   GM     X#4$ [#        S[%        U 5       35      e)N   wrong flat data type: )
isinstancer   npndarraypaddleTensorbasecoreeagerappendFIELD_PREFIXstrbytesnumbersNumberr   items	TypeErrortype)batch
flat_batch	structure	field_idxfieldfield_structk_flattens          Y/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/io/dataloader/flat.pyr"    _flatten_batch.<locals>._flatten"   sD   eX&&ZZ0@0@0F0F0M0MN  $$~i[%AB%%e,NIUGNN'CDD$$U+x00.62y/+L $$\2w//.62y/+L $$\2$$U++ ` ##5 w''!KKMZZ0@0@0F0F0M0MN  '3^I;#?IL%%e,NIUGNN'CDD#(aLx00.62y/+L $0aLw//.62y/+L $0aL#(aL+ *2 ## 4T%[MBCC    r   )r
   r   )r   r   r   _r"   s       @r#   _flatten_batchr'      s\    2$j eX&&
R;	Q<''JEr15LI  r%   c                 &  ^ ^ UU 4S jm[        T [        5      (       d   S5       e[        T 5      S:X  a  U$ [        U[        [        45      (       a  U[
         S 3:X  d
   SU 35       eT S   $ T" US5      nUS-   [        T 5      :X  d   S5       eU$ )z
After reading list of Tensor data from lod_blocking_queue outputs,
use this function to restore the batch data structure, replace
:attr:`_paddle_field_x` with data from flat_batch
c                   > [        U [        5      (       a  [        U 5       H  u  p#[        U[        5      (       a_  UR	                  [
        5      (       aE  [        UR                  [
        S5      5      n[        X5      nTU   c   S5       eTU   X'   S TU'   My  [        U[        [        [        R                  45      (       a  M  [        U[        [        45      (       d  M  T" X   U5      nM     U$ [        U [        5      (       a  U R                  5        H  u  pS[        U[        5      (       a_  UR	                  [
        5      (       aE  [        UR                  [
        S5      5      n[        X5      nTU   c   S5       eTU   X'   S TU'   My  [        U[        [        [        R                  45      (       a  M  [        U[        [        45      (       d  M  T" X   U5      nM     U$ [        S[        U 5       35      e)N z flat_batch[{}] parsed repeatedlyr	   )r
   r   	enumerater   
startswithr   intreplacemaxr   r   r   r   r   r   r   )r   r   ir   cur_field_idxr!   _restorer   s         r#   r2    _restore_batch.<locals>._restoreg   s   i**%i0eS))e.>.>|.L.L$'lB(G$HM #I =I%m4@ :@ $.m#<IL04J}-UGNN'CDD'':;; (y AI 1< # 	7++%OO-eS))e.>.>|.L.L$'lB(G$HM #I =I%m4@ :@ $.m#<IL04J}-UGNN'CDD'':;; (y AI .   4T)_4EFGGr%   z!flat_batch is not a list or tupler   zinvalid structure: r   zTensor parse incomplete)r
   r   lenr   r   r   )r   r   r   r2   s   `  @r#   _restore_batchr5   `   s     D j(++P-PP+ :! )c5\**|nQC00 	
!)-	
0 !}A&Iq=C
O+F-FF+r%   )
r   collections.abcr   r   numpyr   r   r   r'   r5    r%   r#   <module>r9      s$     -  D!N8r%   