§
    ¹³Ùg£  ã                   ó  — d Z ddlZddlmZ ddlmZ dZ ej         ej	        dedz   ¦  «         ej	        dedz   ¦  «        ¦  «        \  Z
Ze
ez  ej        z  Ze
ez  ej        z  Zej         ej	        dd¦  «        z  Zdd„ZdS )z&Check if number close to values of PI
é    N)ÚParameterExpression)ÚQiskitErroré   é   é   é   ç•Ö&è.>Útextc                 óh  ‡‡‡— t          | t          ¦  «        rÿt          | ¦  «        }ddlm} ddl}t          | j        |j        ¦  «        st          d¦  «        ‚ || j        ¦  «        }| 	                    ¦   «         }|D ]”}	|	j
        sŒ
t          t          t          |	¦  «        ¦  «        ‰‰‰¬¦  «        }
	 t          |
¦  «        }ŒH# t          t          f$ r9 ddlm}  |t          |	¦  «        d¬¦  «        }|                     ||
¦  «        }Y Œ‘w xY w|S t          | t          ¦  «        r| S ˆˆˆfd	„}t%          | ¦  «        }t'          ||j        |j        g¦  «        \  }}‰d
k    rdnd}|dk    r|dk    r||z   }n2|dk    r*|dk    r$d}|j        dk     r‰d
k    sd|vrd}|› |› |› |› �}n|}|S )a¨  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.
    r   )ÚsympifyNz$Invalid ParameterExpression provided)ÚepsÚoutputÚndigits)ÚsstrF)Ú	full_precc                 óü  •— t          | ¦  «        ‰	k     rdS ‰dk    rd}n*‰dk    rd}n!‰dk    rd}n‰dk    rd	}nt          d
¦  «        ‚| dk     rdnd}| t          j        z  }t          |¦  «        d‰	z
  k    ršt          t          |¦  «        t          t	          |¦  «        ¦  «        z
  ¦  «        ‰	k     r]t          t          t	          |¦  «        ¦  «        ¦  «        }t          |¦  «        dk    r|› |› �}n‰dk    r
|› |› d|› �}n|› |› |› �}|S t          | ¦  «        t          j        k    rÇt          j        t          t          | ¦  «        t          z
  ¦  «        ‰	k     ¦  «        }|d         j        d         rz‰dk    r‰
€t          | ¦  «        }n`| d‰
› d�›}nW‰dk    r|› |› d|d         d         dz   › �}n8‰dk    r|› |› d|d         d         dz   › d�}n|› |› d|d         d         dz   › �}|S t          | ¦  «        t          t          j        z  k    r‰
€t          | ¦  «        }n| d‰
› d�›}|S t          j        | z  }t          t          |¦  «        t          t	          |¦  «        ¦  «        z
  ¦  «        ‰	k     rFt          t          t	          |¦  «        ¦  «        ¦  «        }‰dk    rd|› |› d|› d�}n	|› |› d|› �}|S t          j        t          j         t          | ¦  «        t          z
  ¦  «        ‰	k     ¦  «        }|d         j        d         rpt          |d         d         ¦  «        dz   }t          |d         d         ¦  «        dz   }‰dk    rd|› |› |› d|› d�}n‰dk    r|› |› d|› d|› �}n|› |› |› d|› �}|S t          j        t          j         t          | ¦  «        t          z
  ¦  «        ‰	k     ¦  «        }|d         j        d         rt          |d         d         ¦  «        dz   }t          |d         d         ¦  «        dz   }|dk    r‰dk    rd}‰dk    rd|› |› d|› |› d�}n‰dk    r|› |› d|› d|› d�}n|› |› d|› |› �}|S ‰dk    r‰
€| d›n| d‰
› d�›S ‰
€| › n| d‰
› d�›S )NÚ0r
   u   Ï€Ú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            €€€úS/granary/edev/quantum/lib/python3.11/site-packages/qiskit/circuit/tools/pi_check.pyÚ	normalizezpi_check.<locals>.normalizeI   sŽ  ø€ Ýˆ{ÑÔ˜cÒ!Ð!Ø�3à�VÒÐØˆBˆBØ�vÒÐØˆBˆBØ�wÒÐØˆBˆBØ�uŠ_ˆ_ØˆBˆBåÐ^Ñ_Ô_Ð_à$ qš˜�#�#¨bˆð �BœEÑ!ˆÝˆs‰8Œ8�q˜3‘wÒÐÝ•3�s‘8”8�c¥%¨¡*¤*™oœoÑ-Ñ.Ô.°Ò4Ð4Ý�#�e C™jœj™/œ/Ñ*Ô*�Ý�s‘8”8˜q’=�=Ø!(Ð.¨"Ð.Ð.�G�Gà Ò'Ð'Ø%,Ð"8¨cÐ"8Ð"8°BÐ"8Ð"8˜˜à%,Ð"7¨cÐ"7°2Ð"7Ð"7˜Ø�õ ˆ{ÑÔ�bœeÒ#Ð#Ý”H�S¥ [Ñ!1Ô!1µHÑ!<Ñ=Ô=ÀÒCÑDÔDˆEØ�QŒxŒ~˜aÔ ð Ø˜VÒ#Ð#Ø�Ý"% kÑ"2Ô"2˜˜à%0Ð">°7Ð">Ð">Ð">Ð">˜˜Ø˜wÒ&Ð&Ø!(Ð@¨"Ð@Ð@¨u°Q¬x¸¬{¸Q©Ð@Ð@�G�GØ˜u’_�_Ø!(ÐB¨"ÐBÐB°°a´¸´¸a±ÐBÐBÐB�G�Gà!(ÐA¨"ÐAÐA°°a´¸´¸a±ÐAÐA�GØ�õ ˆ{ÑÔ¥­2¬5Ñ 0Ò1Ð1ØˆÝ˜kÑ*Ô*��à(Ð6¨7Ð6Ð6Ð6Ð6�ØˆNõ Œe�kÑ!ˆÝ�s�3‰xŒx�#�e C™jœj™/œ/Ñ)Ñ*Ô*¨SÒ0Ð0Ý•c�% ™*œ*‘o”oÑ&Ô&ˆCØ˜Ò Ð Ø= WÐ=¨bÐ=Ð=°cÐ=Ð=Ð=��à$Ð0 bÐ0Ð0¨3Ð0Ð0�ØˆNõ
 Œx�œ�s ;Ñ/Ô/µ)Ñ;Ñ<Ô<¸sÒBÑCÔCˆØ�Œ7Œ=˜Ôð 		Ý˜˜Qœ œ
‘O”O aÑ'ˆEÝ˜˜Qœ œ
‘O”O aÑ'ˆEØ˜Ò Ð ØF WÐF¨eÐF°RÐFÐF¸UÐFÐFÐF��Ø˜6Ò!Ð!Ø$Ð: eÐ:Ð:¨bÐ:Ð:°5Ð:Ð:��à$Ð9 eÐ9¨RÐ9Ð9°%Ð9Ð9�ØˆNõ
 Œx�œ�s ;Ñ/Ô/µ*Ñ<Ñ=Ô=ÀÒCÑDÔDˆØ�Œ7Œ=˜Ôð 	Ý˜˜Qœ œ
‘O”O aÑ'ˆEÝ˜˜Qœ œ
‘O”O aÑ'ˆEØ˜Šzˆz˜f¨Ò.Ð.Ø�Ø˜Ò Ð ØF WÐF¨eÐFÐF¸ÐFÀÐFÐFÐF��Ø˜6Ò!Ð!Ø$Ð< eÐ<Ð<¨uÐ<Ð<°rÐ<Ð<Ð<��à$Ð9 eÐ9Ð9¨eÐ9°RÐ9Ð9�ØˆNð �VÒÐØ)0¨�kÐ%Ð%Ð%ÀÐ>[ÐPWÐ>[Ð>[Ð>[Ð>[Ð[Ø#* ?�+ÐÐ¸;Ð8TÈÐ8TÐ8TÐ8TÐ8TÐTó    r   z\jmathÚjr   ú+z\fracr   )Ú
isinstancer   r*   Úsympyr   Ú	symengineÚ_symbol_exprÚBasicr   ÚatomsÚ	is_numberÚpi_checkr#   ÚfloatÚ
ValueErrorÚ	TypeErrorr   ÚreplaceÚcomplexÚmapÚrealÚimag)Úinptr   r   r   Ú	param_strr   r=   ÚexprÚsymsÚsymr   Ú_r   Úsym_strr7   Úcomplex_inptrI   rJ   Újstrr1   Úop_strs    ```                 r6   rB   rB      sL  øøø€ õ* �$Õ+Ñ,Ô,ð Ý˜‘I”Iˆ	Ø!Ð!Ð!Ð!Ð!Ð!ØÐÐÐå˜$Ô+¨Y¬_Ñ=Ô=ð 	FÝÐDÑEÔEÐEØˆw�tÔ(Ñ)Ô)ˆØ�zŠz‰|Œ|ˆØð 
	;ð 
	;ˆCØ”=ð ØÝ�#�e C™jœj™/œ/¨s¸6È7ÐSÑSÔSˆBð;Ý˜"‘I”I��øÝ¥	Ð*ð ;ð ;ð ;Ø&Ð&Ð&Ð&Ð&Ð&à˜$�s 3™xœx°5Ð9Ñ9Ô9�Ø%×-Ò-¨g°rÑ:Ô:�	�	�	ð	;øøøð
 ÐÝ	�D�#Ñ	Ô	ð ØˆðhUð hUð hUð hUð hUð hUð hUõT ˜4‘=”=€LÝ�Y Ô!2°LÔ4EÐ FÑGÔG�J€Dˆ$à 'Ò)Ð)ˆ9ˆ9¨s€DØˆs‚{€{�t˜s’{�{Ø˜‘+ˆˆØ	�Šˆ˜ š˜ØˆàÔ˜qÒ Ð  f°Ò&7Ð&7¸8È4Ð;OÐ;OØˆFØÐ/˜6Ð/ 4Ð/¨Ð/Ð/ˆˆàˆØ€Ns   Â9C	Ã	ADÄD)r	   r
   N)Ú__doc__Únumpyr$   Ú"qiskit.circuit.parameterexpressionr   Úqiskit.exceptionsr   r+   ÚmeshgridÚarangeÚNÚDr   r,   r-   r(   rB   © r8   r6   ú<module>r^      sÛ   ððð ð Ð Ð Ð Ø BÐ BÐ BÐ BÐ BÐ BØ )Ð )Ð )Ð )Ð )Ð )à€Ø€r„{�9�2”9˜Q ¨1¡Ñ-Ô-¨y¨r¬y¸¸HÀq¹LÑ/IÔ/IÑJÔJ�€€1Ø�‰E�B”E‰M€	Ø�‰U�R”U‰]€
ØŒ5�I�B”I˜a ‘O”OÑ#€ðeð eð eð eð eð er8   