§
    ŠŠtj¥0  ã                   ó�   — d dl Z d dlmZ d dlZd dlmc mZ d„ Zd„ Z	d„ Z
d„ Zd„ Ze j        d„ ¦   «         Zd	„ Zd
„ Zd„ Zd„ Zd„ ZdS )é    N)Ú
namedtuplec                 ó4   ‡ ‡— t          ‰ ¦  «        Šˆˆ fd„}|S )Nc                  óˆ  •— ‰                      d¦  «        r"‰                     d¦  «        j        } || i |¤ŽS ‰                      d¦  «        s‰                      d¦  «        rY‰                      d¦  «        rdnd}|dk    rdnd}‰                     |¦  «        j        }t	          d|› d‰› d|› d|› d�	¦  «        ‚ ‰| i |¤ŽS )	NÚautogradÚsave_for_backwardÚbackwardzWe found a 'z' registration for ú at z but were unable to find a 'zÔ' registration. To use the CustomOp API to register a backward formula, please provide us both a backward function and a 'save for backward' function via `impl_backward` and `impl_save_for_backward` respectively.)Ú	_has_implÚ	_get_implÚfuncÚlocationÚRuntimeError)ÚargsÚkwargsÚkernelÚmissingÚfoundÚlocÚautograd_fallbackÚ	custom_ops         €€úW/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_custom_op/autograd.pyÚinnerz*autograd_kernel_indirection.<locals>.inner   s&  ø€ Ø×Ò˜zÑ*Ô*ð 	+Ø×(Ò(¨Ñ4Ô4Ô9ˆFØ�6˜4Ð* 6Ð*Ð*Ð*ð
 ×ÒÐ2Ñ3Ô3ð 	°y×7JÒ7JÈ:Ñ7VÔ7Vð 	à'0×':Ò':¸:Ñ'FÔ'FÐVÐ#Ð#ÈJð ð ,3°jÒ+@Ð+@Ð'Ð'ÀjˆEØ×%Ò% eÑ,Ô,Ô5ˆCÝð:˜uð :ð :¸ð :ð :Øð:ð :Ø4;ð:ð :ð :ñô ð ð !Ð  $Ð1¨&Ð1Ð1Ð1ó    )Úautograd_not_implemented)r   r   r   s   ` @r   Úautograd_kernel_indirectionr      s7   øø€ Ý0°Ñ;Ô;Ðð2ð 2ð 2ð 2ð 2ð 2ð0 €Lr   c                 ó   ‡ — ˆ fd„}|S )Nc                  óø   •— t          j        ¦   «         r't          j        d„ | |f¦  «        rt	          d¦  «        ‚t           j                             ¦   «         5   ‰| i |¤Žcd d d ¦  «         S # 1 swxY w Y   d S )Nc                 óD   — t          | t          j        ¦  «        o| j        S ©N)Ú
isinstanceÚtorchÚTensorÚrequires_grad©Úxs    r   ú<lambda>z:autograd_not_implemented.<locals>.kernel.<locals>.<lambda>6   s   € •j ¥E¤LÑ1Ô1ÐE°a´o€ r   z.Autograd has not been implemented for operator)r!   Úis_grad_enabledÚpytreeÚtree_anyr   Ú_CÚ_AutoDispatchBelowAutograd)r   r   r   s     €r   r   z(autograd_not_implemented.<locals>.kernel4   sÐ   ø€ ÝÔ Ñ"Ô"ð 	Q¥v¤ØEÐEÈÈfÀ~ñ(
ô (
ð 	Qõ ÐOÑPÔPÐPÝŒX×0Ò0Ñ2Ô2ð 	.ð 	.Ø�9˜dÐ- fÐ-Ð-ð	.ð 	.ð 	.ð 	.ñ 	.ô 	.ð 	.ð 	.ð 	.ð 	.ð 	.ð 	.øøøð 	.ð 	.ð 	.ð 	.ð 	.ð 	.s   ÁA/Á/A3Á6A3© )r   r   s   ` r   r   r   3   s#   ø€ ð.ð .ð .ð .ð .ð €Mr   c                 ó^  — |��'t          |t          ¦  «        s|f}n|}t          |¦  «        t          |¦  «        k    r/t          dt          |¦  «        › dt          |¦  «        › �¦  «        ‚g }t	          t          ||¦  «        ¦  «        D ]�\  }\  }}t          |t          j        ¦  «        r|s|                     |¦  «         Œ:t          |t          ¦  «        r|s| 
                    |¦  «         Œg|r&t          d|› d|› dt          |¦  «        › d�¦  «        ‚Œ�|r | j        |Ž  d S d S d S )Nz output_differentiability length z != output length zWith output_differentiability=z	. At idx z , we received an object of type za that is not a Tensor, so it cannot have be marked as differentiable in output_differentiability.)r    ÚtupleÚlenÚAssertionErrorÚ	enumerateÚzipr!   r"   ÚappendÚlistÚextendr   ÚtypeÚmark_non_differentiable)ÚctxÚoutputÚoutput_differentiabilityÚtuple_outputÚnon_differentiable_tensorsÚidxÚdifferentiableÚouts           r   r7   r7   ?   s²  € ð  Ñ+Ý˜&¥%Ñ(Ô(ð 	"Ø"˜9ˆLˆLà!ˆLÝÐ'Ñ(Ô(­C°Ñ,=Ô,=Ò=Ð=Ý ð8µ3Ð7OÑ3PÔ3Pð 8ð 8Ý$'¨Ñ$5Ô$5ð8ð 8ñô ð ð &(Ð"Ý*3ÝÐ(¨,Ñ7Ô7ñ+
ô +
ð 	ð 	Ñ&ˆCÑ&�. #õ ˜#�uœ|Ñ,Ô,ð Ø%ð ;Ø.×5Ò5°cÑ:Ô:Ð:ØÝ˜#�tÑ$Ô$ð Ø%ð ;Ø.×5Ò5°cÑ:Ô:Ð:ØØð Ý"ð1Ð5Mð 1ð 1Ø!ð1ð 1ÝCGÈÁ9Ä9ð1ð 1ð 1ñô ð ðð &ð 	EØ'ˆCÔ'Ð)CÐDÐDÐDÐDð= ,Ð+ð:	Eð 	Er   c                 ó&   ‡ ‡‡‡‡‡— ˆˆˆˆˆˆ fd„}|S )Nc                  ó  •‡‡— t          j        | ¦  «        \  }Šd Šˆ
ˆˆˆˆˆfd„}ˆˆ	ˆfd„}t          ‰	j        dz   ||¦  «        } |j        |Ž }‰€t          d¦  «        ‚t          j        t          |¦  «        ‰¦  «        S )Nc                 ó  •— |                       d¦  «         t          j        t          |¦  «        ‰¦  «        }t          j                             ¦   «         5   ‰|Ž }d d d ¦  «         n# 1 swxY w Y   t          ‰t          j        t          |¦  «        ¦  «        }t          ‰|¦  «        } ‰||¦  «        }t          | ||f¦  «         t          | |‰
¦  «         t          j        |¦  «        \  }Š	t          |¦  «        S )NT)Úset_materialize_gradsr(   Útree_unflattenr4   r!   r*   r+   Únamedtuple_argsÚtree_mapr6   Úsave_pytree_for_backwardr7   Útree_flattenr.   )r8   Ú	flat_argsr   r9   Ú	args_infoÚsave_for_backward_fn_inputsÚto_saveÚflat_outputÚop_overloadÚout_specr:   Úsave_for_backward_fnÚschemaÚspecs           €€€€€€r   Úforwardz9construct_autograd_kernel.<locals>.apply.<locals>.forwardr   s1  ø€ Ø×%Ò% dÑ+Ô+Ð+ÝÔ(­¨i©¬¸$Ñ?Ô?ˆDÝ”×4Ò4Ñ6Ô6ð ,ð ,Ø$˜ dÐ+�ð,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,õ (¨µ´ÅÀdÑ0KÔ0KÑLÔLˆIå*9¸&À$Ñ*GÔ*GÐ'Ø*Ð*Ð+FÈÑOÔOˆGå$ S¨7°IÐ*>Ñ?Ô?Ð?Ý# C¨Ð1IÑJÔJÐJõ %+Ô$7¸Ñ$?Ô$?Ñ!ˆK˜Ý˜Ñ%Ô%Ð%s   ÁA)Á)A-Á0A-c                 ó0  •— ‰	€t          d¦  «        ‚t          j        t          |¦  «        ‰	¦  «        }t	          | ¦  «        \  }}t          ¦   «         }t          |t          ¦  «        s|f} ‰||g|¢R Ž }t          |‰|¦  «         t          ||¦  «        S )Núout_spec is unexpectedly None)
r0   r(   rD   r4   Úunpack_savedÚobjectr    r.   Úvalidate_grad_inputs_dictÚgrad_inputs_dict_to_flat_tuple)
r8   Úflat_grad_outputÚgradsÚsavedrJ   Ú	inner_ctxÚgrad_inputs_dictÚbackward_fnr   rO   s
          €€€r   r   z:construct_autograd_kernel.<locals>.apply.<locals>.backward…   s©   ø€ ØÐÝ$Ð%DÑEÔEÐEÝÔ)­$Ð/?Ñ*@Ô*@À(ÑKÔKˆEÝ+¨CÑ0Ô0ÑˆE�9õ ™œˆIÝ˜e¥UÑ+Ô+ð !Ø˜�Ø*˜{¨9°eÐD¸eÐDÐDÐDÐõ &Ð&6¸	À9ÑMÔMÐMÝ1Ð2BÀIÑNÔNÐNr   Ú	_customoprU   )r(   rH   Úgen_autograd_functionÚ_opnameÚapplyr0   rD   r4   )r   rI   rS   r   Úgenerated_clsrM   rO   rR   r_   r   rN   r:   rP   rQ   s         @@€€€€€€r   rc   z(construct_autograd_kernel.<locals>.applyn   sÛ   øøø€ Ý Ô-¨dÑ3Ô3‰ˆ	�4Øˆð	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð 	&ð&	Oð 	Oð 	Oð 	Oð 	Oð 	Oð 	Oõ" .ØÔ Ñ+¨W°hñ
ô 
ˆð *�mÔ)¨9Ð5ˆØÐÝ Ð!@ÑAÔAÐAÝÔ$¥T¨+Ñ%6Ô%6¸ÑAÔAÐAr   r,   )rQ   r:   r   rN   rP   r_   rc   s   `````` r   Úconstruct_autograd_kernelre   f   sL   øøøøøø€ ð/Bð /Bð /Bð /Bð /Bð /Bð /Bð /Bð /Bð /Bðb €Lr   c                 ó‚   — t          | t          j        j        ft	          |¦  «        t	          |¦  «        dœ¦  «        }|S )N)rS   r   )r6   r!   r   ÚFunctionÚstaticmethod)ÚnamerS   r   rd   s       r   ra   ra   ¢   sG   € ÝØÝ	ŒÔ	 Ð"å# GÑ,Ô,Ý$ XÑ.Ô.ð	
ð 	
ñô €Mð Ðr   c                 ó€   — d„ | j         j        D ¦   «         }t          | j        ¦  «        dz   }t	          ||¦  «        }|S )Nc                 ó   — g | ]	}|j         ‘Œ
S r,   )ri   ©Ú.0Úargs     r   ú
<listcomp>z'namedtuple_args_cls.<locals>.<listcomp>°   s   € Ð=Ð=Ð=˜CˆsŒxÐ=Ð=Ð=r   Ú_args)Ú	argumentsÚflat_allÚstrri   r   )rQ   Úattribsri   Ú	tuple_clss       r   Únamedtuple_args_clsrv   ®   sD   € à=Ð= 6Ô#3Ô#<Ð=Ñ=Ô=€GÝˆvŒ{ÑÔ˜gÑ%€Då˜4 Ñ)Ô)€IØÐr   c                 ó’   — t          |t          ¦  «        st          dt          |¦  «        › �¦  «        ‚t	          | ¦  «        } ||Ž S )Nzexpected tuple, got )r    r.   r0   r6   rv   )rQ   r   ru   s      r   rE   rE   ·   sL   € Ý�d�EÑ"Ô"ð BÝÐ@µD¸±J´JÐ@Ð@ÑAÔAÐAÝ# FÑ+Ô+€IØˆ9�dÐÐr   c                 óœ  ‡— ˆfd„}t          | t          ¦  «        s |dt          | ¦  «        › �¦  «         d„ ‰j        j        j        D ¦   «         }|                      ¦   «         }||k    r |d|› d|› d�¦  «         |                      ¦   «         D �]¸\  }}t          ||¦  «        }t          |t          ¦  «        �r t          |t          t          f¦  «        s |d|› dt          |¦  «        › d	�¦  «         t          |¦  «        t          |¦  «        k    r. |d|› d
t          |¦  «        › dt          |¦  «        › �¦  «         t          t          ||¦  «        ¦  «        D ]w\  }	\  }
}|
€Œt          |
t          j        ¦  «        s! |d|› dt          |
¦  «        › d|	› �¦  «         t!          |t          j        ¦  «        s |d|› d|	› d|	› d|› �¦  «         Œx�ŒL|€�ŒPt          |t          j        ¦  «        s |dt          |¦  «        › d|› d�¦  «         t!          |t          j        ¦  «        s |d|› d|› d|› d�¦  «         �Œºd S )Nc                 óh   •— ‰                      d¦  «        }t          d‰› d|j        › d| › �¦  «        ‚)Nr   z%In the backward function defined for r	   z using the CustomOp API, )r   r   r   )Úwhatr   Ú
forward_ops     €r   Úerrorz(validate_grad_inputs_dict.<locals>.error¿   s]   ø€ Ø×'Ò'¨
Ñ3Ô3ˆÝðB°Jð Bð BØÔ ðBð BØ;?ðBð Bñ
ô 
ð 	
r   zBexpected the output of the backward function to be a dict but got c                 óN   — h | ]"}|j                              ¦   «         ¯|j        ’Œ#S r,   )r6   Úis_tensor_likeri   rl   s     r   ú	<setcomp>z,validate_grad_inputs_dict.<locals>.<setcomp>Ì   s>   € ð ð ð àØŒ8×"Ò"Ñ$Ô$ðØŒðð ð r   z3expected the returned grad_input dict to have keys z	 but got zÖ. The backward function must return a gradient (can be None) for each arg to the CustomOp that may be a Tensor or Sequence[Tensor]. Args declared to be non-Tensor-like types should not appear in the grad_input dictzfor input 'zR' expected the grad_input dict to hold a list of gradients but got object of type ú.z1' expected the grad_input dict to hold a list of z gradients but got z\' expected the grad_input dict to hold a list of None or Tensor gradients but got object of z
 at index z(', got a Tensor as the gradient for the z(-th value but expected None because the z(-th value was not a Tensor (it was type zgot object of type z as the gradient for input 'z:', but expected the gradient to be either None or a Tensorz(got a Tensor as the gradient for input 'z3' but expected None as the gradient because input 'z ' was not a Tensor (it was type z).)r    Údictr6   Ú_schemarq   rr   ÚkeysÚitemsÚgetattrr4   r.   r/   r1   r2   r!   r"   Ú
issubclass)r^   r{   rJ   r|   Úexpected_keysÚactual_keysri   ÚgradÚarg_infor=   ÚgÚinfos    `          r   rX   rX   ¾   s‘  ø€ ð
ð 
ð 
ð 
ð 
õ Ð&­Ñ-Ô-ð 
Øˆð,ÝÐ(Ñ)Ô)ð,ð ,ñ	
ô 	
ð 	
ð
ð àÔ%Ô/Ô8ðñ ô €Mð
 #×'Ò'Ñ)Ô)€KØ˜Ò#Ð#Øˆð&Øð&ð &Ø'2ð&ð &ð &ñ	
ô 	
ð 	
ð '×,Ò,Ñ.Ô.ð /ñ /‰
ˆˆdÝ˜9 dÑ+Ô+ˆå�h¥Ñ%Ô%ñ 	Ý˜d¥U­D MÑ2Ô2ð Ø�ð% $ð %ð %å˜D‘z”zð%ð %ð %ñô ð õ
 �4‰yŒy�C ™MœMÒ)Ð)Ø�ð# $ð #ð #Ý&)¨(¡m¤mð#ð #å˜4‘y”yð#ð #ñô ð õ
 #,­C°°hÑ,?Ô,?Ñ"@Ô"@ð ð ‘�‘Y�a˜Ø�9ØÝ! !¥U¤\Ñ2Ô2ð Ø�Eð> dð >ð >å%)¨!¡W¤Wð>ð >à8;ð>ð >ñô ð õ
 " $­¬Ñ5Ô5ð Ø�Eð+ dð +ð +Ø#&ð+ð +à"ð+ð +ð !)ð+ð +ñô ð øñ àˆ<ÙÝ˜$¥¤Ñ-Ô-ð 	ØˆEðK¥d¨4¡j¤jð Kð KØðKð Kð Kñô ð õ
 ˜(¥E¤LÑ1Ô1ð 	ØˆEð>¸4ð >ð >Ø@Dð>ð >à19ð>ð >ð >ñô ð ùðW/ð /r   c                 ó2  — g }|                      ¦   «                              ¦   «         D ]N\  }}|| vr*|                     t          j        d„ |¦  «        ¦  «         Œ3|                     | |         ¦  «         ŒOt          t          j        |¦  «        ¦  «        S )Nc                 ó   — d S r   r,   r$   s    r   r&   z0grad_inputs_dict_to_flat_tuple.<locals>.<lambda>  s   € °D€ r   )Ú_asdictr„   r3   r(   rF   r.   Útree_leaves)r^   rJ   Úresultri   rŠ   s        r   rY   rY     s•   € Ø€FØ#×+Ò+Ñ-Ô-×3Ò3Ñ5Ô5ð .ð .‰ˆˆhØÐ'Ð'Ð'Ø�MŠM�&œ/¨.¨.¸(ÑCÔCÑDÔDÐDØØ�ŠÐ& tÔ,Ñ-Ô-Ð-Ð-Ý•Ô# FÑ+Ô+Ñ,Ô,Ð,r   c                 ó@  — t          j        |¦  «        \  }}t          |¦  «        }d„ t          |¦  «        D ¦   «         }d„ t          |¦  «        D ¦   «         }d„ |D ¦   «         }d„ |D ¦   «         }|| _        || _         | j        |Ž  || _        || _        || _	        d S )Nc                 óL   — g | ]!\  }}t          |t          j        ¦  «        ¯|‘Œ"S r,   ©r    r!   r"   ©rm   r=   Úthings      r   ro   z,save_pytree_for_backward.<locals>.<listcomp>  s=   € ð ð ð Ù��UµzÀ%ÍÌÑ7VÔ7VðØðð ð r   c                 óL   — g | ]!\  }}t          |t          j        ¦  «        °|‘Œ"S r,   r”   r•   s      r   ro   z,save_pytree_for_backward.<locals>.<listcomp>"  s>   € ð ð ð áˆC�Ý˜%¥¤Ñ.Ô.ðØðð ð r   c                 óF   — g | ]}t          |t          j        ¦  «        ¯|‘ŒS r,   r”   ©rm   r–   s     r   ro   z,save_pytree_for_backward.<locals>.<listcomp>'  s)   € ÐPÐPÐP˜µ
¸5Å%Ä,Ñ0OÔ0OÐPˆuÐPÐPÐPr   c                 óF   — g | ]}t          |t          j        ¦  «        °|‘ŒS r,   r”   r™   s     r   ro   z,save_pytree_for_backward.<locals>.<listcomp>(  s)   € ÐXÐXÐX˜U½
À5Í%Ì,Ñ8WÔ8WÐX�5ÐXÐXÐXr   )
r(   rH   r/   r1   rR   Únum_eltsr   Útensor_idxsÚsaved_non_tensorsÚnon_tensor_idxs)	r8   ÚstuffÚ
flat_stuffrR   r›   rœ   rž   ÚtensorsÚnon_tensorss	            r   rG   rG     sÒ   € ÝÔ*¨5Ñ1Ô1Ñ€J�Ý�:‰Œ€Hðð Ý'¨
Ñ3Ô3ðñ ô €Kðð å# JÑ/Ô/ðñ ô €Oð
 QÐP *ÐPÑPÔP€GØXÐX jÐXÑXÔX€Kà€C„HØ€C„LØ€CÔ˜7Ð#Ð#Ø!€C„OØ'€CÔØ)€CÔÐÐr   c                 óä   — d g| j         z  }t          | j        | j        ¦  «        D ]
\  }}|||<   Œt          | j        | j        ¦  «        D ]
\  }}|||<   Œt          j        || j        ¦  «        }|S r   )	r›   r2   Úsaved_tensorsrœ   r�   rž   r(   rD   rR   )r8   r    Útensorr=   Ú
non_tensorrŸ   s         r   rV   rV   3  s„   € Ø�˜#œ,Ñ&€JÝ˜3Ô,¨c¬oÑ>Ô>ð !ð !‰ˆ�Ø ˆ
�3‰ˆÝ˜sÔ4°cÔ6IÑJÔJð %ð %‰ˆ
�CØ$ˆ
�3‰ˆÝÔ! *¨c¬hÑ7Ô7€EØ€Lr   )Ú	functoolsÚcollectionsr   r!   Útorch.utils._pytreeÚutilsÚ_pytreer(   r   r   r7   re   ra   Ú	lru_cacherv   rE   rX   rY   rG   rV   r,   r   r   ú<module>r­      s  ðà Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $ðð ð ð@	ð 	ð 	ð$Eð $Eð $EðN9ð 9ð 9ðx	ð 	ð 	ð Ôðð ñ Ôððð ð ðMð Mð Mð`-ð -ð -ð*ð *ð *ð.ð ð ð ð r   