Ë
    øÿæig#  ã                   óô   — d dl Z d dlmZ d dl mZ d dl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y)é    N)ÚCallable)Ú	dataclass)ÚAnyÚ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/Volumes/fast/ai/experiments/voice-extract-mac/.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"   sl   ø€ Ø˜‘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>.backwardI   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>d   s'   è ø€ ð á5ˆAô 	×%Ñ% a§f¡f×-Ù5ù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_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   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                   óh   — e Zd ZU ej                  ed<   dZeej                     ed<   dZee	   ed<   y)ú%supports_tensorlist.<locals>.MetadataÚ
input_specNÚoutput_specÚresult_is_tuple)
r   r   r   r   ÚTreeSpecr   rd   r   re   Úboolr   r   r   r*   rb   �   s1   … à×$Ñ$Ó$Ø26ˆ�X˜g×.Ñ.Ñ/Ó6Ø*.ˆ˜ $™Ô.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Úlistrc   rA   re   Útree_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¨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)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   r   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    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   rm   rn   rd   ÚAssertionErrorrk   rl   re   r@   rA   rI   Úlen)r0   Ú	flat_argsrc   r1   r3   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=   rE   rP   r   )r_   rr   ry   r€   r*   r   rx   rq   s       @@@@r   r[   r[   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rG   ©r@   r   ©rJ   Úls     r   rL   z%not_list_of_tensor.<locals>.<genexpr>ç   s   è ø€ Ð;±d°”z !¤VÓ,Ô,±dù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Ó)>Ð%>Ó>Éùs   ‚!#Tr†   r‡   s    r   rt   rt   ë   s-   € Ü�$œÔØÜ�$œÔÜÑMÉÓMÓMÐMØr   )ÚdataclassesÚcollections.abcr   r   Útypingr   r   r   Útorchr   r	   r
   r   Útorch.utilsr   Ú r   r   r   Ú
OpOverloadr^   r[   rn   rt   r   r   r   Ú<module>r’      s�   ðã Ý $Ý !ß *Ñ *ç ,Ó ,Ý å ô*�8ô *ð
 ×Ñ÷*ð *ó ð*ð
[˜4Ÿ?™?ð [°,ð [À8ó [ð|j˜Sð j Só jòZór   