U
    ©Ê¹jô  ã                   @   s€   d dl mZ ddlmZ ddlmZ eƒ ZeZG dd„ dƒ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   sP   t |ƒdkr(dtj› �}t jd7  _nt |ƒdkr<|d }t | ¡}||_|S )Nr   Ú_r   )Úlenr   Ú_idÚobjectÚ__new__Útoken)Úclsr   Úobj© r   úi/var/www/html/bwave/python/venv/lib/python3.8/site-packages/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,   3   s    c               	   g   s:   t  ¡ }t  t| ƒ¡ z
dV  W 5 t  ¡  t  |¡ X dS )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)Ú	variablesZold_global_logic_variablesr   r   r   r4   8   s    
r4   N)Ú
contextlibr   Úutilsr   r   r2   r/   r-   r   r$   r*   r,   r
   r4   r   r   r   r   Ú<module>   s   

