ó
    Eñig#  ã                   óø   • S SK r S SKJr  S SK Jr  S SKJrJrJr  S SKJ	r	J
r
JrJr  S SKJr  SSKJr   " S	 S
\5      r\ R                   " S S5      5       rS\
R&                  S\S\4S jrS\S\4S jrS rS rg)é    N)ÚCallable)Ú	dataclass)ÚAnyÚOptionalÚProtocol)Ú_CÚ_opsÚautogradÚTensor)Ú_pytreeé   )Úutilsc                   ó6   • \ rS rSr% \\   \S'   \\   \S'   Srg)ÚInfoProtocolé   Ú_backward_fnÚ_setup_context_fn© N©Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__r   r   Ú__annotations__Ú__static_attributes__r   ó    ÚT/home/mande/repo/quber/.venv/lib/python3.13/site-packages/torch/_library/autograd.pyr   r      s   ‡ Ø˜8Ñ$Ó$Ø Ñ)Ö)r   r   c                   ó6   • \ rS rSr% \\   \S'   \\   \S'   Srg)ÚInfoé   r   r   r   Nr   r   r   r   r   r      s   ‡ à˜8Ñ$Ó$Ø Ñ)Ö)r   r   ÚopÚinfoÚreturnc                 óô  ^ ^^^^	^
• ST R                    ST R                   ST R                   3n[        R                  " T R
                  5      m
[         " S S5      5       mU 4S jm	U
UU 4S jnUU 4S jn[        U[        R                  4[        U5      [        U5      S.5      mT R
                  n[        S	 / UR                  QUR                  Q7 5       5      (       a  [        T5      mUUU	4S
 jnU$ )NÚGeneratedBackwardFor_Ú_c                   óH   • \ rS rSr% \R
                  \S'   \\\	4   \S'   Sr
g)Ú$make_autograd_impl.<locals>.Metadataé   ÚkeysetÚkeyword_only_argsr   N)r   r   r   r   r   ÚDispatchKeySetr   ÚdictÚstrr   r   r   r   r   ÚMetadatar(      s   ‡ à×!Ñ!Ó!Ø  S ™>Ö)r   r/   c                  óú   >• U S   nU S S n [         R                  " 5          UR                  nUR                  nTR                  " U[         R
                  -  /U Q70 UD6nUsS S S 5        $ ! , (       d  f       g = f)Néÿÿÿÿ)r   Ú_AutoDispatchBelowAutogradr*   r+   Ú
redispatchÚ_after_autograd_keyset)ÚargsÚmetadatar*   ÚkwargsÚresultr!   s        €r   Úforward_no_gradÚ+make_autograd_impl.<locals>.forward_no_grad"   sj   ø€ Ø˜‘8ˆØ�C�Rˆyˆä×*Ò*Õ,Ø—_‘_ˆFØ×/Ñ/ˆFØ—]’] 6¬B×,EÑ,EÑ#EÐWÈÒWÐPVÑWˆFØ÷	 -×,×,ús   ¡AA,Á,
A:c                 ó²  >• US   nUS S n[         R                  " 5          UR                  nUR                  nTR                  " U[         R
                  -  /UQ70 UD6nTR                  (       aK  [        R                  " TR                  X5      u  pT(       a  TR                  XXES9  OTR                  XUS9  UsS S S 5        $ ! , (       d  f       g = f)Nr1   )ÚctxÚinputsÚkeyword_only_inputsÚoutput)r<   r=   r?   )
r   r2   r*   r+   r3   r4   r   r   Úfill_defaultsÚ_schema)	r<   r5   r6   r*   r7   r8   Úhas_kwarg_only_argsr"   r!   s	         €€€r   ÚforwardÚ#make_autograd_impl.<locals>.forward,   s½   ø€ Ø˜‘8ˆØ�C�Rˆyˆä×*Ò*Õ,Ø—_‘_ˆFØ×/Ñ/ˆFØ—]’] 6¬B×,EÑ,EÑ#EÐWÈÒWÐPVÑWˆFØ×%×%ô  %×2Ò2°2·:±:¸tÓL‘�æ&Ø×*Ñ*ØÀ&ð +ò ð ×*Ñ*¨sÈÐ*ÑOØ÷/ -×,×,ús   ¡BCÃ
Cc                 ó  >• TR                   (       aZ   U R                  nU R                  S S U l        TR                   " U /UQ76 nX l        [        U[        5      (       a  / UQS P7$ US 4$ [	        ST S35      e! WU l        f = f)Nr1   zTrying to backward through zQ but no autograd formula was registered. Please use register_autograd to add one.)r   Úneeds_input_gradÚ
isinstanceÚtupleÚRuntimeError)r<   ÚgradsÚprev_needs_input_gradr8   r"   r!   s       €€r   ÚbackwardÚ$make_autograd_impl.<locals>.backwardI   sœ   ø€ Ø××ð=Ø(+×(<Ñ(<Ð%Ø'*×';Ñ';¸C¸RÐ'@�Ô$Ø×*Ò*¨3Ð7°Ò7�à'<Ô$Ü˜&¤%×(Ñ(Ø&˜� ‘Ð&Ø˜4�<ÐÜØ)¨"¨ð .7ð 8ó
ð 	
øð	 (=�Õ$ús   ”3A< Á<	B)rC   rL   c              3   ób   #   • U  H%  n[         R                  " UR                  5      v •  M'     g 7f©N)r   Úis_tensorlist_like_typeÚtype)Ú.0Úas     r   Ú	<genexpr>Ú%make_autograd_impl.<locals>.<genexpr>d   s)   é € ð â5ˆAô 	×%Ò% a§f¡f×-Ð-Ú5ùs   ‚-/c                 óÄ   >• [         R                  " 5       (       a4  [         R                  " U6 (       a  TR                  " / UQT" X5      P76 nU$ T" / UQT" X5      P76 nU$ rO   )r   Úis_grad_enabledÚ_any_requires_gradÚapply)r*   r5   r+   r8   Ú	Generatedr/   r9   s       €€€r   Úautograd_implÚ)make_autograd_impl.<locals>.autograd_impll   s_   ø€ Ü×Ò×Ñ¤B×$9Ò$9¸4Ö$@Ø—_’_ÐP dÐP©H°VÓ,OÒPˆFð ˆñ %ÐP dÐP©H°VÓ,OÒPˆFØˆr   )Ú
_namespaceÚ_opnameÚ_overloadnamer   rB   rA   r   rQ   r
   ÚFunctionÚstaticmethodÚanyÚ	argumentsÚreturnsÚsupports_tensorlist)r!   r"   ÚnamerC   rL   Úschemar[   rZ   r/   r9   rB   s   ``     @@@@r   Úmake_autograd_implrh      sç   ý€ Ø'¨¯© °a¸¿
¹
°|À1ÀR×EUÑEUÐDVÐW€Dä×3Ò3°B·J±JÓ?Ðä÷*ð *ó ð*õ÷ö:
ô" ØÜ	×	Ñ	Ðä# GÓ,Ü$ XÓ.ñ	
ó€Ið �Z‰Z€FÜ
ñ à5�6×#Ñ#Ð5 f§n¡nÒ5ó÷ ñ ô (¨	Ó2ˆ	÷ð Ðr   Úclsc                 óÈ   ^^^^• U R                   mU R                  mU R                  m[         " S S5      5       mUU4S jnU4S jnUU4S jnXl         X l        X0l        U $ )a$  Allows a given autograd.Function class to support List[Tensor] inputs/outputs.

Regular autograd.Function has a constraint that it only directly supports autograd for
Tensors. Applying @supports_tensorlist enables an autograd.Function to support
autograd for List[Tensor] inputs and outputs.
c                   óp   • \ rS rSr% \R
                  \S'   Sr\\R
                     \S'   Sr	\\
   \S'   Srg)Ú%supports_tensorlist.<locals>.Metadataé�   Ú
input_specNÚoutput_specÚresult_is_tupler   )r   r   r   r   r   ÚTreeSpecr   ro   r   rp   Úboolr   r   r   r   r/   rl   �   s1   ‡ à×$Ñ$Ó$Ø26ˆ�X˜g×.Ñ.Ñ/Ó6Ø*.ˆ˜ $™Ö.r   r/   c                 ó¨  >• US   nUS S n[        UT5      (       d  [        S5      e[        R                  " [	        U5      UR
                  5      nT" U /UQ76 n[        U[        5      Ul        UR                  (       d  U4n[        R                  " U[        5      u  pEXRl
        [        U S5      (       a  [        S5      eX l        [        U5      $ )Nr1   z�NYI: calling supports_tensorlist autograd.Function.forward directly. You should probably be calling .apply instead. Please file an issue if not.Ú_pt_metadataz@Please don't set ctx._pt_metadata; PyTorch uses it to store info)rG   ÚNotImplementedErrorr   Útree_unflattenÚlistrn   rH   rp   Útree_flattenÚnot_list_of_tensorro   ÚhasattrrI   rt   )r<   r5   r6   r8   Úflat_resultro   r/   Úorig_forwards         €€r   Únew_forwardÚ(supports_tensorlist.<locals>.new_forward‡   sÎ   ø€ Ø˜‘8ˆØ�C�RˆyˆÜ˜( H×-Ñ-Ü%ð/óð ô
 ×%Ò%¤d¨4£j°(×2EÑ2EÓFˆÙ˜cÐ) DÒ)ˆÜ#-¨f´eÓ#<ˆÔ Ø×'×'Ø�YˆFÜ#*×#7Ò#7¸Ô@RÓ#SÑ ˆØ*Ôä�3˜×'Ñ'ÜØRóð ð $Ôä�[Ó!Ð!r   c                 óL  >• [        U S5      (       d  [        S5      eU R                  n[        R                  " [        U5      UR                  5      nU R                  n [        R                  " [        U R                  S S 5      UR                  5      U l        T" U /UQ76 nX0l        [        U[        5      (       d  U4n[        R                  " U[        5      u  pVXbR                  :w  a  [        SU SUR                   S35      e[        US /-   5      $ ! X0l        f = f)Nrt   z¤NYI: calling supports_tensorlist autograd.Function.backward directly. This will automatically get called by PyTorch autograd. Please file an issue if you need this.r1   zRExpected the return from backward to be of the same structure as the inputs. Got: z (return from backward), z	 (inputs))rz   ru   rt   r   rv   rw   ro   rF   rn   rG   rH   rx   Únot_list_of_optional_tensorrI   )r<   rJ   r6   rK   Úgrad_inputsÚflat_grad_inputsÚgrad_inputs_specÚorig_backwards          €r   Únew_backwardÚ)supports_tensorlist.<locals>.new_backward    s0  ø€ Ü�s˜N×+Ñ+Ü%ð9óð ð ×#Ñ#ˆÜ×&Ò&¤t¨E£{°H×4HÑ4HÓIˆð !$× 4Ñ 4Ðð	9Ü#*×#9Ò#9Ü�S×)Ñ)¨#¨2Ð.Ó/°×1DÑ1Dó$ˆCÔ ñ (¨Ð4¨eÒ4ˆKà#8Ô ä˜+¤u×-Ñ-Ø&˜.ˆKô .5×-AÒ-AØÔ4ó.
Ñ*Ðð ×2Ñ2Ó2Üð'Ø'7Ð&8Ð8QØ×&Ñ&Ð' yð2óð ô
 Ð%¨¨Ñ.Ó/Ð/øð% $9Õ ús   Á!AD ÄD#c                  ó¶  >• [         R                  " U [        S9u  pT" U5      nT" / UQUP76 nUR                  c  [	        S5      e[         R
                  " [        U5      UR                  5      nUR                  (       dW  [        U[        5      (       d  [	        S[        U5       35      e[        U5      S:w  a  [	        S[        U5       35      eUS   $ U$ )N)Úis_leafz%metadata.output_spec must not be Nonezresult must be tuple, got r   z%result tuple must have length 1, got r   )r   rx   ry   ro   ÚAssertionErrorrv   rw   rp   rG   rH   rQ   Úlen)r5   Ú	flat_argsrn   r6   r8   r/   Ú
orig_applys        €€r   Ú	new_applyÚ&supports_tensorlist.<locals>.new_applyÌ   sÎ   ø€ Ü '× 4Ò 4°TÔCUÑ VÑˆ	Ù˜JÓ'ˆÙÐ1˜YÐ1¨Ò1ˆØ×ÑÑ'Ü Ð!HÓIÐIÜ×'Ò'¬¨V«°h×6JÑ6JÓKˆØ×'×'Ü˜f¤e×,Ñ,Ü$Ð'AÄ$ÀvÃ,ÀÐ%PÓQÐQÜ�6‹{˜aÓÜ$Ø;¼CÀ»K¸=ÐIóð ð ˜!‘9ÐØˆr   )rC   rL   rY   r   )ri   r}   r…   r�   r/   rŒ   r„   r|   s       @@@@r   re   re   v   s]   û€ ð —;‘;€LØ—L‘L€MØ—‘€Jä÷/ð /ó ð/ö
"õ2*0öXð" „KØ„LØ„IØ€Jr   c                 ó~   • [        U [        5      (       a  g[        U [        5      (       a  [        S U  5       5      $ g)NFc              3   óL   #   • U  H  n[        U[        5      (       + v •  M     g 7frO   ©rG   r   ©rR   Úls     r   rT   Ú%not_list_of_tensor.<locals>.<genexpr>ç   s   é € Ð;²d°”z !¤VÓ,×,Ñ,²dùs   ‚"$T©rG   rH   rw   rb   ©Útrees    r   ry   ry   ã   s3   € Ü�$œ×ÑØÜ�$œ×ÑÜÑ;±dÓ;Ó;Ð;Ør   c                 ó~   • [        U [        5      (       a  g[        U [        5      (       a  [        S U  5       5      $ g)NFc              3   ó`   #   • U  H$  oS L=(       a    [        U[        5      (       + v •  M&     g 7frO   r‘   r’   s     r   rT   Ú.not_list_of_optional_tensor.<locals>.<genexpr>ï   s$   é € ÐMÊÀ1˜D�=×>¬°A´vÓ)>Ô%>Ô>Êùs   ‚,.Tr•   r–   s    r   r€   r€   ë   s3   € Ü�$œ×ÑØÜ�$œ×ÑÜÑMÉÓMÓMÐMØr   )ÚdataclassesÚcollections.abcr   r   Útypingr   r   r   Útorchr   r	   r
   r   Útorch.utilsr   Ú r   r   r   Ú
OpOverloadrh   re   ry   r€   r   r   r   Ú<module>r¢      s�   ðã Ý $Ý !ß *Ñ *ç ,Ó ,Ý å ô*�8ô *ð
 ×Ñ÷*ð *ó ð*ð
[˜4Ÿ?™?ð [°,ð [À8ô [ð|j˜Sð j Sô jòZór   