U
    dr                     @   s   d dl mZ ddlmZ ddlmZ e ZeZG dd deZ	dd Z
d	d
 Zee	dd Ze eedd Zedd ZdS )    )contextmanager   )hashable)dispatchc                   @   s8   e Zd ZdZdZdd Zdd ZeZdd Zd	d
 Z	dS )Varz Logic Variable r   c                 G   sN   t |dkr&dtj }t jd7  _nt |dkr:|d }t| }||_|S )Nr   z_%sr   )lenr   _idobject__new__token)clsr   obj r   N/tmp/pip-unpacked-wheel-ua33x9lu/torch/fx/experimental/unification/variable.pyr
      s    

zVar.__new__c                 C   s   dt | j S )N~)strr   selfr   r   r   __str__   s    zVar.__str__c                 C   s   t | t |ko| j|jkS N)typer   )r   otherr   r   r   __eq__   s    z
Var.__eq__c                 C   s   t t| | jfS r   )hashr   r   r   r   r   r   __hash__    s    zVar.__hash__N)
__name__
__module____qualname____doc__r   r
   r   __repr__r   r   r   r   r   r   r   	   s   r   c                   C   s   dd S )Nc                  W   s   t |  S r   )r   )argsr   r   r   <lambda>%       zvar.<locals>.<lambda>r   r   r   r   r   var$   s    r#   c                   C   s   dd S )Nc                 S   s   dd t | D S )Nc                 S   s   g | ]
}t  qS r   )r#   ).0ir   r   r   
<listcomp>(   s     z*vars.<locals>.<lambda>.<locals>.<listcomp>)range)nr   r   r   r!   (   r"   zvars.<locals>.<lambda>r   r   r   r   r   vars'   s    r)   c                 C   s   dS )NTr   )vr   r   r   isvar+   s    r+   c                 C   s   t   ot| o| t kS r   )_glvr   )or   r   r   r+   1   s    c               	   g   s:   t  }t t|  z
dV  W 5 t   t | X dS )a   Context manager for logic variables
    >>> 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)	variablesZold_global_logic_variablesr   r   r   r3   6   s    
r3   N)
contextlibr   utilsr   r   r1   r.   r,   r	   r   r#   r)   r+   r3   r   r   r   r   <module>   s   

