
    i                     J    S SK Jr  S SKJr  S SKrS SKrS SKr " S S\5      r	g)    )SamplerNc                   P    \ rS rSrSSSS/SSSS4S	 jrS
 rS rS\4S jrS r	Sr
g)MultiScaleSampler	      T      g?g      ~@Nc
           	      j   Xl         [        R                  " UR                  5      U l        UR                  U l        UR
                  U l        U R                  (       a"  UR                  U l        UR                  U l        [        U R                   5      U l	        Xpl
        Xl        [        US   [        5      (       a)  U V
s/ s H  oS   PM	     nn
U V
s/ s H  oS   PM	     nn
O[        US   [        5      (       a  UnUnWS   nWS   nUn[        R                   " 5       n[        R"                  " 5       n[        U R                  S-  U-  5      n[%        U R                  5       Vs/ s H  nUPM     nnSU l        U(       a  U Vs/ s H  n[        UUS   -  US   -  5      PM     nnU Vs/ s H  n[        UUS   -  US   -  5      PM     nn[        5       nX-  U-  n[)        X5       H?  u  nnU(       a  UnO[        [+        SUUU-  -  5      5      nUR-                  UUU45        MA     UU l        SU l        O
XU4/U l        UU l        UU l        SU l        UU l        UU l        / U l        SU l        UU-  nU R0                  U R6                  UU R8                  2   nU R<                  U R2                  :  a  U R.                   H  u  nnn[?        U R<                  U-   U R2                  5      nUU R<                  U n [        U 5      n!U!U:w  a  U USUU!-
   -  n U =R<                  U-  sl        [        U 5      S:  d  M{  UU[        U 5      /n"U R:                  R-                  U"5        M     U R<                  U R2                  :  a  M  [@        R&                  " U R:                  5        [        U R:                  5      U l!        U RE                  5       U l#        [%        [        U RF                  5      5       V
s/ s H  oPM     sn
U l$        gs  sn
f s  sn
f s  snf s  snf s  snf s  sn
f )aj  
multi scale samper
Args:
    data_source(dataset)
    scales(list): several scales for image resolution
    first_bs(int): batch size for the first scale in scales
    divided_factor(list[w, h]): ImageNet models down-sample images by a factor, ensure that width and height dimensions are multiples are multiple of devided_factor.
    is_training(boolean): mode
r      g      ?FTN)%data_sourcenparraydata_idx_order_listds_widthseedwh_ratiowh_ratio_sortlenn_data_samplesratio_whmax_w
isinstancelistintdistget_world_sizeget_rankrangeshufflezipmaxappendimg_batch_pairsimg_indicesn_samples_per_replicaepochranknum_replicas
batch_listcurrentminrandomlengthiterbatchs_in_one_epochbatchs_in_one_epoch_id)#selfr   scalesfirst_bsfix_bsdivided_factoris_trainingr   r   r   i
width_dimsheight_dims	base_im_w	base_im_hbase_batch_sizer(   r'   num_samples_per_replicaidxr$   whr#   base_elements
batch_size
last_indexindices_rank_icurr_wcurr_hcurr_bsz	end_index	batch_idsn_batch_samplesbatchs#                                      h/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddleocr/ppocr/data/multi_scale_sampler.py__init__MultiScaleSampler.__init__
   s   , '#%88K,K,K#L #,,$$	=='00DM!,!:!:D!$"2"23 
fQi&&(./1A$J/)/0AQ4K0Kq	3''J KqM	N	" **,}}"%d&9&9C&?,&N"O&+D,?,?&@A&@ss&@A
 LVKUaQ.++~a/@@A:   LWKVaQ.++~a/@@A;   #fO%1OCMK41!0J!$S]a!e-D%F!GJ&&1j'9: 5 $3D DL%.?$K#LD &%<"
	(,|;
))$))j4CTCT*TUllT777,0,@,@(x 79S9ST	*4<<)D	"%i."h.0N8o3M!OOI(y>A%#VS^<EOO**51 -A llT777 	t'$//*#'99; 27D<T<T8U2V&W2VQq2V&W#G 00 BT 'Xs$   PP,P!!P&3!P+P0c              #   Z  #    U R                   c6  [        R                   " U R                  5        U =R                  S-  sl        O [        R                   " U R                   5        [        R                  " U R                  5        U R                   H  nU R
                  U   v   M     g 7f)Nr   )r   r,   r&   r   r0   r/   )r1   batch_tuple_ids     rL   __iter__MultiScaleSampler.__iter__q   so     99KK

#JJ!OJKK		"t223"99N**>:: :s   B)B+c                 2   U R                   (       a  U R                  b!  [        R                  " U R                  5        O [        R                  " U R                  5        U R                  (       d   [        R                   " U R
                  5        [        R                   " U R                  5        U R
                  U R                  [        U R
                  5      U R                  2   nO9U R
                  U R                  [        U R
                  5      U R                  2   nSn/ nU R                   H  nUu  pVn[        X'-   U R                  5      nXU n	[        U	5      n
X:w  a	  XS Xz-
   -  n	X'-  n[        U	5      S:  d  MR  U R                  (       aP  U R                  U R                  U	      nUR                  5       nX-  U R                   :  a  UOU R                   U-  nOS nU	 Vs/ s H  oXmU4PM	     nnUR#                  U5        M     U$ s  snf )Nr   )r   r   r,   r&   r   r$   r#   r'   r   r(   r)   r+   r%   r   r   meanr   r"   )r1   rD   start_indexr/   batch_tuplerE   rF   rG   rH   rI   rJ   wh_ratio_currentratio_currentb_idrK   s                  rL   r.   MultiScaleSampler.iter{   s   <<yy$DII&DJJ'==t//0NN4//0!--		C 0 01D4E4EEN "--		C 0 01D4E4EEN  ??K'2$FHK2D4N4NOI&9=I!)nO*,Jx/IKK	#K9~!=='+}}T5G5G	5R'S$$4$9$9$;M )1DJJ> &!ZZ&0 " %)MKTU94&>9U#**51- +. #" Vs   -Hr&   c                     Xl         g N)r&   )r1   r&   s     rL   	set_epochMultiScaleSampler.set_epoch   s    
    c                     U R                   $ r\   )r-   )r1   s    rL   __len__MultiScaleSampler.__len__   s    {{r_   )r)   r/   r0   r*   r   r   r   r&   r#   r$   r-   r   r   r%   r(   r'   r   r   r   r   r   )__name__
__module____qualname____firstlineno__rM   rQ   r.   r   r]   ra   __static_attributes__ r_   rL   r   r   	   sA    
 2weXN;*#Xs r_   r   )
	paddle.ior   paddle.distributeddistributedr   numpyr   r,   mathr   rh   r_   rL   <module>rn      s"     !   b br_   