
    z	i                     l    S r SSKrSSKr " S S\R                  5      r " S S\R                  5      rg)zNode visitor as defined in https://docs.python.org/3/library/ast.html#ast.NodeVisitor
This module is used internally by ``qiskit.synthesis.boolean.BooleanExpression``.
    Nc                     ^  \ rS rSrSr\R                  S \R                  S \R                  S \R                  S \R                  S \R                  S \R                  S	 0rU 4S
 jrS rS rS rS rS rS rS rSrU =r$ )BooleanExpressionEvalVisitor   zNode visitor to compute the value of the expression, given the boolean values of the args
as defined in https://docs.python.org/3/library/ast.html#ast.NodeVisitorc                 $    U S   =(       a    U S   $ Nr       valuess    m/home/james-whalen/.local/lib/python3.13/site-packages/qiskit/synthesis/boolean/boolean_expression_visitor.py<lambda>%BooleanExpressionEvalVisitor.<lambda>   s    F1I$;&)$;    c                 $    U S   =(       a    U S   $ r   r	   r
   s    r   r   r      s    !8vay!8r   c                 $    U S   =(       d    U S   $ r   r	   r
   s    r   r   r      s    6!9#9q	#9r   c                 $    U S   =(       d    U S   $ r   r	   r
   s    r   r   r      s    q	 6VAY 6r   c                     U S   U S   -  $ r   r	   r
   s    r   r   r      s    F1Iq	$9r   c                     U S   (       + $ Nr   r	   r
   s    r   r   r       s
    VAYr   c                     U S   (       + $ r   r	   r
   s    r   r   r   !   s
    q	Mr   c                 0   > 0 U l         [        TU ]	  5         g N)
arg_valuessuper__init__self	__class__s    r   r   %BooleanExpressionEvalVisitor.__init__$   s    r   c                 |    [        U5      nX0R                  ;  a  [        SU 35      eU R                  U   " U5      $ )z+Performs the operation, if it is recognizedzUnknown op: )typebitops
ValueError)r   opr   op_types       r   	bit_binop&BooleanExpressionEvalVisitor.bit_binop(   s;    r(++%|G9566{{7#F++r   c                     U R                  UR                  U R                  UR                  5      U R                  UR                  5      /5      $ )z Handles ``&``, ``^``, and ``|``.)r&   r$   visitleftrightr   nodes     r   visit_BinOp(BooleanExpressionEvalVisitor.visit_BinOp/   s6    ~~dgg

499(=tzz$**?U'VWWr   c                 n    U R                  UR                  U R                  UR                  5      /5      $ )zHandles ``~``.)r&   r$   r)   operandr,   s     r   visit_UnaryOp*BooleanExpressionEvalVisitor.visit_UnaryOp3   s'    ~~dgg

4<<(@'ABBr   c                     UR                   U R                  ;  a  [        SUR                    35      eU R                  UR                      $ )zReduce variable names.zUndefined value for )idr   r#   r,   s     r   
visit_Name'BooleanExpressionEvalVisitor.visit_Name7   s<    77$//)3DGG9=>>tww''r   c                     [        UR                  5      S:w  d,  [        UR                  S   [        R                  5      (       d  [        S5      eU R                  UR                  S   5      $ )zLReturns the value of the single expression comprising the boolean expressionr   r   z(Incorrectly formatted boolean expression)lenbody
isinstanceastExprr#   r)   r,   s     r   visit_Module)BooleanExpressionEvalVisitor.visit_Module=   sM    tyy>Qj1sxx&H&HGHHzz$))A,''r   c                 8    U R                  UR                  5      $ )z#Returns the value of the expression)r)   valuer,   s     r   
visit_Expr'BooleanExpressionEvalVisitor.visit_ExprC   s    zz$**%%r   c                 0    [        S[        U5       35      e)z"Catch all for the unhandled nodes.zUnknown node: )r#   r!   r,   s     r   generic_visit*BooleanExpressionEvalVisitor.generic_visitG   s    >$t*677r   )r   )__name__
__module____qualname____firstlineno____doc___astBitAndAndBitOrOrBitXorNotInvertr"   r   r&   r.   r2   r6   r>   rB   rE   __static_attributes____classcell__r   s   @r   r   r      s    P
 	;8

969.1F,XC((&8 8r   r   c                   8   ^  \ rS rSrSrU 4S jrS rS rSrU =r	$ )%BooleanExpressionArgsCollectorVisitorL   zNode visitor to collect the name of the args of the expression
as defined in https://docs.python.org/3/library/ast.html#ast.NodeVisitorc                 N   > [        5       U l        0 U l        [        TU ]  5         g r   )setargsargs_posr   r   r   s    r   r   .BooleanExpressionArgsCollectorVisitor.__init__Q   s    E	r   c                 H   U R                   R                  UR                  5        UR                  U R                  ;  d3  U R                  UR                     UR                  UR
                  4:  a0  UR                  UR
                  4U R                  UR                  '   gg)zCollect arg name.N)r\   addr5   r]   lineno
col_offsetr,   s     r   r6   0BooleanExpressionArgsCollectorVisitor.visit_NameV   sm    		dgg77$--'MM$''"dkk4??%CC&*kk4??%CDMM$''" Dr   c                 4   ^  [        T R                  U 4S jS9$ )z@Returns a list of the args, sorted by their appearance locationsc                 "   > TR                   U    $ r   )r]   )argr   s    r   r   GBooleanExpressionArgsCollectorVisitor.get_sorted_args.<locals>.<lambda>`   s    s1Cr   )key)sortedr\   )r   s   `r   get_sorted_args5BooleanExpressionArgsCollectorVisitor.get_sorted_args^   s    dii%CDDr   )r\   r]   )
rG   rH   rI   rJ   rK   r   r6   rj   rT   rU   rV   s   @r   rX   rX   L   s     P
DE Er   rX   )rK   r<   rL   NodeVisitorr   rX   r	   r   r   <module>rm      s5     483?? 48nECOO Er   