Ë
    L²jK#  ã                   óð   — d dl Z d dlmZ d dl mZ d dlmZmZ d dlmZm	Z	m
Z
mZ d dlmZ ddlmZ  G d	„ d
e«      Ze j                   G d„ d«      «       Zde	j$                  dedefd„Zdedefd„Zd„ Zd„ Zy)é    N)ÚCallable)Ú	dataclass)ÚAnyÚProtocol)Ú_CÚ_opsÚautogradÚTensor)Ú_pytreeé   )Úutilsc                   ó.   — e Zd ZU edz  ed<   edz  ed<   y)ÚInfoProtocolNÚ_backward_fnÚ_setup_context_fn©Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__© ó    úV/var/www/html/ia-enhanced/venv/lib/python3.12/site-packages/torch/_library/autograd.pyr   r      s   … Ø˜T‘/Ó!Ø $‘Ô&r   r   c                   ó.   — e Zd ZU edz  ed<   edz  ed<   y)ÚInfoNr   r   r   r   r   r   r   r      s   … à˜T‘/Ó!Ø $‘Ô&r   r   ÚopÚinfoÚreturnc                 óà  ‡ ‡‡‡‡	‡
— d‰ j                   › d‰ j                  › d‰ j                  › �}t        j                  ‰ j
                  «      Š
t         G d„ d«      «       Šˆ fd„Š	ˆ
ˆˆ fd„}ˆˆ fd„}t        |t        j                  ft        |«      t        |«      dœ«      Š‰ j
                  }t        d	„ g |j                  ¢|j                  ¢­D «       «      rt        ‰«      Šˆˆˆ	fd
„}|S )NÚGeneratedBackwardFor_Ú_c                   ó@   — e Zd ZU ej                  ed<   eeef   ed<   y)ú$make_autograd_impl.<locals>.MetadataÚkeysetÚkeyword_only_argsN)	r   r   r   r   ÚDispatchKeySetr   ÚdictÚstrr   r   r   r   ÚMetadatar#      s   … à×!Ñ!Ó!Ø  S ™>Ô)r   r)   c                  óî   •— | d   }| d d } t        j                  «       5  |j                  }|j                  } ‰j                  |t         j
                  z  g| ¢­i |¤Ž}|cd d d «       S # 1 sw Y   y xY w)Néÿÿÿÿ)r   Ú_AutoDispatchBelowAutogradr$   r%   Ú
redispatchÚ_after_autograd_keyset)ÚargsÚmetadatar$   ÚkwargsÚresultr   s        €r   Úforward_no_gradz+make_autograd_impl.<locals>.forward_no_grad"   su   ø€ Ø˜‘8ˆØ�C�Rˆyˆä×*Ñ*Ó,ñ 	Ø—_‘_ˆFØ×/Ñ/ˆFØ"�R—]‘] 6¬B×,EÑ,EÑ#EÐWÈÒWÐPVÑWˆFØ÷		÷ 	ò 	ús    AA+Á+A4c                 ó¦  •— |d   }|d d }t        j                  «       5  |j                  }|j                  } ‰j                  |t         j
                  z  g|¢­i |¤Ž}‰j                  rPt        j                  ‰j                  ||«      \  }}‰r‰j                  | |||¬«       n‰j                  | ||¬«       |cd d d «       S # 1 sw Y   y xY w)Nr+   )ÚctxÚinputsÚkeyword_only_inputsÚoutput)r5   r6   r8   )
r   r,   r$   r%   r-   r.   r   r   Úfill_defaultsÚ_schema)	r5   r/   r0   r$   r1   r2   Úhas_kwarg_only_argsr   r   s	         €€€r   Úforwardz#make_autograd_impl.<locals>.forward,   sÓ   ø€ Ø˜‘8ˆØ�C�Rˆyˆä×*Ñ*Ó,ñ 	Ø—_‘_ˆFØ×/Ñ/ˆFØ"�R—]‘] 6¬B×,EÑ,EÑ#EÐWÈÒWÐPVÑWˆFØ×%Ò%ô  %×2Ñ2°2·:±:¸tÀVÓL‘��fá&Ø×*Ñ*Ø¨À&ÐQWð +õ ð ×*Ñ*¨s¸4ÈÐ*ÔOØ÷/	÷ 	ò 	ús    BCÃCc                 óþ   •— ‰j                   rV	 | j                  }| j                  d d | _         ‰j                   | g|¢­Ž }|| _        t        |t        «      rg |¢d ‘­S |d fS t	        d‰› d�«      ‚# | _        w xY w)Nr+   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)r5   ÚgradsÚprev_needs_input_gradr2   r   r   s       €€r   Úbackwardz$make_autograd_impl.<locals>.backwardI   s�   ø€ Ø×Òð=Ø(+×(<Ñ(<Ð%Ø'*×';Ñ';¸C¸RÐ'@�Ô$Ø*˜×*Ñ*¨3Ð7°Ò7�à'<�Ô$Ü˜&¤%Ô(Ø&˜� ‘Ð&Ø˜4�<ÐÜØ)¨"¨ð .7ð 8ó
ð 	
øð	 (=�Õ$ús   �3A3 Á3	A<)r<   rD   c              3   óZ   K  — | ]#  }t        j                  |j                  «      –— Œ% y ­w©N)r   Úis_tensorlist_like_typeÚtype)Ú.0Úas     r   ú	<genexpr>z%make_autograd_impl.<locals>.<genexpr>d   s'   è ø€ ò àô 	×%Ñ% a§f¡f×-ñùs   ‚)+c                 ó°   •— t        j                  «       r/t        j                  |Ž r ‰j                  g |¢ ‰| |«      ‘­Ž }|S  ‰g |¢ ‰| |«      ‘­Ž }|S rF   )r   Úis_grad_enabledÚ_any_requires_gradÚapply)r$   r/   r%   r2   Ú	Generatedr)   r3   s       €€€r   Úautograd_implz)make_autograd_impl.<locals>.autograd_impll   sd   ø€ Ü×ÑÔ¤B×$9Ñ$9¸4Ñ$@Ø$�Y—_‘_ÐP dÐP©H°VÐ=NÓ,OÒPˆFð ˆñ %ÐP dÐP©H°VÐ=NÓ,OÒPˆFØˆr   )Ú
_namespaceÚ_opnameÚ_overloadnamer   r;   r:   r   rH   r	   ÚFunctionÚstaticmethodÚanyÚ	argumentsÚreturnsÚsupports_tensorlist)r   r   Únamer<   rD   ÚschemarQ   rP   r)   r3   r;   s   ``     @@@@r   Úmake_autograd_implr]      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                 óÈ   ‡‡‡‡— | j                   Š| j                  Š| j                  Št         G d„ d«      «       Šˆˆfd„}ˆfd„}ˆˆfd„}|| _         || _        || _        | S )a4  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                   óh   — e Zd ZU ej                  ed<   dZej                  dz  ed<   dZedz  ed<   y)ú%supports_tensorlist.<locals>.MetadataÚ
input_specNÚoutput_specÚresult_is_tuple)	r   r   r   r   ÚTreeSpecr   rc   rd   Úboolr   r   r   r)   ra   �   s1   … à×$Ñ$Ó$Ø/3ˆ�W×%Ñ%¨Ñ,Ó3Ø'+ˆ˜ ™Ô+r   r)   c                 óŒ  •— |d   }|d d }t        |‰«      st        d«      ‚t        j                  t	        |«      |j
                  «      } ‰| g|¢­Ž }t        |t        «      |_        |j                  s|f}t        j                  |t        «      \  }}||_
        t        | d«      rt        d«      ‚|| _        t        |«      S )Nr+   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)r?   ÚNotImplementedErrorr   Útree_unflattenÚlistrb   r@   rd   Útree_flattenÚnot_list_of_tensorrc   ÚhasattrrA   rh   )r5   r/   r0   r2   Úflat_resultrc   r)   Úorig_forwards         €€r   Únew_forwardz(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                 ó8  •— t        | d«      st        d«      ‚| j                  }t        j                  t        |«      |j                  «      }| j                  }	 t        j                  t        | j                  d d «      |j                  «      | _         ‰| g|¢­Ž }|| _        t        |t        «      s|f}t        j                  |t        «      \  }}||j                  k7  rt        d|› d|j                  › d�«      ‚t        |d gz   «      S # || _        w xY w)Nrh   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.r+   zRExpected the return from backward to be of the same structure as the inputs. Got: z (return from backward), z	 (inputs))rn   ri   rh   r   rj   rk   rc   r>   rb   r?   r@   rl   Únot_list_of_optional_tensorrA   )r5   rB   r0   rC   Úgrad_inputsÚflat_grad_inputsÚgrad_inputs_specÚorig_backwards          €r   Únew_backwardz)supports_tensorlist.<locals>.new_backward    s3  ø€ Ü�s˜NÔ+Ü%ð9óð ð ×#Ñ#ˆÜ×&Ñ&¤t¨E£{°H×4HÑ4HÓIˆð !$× 4Ñ 4Ðð	9Ü#*×#9Ñ#9Ü�S×)Ñ)¨#¨2Ð.Ó/°×1DÑ1Dó$ˆCÔ ñ (¨Ð4¨eÒ4ˆKà#8ˆCÔ ä˜+¤uÔ-Ø&˜.ˆKô .5×-AÑ-AØÔ4ó.
Ñ*ÐÐ*ð ˜x×2Ñ2Ò2Üð'Ø'7Ð&8Ð8QØ×&Ñ&Ð' yð2óð ô
 Ð%¨¨Ñ.Ó/Ð/øð% $9ˆCÕ ús   ÁAD Ä	Dc                  ó¢  •— t        j                  | t        ¬«      \  }} ‰|«      } ‰g |¢|‘­Ž }|j                  €t	        d«      ‚t        j
                  t        |«      |j                  «      }|j                  sQt        |t        «      st	        dt        |«      › �«      ‚t        |«      dk7  rt	        dt        |«      › �«      ‚|d   S |S )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   rl   rm   rc   ÚAssertionErrorrj   rk   rd   r?   r@   rH   Úlen)r/   Ú	flat_argsrb   r0   r2   r)   Ú
orig_applys        €€r   Ú	new_applyz&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   )r<   rD   rO   r   )r^   rq   rx   r   r)   r~   rw   rp   s       @@@@r   rZ   rZ   v   sc   û€ ð —;‘;€LØ—L‘L€MØ—‘€Jä÷,ð ,ó ð,õ
"ô2*0õXð" €C„KØ€C„LØ€C„IØ€Jr   c                 ój   — t        | t        «      ryt        | t        «      rt        d„ | D «       «      S y)NFc              3   ó>   K  — | ]  }t        |t        «       –— Œ y ­wrF   ©r?   r
   ©rI   Úls     r   rK   z%not_list_of_tensor.<locals>.<genexpr>ç   s   è ø€ Ò;°”z !¤VÓ,Ô,Ñ;ùs   ‚T©r?   r@   rk   rW   ©Útrees    r   rm   rm   ã   s-   € Ü�$œÔØÜ�$œÔÜÑ;°dÔ;Ó;Ð;Ør   c                 ój   — t        | t        «      ryt        | t        «      rt        d„ | D «       «      S y)NFc              3   óJ   K  — | ]  }|d uxr t        |t        «       –— Œ y ­wrF   r‚   rƒ   s     r   rK   z.not_list_of_optional_tensor.<locals>.<genexpr>ï   s&   è ø€ ÒMÀ1�1˜D�=Ò>¬°A´vÓ)>Ð%>Ó>ÑMùs   ‚!#Tr…   r†   s    r   rs   rs   ë   s-   € Ü�$œÔØÜ�$œÔÜÑMÈÔMÓMÐMØr   )ÚdataclassesÚcollections.abcr   r   Útypingr   r   Útorchr   r   r	   r
   Útorch.utilsr   Ú r   r   r   Ú
OpOverloadr]   rZ   rm   rs   r   r   r   ú<module>r‘      sŒ   ðã Ý $Ý !ß  ç ,Ó ,Ý å ô'�8ô 'ð
 ×Ñ÷'ð 'ó ð'ð
[˜4Ÿ?™?ð [°,ð [À8ó [ð|j˜Sð j Só jòZór   