Ë
    g^(hAp  ã                   ó†  — d dl 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  G d	„ d
e«      Z e«       Zej9                  ej:                  «      ej9                  ej<                  «      d„ «       «       Zd„ Z dZ!e!fd„Z" G d„ de«      Z#d„ Z$d„ Z%ej9                  ejL                  «      d„ «       Z'd„ Z(d„ Z)d„ Z*ej9                  ejV                  «      d„ «       Z,d„ Z-d„ Z. G d„ d«      Z/ G d„ de/«      Z0 G d„ de/«      Z1	 d%d „Z2	 d%d!„Z3d"„ Z4 G d#„ d$e«      Z5 e5«       Z6y)&é    )Ú
NamedTupleN)Ú_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_enabledc                   ó*   ‡ — e Zd Zdˆ fd„Zˆ fd„Zˆ xZS )Ú!CustomFunctionHigherOrderOperatorc                 ó$   •— t         ‰| �  d«       y )NÚcustom_function_call©ÚsuperÚ__init__©ÚselfÚ	__class__s    €ú`/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/torch/_functorch/autograd_function.pyr   z*CustomFunctionHigherOrderOperator.__init__!   s   ø€ Ü‰ÑÐ/Õ0ó    c                 óŠ   •— t         j                  j                  «       rt        ‰| �  |g|¢­i |¤ŽS  |j
                  |i |¤ŽS ©N)ÚtorchÚ_CÚ _are_functorch_transforms_activer   Ú__call__Úapply)r   Úautograd_functionÚargsÚkwargsr   s       €r   r"   z*CustomFunctionHigherOrderOperator.__call__$   sI   ø€ ô �8‰8×4Ñ4Ô6Ü‘7Ñ#Ð$5ÐG¸ÒGÀÑGÐGØ&Ð ×&Ñ&¨Ð7°Ñ7Ð7r   ©ÚreturnN©Ú__name__Ú
__module__Ú__qualname__r   r"   Ú__classcell__©r   s   @r   r   r       s   ø„ õ1÷8ð 8r   r   c                 ó|   — t        | |«      }t        «       5   |j                  |Ž }d d d «       |S # 1 sw Y   S xY wr   )Úgenerate_single_level_functionr	   r#   )Úinterpreterr$   ÚoperandsÚ	GeneratedÚflat_outs        r   Úcustom_function_call_gradr5   X   sA   € ô /¨{Ð<MÓN€IÜ	.Ó	0ñ .Ø"�9—?‘? HÐ-ˆ÷.à€O÷.à€Oús   —1±;c           
      ó(  ‡ ‡‡— ‰ j                  «       Šˆˆ ˆfd„}ˆfd„}ˆfd„}ˆfd„}‰j                  › d�}t        |t        j                  j
                  j                  ft        |«      t        |«      t        |«      t        |«      dœ«      }|S )Nc                  ón  •— t        j                  t        j                  ˆfd„| «      }t        j                  «       5  t        d«      5  ‰j                  «       5  t        ‰g|¢­Ž }d d d «       d d d «       d d d «       ˆfd„}t        || |«      S # 1 sw Y   Œ,xY w# 1 sw Y   Œ0xY w# 1 sw Y   Œ4xY w)Nc                 ó   •— t        | ‰«      S r   )r   )ÚxÚlevels    €r   ú<lambda>zAgenerate_single_level_function.<locals>.forward.<locals>.<lambda>f   s   ø€ Ô$4°Q¸Ó$>€ r   Tc                 ó   •— t        | ‰«      S r   )r   )Úoutputr:   s    €r   Úwrap_fnz@generate_single_level_function.<locals>.forward.<locals>.wrap_fnq   s   ø€ Ü! &¨%Ó0Ð0r   )	ÚpytreeÚtree_map_onlyr   ÚTensorÚenable_gradr   Úlowerr   Ú!wrap_outputs_maintaining_identity)r2   Úunwrapped_operandsÚunwrapped_outputr>   r$   r1   r:   s       €€€r   Úforwardz/generate_single_level_function.<locals>.forwardd   s´   ø€ Ü#×1Ñ1Ü�L‰LÓ>Àó
Ðô ×ÑÓ ñ 	Ô"7¸Ó"=ñ 	¸{×?PÑ?PÓ?Rñ 	Ü3Ø!ð Ø$6ò Ð÷	÷ 	÷ 	ô	1ô 1ØÐ0°(¸Gó
ð 	
÷	ð 	ú÷ 	ð 	ú÷ 	ð 	ús;   ¾B+Á
BÁBÁ(BÁ0B+ÂBÂBÂB(	Â$B+Â+B4c                 ó*   •— ‰j                  | ||«      S r   )Úsetup_context)ÚctxÚinputsr=   r$   s      €r   rI   z5generate_single_level_function.<locals>.setup_contextx   s   ø€ Ø ×.Ñ.¨s°F¸FÓCÐCr   c                 ó.   •—  ‰j                   | g|¢­Ž }|S r   )Úbackward)rJ   ÚgradsÚresultr$   s      €r   rM   z0generate_single_level_function.<locals>.backward|   s    ø€ Ø+Ð"×+Ñ+¨CÐ8°%Ò8ˆØˆr   c                 ó.   •—  ‰j                   | g|¢­Ž }|S r   )Újvp)rJ   ÚtangentsrO   r$   s      €r   rQ   z+generate_single_level_function.<locals>.jvp�   s    ø€ Ø&Ð"×&Ñ& sÐ6¨XÒ6ˆØˆr   r3   )rG   rM   rQ   rI   )r:   r*   Útyper   ÚautogradÚfunctionÚ_SingleLevelFunctionÚstaticmethod)	r1   r$   rG   rI   rM   rQ   Únamer3   r:   s	   ``      @r   r0   r0   a   s‹   ú€ Ø×ÑÓ€Eö
ô(Dôô
ð  ×(Ñ(Ð)¨Ð3€DÜØÜ	�‰×	 Ñ	 ×	5Ñ	5Ð7ä# GÓ,Ü$ XÓ.Ü Ó$Ü)¨-Ó8ñ		
ó	€Ið Ðr   znot specifiedc           	      óÌ  — t        j                  |Ž }t        j                  |Ž }t        ||«      D ��ci c]  \  }}t        |«      |“Œ }	}}t        j                  | «      \  }
}g }|t
        k7  }|r9t        ||«      }|€+t        d|› dt        j                  |«      d   › d|› d�«      ‚t        |
«      D ]‘  \  }}t        |t        j                  «      s|j                  |«       Œ2t        |«      |	v r|j                  |	t        |«         «       Œ]|r|j                   |||   «      «       Œ{|j                   ||«      «       Œ“ t        j                  ||«      S c c}}w )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.html)r?   Úarg_tree_leavesÚzipÚidÚtree_flattenÚNO_OUT_DIMSr   ÚRuntimeErrorÚ	enumerateÚ
isinstancer   rA   ÚappendÚtree_unflatten)ÚoutputsÚunwrapped_inputsÚorig_inputsr>   Úout_dimsÚflat_unwrapped_inputsÚflat_orig_inputsÚ	unwrappedÚorigÚunwrapped_input_to_orig_inputÚflat_outputsÚspecrO   Úout_dims_specifiedÚflat_out_dimsÚir=   s                    r   rD   rD   §   s‡  € ô #×2Ñ2Ð4DÐEÐÜ×-Ñ-¨{Ð;Ðô  #Ð#8Ð:JÓK÷%áˆI�tô 	ˆ9‹�tÑð%Ð!ñ %ô
  ×,Ñ,¨WÓ5Ñ€L�$Ø€Fà!¤[Ñ0ÐáÜ1°(¸DÓAˆð Ð Üð%à%- Jð /*ä*0×*=Ñ*=¸hÓ*GÈÑ*JÐ)Kð L,Ø,0¨6ð 2JðKó	ð 	ô ˜|Ó,ò 
+‰	ˆˆ6Ü˜&¤%§,¡,Ô/Ø�M‰M˜&Ô!ØÜˆf‹:Ð6Ñ6Ø�M‰MÐ7¼¸6»
ÑCÔDØÙØ�M‰M™' &¨-¸Ñ*:Ó;Õ<à�M‰M™' &›/Õ*ð
+ô × Ñ  ¨Ó.Ð.ùóM%s   ´E c                   ó"   — e Zd ZU eed<   eed<   y)ÚVmapInfoÚ
batch_sizeÚ
randomnessN)r*   r+   r,   ÚintÚ__annotations__Ústr© r   r   rt   rt      s   … ØƒOØ„Or   rt   c                 ób   — | j                   t        j                  j                  j                   uS r   )r   r   rT   ÚFunction)r$   s    r   Úhas_overriden_vmap_ruler}     s#   € Ø×!Ñ!¬¯©×)@Ñ)@×)EÑ)EÐEÐEr   c                 ó°   — d}t        | t        «      st        |dt        | «      › d�z   «      ‚t	        | «      dk(  st        |dt	        | «      › d�z   «      ‚y )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)rb   Útupler`   rS   Úlen)rO   Úbase_error_msgs     r   Ú+validate_vmap_returns_tuple_of_two_elementsrƒ   	  se   € ð	Jð ô �fœeÔ$Ü˜>¨f´T¸&³\°NÀ(Ð,KÑKÓLÐLÜˆv‹;˜!ÒÜ˜>¨d´3°v³;°-Ð?OÐ,PÑPÓQÐQð r   c                 óŽ  — t        d„ t        j                  j                  j	                  |«      d   D «       «      rt        d|› �«      ‚|j                  r1t        |«      rt        d|j                  › d�«      ‚t        | |g|¢­Ž S t        |«      st        d|j                  › d�«      ‚t        | |j                  |g|¢­i |¤ŽS )Nc              3   óP   K  — | ]  }t        |t        j                  «      –— Œ  y ­wr   )rb   r   rA   )Ú.0Úvals     r   ú	<genexpr>z,custom_function_call_vmap.<locals>.<genexpr>  s#   è ø€ ò àô 	�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 overriden vmap staticmethod. Please set generate_vmap_rule=False or delete the overriden 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   )r1   r$   r2   r&   s       r   Úcustom_function_call_vmapr�     s  € ä
ñ ä—;‘;×&Ñ&×3Ñ3°FÓ;¸AÑ>ôô ô "ðà�8ðó
ð 	
ð ×+Ò+Ü"Ð#4Ô5ô Ø)Ð*;×*DÑ*DÐ)Eð FJð Kóð ô 7ØÐ*ð
Ø-5ò
ð 	
ô #Ð#4Ô5ô Ø%Ð&7×&@Ñ&@Ð%Að BFð Gó
ð 	
ô ,ØÐ&×+Ñ+Ð->ðØAIòØMSñð r   c                 óB  ‡ ‡‡— ‰ j                  «       Št        ‰ j                  «       ‰ j                  «       ¬«      }t	        |t
        j                  j                  j                  «      Šˆˆ fd„}t        |‰«      \  }}t        j                  d„ |«      r0 |«       5  ‰rt        |g|¢­Ž cd d d «       S  ||i |¤Žcd d d «       S  |«       5   |||g|¢­i |¤Ž}	d d d «       t        	«       |	\  }
}ˆfd„}t        |
||||¬«      S # 1 sw Y   ŒKxY w# 1 sw Y   Œ:xY w)N)ru   rv   c                  óä   •— ‰ r‰j                  «       S t        j                  j                  t        j                  j	                  t        j                  j
                  j                  «      «      S r   )rC   r   r    Ú_ExcludeDispatchKeyGuardÚDispatchKeySetÚDispatchKeyÚFuncTorchBatched)Úautograd_function_caser1   s   €€r   Úlower_to_nextz7custom_function_call_vmap_helper.<locals>.lower_to_nextL  sN   ø€ Ù!Ø×$Ñ$Ó&Ð&ä—8‘8×4Ñ4Ü—‘×'Ñ'¬¯©×(<Ñ(<×(MÑ(MÓNóð r   c                 ó
   — | d u S r   rz   )Údims    r   r;   z2custom_function_call_vmap_helper.<locals>.<lambda>X  s
   €  3¨$ ;€ r   c                 ó&   •— |€| S t        | |‰«      S r   )r
   )r=   Úout_dimr   s     €r   r>   z1custom_function_call_vmap_helper.<locals>.wrap_fne  s'   ø€ ð ˆð ð	
ô   ¨°Ó?ð	
r   )rh   )r:   rt   ru   rv   rb   r   rT   rU   ÚFunctionMetar   r?   Útree_allr   rƒ   rD   )r1   Úvmap_functionÚopr2   r&   Úinfor˜   rE   Úin_dimsrO   rF   rh   r>   r—   r   s   `            @@r   r�   r�   @  s0  ú€ ð  ×%Ñ%Ó'€MÜØ×)Ñ)Ó+Ø×)Ñ)Ó+ô€Dô (¨¬E¯N©N×,CÑ,C×,PÑ,PÓQÐõô #1°¸=Ó"IÑÐ˜ô ‡�Ñ.°Ô8Ù‹_ñ 	/Ù%Ü+¨BÐ:°Ò:÷	/ñ 	/ñ ˜8Ð. vÑ.÷		/ñ 	/ñ 
‹ñ MÙ˜t WÐLÐ/AÒLÀVÑLˆ÷Mä/°Ô7Ø!'ÑÐ�hô
ô -ØÐ,¨h¸È(ôð ÷'	/ð 	/ú÷Mð Mús   ÂD	Â6D	ÃDÄ	DÄDc                 óP   — | d   }t        |t        «      r	| d d } | |fS | d   } | |fS )Néÿÿÿÿr   )rb   r€   )re   rh   s     r   Úunpack_outputsr¥   q  sC   € Ø�r‰{€HÜ�(œEÔ"Ø˜#˜2�,ˆð �HÐÐð ˜!‘*ˆØ�HÐÐr   c                 óh  — t        || j                  «       «      \  }}t        ||| j                  «       | j	                  «       «      }| j                  «       5  t        |g|¢­Ž }d d d «       t        t        «      sJ ‚t        |«      \  }}t        ||| j                  «       «      S # 1 sw Y   ŒDxY wr   )r   r:   Úvmapify_autograd_functionru   rv   rC   r   rb   r€   r¥   r   )r1   r$   r2   rE   r¢   Úvmapped_functionre   rh   s           r   rŽ   rŽ   z  s´   € Ü"0°¸;×;LÑ;LÓ;NÓ"OÑÐ˜Ü0Ø˜7 K×$:Ñ$:Ó$<¸k×>TÑ>TÓ>VóÐð 
×	Ñ	Ó	ñ NÜ&Ð'7ÐMÐ:LÒMˆ÷Nô �gœuÔ%Ð%Ð%Ü& wÓ/Ñ€GˆXÜ˜ ¨;×+<Ñ+<Ó+>Ó?Ð?÷Nð Nús   ÁB(Â(B1c                 ó   — t        d«      ‚)Nz0NYI: Functionalize rule for custom_function_call)r`   )r1   r$   r�   r2   s       r   Ú"custom_function_call_functionalizerª   ‡  s   € ô ÐIÓ
JÐJr   c           
      ó  ‡ ‡‡‡‡	— ˆ ˆˆˆfd„}ˆ	ˆ ˆˆˆfd„}ˆ	ˆ ˆˆˆfd„}ˆ	ˆ ˆˆˆfd„}d‰ j                   › �}t        |t        j                  j                  ft        |«      t        |«      t        |«      t        |«      ddœ«      Š	‰	S )Nc                  óŠ   •—  t        ‰j                  ‰‰‰«      | Ž \  }}t        |t        j                  «      r||fS g |¢|‘­S r   )r   rG   rb   r   rA   )r2   re   rh   r$   ru   r¢   rv   s      €€€€r   rG   z*vmapify_autograd_function.<locals>.forward�  sX   ø€ ð
œLØ×%Ñ% w°
¸Jó
àðÑˆ�ô �gœuŸ|™|Ô,Ø˜HÐ$Ð$à%�GÐ%˜XÑ%Ð%r   c                 óØ   •‡ ‡— t        |«      \  }}t        ‰«      Šˆˆ ˆfd„} t        |‰	|f‰‰
«      ||«       t        ‰ d«      si ‰ _        ‰ j                  j                  ‰|i«       y )Nc                 óL  •— t        ‰t        «       «      }‰j                  || |«       t        d„ | D «       «      }t	        ‰d«      si ‰_        ‰j
                  j                  ‰|i«       t	        ‰d«      si ‰_        ‰j                  j                  ‰|j                  i«       y )Nc              3   ól   K  — | ],  }t        |t        j                  «      r|j                  nd –— Œ. y ­wr   )rb   r   rA   Úshape)r†   Úinps     r   rˆ   zRvmapify_autograd_function.<locals>.setup_context.<locals>.inner.<locals>.<genexpr>¨  s+   è ø€ ò !ØILœZ¨¬U¯\©\Ô:�—	’	ÀÓDñ!ùs   ‚24Ú_pt_input_shapesÚ_pt_saved_tensors_bdims_stack)	ÚCtxCustomSaver   rI   r€   Úhasattrr²   Úupdater³   Ú_pt_saved_tensors_bdims)rK   re   Úwrapped_ctxÚinput_shapesr$   rJ   Úkeys       €€€r   Úinnerz?vmapify_autograd_function.<locals>.setup_context.<locals>.innerœ  s¡   ø€ ô
 (¨¬]«_Ó=ˆKØ×+Ñ+¨K¸ÀÔIô !ñ !ØPVô!ó ˆLô ˜3Ð 2Ô3Ø')�Ô$Ø× Ñ ×'Ñ'¨¨lÐ(;Ô<ä˜3Ð ?Ô@Ø46�Ô1Ø×-Ñ-×4Ñ4Ø�{×:Ñ:Ð<õr   Ú_pt_out_dims)r¥   r]   r   rµ   r¼   r¶   )rJ   rK   re   rh   r»   rº   r3   r$   ru   r¢   rv   s   `    @€€€€€r   rI   z0vmapify_autograd_function.<locals>.setup_context˜  su   ú€ Ü*¨7Ó3Ñˆ�Ü�‹mˆö	ð4	
ŒØØ�hÐØØó		
ð
 �'ô	ô �s˜NÔ+Ø!ˆCÔØ×Ñ×Ñ  h Õ0r   c                 ó"  •‡ — t        ‰«      }ˆ	ˆ fd„}t        ‰|«      } t        |‰ j                  |   |f‰
‰«      ‰ j                  |«      \  }}t        ||‰ j                  |   ‰
«      }t        |t        j                  «      r|d fS g |¢d ‘­S )Nc                 óB   •— t        ‰| «      } ‰j                  |g|¢­Ž S r   )ÚCtxWithSavedTensorsrQ   )Úsaved_tensorsrR   r¸   r$   rJ   s      €€r   Újvp_no_contextz>vmapify_autograd_function.<locals>.jvp.<locals>.jvp_no_contextÄ  s(   ø€ Ü-¨c°=ÓAˆKØ(Ð$×(Ñ(¨Ð@°xÒ@Ð@r   )
r]   Úget_tangents_in_dimsr   r³   rÀ   Ú	reductifyr¼   rb   r   rA   )rJ   rR   rº   rÁ   Útangent_in_dimsÚout_tangentsÚout_tangents_dimsrO   r3   r$   ru   r¢   rv   s   `       €€€€€r   rQ   z&vmapify_autograd_function.<locals>.jvpÁ  s«   ù€ Ü�‹mˆõ	Aô /¨w¸ÓAˆð+
¬,ØØ×.Ñ.¨sÑ3°_ÐEØØó	+
ð
 ×
Ñ
˜Xó+'Ñ'ˆÐ'ô ØÐ+¨S×-=Ñ-=¸cÑ-BÀJó
ˆô �fœeŸl™lÔ+Ø˜4�<Ðà �F�=˜D‘=Ð r   c                 óP  •‡ — t        ‰	«      }|d d }‰ j                  |   }t        |t        «      s|f}t        d„ t	        ||«      D «       «      }ˆ
ˆ fd„} t        |‰ j                  |   |ff‰‰«      ‰ j                  |f«      \  }}t        ||‰‰‰ j                  |   «      }|S )Nr¤   c              3   ó.   K  — | ]  \  }}|�|nd –— Œ y ­wr   rz   )r†   Úgrad_outputÚin_dims      r   rˆ   z>vmapify_autograd_function.<locals>.backward.<locals>.<genexpr>à  s&   è ø€ ò %
á#�˜Vð "Ð-‰F°4Ó7ñ%
ùs   ‚c                 óL   •— | \  }}t        ‰|«      } ‰j                  |g|¢­Ž S r   )r¿   rM   )rK   rÀ   Úgrad_outputsr¸   r$   rJ   s       €€r   Úbackward_no_contextzHvmapify_autograd_function.<locals>.backward.<locals>.backward_no_contextå  s2   ø€ Ø*0Ñ'ˆM˜<Ü-¨c°=ÓAˆKØ-Ð$×-Ñ-¨kÐI¸LÒIÐIr   )
r]   r¼   rb   r€   r\   r   r³   rÀ   rÃ   r²   )rJ   rÌ   rº   Úgrad_outputs_Úgrad_outputs_in_dimsrÍ   Úgrad_insÚgrad_ins_dimsrO   r3   r$   ru   r¢   rv   s   `        €€€€€r   rM   z+vmapify_autograd_function.<locals>.backwardØ  sÔ   ù€ Ü�‹mˆØ$ S bÐ)ˆØ"×/Ñ/°Ñ4ÐäÐ.´Ô6Ø$8Ð#:Ð ä$ñ %
ä'*¨=Ð:NÓ'Oô%
ó  
Ðõ
	Jð
#
¤,ØØ×/Ñ/°Ñ4Ð6JÐKÐMØØó	#
ð
 ×Ñ˜mÐ
,ó#.Ñˆ�-ô Ø�m W¨j¸#×:NÑ:NÈsÑ:Só
ˆð ˆr   ÚVmappedT)rG   rM   rQ   rI   r�   )r*   rS   r   rT   r|   rW   )
r$   r¢   ru   rv   rG   rI   rQ   rM   rX   r3   s
   ````     @r   r§   r§   Ž  sŠ   ü€ ÷&÷'1ð '1÷R!ð !÷.ð ð: Ð&×/Ñ/Ð0Ð1€DÜØÜ	�‰×	 Ñ	 Ð"ä# GÓ,Ü$ XÓ.Ü Ó$Ü)¨-Ó8Ø"&ñ	
ó
€Ið Ðr   c                 óÒ   — t        j                  | «      \  }}t        j                  |Ž }t        ||«      D ��cg c]  \  }}|€d n|‘Œ }}}t        j                  ||«      S c c}}w r   )r?   r^   r[   r\   rd   )Ú
input_dimsrR   Úflat_in_dimsro   Úflat_tangentsrÊ   ÚtangentrO   s           r   rÂ   rÂ     st   € Ü×,Ñ,¨ZÓ8Ñ€L�$Ü×*Ñ*¨HÐ5€Mô  # <°Ó?÷áˆF�Gð �‰ VÑ+ð€Fñ ô × Ñ  ¨Ó.Ð.ùó	s   ºA#c                   ó8   — e Zd ZU dZeedf   ed<   d„ Zd„ Zd„ Z	y)Ú
WrappedCtx)Ú_pt_reserved_attrsÚ_pt_inner_ctx.rÚ   c                 ó    — t        |t        «      s7t        | «      j                  }|D ]  }t	        ||«      sŒt        d|› d�«      ‚ || _        y )NzPyTorch reserves the zU field on ctx. Please name your fields on ctx something else to avoid name collision.)rb   rÙ   rS   rÚ   rµ   r`   rÛ   )r   rJ   Úreserved_attrsrX   s       r   r   zWrappedCtx.__init__I  s`   € Ü˜#œzÔ*Ü! $›Z×:Ñ:ˆNØ&ò �Ü˜s DÔ)ØÜ"Ø+¨NÐ+;ð <!ð !óð ðð !ˆÕr   c                 ó.   — t        | j                  |«      S r   )ÚgetattrrÛ   )r   rX   s     r   Ú__getattr__zWrappedCtx.__getattr__V  s   € Ü�t×)Ñ)¨4Ó0Ð0r   c                 ó~   — |t        | «      j                  v r|| j                  |<   y t        | j                  ||«      S r   )rS   rÚ   Ú__dict__ÚsetattrrÛ   )r   rX   Úvalues      r   Ú__setattr__zWrappedCtx.__setattr__Y  s:   € Ø”4˜“:×0Ñ0Ñ0Ø"'ˆD�M‰M˜$ÑØÜ�t×)Ñ)¨4°Ó7Ð7r   N)
r*   r+   r,   rÚ   r€   ry   rx   r   rà   rå   rz   r   r   rÙ   rÙ   F  s$   … Ø*QÐ˜˜c 3˜h™ÓQò!ò1ó8r   rÙ   c                   óN   ‡ — e Zd Zdgej                  ¢­Zˆ fd„Zed„ «       Zˆ xZS )r¿   Ú_pt_new_saved_tensorsc                 ó2   •— t         ‰| �  |«       || _        y r   )r   r   rç   )r   rJ   Únew_saved_tensorsr   s      €r   r   zCtxWithSavedTensors.__init__d  s   ø€ Ü‰Ñ˜ÔØ%6ˆÕ"r   c                 ó   — | j                   S r   )rç   )r   s    r   rÀ   z!CtxWithSavedTensors.saved_tensorsh  s   € à×)Ñ)Ð)r   )	r*   r+   r,   rÙ   rÚ   r   ÚpropertyrÀ   r-   r.   s   @r   r¿   r¿   a  s0   ø„ Ø1ÐR°J×4QÑ4QÑRÐô7ð ñ*ó ô*r   r¿   c                   óL   ‡ — e Zd Zddgej                  ¢­Zˆ fd„Zd„ Zd„ Zˆ xZS )r´   r·   Ú_pt_current_levelc                 ó@   •— t         ‰| �  |«       d| _        || _        y )Nrz   )r   r   r·   rí   )r   rJ   r   r   s      €r   r   zCtxCustomSave.__init__t  s    ø€ Ü‰Ñ˜ÔØ')ˆÔ$Ø!.ˆÕr   c                 óv   — t        || j                  «      \  }} | j                  j                  |Ž  || _        y r   )r   rí   rÛ   Úsave_for_backwardr·   ©r   ÚtensorsÚunwrapped_tensorsÚbdimss       r   rð   zCtxCustomSave.save_for_backwardy  s9   € Ü#1°'¸4×;QÑ;QÓ#RÑ Ð˜5Ø,ˆ×Ñ×,Ñ,Ð.?Ñ@Ø',ˆÕ$r   c                 óv   — t        || j                  «      \  }} | j                  j                  |Ž  || _        y r   )r   rí   rÛ   Úsave_for_forwardr·   rñ   s       r   rö   zCtxCustomSave.save_for_forward~  s9   € Ü#1°'¸4×;QÑ;QÓ#RÑ Ð˜5Ø+ˆ×Ñ×+Ñ+Ð->Ñ?Ø',ˆÕ$r   )	r*   r+   r,   rÙ   rÚ   r   rð   rö   r-   r.   s   @r   r´   r´   m  s0   ø„ à!Øðð 
×	&Ñ	&ñÐô/ò
-ö
-r   r´   c           	      óÚ   ‡— t        | t        «      s| f} t        |t        «      s|f}t        |t        «      s|f}|€t        | «      dz  }t        ˆfd„t        | |||«      D «       «      }|S )Nr   c              3   óF   •K  — | ]  \  }}}}t        |||‰|«      –— Œ y ­wr   )Úreductify_leaf)r†   ÚgiÚgi_bdimÚi_bdimÚmaybe_ishaperu   s        €r   rˆ   zreductify.<locals>.<genexpr>”  s.   øè ø€ ò á-ˆB�˜ ô 	�r˜7 F¨J¸×Eñùs   ƒ!)rb   r€   r�   r\   )Ú
grad_inputÚgrad_input_bdimÚ
input_bdimru   Ú&target_shape_without_bdim_to_reduce_torO   s      `  r   rÃ   rÃ   „  s}   ø€ ô �j¤%Ô(Ø �]ˆ
Ü�o¤uÔ-Ø*Ð,ˆÜ�j¤%Ô(Ø �]ˆ
à-Ð5Ü14°Z³À7Ñ1JÐ.Üó ä14ØØØØ2ó	2
ôó €Fð €Mr   c                 óZ  — | €y |€|€| S |�|€| j                  |«      S |€J ‚|€>| j                  |«      } t        | j                  «      }|||<   | j	                  |«      } |}|�/ t        t        j                  j                  |d f|¬«      | |«      S ||k7  r| j                  ||«      } | S )N)r¢   rh   )
ÚsumÚ	unsqueezeÚlistr°   Úexpandr   r   rA   Úsum_to_sizeÚmovedim)rþ   rÿ   r   ru   r  Ú	new_shapes         r   rù   rù      sé   € ð ÐØàÐ :Ð#5ØÐàÐ" zÐ'9Ø�~‰~˜oÓ.Ð.ð0 Ð!Ð!Ð!àÐØ×)Ñ)¨*Ó5ˆ
Ü˜×)Ñ)Ó*ˆ	Ø *ˆ	�*ÑØ×&Ñ& yÓ1ˆ
Ø$ˆà-Ð9ð
ŒtÜ�L‰L×$Ñ$Ø$ dÐ+Øô
ð Ð<ó	>ð 	>ð �_Ò$Ø×'Ñ'¨¸ÓDˆ
ØÐr   c                 ó   ‡ ‡— ˆ ˆfd„}|S )Nc                 ó,   •—  ‰|i |¤Ž} ‰| ||«       |S r   rz   )rJ   r%   r&   r=   Úoriginal_forwardÚoriginal_setup_contexts       €€r   Únew_forwardz8autograd_function_forward_rewritten.<locals>.new_forwardÜ  s#   ø€ Ù! 4Ð2¨6Ñ2ˆÙ˜s D¨&Ô1Øˆr   rz   )r  r  r  s   `` r   Ú#autograd_function_forward_rewrittenr  Û  s   ù€ õð
 Ðr   c                   ó&   ‡ — e Zd Zdˆ fd„Zd„ Zˆ xZS )ÚAutogradFunctionApplyc                 ó$   •— t         ‰| �  d«       y )NÚautograd_function_applyr   r   s    €r   r   zAutogradFunctionApply.__init__å  s   ø€ Ü‰ÑÐ2Õ3r   c                 ó´   ‡‡‡‡	‡
— d Š
|d   }|d   Š	t        |«      }‰d | } G ˆˆˆˆ	ˆ
fd„dt        j                  j                  «      } |j                  |Ž S )NÚargs_tensor_maskÚnon_differentiable_idxc                   ó>   •— e Zd Zeˆˆˆˆfd„«       Zeˆ ˆfd„«       Zy)ú5AutogradFunctionApply.__call__.<locals>.ApplyTemplatec                 ó°   •—  ‰d g‰¢­Ž \  }Š	t        ‰«      dkD  r:g }t        |«      D ]  \  }}|‰v sŒ|j                  |«       Œ  | j                  |Ž  |S )Nr   )r�   ra   rc   Úmark_non_differentiable)
rJ   r%   r=   Únon_differentiable_outputrr   r9   ÚfwdÚfwd_argsr  Úsaved_valuess
         €€€€r   rG   z=AutogradFunctionApply.__call__.<locals>.ApplyTemplate.forwardó  sx   ø€ ñ (+¨4Ð';°(Ò';Ñ$�˜ô Ð-Ó.°Ò2Ø02Ð-Ü )¨&Ó 1ò @™˜˜1ØÐ 6Ò6Ø5×<Ñ<¸QÕ?ð@ð 0�C×/Ñ/Ð1JÑKà�r   c                 ó   •—  ‰d g|¢‰¢­Ž S r   rz   )rJ   ÚgradÚbwdr  s     €€r   rM   z>AutogradFunctionApply.__call__.<locals>.ApplyTemplate.backward  s   ø€ á˜4Ð6 $Ð6¨Ò6Ð6r   N)r*   r+   r,   rW   rG   rM   )r!  r  r  r  r  s   €€€€€r   ÚApplyTemplater  ò  s)   ø„ Øöó ðð ô7ó ñ7r   r"  )r  r   rT   r|   r#   )r   r  r!  r  Ú
fwd_kwargsr  Úlength_of_tensor_argsÚnew_fwd_argsr"  r  r  s    ```     @@r   r"   zAutogradFunctionApply.__call__è  sl   ü€ ØˆØ%Ð&8Ñ9ÐØ!+Ð,DÑ!EÐÜ #Ð$4Ó 5Ðð  Ð 6Ð!6Ð7ˆ÷	7ò 	7œEŸN™N×3Ñ3ô 	7ð( #ˆ}×"Ñ" LÐ1Ð1r   r'   r)   r.   s   @r   r  r  ä  s   ø„ õ4ö2r   r  r   )7Útypingr   r   Útorch.utils._pytreerŠ   r‹   r?   Ú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   r   r   Úpy_implÚGradÚJvpr5   r0   r_   rD   rt   r}   rƒ   ÚVmapr�   r�   r¥   rŽ   ÚFunctionalizerª   r§   rÂ   rÙ   r¿   r´   rÃ   rù   r  r  r  rz   r   r   ú<module>r3     s}  ðå ã ß $Ð $÷ó õ 'Ý H÷õ õ +Ý ;ô8Ð(;ô 8ñ4 9Ó:Ð ð< ×Ñ˜m×0Ñ0Ó1Ø×Ñ˜m×/Ñ/Ó0ñó 1ó 2ðò3ð~ €ð ?Jó,/ôrˆzô ò
FòRð ×Ñ˜m×0Ñ0Ó1ñ(ó 2ð(òV.òbò
@ð ×Ñ˜m×9Ñ9Ó:ñKó ;ðKòtòr/÷~8ñ 8ô6	*˜*ô 	*ô-�Jô -ð8 ,0óðB ,0ó8òvô"2Ð/ô "2ñJ 0Ó1Ñ r   