§
    E�’j€�  ã                  óx  — d dl mZ d dlmZmZmZ d dlmZmZ d dl	Z	d dl
mc mZ d dlmZmZmZmZ d dlmZ d dlmZ d dlmZmZmZmZmZ d d	lmZ d d
lm Z  erd dl!m"Z"m#Z#m$Z$ d dl%m&Z&m'Z'  ed¦  «        Z( ed¦  «        Z) G d„ de¦  «        Z* e*¦   «         Z+e+ ,                    ej-        ¦  «        e+ ,                    ej.        ¦  «        dXd„¦   «         ¦   «         Z/dYd„Z0dZ1e1fdZd"„Z2 G d#„ d$e¦  «        Z3d[d&„Z4d\d)„Z5e+ ,                    ej6        ¦  «        d]d,„¦   «         Z7d^d/„Z8d_d2„Z9d`d3„Z:e+ ,                    ej;        ¦  «        dad5„¦   «         Z<dbd;„Z=dcd>„Z> G d?„ d@¦  «        Z? G dA„ dBe?¦  «        Z@ G dC„ dDe?¦  «        ZA	 dddedK„ZB	 dddfdN„ZCdgdS„ZD G dT„ dUe¦  «        ZE eE¦   «         ZF G dV„ dW¦  «        ZGdS )hé    )Ú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                  ó,   ‡ — e Zd Zdˆ fd„Zdˆ fd„Zˆ xZS )Ú!CustomFunctionHigherOrderOperatorÚreturnÚNonec                óJ   •— t          ¦   «                              d¦  «         d S )NÚcustom_function_call©ÚsuperÚ__init__©ÚselfÚ	__class__s    €úPC:\Projects\DSCons\.venv\Lib\site-packages\torch\_functorch\autograd_function.pyr%   z*CustomFunctionHigherOrderOperator.__init__,   s"   ø€ Ý‰Œ×ÒÐ/Ñ0Ô0Ð0Ð0Ð0ó    Úautograd_functionútype[torch.autograd.Function]Úargsú_P.argsÚkwargsú	_P.kwargsr   c                ó”   •— t           j                             ¦   «         r t          ¦   «         j        |g|¢R i |¤ŽS  |j        |i |¤ŽS ©N)ÚtorchÚ_CÚ _are_functorch_transforms_activer$   Ú__call__Úapply)r'   r+   r-   r/   r(   s       €r)   r6   z*CustomFunctionHigherOrderOperator.__call__/   s]   ø€ õ" Œ8×4Ò4Ñ6Ô6ð 	Hà#•5‘7”7Ô#Ð$5ÐG¸ÐGÐGÐGÀÐGÐGÐGØ&Ð Ô&¨Ð7°Ð7Ð7Ð7r*   ©r   r    )r+   r,   r-   r.   r/   r0   r   r   ©Ú__name__Ú
__module__Ú__qualname__r%   r6   Ú__classcell__©r(   s   @r)   r   r   +   s[   ø€ € € € € ð1ð 1ð 1ð 1ð 1ð 1ð8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8ð 8r*   r   Úinterpreterr   r+   r,   Úoperandsr   r   c                ó†   — t          | |¦  «        }t          ¦   «         5   |j        |Ž }d d d ¦  «         n# 1 swxY w Y   |S r2   )Úgenerate_single_level_functionr   r7   )r?   r+   r@   Ú	GeneratedÚflat_outs        r)   Úcustom_function_call_gradrE   i   sŠ   € õ /¨{Ð<MÑNÔN€IÝ	.Ñ	0Ô	0ð .ð .à"�9”? HÐ-ˆð.ð .ð .ñ .ô .ð .ð .ð .ð .ð .ð .øøøð .ð .ð .ð .ð €Os   Ÿ6¶:½:ú2type[torch.autograd.function._SingleLevelFunction]c           
     ó:  ‡ ‡‡— ‰                       ¦   «         Šdˆˆ ˆfd„}dˆfd„}dˆfd
„}dˆfd„}‰j        › d�}t          |t          j        j        j        ft          |¦  «        t          |¦  «        t          |¦  «        t          |¦  «        dœ¦  «        }|S )Nr@   r   r   c                 ó�  •— t          j        t          j        ˆfd„| ¦  «        }t          j        ¦   «         5  t          d¦  «        5  ‰                     ¦   «         5  t          ‰g|¢R Ž }d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   dˆfd„}t          ||| |¦  «        S )Nc                ó$   •— t          | ‰¦  «        S r2   )r	   )ÚxÚlevels    €r)   ú<lambda>zAgenerate_single_level_function.<locals>.forward.<locals>.<lambda>   s   ø€ Õ$4°Q¸Ñ$>Ô$>€ r*   TÚoutputútorch.Tensorr   c                ó$   •— t          | ‰¦  «        S r2   )r
   )rM   rK   s    €r)   Úwrap_fnz@generate_single_level_function.<locals>.forward.<locals>.wrap_fnŠ   s   ø€ Ý! &¨%Ñ0Ô0Ð0r*   )rM   rN   r   rN   )	ÚpytreeÚtree_map_onlyr3   ÚTensorÚenable_gradr   Úlowerr"   Ú!wrap_outputs_maintaining_identity)r@   Úunwrapped_operandsÚunwrapped_outputrP   r+   r?   rK   s       €€€r)   Úforwardz/generate_single_level_function.<locals>.forward}   s´  ø€ Ý#Ô1ÝŒLÐ>Ð>Ð>Ð>Àñ
ô 
Ðõ ÔÑ Ô ð 	ð 	Õ"7¸Ñ"=Ô"=ð 	ð 	¸{×?PÒ?PÑ?RÔ?Rð 	ð 	Ý3Ø!ð Ø$6ð ð  ð  Ðð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð	1ð 	1ð 	1ð 	1ð 	1ð 	1õ 1ØÐ0°(¸Gñ
ô 
ð 	
sY   ¸B%ÁBÁA7Á+BÁ7A;Á;BÁ>A;Á?BÂB%ÂB	ÂB%ÂB	ÂB%Â%B)Â,B)ÚctxÚinputsrM   c                ó2   •— ‰                      | ||¦  «        S r2   )Úsetup_context)rZ   r[   rM   r+   s      €r)   r]   z5generate_single_level_function.<locals>.setup_context‘   s   ø€ Ø ×.Ò.¨s°F¸FÑCÔCÐCr*   Úgradsc                ó$   •—  ‰j         | g|¢R Ž }|S r2   )Úbackward)rZ   r^   Úresultr+   s      €r)   r`   z0generate_single_level_function.<locals>.backward•   s#   ø€ Ø+Ð"Ô+¨CÐ8°%Ð8Ð8Ð8ˆØˆr*   Útangentsc                ó$   •—  ‰j         | g|¢R Ž }|S r2   )Újvp)rZ   rb   ra   r+   s      €r)   rd   z+generate_single_level_function.<locals>.jvpš   s#   ø€ Ø&Ð"Ô& sÐ6¨XÐ6Ð6Ð6ˆØˆr*   rC   )rY   r`   rd   r]   ©r@   r   r   r   )rZ   r   r[   r   rM   r   r   r   )rZ   r   r^   r   r   r   ©rZ   r   rb   r   r   r   )rK   r:   Útyper3   ÚautogradÚfunctionÚ_SingleLevelFunctionÚstaticmethod)	r?   r+   rY   r]   r`   rd   ÚnamerC   rK   s	   ``      @r)   rB   rB   w   s  øøø€ ð ×ÒÑÔ€Eð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð(Dð Dð Dð Dð Dð Dðð ð ð ð ð ð
ð ð ð ð ð ð  Ô(Ð3Ð3Ð3€DÝØÝ	ŒÔ	 Ô	5Ð7å# GÑ,Ô,Ý$ XÑ.Ô.Ý Ñ$Ô$Ý)¨-Ñ8Ô8ð		
ð 	
ñ	ô 	€Ið Ðr*   znot specifiedÚoutputsÚunwrapped_inputsÚorig_inputsrP   úCallable[..., Any]Úout_dimsc           	     ó  — t          j        |Ž }t          j        |Ž }d„ t          ||¦  «        D ¦   «         }t          j        | ¦  «        \  }}	g }
|t          k    }d }|rCt          ||	¦  «        }|€1t          d|› dt          j        |¦  «        d         › d|	› d�¦  «        ‚t          |¦  «        D ]Æ\  }}t          |t          j
        ¦  «        s|
                     |¦  «         Œ5t          |¦  «        |v r)|
                     |t          |¦  «                 ¦  «         Œo|r7|€t          d¦  «        ‚|
                      ||||         ¦  «        ¦  «         Œ¨|
                      ||¦  «        ¦  «         ŒÇt          j        |
|	¦  «        S )Nc                ó4   — i | ]\  }}t          |¦  «        |“ŒS © )Úid)Ú.0Ú	unwrappedÚorigs      r)   ú
<dictcomp>z5wrap_outputs_maintaining_identity.<locals>.<dictcomp>Ê   s4   € ð %ð %ð %áˆI�tõ 	ˆ9‰Œ�tð%ð %ð %r*   zoThe 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)rQ   Úarg_tree_leavesÚzipÚtree_flattenÚNO_OUT_DIMSr   ÚRuntimeErrorÚ	enumerateÚ
isinstancer3   rS   Úappendru   ÚAssertionErrorÚtree_unflatten)rm   rn   ro   rP   rq   Úflat_unwrapped_inputsÚflat_orig_inputsÚunwrapped_input_to_orig_inputÚflat_outputsÚspecra   Úout_dims_specifiedÚflat_out_dimsÚirM   s                  r)   rV   rV   À   sê  € õ #Ô2Ð4DÐEÐÝÔ-¨{Ð;Ðð%ð %å"Ð#8Ð:JÑKÔKð%ñ %ô %Ð!õ
  Ô,¨WÑ5Ô5Ñ€L�$Ø€Fà!¥[Ò0Ðà€MØð Ý1°(¸DÑAÔAˆð Ð ÝðKà%-ðKð Kõ +1Ô*=¸hÑ*GÔ*GÈÔ*Jð	Kð Kð
 -1ðKð Kð Kñ	ô 	ð 	õ ˜|Ñ,Ô,ð +ð +‰	ˆˆ6Ý˜&¥%¤,Ñ/Ô/ð 	Ø�MŠM˜&Ñ!Ô!Ð!ØÝˆf‰:Œ:Ð6Ð6Ð6Ø�MŠMÐ7½¸6¹
¼
ÔCÑDÔDÐDØØð 	+ØÐ$Ý$ØOñô ð ð �MŠM˜'˜' &¨-¸Ô*:Ñ;Ô;Ñ<Ô<Ð<Ð<à�MŠM˜'˜' &™/œ/Ñ*Ô*Ð*Ð*åÔ  ¨Ñ.Ô.Ð.r*   c                  ó$   — e Zd ZU ded<   ded<   dS )ÚVmapInfoÚintÚ
batch_sizeÚstrÚ
randomnessN)r:   r;   r<   Ú__annotations__rt   r*   r)   rŽ   rŽ   "  s"   € € € € € € Ø€O€O�OØ€O€O�O€O€Or*   rŽ   Úboolc                ó<   — | j         t          j        j        j         uS r2   )r   r3   rh   ÚFunction)r+   s    r)   Úhas_overridden_vmap_ruler—   '  s   € ð Ô!­¬Ô)@Ô)EÐEÐEr*   ra   r    c                óæ   — d}t          | t          ¦  «        s#t          |dt          | ¦  «        › d�z   ¦  «        ‚t	          | ¦  «        dk    s#t          |dt	          | ¦  «        › d�z   ¦  «        ‚d S )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   rg   Úlen)ra   Úbase_error_msgs     r)   Ú+validate_vmap_returns_tuple_of_two_elementsr�   -  s…   € ð	Jð õ �f�eÑ$Ô$ð MÝ˜>Ð,KµT¸&±\´\Ð,KÐ,KÐ,KÑKÑLÔLÐLÝˆv‰;Œ;˜!ÒÐÝ˜>Ð,Pµ3°v±;´;Ð,PÐ,PÐ,PÑPÑQÔQÐQð Ðr*   r   r/   c                óœ  — t          d„ t          j        j                             |¦  «        d         D ¦   «         ¦  «        rt          d|› �¦  «        ‚|j        r5t          |¦  «        rt          d|j	        › d�¦  «        ‚t          | |g|¢R Ž S t          |¦  «        st          d|j	        › d�¦  «        ‚t          | |j        |g|¢R i |¤ŽS )Nc              3  óJ   K  — | ]}t          |t          j        ¦  «        V — Œd S r2   ©r�   r3   rS   )rv   Úvals     r)   ú	<genexpr>z,custom_function_call_vmap.<locals>.<genexpr>?  sB   è è € ð ð àõ 	�3�œÑ%Ô%ðð ð ð ð ð r*   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)Úanyr3   ÚutilsÚ_pytreer}   ÚNotImplementedErrorÚgenerate_vmap_ruler—   r   r:   Ú'custom_function_call_vmap_generate_ruleÚ custom_function_call_vmap_helperr   )r?   r+   r@   r/   s       r)   Úcustom_function_call_vmaprª   8  sf  € õ ð ð å”;Ô&×3Ò3°FÑ;Ô;¸AÔ>ðñ ô ñ ô ð 
õ "ðàðð ñ
ô 
ð 	
ð Ô+ð 
Ý#Ð$5Ñ6Ô6ð 
	õ ðKÐ*;Ô*Dð Kð Kð Kñô ð õ 7ØÐ*ð
Ø-5ð
ð 
ð 
ð 	
õ $Ð$5Ñ6Ô6ð 	
õ ðGÐ&7Ô&@ð Gð Gð Gñ
ô 
ð 	
õ ,ØÐ&Ô+Ð->ðØAIðð ð ØMSðð ð r*   Úvmap_functionÚopc                ó†  ‡ ‡‡— ‰                       ¦   «         Št          ‰                      ¦   «         ‰                      ¦   «         ¬¦  «        }t	          |t
          j        j        j        ¦  «        Šdˆˆ fd„}t          |‰¦  «        \  }}t          j        d„ |¦  «        rE |¦   «         5  ‰rt          |g|¢R Ž cd d d ¦  «         S  ||i |¤Žcd d d ¦  «         S # 1 swxY w Y    |¦   «         5   |||g|¢R i |¤Ž}	d d d ¦  «         n# 1 swxY w Y   t          |	¦  «         |	\  }
}dˆfd
„}t          |
||||¬¦  «        S )N)r�   r’   r   r   c                 óÐ   •— ‰ r‰                      ¦   «         S t          j                             t          j                             t          j        j        j        ¦  «        ¦  «        S r2   )rU   r3   r4   Ú_ExcludeDispatchKeyGuardÚDispatchKeySetÚDispatchKeyÚFuncTorchBatched)Úautograd_function_caser?   s   €€r)   Úlower_to_nextz7custom_function_call_vmap_helper.<locals>.lower_to_nexty  sR   ø€ Ø!ð 	Ø×$Ò$Ñ&Ô&Ð&å”8×4Ò4Ý”×'Ò'­¬Ô(<Ô(MÑNÔNñô ð r*   c                ó
   — | d u S r2   rt   )Údims    r)   rL   z2custom_function_call_vmap_helper.<locals>.<lambda>…  s
   €  3¨$ ;€ r*   rM   rN   Úout_dimú
int | Nonec                ó.   •— |€| nt          | |‰¦  «        S r2   )r   )rM   r·   r   s     €r)   rP   z1custom_function_call_vmap_helper.<locals>.wrap_fn’  s%   ø€ ð ˆð ˆFå ¨°Ñ?Ô?ð	
r*   )rq   )r   r   )rM   rN   r·   r¸   r   rN   )rK   rŽ   r�   r’   r�   r3   rh   ri   ÚFunctionMetar   rQ   Útree_allr"   r�   rV   )r?   r«   r¬   r@   r/   Úinfor´   rW   Úin_dimsra   rX   rq   rP   r³   r   s   `            @@r)   r©   r©   i  sg  øøø€ ð  ×%Ò%Ñ'Ô'€MÝØ×)Ò)Ñ+Ô+Ø×)Ò)Ñ+Ô+ðñ ô €Dõ (¨­E¬NÔ,CÔ,PÑQÔQÐðð ð ð ð ð ð õ #1°¸=Ñ"IÔ"IÑÐ˜õ „Ð.Ð.°Ñ8Ô8ð /Øˆ]‰_Œ_ð 	/ð 	/Ø%ð /Ý+¨BÐ:°Ð:Ð:Ð:ð	/ð 	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð �r˜8Ð. vÐ.Ð.ð		/ð 	/ð 	/ð 	/ñ 	/ô 	/ð 	/ð 	/ð 	/ð 	/ð 	/ð 	/øøøð 	/ð 	/ð 	/ð 	/ð 
ˆ‰Œð Mð MØ�˜t WÐLÐ/AÐLÐLÐLÀVÐLÐLˆðMð Mð Mñ Mô Mð Mð Mð Mð Mð Mð Møøøð Mð Mð Mð Må/°Ñ7Ô7Ð7Ø!'ÑÐ�hð
ð 
ð 
ð 
ð 
ð 
õ -ØÐ,¨h¸È(ðñ ô ð s*   Â+CÃCÃCÃ"CÃ0D
Ä
DÄDútuple[Any, ...]útuple[Any, Any]c                ój   — | d         }t          |t          ¦  «        r| d d…         } n| d         } | |fS )Néÿÿÿÿr   )r�   rš   )rm   rq   s     r)   Úunpack_outputsrÂ   ž  s@   € Ø�rŒ{€HÝ�(�EÑ"Ô"ð Ø˜#˜2˜#”,ˆˆà˜!”*ˆØ�HÐÐr*   c                óü  — t          ||                      ¦   «         ¦  «        \  }}t          |||                      ¦   «         |                      ¦   «         ¦  «        }|                      ¦   «         5  t          |g|¢R Ž }d d d ¦  «         n# 1 swxY w Y   t          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚t          |¦  «        \  }}t          |||                      ¦   «         ¦  «        S )Nz$expected outputs to be a tuple, got )r   rK   Úvmapify_autograd_functionr�   r’   rU   r"   r�   rš   rƒ   rg   rÂ   r   )r?   r+   r@   rW   r½   Úvmapped_functionrm   rq   s           r)   r¨   r¨   §  sL  € õ
 #1°¸;×;LÒ;LÑ;NÔ;NÑ"OÔ"OÑÐ˜Ý0ØØØ×ÒÑ Ô Ø×ÒÑ Ô ñ	ô Ðð 
×	Ò	Ñ	Ô	ð Nð NÝ&Ð'7ÐMÐ:LÐMÐMÐMˆðNð Nð Nñ Nô Nð Nð Nð Nð Nð Nð Nøøøð Nð Nð Nð Nõ �g�uÑ%Ô%ð UÝÐSÅDÈÁMÄMÐSÐSÑTÔTÐTÝ& wÑ/Ô/Ñ€GˆXÝ˜ ¨;×+<Ò+<Ñ+>Ô+>Ñ?Ô?Ð?s   Á0B
Â
BÂBr§   c                ó    — t          d¦  «        ‚)Nz0NYI: Functionalize rule for custom_function_call)r   )r?   r+   r§   r@   s       r)   Ú"custom_function_call_functionalizerÇ   ¼  s   € õ ÐIÑ
JÔ
JÐJr*   r½   r�   r�   r’   r‘   c           
     ó(  ‡ ‡‡‡‡	— dˆ ˆˆˆfd„}dˆ	ˆ ˆˆˆfd	„}dˆ	ˆ ˆˆˆfd„}dˆ	ˆ ˆˆˆfd„}d‰ j         › �}t          |t          j        j        ft          |¦  «        t          |¦  «        t          |¦  «        t          |¦  «        ddœ¦  «        Š	‰	S )Nr@   r   r   c                 óˆ   •—  t          ‰j        ‰‰‰¦  «        | Ž \  }}t          |t          j        ¦  «        r||fS g |¢|‘R S r2   )r   rY   r�   r3   rS   )r@   rm   rq   r+   r�   r½   r’   s      €€€€r)   rY   z*vmapify_autograd_function.<locals>.forwardÌ  sc   ø€ ð
�LØÔ% w°
¸Jñ
ô 
àðÑˆ�õ �g�uœ|Ñ,Ô,ð 	&Ø˜HÐ$Ð$à%�GÐ%˜XÐ%Ð%Ð%r*   rZ   r[   rm   r    c                ó   •‡ ‡— t          |¦  «        \  }}t          ‰¦  «        Šdˆˆ ˆfd„} t          |‰	|f‰‰
¦  «        ||¦  «         t          ‰ d¦  «        si ‰ _        ‰ j                             ‰|i¦  «         d S )	Nr[   r   rm   r   r    c                óv  •— t          ‰t          ¦   «         ¦  «        }‰                     || |¦  «         t          d„ | D ¦   «         ¦  «        }t	          ‰d¦  «        si ‰_        ‰j                             ‰|i¦  «         t	          ‰d¦  «        si ‰_        ‰j                             ‰|j        i¦  «         d S )Nc              3  ó\   K  — | ]'}t          |t          j        ¦  «        r|j        nd V — Œ(d S r2   )r�   r3   rS   Úshape)rv   Úinps     r)   r¢   zRvmapify_autograd_function.<locals>.setup_context.<locals>.inner.<locals>.<genexpr>å  sJ   è è € ð !ð !ØIL�Z¨­U¬\Ñ:Ô:ÐD�”	�	Àð!ð !ð !ð !ð !ð !r*   Ú_pt_input_shapesÚ_pt_saved_tensors_bdims_stack)	ÚCtxCustomSaver   r]   rš   ÚhasattrrÏ   ÚupdaterÐ   Ú_pt_saved_tensors_bdims)r[   rm   Úwrapped_ctxÚinput_shapesr+   rZ   Úkeys       €€€r)   Úinnerz?vmapify_autograd_function.<locals>.setup_context.<locals>.innerÙ  sá   ø€ õ
 (¨­]©_¬_Ñ=Ô=ˆKØ×+Ò+¨K¸ÀÑIÔIÐIõ !ð !ð !ØPVð!ñ !ô !ñ ô ˆLõ ˜3Ð 2Ñ3Ô3ð *à')�Ô$ØÔ ×'Ò'¨¨lÐ(;Ñ<Ô<Ð<å˜3Ð ?Ñ@Ô@ð 7à46�Ô1ØÔ-×4Ò4Ø�{Ô:Ð<ñô ð ð ð r*   Ú_pt_out_dims)r[   r   rm   r   r   r    )rÂ   ru   r   rÒ   rÙ   rÓ   )rZ   r[   rm   rq   rØ   r×   rC   r+   r�   r½   r’   s   `    @€€€€€r)   r]   z0vmapify_autograd_function.<locals>.setup_contextÕ  s¿   øøø€ Ý*¨7Ñ3Ô3Ñˆ�Ý�‰mŒmˆð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð8	
�ØØ�hÐØØñ		
ô 	
ð
 �'ñ	ô 	ð 	õ �s˜NÑ+Ô+ð 	"à!ˆCÔØÔ×Ò  h Ñ0Ô0Ð0Ð0Ð0r*   rb   c                ó8  •‡ — t          ‰¦  «        }dˆ	ˆ fd„}t          ‰|¦  «        } t          |‰ j        |         |f‰
‰¦  «        ‰ j        |¦  «        \  }}t          ||‰ j        |         ‰
¦  «        }t          |t          j	        ¦  «        r|d fS g |¢d ‘R S )NÚsaved_tensorsr   rb   r   c                ó@   •— t          ‰| ¦  «        } ‰j        |g|¢R Ž S r2   )ÚCtxWithSavedTensorsrd   )rÛ   rb   rÕ   r+   rZ   s      €€r)   Újvp_no_contextz>vmapify_autograd_function.<locals>.jvp.<locals>.jvp_no_context  s.   ø€ Ý-¨c°=ÑAÔAˆKØ(Ð$Ô(¨Ð@°xÐ@Ð@Ð@Ð@r*   )rÛ   r   rb   r   r   r   )
ru   Úget_tangents_in_dimsr   rÐ   rÛ   Ú	reductifyrÙ   r�   r3   rS   )rZ   rb   r×   rÞ   Útangent_in_dimsÚout_tangentsÚout_tangents_dimsra   rC   r+   r�   r½   r’   s   `       €€€€€r)   rd   z&vmapify_autograd_function.<locals>.jvp  sã   øø€ Ý�‰mŒmˆð	Að 	Að 	Að 	Að 	Að 	Að 	Aõ /¨w¸ÑAÔAˆð+
­,ØØÔ.¨sÔ3°_ÐEØØñ	+
ô +
ð
 Ô
˜Xñ+'ô +'Ñ'ˆÐ'õ ØÐ+¨SÔ-=¸cÔ-BÀJñ
ô 
ˆõ �f�eœlÑ+Ô+ð 	!Ø˜4�<Ðà �F�=˜D�=�=Ð r*   Úgrad_outputsc                ó„  •‡ — t          ‰	¦  «        }|d d…         }‰ j        |         }t          |t          ¦  «        s|f}t          d„ t	          ||¦  «        D ¦   «         ¦  «        }dˆ
ˆ fd„} t          |‰ j        |         |ff‰‰¦  «        ‰ j        |f¦  «        \  }}t          ||‰‰‰ j	        |         ¦  «        }|S )NrÁ   c              3  ó(   K  — | ]\  }}|�|nd V — Œd S r2   rt   )rv   Úgrad_outputÚin_dims      r)   r¢   z>vmapify_autograd_function.<locals>.backward.<locals>.<genexpr>   sC   è è € ð %
ð %
á#�˜Vð "Ð-ˆFˆF°4ð%
ð %
ð %
ð %
ð %
ð %
r*   r[   r   r   c                óJ   •— | \  }}t          ‰|¦  «        } ‰j        |g|¢R Ž S r2   )rÝ   r`   )r[   rÛ   rä   rÕ   r+   rZ   s       €€r)   Úbackward_no_contextzHvmapify_autograd_function.<locals>.backward.<locals>.backward_no_context%  s8   ø€ Ø*0Ñ'ˆM˜<Ý-¨c°=ÑAÔAˆKØ-Ð$Ô-¨kÐI¸LÐIÐIÐIÐIr*   )r[   r   r   r   )
ru   rÙ   r�   rš   r|   r   rÐ   rÛ   rà   rÏ   )rZ   rä   r×   Úgrad_outputs_Úgrad_outputs_in_dimsrê   Úgrad_insÚgrad_ins_dimsra   rC   r+   r�   r½   r’   s   `        €€€€€r)   r`   z+vmapify_autograd_function.<locals>.backward  s  øø€ Ý�‰mŒmˆØ$ S b SÔ)ˆØ"Ô/°Ô4ÐåÐ.µÑ6Ô6ð 	;Ø$8Ð#:Ð å$ð %
ð %
å'*¨=Ð:NÑ'OÔ'Oð%
ñ %
ô %
ñ  
ô  
Ðð
	Jð 	Jð 	Jð 	Jð 	Jð 	Jð 	Jð
#
¥,ØØÔ/°Ô4Ð6JÐKÐMØØñ	#
ô #
ð
 Ô˜mÐ
,ñ#.ô #.Ñˆ�-õ Ø�m W¨j¸#Ô:NÈsÔ:Sñ
ô 
ˆð ˆr*   ÚVmappedT)rY   r`   rd   r]   r§   re   )rZ   r   r[   r   rm   r   r   r    rf   )rZ   r   rä   r   r   r   )r:   rg   r3   rh   r–   rk   )
r+   r½   r�   r’   rY   r]   rd   r`   rl   rC   s
   ````     @r)   rÄ   rÄ   Æ  s<  øøøøø€ ð&ð &ð &ð &ð &ð &ð &ð &ð &ð*1ð *1ð *1ð *1ð *1ð *1ð *1ð *1ð *1ð *1ðX!ð !ð !ð !ð !ð !ð !ð !ð !ð !ð.ð ð ð ð ð ð ð ð ð ð: 2Ð&Ô/Ð1Ð1€DÝØÝ	ŒÔ	 Ð"å# GÑ,Ô,Ý$ XÑ.Ô.Ý Ñ$Ô$Ý)¨-Ñ8Ô8Ø"&ð	
ð 	
ñ
ô 
€Ið Ðr*   Ú
input_dimsrb   c                óª   — t          j        | ¦  «        \  }}t          j        |Ž }d„ t          ||¦  «        D ¦   «         }t          j        ||¦  «        S )Nc                ó    — g | ]\  }}|€d n|‘ŒS r2   rt   )rv   rè   Útangents      r)   ú
<listcomp>z(get_tangents_in_dims.<locals>.<listcomp>J  s4   € ð ð ð áˆF�Gð �ˆˆ Vðð ð r*   )rQ   r}   r{   r|   r„   )rð   rb   Úflat_in_dimsr‰   Úflat_tangentsra   s         r)   rß   rß   G  sa   € ÝÔ,¨ZÑ8Ô8Ñ€L�$ÝÔ*¨HÐ5€Mðð å" <°Ñ?Ô?ðñ ô €Fõ Ô  ¨Ñ.Ô.Ð.r*   c                  ó6   — e Zd ZU dZded<   dd„Zdd„Zdd„ZdS )Ú
WrappedCtx)Ú_pt_reserved_attrsÚ_pt_inner_ctxztuple[str, ...]rù   rZ   r   r   r    c                ó¶   — t          |t          ¦  «        s<t          | ¦  «        j        }|D ]%}t	          ||¦  «        sŒt          d|› d�¦  «        ‚|| _        d S )NzPyTorch reserves the zU field on ctx. Please name your fields on ctx something else to avoid name collision.)r�   rø   rg   rù   rÒ   r   rú   )r'   rZ   Úreserved_attrsrl   s       r)   r%   zWrappedCtx.__init__‰  s~   € Ý˜#�zÑ*Ô*ð 		Ý! $™ZœZÔ:ˆNØ&ð ð �Ý˜s DÑ)Ô)ð ØÝ"ð!¨Nð !ð !ð !ñô ð ð
 !ˆÔÐÐr*   rl   r‘   c                ó,   — t          | j        |¦  «        S r2   )Úgetattrrú   )r'   rl   s     r)   Ú__getattr__zWrappedCtx.__getattr__–  s   € Ý�tÔ)¨4Ñ0Ô0Ð0r*   Úvaluec                ór   — |t          | ¦  «        j        v r|| j        |<   d S t          | j        ||¦  «        S r2   )rg   rù   Ú__dict__Úsetattrrú   )r'   rl   r   s      r)   Ú__setattr__zWrappedCtx.__setattr__™  s<   € Ø•4˜‘:”:Ô0Ð0Ð0Ø"'ˆDŒM˜$ÑØˆFÝ�tÔ)¨4°Ñ7Ô7Ð7r*   N)rZ   r   r   r    )rl   r‘   r   r   )rl   r‘   r   r   r   r    )r:   r;   r<   rù   r“   r%   rÿ   r  rt   r*   r)   rø   rø   †  sd   € € € € € € Ø*QÐÐQÐQÐQÑQð!ð !ð !ð !ð1ð 1ð 1ð 1ð8ð 8ð 8ð 8ð 8ð 8r*   rø   c                  óN   ‡ — e Zd Zdgej        ¢R Zd
ˆ fd„Zedd	„¦   «         Zˆ xZS )rÝ   Ú_pt_new_saved_tensorsrZ   r   Únew_saved_tensorsúSequence[torch.Tensor]r   r    c                óX   •— t          ¦   «                              |¦  «         || _        d S r2   )r$   r%   r  )r'   rZ   r  r(   s      €r)   r%   zCtxWithSavedTensors.__init__¤  s)   ø€ Ý‰Œ×Ò˜ÑÔÐØ%6ˆÔ"Ð"Ð"r*   c                ó   — | j         S r2   )r  )r'   s    r)   rÛ   z!CtxWithSavedTensors.saved_tensors¨  s   € àÔ)Ð)r*   )rZ   r   r  r  r   r    )r   r  )	r:   r;   r<   rø   rù   r%   ÚpropertyrÛ   r=   r>   s   @r)   rÝ   rÝ   ¡  sq   ø€ € € € € Ø1ÐR°JÔ4QÐRÐRÐð7ð 7ð 7ð 7ð 7ð 7ð ð*ð *ð *ñ „Xð*ð *ð *ð *ð *r*   rÝ   c                  óH   ‡ — e Zd Zddgej        ¢R Zdˆ fd	„Zdd„Zdd„Zˆ xZS )rÑ   rÔ   Ú_pt_current_levelrZ   r   r   r�   r   r    c                óf   •— t          ¦   «                              |¦  «         d| _        || _        d S )Nrt   )r$   r%   rÔ   r  )r'   rZ   r   r(   s      €r)   r%   zCtxCustomSave.__init__´  s1   ø€ Ý‰Œ×Ò˜ÑÔÐØ8:ˆÔ$Ø!.ˆÔÐÐr*   ÚtensorsrN   c                ób   — t          || j        ¦  «        \  }} | j        j        |Ž  || _        d S r2   )r   r  rú   Úsave_for_backwardrÔ   ©r'   r  Úunwrapped_tensorsÚbdimss       r)   r  zCtxCustomSave.save_for_backward¹  s<   € Ý#1°'¸4Ô;QÑ#RÔ#RÑ Ð˜5Ø,ˆÔÔ,Ð.?Ð@Ð@Ø',ˆÔ$Ð$Ð$r*   c                ób   — t          || j        ¦  «        \  }} | j        j        |Ž  || _        d S r2   )r   r  rú   Úsave_for_forwardrÔ   r  s       r)   r  zCtxCustomSave.save_for_forward¾  s<   € Ý#1°'¸4Ô;QÑ#RÔ#RÑ Ð˜5Ø+ˆÔÔ+Ð->Ð?Ð?Ø',ˆÔ$Ð$Ð$r*   )rZ   r   r   r�   r   r    )r  rN   r   r    )	r:   r;   r<   rø   rù   r%   r  r  r=   r>   s   @r)   rÑ   rÑ   ­  s…   ø€ € € € € à!Øðð 
Ô	&ðð Ðð/ð /ð /ð /ð /ð /ð
-ð -ð -ð -ð
-ð -ð -ð -ð -ð -ð -ð -r*   rÑ   Ú
grad_inputú'torch.Tensor | tuple[torch.Tensor, ...]Úgrad_input_bdimúint | tuple[int, ...]Ú
input_bdimÚ&target_shape_without_bdim_to_reduce_toc           	     ó  ‡— t          | t          ¦  «        s| f} t          |t          ¦  «        s|f}t          |t          ¦  «        s|f}|€t          | ¦  «        dz  }t          ˆfd„t          | |||¦  «        D ¦   «         ¦  «        }|S )Nr2   c              3  óH   •K  — | ]\  }}}}t          |||‰|¦  «        V — Œd S r2   )Úreductify_leaf)rv   ÚgiÚgi_bdimÚi_bdimÚmaybe_ishaper�   s        €r)   r¢   zreductify.<locals>.<genexpr>Ô  sO   øè è € ð ð á-ˆB�˜ õ 	�r˜7 F¨J¸ÑEÔEðð ð ð ð ð r*   )r�   rš   r›   r|   )r  r  r  r�   r  ra   s      `  r)   rà   rà   Ä  sº   ø€ õ �j¥%Ñ(Ô(ð #Ø �]ˆ
Ý�o¥uÑ-Ô-ð -Ø*Ð,ˆÝ�j¥%Ñ(Ô(ð #Ø �]ˆ
à-Ð5Ý14°Z±´À7Ñ1JÐ.Ýð ð ð ð å14ØØØØ2ñ	2
ô 2
ðñ ô ñ ô €Fð €Mr*   útorch.Tensor | Noner¸   c                ó’  — | €d S |€|€| S |�|€|                       |¦  «        S |€t          d¦  «        ‚|€E|                      |¦  «        } t          | j        ¦  «        }|||<   |                      |¦  «        } |}|�- t          t          j        j	        |d f|¬¦  «        | |¦  «        S ||k    r|  
                    ||¦  «        } | S )Nzinput_bdim must not be None)r½   rq   )Úsumrƒ   Ú	unsqueezeÚlistrÍ   Úexpandr   r3   rS   Úsum_to_sizeÚmovedim)r  r  r  r�   r  Ú	new_shapes         r)   r  r  à  s  € ð ÐØˆtàÐ :Ð#5ØÐàÐ" zÐ'9Ø�~Š~˜oÑ.Ô.Ð.ð0 ÐÝÐ:Ñ;Ô;Ð;àÐØ×)Ò)¨*Ñ5Ô5ˆ
Ý˜Ô)Ñ*Ô*ˆ	Ø *ˆ	�*ÑØ×&Ò& yÑ1Ô1ˆ
Ø$ˆà-Ð9ð
�tÝŒLÔ$Ø$ dÐ+Øð
ñ 
ô 
ð Ð<ñ	>ô >ð 	>ð �_Ò$Ð$Ø×'Ò'¨¸ÑDÔDˆ
ØÐr*   Úoriginal_forwardúCallable[_P, _R]Úoriginal_setup_contextúCallable[..., _R]c                ó   ‡ ‡— d
ˆ ˆfd	„}|S )NrZ   r   r-   r.   r/   r0   r   r   c                ó2   •—  ‰|i |¤Ž} ‰| ||¦  «         |S r2   rt   )rZ   r-   r/   rM   r-  r/  s       €€r)   Únew_forwardz8autograd_function_forward_rewritten.<locals>.new_forward   s2   ø€ Ø!Ð! 4Ð2¨6Ð2Ð2ˆØÐ˜s D¨&Ñ1Ô1Ð1Øˆr*   )rZ   r   r-   r.   r/   r0   r   r   rt   )r-  r/  r3  s   `` r)   Ú#autograd_function_forward_rewrittenr4    s/   øø€ ðð ð ð ð ð ð ð
 Ðr*   c                  ó(   ‡ — e Zd Zdˆ fd„Zdd
„Zˆ xZS )ÚAutogradFunctionApplyr   r    c                óJ   •— t          ¦   «                              d¦  «         d S )NÚautograd_function_applyr#   r&   s    €r)   r%   zAutogradFunctionApply.__init__)  s"   ø€ Ý‰Œ×ÒÐ2Ñ3Ô3Ð3Ð3Ð3r*   Úfwdútorch.fx.GraphModuleÚbwdÚfwd_argsr   Ú
fwd_kwargsc           	     óÜ   ‡‡‡‡‡‡	‡
— d Š
|                      dg ¦  «        Št          ‰¦  «        Š|d         Š|d         Š	 G ˆˆˆˆˆˆ	ˆ
fd„dt          j        j        ¦  «        } |j        |Ž S )NÚ	dirty_idxÚnon_differentiable_idxÚsaved_for_backward_idxc                  ón   •— e Zd Zedˆˆˆfd„¦   «         Zedˆˆˆfd„¦   «         Zedˆ ˆfd„¦   «         ZdS )ú5AutogradFunctionApply.__call__.<locals>.ApplyTemplater-   r   r/   r   c                 óÒ   •— t          j                             ‰¦  «        j        | Ž \  }Š	ddlm} t          ‰	¦  «        D ]&\  }}|‰vr ||¦  «        D ]}d|j        j        d<   ŒŒ'|S )Nr   )Ú_get_proxiesTÚsaved_tensor_with_no_vc_check)	r3   ÚfxÚInterpreterÚrunÚ"torch.fx.experimental.proxy_tensorrE  r€   ÚnodeÚmeta)
r-   r/   rM   rE  ÚidxÚtÚproxyr9  rA  Úsaved_valuess
          €€€r)   rY   z=AutogradFunctionApply.__call__.<locals>.ApplyTemplate.forward:  s–   ø€ õ (-¤x×';Ò';¸CÑ'@Ô'@Ô'DÀdÐ'KÑ$�˜ð LÐKÐKÐKÐKÐKå'¨Ñ5Ô5ð Tð T‘F�C˜ØÐ"8Ð8Ð8Ø%1 \°!¡_¤_ð Tð T˜EØOS˜EœJœOÐ,KÑLÐLøà�r*   rZ   r[   r¾   rM   r    c                ó²   •‡— dˆfd„}t          ‰¦  «        dk    r | j         |‰¦  «        Ž  t          ‰¦  «        dk    r | j         |‰¦  «        Ž  d S d S )NrM  úIterable[int]r   ú	list[Any]c                ó¤   •‡— t          | ¦  «        Št          ‰t          t          f¦  «        rˆfd„t	          ‰¦  «        D ¦   «         S d‰v r‰gng S )Nc                ó"   •— g | ]\  }}|‰v ¯	|‘ŒS rt   rt   )rv   rŒ   rJ   Úidx_sets      €r)   rô   zqAutogradFunctionApply.__call__.<locals>.ApplyTemplate.setup_context.<locals>.selected_outputs.<locals>.<listcomp>U  s"   ø€ ÐPÐPÐP¡d a¨À1ÈÀ<À< À<À<À<r*   r   )Úsetr�   rš   r(  r€   )rM  rV  rM   s    @€r)   Úselected_outputsz]AutogradFunctionApply.__call__.<locals>.ApplyTemplate.setup_context.<locals>.selected_outputsR  s\   øø€ Ý! #™hœh�GÝ! &­5µ$¨-Ñ8Ô8ð QØPÐPÐPÐP­i¸Ñ.?Ô.?ÐPÑPÔPÐPØ'(¨G | |˜F˜8˜8¸Ð;r*   r   )rM  rR  r   rS  )r›   Ú
mark_dirtyÚmark_non_differentiable)rZ   r[   rM   rX  r?  Údirty_idx_setr@  s     ` €€€r)   r]   zCAutogradFunctionApply.__call__.<locals>.ApplyTemplate.setup_contextP  s™   øø€ ð<ð <ð <ð <ð <ð <õ �y‘>”> AÒ%Ð%Ø"�C”NÐ$4Ð$4°]Ñ$CÔ$CÐDÐDõ Ð-Ñ.Ô.°Ò2Ð2Ø/�CÔ/Ø)Ð)Ð*@ÑAÔAðð ð ð ð 3Ð2r*   Úgradc                ó|   •— ‰€t          d¦  «        ‚t          j                             ‰¦  «        j        g |¢‰¢R Ž S )Nzsaved_values must not be None)rƒ   r3   rG  rH  rI  )rZ   r\  r;  rP  s     €€r)   r`   z>AutogradFunctionApply.__call__.<locals>.ApplyTemplate.backwardb  sF   ø€ ð  Ð'Ý(Ð)HÑIÔIÐIÝ”x×+Ò+¨CÑ0Ô0Ô4ÐJ°dÐJ¸\ÐJÐJÐJÐJr*   N)r-   r   r/   r   r   r   )rZ   r   r[   r¾   rM   r   r   r    )rZ   r   r\  r   r   r   )r:   r;   r<   rk   rY   r]   r`   )r;  r?  r[  r9  r@  rA  rP  s   €€€€€€€r)   ÚApplyTemplaterC  9  s³   ø€ € € € € Øðð ð ð ð ð ð ñ Œ\ðð* ðð ð ð ð ð ð ñ Œ\ðð" ðKð Kð Kð Kð Kð Kñ Œ\ðKð Kð Kr*   r^  )ÚgetrW  r3   rh   r–   r7   )r'   r9  r;  r<  r=  r^  r?  r[  r@  rA  rP  s    ``   @@@@@r)   r6   zAutogradFunctionApply.__call__,  sÀ   øøøøøøø€ ð .2ˆØ—N’N ;°Ñ3Ô3ˆ	Ý˜I™œˆØ!+Ð,DÔ!EÐØ!+Ð,DÔ!EÐð1	Kð 1	Kð 1	Kð 1	Kð 1	Kð 1	Kð 1	Kð 1	Kð 1	Kð 1	Kð 1	Kð 1	Kð 1	K�EœNÔ3ñ 1	Kô 1	Kð 1	Kðf #ˆ}Ô" HÐ-Ð-r*   r8   )
r9  r:  r;  r:  r<  r   r=  r   r   r   r9   r>   s   @r)   r6  r6  (  sY   ø€ € € € € ð4ð 4ð 4ð 4ð 4ð 4ð@.ð @.ð @.ð @.ð @.ð @.ð @.ð @.r*   r6  c                  ó&   — e Zd Zedd„¦   «         ZdS )Ú!DynamoAutogradFunctionTraceHelperÚorig_fwdúCallable[_P, Any]r   c                ó   ‡ — dˆ fd„}|S )	Nr-   r.   r/   r0   r   r   c                 óz  •‡ ‡— t          j        ¦   «         5   ‰	‰ i |¤Ž}d d d ¦  «         n# 1 swxY w Y   ‰ d         }t          |dd ¦  «        Šd	ˆfd„}d	ˆ fd„}t          |t           j        ¦  «        r- ||¦  «        r  ||¦  «        s|                     |¦  «        S |S g }|D ]†}t          |t           j        ¦  «        rU ||¦  «        r4 ||¦  «        s)|                     |                     |¦  «        ¦  «         Œ[|                     |¦  «         Œq|                     |¦  «         Œ‡t          |¦  «        S )
Nr   Údirty_tensorsÚtensorrN   r   r”   c                óD   •‡ — ‰€dS t          ˆ fd„‰D ¦   «         ¦  «        S )NFc              3  óT   •K  — | ]"}t          |t          j        ¦  «        ¯‰|u V — Œ#d S r2   r    )rv   Údirty_tensorrg  s     €r)   r¢   zmDynamoAutogradFunctionTraceHelper.fwd_trace_helper.<locals>.inner.<locals>.is_dirty_tensor.<locals>.<genexpr>‚  sN   øè è € ð ð à$Ý! ,µ´Ñ=Ô=ðØ˜lÐ*ðð ð ð ð ð r*   ©r£   )rg  rf  s   `€r)   Úis_dirty_tensorzZDynamoAutogradFunctionTraceHelper.fwd_trace_helper.<locals>.inner.<locals>.is_dirty_tensor  sG   øø€ Ø Ð(Ø ˜5Ýð ð ð ð à(5ðñ ô ñ ô ð r*   c                ó<   •‡ — t          ˆ fd„‰D ¦   «         ¦  «        S )Nc              3  óT   •K  — | ]"}t          |t          j        ¦  «        ¯|‰u V — Œ#d S r2   r    )rv   Úargrg  s     €r)   r¢   zkDynamoAutogradFunctionTraceHelper.fwd_trace_helper.<locals>.inner.<locals>.is_tensor_arg.<locals>.<genexpr>‰  sL   øè è € ð ð Ø&)µZÀÅUÄ\Ñ5RÔ5RðØ˜6�Mðð ð ð ð ð r*   rk  )rg  r-   s   `€r)   Úis_tensor_argzXDynamoAutogradFunctionTraceHelper.fwd_trace_helper.<locals>.inner.<locals>.is_tensor_argˆ  s<   øø€ Ýð ð ð ð Ø-1ðñ ô ñ ô ð r*   )rg  rN   r   r”   )r3   Úno_gradrþ   r�   rS   Úview_asr‚   rš   )
r-   r/   ÚoutsrZ   rl  rp  Únew_outsÚoutrf  rb  s
   `       @€r)   rØ   zADynamoAutogradFunctionTraceHelper.fwd_trace_helper.<locals>.innerx  sÄ  øøø€ Ý”‘”ð 1ð 1Ø�x Ð0¨Ð0Ð0�ð1ð 1ð 1ñ 1ô 1ð 1ð 1ð 1ð 1ð 1ð 1øøøð 1ð 1ð 1ð 1ð �q”'ˆCÝ# C¨¸$Ñ?Ô?ˆMðð ð ð ð ð ðð ð ð ð ð õ ˜$¥¤Ñ-Ô-ð  Ø �= Ñ&Ô&ð  ¨¨¸tÑ/DÔ/Dð  ØŸ<š<¨Ñ-Ô-Ð-à�KàˆHØð )ð )�Ý˜c¥5¤<Ñ0Ô0ð )Ø$�} SÑ)Ô)ð -°/°/À#Ñ2FÔ2Fð -Ø Ÿš¨¯ª°CÑ(8Ô(8Ñ9Ô9Ð9Ð9à Ÿš¨Ñ,Ô,Ð,Ð,à—O’O CÑ(Ô(Ð(Ð(Ý˜‘?”?Ð"s   —	,¬0³0)r-   r.   r/   r0   r   r   rt   )rb  rØ   s   ` r)   Úfwd_trace_helperz2DynamoAutogradFunctionTraceHelper.fwd_trace_helpers  s)   ø€ ð
&	#ð &	#ð &	#ð &	#ð &	#ð &	#ð^ ˆr*   N)rb  rc  r   rc  )r:   r;   r<   rk   rv  rt   r*   r)   ra  ra  r  s2   € € € € € Øð3ð 3ð 3ñ „\ð3ð 3ð 3r*   ra  )r?   r   r+   r,   r@   r   r   r   )r?   r   r+   r,   r   rF   )rm   r   rn   r   ro   r   rP   rp   rq   r   r   r   )r+   r,   r   r”   )ra   r   r   r    )
r?   r   r+   r,   r@   r   r/   r   r   r   )r?   r   r«   rp   r¬   r   r@   r   r/   r   r   r   )rm   r¾   r   r¿   )r?   r   r+   r,   r@   r   r   r   )
r?   r   r+   r,   r§   r”   r@   r   r   r   )
r+   r,   r½   r   r�   r�   r’   r‘   r   r,   )rð   r   rb   r¾   r   r   r2   )r  r  r  r  r  r  r�   r�   r  r   r   r¾   )r  r$  r  r¸   r  r¸   r�   r�   r  r   r   r$  )r-  r.  r/  rp   r   r0  )HÚ
__future__r   Útypingr   r   r   Útyping_extensionsr   r   r3   Útorch.utils._pytreer¤   r¥   rQ   Ú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ÚJvprE   rB   r~   rV   rŽ   r—   r�   ÚVmaprª   r©   rÂ   r¨   ÚFunctionalizerÇ   rÄ   rß   rø   rÝ   rÑ   rà   r  r4  r6  r8  ra  rt   r*   r)   ú<module>rˆ     s×  ðØ "Ð "Ð "Ð "Ð "Ð "à 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0Ð 0à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $ðð ð ð ð ð ð ð ð ð ð ð ð 'Ð &Ð &Ð &Ð &Ð &Ø HÐ HÐ HÐ HÐ HÐ Hðð ð ð ð ð ð ð ð ð ð ð ð ð ð +Ð *Ð *Ð *Ð *Ð *Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;ð ð SØ<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<Ð<àRÐRÐRÐRÐRÐRÐRÐRà€Yˆt�_„_€Ø€WˆT�]„]€ð8ð 8ð 8ð 8ð 8Ð(;ñ 8ô 8ð 8ð@ 9Ð8Ñ:Ô:Ð ð< ×Ò˜mÔ0Ñ1Ô1Ø×Ò˜mÔ/Ñ0Ô0ð	ð 	ð 	ñ 1Ô0ñ 2Ô1ð	ð6ð 6ð 6ð 6ðD €ð  ð5/ð 5/ð 5/ð 5/ð 5/ðDð ð ð ð ˆzñ ô ð ð
Fð Fð Fð FðRð Rð Rð Rð ×Ò˜mÔ0Ñ1Ô1ð-ð -ð -ñ 2Ô1ð-ð`2ð 2ð 2ð 2ðjð ð ð ð@ð @ð @ð @ð* ×Ò˜mÔ9Ñ:Ô:ðKð Kð Kñ ;Ô:ðKð|ð |ð |ð |ðB/ð /ð /ð /ð~8ð 8ð 8ð 8ð 8ñ 8ô 8ð 8ð6	*ð 	*ð 	*ð 	*ð 	*˜*ñ 	*ô 	*ð 	*ð-ð -ð -ð -ð -�Jñ -ô -ð -ð8 37ðð ð ð ð ðB 37ð9ð 9ð 9ð 9ð 9ðx	ð 	ð 	ð 	ðD.ð D.ð D.ð D.ð D.Ð/ñ D.ô D.ð D.ðN 0Ð/Ñ1Ô1Ð ð5ð 5ð 5ð 5ð 5ñ 5ô 5ð 5ð 5ð 5r*   