§
    �Štj¨¡  ã                  ó   — U d dl mZ d dlZd dlmZmZ d dlmZmZ d dl	Z	d dl
mZ d dlmZmZmZmZ d dlmZmZmZmZmZmZmZmZmZmZmZmZmZmZm Z m!Z!m"Z" d dl#m$Z$ d d	l%m&Z&m'Z' d d
l(m)Z)m*Z*m+Z+m,Z,m-Z-m.Z.m/Z/m0Z0 d dl1m2Z2m3Z3m4Z4 d dl5m6Z6 erd dl7m8Z8 e9e:e*e:e;ef         f         e<e;         f         Z=i a>de?d<    e<e)¦  «        Z@dNd„ZAdOd„ZBe$dPd „¦   «         ZCdQd'„ZDdRd*„ZEdSd3„ZFdTd5„ZGdUdA„ZHdBZIdVdD„ZJdWdH„ZKdXdJ„ZLdYdM„ZMdS )Zé    )ÚannotationsN)ÚCounterÚdefaultdict)ÚAnyÚTYPE_CHECKING)Úcpp)Ú
DerivativeÚDifferentiabilityInfoÚForwardDerivativeÚSavedAttribute)Ú	BaseCTypeÚBindingÚboolTÚCppSignatureGroupÚlayoutTÚlongTÚ
NamedCTypeÚOptionalCTypeÚscalarTypeTÚSpecialArgNameÚstringTÚsymIntArrayRefTÚSymIntTÚtensorGeometryTÚtensorOptionsTÚtypeAndSizeTÚVectorCType)Úwith_native_function)Ú$get_grouped_by_view_native_functionsÚparse_native_yaml)ÚAUTOGRAD_KEYSÚFunctionSchemaÚNativeFunctionÚNativeFunctionsViewGroupÚOperatorNameÚ
SchemaKindÚTypeÚVariant)Ú	concatMapÚIDENT_REGEXÚsplit_name_params)Ú
YamlLoader)ÚSequencez$dict[tuple[str, str], DerivativeRet]Ú_GLOBAL_LOAD_DERIVATIVE_CACHEÚinfosú6dict[FunctionSchema, dict[str, DifferentiabilityInfo]]Úview_groupsúlist[NativeFunctionsViewGroup]ÚreturnÚNonec                ó¾  — d„ |D ¦   «         }i }|                       ¦   «         D ]¤}d }i }|                     ¦   «         D ]\\  }}|                     |j        j        j        d ¦  «        }|�0|j        �)|                     |¦  «        }	|	�|	j        j        }
|	||<   Œ\ t          |¦  «        dk    r|
| vr|
€t          d¦  «        ‚|||
<   Œ¥|  	                    |¦  «         d S )Nc                ó2   — i | ]}|j         j        j        |“ŒS © )ÚviewÚfuncÚname©Ú.0Úgs     úi/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torchgen/packaged/autograd/load_derivatives.pyú
<dictcomp>z-add_view_copy_derivatives.<locals>.<dictcomp>L   s4   € ð Hð Hð HØ !ˆŒŒÔ˜!ðHð Hð Hó    r   z!Expected fn_schema to be non-None)
ÚvaluesÚitemsÚgetr9   r:   Ú	view_copyÚ%create_view_copy_from_view_derivativeÚlenÚAssertionErrorÚupdate)r/   r1   Úview_name_to_groupÚ
view_infosÚinfo_dispatch_dictÚmaybe_view_groupÚ!view_copy_differentiability_infosÚdispatch_keyÚinfoÚview_copy_infoÚ	fn_schemas              r>   Úadd_view_copy_derivativesrR   G   s1  € ð
Hð HØ%0ðHñ Hô HÐð €Jà#Ÿlšl™nœnð Fð FÐàÐØ,.Ð)Ø"4×":Ò":Ñ"<Ô"<ð 
	ð 
	ÑˆL˜$Ø1×5Ò5°d´i´nÔ6IÈ4ÑPÔPÐØÐ+Ð0@Ô0JÐ0VØ!%×!KÒ!KØ$ñ"ô "�ð "Ð-Ø .Ô 3Ô 8�IØFTÐ5°lÑCøàõ Ð0Ñ1Ô1°AÒ5Ð5¸)È5Ð:PÐ:PØÐ Ý$Ð%HÑIÔIÐIØ$EˆJ�yÑ!øà	‡L‚L�ÑÔÐÐÐr@   Úderivatives_yaml_pathÚstrÚnative_yaml_pathÚtags_yaml_pathÚDerivativeRetc                ó¾  — | |f}|t           v�rÃt          | ¦  «        5 }t          j        |t          ¬¦  «        }d d d ¦  «         n# 1 swxY w Y   t          ||¦  «        j        }t          |¦  «        }t          d„ |¦  «        }d„ |D ¦   «         }	t          t          ¦  «        }
i }|D ]…}|
|j                             ¦   «                                       |¦  «         t          |j        ¦  «        |v r$t          dt          |j        ¦  «        › �¦  «        ‚||t          |j        ¦  «        <   Œ†t!          t                   ¦   «         }i }t#          ¦   «         }|D ]Z}d|vr9|                     d¦  «        }|                     dd ¦  «        }|d|id	œ}|r||d<   t'          ||
|||¦  «        \  }}|||<   Œ[t)          ||	¦  «         ||ft           |<   t           |         S )
N)ÚLoaderc                óx   — t          | t          ¦  «        r| gn"t          |                      d¬¦  «        ¦  «        S )NT)Úinclude_copy)Ú
isinstancer#   ÚlistÚ	functions)r=   s    r>   ú<lambda>z"load_derivatives.<locals>.<lambda>z   s8   € Ý˜!�^Ñ,Ô,ð6�q�c�cå�a—k’k¨t�kÑ4Ô4Ñ5Ô5ð r@   c                ó<   — g | ]}t          |t          ¦  «        ¯|‘ŒS r7   )r\   r$   r;   s     r>   ú
<listcomp>z$load_derivatives.<locals>.<listcomp>   s9   € ð 
ð 
ð 
àÝ˜!Õ5Ñ6Ô6ð
Øð
ð 
ð 
r@   zDuplicate function schema: Údispatchr:   Úoutput_differentiabilityÚDefault)r:   rb   )r.   ÚopenÚyamlÚloadr,   r    Únative_functionsr   r)   r   r]   r9   Ú	signatureÚappendrT   rG   r   ÚsetÚpopÚcreate_differentiability_inforR   )rS   rU   rV   ÚkeyÚfÚdefinitionsÚfuncsÚ!native_functions_with_view_groupsrh   r1   Úfunctions_by_signatureÚfunctions_by_schemaÚfunctionÚ
op_counterr/   Úused_dispatch_keysÚ	defn_dictÚspecificationrc   r:   Úper_dispatch_diffinfoss                        r>   Úload_derivativesr{   k   s€  € ð
 !Ð"2Ð
3€CØ
Õ/Ð/Ñ/ÝÐ'Ñ(Ô(ð 	:¨AÝœ) A­jÐ9Ñ9Ô9ˆKð	:ð 	:ð 	:ñ 	:ô 	:ð 	:ð 	:ð 	:ð 	:ð 	:ð 	:øøøð 	:ð 	:ð 	:ð 	:õ "Ð"2°NÑCÔCÔTˆõ -QÐQVÑ,WÔ,WÐ)Ý$ð6ð 6ð .ñ	
ô 
Ðð
ð 
à6ð
ñ 
ô 
ˆõ �ÑÔð 	ð :<ÐØ(ð 	?ð 	?ˆHØ" 8¤=×#:Ò#:Ñ#<Ô#<Ô=×DÒDÀXÑNÔNÐNÝ�8”=Ñ!Ô!Ð%8Ð8Ð8Ý$Ð%WÅ3ÀxÄ}ÑCUÔCUÐ%WÐ%WÑXÔXÐXØ6>Ð¥ H¤MÑ 2Ô 2Ñ3Ð3õ �S”\‘^”^ˆ
ð
 IKˆÝ'*¡u¤uÐØ$ð 	1ð 	1ˆIà Ð*Ð*Ø )§¢¨fÑ 5Ô 5�Ø+4¯=ª=Ø.°ñ,ô ,Ð(ð &3ÀÈIÐ@VÐWÐW�	Ø+ð UØ<T�IÐ8Ñ9Ý+HØØ&Ø#ØØ"ñ,ô ,Ñ(ˆDÐ(ð 1ˆE�$‰KˆKå! %¨Ñ5Ô5Ð5ð
 .3Ð4FÐ-FÕ% cÑ*å(¨Ô-Ð-s   žAÁA
ÁA
ro   r#   úSequence[Binding]c                ó    — t          j        | d¬¦  «        }|j        �|j                             ¦   «         S |j                             ¦   «         S )NF)Úmethod)r   Úfrom_native_functionÚsymint_signatureÚ	argumentsri   )ro   Úsigss     r>   Úcpp_argumentsrƒ   º   sI   € åÔ1°!¸EÐBÑBÔB€DØÔÐ(ØÔ$×.Ò.Ñ0Ô0Ð0àŒ~×'Ò'Ñ)Ô)Ð)r@   ÚformulaÚ	var_namesútuple[str, ...]Úavailable_named_gradientsúSequence[str]r	   c                óŒ  ‡— ‰}d„ t          | ¦  «        D ¦   «         }t          d„ t          j        | ¦  «        D ¦   «         ¦  «        }t          d„ | j        j        D ¦   «         ¦  «        }d„ t          ||¦  «        D ¦   «         }t          ‰||¦  «        \  Š}	t          ‰||¦  «        \  Š}
ˆfd„|D ¦   «         }t          ‰¦  «        D ]f}|t          | j        j        ¦  «        k    rGt          dt          j        | j        ¦  «        › d|› dt          | j        j        ¦  «        › d	�¦  «        ‚Œgt          ‰|||	|
|¬
¦  «        S )Nc                ó@   — g | ]}|j                              ¦   «         ‘ŒS r7   )ÚnctypeÚremove_const_ref©r<   Úas     r>   ra   z%create_derivative.<locals>.<listcomp>Ê   s3   € ð #ð #ð #Ø()ˆŒ×!Ò!Ñ#Ô#ð#ð #ð #r@   c              3  ó*   K  — | ]}|d k    r|ndV — ŒdS )ÚselfÚresultNr7   )r<   Úns     r>   ú	<genexpr>z$create_derivative.<locals>.<genexpr>Î   s.   è è € ÐUÐU¸A˜a 6šk˜k˜˜¨xÐUÐUÐUÐUÐUÐUr@   c              3  óf   K  — | ],}t          j        |d ¬¦  «                             ¦   «         V — Œ-dS )T)ÚsymintN)r   Úreturn_typerŒ   ©r<   Úrs     r>   r“   z$create_derivative.<locals>.<genexpr>Ï   sN   è è € ð ð Ø?@�Œ˜ $Ð'Ñ'Ô'×8Ò8Ñ:Ô:ðð ð ð ð ð r@   c                ó4   — g | ]\  }}t          ||¦  «        ‘ŒS r7   )r   )r<   r:   Útypes      r>   ra   z%create_derivative.<locals>.<listcomp>Ó   s3   € ð ð ð Ù#- 4¨�
�4˜ÑÔðð ð r@   c                ób   •— h | ]+}t          j        t          j        |¦  «        ‰¦  «        ¯)|’Œ,S r7   )ÚreÚsearchr*   Úformat)r<   r:   r„   s     €r>   ú	<setcomp>z$create_derivative.<locals>.<setcomp>Ú   sF   ø€ ð ð ð àÝŒ9•[Ô'¨Ñ-Ô-¨wÑ7Ô7ðØðð ð r@   z3Out of bounds grads access: derivative formula for z used grads[z ], but the forward only returns z	 outputs.)r„   Úoriginal_formular…   Úsaved_inputsÚsaved_outputsÚnamed_gradients)rƒ   Útupler   Úreturn_namesr9   ÚreturnsÚzipÚsaved_variablesÚused_gradient_indicesrF   ÚRuntimeErrorr:   r	   )ro   r„   r…   r‡   r    r�   r¥   Úreturn_typesÚnamed_returnsr¡   r¢   Úused_named_gradientsÚis    `           r>   Úcreate_derivativer¯   Ã   sË  ø€ ð Ðð#ð #Ý-:¸1Ñ-=Ô-=ð#ñ #ô #€Iõ ÐUÐUÅÔAQÐRSÑATÔATÐUÑUÔUÑUÔU€LÝð ð ØDEÄFÄNðñ ô ñ ô €Lðð Ý14°\À<Ñ1PÔ1Pðñ ô €Mõ ,¨G°YÀ	ÑJÔJÑ€Gˆ\Ý,¨W°mÀYÑOÔOÑ€Gˆ]ðð ð ð à-ðñ ô Ðõ # 7Ñ+Ô+ð ð ˆØ•�A”F”NÑ#Ô#Ò#Ð#Ýð`ÅcÄhÈqÌvÑFVÔFVð `ð `Øð`ð `ÝADÀQÄVÄ^ÑATÔATð`ð `ð `ñô ð ð $õ ØØ)ØØ!Ø#Ø,ðñ ô ð r@   Únamesr   c           	     ó6  — |}d }| j         j        D ]}|j        |v r|€d}||j        fz   }Œ|€Æ|dk    r_t	          | j         j        ¦  «        dk    r)t          dt	          | j         j        ¦  «        › �¦  «        ‚| j         j        d         j        f}na|D ]^}t          j        d|¦  «        }t	          |¦  «        dk    r4|€d}t          |d         ¦  «        }|| j         j        |         j        fz   }Œ_|€t          d¦  «        ‚t          |||d d dd¬	¦  «        S )
Nr7   )r‘   é   z$Expected 1 return for 'result', got r   z^result(\d+)$z4No matching output for forward derivative definitionF©r„   r…   Ú	var_typesÚrequired_inputs_fw_gradÚrequired_inputs_primalÚrequired_original_self_valueÚis_reusing_outplace_formula)
r9   r¦   r:   rš   rF   rG   rœ   ÚfindallÚintr   )	ro   r„   r°   r…   r´   r˜   Úvar_nameÚresÚarg_idxs	            r>   Úcreate_forward_derivativer¾   ò   sZ  € ð €IØ)-€IØŒVŒ^ð .ð .ˆØŒ6�YÐÐØÐ Ø�	Ø! Q¤V IÑ-ˆIøð ÐØ˜Ò#Ð#Ý�1”6”>Ñ"Ô" aÒ'Ð'Ý$ØP½3¸q¼v¼~Ñ;NÔ;NÐPÐPñô ð ð œœ¨Ô*Ô/Ð1ˆIˆIà%ð Lð L�Ý”jÐ!1°8Ñ<Ô<�Ý�s‘8”8˜q’=�=Ø Ð(Ø$&˜	Ý! # a¤&™kœk�GØ )¨Q¬V¬^¸GÔ-DÔ-IÐ,KÑ K�IøàÐÝÐSÑTÔTÐTÝØØØØ $Ø#Ø%*Ø$)ðñ ô ð r@   Ú	defn_nameÚall_arg_namesú	list[str]Úderivativesúlist[Derivative]Úforward_derivativesúlist[ForwardDerivative]Úargs_with_derivativesc                óL  ‡ ‡‡‡‡— d$ˆˆˆ fd„}g }|D �]}|j         }	 ||	d¦  «        }
|	dk    �r\‰ j                             ¦   «         t          j        k    rt          d	‰ j        j        › d
�¦  «        ‚t          ‰¦  «        dk    r1t          |¦  «        dk    st          |d         j        ¦  «        dk    rt          d‰› d�¦  «        ‚t          |¦  «        dk    st          d‰› d�¦  «        ‚|d         j
        }‰d         j        Šd%ˆfd„}t          j        t          j        d¦  «        ||¦  «        }‰D ]7}|j        Šd%ˆfd„}t          j        t          j        ‰¦  «        ||¦  «        }Œ8d|› d�}t          |¦  «        }
|}	�nX|	dk    �rQt          |¦  «        dk    st          |d         j        ¦  «        dk    rt          d‰› d�¦  «        ‚d„ ‰D ¦   «         }t          |¦  «        dk    rt          d¦  «        ‚g }|D ] Š‰|v r‰dz   Š|                     ‰¦  «         Œ!‰ j                             ¦   «         r‰dz  Št$          j        ‰ j        v rd‰› dd                     |¦  «        › d�}n[t$          j        ‰ j        vrt          d‰ j        j        › �¦  «        ‚|d         › d ‰› dd                     |dd …         ¦  «        › d�}t          |¦  «        }
|}	 ||	d!¦  «        }|                     t/          |	|j        |j        |
|d"d"¬#¦  «        ¦  «         �Œ|S )&Nr„   rT   Úpostfixr3   r†   c                óÌ  •— ‰	j         j        j        j                             d¦  «        }t	          ¦   «         }‰D ]›}|j        dv r|sŒ|j        }t          j        t          j	        |¦  «        | ¦  «        }|rt          d‰› d|› d|› d|› d�	¦  «        ‚t          j        t          j	        ||z   ¦  «        | ¦  «        }|r|                     |¦  «         Œœt          |¦  «        S )NÚ	_foreach_)zat::TensorListzconst at::ITensorListRef &zThe forward formula for z is using the base name of the z- argument which is ambiguous. You should use z"_p to access the primal value and z_t to access the tangent.)r9   r:   ÚbaseÚ
startswithrk   rš   rœ   r�   r*   rž   rª   Úaddr¤   )
r„   rÈ   Ú
is_foreachÚrequired_inputsÚargÚarg_nameÚfoundrÆ   r¿   ro   s
          €€€r>   Úfind_required_inputsz=postprocess_forward_derivatives.<locals>.find_required_inputs#  s&  ø€ Ø”V”[Ô%Ô*×5Ò5°kÑBÔBˆ
Ý™%œ%ˆØ(ð 	.ð 	.ˆCà”ÐLÐLÐLØ"ð Mð Ø”xˆHå”I�kÔ0°Ñ:Ô:¸GÑDÔDˆEØð Ý"ðE¨yð Eð EÐYað Eð EØCKðEð Eà!)ðEð Eð Eñô ð õ ”I�kÔ0°¸GÑ1CÑDÔDÀgÑNÔNˆEØð .Ø×#Ò# HÑ-Ô-Ð-øå�_Ñ%Ô%Ð%r@   Ú_tÚauto_element_wisez"Cannot use auto_element_wise with z" because it is an in-place variantr²   r   úDerivative definition of z¸ in derivatives.yaml defines the forward definition of gradient as element_wise but this only works for functions with a single differentiable input and a single differentiable output.z  in derivatives.yaml defines the forward definition of gradient as element_wise but it does not defines the gradient formula for its argument which is required.Úmr   c                ób   •— |                       d¦  «        › ‰› d|                       d¦  «        › �S )Nr²   z	_t.conj()é   ©Úgroup)r×   Ú
input_names    €r>   Úreplz-postprocess_forward_derivatives.<locals>.replh  s0   ø€ ØŸ'š' !™*œ*ÐG jÐGÐG¸1¿7º7À1¹:¼:ÐGÐGÐGr@   Úgradc                ób   •— |                       d¦  «        › ‰› d|                       d¦  «        › �S )Nr²   Ú_prÙ   rÚ   )r×   rÑ   s    €r>   rÝ   z-postprocess_forward_derivatives.<locals>.replq  s0   ø€ ØŸgšg a™jœjÐB¨(ÐBÐB°a·g²g¸a±j´jÐBÐBÐBr@   ú(z).conj()Úauto_linearz� in derivatives.yaml defines the forward definition of gradient as linear but this only works for functions with a single differentiable output.c                ó   — g | ]	}|j         ‘Œ
S r7   ©r:   )r<   rÐ   s     r>   ra   z3postprocess_forward_derivatives.<locals>.<listcomp>‘  s   € ÐHÐHÐH¨3˜cœhÐHÐHÐHr@   z-Expected at least one differentiable argumentÚ_symintzat::z, ú)z(Expected Variant.method in variants for ú.rà   Fr³   )r„   rT   rÈ   rT   r3   r†   )r×   r   r3   rT   )r„   r9   Úkindr&   ÚinplacerG   r:   rF   r…   rª   r    rœ   Úsubr*   rž   r¤   rj   Ú
has_symintr(   ru   ÚvariantsÚjoinr~   r   r´   )ro   r¿   rÀ   rÂ   rÄ   rÆ   rÓ   Úupdated_derivativesÚdefnr„   Úrequired_inputs_tangentÚbackward_formularÝ   Ú
fw_formularÐ   Údiff_arg_namesÚnew_argsr¶   rÑ   rÜ   s   ``   `            @@r>   Úpostprocess_forward_derivativesrõ     s^  øøøøø€ ð&ð &ð &ð &ð &ð &ð &ð &ð4 46Ðà#ð 
ñ 
ˆØ”,ˆØ"6Ð"6°wÀÑ"EÔ"EÐØÐ)Ò)Ñ)ØŒv�{Š{‰}Œ}¥
Ô 2Ò2Ð2Ý$Øh¸¼¼ÐhÐhÐhñô ð õ Ð.Ñ/Ô/°1Ò4Ð4ÝÐ*Ñ+Ô+¨aÒ/Ð/ÝÐ*¨1Ô-Ô7Ñ8Ô8¸1Ò<Ð<å"ð4°	ð 4ð 4ð 4ñô ð õ �{Ñ#Ô# qÒ(Ð(Ý"ðW°	ð Wð Wð Wñô ð ð"  +¨1œ~Ô>ÐØ.¨qÔ1Ô6ˆJðHð Hð Hð Hð Hð Hõ œ¥Ô 2°6Ñ :Ô :¸DÐBRÑSÔSˆJð -ð Tð T�Øœ8�ðCð Cð Cð Cð Cð Cõ  œV¥KÔ$6°xÑ$@Ô$@À$È
ÑSÔS�
�
ð 2˜ZÐ1Ð1Ð1ˆJõ ',¨MÑ&:Ô&:Ð#Ø ˆG‰GØ˜Ò%Ñ%åÐ'Ñ(Ô(¨1Ò,Ð,ÝÐ*¨1Ô-Ô7Ñ8Ô8¸1Ò<Ð<å"ðI°	ð Ið Ið Iñô ð ð IÐHÐ2GÐHÑHÔHˆNÝ�>Ñ"Ô" aÒ'Ð'Ý$Ð%TÑUÔUÐUð ˆHØ)ð *ð *�Ø˜~Ð-Ð-Ø'¨$™�HØ—’ Ñ)Ô)Ð)Ð)ð Œv× Ò Ñ"Ô"ð 'Ø˜YÑ&�	õ Ô 1¤:Ð-Ð-ØF IÐFÐF°·	²	¸(Ñ0CÔ0CÐFÐFÐF�
�
å”>¨¬Ð3Ð3Ý(ØPÀ1Ä6Ä;ÐPÐPñô ð ð !)¨¤ÐTÐT¨iÐTÐT¸$¿)º)ÀHÈQÈRÈRÄLÑ:QÔ:QÐTÐTÐT�
õ ',¨NÑ&;Ô&;Ð#Ø ˆGð "6Ð!5°g¸tÑ!DÔ!DÐà×"Ò"ÝØØœ.Øœ.Ø(?Ø'=Ø-2Ø,1ðñ ô ñ
	
ô 
	
ð 
	
ñ 
	
ð Ðr@   Úboolc                ó4   — |D ]}|| vc S t          d¦  «        ‚)Nz Expected `names` to be non-empty)rª   )rÀ   r°   r:   s      r>   Ú is_forward_derivative_definitionrø   Ã  s3   € ð ð )ð )ˆØ˜=Ð(Ð(Ð(Ð(Ý
Ð9Ñ
:Ô
:Ð:r@   rx   údict[Any, Any]rs   ú*dict[FunctionSchema, list[NativeFunction]]rt   údict[str, NativeFunction]rv   úCounter[str]rw   úset[str]ú7tuple[FunctionSchema, dict[str, DifferentiabilityInfo]]c                ó6  ‡‡‡‡‡— d2d„}d3d
„Šd4d„Št           d5ˆˆˆˆˆfd„¦   «         }|                      d¦  «        }t          |¦  «        \  Š}|                      dd¦  «        Šd}	‰rDt          d„ ‰D ¦   «         ¦  «        r+t	          ‰¦  «        dk    rt          d|› d�¦  «        ‚‰}	dgŠ|                     |¦  «        }
|
sHd                     ˆfd„|                     ¦   «         D ¦   «         ¦  «        }t          d|› d|› �¦  «        ‚|
j	         
                    ¦   «         }||         }t	          |¦  «        dk    rKd                     ˆfd„|                     ¦   «         D ¦   «         ¦  «        }t          d |› d!|› d"|› �¦  «        ‚ ||‰¦  «        }d#d$„ t          |¦  «        D ¦   «         v rt          d%‰› d&�¦  «        ‚d'd(„ t          |¦  «        D ¦   «         v rt          d%‰› d)�¦  «        ‚i }| d*                              ¦   «         D �] \  }Š|d+k    r&|t          vrt          d,|› d-|› d.t          › �¦  «        ‚||vr|                     |¦  «          ||¦  «        \  }}}}}t          ¦   «         }|D ]}||j        z  }Œd}|r6t!          ‰¦  «        }|d+k    r||z   }|› ||         › �}||xx         dz  cc<   t#          ‰||||t%          d/„ |D ¦   «         ¦  «        t%          d0„ |D ¦   «         ¦  «        ||||‰|	¬1¦  «        ||<   �Œ|j	        |fS )6z3Processes a single entry `defn` in derivatives.yamlr^   úSequence[NativeFunction]r:   rT   r3   r#   c           	     ó~  — | D ]Z}|j                              ¦   «         s?|j                              ¦   «         s&|t          |j         j        j        ¦  «        k    r|c S Œ[|dz   t          j        | d         j         ¦  «        k    r3t          d|› dt          j        | d         j         ¦  «        › d�¦  «        ‚| d         S )NÚ_r   z Expected inplace function name 'z	_', got 'ú')r9   Úis_functional_fnÚ	is_out_fnrT   r:   r   rG   )r^   r:   ro   s      r>   Úcanonical_functionz9create_differentiability_info.<locals>.canonical_functionÔ  sË   € ð ð 	ð 	ˆAà”F×+Ò+Ñ-Ô-ðàœ×(Ò(Ñ*Ô*ðð �C ¤¤Ô 0Ñ1Ô1Ò1Ð1à���øà�#‰:�œ )¨A¤,Ô"3Ñ4Ô4Ò4Ð4Ý Ø`°4Ð`Ð`Å#Ä(È9ÐUVÌ<ÔK\ÑB]ÔB]Ð`Ð`Ð`ñô ð ð ˜Œ|Ðr@   Ú	raw_namesr†   c                óZ   — t          d„ |                      d¦  «        D ¦   «         ¦  «        S )z(Given "foo, bar", return ["foo", "bar"].c              3  ó>   K  — | ]}|                      ¦   «         V — Œd S ©N)Ústrip)r<   Úxs     r>   r“   zEcreate_differentiability_info.<locals>.split_names.<locals>.<genexpr>ç  s*   è è € Ð=Ð= 1�Q—W’W‘Y”YÐ=Ð=Ð=Ð=Ð=Ð=r@   ú,)r¤   Úsplit)r  s    r>   Úsplit_namesz2create_differentiability_info.<locals>.split_nameså  s+   € åÐ=Ð=¨	¯ª¸Ñ(<Ô(<Ð=Ñ=Ô=Ñ=Ô=Ð=r@   r¿   rÂ   úSequence[Derivative]r4   c           	     óÐ  — d}d}d}g }|D ]®}|j         }|p3t          t          j        t	          j        d¦  «        |¦  «        ¦  «        }|t          t          j        t	          j        d¦  «        |¦  «        ¦  «        z  }|pt          |j        ¦  «        }|                     t          |¦  «        ¦  «         Œ¯|t          |¦  «        k     r#t          d|› dt          |¦  «        › d�¦  «        ‚|t          |¦  «        k    }|r|dk    rt          d| › d	�¦  «        ‚|r't          |¦  «        dhk    rt          d| › d
�¦  «        ‚|r|s|dk    rt          d| › d�¦  «        ‚dS dS )zÉ
        Check for some subtle mistakes one might make when writing derivatives.
        These mistakes will compile, but will be latent until a function is
        used with double backwards.
        Fr   rÞ   Úgradsznum_grads_uses (z) < len(used_grads_indices) (ræ   rÖ   zx in derivatives.yaml illegally mixes use of 'grad' and 'grads'. Consider replacing occurrences of 'grad' with 'grads[0]'zÔ in derivatives.yaml solely refers to 'grads[0]'.  If the first output is indeed the only differentiable output, replace 'grads[0]' with 'grad'; otherwise, there is a likely error in your derivatives declaration.z‡ in derivatives.yaml illegally mixes use of "grad_RETURN_NAME" and "grad" or "grads[x]". Use only one method for identifying gradients.N)r„   rö   rœ   r¹   r*   rž   rF   r£   Úextendr©   rG   rª   rk   )	r¿   rÂ   Ú	uses_gradÚnum_grads_usesÚuses_named_gradsÚused_grads_indicesÚdr„   Úonly_used_grads_indicess	            r>   Úcheck_grad_usagez7create_differentiability_info.<locals>.check_grad_usageé  sõ  € ð ˆ	ØˆØ ÐØ(*ÐØð 	Fð 	FˆAØ”iˆGØ!ð ¥TÝ”
�;Ô-¨fÑ5Ô5°wÑ?Ô?ñ&ô &ˆIð �c¥"¤*­[Ô-?ÀÑ-HÔ-HÈ'Ñ"RÔ"RÑSÔSÑSˆNØ/ÐJµ4¸Ô8IÑ3JÔ3JÐØ×%Ò%Õ&;¸GÑ&DÔ&DÑEÔEÐEÐEð
 �CÐ 2Ñ3Ô3Ò3Ð3Ý Øj >ÐjÐjÕPSÐTfÑPgÔPgÐjÐjÐjñô ð ð
 #1µCÐ8JÑ4KÔ4KÒ"KÐàð 	˜¨!Ò+Ð+Ýð8¨Ið 8ð 8ð 8ñô ð ð #ð 	¥sÐ+=Ñ'>Ô'>À1À#Ò'EÐ'EÝð¨Ið ð ð ñô ð ð ð 	 ð 	¨n¸qÒ.@Ð.@Ýð=¨Ið =ð =ð =ñô ð ð	ð 	Ð.@Ð.@r@   ro   úituple[Sequence[Derivative], Sequence[ForwardDerivative], Sequence[Binding], Sequence[str], Sequence[str]]c                óø  •‡— g }g }g }t          ¦   «         Šd„ t          | ¦  «        D ¦   «         }d„ | j        j        D ¦   «         }‰pdgt	          | j        j        ¦  «        z  }d„ t          | j        j        |¦  «        D ¦   «         }t          ‰                     ¦   «         ¦  «        D ]ã}‰|         }	 ‰|¦  «        }
|
D ]-}||v r'||v r#t          d| j        j	        › d|› d|› d�¦  «        ‚Œ.t          ||
¦  «        r%|                     t          | |	|
¦  «        ¦  «         Œz|	                     ¦   «                              ¦   «         d	k    r||
z  }Œªt          | |	|
|¦  «        }|                     |¦  «         ‰t          |
¦  «        z  ŠŒä‰                     |¦  «        }|rt#          d
‰› d|› �¦  «        ‚ˆfd„t          | ¦  «        D ¦   «         }t%          | ‰||||¦  «        } ‰‰|¦  «         |||||fS )Nc                ó   — g | ]	}|j         ‘Œ
S r7   rä   r�   s     r>   ra   zMcreate_differentiability_info.<locals>.set_up_derivatives.<locals>.<listcomp>/  s   € Ð:Ð:Ð: A˜œÐ:Ð:Ð:r@   c                ó   — g | ]	}|j         ‘Œ
S r7   rä   r—   s     r>   ra   zMcreate_differentiability_info.<locals>.set_up_derivatives.<locals>.<listcomp>0  s'   € ð 
ð 
ð 
ØˆAŒFð
ð 
ð 
r@   Tc                ól   — g | ]1\  }}|r*|j         ®|j                             ¦   «         ¯'d|j         › �‘Œ2S )NÚgrad_)r:   rš   Úis_tensor_like)r<   ÚretÚdifferentiables      r>   ra   zMcreate_differentiability_info.<locals>.set_up_derivatives.<locals>.<listcomp>>  sZ   € ð 	%
ð 	%
ð 	%
á#��^àð		%
ð ”Ð$à”×'Ò'Ñ)Ô)ð %ð �C”HÐÐð
 %Ð$Ð$r@   z-While processing the derivative formula for 'z' wrt 'z', expected 'z/' to not be both an input arg and named return.Únon_differentiablezderivatives definition for zB have overlapped non_differentiable and differentiable variables: c                ó&   •— g | ]}|j         ‰v ¯|‘ŒS r7   rä   )r<   rŽ   Úargs_with_derivatives_sets     €r>   ra   zMcreate_differentiability_info.<locals>.set_up_derivatives.<locals>.<listcomp>j  s-   ø€ ð !
ð !
ð !
Ø¨1¬6Ð5NÐ+NÐ+NˆAÐ+NÐ+NÐ+Nr@   )rk   rƒ   r9   r¦   rF   r§   ÚsortedÚkeysrG   r:   rø   rj   r¾   Úlowerr  r¯   Úintersectionrª   rõ   )ro   rÂ   rÄ   Únon_differentiable_arg_namesrÀ   Úall_ret_namesÚdifferentiabilityr‡   r  r„   r°   r:   Ú
derivativeÚoverlaprÆ   r&  r  rï   r¿   rc   r  s                  @€€€€€r>   Úset_up_derivativesz9create_differentiability_info.<locals>.set_up_derivatives  sÓ  øø€ ð )+ˆØ79ÐØ24Ð$Ý.1©e¬eÐ!à:Ð:­°qÑ)9Ô)9Ð:Ñ:Ô:ˆð
ð 
ØœFœNð
ñ 
ô 
ˆð 5ÐT¸¸ÅÀQÄVÄ^ÑATÔATÑ8TÐð	%
ð 	%
å'*¨1¬6¬>Ð;LÑ'MÔ'Mð	%
ñ 	%
ô 	%
Ð!õ   §	¢	¡¤Ñ,Ô,ð 	<ð 	<ˆIØ˜9”oˆGØ�K 	Ñ*Ô*ˆEàð ð �Ø˜=Ð(Ð(¨T°]Ð-BÐ-BÝ(ð[ÈÌÌð [ð [Ð\`ð [ð [Ø%)ð[ð [ð [ñô ð øõ
 0°¸uÑEÔEð 
<Ø#×*Ò*Õ+DÀQÈÐQVÑ+WÔ+WÑXÔXÐXÐXà—=’=‘?”?×(Ò(Ñ*Ô*Ð.BÒBÐBØ0°EÑ9Ð0Ð0å!2Ø˜7 EÐ+Dñ"ô "�Jð  ×&Ò& zÑ2Ô2Ð2Ø-µ°U±´Ñ;Ð-Ð-à+×8Ò8Ð9UÑVÔVˆØð 	Ýð;¨dð ;ð ;Ø18ð;ð ;ñô ð ð!
ð !
ð !
ð !
Ý$ QÑ'Ô'ð!
ñ !
ô !
Ðõ
 >ØØØØØØ!ñ
ô 
Ðð 	Ð˜ KÑ0Ô0Ð0ð ØØ!Ø(Ø%ð
ð 	
r@   rc   Nc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r
  )r\   rT   )r<   Údiffs     r>   r“   z0create_differentiability_info.<locals>.<genexpr>Š  s=   è è € ð (ð (Ø"&�
�4�ÑÔð(ð (ð (ð (ð (ð (r@   r²   zNot supported: for zÉ,output_differentiability must either be list[bool] or a list[str] where each str is a condition. In the case where it is a condition, we only support single-output functions. Please file us an issue. Tú
c              3  ó\   •K  — | ]&\  }}t          j        |j        ¦  «        ‰k    ¯"|V — Œ'd S r
  )r   r:   r9   ©r<   ÚkÚvr¿   s      €r>   r“   z0create_differentiability_info.<locals>.<genexpr>›  sF   øè è € ð 
ð 
Ù�!�Q½¼À!Ä&Ñ9IÔ9IÈYÒ9VÐ9VˆAÐ9VÐ9VÐ9VÐ9Vð
ð 
r@   z)could not find ATen function for schema: z .  Available signatures:
r   c              3  ól   •K  — | ].\  }}t          j        |¦  «        ‰k    ¯t          |¦  «        V — Œ/d S r
  )r   r:   rT   r5  s      €r>   r“   z0create_differentiability_info.<locals>.<genexpr>©  sL   øè è € ð 
ð 
á��1ÝŒx˜‰{Œ{˜iÒ'Ð'õ �‰FŒFà'Ð'Ð'Ð'ð
ð 
r@   z3could not find ATen function for legacy signature: z corresponding to schema z9.  Please report a bug to PyTorch. Available signatures:
Úgrad_input_maskc              3  ó$   K  — | ]}|j         V — Œd S r
  rä   r�   s     r>   r“   z0create_differentiability_info.<locals>.<genexpr>µ  s$   è è € ÐFÐF¨˜QœVÐFÐFÐFÐFÐFÐFr@   zSchema for z� has an argument named grad_input_mask, but this name would be shadowed by our codegen. Please use a different name in native_functions.yaml.r‘   c              3  ó$   K  — | ]}|j         V — Œd S r
  rä   r�   s     r>   r“   z0create_differentiability_info.<locals>.<genexpr>¼  s$   è è € Ð=Ð=˜q�A”FÐ=Ð=Ð=Ð=Ð=Ð=r@   zy has an argument named result, but this is only allowed for outputs.Please use a different name in native_functions.yaml.rb   rd   zInvalid dispatch key z in derivatives.yaml for z, expected key to be one of c                ó&   — g | ]}|j         D ]}|‘ŒŒS r7   )r¡   ©r<   r  r7  s      r>   ra   z1create_differentiability_info.<locals>.<listcomp>é  s'   € Ð@Ð@Ð@�q°´Ð@Ð@¨A�Ð@Ð@Ð@Ð@r@   c                ó&   — g | ]}|j         D ]}|‘ŒŒS r7   )r¢   r=  s      r>   ra   z1create_differentiability_info.<locals>.<listcomp>ì  s'   € ÐAÐAÐA�q°´ÐAÐA¨A�ÐAÐAÐAÐAr@   )r:   r9   ÚoprÂ   rÄ   Úall_saved_inputsÚall_saved_outputsr‡   r­   rÆ   r+  rc   Ú#output_differentiability_conditions)r^   r   r:   rT   r3   r#   )r  rT   r3   r†   )r¿   rT   rÂ   r  r3   r4   )ro   r#   r3   r  )r   rl   r+   ÚanyrF   rª   rC   rí   rB   r9   ri   rƒ   Ú_VALID_AUTOGRAD_KEYSrÍ   rk   r£   Ú_create_op_prefixr
   Ú
dedup_vars)rx   rs   rt   rv   rw   r  r0  ry   r  rB  Úschema_functionÚavailri   r^   Ú	canonicalÚdiffinfo_dictrn   rÂ   rÄ   rÆ   r+  r‡   r­   r  r?  Ú	op_prefixr  rï   r¿   rc   r  s                             @@@@@r>   rm   rm   Ë  s0  øøøøø€ ðð ð ð ð">ð >ð >ð >ð4ð 4ð 4ð 4õl ða
ð a
ð a
ð a
ð a
ð a
ð a
ð a
ð a
ñ Ôða
ðH —M’M &Ñ)Ô)€MÝ$ ]Ñ3Ô3�L€Iˆqð  )Ÿ}š}Ð-GÈÑNÔNÐØ*.Ð'Øð *¥Cð (ð (Ø*Bð(ñ (ô (ñ %ô %ð *õ Ð'Ñ(Ô(¨AÒ-Ð-Ýð- mð -ð -ð -ñô ð ð /GÐ+Ø$( 6Ð à)×-Ò-¨mÑ<Ô<€OØð 
Ø—	’	ð 
ð 
ð 
ð 
Ø-×3Ò3Ñ5Ô5ð
ñ 
ô 
ñ 
ô 
ˆõ ð1¸ð 1ð 1Ø).ð1ð 1ñ
ô 
ð 	
ð  Ô$×.Ò.Ñ0Ô0€IØ& yÔ1€IÝ
ˆ9�~„~˜ÒÐØ—	’	ð 
ð 
ð 
ð 
à.×4Ò4Ñ6Ô6ð
ñ 
ô 
ñ 
ô 
ˆõ
 ð.À)ð .ð .Ø'4ð.ð .à&+ð.ð .ñ
ô 
ð 	
ð #Ð" 9¨iÑ8Ô8€IØÐFÐF­]¸9Ñ-EÔ-EÐFÑFÔFÐFÐFÝðD˜)ð Dð Dð Dñ
ô 
ð 	
ð Ð=Ð=¥M°)Ñ$<Ô$<Ð=Ñ=Ô=Ð=Ð=ÝðD˜)ð Dð Dð Dñ
ô 
ð 	
ð €MØ˜zÔ*×0Ò0Ñ2Ô2ð 0
ñ 0
‰	ˆˆTØ�)ÒÐ Õ+?Ð ?Ð ?ÝðE¨ð Eð EÀmð Eð EÝ.BðEð Eñô ð ð Ð(Ð(Ð(Ø×"Ò" 3Ñ'Ô'Ð'ð Ð˜yÑ)Ô)ñ	
ØØØ!Ø(Ø%õ *-©¬ÐØð 	6ð 	6ˆAØ  AÔ$5Ñ5Ð Ð ð ˆØ ð 	'Ý)¨)Ñ4Ô4ˆIØ�iÒÐØ%¨™O�	ØÐ6˜z¨)Ô4Ð6Ð6ˆBØ�yÐ!Ð!Ô! QÑ&Ð!Ð!Ñ!å2ØØØØ#Ø 3Ý'Ø@Ð@˜KÐ@Ñ@Ô@ñô õ )ØAÐA˜KÐAÑAÔAñô ð '@Ø!5Ø"7Ø)EØ%=Ø0Sð#
ñ 
ô 
ˆ�cÑÑð( Œ>˜=Ð(Ð(r@   z(?:^|\W)grads\[(\d+)\]ú	list[int]c                óJ   — d„ t          j        t          | ¦  «        D ¦   «         S )z¤Determine a list of gradient indices (the i in grads[i]) that
    are used by the formula.

    >>> used_gradient_indices("foo(grads[0], grads[1])")
    [0, 1]
    c                ó,   — g | ]}t          |¦  «        ‘ŒS r7   )rº   )r<   r®   s     r>   ra   z)used_gradient_indices.<locals>.<listcomp>  s   € ÐBÐBÐB�q�C�‰FŒFÐBÐBÐBr@   )rœ   r¹   ÚGRAD_INDEX_REGEX)r„   s    r>   r©   r©   ü  s&   € ð CÐB�BœJÕ'7¸ÑAÔAÐBÑBÔBÐBr@   Únctypesúlist[NamedCType]ú&tuple[str, tuple[SavedAttribute, ...]]c                ó4  ‡‡‡	‡
— dRˆfd„}ddd„ dœfd	d
d„ d„ dœfddd„ d„ dœfddd„ dœfddd„ d„ d„ dœfdd„ d„ dœfddd „ dœfd!d"d#„ dœfd$d%d&„ dœfd'd(d)„ dœfd*d+d,„ dœfd-d.d/„ dœfd0d1d2„ dœfd3d4d5„ dœfd6d7d8„ |dœfd9d:d;„ dœfd<d=d>„ dœfg}g Š
d?| v sd@| v rt          dAdB| › �z   ¦  «        ‚t          j        dC| ¦  «        st          j        dD| ¦  «        rt          dEdF| › �z   ¦  «        ‚dG| v sdH| v rt          dIdJ| › �z   ¦  «        ‚|D ]ý}t          |j        t
          ¦  «        r|j        j        n|j        Š	|D ]6\  }ŠdSˆˆ	ˆ
fdM„}t          j        |                     ‰	¦  «        || ¦  «        } Œ7|j        t          t          t          ¦  «        ¦  «        k    r t          j        dN‰	› dN�‰	› dO‰	› dP�| ¦  «        } t          j        t          j        ‰	¦  «        | ¦  «        r$‰
                     t          |‰	¬Q¦  «        ¦  «         Œþ| t          ‰
¦  «        fS )TNr:   rT   r3   c                óB   •— ‰| fk    rt          d¦  «        ‚d| › d| › d�S )NzˆReplacement for ".strides()" is currently only supported for single derivatives of the same tensor that ".strides()" is being called on.zstrides_or_error(z, "z"))rG   )r:   r…   s    €r>   Ústride_exprz$saved_variables.<locals>.stride_expr  sB   ø€ Ø˜˜ÒÐÝ ð8ñô ð ð 5 4Ð4Ð4¨DÐ4Ð4Ð4Ð4r@   z{}.sym_sizes\(\)Ú
_sym_sizesc                óF   — t          | t          t          ¦  «        ¦  «        S r
  ©r   r   r   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>  ó   € ¥z°$½	Å/Ñ8RÔ8RÑ'SÔ'S€ r@   )Úsuffixr‹   z{}->sym_sizes\(\)Ú_sym_sizes_optc                ó`   — t          | t          t          t          ¦  «        ¦  «        ¦  «        S r
  ©r   r   r   r   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>!  ó%   € ¥zØ�-­	µ/Ñ(BÔ(BÑCÔCñ(ô (€ r@   c                ó   — | › d| › d�S )Nz2.has_value() ? std::optional<c10::SymIntArrayRef>(z->sym_sizes()) : std::nulloptr7   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>$  s'   € ¨ð  &Dð  &DÐ`dð  &Dð  &Dð  &D€ r@   )rZ  r‹   Úexprz{}.sym_blocksize\(\)Ú_self_sym_blocksize_optc                ó`   — t          | t          t          t          ¦  «        ¦  «        ¦  «        S r
  r]  rä   s    r>   r_   z!saved_variables.<locals>.<lambda>,  r^  r@   c                ó   — d| › d�S )Nz#at::sparse_csr::getSymIntBlockSize(ræ   r7   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>/  s   € Ð%RÈ4Ð%RÐ%RÐ%R€ r@   z{}.options\(\)Ú_optionsc                óF   — t          | t          t          ¦  «        ¦  «        S r
  )r   r   r   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>7  s   € ¥z°$½	Å.Ñ8QÔ8QÑ'RÔ'R€ r@   zzeros_like\({}\)Ú_infoc                óF   — t          | t          t          ¦  «        ¦  «        S r
  )r   r   r   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>?  s   € ¥z°$½	Å,Ñ8OÔ8OÑ'PÔ'P€ r@   c                ó   — | S r
  r7   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>@  s   €  T€ r@   c                ó   — | dz   S )Nz_info.zeros()r7   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>A  s   €  D¨?Ñ$:€ r@   )rZ  r‹   r`  r¼   z{}.sym_size\((-?\w+)\)c                ód   — d|                       ¦   «         d                              dd¦  «        › �S )NÚ_sym_argsize_r   ú-Úminus_)ÚgroupsÚreplace)r×   s    r>   r_   z!saved_variables.<locals>.<lambda>H  s+   € Ð$Z°A·H²H±J´J¸q´M×4IÒ4IÈ#ÈxÑ4XÔ4XÐ$ZÐ$Z€ r@   c                óF   — t          | t          t          ¦  «        ¦  «        S r
  ©r   r   r   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>I  ó   € ¥z°$½	Å'Ñ8JÔ8JÑ'KÔ'K€ r@   z{}.numel\(\)Ú_numelc                óF   — t          | t          t          ¦  «        ¦  «        S r
  ©r   r   r   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>Q  ó   € ¥z°$½	Å%Ñ8HÔ8HÑ'IÔ'I€ r@   z{}.sym_numel\(\)Ú
_sym_numelc                óF   — t          | t          t          ¦  «        ¦  «        S r
  rq  rä   s    r>   r_   z!saved_variables.<locals>.<lambda>Y  rr  r@   zto_args_sizes\({}\)Ú_args_sizesc           
     óz   — t          | t          t          t          t          ¦  «        ¦  «        ¦  «        ¦  «        S r
  )r   r   r   r   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>a  s-   € ¥zØ�+¥kµ)½EÑ2BÔ2BÑ&CÔ&CÑDÔDñ(ô (€ r@   zto_args_sizes_symint\({}\)Ú_args_sizes_symintc           
     óz   — t          | t          t          t          t          ¦  «        ¦  «        ¦  «        ¦  «        S r
  )r   r   r   r   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>k  s-   € ¥zØ�+¥kµ)½GÑ2DÔ2DÑ&EÔ&EÑFÔFñ(ô (€ r@   zto_args_scalartypes\({}\)Ú_args_scalartypesc                ó`   — t          | t          t          t          ¦  «        ¦  «        ¦  «        S r
  )r   r   r   r   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>u  s%   € ¥zØ�+¥iµÑ&<Ô&<Ñ=Ô=ñ(ô (€ r@   zTensorGeometry\({}\)Ú	_geometryc                óF   — t          | t          t          ¦  «        ¦  «        S r
  )r   r   r   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>  rY  r@   z{}.scalar_type\(\)Ú_scalar_typec                óF   — t          | t          t          ¦  «        ¦  «        S r
  )r   r   r   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>†  s   € ¥z°$½	Å+Ñ8NÔ8NÑ'OÔ'O€ r@   z
{}.dim\(\)Ú_dimc                óF   — t          | t          t          ¦  «        ¦  «        S r
  ru  rä   s    r>   r_   z!saved_variables.<locals>.<lambda>Ž  rv  r@   z{}.sym_strides\(\)Ú_sym_stridesc                óF   — t          | t          t          ¦  «        ¦  «        S r
  rX  rä   s    r>   r_   z!saved_variables.<locals>.<lambda>–  rY  r@   z{}.layout\(\)Ú_layoutc                óF   — t          | t          t          ¦  «        ¦  «        S r
  )r   r   r   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>Ÿ  rr  r@   z{}.is_conj\(\)Ú
_conjugatec                óF   — t          | t          t          ¦  «        ¦  «        S r
  )r   r   r   rä   s    r>   r_   z!saved_variables.<locals>.<lambda>§  rv  r@   z.sizes()z	->sizes()zY.sizes() is not supported in derivative formulas. Instead, please use the SymInt version,z<.sym_sizes(), which returned a c10::SymIntArrayRef. formula=z\.size\([-]?\d+\)z->size\([-]?\d+\)z[.size(int) is not supported in derivative formulas. Instead, please use the SymInt version,z>.sym_size(int), which returned a c10::SymIntArrayRef. formula=z
.strides()z->strides()z[.strides() is not supported in derivative formulas. Instead, please use the SymInt version,z>.sym_strides(), which returned a c10::SymIntArrayRef. formula=r×   úre.Match[str]c                óX  •— t          ‰d         ¦  «        r ‰d         | ¦  «        n‰d         }d‰v r ‰d         ‰¦  «        n|                      d¦  «        }‰                     t           ‰d         ‰|z   ¦  «        |¬¦  «        ¦  «         d‰v r ‰d         ‰¦  «        }|S ‰|z   S )NrZ  r`  r   r‹   ©r‹   r`  r¼   )ÚcallablerÛ   rj   r   )r×   rZ  r`  ÚreplacementrO   r:   Úsaveds       €€€r>   rÝ   zsaved_variables.<locals>.replÈ  sÏ   ø€ õ *2°$°x´.Ñ)AÔ)AÐU�N�D˜”N 1Ñ%Ô%Ð%ÀtÈHÄ~ð ð 39¸D°.°.˜L˜D œL¨Ñ.Ô.Ð.ÀaÇgÂgÈaÁjÄj�Ø—’Ý"Ø-˜t Hœ~¨d°V©mÑ<Ô<Ø!ðñ ô ñô ð ð ˜D�=�=Ø'2 t¨E¤{°4Ñ'8Ô'8�KØ&Ð&Ø˜f‘}Ð$r@   z\bz/.has_value() ? std::optional<std::string_view>(z.value()) : std::nulloptr�  ©r:   rT   r3   rT   )r×   r‹  r3   rT   )rª   rœ   r�   r\   r:   r   rê   rž   rš   r   r   r   r*   rj   r   r¤   )r„   rP  r…   rU  ÚREPLACEMENTSr‹   ÚregexrÝ   rO   r:   r�  s     `     @@@r>   r¨   r¨     sy  øøøø€ ð
5ð 5ð 5ð 5ð 5ð 5ð  à&ØSÐSðð ð	
ð !à*ðð ð Dð  Dðð ð		
ð $à3ðð ð SÐRðð ð		
ð à$ØRÐRðð ð	
ð  à!ØPÐPØ)Ð)Ø:Ð:ð	ð ð	
ð &àZÐZØKÐKðð ð	
ð à"ØIÐIðð ð	
ð  à&ØKÐKðð ð	
ð #à'ðð ðð ð	
ð *à.ðð ðð ð	
ð )à-ðð ðð ð	
ð $à%ØSÐSðð ð	
ð "à(ØOÐOðð ð	
ð à ØIÐIðð ð	
ð "à(ØSÐSØ#ðð ð	
ð à#ØKÐKðð ð	
ð à&ØIÐIðð ð	
ðaW6€Lðt #%€Eà�WÐÐ ¨wÐ 6Ð 6ÝØgØVÈWÐVÐVñWñ
ô 
ð 	
õ 
„yÐ% wÑ/Ô/ð 
µ2´9Ø˜gñ4ô 4ð 
õ ØiØXÈwÐXÐXñYñ
ô 
ð 	
ð �wÐÐ -°7Ð":Ð":ÝØiØXÈwÐXÐXñYñ
ô 
ð 	
ð ð ,ð ,ˆå *¨6¬;½Ñ GÔ GÐXˆFŒKÔÐÈVÌ[ð 	ð
 (ð 	@ð 	@‰KˆE�4ð%ð %ð %ð %ð %ð %ð %ð %õ" ”f˜UŸ\š\¨$Ñ/Ô/°°wÑ?Ô?ˆGˆGð
 Œ;�-­	µ'Ñ(:Ô(:Ñ;Ô;Ò;Ð;Ý”fØ�d���ØÐfÐfÈÐfÐfÐfØñô ˆGõ Œ9•[Ô'¨Ñ-Ô-¨wÑ7Ô7ð 	Ø�LŠLÝØ!Øðñ ô ñô ð øð •E˜%‘L”LÐ Ð r@   r:   c                ó˜   — d                      d„ |                      d¦  «        D ¦   «         ¦  «        }|dz                        dd¦  «        S )aa  Takes a native function name converts to an op prefix name.

    Note that the "name" parameter must be the native function name
    without the optional variant suffix, so "add" instead of
    "add.out".

    OP names correspond to classes, hence the change to title case.

    Example::

        >>> _create_op_prefix("add")
        'AddBackward'
    Ú c                ó6   — g | ]}|                      ¦   «         ‘ŒS r7   )Útitle)r<   Úps     r>   ra   z%_create_op_prefix.<locals>.<listcomp>ÿ  s    € Ð=Ð=Ð=¨˜!Ÿ'š'™)œ)Ð=Ð=Ð=r@   r  ÚBackwardÚForwardBackward)rí   r  ro  )r:   Ú
camel_cases     r>   rE  rE  ñ  sJ   € ð —’Ð=Ð=¨T¯ZªZ¸©_¬_Ð=Ñ=Ô=Ñ>Ô>€JØ˜Ñ#×,Ò,Ð->À
ÑKÔKÐKr@   ÚvarsúSequence[SavedAttribute]c                ó  — t          ¦   «         }g }| D ]m}t          |j        j        t          ¦  «        r|j        j        j        n|j        j        }||v rŒC|                     |¦  «         |                     |¦  «         Œn|S r
  )rk   r\   r‹   r:   r   rÍ   rj   )rœ  Úseenr�  Úvarr:   s        r>   rF  rF    s†   € Ý‘U”U€DØ"$€EØð 	ð 	ˆõ ˜#œ*œ/­>Ñ:Ô:ð!ˆCŒJŒOÔ Ð à””ð 	ð
 �4ˆ<ˆ<ØØ�Š�‰ŒˆØ�Š�SÑÔÐÐØ€Lr@   )r/   r0   r1   r2   r3   r4   )rS   rT   rU   rT   rV   rT   r3   rW   )ro   r#   r3   r|   )
ro   r#   r„   rT   r…   r†   r‡   rˆ   r3   r	   )ro   r#   r„   rT   r°   r†   r3   r   )ro   r#   r¿   rT   rÀ   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   r|   r3   rÅ   )rÀ   rÁ   r°   r†   r3   rö   )rx   rù   rs   rú   rt   rû   rv   rü   rw   rý   r3   rþ   )r„   rT   r3   rL  )r„   rT   rP  rQ  r…   r†   r3   rR  r‘  )rœ  r�  r3   r�  )NÚ
__future__r   rœ   Úcollectionsr   r   Útypingr   r   rf   Útorchgen.apir   Útorchgen.api.autogradr	   r
   r   r   Útorchgen.api.typesr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   Útorchgen.contextr   Útorchgen.genr   r    Útorchgen.modelr!   r"   r#   r$   r%   r&   r'   r(   Útorchgen.utilsr)   r*   r+   Útorchgen.yaml_utilsr,   Úcollections.abcr-   r¤   ÚdictrT   rk   rW   r.   Ú__annotations__rD  rR   r{   rƒ   r¯   r¾   rõ   rø   rm   rO  r©   r¨   rE  rF  r7   r@   r>   ú<module>r¯     sÄ  ðð #Ð "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à €€€à Ð Ð Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð& 2Ð 1Ð 1Ð 1Ð 1Ð 1Ø PÐ PÐ PÐ PÐ PÐ PÐ PÐ Pð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð EÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DÐ DØ *Ð *Ð *Ð *Ð *Ð *ð ð )Ø(Ð(Ð(Ð(Ð(Ð(ð �d˜>¨4°Ð5JÐ0JÔ+KÐKÔLÈcÐRUÌhÐVÔW€àFHÐ Ð HÐ HÐ HÑ Hà�s˜=Ñ)Ô)Ð ð!ð !ð !ð !ðHK.ð K.ð K.ð K.ð^ ð*ð *ð *ñ Ôð*ð,ð ,ð ,ð ,ð^&ð &ð &ð &ðReð eð eð eðP;ð ;ð ;ð ;ðk)ð k)ð k)ð k)ð\	 -Ð ðCð Cð Cð Cðh!ð h!ð h!ð h!ðVLð Lð Lð Lð$ð ð ð ð ð r@   