§
    º³Ùg˜  ã                   óF   — d Z ddlZddlmZ ddlmZ ddlmZ dedefd„Z	dS )	z/
Circuit synthesis for the CNOTDihedral class.
é    N)ÚQuantumCircuit)ÚQiskitError)ÚCNOTDihedralÚelemÚreturnc                 óÌ  — | j         }t          |¦  «        }|                      ¦   «         }t          j        t          j                             |j        ¦  «        dz  d¦  «        st          d¦  «        ‚t          |¦  «        D ]9}| j
        |         r*|                     |¦  «         |                     |¦  «         Œ:t          |¦  «        D �]}|j        |         |         s¯t          |dz   |¦  «        D ]›}|j        |         |         r†|                     ||¦  «         |                     ||¦  «         |                     ||¦  «         |                     ||¦  «         |                     ||¦  «         |                     ||¦  «          nŒœt          |¦  «        D ]G}||k    r?|j        |         |         r,|                     ||¦  «         |                     ||¦  «         ŒH�Œ|j
        t          j        |¦  «        k                         ¦   «         r/|j        t          j        |¦  «        k                         ¦   «         st          d¦  «        ‚|                     ¦   «         }d|j        _        t          j        |t          j        ¬¦  «        |j        _        t          j        t-          ||dz
  z  dz  ¦  «        t          j        ¬¦  «        |j        _        t          j        t-          ||dz
  z  |dz
  z  dz  ¦  «        t          j        ¬¦  «        |j        _        t          |¦  «        }t          |¦  «        D �]>}t          |dz   |¦  «        D �]&}t          |dz   |¦  «        D �]}|j                             |||g¦  «        dk    rê|                     ||¦  «         |                     ||¦  «         |                     d|¦  «         |                     ||¦  «         |                     ||¦  «         |                     ||¦  «         |                     ||¦  «         |                     t          j        dz  |g¦  «         |                     ||¦  «         |                     ||¦  «         �Œ�Œ(�Œ@t          |¦  «        D ]ö}t          |dz   |¦  «        D ]à}|j                             ||g¦  «        }	|j                             ||g¦  «        }
|
|	z
  dz  dz  }|dk    r•|                     ||¦  «         |                     ||¦  «         |                     ||¦  «         |                     ||¦  «         |                     |t          j        z  dz  |g¦  «         |                     ||¦  «         ŒáŒ÷t          |¦  «        D ]ƒ}|j                             |g¦  «        }	|j                             |g¦  «        }
|	|
z
  d	z  }|dk    r=|                     ||¦  «         |                     |t          j        z  dz  |g¦  «         Œ„| j        |j        k    rt          d
¦  «        ‚|                     ¦   «         }|                     |¦  «        S )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                úr/granary/edev/quantum/lib/python3.11/site-packages/qiskit/synthesis/cnotdihedral/cnotdihedral_decompose_general.pyÚsynth_cnotdihedral_generalr8      sQ  € ð. ”€JÝ˜ZÑ(Ô(€Gð �yŠy‰{Œ{€HåŒ;�œ	Ÿš h¤oÑ6Ô6¸Ñ:¸QÑ?Ô?ð <ÝÐ:Ñ;Ô;Ð;õ �:ÑÔð "ð "ˆØŒ:�aŒ=ð 	"Ø�IŠI�a‰LŒLˆLØ×Ò˜qÑ!Ô!Ð!øõ �:ÑÔð .ñ .ˆàŒ˜qÔ! !Ô$ð 		Ý˜1˜q™5 *Ñ-Ô-ð ð �Ø”? 1Ô% aÔ(ð Ø—J’J˜q !Ñ$Ô$Ð$Ø—J’J˜q !Ñ$Ô$Ð$Ø—J’J˜q !Ñ$Ô$Ð$Ø×'Ò'¨¨1Ñ-Ô-Ð-Ø×'Ò'¨¨1Ñ-Ô-Ð-Ø×'Ò'¨¨1Ñ-Ô-Ð-Ø�Eðõ �zÑ"Ô"ð 	.ð 	.ˆAØ�AŠvˆvØ”? 1Ô% aÔ(ð .Ø—J’J˜q !Ñ$Ô$Ð$Ø×'Ò'¨¨1Ñ-Ô-Ð-øñ		.ð Œ^�rœx¨
Ñ3Ô3Ò3×8Ò8Ñ:Ô:ðIà”¥2¤6¨*Ñ#5Ô#5Ò5×:Ò:Ñ<Ô<ðIõ ÐGÑHÔHÐHð �}Š}‰Œ€HØ€H„MÔÝœX j½¼Ð@Ñ@Ô@€H„MÔÝœX¥c¨*¸
ÀQ¹Ñ*GÈ!Ñ*KÑ&LÔ&LÕTVÔT[Ð\Ñ\Ô\€H„MÔÝœXÝˆJ˜* q™.Ñ)¨Z¸!©^Ñ<¸qÑ@ÑAÔAÍÌðñ ô €H„MÔõ ! Ñ,Ô,€Kõ �:ÑÔð )ñ )ˆÝ�q˜1‘u˜jÑ)Ô)ð 	)ñ 	)ˆAÝ˜1˜q™5 *Ñ-Ô-ð )ñ )�Ø”=×)Ò)¨1¨a°¨)Ñ4Ô4¸Ò9Ð9Ø×'Ò'¨¨1Ñ-Ô-Ð-Ø×'Ò'¨¨1Ñ-Ô-Ð-Ø×*Ò*¨1¨aÑ0Ô0Ð0Ø×'Ò'¨¨1Ñ-Ô-Ð-Ø×'Ò'¨¨1Ñ-Ô-Ð-Ø—N’N 1 aÑ(Ô(Ð(Ø—N’N 1 aÑ(Ô(Ð(Ø—M’M¥2¤5¨1¡9°¨sÑ3Ô3Ð3Ø—N’N 1 aÑ(Ô(Ð(Ø—N’N 1 aÑ(Ô(Ð(ùñ)ñ	)õ �:ÑÔð %ð %ˆÝ�q˜1‘u˜jÑ)Ô)ð 
	%ð 
	%ˆAØ”M×*Ò*¨A¨q¨6Ñ2Ô2ˆEØ”M×*Ò*¨A¨q¨6Ñ2Ô2ˆEØ˜U‘] aÑ'¨1Ñ,ˆDØ�qŠyˆyØ×#Ò# A qÑ)Ô)Ð)Ø×&Ò& t¨QÑ/Ô/Ð/Ø×#Ò# A qÑ)Ô)Ð)Ø—’˜q !Ñ$Ô$Ð$Ø—’˜t¥b¤e™|¨aÑ/°1°#Ñ6Ô6Ð6Ø—’˜q !Ñ$Ô$Ð$øð
	%õ �:ÑÔð 3ð 3ˆØ”×&Ò&¨ sÑ+Ô+ˆØ”×&Ò&¨ sÑ+Ô+ˆØ˜‘ Ñ"ˆØ�1Š9ˆ9Ø×"Ò" 4¨Ñ+Ô+Ð+Ø�MŠM˜4¥"¤%™<¨!Ñ+¨q¨cÑ2Ô2Ð2øà„y�H”MÒ!Ð!ÝÐ?Ñ@Ô@Ð@à—/’/Ñ#Ô#€KØ×Ò˜{Ñ+Ô+Ð+ó    )
Ú__doc__Únumpyr   Úqiskit.circuitr   Úqiskit.exceptionsr   Úqiskit.quantum_infor   r8   © r9   r7   ú<module>r@      s‡   ððð ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )Ø )Ð )Ð )Ð )Ð )Ð )Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ðw, \ð w,°nð w,ð w,ð w,ð w,ð w,ð w,r9   