§
    Ì²Åj™›  ã                  óÊ  — d dl mZ d dlZd dlmZ d dl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 d dlmZmZmZmZmZmZmZmZ d d	lmZ erd d
lmZ  ed¬¦  «         G d„ d¦  «        ¦   «         Z ed¬¦  «         G d„ d¦  «        ¦   «         Z ed¬¦  «         G d„ d¦  «        ¦   «         Z  ed¬¦  «         G d„ d¦  «        ¦   «         Z!dCd„Z"dDd„Z#dDd„Z$ ed¬¦  «         G d„ d¦  «        ¦   «         Z% ed¬¦  «         G d „ d!¦  «        ¦   «         Z& ed¬¦  «         G d"„ d#¦  «        ¦   «         Z'dEd%„Z(dFd(„Z)d)hZ*h d*£Z+h d+£Z,dGd.„Z-	 dHdId6„Z.dJd;„Z/dKd?„Z0	 dHdLdB„Z1dS )Mé    )ÚannotationsN)Ú	dataclass)ÚcastÚTYPE_CHECKING)Úlocal)Úcpp)Ú	BaseCTypeÚBindingÚ
NamedCTypeÚtensorListT)ÚBaseTyÚBaseTypeÚFunctionSchemaÚListTypeÚNativeFunctionÚNativeFunctionsViewGroupÚ
SchemaKindÚType)ÚIDENT_REGEX)ÚSequenceT)Úfrozenc                  ó$   — e Zd ZU ded<   ded<   dS )ÚSavedAttributer   ÚnctypeÚstrÚexprN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úFC:\Projects\Historical\venv\Lib\site-packages\torchgen/api/autograd.pyr   r      s)   € € € € € € ð ÐÐÑð €I€I�I€I€Ir#   r   c                  óL   — e Zd ZU ded<   ded<   ded<   ded<   ded<   d	ed
<   dS )Ú
Derivativer   ÚformulaÚoriginal_formulaútuple[str, ...]Ú	var_namesztuple[SavedAttribute, ...]Úsaved_inputsÚsaved_outputsúset[str]Únamed_gradientsNr   r"   r#   r$   r&   r&   +   sc   € € € € € € ð €L€L�Lð ÐÐÑð ÐÐÑð -Ð,Ð,Ñ,ð .Ð-Ð-Ñ-ð ÐÐÑÐÐr#   r&   c                  óV   — e Zd ZU ded<   ded<   ded<   ded<   ded	<   d
ed<   d
ed<   dS )ÚForwardDerivativer   r'   r)   r*   ztuple[Type, ...]Ú	var_typesztuple[str, ...] | NoneÚrequired_inputs_fw_gradÚrequired_inputs_primalÚboolÚrequired_original_self_valueÚis_reusing_outplace_formulaNr   r"   r#   r$   r0   r0   G   sq   € € € € € € ð
 €L€L�Lð ÐÐÑð  ÐÐÑð 4Ð3Ð3Ñ3ð 3Ð2Ð2Ñ2ð 'Ð&Ð&Ñ&ð &Ð%Ð%Ñ%Ð%Ð%r#   r0   c                  ó²   — e Zd ZU ded<   ded<   ded<   ded<   d	ed
<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded<   ed!d„¦   «         Zd"d„Zd S )#ÚDifferentiabilityInfor   Únamer   Úfuncz
str | NoneÚopzSequence[Derivative]ÚderivativeszSequence[ForwardDerivative]Úforward_derivativeszSequence[SavedAttribute]Úall_saved_inputsÚall_saved_outputszSequence[str]Úavailable_named_gradientsr-   Úused_named_gradientszSequence[Binding]Úargs_with_derivativesÚnon_differentiable_arg_nameszlist[bool] | NoneÚoutput_differentiabilityzlist[str] | NoneÚ#output_differentiability_conditionsÚreturnr4   c                ó2   — t          | j        ¦  «        dk    S )Nr   )ÚlenrB   ©Úselfs    r$   Úhas_derivativesz%DifferentiabilityInfo.has_derivatives¨   s   € å�4Ô-Ñ.Ô.°Ò2Ð2r#   Úgr   úDifferentiabilityInfo | Nonec                ón  — |j         €d S |j         }| j                             dd¬¦  «        }|d         › d�d                     |dd …         ¦  «        z   }| j        €d n	| j        › d�}t          |||| j        | j        | j        | j	        | j
        | j        | j        | j        | j        | j        ¬¦  «        S )	Nú.é   )Úmaxsplitr   z_copy.é   Ú_copy©r9   r:   r;   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   )Ú	view_copyr9   ÚsplitÚjoinr;   r8   r<   r=   r>   r?   r@   rA   rB   rC   rD   rE   )rJ   rL   ÚfÚname_split_by_periodÚview_copy_nameÚview_copy_op_names         r$   Ú%create_view_copy_from_view_derivativez;DifferentiabilityInfo.create_view_copy_from_view_derivative±   sÝ   € ð Œ;ÐØ�4ØŒKˆà#œyŸš¨s¸Q˜Ñ?Ô?Ðà0°Ô3Ð;Ð;Ð;¸c¿hºhØ    Ô$ñ?
ô ?
ñ 
ˆð %)¤G O˜D˜D¸D¼GÐ9JÐ9JÐ9JÐå$àØØ àÔ(Ø $Ô 8Ø!Ô2Ø"Ô4Ø&*Ô&DØ!%Ô!:Ø"&Ô"<Ø)-Ô)JØ%)Ô%BØ04Ô0Xð
ñ 
ô 
ð 	
r#   N)rF   r4   )rL   r   rF   rM   )r   r   r    r!   ÚpropertyrK   r\   r"   r#   r$   r8   r8   f   sø   € € € € € € ð €I€I�Ið ÐÐÑð
 €N€N�Nð &Ð%Ð%Ñ%ð 5Ð4Ð4Ñ4ð /Ð.Ð.Ñ.ð 0Ð/Ð/Ñ/ð -Ð,Ð,Ñ,ð #Ð"Ð"Ñ"ð
 -Ð,Ð,Ñ,ð 0Ð/Ð/Ñ/ð 0Ð/Ð/Ñ/ð :Ð9Ð9Ñ9àð3ð 3ð 3ñ „Xð3ð
ð 
ð 
ð 
ð 
ð 
r#   r8   ÚinforM   Úidentr   rF   r4   c                ó„   — | €dS | j         D ]3}|j        }t          j        t	          j        |¦  «        |¦  «        r dS Œ4dS )NFT)r<   r'   ÚreÚsearchr   Úformat)r^   r_   Ú
derivativer'   s       r$   Ú
uses_identre   Ò   sV   € Ø€|ØˆuØÔ&ð ð ˆ
ØÔ$ˆÝŒ9•[Ô'¨Ñ.Ô.°Ñ8Ô8ð 	Ø�4�4ð	àˆ5r#   c                ó"   — t          | d¦  «        S )NÚretain_variables©re   ©r^   s    r$   Úuses_retain_variablesrj   Ü   s   € Ý�dÐ.Ñ/Ô/Ð/r#   c                ó"   — t          | d¦  «        S )NÚgradrh   ri   s    r$   Úuses_single_gradrm   à   s   € Ý�d˜FÑ#Ô#Ð#r#   c                  ó.   — e Zd ZU ded<   ded<   ded<   dS )ÚDifferentiableInputr   r9   r   ÚtypeÚcpp_typeNr   r"   r#   r$   ro   ro   é   ó-   € € € € € € à€I€I�IØ€J€J�Jð €M€M�M€M€Mr#   ro   c                  ó.   — e Zd ZU ded<   ded<   ded<   dS )ÚDifferentiableOutputr   r9   r   rp   rq   Nr   r"   r#   r$   rt   rt   ú   rr   r#   rt   c                  ó.   — e Zd ZU ded<   ded<   ded<   dS )Ú'NativeFunctionWithDifferentiabilityInfor   r:   z'dict[str, DifferentiabilityInfo] | Noner^   z-dict[str, Sequence[ForwardDerivative]] | NoneÚfw_derivativesNr   r"   r#   r$   rv   rv     s6   € € € € € € àÐÐÑØ1Ð1Ð1Ñ1ØAÐAÐAÑAÐAÐAr#   rv   Úfnc                ó�   — | j         j        s7| j        �2t          d„ | j                             ¦   «         D ¦   «         ¦  «        rdS dS )a  How are we going to call the underlying implementation of a
    declaration?  There are two strategies:
        - use_derived: we want to call the implementation on CPUDoubleType
          (or a similar, derived Type instance).  Because these derived
          instances deal in Tensors, not Variables (it's a completely different
          object, so it doesn't dispatch back to VariableType), code on
          this dispatch path needs to wrap/unwrap tensors.  If the
          derived implementation takes and returns tensors, the
          implementation is usually differentiable (although we also use
          the derived dispatch path for non-differentiable functions
          that we still want to dispatch on the derived Type instance;
          e.g., size())
        - use_type: we want to call the implementation on Type, because
          it is implemented concretely, and the functions it invokes will
          get dispatched back to VariableType (which will ensure that they
          are differentiable.)
    Nc              3  ó$   K  — | ]}|j         V — Œd S ©N)rK   ©Ú.0r^   s     r$   ú	<genexpr>z$dispatch_strategy.<locals>.<genexpr>"  s%   è è € Ð#VÐ#V¸T DÔ$8Ð#VÐ#VÐ#VÐ#VÐ#VÐ#Vr#   Úuse_derivedÚuse_type)r:   Úis_abstractr^   ÚanyÚvalues)rx   s    r$   Údispatch_strategyr„     sO   € ð, 
„wÔð Ø
ŒÐ¥Ð#VÐ#VÀRÄWÇ^Â^ÑEUÔEUÐ#VÑ#VÔ#VÑ VÔ VÐð" ˆ}ð ˆzr#   rX   r   c                óT   — | j         j        j        j                             d¦  «        S )NÚ	_foreach_)r:   r9   ÚbaseÚ
startswith)rX   s    r$   Úis_foreach_funcr‰   <  s    € ØŒ6Œ;ÔÔ ×+Ò+¨KÑ8Ô8Ð8r#   Ú_foreach_zero_>   ú_foreach_add.Tensorú_foreach_div.Tensorú_foreach_mul.Tensor>   ú_foreach_add.Scalarú_foreach_sub.Scalarú_foreach_add_.Scalarú_foreach_sub_.Scalarú_foreach_add.ScalarListú_foreach_sub.ScalarListú_foreach_add_.ScalarListú_foreach_sub_.ScalarListÚfunction_schemar   c                ó  — | j         j        j        j                             d¦  «        d         |j        j        j        k    oÊ|j        j        j         pt          | j         j        ¦  «        t          v o˜t          | j         j        ¦  «        t          v p8t          | j         j	        j
        ¦  «        t          |j	        j
        ¦  «        k    o?t          d„ t          | j         j	        j
        |j	        j
        ¦  «        D ¦   «         ¦  «        S )Nr†   éÿÿÿÿc              3  ód   K  — | ]+\  }}|j         |j         t          |j         d d¦  «        fv V — Œ,dS )ÚelemN)rp   Úgetattr)r}   ÚargÚref_args      r$   r~   z+is_reference_for_foreach.<locals>.<genexpr>g  sV   è è € ð 
ð 
á��Wð ŒL˜SœX¥w¨s¬x¸ÀÑ'FÔ'FÐGÐGð
ð 
ð 
ð 
ð 
ð 
r#   )r:   r9   r‡   rV   Úinplacer   Ú_foreach_with_inplace_refÚ_skip_argument_len_checkrH   Ú	argumentsÚflat_non_outÚallÚzip)rX   r–   s     r$   Úis_reference_for_foreachr¥   X  sý   € ð
 	
ŒŒÔÔ×#Ò# KÑ0Ô0°Ô4¸Ô8LÔ8QÔ8VÒVð 	
àÔ$Ô)Ô1Ð1ð =Ý�1”6”;ÑÔÕ#<Ð<ð	
õ �””ÑÔÕ 8Ð8ð ;Ý�1”6Ô#Ô0Ñ1Ô1Ý�?Ô,Ô9Ñ:Ô:ò;ð	
õ ð 
ð 
å #Ø”Ô Ô-ØÔ)Ô6ñ!ô !ð
ñ 
ô 
ñ 
ô 
ðr#   ÚDefaultÚforeach_functionÚfunctional_info_by_signatureú6dict[FunctionSchema, dict[str, DifferentiabilityInfo]]Ú non_functional_info_by_signatureÚdispatch_keyú)tuple[DifferentiabilityInfo | None, bool]c                óþ  ‡&‡'— d}|                      ¦   «         D ]"\  }}t          | |¦  «        sŒ||         }|� nŒ#|€~| j                             ¦   «         t          j        k    rWt          | j        j        ¦  «        t          v r7|                      ¦   «         D ]"\  }}t          | |¦  «        sŒ||         }|� nŒ#|€dS | j                             ¦   «         t          j        k    r|dfS i i cŠ'}t          t          | j        j        j        |j        j        ¦  «        ¦  «        D ]!\  }\  }	}
|	j        ‰'|
j        <   |	||	j        <   Œ"g g g c}}Š&g }t          |j        ¦  «        D �]ª\  }}|j                             dd¦  «                             dd¦  «        }g g }}t!          j        | j        | j        ¬¦  «        5  |j        D �]}|j                             d	¦  «        d
         }‰'|         }t/          ||         j        t2          ¦  «        r|dz   }n|}|j                             ||¦  «        }|                     t5          t          |j        j        ¦  «        |¦  «        }t9          j        ||         |¬¦  «        }t=          |j        |j                             ¦   «         ¦  «        }|                      tC          ||¬¦  «        ¦  «         �Œ|j"        D ]f}|j        j        dk    rF|                      tC          t=          dtG          tH          ¦  «        ¬¦  «        d¬¦  «        ¦  «         ŒXtK          d¦  «        ‚	 ddd¦  «         n# 1 swxY w Y   ˆ'fd„|j&        D ¦   «         }‰& '                    |¦  «         | '                    |¦  «         | '                    |¦  «         tQ          ||j        tS          |¦  «        tS          |¦  «        tS          |¦  «        tU          ¦   «         ¬¦  «        }|                      |¦  «         �Œ¬t!          j        | j        | j        ¬¦  «        5  ˆ&fd„| j        j        j        D ¦   «         }ddd¦  «         n# 1 swxY w Y   g }|j+        D �]}tY          |j&        ¦  «        }tY          |j-        ¦  «        }g } g }!|j.        �tY          |j.        ¦  «        } |j/        rtY          |j/        ¦  «        }!|j        }d|v r|j                             dd¦  «        }t          | j        j        j        |j        j        j        j        ¦  «        D �]Ü\  }"}
t/          |"j        t2          ¦  «        r=|"j         0                    ¦   «         s$|                     |
j        |"j        dz   ¦  «        }n÷|"j         0                    ¦   «         r®t/          |"j        t2          ¦  «        s`|"j        tc          td          j3        ¦  «        k    r t          | j        j        ¦  «        th          v sJ | j        j        › d|"j        › �¦   «         ‚dD ]0}#|
j        |#z   }$|$|v r |"j        |#z   }|                     |$|¦  «        }Œ1n0|"j        |
j        k    r |                     |
j        |"j        ¦  «        }t          |¦  «        D ]$\  }}%|%|
j        k    r|"j        ||<   |"j        ||<   Œ%t          | ¦  «        D ]\  }}%|%|
j        k    r
|"j        | |<   Œt          |!¦  «        D ]\  }}%|%|
j        k    r
|"j        |!|<   Œ�ŒÞ|                      tk          |tS          |¦  «        tS          |¦  «        tS          | ¦  «        tS          |!¦  «        |j6        |j7        ¬¦  «        ¦  «         �Œtq          | j        j        j        j9        | d|j:        › | j        j        j;        › �||tS          tU          |¦  «        ¦  «        tS          tU          |¦  «        ¦  «        dtU          ¦   «         |g dd¬¦  «        dfS )zÀGenerate DifferentiabilityInfo for out-place foreach function, return the existing one for in-place.

    The second return value indicates whether the info is generated in this function.
    N©NFFrl   zgrads[i]Úresultz	result[i])Ú!use_const_ref_for_mutable_tensorsÚuse_ilistref_for_tensor_listsrO   r   z[i]©Úbinds)r   r   )r9   rp   Ú c                ó    •— g | ]
}‰|         ‘ŒS r"   r"   )r}   ÚvarÚmap_refarg2foreachargs     €r$   ú
<listcomp>z.gen_foreach_derivativeinfo.<locals>.<listcomp>Ñ  s   ø€ ÐPÐPÐP°CÐ*¨3Ô/ÐPÐPÐPr#   )r'   r(   r*   r+   r,   r.   c           	     ó„   •— g | ]<}|j         ‰v ¯t          |j         t          j        ||j         ¬ ¦  «        |d¬¦  «        ‘Œ=S )r²   N)r9   r   ÚargumentÚdefault)r9   r
   r   Úargument_type)r}   rœ   Úall_var_namess     €r$   r¸   z.gen_foreach_derivativeinfo.<locals>.<listcomp>ã  sc   ø€ ð 	!
ð 	!
ð 	!
ð ØŒx˜=Ð(Ð(õ Ø”XÝÔ(¨°C´HÐ=Ñ=Ô=ØØð	ñ ô ð )Ð(Ð(r#   z, )Ú_pÚ_t©r'   r*   r1   r2   r3   r5   r6   ÚForeachr"   rT   T)<Úitemsr¥   r:   Úkindr   rž   r   r9   rŸ   Ú	enumerater¤   r¡   r¢   r<   r'   Úreplacer   Úparametrizer°   Úpart_of_structured_groupr+   r   rV   Ú
isinstancerp   r   r   r   r   r¼   r   Úremove_const_refÚappendr   r,   r	   r   ÚRuntimeErrorr*   Úextendr&   ÚtupleÚsetr=   Úlistr1   r2   r3   Úis_tensor_liker   r   ÚTensorÚ_foreach_with_tensor_overloadr0   r5   r6   r8   r‡   r;   Úoverload_name)(r§   r¨   rª   r«   Úref_diff_infor–   Ú	diff_infoÚmap_name2argÚirœ   r�   r>   r?   Úmodified_derivative_formulasrd   Úmodified_formular+   r,   Ú	ref_inputÚref_input_jit_nameÚmapped_nameÚmapped_exprÚnew_exprr   Úcanonical_nctypeÚ
ref_outputr*   Úmodified_derivativerB   r=   Úfw_derivativer1   r2   r3   Úforeach_argÚsuffixÚ	curr_exprr9   r½   r·   s(                                         @@r$   Úgen_foreach_derivativeinforæ   r  s£	  øø€ ð 37€Mà&B×&HÒ&HÑ&JÔ&Jð ð Ñ"ˆ˜Ý'Ð(8¸/ÑJÔJð 	ØØ! ,Ô/ˆØÐ$ØˆEð %ð
 	ÐØÔ!×&Ò&Ñ(Ô(­JÔ,>Ò>Ð>ÝÐ Ô%Ô*Ñ+Ô+Õ/HÐHÐHà*J×*PÒ*PÑ*RÔ*Rð 	ð 	Ñ&ˆO˜YÝ+Ð,<¸oÑNÔNð ØØ% lÔ3ˆMØÐ(Ø�ð )àÐØˆ{ð Ô×!Ò!Ñ#Ô#¥zÔ'9Ò9Ð9Ø˜eÐ#Ð#à*,¨bÐ'Ð˜<Ý&ÝØÔ!Ô+Ô8ØÔ%Ô2ñ	
ô 	
ñô ð %ð %Ñˆ‰>ˆC�ð /2¬hÐ˜gœlÑ+Ø!$ˆ�S”XÑÐà9;¸RÀÐ6ÐÐ'¨Ø#%Ð Ý" =Ô#<Ñ=Ô=ð 5Añ 5A‰ˆˆ:Ø%Ô-×5Ò5°f¸jÑIÔI×QÒQØ�kñ
ô 
Ðð ')¨"�mˆåÔØ.>Ô.`Ø*:Ô*Sð
ñ 
ô 
ð "	+ð "	+ð (Ô4ð ñ �	Ø%.¤^×%9Ò%9¸#Ñ%>Ô%>¸qÔ%AÐ"Ø3Ð4FÔG�Ý˜l¨;Ô7Ô<½hÑGÔGð .Ø"-°Ñ"5�K�Kà"-�KØ$œ>×1Ò1Ð2DÀkÑRÔR�Ø#3×#;Ò#;Ý�˜iÔ.Ô3Ñ4Ô4°hñ$ô $Ð õ Ô*¨<¸Ô+DÈKÐXÑXÔX�Ý#-Ø”K ¤×!=Ò!=Ñ!?Ô!?ñ$ô $Ð ð ×#Ò#Ý"Ð*:ÀÐMÑMÔMñô ð ñ ð )Ô6ð +ð +�
ØÔ$Ô)¨XÒ5Ð5Ø!×(Ò(Ý&Ý#-Ø%-µI½kÑ4JÔ4Jð$ñ $ô $ð "*ð	ñ ô ñô ð ð õ ' rÑ*Ô*Ð*ð+ð/"	+ð "	+ð "	+ñ "	+ô "	+ð "	+ð "	+ð "	+ð "	+ð "	+ð "	+øøøð "	+ð "	+ð "	+ð "	+ðF QÐPÐPÐP¸:Ô;OÐPÑPÔPˆ	Ø×Ò˜YÑ'Ô'Ð'Ø×Ò Ñ-Ô-Ð-Ø× Ò  Ñ/Ô/Ð/Ý(Ø$Ø'Ô/Ý˜IÑ&Ô&Ý˜|Ñ,Ô,Ý Ñ.Ô.Ý™EœEð
ñ 
ô 
Ðð 	%×+Ò+Ð,?Ñ@Ô@Ð@Ñ@å	Ô	Ø*:Ô*\Ø&6Ô&Oð
ñ 
ô 
ð 
ð 
ð	!
ð 	!
ð 	!
ð 	!
ð (Ô,Ô6ÔCð	!
ñ 	!
ô 	!
Ðð	
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
ð 46Ðà&Ô:ð D
ñ D
ˆÝ# MÔ$;Ñ<Ô<ˆ	Ý $ ]Ô%<Ñ =Ô =ˆ	Ø-/ÐØ,.ÐØÔ0Ð<Ý&*¨=Ô+PÑ&QÔ&QÐ#ØÔ/ð 	PÝ%)¨-Ô*NÑ%OÔ%OÐ"Ø(Ô0Ðð Ð'Ð'Ð'Ø,Ô4×<Ò<¸XÀ{ÑSÔSÐå$'ØÔ!Ô+Ô8ØÔÔ#Ô-Ô:ñ%
ô %
ð *	Añ *	AÑ ˆK˜õ ˜;Ô+­XÑ6Ô6ðà#Ô(×7Ò7Ñ9Ô9ðð
 $4×#;Ò#;Ø”L +Ô"2°UÑ":ñ$ô $Ð Ð ð Ô!×0Ò0Ñ2Ô2ð õ " +Ô"2µHÑ=Ô=ð GØÔ$­µ´Ñ(?Ô(?Ò?Ð?ÝÐ,Ô1Ô6Ñ7Ô7Õ;XÐXÐXÐXØ&Ô+Ô0ÐFÐF°KÔ4DÐFÐFñ YÔXðð +ð Yð Y�FØ '¤¨vÑ 5�IØ Ð$4Ð4Ð4Ø#.Ô#3°fÑ#<˜Ø+;×+CÒ+CÀIÈxÑ+XÔ+XÐ(øð	Yð Ô# w¤|Ò3Ð3Ø'7×'?Ò'?Øœ kÔ&6ñ(ô (Ð$õ
 % YÑ/Ô/ð 4ð 4‘��4Ø˜7œ<Ò'Ð'Ø#.Ô#3�I˜a‘LØ#.Ô#3�I˜a‘LøÝ$Ð%<Ñ=Ô=ð Bð B‘��4Ø˜7œ<Ò'Ð'Ø1<Ô1AÐ+¨AÑ.øÝ$Ð%;Ñ<Ô<ð Að A‘��4Ø˜7œ<Ò'Ð'Ø0;Ô0@Ð*¨1Ñ-øñAð 	×"Ò"ÝØ(Ý 	Ñ*Ô*Ý 	Ñ*Ô*Ý(-Ð.EÑ(FÔ(FÝ',Ð-CÑ'DÔ'DØ-:Ô-WØ,9Ô,Uðñ ô ñ
	
ô 
	
ð 
	
ñ 
	
õ 	Ø!Ô&Ô+Ô0Ô5Ø!ØU˜Ô)ÐUÐ+;Ô+@Ô+EÔ+SÐUÐUØ4Ø 3Ý"¥3Ð'7Ñ#8Ô#8Ñ9Ô9Ý#¥CÐ(9Ñ$:Ô$:Ñ;Ô;Ø&(Ý!$¡¤Ø"7Ø)+Ø%)Ø04ð	
ñ 	
ô 	
ð 	ð!ð s%   Æ>FMÍM	ÍM	Ð1QÑQÑ"QÚnative_functionsúlist[NativeFunction]Údifferentiability_infosú-list[NativeFunctionWithDifferentiabilityInfo]c                ó  ‡‡‡— d„ ‰                      ¦   «         D ¦   «         Šd„ ‰                      ¦   «         D ¦   «         Šd*ˆˆˆfd„}g }| D �]7} ||¦  «        \  }}|j                             ¦   «         t          j        k    rQ|�O|                     ¦   «         D ]:}|j        D ]0}d	|j        v r%|j        D ]}	d
|	j	        vsJ d|j        › �¦   «         ‚ŒŒ1Œ;|s&| 
                    t          |dd¬¦  «        ¦  «         Œ±i }
|                      ¦   «         D �]I\  }}|j        sg |
|<   Œ|j        }|j                             ¦   «         t          j        k    �rt          |j        ¦  «        dk    sJ ‚|j        d         }|j        }d+d„}t          j        t#          j        d¦  «        |¦  «        r7|rt'          d|j        j        › d�¦  «        ‚ ||d¦  «        } ||d¦  «        }d,d„}t          j        t#          j        d¦  «        ||¦  «        }|j        }t          j        t#          j        d¦  «        |¦  «        r	|r|dz   nd}|sƒd}d}d}d}t          j        d|¦  «        }|rF|                     d¦  «        |                     d¦  «        }}d-d"„} ||¦  «        }|o
||j        k    }|r|€J ‚|€J ‚d#|› d$|› d%|› �}nd&|› d%|› �}t3          t          j        t#          j        d'¦  «        |¦  «        ¦  «        p3t3          t          j        t#          j        d(¦  «        |¦  «        ¦  «        }t5          |d|j        |j        ||| ¬)¦  «        g}||
|<   �ŒK| 
                    t          |||
¬¦  «        ¦  «         �Œ9|S ).zÄSets the "derivative" key on declarations to matching autograd function
    In-place functions will use the out-of-place derivative definition if there
    is no in-place specific derivative.
    c                ó†   — i | ]>\  }}|                      ¦   «         t          j        k    ¯'|                     d ¬¦  «        |“Œ?S ©T©Ústrip_default©rÃ   r   Ú
functionalÚ	signature©r}   ÚschemaÚ	info_dicts      r$   ú
<dictcomp>z0match_differentiability_info.<locals>.<dictcomp>S  sO   € ð $ð $ð $áˆF�IØ�;Š;‰=Œ=�JÔ1Ò1Ð1ð 	×Ò tÐÑ,Ô,¨ià1Ð1Ð1r#   c                ó†   — i | ]>\  }}|                      ¦   «         t          j        k    ¯'|                     d ¬¦  «        |“Œ?S rí   rð   ró   s      r$   rö   z0match_differentiability_info.<locals>.<dictcomp>X  sO   € ð (ð (ð (áˆF�IØ�;Š;‰=Œ=�JÔ1Ò1Ð1ð 	×Ò tÐÑ,Ô,¨ià1Ð1Ð1r#   rX   r   rF   ú4tuple[dict[str, DifferentiabilityInfo] | None, bool]c                ót  •— d| j         v r)| j                             ¦   «         t          j        k    rdS | j        ‰v r‰| j                 dfS | j                             d¬¦  «        }|‰v rt          | ¦  «        s
‰|         dfS d| j         v r[|‰v rW‰|         }t          d„ |                     ¦   «         D ¦   «         ¦  «        r J dt          | j        ¦  «        › d�¦   «         ‚|dfS t          | ¦  «        rA| j        ‰vsJ ‚t          | ‰‰¦  «        \  }}|€dS d	|i}|r|‰| j        <   |‰| j        <   ||fS dS )
NÚ	generatedr®   Trî   Fc              3  óR   K  — | ]"}t          d „ |j        D ¦   «         ¦  «        V — Œ#dS )c              3  óL   K  — | ]}d t          |j        j        ¦  «        v V — Œ dS )rJ   N)r   r   r9   )r}   Úinpts     r$   r~   zLmatch_differentiability_info.<locals>.find_info.<locals>.<genexpr>.<genexpr>{  s4   è è € ÐVÐV¸�F�c $¤+Ô"2Ñ3Ô3Ð3ÐVÐVÐVÐVÐVÐVr#   N)r‚   r>   r|   s     r$   r~   zBmatch_differentiability_info.<locals>.find_info.<locals>.<genexpr>z  sP   è è € ð ð àõ ÐVÐVÀÔ@UÐVÑVÔVÑVÔVðð ð ð ð ð r#   zzAttempted to convert a derivative formula for a mutable operator
 to be used by automatically by its functional variant ("zV").
 this is not currently supported (we'd need to fix up the formula in the codegen).r¦   )Útagsr:   rÃ   r   Úoutrò   r‰   r‚   rƒ   r   ræ   )	rX   Úf_sigrõ   rÕ   Úis_generatedÚdiff_info_dictré   r¨   rª   s	         €€€r$   Ú	find_infoz/match_differentiability_info.<locals>.find_info^  sÅ  ø€ ð ˜!œ&Ð Ð  Q¤V§[¢[¡]¤]µj´nÒ%DÐ%DØ�;ð Œ6Ð,Ð,Ð,Ø*¨1¬6Ô2°DÐ8Ð8ð ”× Ò ¨tÐ Ñ4Ô4ˆØÐ0Ð0Ð0½ÈÑ9KÔ9KÐ0Ø/°Ô6¸Ð=Ð=ð ˜!œ&Ð Ð  UÐ.NÐ%NÐ%NØ8¸Ô?ˆIåð ð à%×,Ò,Ñ.Ô.ðñ ô ñ ô ð Vð VðVå:=¸a¼f¹+¼+ðVð Vð VñVô Vð ð ˜eÐ#Ð#õ ˜1ÑÔð 	0Ø”6Ð!8Ð8Ð8Ð8Ð8Ý&@ØØ,Ø0ñ'ô 'Ñ#ˆI�|ð
 Ð Ø"�{à'¨Ð3ˆNØð FØ2@Ð'¨¬Ñ/Ø7EÐ,¨Q¬VÑ4Ø! <Ð/Ð/àˆ{r#   NrJ   Ústrides_or_errorz`Calling '.strides()' in the 'self' derivative formula of an in-place function is not supported: )r:   r^   rw   rR   r   r'   r   Úpostfixc                óf   ‡— dˆfd„}t          j        t          j        d‰› �¦  «        || ¦  «        S )NÚmúre.Match[str]rF   r   c                ób   •— |                       d¦  «        › d‰› |                       d¦  «        › �S )NrR   Úoriginal_selfrP   ©Úgroup)r  r  s    €r$   ÚreplzSmatch_differentiability_info.<locals>.replace_self_with_original_self.<locals>.replÒ  s0   ø€ Ø"#§'¢'¨!¡*¤*ÐPÐP¸7ÐPÀAÇGÂGÈAÁJÄJÐPÐPÐPr#   rJ   ©r  r  rF   r   )ra   Úsubr   rc   )r'   r  r  s    ` r$   Úreplace_self_with_original_selfzEmatch_differentiability_info.<locals>.replace_self_with_original_selfÑ  sQ   ø€ ðQð Qð Qð Qð Qð Qõ œ6¥+Ô"4Ð5E¸GÐ5EÐ5EÑ"FÔ"FÈÈgÑVÔVÐVr#   Úself_pzThe formula for "zš" is using the original value of self that is being modified inplace. This would lead to wrong forward gradients. Please use "result" in the formula only.r¾   r¿   r  r  c                ó\   — |                       d¦  «        › d|                       d¦  «        › �S )NrR   r  rP   r  )r  s    r$   r  z*match_differentiability_info.<locals>.replç  s*   € ØŸgšg a™jœjÐ<Ð<°·²¸±
´
Ð<Ð<Ð<r#   r¯   rI   Fzself_t.([\w]*)\((.*)\)rP   Úsr4   c                óR   — d}| D ]!}|dk    r|dz  }|dk    r dS |dk    r|dz  }Œ"dS )NrR   ú)r   Fú(Tr"   )r  ÚlevelÚchs      r$   Úcheck_parens_nest_level_gt_zerozEmatch_differentiability_info.<locals>.check_parens_nest_level_gt_zero	  sP   € Ø$%˜EØ&'ð /ð / Ø#%¨¢9 9Ø$)¨Q¡J EØ',°¢z zØ/4¨u¨uØ#%¨¢9 9Ø$)¨Q¡J EøØ#' 4r#   z"self_t_raw.defined() ? self_t_raw.z_(z) : z(self_t_raw.defined() ? self_t_raw.copy_(Úoriginal_self_pÚoriginal_self_trÀ   )rX   r   rF   rø   )r'   r   r  r   rF   r   r  )r  r   rF   r4   )rÂ   r:   rÃ   r   rž   rƒ   r<   r*   r+   r   rÊ   rv   r=   rH   r'   ra   rb   r   rc   rË   r9   r  r3   Ú	fullmatchr  r4   r0   r1   r2   )rç   ré   r  r¯   rX   rõ   Úis_exact_matchr^   rd   Úsaved_inputÚfw_derivative_dictÚkeyr=   Úfw_infor'   r  r  Úrequired_primalsÚis_single_method_on_self_tÚdirectly_do_inplaceÚop_nameÚbetween_parensÚmatchr  r5   r¨   rª   s    `                       @@r$   Úmatch_differentiability_infor(  J  s  øøø€ ð$ð $à!8×!>Ò!>Ñ!@Ô!@ð$ñ $ô $Ð ð
(ð (à!8×!>Ò!>Ñ!@Ô!@ð(ñ (ô (Ð$ð6ð 6ð 6ð 6ð 6ð 6ð 6ð 6ðp =?€FØð c
ñ c
ˆØ$- I¨a¡L¤LÑ!ˆ	�>ð Œ6�;Š;‰=Œ=�JÔ.Ò.Ð.°IÐ4IØ!×(Ò(Ñ*Ô*ð ð �Ø"&Ô"2ð ð �JØ Ô!5Ð5Ð5Ø+5Ô+Bð ð ˜KØ#5¸[Ô=MÐ#MÐ#MÐ#Mð!PØGHÄvð!Pð !Pñ $NÔ#MÐ#MÐ#Møðð ð 	Ø�MŠMÝ7Ø °dðñ ô ñô ð ð
 àEGÐØ"ŸšÑ*Ô*ð E	:ñ E	:‰IˆC�ØÔ+ð Ø*,Ð" 3Ñ'Øà"&Ô":Ðð Œv�{Š{‰}Œ}¥
Ô 2Ò2Ñ2õ* ˜Ô0Ñ1Ô1°QÒ6Ð6Ð6Ð6àÔ2°1Ô5�Ø!œ/�ðWð Wð Wð Wõ ”9�[Ô/°Ñ9Ô9¸7ÑCÔCð QØ%ð Qå*ðG°´´ð Gð Gð Gñô ð ð #BÐ"AÀ'È4Ñ"PÔ"P˜Ø"AÐ"AÀ'È4Ñ"PÔ"P˜ð=ð =ð =ð =õ œ&¥Ô!3°HÑ!=Ô!=¸tÀWÑMÔM�à#*Ô#AÐ Ý”9�[Ô/°Ñ9Ô9¸7ÑCÔCð à8HÐWÐ(¨9Ñ4Ð4Èið %ð &ð 0dð 27Ð.Ø*/Ð'Ø*.�GØ15�NÝœLÐ)BÀGÑLÔL�EØð Ø27·+²+¸a±.´.À%Ç+Â+ÈaÁ.Ä. ˜ð	(ð 	(ð 	(ð 	(ð 6UÐ5TØ*ñ6ô 6Ð2ð 7ÐO¸7ÀdÄiÒ;Oð ,ð +ð dØ&Ð2Ð2Ð2Ø-Ð9Ð9Ð9Ø"oÀwÐ"oÐ"oÐR`Ð"oÐ"oÐfmÐ"oÐ"o˜˜ð #dÈWÐ"cÐ"cÐZaÐ"cÐ"c˜å/3Ý”I�kÔ0Ð1BÑCÔCÀWÑMÔMñ0ô 0ð 0Uå�"œ)¥KÔ$6Ð7HÑ$IÔ$IÈ7ÑSÔSÑTÔTð -õ
 &Ø 'Ø"+Ø")Ô"3Ø07Ô0OØ/?Ø5QØ8FÐ4Fðñ ô ð
'Ð#ð ':Ð˜sÑ#Ñ#à�ŠÝ3Ø˜YÐ7Iðñ ô ñ	
ô 	
ð 	
ñ 	
ð €Mr#   r9   rp   r   c                óD   — |                      ¦   «         o|d u p| |j        vS r{   )rÐ   rC   )r9   rp   r^   s      r$   Úis_differentiabler*  ?  s1   € ð ×ÒÑ Ô ð Ø�ˆÐE˜ DÔ$EÐEðr#   r   úlist[DifferentiableOutput]c                ó°  ‡	— | j         }| j        r| j        |         nd Š	d„ t          t          j        |¦  «        |j         j        ¦  «        D ¦   «         }‰	r‰	j        nd }|�»t          |¦  «        t          |¦  «        k    r0t          dt          |¦  «        › dt          |¦  «        › d�¦  «        ‚g }d|v r6|j          	                    ¦   «         t          j        k    rt          d¦  «        ‚t          ||¦  «        D ]\  }}|r|                     |¦  «         Œ|S t          t          ˆ	fd„|¦  «        ¦  «        }t          ‰	¦  «        r
|d d…         S |S )	Nc           
     óŽ   — g | ]B\  }}t          ||j        t          j        |d ¬¦  «                             ¦   «         ¬¦  «        ‘ŒCS )T)Úsymint)r9   rp   rq   )rt   rp   r   Úreturn_typerq   )r}   r9   Úrets      r$   r¸   z.gen_differentiable_outputs.<locals>.<listcomp>L  sc   € ð +ð +ð +ñ ˆD�#õ 	ØØ”Ý”_ S°Ð6Ñ6Ô6×?Ò?ÑAÔAð	
ñ 	
ô 	
ð+ð +ð +r#   z(The length of output_differentiability (z)), does not match the number of outputs (z).FzXoutput_differentiability=False for inplace operation (version_counter won't get updated)c                ó:   •— t          | j        | j        ‰¦  «        S r{   )r*  r9   rp   )Úrr^   s    €r$   ú<lambda>z,gen_differentiable_outputs.<locals>.<lambda>e  s   ø€ Õ*¨1¬6°1´6¸4Ñ@Ô@€ r#   rR   )r:   r^   r¤   r   Úreturn_namesÚreturnsrD   rH   rË   rÃ   r   rž   rÊ   rÏ   Úfilterrm   )
rx   r   rX   ÚoutputsrD   Údifferentiable_outputsÚdifferentiableÚoutputÚ candidate_differentiable_outputsr^   s
            @r$   Úgen_differentiable_outputsr<  G  s¯  ø€ ð 	Œ€AØœ7Ð,ˆ2Œ7�3Œ<ˆ<¨€Dð+ð +õ �SÔ-¨aÑ0Ô0°!´&´.ÑAÔAð+ñ +ô +€Gð AEÐN˜tÔ<Ð<È$ÐØÐ+ÝÐ'Ñ(Ô(­C°©L¬LÒ8Ð8ÝðJ½3Ð?WÑ;XÔ;Xð Jð JÝ9<¸W¹¼ðJð Jð Jñô ð ð >@ÐØÐ,Ð,Ð,°´·²±´Å*ÔBTÒ1TÐ1TÝØjñô ð õ '*Ð*BÀGÑ&LÔ&Lð 	6ð 	6Ñ"ˆN˜FØð 6Ø&×-Ò-¨fÑ5Ô5Ð5øØ%Ð%Ý'+ÝÐ@Ð@Ð@Ð@À'ÑJÔJñ(ô (Ð$õ ˜ÑÔð 0Ø/°°°Ô3Ð3à/Ð/r#   )r^   rM   r_   r   rF   r4   )r^   rM   rF   r4   )rx   rv   rF   r   )rX   r   rF   r4   )rX   r   r–   r   rF   r4   )r¦   )
r§   r   r¨   r©   rª   r©   r«   r   rF   r¬   )rç   rè   ré   r©   rF   rê   )r9   r   rp   r   r^   rM   rF   r4   )rx   rv   r   r   rF   r+  )2Ú
__future__r   ra   Údataclassesr   Útypingr   r   Útorchgenr   Útorchgen.apir   Útorchgen.api.typesr	   r
   r   r   Útorchgen.modelr   r   r   r   r   r   r   r   Útorchgen.utilsr   Úcollections.abcr   r   r&   r0   r8   re   rj   rm   ro   rt   rv   r„   r‰   rŸ   rÒ   r    r¥   ræ   r(  r*  r<  r"   r#   r$   ú<module>rF     s(  ðØ "Ð "Ð "Ð "Ð "Ð "à 	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !Ø &Ð &Ð &Ð &Ð &Ð &Ð &Ð &à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JÐ Jð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 'Ð &Ð &Ð &Ð &Ð &ð ð )Ø(Ð(Ð(Ð(Ð(Ð(ð €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð6 €�$ÐÑÔð&ð &ð &ð &ð &ñ &ô &ñ Ôð&ð< €�$ÐÑÔðh
ð h
ð h
ð h
ð h
ñ h
ô h
ñ Ôðh
ðVð ð ð ð0ð 0ð 0ð 0ð$ð $ð $ð $ð €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð  €�$ÐÑÔðð ð ð ð ñ ô ñ Ôðð €�$ÐÑÔðBð Bð Bð Bð Bñ Bô Bñ ÔðBð.ð .ð .ð .ðb9ð 9ð 9ð 9ð .Ð.Ð ð!ð !ð !Ð ð	ð 	ð 	Ð ðð ð ð ðD "ðUð Uð Uð Uð Uðprð rð rð rðjð ð ð ð =Fð#0ð #0ð #0ð #0ð #0ð #0ð #0r#   