§
    ¹³Ù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	m
Z
 ddlmZ ddlmZ  e
j         ej        d	e¬
¦  «        ¦  «         G d„ de¦  «        ¦   «         ZdS )z)
Delay instruction (for circuit module).
é    N©ÚCircuitError)ÚInstruction)ÚGate)Ú_utils)ÚParameterExpression)Údeprecate_funcé   ©Údtypec                   ó   ‡ — e Zd ZdZdˆ fd„	Zej        Zddefd„Z e	dd¬	¦  «        d
„ ¦   «         Z
ed„ ¦   «         Zej        d„ ¦   «         Zed„ ¦   «         Zej        d„ ¦   «         Zdej        fd„Zd„ Zd„ Zd„ Zˆ xZS )ÚDelayz=Do nothing and just delay/wait/idle for a specified duration.Údtc                 ó�   •— |dvrt          d|› d�¦  «        ‚|| _        t          ¦   «                              ddd|g¬¦  «         dS )	zÌ
        Args:
            duration: the length of time of the duration.  Given in units of ``unit``.
            unit: the unit of the duration.  Must be ``"dt"`` or an SI-prefixed seconds unit.
        >   Úsr   ÚmsÚnsÚpsÚusúUnknown unit ú is specified.Údelayé   r   ©ÚparamsN)r   Ú_Delay__unitÚsuperÚ__init__)ÚselfÚdurationÚunitÚ	__class__s      €úJ/granary/edev/quantum/lib/python3.11/site-packages/qiskit/circuit/delay.pyr   zDelay.__init__   s]   ø€ ð Ð:Ð:Ð:ÝÐC¨tÐCÐCÐCÑDÔDÐDð
 ˆŒÝ‰Œ×Ò˜ ! Q°¨zÐÑ:Ô:Ð:Ð:Ð:ó    FÚ	annotatedc                 ó   — | S )zSpecial case. Return self.© )r   r%   s     r#   ÚinversezDelay.inverse.   s   € àˆr$   z1.3.0zin 2.0.0)ÚsinceÚremoval_timelinec                 ó    — t          d¦  «        ‚)Nz)Conditional Delay is not yet implemented.r   )r   Ú	classicalÚvals      r#   Úc_ifz
Delay.c_if2   s   € åÐFÑGÔGÐGr$   c                 ó   — | j         S ©N)r   ©r   s    r#   r!   z
Delay.unit6   s   € ð Œ{Ðr$   c                 óB   — |dvrt          d|› d�¦  «        ‚|| _        d S )N>   r   r   r   r   r   r   r   r   )r   r   )r   Úvalues     r#   r!   z
Delay.unit;   s3   € àÐ;Ð;Ð;ÝÐD¨uÐDÐDÐDÑEÔEÐEØˆŒˆˆr$   c                 ó   — | j         d         S )zGet the duration of this delay.r   r   r1   s    r#   r    zDelay.durationA   s   € ð Œ{˜1Œ~Ðr$   c                 ó   — |g| _         dS )zSet the duration of this delay.Nr   )r   r    s     r#   r    zDelay.durationF   s   € ð  �jˆŒˆˆr$   Úreturnc                 ó8   — |                       t          ¬¦  «        S )zÎReturn a Numpy.array for the unitary matrix. This has been
        added to enable simulation without making delay a full Gate type.

        Returns:
            np.ndarray: matrix representation.
        r   )Ú	__array__Úcomplexr1   s    r#   Ú	to_matrixzDelay.to_matrixK   s   € ð �~Š~¥Gˆ~Ñ,Ô,Ð,r$   c                 óv   — t          |t          ¦  «        o$| j        |j        k    o|                      |¦  «        S r0   )Ú
isinstancer   r!   Ú_compare_parameters)r   Úothers     r#   Ú__eq__zDelay.__eq__T   s6   € å�u�eÑ$Ô$Ðd¨¬°e´jÒ)@ÐdÀT×E]ÒE]Ð^cÑEdÔEdð	
r$   c                 óL   — | j         j        › d| j        d         › d| j        › d�S )z2Return the official string representing the delay.z
(duration=r   z[unit=z]))r"   Ú__name__r   r!   r1   s    r#   Ú__repr__zDelay.__repr__Y   s.   € à”.Ô)ÐXÐX°T´[À´^ÐXÐXÈ4Ì9ÐXÐXÐXÐXr$   c                 óü  — t          |t          ¦  «        r|dk     rt          d|› �¦  «        ‚|S t          |t          ¦  «        rK|dk     rt          d|› �¦  «        ‚| j        dk    r&t          |¦  «        }||k    rt          d¦  «        ‚|S |S t          |t
          ¦  «        r±t          |j        ¦  «        dk    r|S |                     ¦   «         st          d| j	        › �¦  «        ‚t          |¦  «        }|dk     rt          d|› �¦  «        ‚| j
        dk    r8t          |¦  «        }t          ||z
  ¦  «        }|dk    rt          d¦  «        ‚|S |S t          dt          |¦  «        › d	| j	        › d
�¦  «        ‚)zJDelay parameter (i.e. duration) must be int, float or ParameterExpression.r   z7Duration for Delay instruction must be positive. Found r   z+Integer duration is expected for 'dt' unit.z/Bound parameter expression is complex in delay gVçž¯Ò<z8Integer parameter is required for duration in 'dt' unit.zInvalid param type z for delay ú.)r<   Úintr   Úfloatr   r   ÚlenÚ
parametersÚis_realÚnamer!   ÚabsÚtype)r   Ú	parameterÚparameter_intÚfvalÚivalÚrounding_errors         r#   Úvalidate_parameterzDelay.validate_parameter]   sÃ  € å�i¥Ñ%Ô%ð !	_Ø˜1Š}ˆ}Ý"ØYÈiÐYÐYñô ð ð ÐÝ˜	¥5Ñ)Ô)ð 	_Ø˜1Š}ˆ}Ý"ØYÈiÐYÐYñô ð ð Œ{˜dÒ"Ð"Ý # I¡¤�Ø Ò-Ð-Ý&Ð'TÑUÔUÐUØ$Ð$ØÐÝ˜	Õ#6Ñ7Ô7ð 	_Ý�9Ô'Ñ(Ô(¨1Ò,Ð,Ø Ð Ø×$Ò$Ñ&Ô&ð bÝ"Ð#`ÐUYÔU^Ð#`Ð#`ÑaÔaÐaÝ˜Ñ#Ô#ˆDØ�aŠxˆxÝ"Ð#cÐ]aÐ#cÐ#cÑdÔdÐdØŒy˜DÒ Ð Ý˜9‘~”~�Ý!$ T¨D¡[Ñ!1Ô!1�Ø! EÒ)Ð)Ý&Ð'aÑbÔbÐbØ�ØˆKåÐ]µT¸)±_´_Ð]Ð]ÐQUÔQZÐ]Ð]Ð]Ñ^Ô^Ð^r$   )r   )F)rA   Ú
__module__Ú__qualname__Ú__doc__r   r   Úbroadcast_argumentsÚboolr(   r	   r.   Úpropertyr!   Úsetterr    ÚnpÚndarrayr:   r?   rB   rR   Ú__classcell__)r"   s   @r#   r   r      sa  ø€ € € € € àGÐGð;ð ;ð ;ð ;ð ;ð ;ð Ô2Ððð  ð ð ð ð ð €^˜'°JÐ?Ñ?Ô?ðHð Hñ @Ô?ðHð ðð ñ „Xðð 
„[ðð ñ „[ðð
 ðð ñ „Xðð „_ð!ð !ñ „_ð!ð-˜2œ:ð -ð -ð -ð -ð
ð 
ð 
ð
Yð Yð Yð#_ð #_ð #_ð #_ð #_ð #_ð #_r$   r   )rU   ÚnumpyrZ   Úqiskit.circuit.exceptionsr   Úqiskit.circuit.instructionr   Úqiskit.circuit.gater   Úqiskit.circuitr   Ú"qiskit.circuit.parameterexpressionr   Úqiskit.utilsr	   Úwith_gate_arrayÚeyer9   r   r'   r$   r#   ú<module>rf      sü   ððð ð Ð Ð Ð Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !Ø BÐ BÐ BÐ BÐ BÐ BØ 'Ð 'Ð 'Ð 'Ð 'Ð 'ð €Ô˜˜œ˜q¨Ð0Ñ0Ô0Ñ1Ô1ðf_ð f_ð f_ð f_ð f_ˆKñ f_ô f_ñ 2Ô1ðf_ð f_ð f_r$   