Ë
    ÄÓ^jL  ã                  óÒ   — d dl mZ d dlmZ ddlmZmZm	Z	m
Z
 ddlmZ erddlmZ g d¢Zdd„Zdd	„Zdd
„Zdd„Z eee«      dd„«       Z	 	 	 	 	 	 	 	 dd„Z eeee«      dd„«       Zy)é    )Úannotations)ÚTYPE_CHECKINGé   )Ú_reifyÚ_unifyÚreifyÚunify)Údispatch)ÚVar)Ú	unifiableÚreify_objectÚunify_objectc                óˆ   — t        j                  | | t        ft        «       t	        j                  | t        ft
        «       | S )aÏ  Register standard unify and reify operations on class
    This uses the type and __dict__ or __slots__ attributes to define the
    nature of the term
    See Also:
    >>> # xdoctest: +SKIP
    >>> class A(object):
    ...     def __init__(self, a, b):
    ...         self.a = a
    ...         self.b = b
    >>> unifiable(A)
    <class 'unification.more.A'>
    >>> x = var("x")
    >>> a = A(1, 2)
    >>> b = A(1, x)
    >>> unify(a, b, {})
    {~x: 2}
    )Ú
core_unifyÚaddÚdictr   Ú
core_reifyr   )Úclss    úq/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/torch/fx/experimental/unification/more.pyr   r      s0   € ô$ ‡N�N�C˜œdÐ#¤\Ô2Ü‡N�N�Cœ�;¤Ô-à€Jó    c                óJ   — t        | d«      rt        | |«      S t        | |«      S )a¨  Reify a Python object with a substitution
    >>> # xdoctest: +SKIP
    >>> class Foo(object):
    ...     def __init__(self, a, b):
    ...         self.a = a
    ...         self.b = b
    ...
    ...     def __str__(self):
    ...         return "Foo(%s, %s)" % (str(self.a), str(self.b))
    >>> x = var("x")
    >>> f = Foo(1, x)
    >>> print(f)
    Foo(1, ~x)
    >>> print(reify_object(f, {x: 2}))
    Foo(1, 2)
    Ú	__slots__)ÚhasattrÚ_reify_object_slotsÚ_reify_object_dict©ÚoÚss     r   r   r   2   s(   € ô" ˆq�+ÔÜ" 1 aÓ(Ð(ä! ! QÓ'Ð'r   c                óÆ   — t         j                  t        | «      «      }t        | j                  |«      }|| j                  k(  r| S |j                  j                  |«       |S ©N)ÚobjectÚ__new__Útyper   Ú__dict__Úupdate)r   r   ÚobjÚds       r   r   r   I   sK   € Ü
�.‰.œ˜a›Ó
!€CÜˆa�j‰j˜!Ó€AØˆA�J‰J‚ØˆØ‡L�L×Ñ˜ÔØ€Jr   c                ó  — | j                   D �cg c]  }t        | |«      ‘Œ }}t        ||«      }||k(  r| S t        j	                  t        | «      «      }t        | j                   |«      D ]  \  }}t        |||«       Œ |S c c}w r    )r   Úgetattrr   r!   r"   r#   ÚzipÚsetattr)r   r   ÚattrÚattrsÚ	new_attrsÚnewobjÚslots          r   r   r   R   s”   € ð —K‘Köàô 	��4Õð€Eð ô �e˜Q“€IØ�	ÒØˆä—‘¤ Q£Ó(ˆÜØ�K‰KØó
ò 	(‰JˆD�$ô �F˜D $Õ'ð		(ð
 ˆùòs   �Bc                óh   — t        t        | j                  | j                  | j                  f|«      Ž S )zReify a Python ``slice`` object)Úslicer   ÚstartÚstopÚstepr   s     r   r   r   d   s)   € ô ”%˜Ÿ™ !§&¡&¨!¯&©&Ð1°1Ó5Ð6Ð6r   c           
     ó@  — t        | «      t        |«      uryt        | d«      rQt        | j                  D �cg c]  }t	        | |«      ‘Œ c}|j                  D �cg c]  }t	        ||«      ‘Œ c}|«      S t        | j
                  |j
                  |«      S c c}w c c}w )a¶  Unify two Python objects
    Unifies their type and ``__dict__`` attributes
    >>> # xdoctest: +SKIP
    >>> class Foo(object):
    ...     def __init__(self, a, b):
    ...         self.a = a
    ...         self.b = b
    ...
    ...     def __str__(self):
    ...         return "Foo(%s, %s)" % (str(self.a), str(self.b))
    >>> x = var("x")
    >>> f = Foo(1, x)
    >>> g = Foo(1, 2)
    >>> unify_object(f, g, {})
    {~x: 2}
    Fr   )r#   r   r	   r   r)   r$   )ÚuÚvr   r0   s       r   r   r   p   s£   € ô& ˆAƒw”d˜1“gÑØÜˆq�+ÔÜð ŸK™Köàô ˜˜4Õ òð ŸK™Köàô ˜˜4Õ òð ó

ð 
	
ô Ø�J‰JØ�J‰JØó
ð 	
ùòùòs   ·BÁB
c                ó    — t        | j                  | j                  | j                  f|j                  |j                  |j                  f|«      S )zUnify a Python ``slice`` object)r	   r3   r4   r5   )r7   r8   r   s      r   r   r   ™   s9   € ô �!—'‘'˜1Ÿ6™6 1§6¡6Ð*¨Q¯W©W°a·f±f¸a¿f¹fÐ,EÀqÓIÐIr   N)r   r#   Úreturnr#   )r   r!   r   údict[Var, object]r:   r!   )r   r2   r   r;   r:   r2   )r7   r!   r8   r!   r   r;   r:   údict[Var, object] | bool)r7   r2   r8   r2   r   r;   r:   r<   )Ú
__future__r   Útypingr   Úcorer   r   r   r   r   r	   r
   Úvariabler   Ú__all__r   r   r   r   r2   r   r   © r   r   ú<module>rC      s�   ðÝ "å  ÷ó õ ñ Ýò 8€óó:(ó.óñ$ 
ˆ%�Óò7ó ð7ð&
Øð&
Øð&
Ø.ð&
àó&
ñR 
ˆ%�˜ÓòJó ñJr   