
    N jх                    (   S SK Jr  S SKJrJrJr  S SKJrJr  S SK	r	S SK
Js  Jr  S SKJrJrJrJr  S SKJr  S SKJr  S SKJrJrJrJrJr  S S	KJr  S S
KJ r   \(       a  S SK!J"r"J#r#J$r$  S SK%J&r&J'r'  \" S5      r(\" S5      r) " S S\5      r*\*" 5       r+\+RY                  \RZ                  5      \+RY                  \R\                  5              S-S j5       5       r/      S.S jr0Sr1\14           S/S jjr2 " S S\5      r3    S0S jr4S1S jr5\+RY                  \Rl                  5                S2S j5       r7            S3S jr8S4S jr9        S5S jr:\+RY                  \Rv                  5                S6S j5       r<          S7S jr=S8S jr> " S  S!5      r? " S" S#\?5      r@ " S$ S%\?5      rA S9           S:S& jjrB S9           S;S' jjrC      S<S( jrD " S) S*\5      rE\E" 5       rF " S+ S,5      rGg)=    )annotations)Any
NamedTupleTYPE_CHECKING)	ParamSpecTypeVarN)_unwrap_for_grad_wrap_for_gradcurrent_levelTransformType)vmap)%enable_single_level_autograd_function)_add_batch_dim_broadcast_to_and_flattenrestore_vmapunwrap_batchedwrap_batched)HigherOrderOperator)_set_fwd_grad_enabled)CallableIterableSequence)FuncTorchInterpreterVmapInterpreter_P_Rc                  L   ^  \ rS rSrSU 4S jjr        SU 4S jjrSrU =r$ )!CustomFunctionHigherOrderOperator+   c                $   > [         TU ]  S5        g )Ncustom_function_callsuper__init__self	__class__s    s/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/torch/_functorch/autograd_function.pyr$   *CustomFunctionHigherOrderOperator.__init__,   s    /0    c                   > [         R                  R                  5       (       a  [        TU ]  " U/UQ70 UD6$ UR
                  " U0 UD6$ N)torch_C _are_functorch_transforms_activer#   __call__apply)r&   autograd_functionargskwargsr'   s       r(   r0   *CustomFunctionHigherOrderOperator.__call__/   sI    " 8844667#$5GGGG &&777r*    returnNone)r2   type[torch.autograd.Function]r3   _P.argsr4   	_P.kwargsr8   r   __name__
__module____qualname____firstlineno__r$   r0   __static_attributes____classcell__r'   s   @r(   r   r   +   s8    1888 8 	8
 
8 8r*   r   c                    [        X5      n[        5          UR                  " U6 nS S S 5        U$ ! , (       d  f       W$ = fr,   )generate_single_level_functionr   r1   )interpreterr2   operands	Generatedflat_outs        r(   custom_function_call_gradrK   i   s>     /{NI	.	0??H- 
1 O 
1	0 Os   0
?c           
     @  ^ ^^ T R                  5       mSUU U4S jjnSU4S jjnS	U4S jjnS
U4S jjnTR                   S3n[        U[        R                  R
                  R                  4[        U5      [        U5      [        U5      [        U5      S.5      nU$ )Nc                   > [         R                  " [        R                  U4S jU 5      n[        R                  " 5          [        S5         TR                  5          [        T/UQ76 nS S S 5        S S S 5        S S S 5        SU4S jjn[        WXU5      $ ! , (       d  f       N3= f! , (       d  f       N<= f! , (       d  f       NE= f)Nc                   > [        U T5      $ r,   )r	   )xlevels    r(   <lambda>Agenerate_single_level_function.<locals>.forward.<locals>.<lambda>   s    $4Q$>r*   Tc                   > [        U T5      $ r,   )r
   )outputrP   s    r(   wrap_fn@generate_single_level_function.<locals>.forward.<locals>.wrap_fn   s    !&%00r*   )rT   torch.Tensorr8   rW   )	pytreetree_map_onlyr-   Tensorenable_gradr   lowerr!   !wrap_outputs_maintaining_identity)rH   unwrapped_operandsunwrapped_outputrU   r2   rG   rP   s       r(   forward/generate_single_level_function.<locals>.forward}   s    #11LL>
  "7"={?P?P?R3! $6  @S"= 	1 10G
 	
 @S?R"="=  s<   B:B)B+B)3B:
B&"B))
B7	3B::
Cc                (   > TR                  XU5      $ r,   )setup_context)ctxinputsrT   r2   s      r(   rc   5generate_single_level_function.<locals>.setup_context   s     ..sFCCr*   c                .   > TR                   " U /UQ76 nU$ r,   )backward)rd   gradsresultr2   s      r(   rh   0generate_single_level_function.<locals>.backward   s    "++C8%8r*   c                .   > TR                   " U /UQ76 nU$ r,   )jvp)rd   tangentsrj   r2   s      r(   rm   +generate_single_level_function.<locals>.jvp   s    "&&s6X6r*   rI   )r`   rh   rm   rc   rH   r   r8   r   )rd   r   re   r   rT   r   r8   r   )rd   r   ri   r   r8   r   rd   r   rn   r   r8   r   )rP   r>   typer-   autogradfunction_SingleLevelFunctionstaticmethod)	rG   r2   r`   rc   rh   rm   namerI   rP   s	   ``      @r(   rF   rF   w   s     E
 
(D
  (()3D		 	 	5	57#G,$X.$)-8		
	I r*   znot specifiedc           	        [         R                  " U6 n[         R                  " U6 n[        XV5       VVs0 s H  u  px[        U5      U_M     n	nn[         R                  " U 5      u  p/ nU[
        :g  nS nU(       a:  [        XK5      nUc,  [        SU S[         R                  " U5      S    SU S35      e[        U
5       H  u  nn[        U[        R                  5      (       d  UR                  U5        M8  [        U5      U	;   a  UR                  U	[        U5         5        Mf  U(       a*  Uc  [        S5      eUR                  U" UX   5      5        M  UR                  U" U5      5        M     [         R                  " X5      $ s  snnf )NzoThe autograd.Function's vmap staticmethod returned an incompatible (output, out_dims) tuple. Expected out_dims=zI to be compatible with the structure of `output`. out_dims has structure    z but output has structure zV. For more details, please see https://pytorch.org/docs/main/notes/extending.func.htmlz9flat_out_dims must not be None when out_dims is specified)rX   arg_tree_leaveszipidtree_flattenNO_OUT_DIMSr   RuntimeError	enumerate
isinstancer-   rZ   appendAssertionErrortree_unflatten)outputsunwrapped_inputsorig_inputsrU   out_dimsflat_unwrapped_inputsflat_orig_inputs	unwrappedorigunwrapped_input_to_orig_inputflat_outputsspecrj   out_dims_specifiedflat_out_dimsirT   s                    r(   r]   r]      s    #224DE--{;  ##8K%KOI 	9tK " %
  ,,W5LF![0M1(A  %%-J /**0*=*=h*G*J)K L,,06 2JK	 	 |,	6&%,,//MM&!f:66MM76
CD$$O  MM'&-*:;<MM'&/* -    ..W%s   F	c                  *    \ rS rSr% S\S'   S\S'   Srg)VmapInfoi"  int
batch_sizestr
randomnessr6   N)r>   r?   r@   rA   __annotations__rB   r6   r*   r(   r   r   "  s    OOr*   r   c                b    U R                   [        R                  R                  R                   L$ r,   )r   r-   rs   Function)r2   s    r(   has_overridden_vmap_ruler   '  s%     !!)@)@)E)EEEr*   c                    Sn[        U [        5      (       d  [        US[        U 5       S3-   5      e[	        U 5      S:X  d  [        US[	        U 5       S3-   5      eg )Nz}Expected the vmap staticmethod to have two returns, an output and out_dims with pytree structure compatible with the output. zGot a z instead   zGot z returns instead)r   tupler   rr   len)rj   base_error_msgs     r(   +validate_vmap_returns_tuple_of_two_elementsr   -  sh    	J  fe$$>fT&\N(,KKLLv;!>d3v;-?O,PPQQ r*   c                   [        S [        R                  R                  R	                  U5      S    5       5      (       a  [        SU 35      eUR                  (       a5  [        U5      (       a  [        SUR                   S35      e[        X/UQ76 $ [        U5      (       d  [        SUR                   S35      e[        XR                  U/UQ70 UD6$ )Nc              3  V   #    U  H  n[        U[        R                  5      v   M!     g 7fr,   )r   r-   rZ   ).0vals     r(   	<genexpr>,custom_function_call_vmap.<locals>.<genexpr>?  s%      >C 	3%%>s   ')r   z|Run vmap on autograd.Function with kwarg-only Tensor args. Please do not pass kwarg-only Tensors to autograd.Function. Got: zYou tried to vmap over a  , but it has both generate_vmap_rule=True and an overridden vmap staticmethod. Please set generate_vmap_rule=False or delete the overridden vmap staticmethod to avoid ambiguity. For more details, please see https://pytorch.org/docs/main/notes/extending.func.htmlz, but it does not have vmap support. Please override and implement the vmap staticmethod or set generate_vmap_rule=True. For more details, please see https://pytorch.org/docs/main/notes/extending.func.html)anyr-   utils_pytreer}   NotImplementedErrorgenerate_vmap_ruler   r   r>   'custom_function_call_vmap_generate_rule custom_function_call_vmap_helperr   )rG   r2   rH   r4   s       r(   custom_function_call_vmapr   8  s     ;;&&33F;A>   "8
 	
 ++#$566 )*;*D*D)E FJ K  7
-5
 	
 $$566 %&7&@&@%A BF G
 	
 ,++->AIMS r*   c                b  ^ ^^ T R                  5       m[        T R                  5       T R                  5       S9n[	        U[
        R                  R                  R                  5      mSUU 4S jjn[        UT5      u  px[        R                  " S U5      (       a5  U" 5          T(       a  [        U/UQ76 sS S S 5        $ U" U0 UD6sS S S 5        $ U" 5          U" XX/UQ70 UD6n	S S S 5        [        W	5        U	u  pSU4S jjn[        XX<US9$ ! , (       d  f       NL= f! , (       d  f       NA= f)N)r   r   c                    > T (       a  TR                  5       $ [        R                  R                  [        R                  R	                  [        R                  R
                  R                  5      5      $ r,   )r\   r-   r.   _ExcludeDispatchKeyGuardDispatchKeySetDispatchKeyFuncTorchBatched)autograd_function_caserG   s   r(   lower_to_next7custom_function_call_vmap_helper.<locals>.lower_to_nexty  sN    !$$&&8844''(<(<(M(MN r*   c                
    U S L $ r,   r6   )dims    r(   rQ   2custom_function_call_vmap_helper.<locals>.<lambda>  s    3$;r*   c                &   > Uc  U $ [        XT5      $ r,   )r   )rT   out_dimr   s     r(   rU   1custom_function_call_vmap_helper.<locals>.wrap_fn  s%      	
  ?	
r*   )r   )r8   r   )rT   rW   r   
int | Noner8   rW   )rP   r   r   r   r   r-   rs   rt   FunctionMetar   rX   tree_allr!   r   r]   )rG   vmap_functionoprH   r4   infor   r^   in_dimsrj   r_   r   rU   r   r   s   `            @@r(   r   r   i  s     %%'M))+))+D (ENN,C,C,P,PQ  #1="I .88_%+B:: _ 8.v.	 _ 
tL/ALVL 
/7!'
 -h( ' _ 
s   #D DD 
D 
D.c                V    U S   n[        U[        5      (       a  U S S n X4$ U S   n X4$ )Nr   )r   r   )r   r   s     r(   unpack_outputsr     sB    r{H(E""#2,  !*r*   c                   [        X R                  5       5      u  p4[        UUU R                  5       U R	                  5       5      nU R                  5          [        U/UQ76 nS S S 5        [        W[        5      (       d  [        S[        U5       35      e[        U5      u  pg[        XgU R                  5       5      $ ! , (       d  f       Na= f)Nz$expected outputs to be a tuple, got )r   rP   vmapify_autograd_functionr   r   r\   r!   r   r   r   rr   r   r   )rG   r2   rH   r^   r   vmapped_functionr   r   s           r(   r   r     s    
 #1;L;L;N"O0  	 
			&'7M:LM 
 gu%%CDM?STT&w/G;+<+<+>?? 
	s   B>>
Cc                    [        S5      e)Nz0NYI: Functionalize rule for custom_function_call)r   )rG   r2   r   rH   s       r(   "custom_function_call_functionalizer     s     I
JJr*   c           
     ,  ^ ^^^^	 SU UUU4S jjnS	U	U UUU4S jjnS
U	U UUU4S jjnSU	U UUU4S jjnST R                    3n[        U[        R                  R                  4[        U5      [        U5      [        U5      [        U5      SS.5      m	T	$ )Nc                    > [        TR                  TTT5      " U 6 u  p[        U[        R                  5      (       a  X4$ / UQUP7$ r,   )r   r`   r   r-   rZ   )rH   r   r   r2   r   r   r   s      r(   r`   *vmapify_autograd_function.<locals>.forward  sS    (%%w
J
 gu||,,$$%G%X%%r*   c                   >^ ^ [        U5      u  p#[        T5      mSUU U4S jjn[        UT	U4TT
5      " X5        [        T S5      (       d  0 T l        T R                  R                  TU05        g )Nc                ^  > [        T[        5       5      nTR                  X U5        [        S U  5       5      n[	        TS5      (       d  0 Tl        TR
                  R                  TU05        [	        TS5      (       d  0 Tl        TR                  R                  TUR                  05        g )Nc              3  |   #    U  H2  n[        U[        R                  5      (       a  UR                  OS v   M4     g 7fr,   )r   r-   rZ   shape)r   inps     r(   r   Rvmapify_autograd_function.<locals>.setup_context.<locals>.inner.<locals>.<genexpr>  s-      !PVZU\\::		DPVs   :<_pt_input_shapes_pt_saved_tensors_bdims_stack)	CtxCustomSaver   rc   r   hasattrr   updater   _pt_saved_tensors_bdims)re   r   wrapped_ctxinput_shapesr2   rd   keys       r(   inner?vmapify_autograd_function.<locals>.setup_context.<locals>.inner  s    
 (]_=K++KI ! !PV! L 3 233')$  ''l(;<3 ?@@461--44{::<r*   _pt_out_dims)re   r   r   r   r8   r9   )r   r|   r   r   r   r   )rd   re   r   r   r   r   rI   r2   r   r   r   s   `    @r(   rc   0vmapify_autograd_function.<locals>.setup_context  sw    *73m	 	8 	h		

 	 sN++!Ch0r*   c                .  >^  [        T5      nSU	U 4S jjn[        TU5      n[        UT R                  U   U4T
T5      " T R                  U5      u  pV[        XVT R                  U   T
5      n[        U[        R                  5      (       a  US 4$ / UQS P7$ )Nc                B   > [        TU 5      nTR                  " U/UQ76 $ r,   )CtxWithSavedTensorsrm   )saved_tensorsrn   r   r2   rd   s      r(   jvp_no_context>vmapify_autograd_function.<locals>.jvp.<locals>.jvp_no_context  s%    -c=AK$((@x@@r*   )r   r   rn   r   r8   r   )
r|   get_tangents_in_dimsr   r   r   	reductifyr   r   r-   rZ   )rd   rn   r   r   tangent_in_dimsout_tangentsout_tangents_dimsrj   rI   r2   r   r   r   s   `       r(   rm   &vmapify_autograd_function.<locals>.jvp  s    m	A 	A /wA*6..s3_E	+

 

X+'' S-=-=c-BJ
 fell++4< F=D= r*   c                Z  >^  [        T	5      nUS S nT R                  U   n[        U[        5      (       d  U4n[        S [	        X45       5       5      nSU
U 4S jjn[        UT R                  U   U44TT5      " T R                  U45      u  pg[        XgTTT R                  U   5      nU$ )Nr   c              3  4   #    U  H  u  pUb  UOS v   M     g 7fr,   r6   )r   grad_outputin_dims      r(   r   >vmapify_autograd_function.<locals>.backward.<locals>.<genexpr>   s$      %
'O# "-F47'Os   c                J   > U u  p[        TU5      nTR                  " U/UQ76 $ r,   )r   rh   )re   r   grad_outputsr   r2   rd   s       r(   backward_no_contextHvmapify_autograd_function.<locals>.backward.<locals>.backward_no_context%  s-    *0'M-c=AK$--kILIIr*   )re   r   r8   r   )
r|   r   r   r   r{   r   r   r   r   r   )rd   r   r   grad_outputs_grad_outputs_in_dimsr   grad_insgrad_ins_dimsrj   rI   r2   r   r   r   s   `        r(   rh   +vmapify_autograd_function.<locals>.backward  s    m$Sb)"//4.66$8#: $ %
'*='O%
  

	J 	J
 #///46JKM	#

 m
,#. Wj#:N:Ns:S
 r*   VmappedT)r`   rh   rm   rc   r   rp   )rd   r   re   r   r   r   r8   r9   rq   )rd   r   r   r   r8   r   )r>   rr   r-   rs   r   rv   )
r2   r   r   r   r`   rc   rm   rh   rw   rI   s
   ````     @r(   r   r     s    & &*1 *1X! !. : &//01D		 	 "#G,$X.$)-8"&	

I r*   c                    [         R                  " U 5      u  p#[         R                  " U6 n[        X$5       VVs/ s H  u  pVUc  S OUPM     nnn[         R                  " Xs5      $ s  snnf r,   )rX   r}   rz   r{   r   )
input_dimsrn   flat_in_dimsr   flat_tangentsr   tangentrj   s           r(   r   r   G  so    ,,Z8L**H5M  #<??OF V+?     ..	s   A&c                  B    \ rS rSr% SrS\S'   S
S jrSS jrSS jrSr	g	)
WrappedCtxi  )_pt_reserved_attrs_pt_inner_ctxztuple[str, ...]r  c                    [        U[        5      (       d=  [        U 5      R                  nU H"  n[	        X5      (       d  M  [        SU S35      e   Xl        g )NzPyTorch reserves the zU field on ctx. Please name your fields on ctx something else to avoid name collision.)r   r  rr   r  r   r   r  )r&   rd   reserved_attrsrw   s       r(   r$   WrappedCtx.__init__  s]    #z**!$Z::N&s))"+N+; <! !  ' !r*   c                .    [        U R                  U5      $ r,   )getattrr  )r&   rw   s     r(   __getattr__WrappedCtx.__getattr__  s    t))400r*   c                ~    U[        U 5      R                  ;   a  X R                  U'   g [        U R                  X5      $ r,   )rr   r  __dict__setattrr  )r&   rw   values      r(   __setattr__WrappedCtx.__setattr__  s6    4:000"'MM$t))477r*   )r  N)rd   r   r8   r9   )rw   r   r8   r   )rw   r   r  r   r8   r9   )
r>   r?   r@   rA   r  r   r$   r  r  rB   r6   r*   r(   r  r    s    *QQ!18r*   r  c                  `   ^  \ rS rSrS/\R
                  Q7rSU 4S jjr\SS j5       rSr	U =r
$ )r   i  _pt_new_saved_tensorsc                0   > [         TU ]  U5        X l        g r,   )r#   r$   r  )r&   rd   new_saved_tensorsr'   s      r(   r$   CtxWithSavedTensors.__init__  s    %6"r*   c                    U R                   $ r,   r  )r&   s    r(   r   !CtxWithSavedTensors.saved_tensors  s    )))r*   r  )rd   r   r  Sequence[torch.Tensor]r8   r9   )r8   r  )r>   r?   r@   rA   r  r  r$   propertyr   rB   rC   rD   s   @r(   r   r     s0    1RJ4Q4QR7 * *r*   r   c                  b   ^  \ rS rSrSS/\R
                  Q7rSU 4S jjrS	S jrS	S jrSr	U =r
$ )
r   i  r   _pt_current_levelc                >   > [         TU ]  U5        SU l        X l        g )Nr6   )r#   r$   r   r!  )r&   rd   r   r'   s      r(   r$   CtxCustomSave.__init__  s    8:$!.r*   c                p    [        XR                  5      u  p#U R                  R                  " U6   X0l        g r,   )r   r!  r  save_for_backwardr   r&   tensorsunwrapped_tensorsbdimss       r(   r%  CtxCustomSave.save_for_backward  s1    #1';Q;Q#R ,,.?@',$r*   c                p    [        XR                  5      u  p#U R                  R                  " U6   X0l        g r,   )r   r!  r  save_for_forwardr   r&  s       r(   r,  CtxCustomSave.save_for_forward  s1    #1';Q;Q#R ++->?',$r*   )r!  r   )rd   r   r   r   r8   r9   )r'  rW   r8   r9   )r>   r?   r@   rA   r  r  r$   r%  r,  rB   rC   rD   s   @r(   r   r     s5    ! 
	&	&/
-
- -r*   r   c           	        ^ [        U [        5      (       d  U 4n [        U[        5      (       d  U4n[        U[        5      (       d  U4nUc  [        U 5      S-  n[        U4S j[        U UUU5       5       5      nU$ )Nr,   c              3  F   >#    U  H  u  pp4[        XUTU5      v   M     g 7fr,   )reductify_leaf)r   gigi_bdimi_bdimmaybe_ishaper   s        r(   r   reductify.<locals>.<genexpr>  s/      2
-B 	rFJEE2
s   !)r   r   r   r{   )
grad_inputgrad_input_bdim
input_bdimr   &target_shape_without_bdim_to_reduce_torj   s      `  r(   r   r     s     j%(( ]
ou--*,j%(( ]
-514Z71J. 142	2
 F Mr*   c                p   U c  g Uc  Uc  U $ Ub  Uc  U R                  U5      $ Uc  [        S5      eUc=  U R                  U5      n [        U R                  5      nX5U'   U R                  U5      n UnUb+  [        [        R                  R                  US 4US9" X5      $ X!:w  a  U R                  X5      n U $ )Nzinput_bdim must not be None)r   r   )sumr   	unsqueezelistr   expandr   r-   rZ   sum_to_sizemovedim)r6  r7  r8  r   r9  	new_shapes         r(   r0  r0    s     :#5"z'9~~o..0 :;;))*5
))*	 **&&y1
$-9LL$$$d+
 	> 	> $''D
r*   c                   ^ ^ SU U4S jjnU$ )Nc                *   > T" U0 UD6nT" XU5        U$ r,   r6   )rd   r3   r4   rT   original_forwardoriginal_setup_contexts       r(   new_forward8autograd_function_forward_rewritten.<locals>.new_forward   s!    !4262s&1r*   )rd   r   r3   r;   r4   r<   r8   r   r6   )rD  rE  rF  s   `` r(   #autograd_function_forward_rewrittenrH    s     
 r*   c                  J   ^  \ rS rSrSU 4S jjr          SS jrSrU =r$ )AutogradFunctionApplyi(  c                $   > [         TU ]  S5        g )Nautograd_function_applyr"   r%   s    r(   r$   AutogradFunctionApply.__init__)  s    23r*   c                   ^^^^^ S mUS   mUS   m " UUUUU4S jS[         R                  R                  5      nUR                  " U6 $ )Nnon_differentiable_idxsaved_for_backward_idxc                  j   > \ rS rSr\SUUU4S jj5       r\SU4S jj5       r\S	U U4S jj5       rSrg)
5AutogradFunctionApply.__call__.<locals>.ApplyTemplatei7  c                    > [         R                  R                  T5      R                  " U 6 u  nm	SSKJn  [        T	5       H5  u  pEUT;  d  M  U" U5       H  nSUR                  R                  S'   M     M7     U$ )Nr   )_get_proxiesTsaved_tensor_with_no_vc_check)	r-   fxInterpreterrun"torch.fx.experimental.proxy_tensorrT  r   nodemeta)
r3   r4   rT   rT  idxtproxyfwdrP  saved_valuess
          r(   r`   =AutogradFunctionApply.__call__.<locals>.ApplyTemplate.forward8  sq     (-xx';';C'@'D'Dd'K$ L'5FC"88%1!_EOSEJJOO,KL &5 6
 r*   c                   > [        T5      S:  a?  / n[        U5       H  u  pEUT;   d  M  UR                  U5        M      U R                  " U6   g g )Nr   )r   r   r   mark_non_differentiable)rd   re   rT   non_differentiable_outputr   rO   rO  s         r(   rc   CAutogradFunctionApply.__call__.<locals>.ApplyTemplate.setup_contextN  sW     -.202- )& 1 665<<Q? !2 //1JK 3r*   c                   > Tc  [        S5      e[        R                  R                  T5      R                  " / UQTQ76 $ )Nzsaved_values must not be None)r   r-   rV  rW  rX  )rd   gradbwdr`  s     r(   rh   >AutogradFunctionApply.__call__.<locals>.ApplyTemplate.backwardX  s?      '()HIIxx++C044JdJ\JJr*   r6   N)r3   r   r4   r   r8   r   )rd   r   re   tuple[Any, ...]rT   r   r8   r9   )rd   r   rg  r   r8   r   )	r>   r?   r@   rA   rv   r`   rc   rh   rB   )rh  r_  rO  rP  r`  s   r(   ApplyTemplaterR  7  sF      * L L K Kr*   rk  )r-   rs   r   r1   )	r&   r_  rh  fwd_args
fwd_kwargsrk  rO  rP  r`  s	    ``   @@@r(   r0   AutogradFunctionApply.__call__,  sT     .2!+,D!E!+,D!E)	K )	KENN33 )	KV ""H--r*   r6   r7   )
r_  torch.fx.GraphModulerh  ro  rl  r   rm  r   r8   r   r=   rD   s   @r(   rJ  rJ  (  sB    46.!6. "6. 	6.
 6. 
6. 6.r*   rJ  c                  (    \ rS rSr\SS j5       rSrg)!DynamoAutogradFunctionTraceHelperih  c                   ^  SU 4S jjnU$ )Nc                 P  > [         R                  " 5          T" U 0 UD6nS S S 5        U  Vs1 s H&  n[        U[         R                  5      (       d  M$  UiM(     nn[        W[         R                  5      (       a  X$;   a  UR	                  U5      $ U$ / nU Hm  n[        U[         R                  5      (       a:  Xd;   a"  UR                  UR	                  U5      5        MI  UR                  U5        M\  UR                  U5        Mo     [        U5      $ ! , (       d  f       N= fs  snf r,   )r-   no_gradr   rZ   view_asr   r   )r3   r4   outsargtensor_argsnew_outsoutorig_fwds          r(   r   ADynamoAutogradFunctionTraceHelper.fwd_trace_helper.<locals>.innern  s    00 !
 +/P$3*S%,,2O3$KP$--&<<--KHc5<<00) C(89 ,OOC(  ?"+ !
 Qs   	D#D#D#
D )r3   r;   r4   r<   r8   r   r6   )r{  r   s   ` r(   fwd_trace_helper2DynamoAutogradFunctionTraceHelper.fwd_trace_helperi  s    
	#> r*   r6   N)r{  Callable[_P, Any]r8   r  )r>   r?   r@   rA   rv   r}  rB   r6   r*   r(   rq  rq  h  s    # #r*   rq  )rG   r   r2   r:   rH   r   r8   r   )rG   r   r2   r:   r8   z2type[torch.autograd.function._SingleLevelFunction])r   r   r   r   r   r   rU   Callable[..., Any]r   r   r8   r   )r2   r:   r8   bool)rj   r   r8   r9   )
rG   r   r2   r:   rH   r   r4   r   r8   r   )rG   r   r   r  r   r   rH   r   r4   r   r8   r   )r   rj  r8   ztuple[Any, Any])rG   r   r2   r:   rH   r   r8   r   )
rG   r   r2   r:   r   r  rH   r   r8   r   )
r2   r:   r   r   r   r   r   r   r8   r:   )r  r   rn   rj  r8   r   r,   )r6  z'torch.Tensor | tuple[torch.Tensor, ...]r7  int | tuple[int, ...]r8  r  r   r   r9  r   r8   rj  )r6  torch.Tensor | Noner7  r   r8  r   r   r   r9  r   r8   r  )rD  zCallable[_P, _R]rE  r  r8   zCallable[..., _R])H
__future__r   typingr   r   r   typing_extensionsr   r   r-   torch.utils._pytreer   r   rX   torch._C._functorchr	   r
   r   r   torch._functorch.apisr   torch._functorch.utilsr   torch._functorch.vmapr   r   r   r   r   
torch._opsr   torch.autograd.forward_adr   collections.abcr   r   r   torch._functorch.pyfunctorchr   r   r   r   r   r!   py_implGradJvprK   rF   r~   r]   r   r   r   Vmapr   r   r   r   Functionalizer   r   r   r  r   r   r   r0  rH  rJ  rL  rq  r6   r*   r(   <module>r     s   " 1 1 0  $ $  ' H  + ; <<Rt_T]8(; 8@ 9: < m001m//0	%	4	 	 			 1 2	6%646 86D   5/5/5/ 5/  	5/
 5/ 	5/Dz 
F4F	FR m001- -4- - 	-
 	- 2-`2 2%2 	2 	2
 2 	2j@ @4@ @ 		@* m99:K%K4K K 	K
 	K ;K|4|| | 	|
 #|B/~8 86	** 	*-J -8 377* & 	
 -0 B 379#99 9 	9
 -09 9x	&	.	 	:./ :.z 01 % %r*   