U
    *-e                     @   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   k/var/www/html/Darija-Ai-Train/env/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   

