§
    ¹³Ùg3  ã                   ó†   — d Z ddlmZmZ ddlmZ ddlmZ ddlZddl	m
Z
 ddlmZ ddlmZ dd	lmZ  G d
„ de
¦  «        ZdS )zOne-pulse single-qubit gate.é    )ÚsqrtÚpi)Úexp)ÚOptionalN)ÚGate)ÚParameterValueType)ÚQuantumRegister)ÚStandardGatec            	       óx   ‡ — e Zd ZdZej        Z	 ddddœdededee	         fˆ fd„Z
d	„ Zddefd„Zdd„Zd„ Zˆ xZS )ÚU2Gateu—  Single-qubit rotation about the X+Z axis.

    Implemented using one X90 pulse on IBM Quantum systems:

    .. warning::

       This gate is deprecated. Instead, the following replacements should be used

       .. math::

           U2(\phi, \lambda) = U\left(\frac{\pi}{2}, \phi, \lambda\right)

       .. code-block:: python

          circuit = QuantumCircuit(1)
          circuit.u(pi/2, phi, lambda)



    **Circuit symbol:**

    .. code-block:: text

             â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”�
        q_0: â”¤ U2(Ï†,Î») â”œ
             â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    **Matrix Representation:**

    .. math::

        U2(\phi, \lambda) = \frac{1}{\sqrt{2}}
            \begin{pmatrix}
                1          & -e^{i\lambda} \\
                e^{i\phi} & e^{i(\phi+\lambda)}
            \end{pmatrix}

    **Examples:**

    .. math::

        U2(\phi,\lambda) = e^{i \frac{\phi + \lambda}{2}}RZ(\phi)
        RY\left(\frac{\pi}{2}\right) RZ(\lambda)
        = e^{- i\frac{\pi}{4}} P\left(\frac{\pi}{2} + \phi\right)
        \sqrt{X} P\left(\lambda- \frac{\pi}{2}\right)

    .. math::

        U2(0, \pi) = H

    .. math::

        U2(0, 0) = RY(\pi/2)

    .. math::

        U2(-\pi/2, \pi/2) = RX(\pi/2)

    .. seealso::

        :class:`~qiskit.circuit.library.standard_gates.U3Gate`:
        U3 is a generalization of U2 that covers all single-qubit rotations,
        using two X90 pulses.
    NÚdt)ÚdurationÚunitÚphiÚlamÚlabelc                óZ   •— t          ¦   «                              dd||g|||¬¦  «         dS )zCreate new U2 gate.Úu2é   )r   r   r   N)ÚsuperÚ__init__)Úselfr   r   r   r   r   Ú	__class__s         €ú^/granary/edev/quantum/lib/python3.11/site-packages/qiskit/circuit/library/standard_gates/u2.pyr   zU2Gate.__init__\   s5   ø€ õ 	‰Œ×Ò˜˜q 3¨ *°EÀHÐSWÐÑXÔXÐXÐXÐXó    c                 ó  — ddl m} ddlm} t	          dd¦  «        } ||| j        ¬¦  «        } |t          dz  | j        d         | j        d         ¦  «        |d         gg fg}|D ]\  }}}|                     |||¦  «         Œ|| _	        d S )Nr   )ÚQuantumCircuitr   )ÚU3GateÚq)Únameé   )
Úqiskit.circuit.quantumcircuitr   Úu3r   r	   r    r   ÚparamsÚ_appendÚ
definition)	r   r   r   r   ÚqcÚrulesÚinstrÚqargsÚcargss	            r   Ú_definezU2Gate._defineh   s¸   € à@Ð@Ð@Ð@Ð@Ð@ØÐÐÐÐÐå˜A˜sÑ#Ô#ˆØˆ^˜A D¤IÐ.Ñ.Ô.ˆØ�&�˜a™ ¤¨Q¤°´¸Q´Ñ@Ô@À1ÀQÄ4À&È"ÐMÐNˆØ#(ð 	,ð 	,ÑˆE�5˜%Ø�JŠJ�u˜e UÑ+Ô+Ð+Ð+àˆŒˆˆr   FÚ	annotatedc                 ór   — t          | j        d          t          z
  | j        d          t          z   ¦  «        S )a  Return inverted U2 gate.

        :math:`U2(\phi, \lambda)^{\dagger} =U2(-\lambda-\pi, -\phi+\pi))`

        Args:
            annotated: when set to ``True``, this is typically used to return an
                :class:`.AnnotatedOperation` with an inverse modifier set instead of a concrete
                :class:`.Gate`. However, for this class this argument is ignored as the inverse
                of this gate is always a :class:`.U2Gate` with inverse parameter values.

        Returns:
            U2Gate: inverse gate.
        r   r   )r   r$   r   )r   r-   s     r   ÚinversezU2Gate.inverseu   s.   € õ �t”{ 1”~�o­Ñ*¨T¬[¸¬^¨O½bÑ,@ÑAÔAÐAr   c           	      ó\  — |du rt          d¦  «        ‚dt          d¦  «        z  }| j        \  }}t          |¦  «        t          |¦  «        }}t	          j        |t          d|z  ¦  «         |z  gt          d|z  ¦  «        |z  t          d||z   z  ¦  «        |z  gg|pt          ¬¦  «        S )z%Return a Numpy.array for the U2 gate.Fz9unable to avoid copy while creating an array as requestedr   r!   y              ð?)Údtype)Ú
ValueErrorr   r$   ÚfloatÚnumpyÚarrayr   Úcomplex)r   r1   ÚcopyÚisqrt2r   r   s         r   Ú	__array__zU2Gate.__array__…   s·   € à�5ˆ=ˆ=ÝÐXÑYÔYÐYØ•T˜!‘W”W‘ˆØ”;‰ˆˆSÝ˜‘:”:�u S™zœzˆSˆÝŒ{à�#˜b 3™h™-œ-˜¨&Ñ0Ð1Ý�R˜#‘X‘” Ñ'­¨R°3¸±9Ñ-=Ñ)>Ô)>ÀÑ)GÐHðð Ð"�7ð
ñ 
ô 
ð 	
r   c                 óV   — t          |t          ¦  «        o|                      |¦  «        S ©N)Ú
isinstancer   Ú_compare_parameters)r   Úothers     r   Ú__eq__zU2Gate.__eq__”   s%   € Ý˜%¥Ñ(Ô(ÐL¨T×-EÒ-EÀeÑ-LÔ-LÐLr   r;   )F)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r
   r   Ú_standard_gater   r   Ústrr   r,   Úboolr/   r9   r?   Ú__classcell__)r   s   @r   r   r      sù   ø€ € € € € ð?ð ?ðB "Ô(€Nð  $ð	
Yð Øð
Yð 
Yð 
Yàð
Yð  ð
Yð ˜Œ}ð	
Yð 
Yð 
Yð 
Yð 
Yð 
Yðð ð ðBð B ð Bð Bð Bð Bð 
ð 
ð 
ð 
ðMð Mð Mð Mð Mð Mð Mr   r   )rC   Úmathr   r   Úcmathr   Útypingr   r4   Úqiskit.circuit.gater   Ú"qiskit.circuit.parameterexpressionr   Úqiskit.circuit.quantumregisterr	   Úqiskit._accelerate.circuitr
   r   © r   r   ú<module>rP      sâ   ðð #Ð "Ø Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø AÐ AÐ AÐ AÐ AÐ AØ :Ð :Ð :Ð :Ð :Ð :Ø 3Ð 3Ð 3Ð 3Ð 3Ð 3ð}Mð }Mð }Mð }Mð }MˆTñ }Mô }Mð }Mð }Mð }Mr   