
    sg                         d dl mZ ddlmZ ddlmZ  e       ZeZ G d d      Zd Z	d Z
 ee      d	        Ze  ee      d
        Zed        Zy)    )contextmanager   )hashable)dispatchc                   0    e Zd ZdZdZd Zd ZeZd Zd Z	y)Varz Logic Variable r   c                     t        |      dk(  r-dt        j                   }t        xj                  dz  c_        nt        |      dk(  r|d   }t        j	                  |       }||_        |S )Nr   _r   )lenr   _idobject__new__token)clsr   objs      ]/var/www/html/venv/lib/python3.12/site-packages/torch/fx/experimental/unification/variable.pyr   zVar.__new__   sW    u:?yMEGGqLGZ1_!HEnnS!	
    c                 2    dt        | j                        z   S )N~)strr   selfs    r   __str__zVar.__str__   s    S_$$r   c                 f    t        |       t        |      k(  xr | j                  |j                  k(  S N)typer   )r   others     r   __eq__z
Var.__eq__   s'    DzT%[(FTZZ5;;-FFr   c                 B    t        t        |       | j                  f      S r   )hashr   r   r   s    r   __hash__zVar.__hash__!   s    T$Z,--r   N)
__name__
__module____qualname____doc__r   r   r   __repr__r   r!    r   r   r   r   
   s$    
C	%HG.r   r   c                      d S )Nc                      t        |  S r   )r   )argss    r   <lambda>zvar.<locals>.<lambda>&   s
    d r   r'   r'   r   r   varr,   %   s    ##r   c                      d S )Nc                 N    t        |       D cg c]  }t                c}S c c}w r   )ranger,   )nis     r   r+   zvars.<locals>.<lambda>*   s    U1X.ce. .s   "r'   r'   r   r   varsr2   )   s    ..r   c                      y)NTr'   )vs    r   isvarr5   -   s    r   c                 @    t           xr t        |       xr | t         v S r   )_glvr   )os    r   r5   r5   4   s    x<5HQK5AI5r   c               '   (  K   t         j                         }t         j                  t        |              	 d t         j	                          t         j                  |       y# t         j	                          t         j                  |       w xY ww)a  
    Context manager for logic variables

    Example:
        >>> # xdoctest: +SKIP("undefined vars")
        >>> from __future__ import with_statement
        >>> with variables(1):
        ...     print(isvar(1))
        True
        >>> print(isvar(1))
        False
        >>> # Normal approach
        >>> from unification import unify
        >>> x = var('x')
        >>> unify(x, 1)
        {~x: 1}
        >>> # Context Manager approach
        >>> with variables('x'):
        ...     print(unify('x', 1))
        {'x': 1}
    N)_global_logic_variablescopyupdatesetclear)	variablesold_global_logic_variabless     r   r?   r?   9   sk     . "9!=!=!?""3y>2C%%'&&'AB 	 %%'&&'ABs   3BA$ *B$+BBN)
contextlibr   utilsr   r   r=   r:   r7   r   r,   r2   r5   r   r?   r'   r   r   <module>rC      s{    %  % . .6$/ 
#   
&6 6 C Cr   