
    z	i                     F    S r SSKrSSKrSSKJr  SSKJr   " S S\5      rg)z6Rotation around an arbitrary axis on the Bloch sphere.    N)Gate)CircuitErrorc            	       ~   ^  \ rS rSrSrSS\S\S\S\4U 4S jjjrS rSS	\	4S
 jjr
S\R                  4S jrSrU =r$ )RVGate   u  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}
v_xv_yv_zbasisc                 N   > SSK Jn  [        TU ]  SSXU/5        U" US9U l        g)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         e/home/james-whalen/.local/lib/python3.13/site-packages/qiskit/circuit/library/generalized_gates/rv.pyr   RVGate.__init__6   s+     	[q3S/22?    c                      U R                  U R                  5       5      U l        g ! [         a  n[	        SU R
                   S35      UeS nAff = f)NzThe z2 gate cannot be decomposed with unbound parameters)r   	to_matrix
definition	TypeErrorr   name)r   exs     r   _defineRVGate._defineE   sQ    	"..t~~/?@DO 	tyyk!ST	s   $' 
AAA	annotatedc                 @    U R                   u  p#n[        U* U* U* 5      $ )zInvert this gate.)paramsr   )r   r!   vxvyvzs        r   inverseRVGate.inverseM   s$    [[
rcB3$$r   returnc                    [         R                  " U R                  [        S9n[        R
                  " UR                  U5      5      nUS:X  a  [         R                  " SS/SS//5      $ X-  u  p4n[        R                  " US-  5      n[        R                  " US-  5      n[         R                  " USU-  U-  -
  U* SU-  -
  U-  /USU-  -
  U-  USU-  U-  -   //5      $ )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nzr4   r5   s           r   r   RVGate.to_matrixR   s    MM$++U3		!%%(#A:;;AA/00Y
hhuqy!hhuqy!{{rBw}$sR"W}&;<rBw,#%sR"Ws]':;
 	
r   )r   r   )U)F)__name__
__module____qualname____firstlineno____doc__r/   strr   r   boolr'   r-   ndarrayr   __static_attributes____classcell__)r   s   @r   r   r      s[    @@E @ @E @# @ @% %

5== 
 
r   r   )rA   r0   r-   qiskit.circuit.gater   qiskit.circuit.exceptionsr   r    r   r   <module>rJ      s$    =   $ 2K
T K
r   