§
    ŠŠtjL%  ã                   óð   — 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dS )é    N)ÚCallable)Ú	dataclass)ÚAnyÚProtocol)Ú_CÚ_opsÚautogradÚTensor)Ú_pytreeé   )Úutilsc                   ó0   — e Zd ZU edz  ed<   edz  ed<   dS )ÚInfoProtocolNÚ_backward_fnÚ_setup_context_fn©Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__© ó    úU/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_library/autograd.pyr   r      s2   € € € € € € Ø˜T‘/Ð!Ð!Ñ!Ø $‘Ð&Ð&Ñ&Ð&Ð&r   r   c                   ó0   — e Zd ZU edz  ed<   edz  ed<   dS )ÚInfoNr   r   r   r   r   r   r   r      s2   € € € € € € à˜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        ¢R D ¦   «         ¦  «        rt          ‰¦  «        Šˆˆˆ	ˆ fd
„}|S )NÚGeneratedBackwardFor_Ú_c                   ó>   — e Zd ZU ej        ed<   eeef         ed<   dS )ú$make_autograd_impl.<locals>.MetadataÚkeysetÚkeyword_only_argsN)	r   r   r   r   ÚDispatchKeySetr   ÚdictÚstrr   r   r   r   ÚMetadatar#      s5   € € € € € € àÔ!Ð!Ð!Ñ!Ø  S œ>Ð)Ð)Ñ)Ð)Ð)r   r)   c                  óÞ   •— | d         }| d d…         } t          j        ¦   «         5  |j        }|j        } ‰j        |t           j        z  g| ¢R i |¤Ž}|cd d d ¦  «         S # 1 swxY w Y   d S )Néÿÿÿÿ)r   Ú_AutoDispatchBelowAutogradr$   r%   Ú
redispatchÚ_after_autograd_keyset)ÚargsÚmetadatar$   ÚkwargsÚresultr   s        €r   Úforward_no_gradz+make_autograd_impl.<locals>.forward_no_grad"   sÈ   ø€ Ø˜”8ˆØ�C�R�CŒyˆåÔ*Ñ,Ô,ð 	ð 	Ø”_ˆFØÔ/ˆFØ"�R”] 6­BÔ,EÑ#EÐWÈÐWÐWÐWÐPVÐWÐWˆFØð		ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   §.A"Á"A&Á)A&c                 ó�  •— |d         }|d d…         }t          j        ¦   «         5  |j        }|j        } ‰j        |t           j        z  g|¢R i |¤Ž}‰j        rRt          j        ‰j	        ||¦  «        \  }}‰r‰                     | |||¬¦  «         n‰                     | ||¬¦  «         |cd d d ¦  «         S # 1 swxY w Y   d S )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,   sB  ø€ Ø˜”8ˆØ�C�R�CŒyˆåÔ*Ñ,Ô,ð 	ð 	Ø”_ˆFØÔ/ˆFØ"�R”] 6­BÔ,EÑ#EÐWÈÐWÐWÐWÐPVÐWÐWˆFØÔ%ð Põ  %Ô2°2´:¸tÀVÑLÔL‘��fà&ð PØ×*Ò*Ø¨À&ÐQWð +ñ ô ð ð ð ×*Ò*¨s¸4ÈÐ*ÑOÔOÐOØð/	ð 	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	ð 	ð 	s   §BB;Â;B?ÃB?c                 óô   •— ‰j         r^	 | j        }| j        d d…         | _         ‰j         | g|¢R Ž }|| _        n# || _        w xY wt          |t          ¦  «        rg |¢d ‘R S |d fS t	          d‰› d�¦  «        ‚)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¸CÔ'@�Ô$Ø*˜Ô*¨3Ð7°Ð7Ð7Ð7�à'<�Ô$Ð$øÐ'<�Ô$Ð<Ð<Ð<Ð<Ý˜&¥%Ñ(Ô(ð 'Ø&˜� ��Ð&Ø˜4�<ÐÝð8¨"ð 8ð 8ð 8ñ
ô 
ð 	
s	   Š); »	A)r<   rD   c              3   óH   K  — | ]}t          j        |j        ¦  «        V — Œd S ©N)r   Úis_tensorlist_like_typeÚtype)Ú.0Úas     r   ú	<genexpr>z%make_autograd_impl.<locals>.<genexpr>d   sC   è è € ð ð àõ 	Ô% a¤fÑ-Ô-ðð ð ð ð ð r   c                 ól  •— t          j        ‰¦  «        rOt          j        ¦   «         r(t          j        |i |¤Žrt          ‰j        › d�¦  «        ‚ ‰g |¢ ‰| |¦  «        ‘R Ž S t          j        ¦   «         r(t          j        |Ž r ‰j        g |¢ ‰| |¦  «        ‘R Ž }n ‰g |¢ ‰| |¦  «        ‘R Ž }|S )Nzu(): functions with out=... arguments don't support automatic differentiation, but one of the arguments requires grad.)r   Úis_outr   Úis_grad_enabledÚ_any_requires_gradrA   Ú_opnameÚapply)r$   r/   r%   r2   Ú	Generatedr)   r3   r   s       €€€€r   Úautograd_implz)make_autograd_impl.<locals>.autograd_impll   s  ø€ ÝŒ<˜ÑÔð 		OÝÔ!Ñ#Ô#ð ­Ô(=Øð)Ø*ð)ð )ð õ #Ø”zð %ð %ð %ñô ð ð
 #�?ÐN DÐN¨(¨(°6Ð;LÑ*MÔ*MÐNÐNÐNÐNåÔÑÔð 	Q¥BÔ$9¸4Ð$@ð 	QØ$�Y”_ÐP dÐP¨H¨H°VÐ=NÑ,OÔ,OÐPÐPÐPˆFˆFà$�_ÐP dÐP¨H¨H°VÐ=NÑ,OÔ,OÐPÐPÐPˆFØˆr   )Ú
_namespacerP   Ú_overloadnamer   r;   r:   r   rH   r	   ÚFunctionÚstaticmethodÚanyÚ	argumentsÚreturnsÚsupports_tensorlist)r   r   Únamer<   rD   ÚschemarS   rR   r)   r3   r;   s   ``     @@@@r   Úmake_autograd_implr^      s�  øøøøøø€ ØW¨¬ÐWÐW¸¼
ÐWÐWÀRÔEUÐWÐW€DåÔ3°B´JÑ?Ô?Ðåð*ð *ð *ð *ð *ñ *ô *ñ „Yð*ðð ð ð ð ðð ð ð ð ð ð ð:
ð 
ð 
ð 
ð 
ð 
õ" ØÝ	Ô	Ðå# GÑ,Ô,Ý$ XÑ.Ô.ð	
ð 	
ñô €Ið ŒZ€FÝ
ð ð à5�6Ô#Ð5 f¤nÐ5Ð5ðñ ô ñ ô ð 3õ (¨	Ñ2Ô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                   óV   — e Zd ZU ej        ed<   dZej        dz  ed<   dZedz  ed<   dS )ú/supports_tensorlist.<locals>.TensorListMetadataÚ
input_specNÚoutput_specÚresult_is_tuple)	r   r   r   r   ÚTreeSpecr   rd   re   Úboolr   r   r   ÚTensorListMetadatarb   Œ   sM   € € € € € € àÔ$Ð$Ð$Ñ$Ø/3ˆ�WÔ%¨Ñ,Ð3Ð3Ñ3Ø'+ˆ˜ ™Ð+Ð+Ñ+Ð+Ð+r   rh   c                 óÀ  •— |d         }|d d…         }t          |‰¦  «        st          d¦  «        ‚t          j        t	          |¦  «        |j        ¦  «        } ‰| g|¢R Ž }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   r@   re   Útree_flattenÚnot_list_of_tensorrd   ÚhasattrrA   rj   )r5   r/   r0   r2   Úflat_resultrd   rh   Úorig_forwards         €€r   Únew_forwardz(supports_tensorlist.<locals>.new_forward’   sú   ø€ Ø˜”8ˆØ�C�R�CŒyˆÝ˜(Ð$6Ñ7Ô7ð 	Ý%ð/ñô ð õ
 Ô%¥d¨4¡j¤j°(Ô2EÑFÔFˆØ�˜cÐ) DÐ)Ð)Ð)ˆÝ#-¨fµeÑ#<Ô#<ˆÔ ØÔ'ð 	Ø�YˆFÝ#*Ô#7¸Õ@RÑ#SÔ#SÑ ˆ�[Ø*ˆÔå�3˜Ñ'Ô'ð 	ÝØRñô ð ð $ˆÔå�[Ñ!Ô!Ð!r   c                 ó6  •— t          | d¦  «        st          d¦  «        ‚| j        }t          j        t          |¦  «        |j        ¦  «        }| j        }	 t          j        t          | j        d d…         ¦  «        |j        ¦  «        | _         ‰| g|¢R Ž }|| _        n# || _        w xY wt          |t          ¦  «        s|f}t          j        |t          ¦  «        \  }}||j        k    rt          d|› d|j        › d�¦  «        ‚t          |d gz   ¦  «        S )Nrj   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))rp   rk   rj   r   rl   rm   rd   r>   rc   r?   r@   rn   Ú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«   sf  ø€ Ý�s˜NÑ+Ô+ð 	Ý%ð9ñô ð ð Ô#ˆÝÔ&¥t¨E¡{¤{°HÔ4HÑIÔIˆð !$Ô 4Ðð	9Ý#*Ô#9Ý�SÔ)¨#¨2¨#Ô.Ñ/Ô/°Ô1Dñ$ô $ˆCÔ ð (˜-¨Ð4¨eÐ4Ð4Ð4ˆKà#8ˆCÔ Ð øÐ#8ˆCÔ Ð8Ð8Ð8Ð8å˜+¥uÑ-Ô-ð 	)Ø&˜.ˆKõ .5Ô-AØÕ4ñ.
ô .
Ñ*ÐÐ*ð ˜xÔ2Ò2Ð2Ýð2Ø'7ð2ð 2àÔ&ð2ð 2ð 2ñô ð õ
 Ð%¨¨Ñ.Ñ/Ô/Ð/s   ÁAB! Â!	B*c                  óÒ  •— t          j        | t          ¬¦  «        \  }} ‰|¦  «        } ‰g |¢|‘R Ž }|j        €t	          d¦  «        ‚t          j        t          |¦  «        |j        ¦  «        }|j        snt          |t          ¦  «        st	          dt          |¦  «        › �¦  «        ‚t          |¦  «        dk    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   rn   ro   rd   ÚAssertionErrorrl   rm   re   r?   r@   rH   Úlen)r/   Ú	flat_argsrc   r0   r2   rh   Ú
orig_applys        €€r   Ú	new_applyz&supports_tensorlist.<locals>.new_apply×   sû   ø€ Ý 'Ô 4°TÕCUÐ VÑ VÔ VÑˆ	�:Ø%Ð% jÑ1Ô1ˆØ�Ð1˜YÐ1¨Ð1Ð1Ð1ˆØÔÐ'Ý Ð!HÑIÔIÐIÝÔ'­¨V©¬°hÔ6JÑKÔKˆØÔ'ð 	Ý˜f¥eÑ,Ô,ð RÝ$Ð%PÅ$ÀvÁ,Ä,Ð%PÐ%PÑQÔQÐQÝ�6‰{Œ{˜aÒÐÝ$ØI½CÀ¹K¼KÐIÐIñô ð ð ˜!”9ÐØˆr   )r<   rD   rQ   r   )r_   rs   rz   r�   rh   r€   ry   rr   s       @@@@r   r[   r[   �   sÁ   øøøø€ ð ”;€LØ”L€MØ”€Jåð,ð ,ð ,ð ,ð ,ñ ,ô ,ñ „Yð,ð
"ð "ð "ð "ð "ð "ð2*0ð *0ð *0ð *0ð *0ðXð ð ð ð ð ð" €C„KØ€C„LØ€C„IØ€Jr   c                 ó�   — t          | t          ¦  «        rdS t          | t          ¦  «        rt          d„ | D ¦   «         ¦  «        S dS )NFc              3   óB   K  — | ]}t          |t          ¦  «         V — Œd S rF   ©r?   r
   ©rI   Úls     r   rK   z%not_list_of_tensor.<locals>.<genexpr>ò   s/   è è € Ð;Ð;°•z !¥VÑ,Ô,Ð,Ð;Ð;Ð;Ð;Ð;Ð;r   T©r?   r@   rm   rX   ©Útrees    r   ro   ro   î   sM   € Ý�$�ÑÔð ØˆuÝ�$�ÑÔð <ÝÐ;Ð;°dÐ;Ñ;Ô;Ñ;Ô;Ð;Øˆ4r   c                 ó�   — t          | t          ¦  «        rdS t          | t          ¦  «        rt          d„ | D ¦   «         ¦  «        S dS )NFc              3   óJ   K  — | ]}|d uot          |t          ¦  «         V — Œd S rF   r„   r…   s     r   rK   z.not_list_of_optional_tensor.<locals>.<genexpr>ú   s8   è è € ÐMÐMÀ1�1˜D�=Ð>­°AµvÑ)>Ô)>Ð%>ÐMÐMÐMÐMÐMÐMr   Tr‡   rˆ   s    r   ru   ru   ö   sN   € Ý�$�ÑÔð ØˆuÝ�$�ÑÔð NÝÐMÐMÈÐMÑMÔMÑMÔMÐMØˆ4r   )ÚdataclassesÚcollections.abcr   r   Útypingr   r   Útorchr   r   r	   r
   Útorch.utilsr   Ú r   r   r   Ú
OpOverloadr^   r[   ro   ru   r   r   r   ú<module>r“      s{  ðà Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø  Ð  Ð  Ð  Ð  Ð  Ð  Ð  à ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð ð'ð 'ð 'ð 'ð '�8ñ 'ô 'ð 'ð
 Ôð'ð 'ð 'ð 'ð 'ñ 'ô 'ñ Ôð'ð
f˜4œ?ð f°,ð fÀ8ð fð fð fð fðRj˜Sð j Sð jð jð jð jðZð ð ðð ð ð ð r   