ó
    EñiÑ…  ã                  ó(  • 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    €Ú_/home/mande/repo/quber/.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   ø€ ô" �8‰8×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>   € ô /¨{ÓN€IÜ	.Õ	0à—?’? HÐ-ˆ÷ 
1ð €O÷ 
1Ô	0ð €Oús   –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   ø€ Ô$4°Q¸Ô$>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Ü�L‰LÔ>Àó
Ðô ×ÒÕ Ô"7¸Õ"=¸{×?PÑ?PÕ?RÜ3Ø!ð Ø$6ò Ð÷ @S×"=× ÷	1ô 1ØÐ0¸Gó
ð 	
÷ @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   ø€ Ø ×.Ñ.¨s¸FÓ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Ð6¨XÒ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÷÷
ð  ×(Ñ(Ð)¨Ð3€DÜØÜ	�‰×	 Ñ	 ×	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                  " XË5      $ 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Ò2Ð4DÐEÐÜ×-Ò-¨{Ð;Ðô  #Ð#8ÔKô%âK‰OˆIô 	ˆ9‹�tÒÙKð "ñ %ô
  ×,Ò,¨WÓ5Ñ€LØ€Fà!¤[Ñ0Ðà€MÞÜ1°(ÓAˆð Ñ Üð%à%- Jð /*ä*0×*=Ò*=¸hÓ*GÈÑ*JÐ)Kð L,Ø,0¨6ð 2JðKó	ð 	ô ˜|Ö,‰	ˆˆ6Ü˜&¤%§,¡,×/Ñ/Ø�M‰M˜&Ô!ÙÜˆf‹:Ð6Ó6Ø�M‰MÐ7¼¸6»
ÑCÔDÙÞØÑ$Ü$ØOóð ð �M‰M™' &¨-Ñ*:Ó;Ö<à�M‰M™' &›/Ö*ñ -ô  × Ò  Ó.Ð.ùó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ð ô �fœe×$Ñ$Ü˜>¨f´T¸&³\°NÀ(Ð,KÑKÓLÐLÜˆv‹;˜!ÓÜ˜>¨d´3°v³;°-Ð?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Ñ3°FÓ;¸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  p«SU4S jjn[        X§X<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_nextÚ7custom_function_call_vmap_helper.<locals>.lower_to_nexty  sN   ø€ Þ!Ø×$Ñ$Ó&Ð&ä—8‘8×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ô (¨¬E¯N©N×,CÑ,C×,PÑ,PÓQÐ÷ð ô #1°¸=Ó"IÑÐô ‡‚Ñ.°×8Ñ8Ù�_Þ%Ü+¨BÐ:°Ò:÷ ‰_ñ ˜8Ð. vÑ.÷	 ‰_ñ 
�Ù˜tÐLÐ/AÒLÀVÑ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$ )Néÿÿÿÿr   )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ˆ÷ 
ô �gœu×%Ñ%ÜÐCÄDÈÃ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ô
àðÑˆô �gœuŸ|™|×,Ñ,ØÐ$Ð$à%�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¯\©\×:Ñ:�—	’	ÀÔDÒPVùs   ‚:<Ú_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ÐØØô		
ð
 ô	ô �s˜N×+Ñ+à!ˆ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°=ÓAˆKØ$×(Ò(¨Ð@°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Ñ-BÀJó
ˆô �fœeŸl™l×+Ñ+Ø˜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Ñ#�ð "Ñ-‰F°4Ô7Ú'Oùs   ‚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_contextÚHvmapify_autograd_function.<locals>.backward.<locals>.backward_no_context%  s-   ø€ Ø*0Ñ'ˆMÜ-¨c°=ÓAˆKØ$×-Ò-¨kÐI¸LÒ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ˆØ$ S bÐ)ˆØ"×/Ñ/°Ñ4ÐäÐ.´×6Ñ6Ø$8Ð#:Ð ä$ñ %
ä'*¨=Ô'Oó%
ó  
Ð÷
	Jð 	Jô
 #/ØØ×/Ñ/°Ñ4Ð6JÐKÐMØØô	#
ð
 ×Ñ˜mÐ
,ó#.Ñˆô Ø W¨j¸#×:NÑ:NÈsÑ: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ó *1÷X!ó !÷.ó ð: Ð&×/Ñ/Ð0Ð1€DÜØÜ	�‰×	 Ñ	 Ð"ä# 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Ð5€Mô  # <Ô?ôâ?‰OˆFð ‘‰ 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Ø"'�M‰M˜$ÑØÜ�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ÐR°J×4QÑ4QÑ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˜ô 	�r F¨J¸×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¤%×(Ñ(Ø �]ˆ
Ü�o¤u×-Ñ-Ø*Ð,ˆÜ�j¤%×(Ñ(Ø �]ˆ
à-Ñ5Ü14°Z³À7Ñ1JÐ.Üô ä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ÜÜ�L‰L×$Ñ$Ø$ 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_forwardÚ8autograd_function_forward_rewritten.<locals>.new_forward   s!   ø€ Ù! 4Ð2¨6Ñ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   ø€ ô (-§x¡x×';Ñ';¸CÓ'@×'DÒ'DÀdÐ'KÑ$�˜õ Lä'¨Ö5‘F�CØÐ"8Õ8Ù%1°!¦_˜EØOS˜EŸJ™JŸO™OÐ,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   ø€ ô Ð-Ó.°Ó2Ø02Ð-Ü )¨&Ö 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Ü—x‘x×+Ñ+¨CÓ0×4Ò4ÐJ°dÐ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œEŸN™N×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Ä%Ç,Á,×2OŸ3©$ˆKÐPÜ˜$¤§¡×-Ñ-ØÓ&ØŸ<™<¨Ó-Ð-à�KàˆHÛ�Ü˜c¤5§<¡<×0Ñ0ØÓ)Ø Ÿ™¨¯©°CÓ(8Ö9à Ÿ™¨Ö,à—O‘O CÖ(ñ ô ˜“?Ð"÷+ !•üò
 Qs   —	D¬#D#ÁD#Ä
D )r3   r;   r4   r<   r8   r   r6   )r{  rá   s   ` r(   Úfwd_trace_helperÚ2DynamoAutogradFunctionTraceHelper.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ñ 8ô6	*˜*ô 	*ô-�Jô -ð8 37ðØ7ðà*ðð &ðð ð	ð
 -0ðð õðB 37ð9Ø#ð9àð9ð ð9ð ð	9ð
 -0ð9ð õ9ðx	Ø&ð	à.ð	ð ô	ô:.Ð/ô :.ñz 0Ó1Ð ÷%ò %r*   