Ë
    òÍ:j"  ã                   ó4  — d dl 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 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ej.                  Zej2                  Zej6                  Zy)é    N)Ú	dataclass)ÚAnyÚCallableÚOptionalÚProtocol)Ú_CÚ_opsÚautogradÚTensor)Ú_pytreeé   )Úutilsc                   ó.   — e Zd ZU ee   ed<   ee   ed<   y)ÚInfoProtocolÚ_backward_fnÚ_setup_context_fnN©Ú__name__Ú
__module__Ú__qualname__r   r   Ú__annotations__© ó    úl/home/mcse/projects/srt_converter/srt-converter-venv/lib/python3.12/site-packages/torch/_library/autograd.pyr   r      s   … Ø˜8Ñ$Ó$Ø Ñ)Ô)r   r   c                   ó.   — e Zd ZU ee   ed<   ee   ed<   y)ÚInfor   r   Nr   r   r   r   r   r      s   … à˜8Ñ$Ó$Ø Ñ)Ô)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)r6   r7   r9   )
r   r-   r%   r&   r.   r/   r   r   Úfill_defaultsÚ_schema)	r6   r0   r1   r%   r2   r3   Ú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)r6   ÚgradsÚprev_needs_input_gradr3   r   r   s       €€r   Úbackwardz$make_autograd_impl.<locals>.backwardH   s�   ø€ Ø×Òð=Ø(+×(<Ñ(<Ð%Ø'*×';Ñ';¸C¸RÐ'@�Ô$Ø*˜×*Ñ*¨3Ð7°Ò7�à'<�Ô$Ü˜&¤%Ô(Ø&˜� ‘Ð&Ø˜4�<ÐÜØ)¨"¨ð .7ð 8ó
ð 	
øð	 (=�Õ$ús   �3A3 Á3	A<)r=   rE   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>c   s'   è ø€ ò àô 	×%Ñ% a§f¡f×-ñùs   ‚)+c                 ó°   •— t        j                  «       r/t        j                  |Ž r ‰j                  g |¢ ‰| |«      ‘­Ž }|S  ‰g |¢ ‰| |«      ‘­Ž }|S rG   )r   Úis_grad_enabledÚ_any_requires_gradÚapply)r%   r0   r&   r3   Ú	Generatedr*   r4   s       €€€r   Úautograd_implz)make_autograd_impl.<locals>.autograd_implk   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   rI   r
   ÚFunctionÚstaticmethodÚanyÚ	argumentsÚreturnsÚsupports_tensorlist)r   r   Únamer=   rE   ÚschemarR   rQ   r*   r4   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                   ó@   — e Zd ZU eed<   dZee   ed<   dZee   ed<   y)ú%supports_tensorlist.<locals>.MetadataÚ
input_specNÚoutput_specÚresult_is_tuple)	r   r   r   Úspec_tr   rd   r   re   Úboolr   r   r   r*   rb   €   s%   … àÓØ(,ˆ�X˜fÑ%Ó,Ø*.ˆ˜ $™Ô.r   r*   c                 ód  •— |d   }|d d }t        |‰«      st        d«      ‚t        t        |«      |j                  «      } ‰| g|¢­Ž }t        |t
        «      |_        |j                  s|f}t        |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@   ÚNotImplementedErrorÚ	unflattenÚlistrc   rA   re   ÚflattenÚnot_list_of_tensorrd   ÚhasattrrB   ri   )r6   r0   r1   r3   Úflat_resultrd   r*   Úorig_forwards         €€r   Únew_forwardz(supports_tensorlist.<locals>.new_forward†   sÂ   ø€ Ø˜‘8ˆØ�C�RˆyˆÜ˜( HÔ-Ü%ð/óð ô
 œ˜d› X×%8Ñ%8Ó9ˆÙ˜cÐ) DÒ)ˆÜ#-¨f´eÓ#<ˆÔ Ø×'Ò'Ø�YˆFÜ#*¨6Ô3EÓ#FÑ ˆ�[Ø*ˆÔä�3˜Ô'ÜØRóð ð $ˆÔä�[Ó!Ð!r   c                 óü  •— t        | d«      st        d«      ‚| j                  }t        t	        |«      |j
                  «      }| j                  }	 t        t	        | j                  d d «      |j                  «      | _         ‰| g|¢­Ž }|| _        t        |t        «      s|f}t        |t        «      \  }}||j                  k7  rt        d|› d|j                  › d�«      ‚t        |d gz   «      S # || _        w xY w)Nri   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))ro   rj   ri   rk   rl   rd   r?   rc   r@   rA   rm   Únot_list_of_optional_tensorrB   )r6   rC   r1   rD   Úgrad_inputsÚflat_grad_inputsÚgrad_inputs_specÚorig_backwards          €r   Únew_backwardz)supports_tensorlist.<locals>.new_backwardŸ   s!  ø€ Ü�s˜NÔ+Ü%ð9óð ð ×#Ñ#ˆÜœ$˜u›+ x×';Ñ';Ó<ˆð !$× 4Ñ 4Ðð	9Ü#,Ü�S×)Ñ)¨#¨2Ð.Ó/°×1DÑ1Dó$ˆCÔ ñ (¨Ð4¨eÒ4ˆKà#8ˆCÔ ä˜+¤uÔ-Ø&˜.ˆKô .5ØÔ4ó.
Ñ*ÐÐ*ð ˜x×2Ñ2Ò2Üð'Ø'7Ð&8Ð8QØ×&Ñ&Ð' yð2óð ô
 Ð%¨¨Ñ.Ó/Ð/øð% $9ˆCÕ ús   Á:C2 Ã2	C;c                  ó  •— t        | t        ¬«      \  }} ‰|«      } ‰g |¢|‘­Ž }|j                  €J ‚t        t	        |«      |j                  «      }|j
                  s't        |t        «      sJ ‚t        |«      dk(  sJ ‚|d   S |S )N)Úis_leafr   r   )	rm   rn   rd   rk   rl   re   r@   rA   Úlen)r0   Ú	flat_argsrc   r1   r3   r*   Ú
orig_applys        €€r   Ú	new_applyz&supports_tensorlist.<locals>.new_applyË   s“   ø€ Ü '¨Ô6HÔ IÑˆ	�:Ù˜JÓ'ˆÙÐ1˜YÐ1¨Ò1ˆØ×#Ñ#Ð/Ð/Ð/Üœ4 ›<¨×)=Ñ)=Ó>ˆØ×'Ò'Ü˜f¤eÔ,Ð,Ð,Ü�v“; !Ò#Ð#Ð#Ø˜!‘9ÐØˆr   )r=   rE   rP   r   )r_   rr   ry   r   r*   r~   rx   rq   s       @@@@r   r[   r[   u   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rG   ©r@   r   ©rJ   Úls     r   rL   z%not_list_of_tensor.<locals>.<genexpr>á   s   è ø€ Ò;°”z !¤VÓ,Ô,Ñ;ùs   ‚T©r@   rA   rl   rX   ©Útrees    r   rn   rn   Ý   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rG   r‚   rƒ   s     r   rL   z.not_list_of_optional_tensor.<locals>.<genexpr>é   s&   è ø€ ÒMÀ1�1˜D�=Ò>¬°A´vÓ)>Ð%>Ó>ÑMùs   ‚!#Tr…   r†   s    r   rt   rt   å   s-   € Ü�$œÔØÜ�$œÔÜÑMÈÔMÓMÐMØr   )Údataclassesr   Útypingr   r   r   r   Útorchr   r	   r
   r   Útorch.utilsr   Ú r   r   r   Ú
OpOverloadr^   r[   rn   rt   Útree_flattenrm   Útree_unflattenrk   ÚTreeSpecrf   r   r   r   ú<module>r“      s¯   ðã Ý !ß 4Ó 4ç ,Ó ,Ý å ô*�8ô *ð
 ×Ñ÷*ð *ó ð*ð
[˜4Ÿ?™?ð [°,ð [À8ó [ð|e˜Sð e Só eòPòð ×
Ñ
€Ø×"Ñ"€	Ø	×	Ñ	�r   