§
    ¹³Ùg£  ã                   óŠ   — d Z ddlZddl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%Rotation around an axis in x-y plane.é    N)Úexp)Úpi)ÚOptional)ÚGate)ÚQuantumRegister)ÚParameterValueType)ÚStandardGatec            	       óŠ   ‡ — 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dedefd„Zd„ Zˆ xZS )ÚRGateu  Rotation Î¸ around the cos(Ï†)x + sin(Ï†)y axis.

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

    **Circuit symbol:**

    .. code-block:: text

             â”Œâ”€â”€â”€â”€â”€â”€â”�
        q_0: â”¤ R(Ï´) â”œ
             â””â”€â”€â”€â”€â”€â”€â”˜

    **Matrix Representation:**

    .. math::

        \newcommand{\rotationangle}{\frac{\theta}{2}}

        R(\theta, \phi) = e^{-i \rotationangle \left(\cos{\phi} x + \sin{\phi} y\right)} =
            \begin{pmatrix}
                \cos\left(\rotationangle\right) & -i e^{-i \phi} \sin\left(\rotationangle\right) \\
                -i e^{i \phi} \sin\left(\rotationangle\right) & \cos\left(\rotationangle\right)
            \end{pmatrix}
    NÚdt)ÚdurationÚunitÚthetaÚphiÚlabelc                óZ   •— t          ¦   «                              dd||g|||¬¦  «         dS )zCreate new r single-qubit gate.Úré   )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/r.pyr   zRGate.__init__7   s5   ø€ õ 	‰Œ×Ò˜˜a %¨ °UÀXÐTXÐÑYÔYÐYÐYÐYó    c                 óB  — ddl m} ddlm} t	          dd¦  «        } ||| j        ¬¦  «        }| j        d         }| j        d         } |||t          dz  z
  | t          dz  z   ¦  «        |d         gg fg}|D ]\  }}	}
|                     ||	|
¦  «         Œ|| _	        dS )	uE   
        gate r(Î¸, Ï†) a {u3(Î¸, Ï† - Ï€/2, -Ï† + Ï€/2) a;}
        r   )ÚQuantumCircuitr   )ÚU3GateÚq)Únameé   N)
Úqiskit.circuit.quantumcircuitr   Úu3r   r   r   Úparamsr   Ú_appendÚ
definition)r   r   r   r   Úqcr   r   ÚrulesÚinstrÚqargsÚcargss              r   Ú_definezRGate._defineC   sÓ   € ð
 	AÐ@Ð@Ð@Ð@Ð@ØÐÐÐÐÐå˜A˜sÑ#Ô#ˆØˆ^˜A D¤IÐ.Ñ.Ô.ˆØ”˜A”ˆØŒk˜!ŒnˆØ�&˜ ¥b¨1¡f¡¨s¨dµR¸!±V©mÑ<Ô<¸qÀ¼t¸fÀbÐIÐJˆØ#(ð 	,ð 	,ÑˆE�5˜%Ø�JŠJ�u˜e UÑ+Ô+Ð+Ð+àˆŒˆˆr   FÚ	annotatedc                 óP   — t          | j        d          | j        d         ¦  «        S )uñ  Invert this gate as: :math:`r(Î¸, Ï†)^dagger = r(-Î¸, Ï†)`

        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:`.RGate` with an inverted parameter value.

        Returns:
            RGate: inverse gate.
        r   r   )r   r#   )r   r,   s     r   ÚinversezRGate.inverseU   s"   € õ �d”k !”n�_ d¤k°!¤nÑ5Ô5Ð5r   c                 ó„  — |du rt          d¦  «        ‚t          | j        d         ¦  «        t          | j        d         ¦  «        }}t          j        |dz  ¦  «        }t          j        |dz  ¦  «        }t          d|z  ¦  «        }t          d|z  ¦  «        }t          j        |d|z  |z  gd|z  |z  |gg|¬¦  «        S )	z$Return a numpy.array for the R gate.Fz9unable to avoid copy while creating an array as requestedr   r   r    y       €      ð¿y              ð?)Údtype)	Ú
ValueErrorÚfloatr#   ÚmathÚcosÚsinr   ÚnumpyÚarray)	r   r0   Úcopyr   r   r4   r5   Úexp_mÚexp_ps	            r   Ú	__array__zRGate.__array__c   sº   € à�5ˆ=ˆ=ÝÐXÑYÔYÐYÝ˜4œ; qœ>Ñ*Ô*­E°$´+¸a´.Ñ,AÔ,AˆsˆÝŒh�u˜q‘yÑ!Ô!ˆÝŒh�u˜q‘yÑ!Ô!ˆÝ�C˜#‘I‘”ˆÝ�B˜‘H‘”ˆÝŒ{˜S #¨¡+°Ñ"3Ð4°s¸U±{ÀSÑ7HÈ#Ð6NÐOÐW\Ð]Ñ]Ô]Ð]r   Úexponentc                 ó<   — | j         \  }}t          ||z  |¦  «        S ©N)r#   r   )r   r<   r,   r   r   s        r   ÚpowerzRGate.powern   s"   € Ø”[‰
ˆˆsÝ�X Ñ% sÑ+Ô+Ð+r   c                 óZ   — t          |t          ¦  «        r|                      |¦  «        S dS )NF)Ú
isinstancer   Ú_compare_parameters)r   Úothers     r   Ú__eq__zRGate.__eq__r   s-   € Ý�e�UÑ#Ô#ð 	3Ø×+Ò+¨EÑ2Ô2Ð2Øˆur   r>   )F)NN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r	   r   Ú_standard_gater   r   Ústrr   r+   Úboolr.   r;   r2   r?   rD   Ú__classcell__)r   s   @r   r   r      s  ø€ € € € € ðð ð4 "Ô'€Nð  $ð	
Zð Øð
Zð 
Zð 
Zà!ð
Zð  ð
Zð ˜Œ}ð	
Zð 
Zð 
Zð 
Zð 
Zð 
Zðð ð ð$6ð 6 ð 6ð 6ð 6ð 6ð	^ð 	^ð 	^ð 	^ð,ð ,˜eð ,°ð ,ð ,ð ,ð ,ðð ð ð ð ð ð r   r   )rH   r3   Úcmathr   r   Útypingr   r6   Úqiskit.circuit.gater   Úqiskit.circuit.quantumregisterr   Ú"qiskit.circuit.parameterexpressionr   Úqiskit._accelerate.circuitr	   r   © r   r   ú<module>rT      sÛ   ðð ,Ð +à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø :Ð :Ð :Ð :Ð :Ð :Ø AÐ AÐ AÐ AÐ AÐ AØ 3Ð 3Ð 3Ð 3Ð 3Ð 3ð[ð [ð [ð [ð [ˆDñ [ô [ð [ð [ð [r   