U
    Jºcª  ã                   @   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-gikjz4vx/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
    >>> # xdoctest: +SKIP("undefined vars")
    >>> # 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   

