
    sh                     |    S SK JrJr  S SKJr  S rS rS rS r\" \\	5      S 5       r
S r\" \\\	5      S	 5       rg
)   )reifyunify)dispatchc                     [         R                  X [        4[        5        [        R                  U [        4[
        5        U $ )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/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/torch/fx/experimental/unification/more.py	unifiabler      s.    $ JJ$.
JJT{L)J    c                 P    [        U S5      (       a  [        X5      $ [        X5      $ )al  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   #   s'    " q+"1((!!''r   c                     [         R                  [        U 5      5      n[        U R                  U5      nX0R                  :X  a  U $ UR                  R                  U5        U$ N)object__new__typer   __dict__update)r   r   objds       r   r   r   :   sI    
..a
!Cajj!AJJLLJr   c                    U R                    Vs/ s H  n[        X5      PM     nn[        X15      nX4:X  a  U $ [        R	                  [        U 5      5      n[        U R                   U5       H  u  pb[        XVU5        M     U$ s  snf r   )r   getattrr   r   r   r   zipsetattr)r   r   attrattrs	new_attrsnewobjslots          r   r   r   C   sp    *+++6+$WQ+E6eIQ(akk95JDF$' 6 7s   Bc                 h    [        [        U R                  U R                  U R                  4U5      6 $ )zReify a Python ``slice`` object)slicer   startstopstepr   s     r   r   r   O   s)     %!&&!&&11566r   c           
      V   [        U 5      [        U5      :w  a  g[        U S5      (       aU  [        U R                   Vs/ s H  n[	        X5      PM     snUR                   Vs/ s H  n[	        X5      PM     snU5      $ [        U R
                  UR
                  U5      $ s  snf s  snf )az  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   r*   s       r   r
   r
   Z   s    " Aw$q'q+*+++6+$WQ+6*+++6+$WQ+6
 	
 QZZQ// 76s   B!#B&
c                     [        U R                  U R                  U R                  4UR                  UR                  UR                  4U5      $ )zUnify a Python ``slice`` object)r   r-   r.   r/   )r1   r2   r   s      r   r   r   w   s9     !''166166*QWWaffaff,EqIIr   N)corer   r   r   r   r   r   r   r,   r	   r   r
   r    r   r   <module>r6      s^     :(.	 
%7 70: 
%J Jr   