Ë
    ùÿæiòš  ã                  óŽ  — 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!d(d„Z"d)d„Z#d)d„Z$ ed¬«       G d„ d«      «       Z% ed¬«       G d„ d«      «       Z& ed¬«       G d„ d«      «       Z'd*d„Z(d+d„Z)d hZ*h d!£Z+h d"£Z,	 	 	 	 	 	 d,d#„Z-	 d-	 	 	 	 	 	 	 	 	 d.d$„Z.	 	 	 	 	 	 d/d%„Z/	 	 	 	 	 	 	 	 d0d&„Z0	 d-	 	 	 	 	 d1d'„Z1y)2é    )Ú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<   y)ÚSavedAttributer   ÚnctypeÚstrÚexprN©Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    új/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/torchgen/api/autograd.pyr   r      s   … ð Óð „Ir#   r   c                  óJ   — e Zd ZU ded<   ded<   ded<   ded<   ded<   d	ed
<   y)Ú
Derivativer   ÚformulaÚoriginal_formulaútuple[str, ...]Ú	var_namesztuple[SavedAttribute, ...]Úsaved_inputsÚsaved_outputsúset[str]Únamed_gradientsNr   r"   r#   r$   r&   r&   +   s1   … ð ƒLð Óð Óð -Ó,ð .Ó-ð Ôr#   r&   c                  óT   — 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<   y)Ú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   s9   … ð
 ƒLð Óð  Óð 4Ó3ð 3Ó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y)Ú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_conditionsc                ó2   — t        | j                  «      dkD  S )Nr   )ÚlenrB   ©Úselfs    r$   Úhas_derivativesz%DifferentiabilityInfo.has_derivatives¨   s   € ä�4×-Ñ-Ó.°Ñ2Ð2r#   c                óÚ  — |j                   €y |j                   }| j                  j                  dd¬«      }|d   › d�dj                  |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   )rI   ÚgÚ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ê   € ð �;‰;ÐØØ�K‰Kˆà#Ÿy™yŸ™¨s¸Q˜Ó?Ðà0°Ñ3Ð4°FÐ;¸c¿h¹hØ   Ð$ó?
ñ 
ˆð %)§G¡G O™D¸D¿G¹G¸9ÀEÐ9JÐä$àØØ à×(Ñ(Ø $× 8Ñ 8Ø!×2Ñ2Ø"×4Ñ4Ø&*×&DÑ&DØ!%×!:Ñ!:Ø"&×"<Ñ"<Ø)-×)JÑ)JØ%)×%BÑ%BØ04×0XÑ0Xô
ð 	
r#   N)Úreturnr4   )rU   r   r[   úDifferentiabilityInfo | None)r   r   r    r!   ÚpropertyrJ   rZ   r"   r#   r$   r8   r8   f   s�   … ð ƒIð Óð
 	ƒNð &Ó%ð 5Ó4ð /Ó.ð 0Ó/ð  -Ó,ð #Ó"ð
 -Ó,ð #0Ó/ð 0Ó/ð *:Ó9àò3ó ð3ð
Ø)ð
à	%ô
r#   r8   c                óš   — | €y| j                   D ]9  }|j                  }t        j                  t	        j
                  |«      |«      sŒ9 y y)NFT)r<   r'   ÚreÚsearchr   Úformat)ÚinfoÚidentÚ
derivativer'   s       r$   Ú
uses_identre   Ò   sF   € Ø€|ØØ×&Ô&ˆ
Ø×$Ñ$ˆÜ�9‰9”[×'Ñ'¨Ó.°Õ8Ùð 'ð r#   c                ó   — t        | d«      S )NÚretain_variables©re   ©rb   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<   y)ÚDifferentiableInputr   r9   r   ÚtypeÚcpp_typeNr   r"   r#   r$   ro   ro   é   ó   … à
ƒIØ
ƒJð „Mr#   ro   c                  ó,   — e Zd ZU ded<   ded<   ded<   y)Ú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<   y)Ú'NativeFunctionWithDifferentiabilityInfor   r:   z'dict[str, DifferentiabilityInfo] | Nonerb   z-dict[str, Sequence[ForwardDerivative]] | NoneÚfw_derivativesNr   r"   r#   r$   rv   rv     s   … à
ÓØ
1Ó1ØAÔAr#   rv   c                óž   — | j                   j                  s6| j                  �+t        d„ | j                  j	                  «       D «       «      ryy)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.)
    c              3  ó4   K  — | ]  }|j                   –— Œ y ­w©N)rJ   ©Ú.0rb   s     r$   Ú	<genexpr>z$dispatch_strategy.<locals>.<genexpr>"  s   è ø€ Ð#VÑEU¸T D×$8Õ$8ÑEUùs   ‚Úuse_derivedÚuse_type)r:   Úis_abstractrb   ÚanyÚvalues)Úfns    r$   Údispatch_strategyr„     s=   € ð, 
‡w�w×ÒØ
�‰Ð¤Ñ#VÀRÇWÁWÇ^Á^ÔEUÓ#VÔ Vð" ð r#   c                ót   — | j                   j                  j                  j                  j                  d«      S )NÚ	_foreach_)r:   r9   ÚbaseÚ
startswith)rV   s    r$   Úis_foreach_funcr‰   <  s'   € Ø�6‰6�;‰;×Ñ× Ñ ×+Ñ+¨KÓ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_.ScalarListc                óÖ  — | j                   j                  j                  j                  j                  d«      d   |j                  j                  j                  k(  x�r
 |j                  j                  j                   xs% t        | j                   j                  «      t        v xrÀ t        | j                   j                  «      t        v xsI t        | j                   j                  j                  «      t        |j                  j                  «      k(  xrN t        d„ t        | j                   j                  j                  |j                  j                  «      D «       «      S )Nr†   éÿÿÿÿc              3  ó€   K  — | ]6  \  }}|j                   |j                   t        |j                   d d«      fv –— Œ8 y­w)ÚelemN)rp   Úgetattr)r|   ÚargÚref_args      r$   r}   z+is_reference_for_foreach.<locals>.<genexpr>g  s?   è ø€ ð 
ñ!‘��Wð �L‰L˜SŸX™X¤w¨s¯x©x¸ÀÓ'FÐGÔGñ!ùs   ‚<>)r:   r9   r‡   rS   Úinplacer   Ú_foreach_with_inplace_refÚ_skip_argument_len_checkrG   Ú	argumentsÚflat_non_outÚallÚzip)rV   Úfunction_schemas     r$   Úis_reference_for_foreachr¥   X  s  € ð
 	
�‰�‰×Ñ×Ñ×#Ñ# KÓ0°Ñ4¸×8LÑ8L×8QÑ8Q×8VÑ8VÑVó 	
à×$Ñ$×)Ñ)×1Ñ1Ð1ò =Ü�1—6‘6—;‘;ÓÔ#<Ð<ò	
ô �—‘—‘ÓÔ 8Ð8ò ;Ü�1—6‘6×#Ñ#×0Ñ0Ó1Ü�?×,Ñ,×9Ñ9Ó:ñ;ò	
ô ñ 
ä #Ø—‘× Ñ ×-Ñ-Ø×)Ñ)×6Ñ6ô!ó
ó 
ðr#   c                óò  — d}|j                  «       D ]  \  }}t        | |«      sŒ||   }|€Œ n |€~| j                  j                  «       t        j
                  k(  rSt        | j                  j                  «      t        v r.|j                  «       D ]  \  }}t        | |«      sŒ||   }|€Œ n |€y| j                  j                  «       t        j
                  k(  r|dfS i i }}t        t        | j                  j                  j                  j                  j                  «      «      D ]0  \  }	\  }
}|
j                  ||j                  <   |
||
j                  <   Œ2 g g g }}}g }t        |j                  «      D �]€  \  }	}|j                  j                  dd«      j                  dd«      }g g }}t!        j"                  | j$                  | j&                  ¬«      5  |j(                  D ]ÿ  }|j*                  j-                  d	«      d
   }||   }t/        ||   j0                  t2        «      r|dz   }n|}|j*                  j                  ||«      }|j                  t5        t        |j6                  j                  «      |«      }t9        j:                  ||   |¬«      }t=        |j                  |j0                  j?                  «       «      }|jA                  tC        ||¬«      «       �Œ |jD                  D ]Z  }|j6                  j                  dk(  r5|jA                  tC        t=        dtG        tH        «      ¬«      d¬«      «       ŒQtK        d«      ‚ 	 ddd«       |jL                  D �cg c]  }||   ‘Œ	 }}|jO                  |«       |jO                  |«       |jO                  |«       tQ        ||j                  tS        |«      tS        |«      tS        |«      tU        «       ¬«      }|jA                  |«       �Œƒ t!        j"                  | j$                  | j&                  ¬«      5  | j                  j                  j                  D �
cg c]H  }
|
j                  |v r8tW        |
j                  t9        j:                  |
|
j                  ¬«      |
d¬«      ‘ŒJ }}
ddd«       g } |jX                  D �]�  }!t[        |!jL                  «      }t[        |!j\                  «      }"g }#g }$|!j^                  �t[        |!j^                  «      }#|!j`                  rt[        |!j`                  «      }$|!j                  }d|v r|!j                  j                  dd«      }t        | j                  j                  j                  |j                  j                  j                  j                  «      D �]3  \  }%}t/        |%j0                  t2        «      rE|%j0                  jc                  «       s+|j                  |j                  |%j                  dz   «      }�n)|%j0                  jc                  «       rÐt/        |%j0                  t2        «      sy|%j0                  te        tf        jh                  «      k(  r%t        | j                  j                  «      tj        v s.tm        | j                  j                  › d|%j0                  › �«      ‚dD ]7  }&|j                  |&z   }'|'|v sŒ|%j                  |&z   }|j                  |'|«      }Œ9 n?|%j                  |j                  k7  r&|j                  |j                  |%j                  «      }t        |«      D ]3  \  }	}(|(|j                  k(  sŒ|%j                  ||	<   |%j0                  |"|	<   Œ5 t        |#«      D ]$  \  }	}(|(|j                  k(  sŒ|%j                  |#|	<   Œ& t        |$«      D ]$  \  }	}(|(|j                  k(  sŒ|%j                  |$|	<   Œ& �Œ6 | jA                  to        |tS        |«      tS        |"«      tS        |#«      tS        |$«      |!jp                  |!jr                  ¬«      «       �Œ„ tu        | j                  j                  j                  jv                  | d|jx                  › | j                  j                  jz                  › �|| tS        tU        |«      «      tS        tU        |«      «      dtU        «       g dd¬«      dfS # 1 sw Y   �Œ~xY wc c}w c c}
w # 1 sw Y   �ŒOxY w)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_listsrL   r   z[i])Úbinds)r   r   )r9   rp   Ú )r'   r(   r*   r+   r,   r.   )r9   r   ÚargumentÚdefaultz, )Ú_pÚ_t©r'   r*   r1   r2   r3   r5   r6   ÚForeachr"   rQ   T)>Úitemsr¥   r:   Úkindr   r�   r   r9   rž   Ú	enumerater£   r    r¡   r<   r'   Úreplacer   Úparametrizer©   Úpart_of_structured_groupr+   r   rS   Ú
isinstancerp   r   r   r   r   Úargument_typer   Úremove_const_refÚappendr   r,   r	   r   ÚRuntimeErrorr*   Úextendr&   ÚtupleÚsetr
   r=   Úlistr1   r2   r3   Úis_tensor_liker   r   ÚTensorÚ_foreach_with_tensor_overloadÚAssertionErrorr0   r5   r6   r8   r‡   r;   Úoverload_name))Úforeach_functionÚfunctional_info_by_signatureÚ non_functional_info_by_signatureÚdispatch_keyÚref_diff_infor¤   Ú	diff_infoÚmap_refarg2foreachargÚmap_name2argÚir›   rœ   r>   r?   Úall_var_namesÚmodified_derivative_formulasrd   Úmodified_formular+   r,   Ú	ref_inputÚref_input_jit_nameÚmapped_nameÚmapped_exprÚnew_exprr   Úcanonical_nctypeÚ
ref_outputÚvarr*   Úmodified_derivativerB   r=   Úfw_derivativer1   r2   r3   Úforeach_argÚsuffixÚ	curr_exprr9   s)                                            r$   Úgen_foreach_derivativeinforà   r  sU  € ð 37€Mà&B×&HÑ&HÖ&JÑ"ˆ˜Ü'Ð(8¸/ÔJØØ! ,Ñ/ˆØÑ$Ùð 'Kð 	ÐØ×!Ñ!×&Ñ&Ó(¬J×,>Ñ,>Ò>ÜÐ ×%Ñ%×*Ñ*Ó+Ô/HÑHà*J×*PÑ*PÖ*RÑ&ˆO˜YÜ+Ð,<¸oÔNØØ% lÑ3ˆMØÑ(Ùð +Sð ÐØð ×Ñ×!Ñ!Ó#¤z×'9Ñ'9Ò9Ø˜eÐ#Ð#à*,¨b˜<ÐÜ&ÜØ×!Ñ!×+Ñ+×8Ñ8Ø×%Ñ%×2Ñ2ó	
öÑˆ‰>ˆC�ð /2¯h©hÐ˜gŸl™lÑ+Ø!$ˆ�S—X‘XÒðð :<¸RÀ¨Ð'ÐØ#%Ð Ü" =×#<Ñ#<×=‰ˆˆ:Ø%×-Ñ-×5Ñ5°f¸jÓI×QÑQØ�kó
Ðð ')¨"�mˆä×ÑØ.>×.`Ñ.`Ø*:×*SÑ*Sö
ð (×4Ô4�	Ø%.§^¡^×%9Ñ%9¸#Ó%>¸qÑ%AÐ"Ø3Ð4FÑG�Ü˜l¨;Ñ7×<Ñ<¼hÔGØ"-°Ñ"5‘Kà"-�KØ$Ÿ>™>×1Ñ1Ð2DÀkÓR�Ø#3×#;Ñ#;Üœ˜i×.Ñ.×3Ñ3Ó4°hó$Ð ô ×*Ñ*¨<¸Ñ+DÈKÔX�Ü#-Ø—K‘K §¡×!=Ñ!=Ó!?ó$Ð ð ×#Ñ#Ü"Ð*:ÀÔMöð! 5ð& )×6Ô6�
Ø×$Ñ$×)Ñ)¨XÒ5Ø!×(Ñ(Ü&Ü#-Ø%-´I¼kÓ4Jô$ð "*ô	õô ' rÓ*Ð*ñ 7÷/
ðF <F×;OÒ;OÓPÑ;O°CÐ*¨3Ó/Ð;Oˆ	ÐPØ×Ñ˜YÔ'Ø×Ñ Ô-Ø× Ñ  Ô/Ü(Ø$Ø'×/Ñ/Ü˜IÓ&Ü˜|Ó,Ü Ó.Ü›Eô
Ðð 	%×+Ñ+Ð,?Ö@ðk >ôn 
×	Ñ	Ø*:×*\Ñ*\Ø&6×&OÑ&Oö
ð (×,Ñ,×6Ñ6×CÒCó	!
ñ D�Ø�x‰x˜=Ñ(ô Ø—X‘XÜ×(Ñ(¨°C·H±HÔ=ØØö	ð Dð 	ð 	!
÷	
ð 46Ðà&×:Õ:ˆÜ# M×$;Ñ$;Ó<ˆ	Ü $ ]×%<Ñ%<Ó =ˆ	Ø-/ÐØ,.ÐØ×0Ñ0Ð<Ü&*¨=×+PÑ+PÓ&QÐ#Ø×/Ò/Ü%)¨-×*NÑ*NÓ%OÐ"Ø(×0Ñ0Ðð Ð'Ñ'Ø,×4Ñ4×<Ñ<¸XÀ{ÓSÐä$'Ø×!Ñ!×+Ñ+×8Ñ8Ø×Ñ×#Ñ#×-Ñ-×:Ñ:÷%
Ñ ˆK˜ô ˜;×+Ñ+¬XÔ6Ø#×(Ñ(×7Ñ7Ô9ð $4×#;Ñ#;Ø—L‘L +×"2Ñ"2°UÑ":ó$Ò ð ×!Ñ!×0Ñ0Ô2ô ˜{×/Ñ/´Ô:à#×(Ñ(¬H´V·]±]Ó,CÒCÜÐ 0× 5Ñ 5× :Ñ :Ó;Ü8ñ9ô )Ø+×0Ñ0×5Ñ5Ð6°b¸×9IÑ9IÐ8JÐKóð ó +�FØ '§¡¨vÑ 5�IØ Ð$4Ò4Ø#.×#3Ñ#3°fÑ#<˜Ø+;×+CÑ+CÀIÈxÓ+XÑ(ñ	 +ð ×#Ñ# w§|¡|Ò3Ø'7×'?Ñ'?ØŸ™ k×&6Ñ&6ó(Ð$ô
 % YÖ/‘��4Ø˜7Ÿ<™<Ó'Ø#.×#3Ñ#3�I˜a‘LØ#.×#3Ñ#3�I˜a’Lð 0ô %Ð%<Ö=‘��4Ø˜7Ÿ<™<Ó'Ø1<×1AÑ1AÐ+¨AÒ.ð >ô %Ð%;Ö<‘��4Ø˜7Ÿ<™<Ó'Ø0;×0@Ñ0@Ð*¨1Ò-ò =ð]%
ðb 	×"Ñ"ÜØ(Ü 	Ó*Ü 	Ó*Ü(-Ð.EÓ(FÜ',Ð-CÓ'DØ-:×-WÑ-WØ,9×,UÑ,Uôö
	
ðA ;ôZ 	Ø!×&Ñ&×+Ñ+×0Ñ0×5Ñ5Ø!Ø˜×)Ñ)Ð*Ð+;×+@Ñ+@×+EÑ+E×+SÑ+SÐ*TÐUØ4Ø 3Ü"¤3Ð'7Ó#8Ó9Ü#¤CÐ(9Ó$:Ó;Ø&(Ü!$£Ø"7Ø)+Ø%)Ø04ô	
ð 	ð!ð ÷]
ñ 
üòF Qùò$	!
÷	
ñ 
ús2   Ç E8cÍ/c"Ð-#c,ÑAc'Òc,ãc	ã'c,ã,c6c                óÈ  ‡‡‡— ‰j                  «       D ��ci c]9  \  }}|j                  «       t        j                  k(  r|j	                  d¬«      |“Œ; c}}Š‰j                  «       D ��ci c]9  \  }}|j                  «       t        j                  k7  r|j	                  d¬«      |“Œ; c}}Š	 	 	 	 d"ˆˆˆfd„}g }| D �]”  } ||«      \  }}|j
                  j                  «       t        j                  k(  rn|�l|j                  «       D ]Y  }|j                  D ]H  }	d|	j                  v sŒ|	j                  D ](  }
d|
j                  v sŒt        d|j
                  › �«      ‚ ŒJ Œ[ |s|j                  t        |dd¬«      «       ŒÈi }|j                  «       D �]š  \  }}|j                  sg ||<   Œ|j                  }|j
                  j                  «       t        j                  k(  �rEt!        |j                  «      d	k7  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%        j0                  t)        j*                  d«      ||«      }|j2                  }t%        j&                  t)        j*                  d«      |«      r	|r|dz   nd}|s‘d}d}d}d}t%        j4                  d|«      }|rA|j7                  d	«      |j7                  d«      }}d%d„} ||«      }|xr ||j.                  k(  }|r&|€t        d«      ‚|€t        d«      ‚d|› d|› d|› �}nd|› d|› �}t9        t%        j&                  t)        j*                  d«      |«      «      xs2 t9        t%        j&                  t)        j*                  d «      |«      «      }t;        |d|j<                  |j>                  ||| ¬!«      g}|||<   �Œ� |j                  t        |||¬«      «       �Œ— |S c c}}w c c}}w )&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.
    T©Ústrip_defaultc                óÄ  •— d| j                   v r,| j                  j                  «       t        j                  k(  ry| j                  ‰v r‰| j                     dfS | j                  j                  d¬«      }|‰v rt        | «      s‰|   dfS d| j                   v rO|‰v rK‰|   }t        d„ |j                  «       D «       «      r"t        dt        | j                  «      › d�«      ‚|dfS t        | «      rl| j                  ‰v r#t        d	| j                  j                  › d
�«      ‚t        | ‰‰«      \  }}|€yd|i}|r|‰| j                  <   |‰| j                  <   ||fS y)NÚ	generatedr§   Trâ   Fc              3  óT   K  — | ]   }t        d „ |j                  D «       «      –— Œ" y­w)c              3  ó^   K  — | ]%  }d t        |j                  j                  «      v –— Œ' y­w)rI   N)r   r   r9   )r|   Úinputs     r$   r}   zLmatch_differentiability_info.<locals>.find_info.<locals>.<genexpr>.<genexpr>�  s'   è ø€ ÐXÑBW¸�Fœc %§,¡,×"3Ñ"3Ó4Ô4ÑBWùs   ‚+-N)r�   r>   r{   s     r$   r}   zBmatch_differentiability_info.<locals>.find_info.<locals>.<genexpr>€  s)   è ø€ ð á.�Dô ÑXÀ$×BWÒBWÓX×XÙ.ùs   ‚&(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 infoÚDefault)Útagsr:   r´   r   ÚoutÚ	signaturer‰   r�   r‚   rÅ   r   r9   rà   )	rV   Úf_sigÚ	info_dictrÌ   Úis_generatedÚdiff_info_dictÚdifferentiability_infosrÈ   rÉ   s	         €€€r$   Ú	find_infoz/match_differentiability_info.<locals>.find_infod  sš  ø€ ð ˜!Ÿ&™&Ñ  Q§V¡V§[¡[£]´j·n±nÒ%DØð �6‰6Ð,Ñ,Ø*¨1¯6©6Ñ2°DÐ8Ð8ð —‘× Ñ ¨tÐ Ó4ˆØÐ0Ñ0¼ÈÔ9KØ/°Ñ6¸Ð=Ð=ð ˜!Ÿ&™&Ñ  UÐ.NÑ%NØ8¸Ñ?ˆIäñ à%×,Ñ,Ô.óô ô %ðLÜLOÐPQ×PVÑPVËKÈ=ð Yhðhóð ð
 ˜eÐ#Ð#ô ˜1ÔØ�v‰vÐ0Ñ0Ü$Ø'¨¯©¯© }Ð4WÐXóð ô 'AØØ,Ø0ó'Ñ#ˆI�|ð
 Ð Ø"à'¨Ð3ˆNÙØ2@Ð'¨¯©Ñ/Ø7EÐ,¨Q¯V©VÑ4Ø! <Ð/Ð/àr#   NrI   Ústrides_or_errorz`Calling '.strides()' in the 'self' derivative formula of an in-place function is not supported: )r:   rb   rw   rO   z-Only single output inplace should exist, got r   c                ój   ‡— dˆfd„}t        j                  t        j                  d‰› �«      || «      S )Nc                óR   •— | j                  d«      › d‰› | j                  d«      › �S )NrO   Úoriginal_selfrM   ©Úgroup)ÚmÚpostfixs    €r$   ÚreplzSmatch_differentiability_info.<locals>.replace_self_with_original_self.<locals>.replà  s(   ø€ Ø"#§'¡'¨!£* ¨]¸7¸)ÀAÇGÁGÈAÃJÀ<ÐPÐPr#   rI   ©rù   zre.Match[str]r[   r   )r_   Úsubr   ra   )r'   rú   rû   s    ` r$   Úreplace_self_with_original_selfzEmatch_differentiability_info.<locals>.replace_self_with_original_selfß  s0   ø€ õQô Ÿ6™6¤+×"4Ñ"4°t¸G¸9Ð5EÓ"FÈÈgÓ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°   c                óL   — | j                  d«      › d| j                  d«      › �S )NrO   rÿ   rM   r÷   )rù   s    r$   rû   z*match_differentiability_info.<locals>.replõ  s#   € ØŸg™g a›j˜\¨°·±¸³
¨|Ð<Ð<r#   r¨   rH   Fzself_t.([\w]*)\((.*)\)rM   c                óN   — d}| D ]  }|dk(  r|dz  }|dk(  r y|dk(  sŒ|dz  }Œ  y)NrO   Ú)r   FÚ(Tr"   )ÚsÚlevelÚchs      r$   Úcheck_parens_nest_level_gt_zerozEmatch_differentiability_info.<locals>.check_parens_nest_level_gt_zero  s@   € Ø$%˜EÛ&' Ø#%¨¢9Ø$)¨Q¡J EØ',°¢zÙ/4Ø#%¨£9Ø$)¨Q¡J¡Eð '(ð $(r#   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±   )rV   r   r[   z4tuple[dict[str, DifferentiabilityInfo] | None, bool])r'   r   rú   r   r[   r   rü   )r  r   r[   r4   ) r³   r´   r   Ú
functionalrì   r:   r�   r‚   r<   r*   r+   r   rÅ   r¼   rv   r=   rG   r'   r_   r`   r   ra   r½   r9   rý   r3   Ú	fullmatchrø   r4   r0   r1   r2   )Únative_functionsrñ   Úschemarî   rò   r¨   rV   Úis_exact_matchrb   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  s©  ú€ ð "9×!>Ñ!>Ô!@ô$á!@ÑˆF�IØ�;‰;‹=œJ×1Ñ1Ò1ð 	×Ñ tÐÓ,¨iÑ7Ø!@ò$Ð ð "9×!>Ñ!>Ô!@ô(á!@ÑˆF�IØ�;‰;‹=œJ×1Ñ1Ò1ð 	×Ñ tÐÓ,¨iÑ7Ø!@ò(Ð$ð;Øð;à	=÷;ðz =?€FÜˆÙ$-¨a£LÑ!ˆ	�>ð �6‰6�;‰;‹=œJ×.Ñ.Ò.°IÐ4IØ!×(Ñ(Ö*�Ø"&×"2Ô"2�JØ ×!5Ñ!5Ò5Ø+5×+BÔ+B˜KØ1°[×5EÑ5EÒEÜ&4ð%KØKLÏ6É6È(ð%Tó'"ð !"ñ ,Cñ #3ð +ñ Ø�M‰MÜ7Ø °dôôð
 àEGÐØ"Ÿ™×*‰IˆC�Ø×+Ò+Ø*,Ð" 3Ñ'Øà"&×":Ñ":Ðð �v‰v�{‰{‹}¤
× 2Ñ 2Ó2ô( �t×/Ñ/Ó0°AÒ5Ü(ðÜ" 4×#;Ñ#;Ó<Ð=ð?óð ð ×2Ñ2°1Ñ5�Ø!Ÿ/™/�óWô —9‘9œ[×/Ñ/°Ó9¸7ÔCÙ%ä*Ø/°·±·±¨}ð =Gð Góð ñ #BÀ'È4Ó"P˜Ù"AÀ'È4Ó"P˜ó=ô Ÿ&™&¤×!3Ñ!3°HÓ!=¸tÀWÓM�à#*×#AÑ#AÐ Ü—9‘9œ[×/Ñ/°Ó9¸7ÔCá8HÐ(¨9Ò4Èið %ñ &ð 27Ð.Ø*/Ð'Ø*.�GØ15�NÜŸL™LÐ)BÀGÓL�EÙØ27·+±+¸a³.À%Ç+Á+ÈaÃ. ˜ó	(ñ 6UØ*ó6Ð2ð 7ÒO¸7ÀdÇiÁiÑ;Oð ,ñ +Ø"˜?Ü"0Ð1WÓ"XÐXØ)Ð1Ü"0Ø Mó#ð ð %GÀwÀiÈrÐR`ÐQaÐaeÐfmÐenÐ"o™ð %MÈWÈIÐUYÐZaÐYbÐ"c˜ä/3Ü—I‘Iœk×0Ñ0Ð1BÓCÀWÓMó0ò 0Uäœ"Ÿ)™)¤K×$6Ñ$6Ð7HÓ$IÈ7ÓSÓTð -ô
 &Ø 'Ø"+Ø")×"3Ñ"3Ø07×0OÑ0OØ/?Ø5QØ8FÐ4Fôð
'Ð#ð ':Ð˜sÓ#ðW +ðZ 	�‰Ü3Ø˜YÐ7Iôö	
ðM ðX €Mùók$ùó
(s   —>QÁ,>Qc                óN   — |j                  «       xr |d u xs | |j                  vS rz   )rÂ   rC   )r9   rp   rb   s      r$   Úis_differentiabler  Q  s1   € ð ×ÑÓ ò Ø�ˆÒE˜ D×$EÑ$EÐEðr#   c                ó  ‡— | j                   }| j                  r| j                  |   nd Št        t        j                  |«      |j                   j
                  «      D ��cg c]@  \  }}t        ||j                  t        j                  |d¬«      j                  «       ¬«      ‘ŒB }}}‰r‰j                  nd }|�¡t        |«      t        |«      k7  r$t        dt        |«      › dt        |«      › d�«      ‚g }d|v r6|j                   j                  «       t        j                  k(  rt        d«      ‚t        ||«      D ]  \  }}	|sŒ	|j!                  |	«       Œ |S t#        t%        ˆfd	„|«      «      }
t'        ‰«      r|
d d
 S |
S c c}}w )NT)Úsymint)r9   rp   rq   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                óF   •— t        | j                  | j                  ‰«      S rz   )r  r9   rp   )Úrrb   s    €r$   Ú<lambda>z,gen_differentiable_outputs.<locals>.<lambda>w  s   ø€ Ô*¨1¯6©6°1·6±6¸4Ô@r#   rO   )r:   rb   r£   r   Úreturn_namesÚreturnsrt   rp   Úreturn_typerq   rD   rG   r½   r´   r   r�   r¼   rÁ   Úfilterrm   )rƒ   r  rV   r9   ÚretÚoutputsrD   Údifferentiable_outputsÚdifferentiableÚoutputÚ candidate_differentiable_outputsrb   s              @r$   Úgen_differentiable_outputsr+  Y  s‘  ø€ ð 	�‰€AØŸ7š7ˆ2�7‰7�3Š<¨€Dô œS×-Ñ-¨aÓ0°!·&±&·.±.ÔAô+ñ B‰IˆD�#ô 	ØØ—‘Ü—_‘_ S°Ô6×?Ñ?ÓAö	
ð
 Bð ñ +ñ AE˜t×<Ò<È$ÐØÐ+ÜÐ'Ó(¬C°«LÒ8ÜØ:¼3Ð?WÓ;XÐ:Yð Z9Ü9<¸W»¸ÀbðJóð ð >@ÐØÐ,Ñ,°·±·±³Ä*×BTÑBTÒ1TÜØjóð ô '*Ð*BÀGÖ&LÑ"ˆN˜FÚØ&×-Ñ-¨fÕ5ð 'Mð &Ð%Ü'+ÜÓ@À'ÓJó(Ð$ô ˜ÔØ/°°Ð3Ð3à/Ð/ùó=+s   Á!AF)rb   r\   rc   r   r[   r4   )rb   r\   r[   r4   )rƒ   rv   r[   r   )rV   r   r[   r4   )rV   r   r¤   r   r[   r4   )ré   )
rÇ   r   rÈ   ú6dict[FunctionSchema, dict[str, DifferentiabilityInfo]]rÉ   r,  rÊ   r   r[   z)tuple[DifferentiabilityInfo | None, bool])r  zlist[NativeFunction]rñ   r,  r[   z-list[NativeFunctionWithDifferentiabilityInfo])r9   r   rp   r   rb   r\   r[   r4   )rƒ   rv   r  r   r[   zlist[DifferentiableOutput])2Ú
__future__r   r_   Ú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>r6     s  ðÝ "ã 	Ý !ß &å Ý ß JÓ J÷	÷ 	ó 	õ 'ñ Ý(ñ �$Ô÷ð ó ðñ �$Ô÷ð ó ðñ6 �$Ô÷&ð &ó ð&ñ< �$Ô÷h
ð h
ó ðh
óVó0ó$ñ �$Ô÷ð ó ðñ  �$Ô÷ð ó ðñ �$Ô÷Bð Bó ðBó.ób9ð .Ð.Ð ò!Ð ò	Ð ðØðà#ðð 
óðD "ð[Ø$ð[ð#ð[ð
'ð[ð ð[ð /ó[ð|~Ø*ð~àSð~ð 3ó~ðBØ
ðØðØ!=ðà	óð =Fð#0Ø/ð#0Ø69ð#0àô#0r#   