
    `i                         d dl mZmZ d dlmZ d Zd Zd Zd Z eee	          d             Z
d Z eeee	          d	             Zd
S )   )reifyunify)dispatchc                     t                               | | t          ft                     t                              | 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}
    )_unifyadddictunify_object_reifyreify_object)clss    z/home/jaya/work/projects/VOICE-AGENT/VIET/agent-env/lib/python3.11/site-packages/torch/fx/experimental/unification/more.py	unifiabler      s<    $ JJS$...
JJT{L)))J    c                 b    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   #   s6    " q+ ("1a(((!!Q'''r   c                     t                               t          |                     }t          | j        |          }|| j        k    r| S |j                            |           |S )N)object__new__typer   __dict__update)r   r   objds       r   r   r   :   sU    
..a
!
!Caj!AAJLJr   c                      fd j         D             }t          ||          }||k    r S t                              t	                               }t           j         |          D ]\  }}t          |||           |S )Nc                 0    g | ]}t          |          S  getattr).0attrr   s     r   
<listcomp>z'_reify_object_slots.<locals>.<listcomp>D   #    666$WQ666r   )r   r   r   r   r   zipsetattr)r   r   attrs	new_attrsnewobjslotr'   s   `      r   r   r   C   s    6666!+666EeQI	Q((ak955 	( 	(JD$FD$''''r   c                 T    t          t          | j        | j        | j        f|           S )zReify a Python ``slice`` object)slicer   startstopstepr   s     r   r   r   O   s&     %!&!&115566r   c                     t                     t                    k    rdS t           d          r3t           fd j        D             fdj        D             |          S t           j        j        |          S )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   c                 0    g | ]}t          |          S r#   r$   )r&   r/   us     r   r(   z unify_object.<locals>.<listcomp>o   r)   r   c                 0    g | ]}t          |          S r#   r$   )r&   r/   vs     r   r(   z unify_object.<locals>.<listcomp>p   r)   r   )r   r   r   r   r   r7   r9   r   s   `` r   r
   r
   Z   s    " Aww$q''uq+ 06666!+6666666!+666
 
 	
 QZQ///r   c                 l    t          | j        | j        | j        f|j        |j        |j        f|          S )zUnify a Python ``slice`` object)r   r2   r3   r4   r:   s      r   r   r   w   s0     !'1616*QWafaf,EqIIIr   N)corer   r   r   r   r   r   r   r1   r	   r   r
   r   r#   r   r   <module>r=      s                   :( ( (.  	 	 	 
%7 7 70 0 0: 
%J J J J Jr   