§
    �Štjòš  ã                  óÊ  — 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__© ó    úS/var/www/html/CA-Chatbot/venv/lib/python3.11/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          ¦  «        se|"j        tc          td          j3        ¦  «        k    r t          | j        j        ¦  «        th          v s#tk          | 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        |!|<   Œ�Œã|                      tm          |tS          |¦  «        tS          |¦  «        tS          | ¦  «        tS          |!¦  «        |j7        |j8        ¬¦  «        ¦  «         �Œ
ts          | j        j        j        j:        | 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_overloadÚAssertionErrorr0   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Ðà&Ô:ð J
ñ J
ˆÝ# MÔ$;Ñ<Ô<ˆ	Ý $ ]Ô%<Ñ =Ô =ˆ	Ø-/ÐØ,.ÐØÔ0Ð<Ý&*¨=Ô+PÑ&QÔ&QÐ#ØÔ/ð 	PÝ%)¨-Ô*NÑ%OÔ%OÐ"Ø(Ô0Ðð Ð'Ð'Ð'Ø,Ô4×<Ò<¸XÀ{ÑSÔSÐå$'ØÔ!Ô+Ô8ØÔÔ#Ô-Ô:ñ%
ô %
ð 0	Añ 0	AÑ ˆK˜õ ˜;Ô+­XÑ6Ô6ðà#Ô(×7Ò7Ñ9Ô9ðð
 $4×#;Ò#;Ø”L +Ô"2°UÑ":ñ$ô $Ð Ð ð Ô!×0Ò0Ñ2Ô2ð õ ˜{Ô/µÑ:Ô:ð
ð $Ô(­HµV´]Ñ,CÔ,CÒCÐCÝÐ 0Ô 5Ô :Ñ;Ô;Ý8ð9ð 9õ )Ø+Ô0Ô5ÐKÐK¸Ô9IÐKÐKñô ð ð +ð 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 �]x} ||¦  «        \  }}|j                             ¦   «         t          j        k    rV|�T|                     ¦   «         D ]?}|j        D ]5}d	|j        v r*|j        D ]"}	d
|	j	        v rt          d|j        › �¦  «        ‚Œ#Œ6Œ@|s&|                     t          |dd¬¦  «        ¦  «         Œ¶i }
|                      ¦   «         D �]…\  }}|j        sg |
|<   Œ|j        }|j                             ¦   «         t          j        k    �r>t          |j        ¦  «        dk    r$t          dt          |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 ¦  «        }}d0d#„} ||¦  «        }|o
||j        k    }|r.|€t          d$¦  «        ‚|€t          d%¦  «        ‚d&|› d'|› d(|› �}nd)|› d(|› �}t5          t!          j        t%          j        d*¦  «        |¦  «        ¦  «        p3t5          t!          j        t%          j        d+¦  «        |¦  «        ¦  «        }t7          |d|j        |j        ||| ¬,¦  «        g}||
|<   �Œ‡|                     t          |||
¬¦  «        ¦  «         �Œz|S )1zÄ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>Y  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>^  sO   € ð (ð (ð (áˆF�IØ�;Š;‰=Œ=�JÔ1Ò1Ð1ð 	×Ò tÐÑ,Ô,¨ià1Ð1Ð1r#   rX   r   rF   ú4tuple[dict[str, DifferentiabilityInfo] | None, bool]c                ó´  •— 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 r\‰|         }t          d„ |                     ¦   «         D ¦   «         ¦  «        r%t          dt          | j        ¦  «        › d�¦  «        ‚|dfS t          | ¦  «        r\| j        ‰v rt          d	| j        j        › d
�¦  «        ‚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}   Úinputs     r$   r~   zLmatch_differentiability_info.<locals>.find_info.<locals>.<genexpr>.<genexpr>�  s4   è è € ÐXÐX¸�F�c %¤,Ô"3Ñ4Ô4Ð4ÐXÐXÐXÐXÐXÐXr#   N)r‚   r>   r|   s     r$   r~   zBmatch_differentiability_info.<locals>.find_info.<locals>.<genexpr>€  sP   è è € ð ð àõ ÐXÐXÀ$ÔBWÐXÑXÔXÑXÔXðð ð ð ð ð r#   zvAttempted to convert a derivative formula for a mutable operator to be used automatically by its functional variant ("zU"). This is not currently supported (we'd need to fix up the formula in the codegen).zForeach function z# already has differentiability infor¦   )Útagsr:   rÃ   r   Úoutró   r‰   r‚   rƒ   rÓ   r   r9   rç   )	rX   Úf_sigrö   rÖ   Úis_generatedÚdiff_info_dictrê   r¨   rª   s	         €€€r$   Ú	find_infoz/match_differentiability_info.<locals>.find_infod  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åð ð à%×,Ò,Ñ.Ô.ðñ ô ñ ô ð õ %ðhÝLOÐPQÔPVÉKÌKðhð hð hñô ð ð
 ˜eÐ#Ð#õ ˜1ÑÔð 	0ØŒvÐ0Ð0Ð0Ý$ØX¨¬¬ÐXÐXÐXñô ð õ 'AØØ,Ø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   z-Only single output inplace should exist, got 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$op_name must be non-None for inplacez+between_parens must be non-None for inplacez"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Ó   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)  P  sW  øøø€ ð$ð $à!8×!>Ò!>Ñ!@Ô!@ð$ñ $ô $Ð ð
(ð (à!8×!>Ò!>Ñ!@Ô!@ð(ñ (ô (Ð$ð;ð ;ð ;ð ;ð ;ð ;ð ;ð ;ðz =?€FØð j
ñ j
ˆØ$- I¨a¡L¤LÑ!ˆ	�>ð Œ6�;Š;‰=Œ=�JÔ.Ò.Ð.°IÐ4IØ!×(Ò(Ñ*Ô*ð "ð "�Ø"&Ô"2ð "ð "�JØ Ô!5Ð5Ð5Ø+5Ô+Bð "ð "˜KØ1°[Ô5EÐEÐEÝ&4ð%TØKLÌ6ð%Tð %Tñ'"ô '"ð !"ð  Føð"ð ð 	Ø�MŠMÝ7Ø °dðñ ô ñô ð ð
 àEGÐØ"ŸšÑ*Ô*ð K	:ñ K	:‰IˆC�ØÔ+ð Ø*,Ð" 3Ñ'Øà"&Ô":Ðð Œv�{Š{‰}Œ}¥
Ô 2Ò2Ñ2õ( �tÔ/Ñ0Ô0°AÒ5Ð5Ý(ð?Ý" 4Ô#;Ñ<Ô<ð?ð ?ñô ð ð Ô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ð %ð &ð 4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Ø"˜?Ý"0Ð1WÑ"XÔ"XÐXØ)Ð1Ý"0Ø Mñ#ô #ð ð #pÀ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+  Q  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>^  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>w  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=  Y  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>rG     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 "ð[ð [ð [ð [ð [ð|~ð ~ð ~ð ~ðBð ð ð ð =Fð#0ð #0ð #0ð #0ð #0ð #0ð #0r#   