
    Αi                    :   S SK Jr  S SKrS SKJrJrJr  S SKrS SKJ	r	  S SK
Jr  S SKJr  \R                  " \5      rS rS rS	 rS
 r " S S\5      rS r    SS jr\\\   \\S4   \\\4   4   r        SS jr " S S5      rSS jrSS jr S r!S r"g)    )annotationsN)AnyCallableUnion)fleet)dtensor_from_localmap_structurec                4    U R                  5       nSUl        U$ )NF)detachstop_gradientxos     q/var/www/html/banglarbhumi/venv/lib/python3.13/site-packages/paddle/distributed/auto_parallel/pipelining/utils.py_detach_and_requires_gradr      s    	
AAOH    c                H    U R                  5       nU R                  Ul        U$ N)detach_r   r   s     r   _detach_and_keep_gradr   $   s    			AooAOHr   c                   [        U [        5      (       d   e[        R                  " U R                  (       a  U R                  OU R
                  U R                  S9nU R                  (       a  [        X!U R                  5      nU$ )N)dtype)	
isinstance
TensorMetapaddlezeros_local_shapeshaper   
placementsr   )metameshr   s      r   _zero_initialize_with_metar#   *   s^    dJ''''!..DJJdjj	A q8Hr   c                X   ^ / mU4S jn[         R                  R                  UU 5        T$ )z$
Flatten the args into a list form.
c                h   > [        U [        R                  5      (       a  TR                  U 5        U $ r   )r   r   Tensorappend)a	flat_argss    r   extract_tensor_args*_flatten_args.<locals>.extract_tensor_args:   s'    a''Qr   )r   utilsr
   )argsr*   r)   s     @r   _flatten_argsr.   4   s1     I LL
 r   c                      \ rS rSrSrSrg)PipeliningShapeErrorH   z5Shape mismatch between configured and runtime values. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r2   r   r   r0   r0   H   s    ?r   r0   c                   UR                   UR                   :X  d'  [        U  SUR                    SUR                    35      eUR                  UR                  :X  d'  [        U  SUR                   SUR                   35      eg )Nz  has a shape mismatch: expected z actual z  has a dtype mismatch: expected )r   r0   r   )descexpectedgivens      r   _validate_tensor_metadatar=   L   s    >>U[[("f4X^^4DHU[[MZ
 	
 >>U[[("f4X^^4DHU[[MZ
 	
 )r   c           	         [        U5      [        U5      :w  a&  [        U  S[        U5       S[        U5       S35      e[        [        U5      5       H  n[        U  SU 3X   X#   5        M     g )Nz: Number of values (z") does not match expected number ()z: value )lenr0   ranger=   )r:   expected_tensorsactual_tensorsis       r   _validate_tensors_metadatarE   W   s    
 N 33"f(^)<(==_`cdt`u_vvwx
 	
 3'()!fHQC "2"5~7H	
 *r   .c                (   ^ ^ [        UU 4S jU5      $ )zo
Apply `fn` to each entry which matches `type_` in `structure` and return a new structure with the same shape.
c                :   > [        U T5      (       a  T" U 5      $ U $ r   )r   )r   fntype_s    r   <lambda>%_map_structure_only.<locals>.<lambda>p   s    :a//"Q%6Q6r   r	   )rI   rH   	structures   `` r   _map_structure_onlyrM   i   s     6	 r   c                  $    \ rS rSrSS jrS rSrg)r   t   c                8   UR                  5       (       a#  UR                  U l        UR                  U l        OUR                  U l        S U l        UR                  U l        UR                  5       (       d  S OUR                  U l        UR
                  U l        g r   )is_distr   r   r   r    r   )selftensors     r   __init__TensorMeta.__init__u   so    >>DJ & 3 3DDJ $D\\
&,nn&6&6$F<M<M#11r   c           	     p    SU R                    SU R                   SU R                   SU R                   S3	$ )NzTensorMeta(global_shape=z,local_shape=, dtype=z, placements=r?   )r   r   r   r    )rR   s    r   __repr__TensorMeta.__repr__   sW    )$**]4CTCTBUU]^b^h^h]iivw{  xG  xG  wH  HI  J  	Jr   )r   r   r    r   r   N)rS   zpaddle.Tensor)r3   r4   r5   r6   rT   rX   r8   r2   r   r   r   r   t   s    	2Jr   r   c                    [         R                  R                  5       nUc   S5       eSUR                  ;   a  UR	                  SU 5      nU$ [
        R                  SU SU 35        U$ )z/
Get the mesh of the {pp_idx}th PipelineStage.
z8the mesh is None, please call fleet.auto.set_mesh first.ppzThe dim name of pp z not exist in global mesh )r   autoget_mesh	dim_namesget_mesh_with_dimloggerwarning)pp_idxpp_dim_namesr"   s      r   _get_pp_meshrd      sy     :: D B t~~%%dF3
 K 	!,/I$P	
 Kr   c                \    US:X  a  [         eUb  [        SU S35      eX-  n[        U5      $ )NvzUnknown style: z, style can be None, v.)NotImplementedError
ValueErrorrd   )stage_indexpp_group_sizestylerb   s       r   _get_stage_meshrl      s=    |!!?5'1HIJJ,F##r   c                    [        U [        R                  5      (       a*  SU R                   SU R                   SU R
                   S3$ [        U 5      $ )z<
Helper function to print out debug info in a friendly way.
zTensor(z, stop_gradient=rW   r?   )r   r   r&   r   r   r   str)rf   s    r   _friendly_debug_inforo      sH     !V]]##	!1!//1B(177)STUU1vr   c                "    [        [        U 5      $ )zd
Helper function to apply `friendly_debug_info` to items in `a`.
`a` may be a list, tuple, or dict.
)r
   ro   )r(   s    r   _map_debug_inforq      s    
 -q11r   )rB   /list[paddle.Tensor] | tuple[paddle.Tensor, ...]rC   rr   )rI   r   rH   zCallable[[Any], Any]rL   NestedStructreturnrs   )r   r[   r   )#
__future__r   loggingtypingr   r   r   r   paddle.distributedr   $paddle.distributed.auto_parallel.apir   paddle.utilsr
   	getLoggerr3   r`   r   r   r#   r.   RuntimeErrorr0   r=   rE   listtupledictrs   rM   r   rd   rl   ro   rq   r2   r   r   <module>r      s    #  ' '  $ '			8	$(@< @

E
 D
 T#Yc3hc3h?@(5AJ J "$2r   