o
    ?e                     @   sx   d Z ddlZddlmZ ddlmZ ddlmZ dZejdej	dej
d	iZejd
ejdiZG dd dejZdd ZdS )zJConverter for logical expressions, e.g. `a and b -> tf.logical_and(a, b)`.    N)	converter)parser)	templatesSAFE_BOOLEAN_OPERAND	ag__.and_z	ag__.not_zag__.or_zag__.eqzag__.not_eqc                   @   sX   e Zd ZdZdd Zdd Zdd Zdd	 Zd
d Zdd Z	dd Z
dd Zdd ZdS )LogicalExpressionTransformerz7Converts logical expressions to corresponding TF calls.c                 C   s@   t |}|tv rt| S | jjjtjjr|tv rt| S d S N)	typeLOGICAL_OPERATORSctxuseroptionsZusesr   ZFeatureEQUALITY_OPERATORS)selfoperatorZop_type r   {/home/www/facesmatcher.com/pyenv/lib/python3.10/site-packages/tensorflow/python/autograph/converters/logical_expressions.py_overload_of0   s   z)LogicalExpressionTransformer._overload_ofc                 C   s   t jd|dS )Nzlambda: expr)expr)r   replace_as_expression)r   r   r   r   r   
_as_lambda9   s   z'LogicalExpressionTransformer._as_lambdac                 C   s   t jdt|||dS )Nzfunc_name(arg1, arg2))	func_namearg1arg2r   r   r   Zparse_expression)r   r   r   r   r   r   r   _as_binary_function<   s   z0LogicalExpressionTransformer._as_binary_functionc                 C   s   t jd||d}||jd< |S )Nzarg1 is arg2)r   r   r   )r   r   ops)r   opr   r   templater   r   r   _as_binary_operationC   s   
z1LogicalExpressionTransformer._as_binary_operationc                 C   s   t jdt||dS )Nzfunc_name(arg))r   argr   )r   r   r    r   r   r   _as_unary_functionK   s   z/LogicalExpressionTransformer._as_unary_functionc                 C   s.   |  |}|d u r| |||S | |||S r   )r   r   r   )r   r   leftrightoverloadr   r   r   _process_binopO   s   
z+LogicalExpressionTransformer._process_binopc                 C   s   |  |}tt|j|j}|j}d }|r;|d\}}| |||}|d ur5| d| 	|| 	|}n|}|}|s|d usAJ |S )Nr   r   )
generic_visitlistzipr   comparatorsr"   popr%   r   r   )r   nodeZops_and_compsr"   Zop_treer   r#   Zbinary_comparisonr   r   r   visit_CompareU   s"   
z*LogicalExpressionTransformer.visit_Comparec                 C   s0   |  |}| |j}|d u r|S | ||jS r   )r&   r   r   r!   operand)r   r+   r$   r   r   r   visit_UnaryOpl   s
   
z*LogicalExpressionTransformer.visit_UnaryOpc                 C   sP   |  |}|j}|j }|r&| }| | |j| || |}|s|S r   )r&   valuesr*   r   r   r   r   )r   r+   Znode_valuesr#   r"   r   r   r   visit_BoolOpu   s   

z)LogicalExpressionTransformer.visit_BoolOpN)__name__
__module____qualname____doc__r   r   r   r   r!   r%   r,   r.   r0   r   r   r   r   r   -   s    		r   c                 C   s   t |}|| S r   )r   visit)r+   r   Ztransformerr   r   r   	transform   s   
r6   )r4   ZgastZ tensorflow.python.autograph.corer   Z tensorflow.python.autograph.pyctr   r   r   AndNotOrr
   EqNotEqr   ZBaser   r6   r   r   r   r   <module>   s   	T