§
    Ì²ÅjN¡  ã                  óü  — U d dl mZ d dlZd dlmZ d dlmZmZmZm	Z	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/m0Z0m1Z1m2Z2m3Z3 d dl4m5Z5m6Z6m7Z7 d dl8m9Z9 eee-ee:ef         f         e
e:         f         Z;i a<de=d<    e>e,¦  «        Z?dMd„Z@dNd„ZAe'dOd„¦   «         ZBdPd&„ZCdQd)„ZDdRd2„ZEdSd4„ZFdTd@„ZGdAZHdUdC„ZIdVdG„ZJdWdI„ZKdXdL„ZLdS )Yé    )ÚannotationsN)Údefaultdict)ÚAnyÚCounterÚDictÚSequenceÚSetÚTuple)Ú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)Ú
YamlLoaderz$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	|
€J ‚|||
<   Œ˜|                      |¦  «         d S )Nc                ó2   — i | ]}|j         j        j        |“ŒS © )ÚviewÚfuncÚname©Ú.0Úgs     ú\C:\Projects\Historical\venv\Lib\site-packages\torchgen/packaged/autograd/load_derivatives.pyú
<dictcomp>z-add_view_copy_derivatives.<locals>.<dictcomp>H   s4   € ð Hð Hð HØ !ˆŒŒÔ˜!ðHð Hð Hó    r   )	ÚvaluesÚitemsÚgetr;   r<   Ú	view_copyÚ%create_view_copy_from_view_derivativeÚlenÚupdate)r1   r3   Ú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_derivativesrS   C   s&  € ð
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ØÐ(Ð(Ð(Ø$EˆJ�yÑ!øà	‡L‚L�ÑÔÐÐÐrB   Úderivatives_yaml_pathÚstrÚnative_yaml_pathÚtags_yaml_pathÚDerivativeRetc                óz  — | |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 ]c}|
|j                             ¦   «                                       |¦  «         t          |j        ¦  «        |vsJ ‚||t          |j        ¦  «        <   Œdt          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>t   s8   € Ý˜!�^Ñ,Ô,ð6�q�c�cå�a—k’k¨t�kÑ4Ô4Ñ5Ô5ð rB   c                ó<   — g | ]}t          |t          ¦  «        ¯|‘ŒS r9   )r]   r'   r=   s     r@   ú
<listcomp>z$load_derivatives.<locals>.<listcomp>y   s9   € ð 
ð 
ð 
àÝ˜!Õ5Ñ6Ô6ð
Øð
ð 
ð 
rB   Údispatchr<   Úoutput_differentiabilityÚDefault)r<   rc   )r0   ÚopenÚyamlÚloadr/   r#   Únative_functionsr"   r,   r   r^   r;   Ú	signatureÚappendrU   r   ÚsetÚpopÚcreate_differentiability_inforS   )rT   rV   rW   ÚkeyÚfÚdefinitionsÚfuncsÚ!native_functions_with_view_groupsri   r3   Úfunctions_by_signatureÚfunctions_by_schemaÚfunctionÚ
op_counterr1   Úused_dispatch_keysÚ	defn_dictÚspecificationrd   r<   Úper_dispatch_diffinfoss                        r@   Úload_derivativesr|   e   se  € ð
 !Ð"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Ý�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
rp   r&   úSequence[Binding]c                ó    — t          j        | d¬¦  «        }|j        �|j                             ¦   «         S |j                             ¦   «         S )NF)Úmethod)r   Úfrom_native_functionÚsymint_signatureÚ	argumentsrj   )rp   Úsigss     r@   Úcpp_argumentsr„   ³   sI   € åÔ1°!¸EÐBÑBÔB€DØÔÐ(ØÔ$×.Ò.Ñ0Ô0Ð0àŒ~×'Ò'Ñ)Ô)Ð)rB   Ú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 r9   )ÚnctypeÚremove_const_ref©r>   Úas     r@   rb   z%create_derivative.<locals>.<listcomp>Ã   s3   € ð #ð #ð #Ø()ˆŒ×!Ò!Ñ#Ô#ð#ð #ð #rB   c              3  ó*   K  — | ]}|d k    r|ndV — ŒdS )ÚselfÚresultNr9   )r>   Úns     r@   ú	<genexpr>z$create_derivative.<locals>.<genexpr>Ç   s.   è è € ÐUÐU¸A˜a 6šk˜k˜˜¨xÐUÐUÐUÐUÐUÐUrB   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Ñ:Ô:ðð ð ð ð ð rB   c                ó4   — g | ]\  }}t          ||¦  «        ‘ŒS r9   )r   )r>   r<   Útypes      r@   rb   z%create_derivative.<locals>.<listcomp>Ì   s3   € ð ð ð Ù#- 4¨�
�4˜ÑÔðð ð rB   c                ób   •— h | ]+}t          j        t          j        |¦  «        ‰¦  «        ¯)|’Œ,S r9   )ÚreÚsearchr-   Úformat)r>   r<   r…   s     €r@   ú	<setcomp>z$create_derivative.<locals>.<setcomp>Ó   sF   ø€ ð ð ð àÝŒ9•[Ô'¨Ñ-Ô-¨wÑ7Ô7ðØðð ð rB   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_namesr;   ÚreturnsÚzipÚsaved_variablesÚused_gradient_indicesrH   ÚRuntimeErrorr<   r   )rp   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ð`ð `ð `ñô ð ð $õ ØØ)ØØ!Ø#Ø,ðñ ô ð rB   Únamesr   c           	     óÞ  — |}d }| j         j        D ]}|j        |v r|€d}||j        fz   }Œ|€Ÿ|dk    r8t	          | j         j        ¦  «        dk    sJ ‚| j         j        d         j        f}na|D ]^}t          j        d|¦  «        }t	          |¦  «        dk    r4|€d}t          |d         ¦  «        }|| j         j        |         j        fz   }Œ_|€
J d¦   «         ‚t          |||d d dd¬¦  «        S )	Nr9   )r’   é   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)	r;   r§   r<   r›   rH   r�   ÚfindallÚintr   )	rp   r…   r±   r†   rµ   r™   Úvar_nameÚresÚarg_idxs	            r@   Úcreate_forward_derivativer¿   ë   s5  € ð €IØ)-€IØŒVŒ^ð .ð .ˆØŒ6�YÐÐØÐ Ø�	Ø! Q¤V IÑ-ˆIøð ÐØ˜Ò#Ð#Ý�q”v”~Ñ&Ô&¨!Ò+Ð+Ð+Ð+Øœœ¨Ô*Ô/Ð1ˆIˆIà%ð Lð L�Ý”jÐ!1°8Ñ<Ô<�Ý�s‘8”8˜q’=�=Ø Ð(Ø$&˜	Ý! # a¤&™kœk�GØ )¨Q¬V¬^¸GÔ-DÔ-IÐ,KÑ K�IøàÐ Ð Ð"XÑ Ô Ð ÝØØØØ $Ø#Ø%*Ø$)ðñ ô ð rB   Ú	defn_nameÚall_arg_namesú	list[str]Úderivativesúlist[Derivative]Úforward_derivativesúlist[ForwardDerivative]Úargs_with_derivativesc                óô  ‡ ‡‡‡‡— d"ˆˆˆ fd„}g }|D �]ä}|j         }	 ||	d¦  «        }
|	dk    �rW‰ j                             ¦   «         t          j        k    sJ 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          |¦  «        }
|}	�n1|	dk    �r*t          |¦  «        dk    st          |d         j        ¦  «        dk    rt          d‰› d�¦  «        ‚d„ ‰D ¦   «         }t          |¦  «        dk    sJ ‚g }|D ] Š‰|v r‰dz   Š|                     ‰¦  «         Œ!‰ j                             ¦   «         r‰dz  Št"          j        ‰ j        v rd‰› dd                     |¦  «        › d�}nAt"          j        ‰ j        v sJ ‚|d         › d‰› dd                     |dd …         ¦  «        › d�}t          |¦  «        }
|}	 ||	d¦  «        }|                     t-          |	|j        |j        |
|d d ¬!¦  «        ¦  «         �Œæ|S )$Nr…   rU   Úpostfixr5   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.)r;   r<   ÚbaseÚ
startswithrl   r›   r�   rž   r-   rŸ   r«   Úaddr¥   )
r…   rÉ   Ú
is_foreachÚrequired_inputsÚargÚarg_nameÚfoundrÇ   rÀ   rp   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Ñ-Ô-Ð-øå�_Ñ%Ô%Ð%rB   Ú_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>.repl\  s0   ø€ ØŸ'š' !™*œ*ÐG jÐGÐG¸1¿7º7À1¹:¼:ÐGÐGÐGrB   Úgradc                ób   •— |                       d¦  «        › ‰› d|                       d¦  «        › �S )Nr³   Ú_prÚ   rÛ   )rØ   rÒ   s    €r@   rÞ   z-postprocess_forward_derivatives.<locals>.reple  s0   ø€ ØŸgšg a™jœjÐB¨(ÐBÐB°a·g²g¸a±j´jÐBÐBÐBrB   ú(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 r9   ©r<   )r>   rÑ   s     r@   rb   z3postprocess_forward_derivatives.<locals>.<listcomp>…  s   € ÐHÐHÐH¨3˜cœhÐHÐHÐHrB   Ú_symintzat::z, ú)ú.rá   Fr´   )r…   rU   rÉ   rU   r5   r‡   )rØ   r   r5   rU   )r…   r;   Úkindr)   Úinplacer<   rH   r†   r«   r¡   r�   Úsubr-   rŸ   r¥   rk   Ú
has_symintr+   rv   ÚvariantsÚjoinr   r   rµ   )rp   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ö     s4  øøøøø€ ð&ð &ð &ð &ð &ð &ð &ð &ð4 46Ðà#ð z
ñ z
ˆØ”,ˆØ"6Ð"6°wÀÑ"EÔ"EÐØÐ)Ò)Ñ)à”—’‘”¥Ô!3Ò3Ð3Ð3Øc°A´F´KÐcÐcÐcñ 4Ô3Ð3õ Ð.Ñ/Ô/°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Ý�~Ñ&Ô&¨Ò*Ð*Ð*Ð*ð ˆHØ)ð *ð *�Ø˜~Ð-Ð-Ø'¨$™�HØ—’ Ñ)Ô)Ð)Ð)ð Œv× Ò Ñ"Ô"ð 'Ø˜YÑ&�	õ Ô 1¤:Ð-Ð-ØF IÐFÐF°·	²	¸(Ñ0CÔ0CÐFÐFÐF�
�
å”~¨¬Ð3Ð3Ð3Ð3Ø (¨¤Ð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ðñ ô ñ
	
ô 
	
ð 
	
ñ 
	
ð ÐrB   Ú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Ñ
:Ô
:Ð:rB   ry   údict[Any, Any]rt   ú*dict[FunctionSchema, list[NativeFunction]]ru   údict[str, NativeFunction]rw   úCounter[str]rx   ú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<   rU   r5   r&   c                ó  — | D ]Z}|j                              ¦   «         s?|j                              ¦   «         s&|t          |j         j        j        ¦  «        k    r|c S Œ[|dz   t          j        | d         j         ¦  «        k    sJ ‚| d         S )NÚ_r   )r;   Úis_functional_fnÚ	is_out_fnrU   r<   r   )r_   r<   rp   s      r@   Úcanonical_functionz9create_differentiability_info.<locals>.canonical_functionÄ  s•   € ð ð 	ð 	ˆAà”F×+Ò+Ñ-Ô-ðàœ×(Ò(Ñ*Ô*ðð �C ¤¤Ô 0Ñ1Ô1Ò1Ð1à���øà�c‰z�SœX i°¤lÔ&7Ñ8Ô8Ò8Ð8Ð8Ð8Ø˜Œ|ÐrB   Ú	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Ð=Ð=Ð=Ð=Ð=Ð=rB   ú,)r¥   Úsplit)r  s    r@   Úsplit_namesz2create_differentiability_info.<locals>.split_namesÒ  s+   € åÐ=Ð=¨	¯ª¸Ñ(<Ô(<Ð=Ñ=Ô=Ñ=Ô=Ð=rB   rÀ   rÃ   úSequence[Derivative]r6   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    sJ ‚|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ß   Úgradsr×   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Ÿ   rH   r¤   Úextendrª   r«   rl   )	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ð
 ¥Ð%7Ñ!8Ô!8Ò8Ð8Ð8Ð8ð #1µCÐ8JÑ4KÔ4KÒ"KÐàð 	˜¨!Ò+Ð+Ýð8¨Ið 8ð 8ð 8ñô ð ð #ð 	¥sÐ+=Ñ'>Ô'>À1À#Ò'EÐ'EÝð¨Ið ð ð ñô ð ð ð 	 ð 	¨n¸qÒ.@Ð.@Ýð=¨Ið =ð =ð =ñô ð ð	ð 	Ð.@Ð.@rB   rp   ú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J d| j        j        › d|› d|› d�¦   «         ‚Œ)t          ||
¦  «        r%| 
                    t          | |	|
¦  «        ¦  «         Œu|	                     ¦   «                              ¦   «         d	k    r||
z  }Œ¥t          | |	|
|¦  «        }| 
                    |¦  «         ‰t          |
¦  «        z  ŠŒß‰                     |¦  «        }|rt!          d
‰› d|› �¦  «        ‚ˆfd„t          | ¦  «        D ¦   «         }t#          | ‰||||¦  «        } ‰‰|¦  «         |||||fS )Nc                ó   — g | ]	}|j         ‘Œ
S r9   rå   rŽ   s     r@   rb   zMcreate_differentiability_info.<locals>.set_up_derivatives.<locals>.<listcomp>  s   € Ð:Ð:Ð: A˜œÐ:Ð:Ð:rB   c                ó   — g | ]	}|j         ‘Œ
S r9   rå   r˜   s     r@   rb   zMcreate_differentiability_info.<locals>.set_up_derivatives.<locals>.<listcomp>  s'   € ð 
ð 
ð 
ØˆAŒFð
ð 
ð 
rB   Tc                ól   — g | ]1\  }}|r*|j         ®|j                             ¦   «         ¯'d|j         › �‘Œ2S )NÚgrad_)r<   r›   Úis_tensor_like)r>   ÚretÚdifferentiables      r@   rb   zMcreate_differentiability_info.<locals>.set_up_derivatives.<locals>.<listcomp>(  sZ   € ð 	%
ð 	%
ð 	%
á#��^àð		%
ð ”Ð$à”×'Ò'Ñ)Ô)ð %ð �C”HÐÐð
 %Ð$Ð$rB   z-While processing the derivative formula for 'z' wrt 'z', expected 'z0' 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 r9   rå   )r>   r�   Úargs_with_derivatives_sets     €r@   rb   zMcreate_differentiability_info.<locals>.set_up_derivatives.<locals>.<listcomp>S  s-   ø€ ð !
ð !
ð !
Ø¨1¬6Ð5NÐ+NÐ+NˆAÐ+NÐ+NÐ+NrB   )rl   r„   r;   r§   rH   r¨   ÚsortedÚkeysr<   rù   rk   r¿   Úlowerr  r°   Úintersectionr«   rö   )rp   rÃ   rÅ   Únon_differentiable_arg_namesrÁ   Úall_ret_namesÚdifferentiabilityrˆ   r  r…   r±   r<   Ú
derivativeÚoverlaprÇ   r&  r  rð   rÀ   rd   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àð ð �Ø  MÐ1Ð1°d¸mÐ6KÐ6KÐ6KðXÀAÄFÄKð Xð XÐX\ð Xð XØ!%ðXð Xð Xñ 7LÔ6KÐLøõ
 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ð ØØ!Ø(Ø%ð
ð 	
rB   rd   Nc              3  ó@   K  — | ]}t          |t          ¦  «        V — Œd S r
  )r]   rU   )r>   Údiffs     r@   r”   z0create_differentiability_info.<locals>.<genexpr>s  s=   è è € ð (ð (Ø"&�
�4�ÑÔð(ð (ð (ð (ð (ð (rB   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<   r;   ©r>   ÚkÚvrÀ   s      €r@   r”   z0create_differentiability_info.<locals>.<genexpr>„  sF   øè è € ð 
ð 
Ù�!�Q½¼À!Ä&Ñ9IÔ9IÈYÒ9VÐ9VˆAÐ9VÐ9VÐ9VÐ9Vð
ð 
rB   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<   rU   r5  s      €r@   r”   z0create_differentiability_info.<locals>.<genexpr>’  sL   øè è € ð 
ð 
á��1ÝŒx˜‰{Œ{˜iÒ'Ð'õ �‰FŒFà'Ð'Ð'Ð'ð
ð 
rB   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ÐFrB   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Ð=Ð=Ð=Ð=Ð=Ð=rB   zy has an argument named result, but this is only allowed for outputs.Please use a different name in native_functions.yaml.rc   re   zInvalid dispatch key z in derivatives.yaml for z, expected key to be one of c                ó&   — g | ]}|j         D ]}|‘ŒŒS r9   )r¢   ©r>   r  r7  s      r@   rb   z1create_differentiability_info.<locals>.<listcomp>Ò  s'   € Ð@Ð@Ð@�q°´Ð@Ð@¨A�Ð@Ð@Ð@Ð@rB   c                ó&   — g | ]}|j         D ]}|‘ŒŒS r9   )r£   r=  s      r@   rb   z1create_differentiability_info.<locals>.<listcomp>Õ  s'   € ÐAÐAÐA�q°´ÐAÐA¨A�ÐAÐAÐAÐArB   )r<   r;   ÚoprÃ   rÅ   Úall_saved_inputsÚall_saved_outputsrˆ   r®   rÇ   r+  rd   Ú#output_differentiability_conditions)r_   r  r<   rU   r5   r&   )r  rU   r5   r‡   )rÀ   rU   rÃ   r  r5   r6   )rp   r&   r5   r  )r!   rm   r.   ÚanyrH   r«   rE   rî   rD   r;   rj   r„   Ú_VALID_AUTOGRAD_KEYSrÎ   rl   r¤   Ú_create_op_prefixr   Ú
dedup_vars)ry   rt   ru   rw   rx   r  r0  rz   r  rB  Úschema_functionÚavailrj   r_   Ú	canonicalÚdiffinfo_dictro   rÃ   rÅ   rÇ   r+  rˆ   r®   r  r?  Ú	op_prefixr  rð   rÀ   rd   r  s                             @@@@@r@   rn   rn   »  s0  øøøøø€ ðð ð ð ð>ð >ð >ð >ð1ð 1ð 1ð 1õf ð`
ð `
ð `
ð `
ð `
ð `
ð `
ð `
ð `
ñ Ôð`
ðF —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ÑÑð( Œ>˜=Ð(Ð(rB   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 r9   )r»   )r>   r¯   s     r@   rb   z)used_gradient_indices.<locals>.<listcomp>ì  s   € ÐBÐBÐB�q�C�‰FŒFÐBÐBÐBrB   )r�   rº   ÚGRAD_INDEX_REGEX)r…   s    r@   rª   rª   å  s&   € ð CÐB�BœJÕ'7¸ÑAÔAÐBÑBÔBÐBrB   Ú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<   rU   r5   c                ó8   •— ‰| fk    s
J 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")r9   )r<   r†   s    €r@   Ústride_exprz$saved_variables.<locals>.stride_exprô  s>   ø€ Ø˜T˜GÒ#Ð#Ð#ð4ñ $Ô#Ð#ð 5 4Ð4Ð4¨DÐ4Ð4Ð4Ð4rB   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€ rB   )Ú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ñ(ô (€ rB   c                ó   — | › d| › d�S )Nz2.has_value() ? std::optional<c10::SymIntArrayRef>(z->sym_sizes()) : std::nulloptr9   rå   s    r@   r`   z!saved_variables.<locals>.<lambda>  s'   € ¨ð  &Dð  &DÐ`dð  &Dð  &Dð  &D€ rB   )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^  rB   c                ó   — d| › d�S )Nz#at::sparse_csr::getSymIntBlockSize(rç   r9   rå   s    r@   r`   z!saved_variables.<locals>.<lambda>  s   € Ð%RÈ4Ð%RÐ%RÐ%R€ rB   z{}.options\(\)Ú_optionsc                óF   — t          | t          t          ¦  «        ¦  «        S r
  )r   r   r   rå   s    r@   r`   z!saved_variables.<locals>.<lambda>  s   € ¥z°$½	Å.Ñ8QÔ8QÑ'RÔ'R€ rB   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€ rB   c                ó   — | S r
  r9   rå   s    r@   r`   z!saved_variables.<locals>.<lambda>(  s   €  T€ rB   c                ó   — | dz   S )Nz_info.zeros()r9   rå   s    r@   r`   z!saved_variables.<locals>.<lambda>)  s   €  D¨?Ñ$:€ rB   )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>0  s+   € Ð$Z°A·H²H±J´J¸q´M×4IÒ4IÈ#ÈxÑ4XÔ4XÐ$ZÐ$Z€ rB   c                óF   — t          | t          t          ¦  «        ¦  «        S r
  ©r   r   r   rå   s    r@   r`   z!saved_variables.<locals>.<lambda>1  ó   € ¥z°$½	Å'Ñ8JÔ8JÑ'KÔ'K€ rB   z{}.numel\(\)Ú_numelc                óF   — t          | t          t          ¦  «        ¦  «        S r
  ©r   r   r   rå   s    r@   r`   z!saved_variables.<locals>.<lambda>9  ó   € ¥z°$½	Å%Ñ8HÔ8HÑ'IÔ'I€ rB   z{}.sym_numel\(\)Ú
_sym_numelc                óF   — t          | t          t          ¦  «        ¦  «        S r
  rq  rå   s    r@   r`   z!saved_variables.<locals>.<lambda>A  rr  rB   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>I  s-   € ¥zØ�+¥kµ)½EÑ2BÔ2BÑ&CÔ&CÑDÔDñ(ô (€ rB   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>S  s-   € ¥zØ�+¥kµ)½GÑ2DÔ2DÑ&EÔ&EÑFÔFñ(ô (€ rB   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>]  s%   € ¥zØ�+¥iµÑ&<Ô&<Ñ=Ô=ñ(ô (€ rB   zTensorGeometry\({}\)Ú	_geometryc                óF   — t          | t          t          ¦  «        ¦  «        S r
  )r   r   r   rå   s    r@   r`   z!saved_variables.<locals>.<lambda>g  rY  rB   z{}.scalar_type\(\)Ú_scalar_typec                óF   — t          | t          t          ¦  «        ¦  «        S r
  )r   r   r   rå   s    r@   r`   z!saved_variables.<locals>.<lambda>n  s   € ¥z°$½	Å+Ñ8NÔ8NÑ'OÔ'O€ rB   z
{}.dim\(\)Ú_dimc                óF   — t          | t          t          ¦  «        ¦  «        S r
  ru  rå   s    r@   r`   z!saved_variables.<locals>.<lambda>v  rv  rB   z{}.sym_strides\(\)Ú_sym_stridesc                óF   — t          | t          t          ¦  «        ¦  «        S r
  rX  rå   s    r@   r`   z!saved_variables.<locals>.<lambda>~  rY  rB   z{}.layout\(\)Ú_layoutc                óF   — t          | t          t          ¦  «        ¦  «        S r
  )r   r   r   rå   s    r@   r`   z!saved_variables.<locals>.<lambda>‡  rr  rB   z{}.is_conj\(\)Ú
_conjugatec                óF   — t          | t          t          ¦  «        ¦  «        S r
  )r   r   r   rå   s    r@   r`   z!saved_variables.<locals>.<lambda>�  rv  rB   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Ü   rk   r   )rØ   rZ  r`  ÚreplacementrP   r<   Úsaveds       €€€r@   rÞ   zsaved_variables.<locals>.repl°  sÍ   ø€ å)1°$°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‘}Ð$rB   z\bz/.has_value() ? std::optional<std::string_view>(z.value()) : std::nulloptr�  ©r<   rU   r5   rU   )rØ   r‹  r5   rU   )r«   r�   rž   r]   r<   r   rë   rŸ   r›   r   r   r   r-   rk   r   r¥   )r…   rP  r†   rU  ÚREPLACEMENTSrŒ   ÚregexrÞ   rP   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Ð Ð rB   r<   c                ó˜   — d                      d„ |                      d¦  «        D ¦   «         ¦  «        }|dz                        dd¦  «        S )aW  Takes a native function name converts to a 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 r9   )Útitle)r>   Úps     r@   rb   z%_create_op_prefix.<locals>.<listcomp>å  s    € Ð=Ð=Ð=¨˜!Ÿ'š'™)œ)Ð=Ð=Ð=rB   r  ÚBackwardÚForwardBackward)rî   r  ro  )r<   Ú
camel_cases     r@   rE  rE  Ø  sJ   € ð —’Ð=Ð=¨T¯ZªZ¸©_¬_Ð=Ñ=Ô=Ñ>Ô>€JØ˜Ñ#×,Ò,Ð->À
ÑKÔKÐKrB   Ú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
  )rl   r]   rŒ   r<   r   rÎ   rk   )rœ  Úseenr�  Úvarr<   s        r@   rF  rF  é  s†   € Ý‘U”U€DØ"$€EØð 	ð 	ˆõ ˜#œ*œ/­>Ñ:Ô:ð!ˆCŒJŒOÔ Ð à””ð 	ð
 �4ˆ<ˆ<ØØ�Š�‰ŒˆØ�Š�SÑÔÐÐØ€LrB   )r1   r2   r3   r4   r5   r6   )rT   rU   rV   rU   rW   rU   r5   rX   )rp   r&   r5   r}   )
rp   r&   r…   rU   r†   r‡   rˆ   r‰   r5   r   )rp   r&   r…   rU   r±   r‡   r5   r   )rp   r&   rÀ   rU   rÁ   rÂ   rÃ   rÄ   rÅ   rÆ   rÇ   r}   r5   rÆ   )rÁ   rÂ   r±   r‡   r5   r÷   )ry   rú   rt   rû   ru   rü   rw   rý   rx   rþ   r5   rÿ   )r…   rU   r5   rL  )r…   rU   rP  rQ  r†   r‡   r5   rR  r‘  )rœ  r�  r5   r�  )MÚ
__future__r   r�   Úcollectionsr   Útypingr   r   r   r   r	   r
   rg   Ú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/   rU   rX   r0   Ú__annotations__rl   rD  rS   r|   r„   r°   r¿   rö   rù   rn   rO  rª   r©   rE  rF  r9   rB   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˜=Ñ)Ô)Ð ðð ð ð ðDJ.ð J.ð J.ð J.ð\ ð*ð *ð *ñ Ôð*ð,ð ,ð ,ð ,ð^"ð "ð "ð "ðJ`ð `ð `ð `ðF;ð ;ð ;ð ;ðd)ð d)ð d)ð d)ðN	 -Ð ðCð Cð Cð Cðf!ð f!ð f!ð f!ðRLð Lð Lð Lð"ð ð ð ð ð rB   