§
    ŠŠtjª  ã                   óº   — d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	 dd	l
mZ erdd
lmZ 	 ddeddddfd„Zdedefd„Z G d„ d¦  «        Z G d„ d¦  «        ZdS )a)  
Hashability utilities for PyTorch Dynamo variable tracking.

This module provides the HashableTracker wrapper class and associated utilities
for making VariableTracker instances usable as dictionary keys and set elements
during symbolic execution. Used by both ConstDictVariable and SetVariable.
é    )ÚTYPE_CHECKINGNé   )Ú	variables)Úraise_observed_exception)Úspecialize_symnodeé   )ÚVariableTracker)ÚInstructionTranslatorBaseÚargÚtxz InstructionTranslatorBase | NoneÚreturnc                 ón  — |€ddl m} |                     ¦   «         }	 |                      ¦   «         }n# t          $ r d }Y nw xY w|�5|j        �.ddlm} ddlm	}  |dd| › �d|j
        › d	�g |j        ¢¬
¦  «         |�|j
        nt          | ¦  «        j
        }t          t          |d|› d�g¬¦  «         d S )Nr   ©ÚInstructionTranslatorr   )Úgraph_break_hints)ÚunimplementedzHashability mismatchzraise_unhashable zDynamo thinks zr is unhashable, but its __hash__ is not None. This likely indicates a missing or incorrect is_hashable() override.)Úgb_typeÚcontextÚexplanationÚhintszunhashable type: 'ú')Úargs)Útorch._dynamo.symbolic_convertr   Ú
current_txÚpython_typeÚ	ExceptionÚ__hash__Ú r   Úexcr   Ú__name__Ú
DYNAMO_BUGÚtyper   Ú	TypeError)r   r   r   Úarg_typer   r   Ú	type_names          ú^/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/torch/_dynamo/variables/hashable.pyÚraise_unhashabler'      s?  € ð 
€zØHÐHÐHÐHÐHÐHà"×-Ò-Ñ/Ô/ˆðØ—?’?Ñ$Ô$ˆˆøÝð ð ð Øˆˆˆðøøøð Ð Ô 1Ð =Ø(Ð(Ð(Ð(Ð(Ð(Ø'Ð'Ð'Ð'Ð'Ð'àˆØ*Ø-¨Ð-Ð-ð4¨Ô):ð 4ð 4ð 4ð 2Ð%Ô0Ð1ð	
ñ 	
ô 	
ð 	
ð &.Ð%9�Ô!Ð!½tÀC¹y¼yÔ?Q€IÝÝØ
à- Ð-Ð-Ð-ð
ðñ ô ð ð ð s   ž3 ³AÁAÚxc                 ó²   — t          | t          j        ¦  «        r*|                      ¦   «         s|                      ¦   «         rdS |                      ¦   «         S )NT)Ú
isinstancer   ÚLazyVariableTrackerÚis_realizedÚis_hashable_lazyÚis_hashable)r(   s    r&   r.   r.   >   sT   € õ 	�1•iÔ3Ñ4Ô4ðà—’‘”ðð ×ÒÑ Ô ðð
 ˆtà�=Š=‰?Œ?Ðó    c                   óB   — e Zd ZdZdZdeddfd„Zdefd„Zdede	fd	„Z
dS )
ÚRawHasha5  Wraps a pre-computed hash value to bypass int.__hash__'s modular reduction.

    When building a tuple/frozenset of per-item hashes, using bare ints would
    apply long_hash (mod sys.hash_info.modulus), corrupting the values.
    Wrapping in RawHash makes tuplehash/frozenset_hash see the original hash.
    ©Úhr3   r   Nc                 ó   — || _         d S ©Nr2   )Úselfr3   s     r&   Ú__init__zRawHash.__init__U   s   € ØˆŒˆˆr/   c                 ó   — | j         S r5   r2   ©r6   s    r&   r   zRawHash.__hash__X   s	   € ØŒvˆr/   Úotherc                 óL   — t          |t          ¦  «        o| j        |j        k    S r5   )r*   r1   r3   )r6   r:   s     r&   Ú__eq__zRawHash.__eq__[   s    € Ý˜%¥Ñ)Ô)Ð?¨d¬f¸¼Ò.?Ð?r/   )r    Ú
__module__Ú__qualname__Ú__doc__Ú	__slots__Úintr7   r   ÚobjectÚboolr<   © r/   r&   r1   r1   K   sŒ   € € € € € ðð ð €Ið˜#ð  $ð ð ð ð ð˜#ð ð ð ð ð@˜Fð @ tð @ð @ð @ð @ð @ð @r/   r1   c                   ór   — e Zd ZdZ e¦   «         Zdeddfd„Zededefd„¦   «         Z	de
fd„Zdedefd	„ZdS )
ÚHashableTrackerz¸
    Class that wraps a VariableTracker and makes it hashable.
    Note that it's fine to put VTs into dictionaries and sets, but doing so
    does not take into account aliasing.
    Úvtr   Nc                 ó|  — t          |¦  «        }t          |t          j        ¦  «        rW|                     ¦   «         sC|                     ¦   «         r/t          |                     ¦   «         ¦  «        | _        || _	        d S ddl
m} ddlm} |                     ¦   «         } |||¦  «        \  | _        }|| _	        d S )Nr   r   r   )Úgeneric_hash_impl)r   r*   r   r+   r,   r-   ÚhashÚoriginal_valueÚ_hashrG   r   r   Úobject_protocolrI   r   )r6   rG   r   rI   r   Ú_s         r&   r7   zHashableTracker.__init__h   sÒ   € å Ñ#Ô#ˆõ �r�9Ô8Ñ9Ô9ð	à—N’NÑ$Ô$ð	ð ×#Ò#Ñ%Ô%ð	õ
 ˜b×/Ò/Ñ1Ô1Ñ2Ô2ˆDŒJØˆDŒGØˆFð 	IÐHÐHÐHÐHÐHà6Ð6Ð6Ð6Ð6Ð6à"×-Ò-Ñ/Ô/ˆØ)Ð)¨"¨bÑ1Ô1‰ˆŒ
�AØˆŒˆˆr/   c                 ó¬  — ddl m} ddlm} t	          |t
          j        ¦  «        rT|                     ¦   «         s@t	          |                     ¦   «         t          j
        ¦  «        r|                     ¦   «         S t	          ||¦  «        s| j        S g }|j        D �]%}|                     ¦   «         r(|                     |                     ¦   «         ¦  «         Œ?t	          ||¦  «        rÏt!          |dd ¦  «        }t!          |dd ¦  «        }|�t!          |dd ¦  «        nd }t	          |t"          ¦  «        r|                     d¦  «        nd }	t!          |	dd ¦  «        }
t	          |
t          j        ¦  «        rA|
                     ¦   «         dk    r)|                     |
                     ¦   «         ¦  «         �Œ| j        c S t          j
        |¦  «        S )	Nr   )ÚSizeVariable)ÚTensorVariableÚproxyÚnodeÚmetaÚexample_valueÚconstant)ÚlistsrP   ÚtensorrQ   r*   r   r+   r,   rK   ÚtorchÚSizeÚ_MISSINGÚitemsÚis_python_constantÚappendÚas_python_constantÚgetattrÚdictÚgetÚTensorÚnumelÚitem)ÚclsrG   rP   rQ   r\   re   rR   rS   rT   rU   rV   s              r&   Ú_maybe_constant_torch_sizez*HashableTracker._maybe_constant_torch_size‚   s×  € à'Ð'Ð'Ð'Ð'Ð'Ø*Ð*Ð*Ð*Ð*Ð*õ �r�9Ô8Ñ9Ô9ð	'à—N’NÑ$Ô$ð	'õ ˜2×,Ò,Ñ.Ô.µ´
Ñ;Ô;ð	'ð
 ×$Ò$Ñ&Ô&Ð&å˜"˜lÑ+Ô+ð 	 Ø”<ÐàˆØ”Hð 	 ñ 	 ˆDØ×&Ò&Ñ(Ô(ð Ø—’˜T×4Ò4Ñ6Ô6Ñ7Ô7Ð7Øå˜$ Ñ/Ô/ð Ý  g¨tÑ4Ô4�Ý˜u f¨dÑ3Ô3�Ø6:Ð6F•w˜t V¨TÑ2Ô2Ð2ÈD�å1;¸DÅ$Ñ1GÔ1GÐQ�D—H’H˜_Ñ-Ô-Ð-ÈTð õ # =°*¸dÑCÔC�å˜h­¬Ñ5Ô5ð ¸(¿.º.Ñ:JÔ:JÈaÒ:OÐ:OØ—L’L §¢¡¤Ñ1Ô1Ð1Ùà”<ÐÐÐåŒz˜%Ñ Ô Ð r/   c                 ó   — | j         S r5   )rL   r9   s    r&   r   zHashableTracker.__hash__¨   s
   € ØŒzÐr/   r:   c                 ó&  — t          |t          ¦  «        sdS | j        |j        u rdS |                      | j        ¦  «        }|                      |j        ¦  «        }|| j        ur|| j        ur||k    S | j                             |j        ¦  «        S )a–  
        Checks equality between two HashableTracker instances.

        Delegates to the VariableTracker's is_python_equal method to compare
        the underlying variable trackers for Python-level equality.

        Args:
            other: Another HashableTracker instance to compare with

        Returns:
            True if the underlying variable trackers are Python-equal, False otherwise
        FT)r*   rF   rG   rg   r[   Úis_python_equal)r6   r:   Úself_constantÚother_constants       r&   r<   zHashableTracker.__eq__«   s•   € õ ˜%¥Ñ1Ô1ð 	Ø�5ØŒ7�e”hÐÐØ�4à×7Ò7¸¼Ñ@Ô@ˆØ×8Ò8¸¼ÑBÔBˆØ ¤Ð-Ð-°.ÈÌÐ2UÐ2UØ  NÒ2Ð2àŒw×&Ò& u¤xÑ0Ô0Ð0r/   )r    r=   r>   r?   rB   r[   r	   r7   Úclassmethodrg   rA   r   rC   r<   rD   r/   r&   rF   rF   _   s¹   € € € € € ðð ð ˆv‰xŒx€Hð˜?ð ¨tð ð ð ð ð4 ð#!¨Oð #!Àð #!ð #!ð #!ñ „[ð#!ðJ˜#ð ð ð ð ð1˜Fð 1 tð 1ð 1ð 1ð 1ð 1ð 1r/   rF   r5   )r?   Útypingr   rY   r   r   r   r   Úutilsr   Úbaser	   r   r
   r'   rC   r.   r1   rF   rD   r/   r&   ú<module>rq      sX  ððð ð !Ð  Ð  Ð  Ð  Ð  à €€€à Ð Ð Ð Ð Ð Ø *Ð *Ð *Ð *Ð *Ð *Ø &Ð &Ð &Ð &Ð &Ð &Ø !Ð !Ð !Ð !Ð !Ð !ð ð IØHÐHÐHÐHÐHÐHð DHð$ð $Ø	ð$Ø@ð$à	ð$ð $ð $ð $ðN
�?ð 
 tð 
ð 
ð 
ð 
ð@ð @ð @ð @ð @ñ @ô @ð @ð(c1ð c1ð c1ð c1ð c1ñ c1ô c1ð c1ð c1ð c1r/   