
    z	iP                     :   S r SSKrSSKJr  SSKJr  Sr\R                  " \R                  " S\S-   5      \R                  " S\S-   5      5      u  r
r\
\-  \R                  -  r\
\-  \R                  -  r\R                  \R                  " SS5      -  rS
S	 jrg)z%Check if number close to values of PI    N)ParameterExpression)QiskitError            c           	        ^^^ [        U [        5      (       aP  [        U 5      nU R                  5       nU H-  n[	        [        [        U5      5      TTTS9n [        U5      nM/     U$ [        U [        5      (       a  U $ UUU4S jn[        U 5      n[        XR                   UR"                  /5      u  pTS:X  a  SOSnUS:X  a  US:w  a  X-   nU$ US:w  a2  US:w  a,  S	nUR"                  S:  a  TS:w  d  S
U;  a  SnU U U U 3nU$ UnU$ ! [        [        4 a[    SSK	n	[        U	R                  R                  R                  R                  [        U5      5      5      n
UR                  X5      n GMB  f = f)ah  Computes if a number is close to an integer
fraction or multiple of PI and returns the
corresponding string.

Args:
    inpt (float): Number to check.
    eps (float): EPS to check against.
    output (str): Options are 'text' (default),
                  'latex', 'mpl', and 'qasm'.
    ndigits (int or None): Number of digits to print
                           if returning raw inpt.
                           If `None` (default), Python's
                           default float formatting is used.

Returns:
    str: string representation of output.

Raises:
    QiskitError: if output is not a valid option.
)epsoutputndigitsr   Nc                   > [        U 5      T	:  a  gTS:X  a  SnO&TS:X  a  SnOTS:X  a  SnOTS:X  a  S	nO[        S
5      eU S:  a  SOSnU [        R                  -  n[        U5      ST	-
  :  a|  [        [        U5      [        [	        U5      5      -
  5      T	:  aO  [        [        [	        U5      5      5      n[        U5      S:X  a  U U 3nU$ TS:X  a  U U SU 3nU$ U U U 3nU$ [        U 5      [        R                  :  a  [        R                  " [        [        U 5      [        -
  5      T	:  5      nUS   R                  S   (       aj  TS:X  a  T
c  [        U 5      nU$ U ST
 S3 n U$ TS:X  a  U U SUS   S   S-    3nU$ TS:X  a  U U SUS   S   S-    S3nU$ U U SUS   S   S-    3nU$ [        U 5      [        [        R                  -  :  a  T
c  [        U 5      nU$ U ST
 S3 nU$ [        R                  U -  n[        [        U5      [        [	        U5      5      -
  5      T	:  a;  [        [        [	        U5      5      5      nTS:X  a  SU U SU S3nU$ U U SU 3nU$ [        R                  " [        R                   " [        U 5      [        -
  5      T	:  5      nUS   R                  S   (       a^  [        US   S   5      S-   n[        US   S   5      S-   nTS:X  a  SU U U SU S3nU$ TS:X  a  U U SU SU 3nU$ U U U SU 3nU$ [        R                  " [        R                   " [        U 5      [        -
  5      T	:  5      nUS   R                  S   (       am  [        US   S   5      S-   n[        US   S   5      S-   nUS:X  a  TS:w  a  SnTS:X  a  SU U SU U S3nU$ TS:X  a  U U SU SU S3nU$ U U SU U 3nU$ TS:X  a  T
c  U S $ U ST
 S3 $ T
c  U  $ U ST
 S3 $ )N0textu   πqasmpilatexz\pimplz$\pi$z>pi_check parameter output should be text, latex, mpl, or qasm.r   - r   *.g^r   z$^$z**z\frac{z}{}/z/()#z#.)absr   npr   roundintwherePOW_LISTshapestrMAX_FRAC	FRAC_MESH
RECIP_MESH)single_inptr   neg_strvalstr_outpowerfracnumerdenomr
   r   r   s            W/home/james-whalen/.local/lib/python3.13/site-packages/qiskit/circuit/tools/pi_check.py	normalizepi_check.<locals>.normalizeB   s   {c!VBvBwBu_B^__$q#b BEE!s8q3w3s8c%*o-.4#eCj/*s8q=!(	".G 	 '%,IcU!B4"8  &-IcU2$"7 {bee#HHS[!1H!<=CDEQx~~a V#"%k"2  &17)1$=  w&!(	"QuQx{Q.?@G
 	 u_!(	"Raa/@BG  ")	"Raa/@AG {255 01k* N )7)15N eek!s3x#eCj/)*S0c%*o&C $WIbTcU"= N %IbT3%0N
 xxs;/);<sBC7==Q
Oa'EQ
Oa'E $WIeWRDUG2F
 N	 6!$IeWAbT5': N %IeWRD%9N
 xxs;/*<=CD7==Q
Oa'EQ
Oa'Ezf. $WIeWDt2F
 N	 6!$IeWBugQrd!< N %IeWAeWRD9N V)0k!_[RPWyXYM@Z[#*?+T;q	QRl:ST    r   z\jmathjr   +z\fracr   )
isinstancer   r&   _valuespi_checkr   float
ValueError	TypeErrorqiskit._accelerate.circuit_acceleratecircuit_Valuereplacecomplexmaprealimag)inptr
   r   r   	param_strvaluesr,   r   _qiskitsym_strr3   complex_inptrE   rF   jstrr-   op_strs    ```              r2   r:   r:      s   * $+,,I	C#eCj/s67SB;"I  	D#		hUT 4=LY!2!2L4E4E FGJD')9sDs{ts{+ N 
q f&784;OFF6(4&/ N NG 	* ;1 f0088LLSSTWX[T\]^%--g:	;s   DA&E98E9)g&.>r   N)__doc__numpyr    "qiskit.circuit.parameterexpressionr   qiskit.exceptionsr   r'   meshgridarangeNDr   r(   r)   r$   r:    r5   r2   <module>rY      s    ,  B )	{{299Q1-ryyHqL/IJ1EBEEM	URUU]
55BIIaO#_r5   