
    [Th                     b   S SK r S SKJr  S SKJr  S SKrS SKJr  \ R                  " \5      r	S r
S r " S S\5      rS	 rS
\\\R                      \\R                   S4   4   S\\\R                      \\R                   S4   4   4S jr SS\S\S\S\\\4   4S jjr\ " S S5      5       rg)    N)	dataclass)Union)fxc                 \   ^ / mU4S jn[         R                  R                  U U5      nUT4$ )zT
Flatten the args into a list form and detach the tensors from computational graph.
c                    > [        U [        R                  5      (       a<  U R                  5       R	                  U R
                  5      nTR                  U5        U$ TR                  U 5        U $ N)
isinstancetorchTensordetachrequires_grad_requires_gradappend)avalflat_detached_argss     [/var/www/auris/envauris/lib/python3.13/site-packages/torch/distributed/pipelining/_utils.pyextract_tensor_args0flatten_args_detach.<locals>.extract_tensor_args   sT    a&&((*++AOO<C%%c*J%%a(H    r   nodemap_aggregate)argsr   new_argsr   s      @r   flatten_args_detachr      s:      ww$$H
 '''r   c                 X   ^ / mU4S jn[         R                  R                  U U5        T$ )z$
Flatten the args into a list form.
c                 *   > TR                  U 5        U $ r   )r   )r   	flat_argss    r   r   )flatten_args.<locals>.extract_tensor_args,   s    r   r   )r   r   r   s     @r   flatten_argsr!   &   s1     I
 GG
 r   c                       \ rS rSrSrSrg)PipeliningShapeError9   z5Shape mismatch between configured and runtime values. N)__name__
__module____qualname____firstlineno____doc____static_attributes__r%   r   r   r#   r#   9   s    ?r   r#   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UR                  5       UR                  5       :X  d/  [        U  SUR                  5        SUR                  5        35      eg )Nz  has a shape mismatch: expected z actual z  has a dtype mismatch: expected z! has a stride mismatch: expected )shaper#   dtypestride)descexpectedgivens      r   validate_tensor_metadatar3   =   s    >>U[[("f4X^^4DHU[[MZ
 	
 >>U[[("f4X^^4DHU[[MZ
 	
 ??."f5hoo6G5HQVQ]Q]Q_P`a
 	
 /r   expected_tensors.actual_tensorsc           	          [        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 )lenr#   ranger3   )r0   r4   r5   is       r   validate_tensors_metadatar;   L   s    
 N 33"f(^)<(==_`cdt`u_vvwx
 	
 3'() fHQC "2"5~7H	
 *r   pp_size
num_stagesstylereturnc                 "   0 nUS:X  a  [        U5       H	  nX@-  X4'   M     U$ US:X  aY  X-  S:w  a  [        SU SU  S35      eSn[        U5       H,  nXSU'   US-   U -  S:X  a  M  X@-  S-  S:X  a  US-  nM'  US-  nM.     U$ [        S	U S
35      e)z
Compute the stage id to rank mapping for either a looped or V-style schedule.

Most commonly num_stages == pp_size * 2, but this function can be used to
compute the mapping for any number of stages per rank.
loopvr   znum_stages z% must be evenly divisible by pp_size z for V schedules      zStyle z is not supported.)r9   
ValueError)r<   r=   r>   mappingstage_index
rank_indexs         r   generate_stage_to_rank_mappingrI   [   s     G ,K#.#8G  -( N% 
#1$j\)NwiWgh  
 ,K#-K a7*a/&!+q0a
a
 - N 6%(:;<<r   c                   L    \ rS rSr% Sr\R                  \S'   \\S'   \	\S'   Sr
g)PipeInfo}   z6
Captures information for a pipeline (`Pipe` object).
graphr=   has_loss_and_backwardr%   N)r&   r'   r(   r)   r*   r   Graph__annotations__intboolr+   r%   r   r   rK   rK   }   s     88OOr   rK   )rA   )loggingdataclassesr   typingr   r
   r   	getLoggerr&   loggerr   r!   RuntimeErrorr#   r3   listr   tupler;   rQ   strdictrI   rK   r%   r   r   <module>r]      s     !    
		8	$(0&@< @

D.ellC6G0HHI
 $u||,eELL#4E.FFG
  17!*-	#s(^D      r   