ó
    Óz	i˜  ã                   óF   • S r SSKrSSKJr  SSKJr  SSKJr  S\S\4S jr	g)	z/
Circuit synthesis for the CNOTDihedral class.
é    N)ÚQuantumCircuit)ÚQiskitError)ÚCNOTDihedralÚelemÚreturnc                 ó<  • U R                   n[        U5      nU R                  5       n[        R                  " [        R
                  R                  UR                  5      S-  S5      (       d  [        S5      e[        U5       H;  nU R                  U   (       d  M  UR                  U5        UR                  U5        M=     [        U5       GH  nUR                  U   U   (       d•  [        US-   U5       H‚  nUR                  U   U   (       d  M  UR                  XT5        UR                  XE5        UR                  XT5        UR                  XT5        UR                  XE5        UR                  XT5          O   [        U5       HE  nXT:w  d  M
  UR                  U   U   (       d  M#  UR                  XE5        UR                  XE5        MG     GM     UR                  [        R                  " U5      :H  R!                  5       (       a6  UR                  [        R"                  " U5      :H  R!                  5       (       d  [        S5      eUR                  5       nSUR$                  l        [        R                  " U[        R(                  S9UR$                  l        [        R                  " [-        XS-
  -  S-  5      [        R(                  S9UR$                  l        [        R                  " [-        XS-
  -  US-
  -  S-  5      [        R(                  S9UR$                  l        [        U5      n[        U5       GH  n[        US-   U5       Hú  n[        US-   U5       Hä  nUR$                  R3                  XEU/5      S:w  d  M&  UR                  XH5        UR                  XX5        UR5                  SU5        UR                  XH5        UR                  XX5        UR                  XH5        UR                  XX5        UR7                  [        R8                  S-  U/5        UR                  XH5        UR                  XX5        Mæ     Mü     GM     [        U5       Hß  n[        US-   U5       HÉ  nUR$                  R3                  XE/5      n	UR$                  R3                  XE/5      n
X©-
  S-  S-  nUS:w  d  MM  UR                  XE5        UR5                  Xµ5        UR                  XE5        UR                  XE5        UR7                  U[        R8                  -  S-  U/5        UR                  XE5        MË     Má     [        U5       H‚  nUR$                  R3                  U/5      n	UR$                  R3                  U/5      n
Xš-
  S	-  nUS:w  d  MJ  UR5                  X´5        UR7                  U[        R8                  -  S-  U/5        M„     U R$                  UR$                  :w  a  [        S
5      eUR;                  5       nUR=                  U5      $ )aº  Decompose a :class:`.CNOTDihedral` element into a :class:`.QuantumCircuit`.

Decompose a general :class:`.CNOTDihedral` elements.
The number of CX gates is not necessarily optimal.
For a decomposition of a 1-qubit or 2-qubit element, call
:func:`.synth_cnotdihedral_two_qubits`.

Args:
    elem: A :class:`.CNOTDihedral` element.

Returns:
    A circuit implementation of the :class:`.CNOTDihedral` element.

Raises:
    QiskitError: if the element could not be decomposed into a circuit.

References:
    1. Andrew W. Cross, Easwar Magesan, Lev S. Bishop, John A. Smolin and Jay M. Gambetta,
       *Scalable randomized benchmarking of non-Clifford gates*,
       npj Quantum Inf 2, 16012 (2016).
é   é   zLinear part is not invertible.z+Cannot do Gauss elimination on linear part.r   )Údtypeé   é   é   z#Could not recover phase polynomial.)Ú
num_qubitsr   ÚcopyÚnpÚallcloseÚlinalgÚdetÚlinearr   ÚrangeÚshiftÚxÚ	_append_xÚcxÚ
_append_cxÚzerosÚallÚeyeÚpolyÚweight_0Úint8Úweight_1ÚintÚweight_2Úweight_3Úget_termÚ_append_phaseÚpÚpiÚinverseÚcompose)r   r   ÚcircuitÚelem_cpyÚiÚjÚnew_elemÚnew_circuitÚkÚtpow1Útpow2ÚtpowÚinv_circuits                Úv/home/james-whalen/.local/lib/python3.13/site-packages/qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.pyÚsynth_cnotdihedral_generalr8      sÊ  € ð. —‘€JÜ˜ZÓ(€Gð y‰y‹{€Hä;Š;œŸ	™	Ÿ™ h§o¡oÓ6¸Ñ:¸Q×?Ñ?ÜÐ:Ó;Ð;ô :ÖˆØ:‰:a=‰=ØI‰IaŒLØ×Ñ˜qÖ!ñ ô :×ˆà‰˜qÑ! !×$Ü˜1˜q™5 *Ö-Ø—?‘? 1Ñ% a×(Ñ(Ø—J‘J˜qÔ$Ø—J‘J˜qÔ$Ø—J‘J˜qÔ$Ø×'Ñ'¨Ô-Ø×'Ñ'¨Ô-Ø×'Ñ'¨Ô-Ùñ .ô zÖ"ˆAØvØ—?‘? 1Ñ% a×(Ñ(Ø—J‘J˜qÔ$Ø×'Ñ'¨Ö-ô	 #ñ ð( ^‰^œrŸxšx¨
Ó3Ñ3×8Ñ8×:Ñ:Ø—‘¤2§6¢6¨*Ó#5Ñ5×:Ñ:×<Ñ<äÐGÓHÐHð }‰}‹€HØ€H‡MMÔÜŸXšX j¼¿¹Ñ@€H‡MMÔÜŸXšX¤c¨*ÀQ¹Ñ*GÈ!Ñ*KÓ&LÔTV×T[ÑT[Ñ\€H‡MMÔÜŸXšXÜˆJ q™.Ñ)¨Z¸!©^Ñ<¸qÑ@ÓAÌÏÉñ€H‡MMÔô ! Ó,€Kô :×ˆÜq˜1‘u˜jÖ)ˆAÜ˜1˜q™5 *Ö-Ø—=‘=×)Ñ)¨1°¨)Ó4¸Õ9Ø×'Ñ'¨Ô-Ø×'Ñ'¨Ô-Ø×*Ñ*¨1¨aÔ0Ø×'Ñ'¨Ô-Ø×'Ñ'¨Ô-Ø—N‘N 1Ô(Ø—N‘N 1Ô(Ø—M‘M¤2§5¡5¨1¡9°¨sÔ3Ø—N‘N 1Ô(Ø—N‘N 1Ö(ó .ô *ñ ô  :ÖˆÜq˜1‘u˜jÖ)ˆAØ—M‘M×*Ñ*¨A¨6Ó2ˆEØ—M‘M×*Ñ*¨A¨6Ó2ˆEØ‘] aÑ'¨1Ñ,ˆDØqyØ×#Ñ# AÔ)Ø×&Ñ& tÔ/Ø×#Ñ# AÔ)Ø—‘˜qÔ$Ø—‘˜t¤b§e¡e™|¨aÑ/°1°#Ô6Ø—‘˜qÖ$ó *ñ ô :ÖˆØ—‘×&Ñ&¨ sÓ+ˆØ—‘×&Ñ&¨ sÓ+ˆØ‘ Ñ"ˆØ19Ø×"Ñ" 4Ô+ØM‰M˜4¤"§%¡%™<¨!Ñ+¨q¨cÖ2ñ ð ‡yyH—M‘MÓ!ÜÐ?Ó@Ð@à—/‘/Ó#€KØ×Ñ˜{Ó+Ð+ó    )
Ú__doc__Únumpyr   Úqiskit.circuitr   Úqiskit.exceptionsr   Úqiskit.quantum_infor   r8   © r9   r7   Ú<module>r@      s.   ðñó Ý )Ý )Ý ,ðw, \ð w,°nõ w,r9   