Ë
    g^(he"  ã                   ó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__© ó    úU/var/www/skyplay_api_hub/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                  t        d„ |t
        «      r ‰j                  g |¢ ‰| |«      ‘­Ž }|S  ‰g |¢ ‰| |«      ‘­Ž }|S )Nc                 ó   — | j                   S rG   )Úrequires_grad)Úxs    r   ú<lambda>z;make_autograd_impl.<locals>.autograd_impl.<locals>.<lambda>m   s
   € ˜aŸo™o€ r   )r   Úis_grad_enabledr   Útree_any_onlyr   Únot_list_of_tensorÚapply)r%   r0   r&   r3   Ú	Generatedr*   r4   s       €€€r   Úautograd_implz)make_autograd_impl.<locals>.autograd_implk   sq   ø€ Ü×ÑÔ¤G×$9Ñ$9ÜÑ-¨tÔ5Gô%
ð %�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   ÚschemarW   rV   r*   r4   r<   s   ``     @@@@r   Úmake_autograd_implrc      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   ri   r   rj   Úboolr   r   r   r*   rg   ‚   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Úlistrh   rA   rj   ÚflattenrT   ri   ÚhasattrrB   rn   )r6   r0   r1   r3   Úflat_resultri   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)Nrn   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))rs   ro   rn   rp   rq   ri   r?   rh   r@   rA   rr   Ú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   )	rr   rT   ri   rp   rq   rj   r@   rA   Úlen)r0   Ú	flat_argsrh   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   rU   r   )rd   rv   r}   rƒ   r*   r‚   r|   ru   s       @@@@r   r`   r`   w   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   rq   r]   ©Útrees    r   rT   rT   ß   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   rx   rx   ç   s-   € Ü�$œÔØÜ�$œÔÜÑMÈÔMÓMÐMØr   )Údataclassesr   Útypingr   r   r   r   Útorchr   r	   r
   r   Útorch.utilsr   Ú r   r   r   Ú
OpOverloadrc   r`   rT   rx   Útree_flattenrr   Útree_unflattenrp   ÚTreeSpecrk   r   r   r   ú<module>r—      s¯   ðã Ý !ß 4Ó 4ç ,Ó ,Ý å ô*�8ô *ð
 ×Ñ÷*ð *ó ð*ð
]˜4Ÿ?™?ð ]°,ð ]À8ó ]ð@e˜Sð e Só eòPòð ×
Ñ
€Ø×"Ñ"€	Ø	×	Ñ	�r   