
    z	i                         S r SSKrSSKJr  SSKJr  1 Skr1 Skr " S S\R                  5      r	\R                  " S	5      S
\4S j5       rg)zFParser for sympy expressions srepr from ParameterExpression internals.    N)QpyError)	HAS_SYMPY>   AbsAddDivMulPowSubcosexplogsintanacosasinatanFloatSymbolComplexIntegerRational	conjugate>   r   r   r   r   r   r   r   r   r   r   r   r   c                       \ rS rSrSrS rS\R                  4S jrS\R                  4S jr
S\R                  4S jrSrg	)
ParseSympyWalker<   zaA custom ast walker that is passed the sympy srepr from QPY < 13 and creates a custom
expression.c                     / U l         g )Nstack)selfs    _/home/james-whalen/.local/lib/python3.13/site-packages/qiskit/qpy/binary_io/parse_sympy_repr.py__init__ParseSympyWalker.__init__@   s	    
    nodec                    U R                  UR                  5        U R                  R                  5       n[	        UR
                  [        R                  5      (       a  U R                  R                  U75        g[	        UR
                  [        R                  5      (       a  U R                  R                  U* 5        g[	        UR
                  [        R                  5      (       a!  U R                  R                  U(       + 5        g[	        UR
                  [        R                  5      (       a  U R                  R                  U) 5        g[        SUR
                   35      e)zVisit a python unary op nodez)Invalid unary op as part of sympy srepr: N)visitoperandr   pop
isinstanceopastUAddappendUSubNotInvertr   )r   r$   args      r    visit_UnaryOpParseSympyWalker.visit_UnaryOpC   s    

4<< jjnndggsxx((JJsd#**JJsd#))JJ#g&,,JJsd#FtwwiPQQr#   c                 N    U R                   R                  UR                  5        g)zVisit a constant node.N)r   r-   value)r   r$   s     r    visit_ConstantParseSympyWalker.visit_ConstantR   s    

$**%r#   c                    SSK n[        UR                  [        R                  5      (       a  UR                  R
                  nO[        S5      eU[        ;  a  [        U S35      eUR                  nU[        ;   av  [        U5      S:w  a  [        U S35      eU R                  US   5        [        X#5      " U R                  R                  5       5      nU R                  R                  U5        gU H  nU R                  U5        M     [!        [        U5      5       Vs/ s H  opR                  R                  5       PM     nnUR#                  5         [        X#5      " U6 nU R                  R                  U5        gs  snf )zSVisit a call node

This can only be parameter expression allowed sympy call types.
r   NzUnknown node typez. is not part of a valid sympy expression srepr   z- has an invalid number of args in sympy srepr)sympyr)   funcr+   Nameidr   ALLOWED_CALLERSargsUNARYlenr&   getattrr   r(   r-   rangereverse)	r   r$   r:   namer?   objr1   _out_argss	            r    
visit_CallParseSympyWalker.visit_CallV   s*   
 	dii**99<<D.//&dV#QRSSyy5=4yA~$'TUVVJJtAw%&tzz~~'78CJJc"

3 27D	2BC2BQ

(2BHC%&1CJJc" Ds   $#Fr   N)__name__
__module____qualname____firstlineno____doc__r!   r+   UnaryOpr2   Constantr6   CallrI   __static_attributes__ r#   r    r   r   <   s>    R#++ R&3<< &#sxx #r#   r   zhSympy is required to parse parameter expressions encoded using sympy's srepr in QPY format versions < 13
sympy_reprc                     [         R                  " U SS9n[        5       nUR                  U5        UR                  R                  5       $ )z<Parse a given sympy srepr into a symbolic expression object.eval)mode)r+   parser   r&   r   r(   )rU   treevisitors      r    parse_sympy_reprr\   u   s;     99Zf-D GMM$==r#   )rO   r+   qiskit.qpy.exceptionsr   qiskit.utils.optionalsr   r>   r@   NodeVisitorr   require_in_callstrr\   rT   r#   r    <module>rb      s^    M 
 * ,.	 6#s 6#r ( 	r#   