§
    ŠŠtjì*  ã                  ó&  — d dl mZ d dlZd dlZd dlmZmZ d dlZd dlm	c m
Z d dlmZmZmZmZmZ d dlmZ erd dlmZmZmZ d dlmZ d dlmZ ej        j        j        Zd0d„Zd0d„Zd1d„Z d2d„Z!d3d„Z"d4d#„Z#	 	 	 	 	 d5d6d-„Z$ G d.„ d/e¦  «        Z%dS )7é    )ÚannotationsN)ÚAnyÚTYPE_CHECKING)Ú
FakeTensorÚFakeTensorModeÚMetadataMismatchErrorÚtree_flatten_onlyÚUnsupportedFakeTensorException)ÚTorchDispatchMode)ÚCallableÚMappingÚSequence)Ú
OpOverload)ÚPyTreeÚoutputsr   ÚinputsÚreturnÚboolc                ó²   ‡— d„ t          t          j        |¦  «        D ¦   «         Št          ˆfd„t          t          j        | ¦  «        D ¦   «         ¦  «        S )Nc                ó~   — h | ]:}t           j                             |¦  «        ¯!|                     ¦   «         j        ’Œ;S © ©ÚtorchÚ_CÚ_has_storageÚ_typed_storageÚ_cdata©Ú.0Úinps     úZ/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_subclasses/fake_utils.pyú	<setcomp>z'outputs_alias_inputs.<locals>.<setcomp>   sM   € ð ð ð àÝŒ8× Ò  Ñ%Ô%ðØ×ÒÑÔÔ#ðð ð ó    c              3  óŒ   •K  — | ]>}t           j                             |¦  «        o|                     ¦   «         j        ‰v V — Œ?d S ©Nr   )r   ÚoutÚinput_storagess     €r!   ú	<genexpr>z'outputs_alias_inputs.<locals>.<genexpr>#   s`   øè è € ð ð àõ 	Œ×Ò˜cÑ"Ô"ÐT s×'9Ò'9Ñ';Ô';Ô'BÀnÐ'Tðð ð ð ð ð r#   ©r	   r   ÚTensorÚany)r   r   r'   s     @r!   Úoutputs_alias_inputsr,      ss   ø€ ðð å$¥U¤\°6Ñ:Ô:ðñ ô €Nõ
 ð ð ð ð å$¥U¤\°7Ñ;Ô;ðñ ô ñ ô ð r#   c                ó²   ‡— d„ t          t          j        |¦  «        D ¦   «         Št          ˆfd„t          t          j        | ¦  «        D ¦   «         ¦  «        S )Nc                ó,   — h | ]}t          |¦  «        ’ŒS r   ©Úidr   s     r!   r"   z%outputs_are_inputs.<locals>.<setcomp>*   s   € ÐLÐLÐL˜S•�C‘”ÐLÐLÐLr#   c              3  ó:   •K  — | ]}t          |¦  «        ‰v V — Œd S r%   r/   )r   r&   Ú	input_idss     €r!   r(   z%outputs_are_inputs.<locals>.<genexpr>+   s.   øè è € ÐXÐX¨�r�#‰wŒw˜)Ð#ÐXÐXÐXÐXÐXÐXr#   r)   )r   r   r2   s     @r!   Úoutputs_are_inputsr3   )   sS   ø€ ØLÐLÕ$5µe´lÀFÑ$KÔ$KÐLÑLÔL€IÝÐXÐXÐXÐXÕ/@ÅÄÈwÑ/WÔ/WÐXÑXÔXÑXÔXÐXr#   c                ó  — t          ¦   «         }t          t          j        | ¦  «        D ]W}t          j                             |¦  «        sŒ"|                     ¦   «         j        }||v r dS |                     |¦  «         ŒXdS )NTF)	Úsetr	   r   r*   r   r   r   r   Úadd)r   Ústoragesr&   Ústors       r!   Úoutput_alias_each_otherr9   .   s�   € Ý‰uŒu€HÝ ¥¤¨wÑ7Ô7ð ð ˆÝŒx×$Ò$ SÑ)Ô)ð 	ØØ×!Ò!Ñ#Ô#Ô*ˆØ�8ÐÐØ�4�4Ø�Š�TÑÔÐÐØˆ5r#   ÚcontextÚstrÚreal_outÚreal_inÚfake_outÚfake_inÚNonec                óp  — t          ||¦  «        }t          ||¦  «        }||k    rt          | › d|› d|› �¦  «        ‚t          ||¦  «        }t          ||¦  «        }||k    rt          | › d|› d|› �¦  «        ‚t          |¦  «        }	t          |¦  «        }
|	|
k    rt          | › d|
› d|	› �¦  «        ‚d S )Nz( mismatch in outputs_alias_inputs check ú != z& mismatch in outputs_are_inputs check z, mismatch in outputs_alias_each_other check )r,   r   r3   r9   )r:   r<   r=   r>   r?   Ú
r_aliasingÚ
f_aliasingÚr_identity_eqÚf_identity_eqÚr_output_alias_each_otherÚf_output_alias_each_others              r!   Ú_check_alias_inforI   :   s!  € õ & h°Ñ8Ô8€JÝ% h°Ñ8Ô8€JØ�ZÒÐÝ#ØÐ\Ð\À
Ð\Ð\ÐPZÐ\Ð\ñ
ô 
ð 	
õ ' x°Ñ9Ô9€MÝ& x°Ñ9Ô9€MØ˜Ò%Ð%Ý#ØÐ`Ð`¸mÐ`Ð`ÐQ^Ð`Ð`ñ
ô 
ð 	
õ !8¸Ñ AÔ AÐÝ 7¸Ñ AÔ AÐØ Ð$=Ò=Ð=Ý#Øð Jð JØ(ðJð JØ.GðJð Jñ
ô 
ð 	
ð >Ð=r#   Úfuncr   ÚidxÚintÚeÚ	Exceptionc                óN  — | t           j        j        u s| t           j        j        u r|dv rdt	          |¦  «        v rdS | t           j        j        u s| t           j        j        u r|dv rdt	          |¦  «        v rdS | t           j        j        u r|dv rdt	          |¦  «        v rdS dS )N)é   é   ÚDevicesT)é   é   F)ÚatenÚ#_scaled_dot_product_flash_attentionÚdefaultÚ_flash_attention_forwardÚreprÚ'_scaled_dot_product_efficient_attentionÚ_efficient_attention_forwardÚ#_scaled_dot_product_cudnn_attention)rJ   rK   rM   s      r!   Úis_sdpa_errorr]   X   s½   € ð •DÔ<ÔDÐDÐDØ•tÔ4Ô<Ð<Ð<à�6ˆMˆMØ�˜a™œÐ Ð àˆtð •DÔ@ÔHÐHÐHØ•tÔ8Ô@Ð@Ð@à�6ˆMˆMØ�˜a™œÐ Ð àˆtà•Ô8Ô@Ð@Ð@Ø�6ˆMˆMØ�˜a™œÐ Ð àˆtØˆ5r#   Úten_listúlist[FakeTensor | Any]ú%list[FakeTensor | torch.Tensor | Any]c                óì  ‡‡— t          d„ | D ¦   «         d¦  «        }|€| S |j        }|j        j        }|j        }d„ |j                             ¦   «         D ¦   «         }d„ |j                             ¦   «         D ¦   «         }g }| D �]m}t          |t          ¦  «        r|j
        t          j        k    r|                     |¦  «         ŒC|                     |                     ¦   «         ¦  «        }	|	€dn|                     |	¦  «        }
|
€|                     |¦  «         Œ›dŠdˆfd
„Š ‰|                     ¦   «         ¦  «        }ˆfd„|j        D ¦   «         }ˆfd„|                     ¦   «         D ¦   «         }‰r|                     |¦  «         �Œt          j        g |j        |j        ¬¦  «        }|                     |
|||¬¦  «         |                     |                     ¦   «         ¦  «         �Œo|S )ai  
    Attempt to convert fake tensors to a corresponding real tensor with the correct underlying storage by looking up
    the FakeTensorMode meta to real storage mapping. On failure to find the storage mapping, the FakeTensor will
    remain in the list.

    Note: this is not currently optimized (makes copies of the meta converter internal dictionaries)
    c              3  óD   K  — | ]}t          |t          ¦  «        ¯|V — Œd S r%   )Ú
isinstancer   )r   Úitems     r!   r(   z+try_convert_fake_to_real.<locals>.<genexpr>€   s1   è è € ÐCÐC�$¥j°µzÑ&BÔ&BÐCˆÐCÐCÐCÐCÐCÐCr#   Nc                ó   — i | ]\  }}||“Œ	S r   r   ©r   ÚkÚvs      r!   ú
<dictcomp>z,try_convert_fake_to_real.<locals>.<dictcomp>‰   s   € ÐKÐKÐK™t˜q !�a˜ÐKÐKÐKr#   c                ó   — i | ]\  }}||“Œ	S r   r   rf   s      r!   ri   z,try_convert_fake_to_real.<locals>.<dictcomp>Š   s   € ÐHÐHÐH¡D A q˜1˜aÐHÐHÐHr#   FÚsútorch.SymInt | intr   rL   c                óŽ   •— t          | t          j        ¦  «        s| S ‰s‰n| j                             ¦   «         Š| j        j        S r%   )rc   r   ÚSymIntÚnodeÚhas_hintÚhint)rk   Úunhinteds    €r!   Ú
map_symintz,try_convert_fake_to_real.<locals>.map_symint™   s@   ø€ å˜a¥¤Ñ.Ô.ð Ø�Ø'/ÐF�x�x°Q´V·_²_Ñ5FÔ5FˆHØ”6”;Ðr#   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r   r   ©r   rk   rs   s     €r!   ú
<listcomp>z,try_convert_fake_to_real.<locals>.<listcomp>¡   s!   ø€ Ð/Ð/Ð/ !�
�
˜1‘”Ð/Ð/Ð/r#   c                ó&   •— g | ]} ‰|¦  «        ‘ŒS r   r   ru   s     €r!   rv   z,try_convert_fake_to_real.<locals>.<listcomp>¢   s!   ø€ Ð4Ð4Ð4 A�*�*˜Q‘-”-Ð4Ð4Ð4r#   )ÚdtypeÚdevice)Ústorage_offsetÚsizeÚstride)rk   rl   r   rL   )ÚnextÚ	fake_modeÚfake_tensor_converterÚmeta_converterÚ	describerÚstorage_memoÚitemsÚlookup_storagerc   r   Úlayoutr   ÚstridedÚappendÚgetÚuntyped_storagerz   Úshaper|   Úemptyrx   ry   Úset_Úclone)r^   Úfake_tensorr~   r€   ÚdescÚstorage_to_keyÚkey_to_real_storager&   ÚtÚkeyÚreal_storageÚstor_offsetr{   r|   Ú
new_tensorrs   rr   s                  @@r!   Útry_convert_fake_to_realr—   t   s8  øø€ õ ØCÐC˜(ÐCÑCÔCÀTñô €Kð ÐØˆàÔ%€IØÔ4ÔC€NØÔ#€DàKÐK ~Ô'B×'HÒ'HÑ'JÔ'JÐKÑKÔK€NØHÐH¨DÔ,?×,EÒ,EÑ,GÔ,GÐHÑHÔHÐØ
€CØð ''ñ ''ˆÝ˜!�ZÑ(Ô(ð 	¨A¬H½¼Ò,EÐ,EØ�JŠJ�q‰MŒMˆMØà× Ò  ×!2Ò!2Ñ!4Ô!4Ñ5Ô5ˆØ"˜{�t�tÐ0C×0GÒ0GÈÑ0LÔ0LˆØÐØ�JŠJ�q‰MŒMˆMØàˆð	ð 	ð 	ð 	ð 	ð 	ð !�j ×!1Ò!1Ñ!3Ô!3Ñ4Ô4ˆØ/Ð/Ð/Ð/ q¤wÐ/Ñ/Ô/ˆØ4Ð4Ð4Ð4¨¯ª©¬Ð4Ñ4Ô4ˆàð 	Ø�JŠJ�q‰MŒMˆMÙå”[ØØ”'Ø”8ð
ñ 
ô 
ˆ
ð
 	�ŠØØ&ØØð	 	ñ 	
ô 	
ð 	
ð 	�
Š
�:×#Ò#Ñ%Ô%Ñ&Ô&Ð&Ñ&à€Jr#   Ú TFútorch.Tensorr   ÚsizesÚstridesrz   Úrequires_gradc                ó^  — |r"| j         |j         k    rt          |› d�¦  «        ‚t          j                             | ¦  «        r@|                      ¦   «         }|                     ¦   «         }||k    rt          |› d�¦  «        ‚t          j        j                             | |||d¬¦  «         d S )Nz· mismatched requires_grad-ness of outputs. This usually means that you have added autograd support for your operator at a dispatch key other than Autograd, which will lead to problemsz mismatched storage offsetT)Úcheck_sizesÚcheck_stridesÚallow_rhs_unbacked)	rœ   r   r   r   r   rz   Ú_primsÚutilsÚcompare_tensor_meta)	r<   r>   r:   rš   r›   rz   rœ   Úr_offsetÚf_offsets	            r!   Ú_check_fake_real_tensorsr¦   ¸   sÛ   € ð ð ØÔ! XÔ%;Ò;Ð;Ý'Øð /ð /ð /ñô ð õ „x×Ò˜XÑ&Ô&ð PØ×*Ò*Ñ,Ô,ˆØ×*Ò*Ñ,Ô,ˆØ�xÒÐÝ'¨7Ð(NÐ(NÐ(NÑOÔOÐOå	„LÔ×*Ò*ØØØØØð +ñ ô ð ð ð r#   c                  ó<   ‡ — e Zd Z	 dddddœdˆ fd„Z	 	 ddd„Zˆ xZS )ÚCrossRefFakeModeNT)rŸ   Úcheck_aliasingÚonly_check_ops_with_metaÚignore_op_fnú#Callable[[OpOverload], bool] | NonerŸ   r   r©   rª   r   r@   c               óŠ   •— t          ¦   «                              ¦   «          |�|nd„ | _        || _        || _        || _        d S )Nc                ó   — dS )NFr   )Úfns    r!   ú<lambda>z+CrossRefFakeMode.__init__.<locals>.<lambda>ä   s   € ÀU€ r#   )ÚsuperÚ__init__r«   rŸ   r©   rª   )Úselfr«   rŸ   r©   rª   Ú	__class__s        €r!   r²   zCrossRefFakeMode.__init__Ú   sS   ø€ õ 	‰Œ×ÒÑÔÐà(Ð4ˆLˆLÐ:JÐ:Jð 	Ôð +ˆÔØ,ˆÔØ(@ˆÔ%Ð%Ð%r#   r   rJ   r   ÚtypesúSequence[type]ÚargsúSequence[object]ÚkwargsúMapping[str, object] | NoneÚobjectc           	     óv  — |pi }d }d}i }|t           j        j        t           j        j        t           j        j        fv�rC|                      |¦  «        �s-| j        r%t          j	        j
                             |¦  «        �rt          j        j        |j        vrét          j        j        |j        vrÑt          j        j        |j        vr¹ddlm} 	 t'           |¦   «         ¬¦  «        5 }	t)          j        t          j        t/          j        |	j        d¬¦  «        ||f¦  «        \  }}t5          j        ¦   «         5   ||i |¤Ž}d d d ¦  «         n# 1 swxY w Y   d d d ¦  «         n# 1 swxY w Y   n# t8          $ r Y nw xY wd|› d�}
 ||i |¤Ž}|��¥t)          j        |¦  «        }t)          j        |¦  «        }t=          |¦  «        t=          |¦  «        k    r1t?          |
› d	t=          |¦  «        › d
t=          |¦  «        › �¦  «        ‚| j         rtC          |
|||f|||f¦  «         tE          tG          t)          j        |¦  «        t)          j        |¦  «        ¦  «        ¦  «        D ]Ì\  }\  }}tI          |t          j        ¦  «        }|tI          |t          j        ¦  «        k    rt?          |
› d�¦  «        ‚|rx	 tK          ||d| j&        dd¬¦  «         Œp# tN          $ rO}tQ          |||¦  «        rY d }~Œ�t=          |¦  «        dk    r|
› d|› �n	|
› d|› d|› �}tS          |¦  «        |‚d }~ww xY wŒÍ|S )Nr   r   )ÚShapeEnv)Ú	shape_envT)Ústatic_shapeszWhen comparing the output of z* on FakeTensor and concrete Tensors, foundz mismatch in number of returns rB   z$ mismatched number of tensor outputs)rš   r›   rz   rœ   é   z mismatched tensor metadata: z' mismatched tensor metadata for output[z]: )*rU   Ú
lift_freshrW   Úlift_fresh_copyrŒ   Úsource_Storage_storage_offsetr«   rª   r   Ú_subclassesÚ
fake_implsÚhas_metaÚTagÚdynamic_output_shapeÚtagsÚinplace_viewÚdata_dependent_outputÚ%torch.fx.experimental.symbolic_shapesr½   r   ÚpytreeÚtree_map_onlyr*   Ú	functoolsÚpartialÚfrom_tensorÚwarningsÚcatch_warningsr
   Útree_leavesÚlenÚAssertionErrorr©   rI   Ú	enumerateÚziprc   r¦   rŸ   rN   r]   r   )r³   rJ   rµ   r·   r¹   Úfake_rÚ	fake_argsÚfake_kwargsr½   r~   r:   ÚrÚr_flatÚf_flatrK   Úr_outÚf_outÚr_is_tenrM   Úerror_messages                       r!   Ú__torch_dispatch__z#CrossRefFakeMode.__torch_dispatch__ê   s™  € ð �˜2ˆàˆØ&(ˆ	Ø,.ˆð
 å”Ô'ÝÔ$Ô,Ý”	Ô7ððñ ð ×%Ò% dÑ+Ô+ñð Ô1ðõ Ô$Ô/×8Ò8¸Ñ>Ô>ñõ ”	Ô.°d´iÐ?Ð?Ý”	Ô&¨d¬iÐ7Ð7Ý”	Ô/°t´yÐ@Ð@ð GÐFÐFÐFÐFÐFðå#¨h¨h©j¬jÐ9Ñ9Ô9ð A¸YÝ-3Ô-AÝœÝ!Ô)¨)Ô*?ÈtÐTÑTÔTØ˜v˜ñ.ô .Ñ*�I˜{õ
 "Ô0Ñ2Ô2ð Að AØ!%  yÐ!@°KÐ!@Ð!@˜ðAð Að Añ Aô Að Að Að Að Að Að Aøøøð Að Að Að AðAð Að Añ Aô Að Að Að Að Að Að Aøøøð Að Að Að Aøøõ 2ð ð ð Ø�ðøøøð¨Dð ð ð ð 	ð ˆD�$Ð!˜&Ð!Ð!ˆØÑÝÔ'¨Ñ*Ô*ˆFÝÔ'¨Ñ/Ô/ˆFÝ�6‰{Œ{�c &™kœkÒ)Ð)Ý$ØÐ]Ð]½sÀ6¹{¼{Ð]Ð]ÕPSÐTZÑP[ÔP[Ð]Ð]ñô ð ð Ô"ð Ý!Ø˜Q  v °¸ÀKÐ8Pñô ð õ (1Ý•FÔ& qÑ)Ô)­6Ô+=¸fÑ+EÔ+EÑFÔFñ(ô (ð Jð JÑ#�‘^�e˜Uõ & e­U¬\Ñ:Ô:�Ø�z¨%µ´Ñ>Ô>Ò>Ð>Ý(Ø"ÐHÐHÐHñô ð ð ð JðJÝ0Ø!Ø!Ø"&Ø$(Ô$6Ø+/Ø*.ðñ ô ð ð øõ %ð Jð Jð JÝ(¨¨s°AÑ6Ô6ð %Ø$˜H˜H˜H˜Hõ  # 6™{œ{¨aÒ/Ð/ð  'ÐHÐHÀQÐHÐHÐHà$+Ð!_Ð!_ÐTWÐ!_Ð!_Ð\]Ð!_Ð!_ð &õ
 4°MÑBÔBÈÐIøøøøðJøøøðJð& ˆsy   ÃE3 Ã)AE'Ä;	EÅE'ÅE	ÅE'ÅE	ÅE'ÅE3 Å'E+Å+E3 Å.E+Å/E3 Å3
F Å?F ËKË
L5Ë&L0Ë<4L0Ì0L5r%   )
r«   r¬   rŸ   r   r©   r   rª   r   r   r@   )r   N)
rJ   r   rµ   r¶   r·   r¸   r¹   rº   r   r»   )Ú__name__Ú
__module__Ú__qualname__r²   rã   Ú__classcell__)r´   s   @r!   r¨   r¨   Ù   s�   ø€ € € € € ð =AðAð #Ø#Ø)-ðAð Að Að Að Að Að Að Að( "$Ø.2ð\ð \ð \ð \ð \ð \ð \ð \ð \r#   r¨   )r   r   r   r   r   r   )r   r   r   r   )r:   r;   r<   r   r=   r   r>   r   r?   r   r   r@   )rJ   r   rK   rL   rM   rN   r   r   )r^   r_   r   r`   )r˜   TFTT)r<   r™   r>   r   r:   r;   rš   r   r›   r   rz   r   rœ   r   r   r@   )&Ú
__future__r   rÏ   rÒ   Útypingr   r   r   Útorch.utils._pytreer¢   Ú_pytreerÍ   Útorch._subclasses.fake_tensorr   r   r   r	   r
   Útorch.utils._python_dispatchr   Úcollections.abcr   r   r   Ú
torch._opsr   r   Ú_opsÚopsrU   r,   r3   r9   rI   r]   r—   r¦   r¨   r   r#   r!   ú<module>rò      s  ðØ "Ð "Ð "Ð "Ð "Ð "à Ð Ð Ð Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ð $Ð $Ð $ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ;Ð :Ð :Ð :Ð :Ð :ð ð +Ø;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;Ð;à%Ð%Ð%Ð%Ð%Ð%Ø*Ð*Ð*Ð*Ð*Ð*ð „z„~Ô€ð	ð 	ð 	ð 	ðYð Yð Yð Yð
	ð 	ð 	ð 	ð
ð 
ð 
ð 
ð<ð ð ð ð8Að Að Að AðN ØØØØðð ð ð ð ðBmð mð mð mð mÐ(ñ mô mð mð mð mr#   