§
    ¹³Ùg¦  ã                   óN   — d Z ddlZddlZddlmZ ddlmZ  G d„ de¦  «        ZdS )z6Rotation around an arbitrary axis on the Bloch sphere.é    N)ÚGate)ÚCircuitErrorc            	       ó`   ‡ — e Zd ZdZddedededefˆ fd„Zd„ Zdd
efd„Z	de
j        fd„Zˆ xZS )ÚRVGateuæ  Rotation around arbitrary rotation axis :math:`\vec{v}` where :math:`\|\vec{v}\|_2` is
    angle of rotation in radians.

    Can be applied to a :class:`~qiskit.circuit.QuantumCircuit`
    with the :meth:`~qiskit.circuit.QuantumCircuit.rv` method.

    **Circuit symbol:**

    .. code-block:: text

             â”Œâ”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”�
        q_0: â”¤ RV(v_x,v_y,v_z) â”œ
             â””â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”€â”˜

    **Matrix Representation:**

    .. math::

        \newcommand{\rotationangle}{\frac{\|\vec{v}\|_2}{2}}
            R(\vec{v}) = e^{-i \vec{v}\cdot\vec{\sigma} / 2} =
                \begin{pmatrix}
                    \cos\left(\rotationangle\right)
                    -i \frac{v_z}{\|\vec{v}\|_2} \sin\left(\rotationangle\right)
                    & -(i \frac{v_x}{\|\vec{v}\|_2}
                    + \frac{v_y}{\|\vec{v}\|_2}) \sin\left(\rotationangle\right) \\
                    -(i \frac{v_x}{\|\vec{v}\|_2}
                    - \frac{v_y}{\|\vec{v}\|_2}) \sin\left(\rotationangle\right)
                    & \cos\left(\rotationangle\right)
                    + i \frac{v_z}{\|\vec{v}\|_2} \sin\left(\rotationangle\right)
                \end{pmatrix}
    ÚUÚv_xÚv_yÚv_zÚbasisc                 ó‚   •— ddl m} t          ¦   «                              dd|||g¦  «          ||¬¦  «        | _        dS )zî
        Args:
            v_x: x-component
            v_y: y-component
            v_z: z-component
            basis: basis (see
                :class:`~qiskit.synthesis.one_qubit.one_qubit_decompose.OneQubitEulerDecomposer`)
        r   )ÚOneQubitEulerDecomposerÚrvé   )r   N)Ú.qiskit.synthesis.one_qubit.one_qubit_decomposer   ÚsuperÚ__init__Ú_decomposer)Úselfr   r	   r
   r   r   Ú	__class__s         €úa/granary/edev/quantum/lib/python3.11/site-packages/qiskit/circuit/library/generalized_gates/rv.pyr   zRVGate.__init__6   sV   ø€ ð 	[ÐZÐZÐZÐZÐZå‰Œ×Ò˜˜q 3¨¨S /Ñ2Ô2Ð2Ø2Ð2¸Ð?Ñ?Ô?ˆÔÐÐó    c                 ó¶   — 	 |                       |                      ¦   «         ¦  «        | _        d S # t          $ r}t	          d| j        › d�¦  «        |‚d }~ww xY w)NzThe z2 gate cannot be decomposed with unbound parameters)r   Ú	to_matrixÚ
definitionÚ	TypeErrorr   Úname)r   Úexs     r   Ú_definezRVGate._defineE   sn   € ð	Ø"×.Ò.¨t¯~ª~Ñ/?Ô/?Ñ@Ô@ˆDŒOˆOˆOøÝð 	ð 	ð 	ÝØT�t”yÐTÐTÐTñô àðøøøøð	øøøs   ‚,0 °
AºAÁAFÚ	annotatedc                 ó@   — | j         \  }}}t          | | | ¦  «        S )zInvert this gate.)Úparamsr   )r   r   ÚvxÚvyÚvzs        r   ÚinversezRVGate.inverseM   s'   € à”[‰
ˆˆB�Ý�r�c˜B˜3  Ñ$Ô$Ð$r   Úreturnc                 ó¼  — t          j        | j        t          ¬¦  «        }t	          j        |                     |¦  «        ¦  «        }|dk    rt          j        ddgddgg¦  «        S ||z  \  }}}t	          j        |dz  ¦  «        }t	          j	        |dz  ¦  «        }t          j        |d|z  |z  z
  | d|z  z
  |z  g|d|z  z
  |z  |d|z  |z  z   gg¦  «        S )z'Return a numpy.array for the R(v) gate.)Údtyper   r   é   y              ð?)
ÚnumpyÚasarrayr!   ÚfloatÚmathÚsqrtÚdotÚarrayÚsinÚcos)r   ÚvÚangleÚnxÚnyÚnzr1   r2   s           r   r   zRVGate.to_matrixR   së   € åŒM˜$œ+­UÐ3Ñ3Ô3ˆÝ”	˜!Ÿ%š% ™(œ(Ñ#Ô#ˆØ�AŠ:ˆ:Ý”;  A ¨¨A¨Ð/Ñ0Ô0Ð0Ø˜‘Y‰
ˆˆB�ÝŒh�u˜q‘yÑ!Ô!ˆÝŒh�u˜q‘yÑ!Ô!ˆÝŒ{à�r˜B‘w ‘}Ñ$¨ s¨R°"©W¡}¸Ñ&;Ð<Ø�r˜B‘w‘, #Ñ% s¨R°"©W°s©]Ñ':Ð;ðñ
ô 
ð 	
r   )r   )F)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r,   Ústrr   r   Úboolr%   r*   Úndarrayr   Ú__classcell__)r   s   @r   r   r      sÀ   ø€ € € € € ðð ð@@ð @˜Eð @¨ð @°Eð @À#ð @ð @ð @ð @ð @ð @ðð ð ð%ð % ð %ð %ð %ð %ð

˜5œ=ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
r   r   )r;   r-   r*   Úqiskit.circuit.gater   Úqiskit.circuit.exceptionsr   r   © r   r   ú<module>rC      s�   ðð =Ð <à €€€Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ðK
ð K
ð K
ð K
ð K
ˆTñ K
ô K
ð K
ð K
ð K
r   