§
    º³Ùg  ã                   óÂ   — d Z ddlZddlmZmZmZ dej        dededej        fd„Z	deded	edej        fd
„Z
dedej        fd„Zdedej        fd„Zdedej        fd„ZdS )z\
These are a number of elementary functions that are required for the AQC routines to work.
é    N)ÚRXGateÚRZGateÚRYGateÚunitaryÚnÚjÚreturnc                 ó²   — t          j        t          j        t          j        d|z  ¦  «        | ¦  «        t          j        d|dz
  |z
  z  ¦  «        ¦  «        S )aA  
    Computes I(j - 1) tensor product U tensor product I(n - j), where U is a unitary matrix
    of size ``(2, 2)``.

    Args:
        unitary: a unitary matrix of size ``(2, 2)``.
        n: num qubits.
        j: position where to place a unitary.

    Returns:
        a unitary of n qubits with u in position j.
    é   é   ©ÚnpÚkronÚeye)r   r   r   s      úh/granary/edev/quantum/lib/python3.11/site-packages/qiskit/synthesis/unitary/aqc/elementary_operations.pyÚplace_unitaryr      sE   € õ Œ7•2”7�2œ6 ! Q¡$™<œ<¨Ñ1Ô1µ2´6¸!ÀÀAÁÈÁ	Ñ:JÑ3KÔ3KÑLÔLÐLó    Úkc                 ó(  — ||k     �rt          j        t          j        t          j        d|z  ¦  «        ddgddgg¦  «        t          j        d| dz
  |z
  z  ¦  «        ¦  «        t          j        t          j        t          j        t          j        t          j        d|z  ¦  «        ddgddgg¦  «        t          j        d||z
  dz
  z  ¦  «        ¦  «        ddgddgg¦  «        t          j        d| dz
  |z
  z  ¦  «        ¦  «        z   }�nt          j        t          j        t          j        d|z  ¦  «        ddgddgg¦  «        t          j        d| dz
  |z
  z  ¦  «        ¦  «        t          j        t          j        t          j        t          j        t          j        d|z  ¦  «        ddgddgg¦  «        t          j        d||z
  dz
  z  ¦  «        ¦  «        ddgddgg¦  «        t          j        d| dz
  |z
  z  ¦  «        ¦  «        z   }|S )zÐ
    Places a CNOT from j to k.

    Args:
        n: number of qubits.
        j: control qubit.
        k: target qubit.

    Returns:
        a unitary of n qubits with CNOT placed at ``j`` and ``k``.
    r   r   r   r   )r   r   r   r   s       r   Ú
place_cnotr   %   sô  € ð 	ˆ1‚u�uÝ”'ÝŒG•B”F˜1˜a™4‘L”L A q 6¨A¨q¨6Ð"2Ñ3Ô3µR´V¸AÀ!ÀaÁ%È!Á)Ñ<LÑ5MÔ5Mñ
ô 
åŒGÝŒGÝ”�œ¥¤ q¨!¡t¡¤°°1¨v¸¸1°vÐ.>Ñ?Ô?ÅÄÈÈaÐRSÉeÐVWÉiÑHXÑAYÔAYÑZÔZØ�Q�˜!˜Q˜Ð ñô õ ŒF�1˜˜Q™ ™Ñ#Ñ$Ô$ñ
ô 
ñ
ˆ‰õ ”'ÝŒG•B”F˜1˜a™4‘L”L A q 6¨A¨q¨6Ð"2Ñ3Ô3µR´V¸AÀ!ÀaÁ%È!Á)Ñ<LÑ5MÔ5Mñ
ô 
åŒGÝŒGÝ”�œ¥¤ q¨!¡t¡¤°°1¨v¸¸1°vÐ.>Ñ?Ô?ÅÄÈÈaÐRSÉeÐVWÉiÑHXÑAYÔAYÑZÔZØ�Q�˜!˜Q˜Ð ñô õ ŒF�1˜˜Q™ ™Ñ#Ñ$Ô$ñ
ô 
ñ
ˆð €Nr   Úphic                 óD   — t          | ¦  «                             ¦   «         S )z�
    Computes an RX rotation by the angle of ``phi``.

    Args:
        phi: rotation angle.

    Returns:
        an RX rotation matrix.
    )r   Ú	to_matrix©r   s    r   Ú	rx_matrixr   H   ó   € õ �#‰;Œ;× Ò Ñ"Ô"Ð"r   c                 óD   — t          | ¦  «                             ¦   «         S )z�
    Computes an RY rotation by the angle of ``phi``.

    Args:
        phi: rotation angle.

    Returns:
        an RY rotation matrix.
    )r   r   r   s    r   Ú	ry_matrixr   U   r   r   c                 óD   — t          | ¦  «                             ¦   «         S )z�
    Computes an RZ rotation by the angle of ``phi``.

    Args:
        phi: rotation angle.

    Returns:
        an RZ rotation matrix.
    )r   r   r   s    r   Ú	rz_matrixr    b   r   r   )Ú__doc__Únumpyr   Ú%qiskit.circuit.library.standard_gatesr   r   r   ÚndarrayÚintr   r   Úfloatr   r   r    © r   r   ú<module>r(      s   ððð ð Ð Ð Ð à HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HÐ HðM˜2œ:ð M¨#ð M°#ð M¸"¼*ð Mð Mð Mð Mð  �#ð  ˜#ð   #ð  ¨"¬*ð  ð  ð  ð  ðF
#�5ð 
#˜RœZð 
#ð 
#ð 
#ð 
#ð
#�5ð 
#˜RœZð 
#ð 
#ð 
#ð 
#ð
#�5ð 
#˜RœZð 
#ð 
#ð 
#ð 
#ð 
#ð 
#r   