§
    ¹³ÙgK  ã                   ó†	  — d Z ddlZddlZddlZddlmZmZ ddlZddl	m
Z
mZmZmZmZmZmZmZmZmZmZmZ ddlmZ ddlmZmZmZmZmZmZm Z m!Z!m"Z" ddl#m$Z$ ej%        ej&        ej'        ej(        d	„ ej)        ej*        ej+        ej,        ej-        ej.        ej/        ej0        ej1        ej2        ej3        ej4        ej5        ej6        ej7        ej8        ej9        ej:        fZ; ej<        d
¬¦  «         G d„ d¦  «        ¦   «         Z=de>fd„Z? G d„ de¦  «        Z@g  e=dddej%        ¦  «        ‘ e=dddej&        ¦  «        ‘ e=dddej'        ¦  «        ‘ e=dddej(        ¦  «        ‘ e=dddejA        ¦  «        ‘ e=ddde@d
¬¦  «        ‘ e=dddejB        d
¬¦  «        ‘ e=dddejC        d
¬¦  «        ‘ e=dddej)        ¦  «        ‘ e=dddej*        ¦  «        ‘ e=dddej+        ¦  «        ‘ e=d ddej,        ¦  «        ‘ e=d!ddej-        ¦  «        ‘ e=d"ddej.        ¦  «        ‘ e=d#ddej/        ¦  «        ‘ e=d$ddej0        ¦  «        ‘ e=d%ddej1        ¦  «        ‘ e=d&ddej2        ¦  «        ‘ e=d'ddej3        ¦  «        ‘ e=d(ddejD        d
¬¦  «        ‘ e=d)ddejE        d
¬¦  «        ‘ e=d*ddej4        ¦  «        ‘ e=d+ddej5        ¦  «        ‘ e=d,ddejF        d
¬¦  «        ‘ e=d-ddej6        ¦  «        ‘ e=d.ddej7        ¦  «        ‘ e=d/ddejG        d
¬¦  «        ‘ e=d0ddejH        d
¬¦  «        ‘ e=d1ddejI        d
¬¦  «        ‘ e=d2ddej8        ¦  «        ‘ e=d3ddej9        ¦  «        ‘ e=d4ddejJ        d
¬¦  «        ‘ e=d5ddej:        ¦  «        ‘ e=d6ddejK        d
¬¦  «        ‘ e=d7d8dejL        d
¬¦  «        ‘ e=d9ddejM        d
¬¦  «        ‘ e=d:ddejN        d
¬¦  «        ‘ e=d;ddejO        d
¬¦  «        ‘ e=d<dd8ejP        d
¬¦  «        ‘ e=d=dd8ejQ        d
¬¦  «        ‘ e=d>dd8ejR        d
¬¦  «        ‘ e=d?dd@ejS        d
¬¦  «        ‘ e=dAdde?¦  «        ‘R ZT edBdejU        ¦  «         edCdejV        ¦  «         edDdejW        ¦  «        fZXdEee=         fdF„ZY G dG„ dHe¦  «        ZZdI„ Z[dJ„ Z\dK„ Z]dS )LzOPython-space bytecode interpreter for the output of the main Rust parser logic.é    N)ÚIterableÚCallable)ÚBarrierÚCircuitInstructionÚClassicalRegisterÚDelayÚGateÚInstructionÚMeasureÚQuantumCircuitÚQuantumRegisterÚQubitÚResetÚlibrary)ÚOperator)	ÚOpCodeÚUnaryOpCodeÚBinaryOpCodeÚCustomClassicalÚExprConstantÚExprArgumentÚ	ExprUnaryÚ
ExprBinaryÚ
ExprCustomé   )ÚQASM2ParseErrorc                  ó.   — t          j        ddd¦  «        S )Nr   )ÚlibÚUGate© ó    úH/granary/edev/quantum/lib/python3.11/site-packages/qiskit/qasm2/parse.pyú<lambda>r#   :   s   € �CŒI�a˜˜AÑÔ€ r!   T)Úfrozenc                   óZ   — e Zd ZU dZeed<   eed<   eed<   edef         ed<   dZ	e
ed<   d	S )
ÚCustomInstructiona  Information about a custom instruction that should be defined during the parse.

    The ``name``, ``num_params`` and ``num_qubits`` fields are self-explanatory.  The
    ``constructor`` field should be a callable object with signature ``*args -> Instruction``, where
    each of the ``num_params`` ``args`` is a floating-point value.  Most of the built-in Qiskit gate
    classes have this form.

    There is a final ``builtin`` field.  This is optional, and if set true will cause the
    instruction to be defined and available within the parsing, even if there is no definition in
    any included OpenQASM 2 file.

    Examples:

        Instruct the importer to use Qiskit's :class:`.ECRGate` and :class:`.RZXGate` objects to
        interpret ``gate`` statements that are known to have been created from those same objects
        during OpenQASM 2 export::

            from qiskit import qasm2
            from qiskit.circuit import QuantumCircuit, library

            qc = QuantumCircuit(2)
            qc.ecr(0, 1)
            qc.rzx(0.3, 0, 1)
            qc.rzx(0.7, 1, 0)
            qc.rzx(1.5, 0, 1)
            qc.ecr(1, 0)

            # This output string includes `gate ecr q0, q1 { ... }` and `gate rzx(p) q0, q1 { ... }`
            # statements, since `ecr` and `rzx` are neither built-in gates nor in ``qelib1.inc``.
            dumped = qasm2.dumps(qc)

            # Tell the importer how to interpret the `gate` statements, which we know are safe
            # because we controlled the input OpenQASM 2 source.
            custom = [
                qasm2.CustomInstruction("ecr", 0, 2, library.ECRGate),
                qasm2.CustomInstruction("rzx", 1, 2, library.RZXGate),
            ]

            loaded = qasm2.loads(dumped, custom_instructions=custom)
    ÚnameÚ
num_paramsÚ
num_qubits.ÚconstructorFÚbuiltinN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚstrÚ__annotations__Úintr   r
   r+   Úboolr    r!   r"   r&   r&   P   sb   € € € € € € ð'ð 'ðR €I€I�IØ€O€O�OØ€O€O�Oð ˜#˜{Ð*Ô+Ð+Ð+Ñ+Ø€GˆTÐÐÑÐÐr!   r&   Útimec                 ó‚   — t          | ¦  «        | k    rt          d¦  «        ‚t          t          | ¦  «        d¬¦  «        S )NzCthe custom 'delay' instruction can only accept an integer parameterÚdt)Úunit)r2   r   r   )r4   s    r"   Ú_generate_delayr8   „   s=   € õ ˆ4�y„y�DÒÐÝÐcÑdÔdÐdÝ•�T‘” Ð&Ñ&Ô&Ð&r!   c                   ó$   ‡ — e Zd Zˆ fd„Zd„ Zˆ xZS )Ú_U0Gatec                 ó®   •— t          |¦  «        |k    rt          d¦  «        ‚t          ¦   «                              ddt          |¦  «        g¦  «         d S )Nz;the number of single-qubit delay lengths must be an integerÚu0r   )r2   r   ÚsuperÚ__init__)ÚselfÚcountÚ	__class__s     €r"   r>   z_U0Gate.__init__Ž   sM   ø€ Ýˆu‰:Œ:˜ÒÐÝ!Ð"_Ñ`Ô`Ð`Ý‰Œ×Ò˜˜q¥3 u¡:¤: ,Ñ/Ô/Ð/Ð/Ð/r!   c                 óŠ   — t          d¦  «        | _        d g| j        d         z  D ]}| j                             d¦  «         Œd S )Nr   r   )r   Ú_definitionÚparamsÚid)r?   Ú_s     r"   Ú_definez_U0Gate._define“   sR   € Ý)¨!Ñ,Ô,ˆÔØ�˜$œ+ aœ.Ñ(ð 	#ð 	#ˆAØÔ×Ò Ñ"Ô"Ð"Ð"ð	#ð 	#r!   )r,   r-   r.   r>   rG   Ú__classcell__©rA   s   @r"   r:   r:   �   sG   ø€ € € € € ð0ð 0ð 0ð 0ð 0ð
#ð #ð #ð #ð #ð #ð #r!   r:   Úu3é   Úu2é   Úu1ÚcxrE   r<   )r+   ÚuÚpÚxÚyÚzÚhÚsÚsdgÚtÚtdgÚrxÚryÚrzÚsxÚsxdgÚczÚcyÚswapÚchÚccxÚcswapÚcrxÚcryÚcrzÚcu1ÚcpÚcu3ÚcsxÚcué   ÚrxxÚrzzÚrccxÚrc3xÚc3xÚc3sqrtxÚc4xé   ÚdelayÚasinÚacosÚatanÚcustom_instructionsc           
      ó  ‡— t          ¦   «         }g Šg }g }d\  }}|D ]7}|                     |j        ¦  «         |j        dk    rd}Œ*|j        dk    rd}Œ8|s|                     t          j        ¦  «         |s|                     t          j        ¦  «         t          | ¦  «        }|D �]Û}	|	j        }
|
t          j
        k    rD|	j        \  }}}|                     t           ||         |Ž ˆfd„|D ¦   «         ¦  «        ¦  «         Œ^|
t          j        k    rƒt          j        dt"          d¬¦  «         |	j        \  }}}}} ||         |Ž                      |j        |         |¦  «        }|                     t          |ˆfd	„|D ¦   «         ¦  «        ¦  «         Œñ|
t          j        k    rJ|	j        \  }}|                     t          t)          ¦   «         ‰|         f||         f¦  «        ¦  «         �ŒK|
t          j        k    r‰t          j        d
t"          d¬¦  «         |	j        \  }}}}t)          ¦   «                              |j        |         |¦  «        }|                     t          |‰|         f||         f¦  «        ¦  «         �Œä|
t          j        k    rC|                     t          t-          ¦   «         ‰|	j        d                  f¦  «        ¦  «         �Œ7|
t          j        k    r€t          j        dt"          d¬¦  «         |	j        \  }}}t-          ¦   «                              |j        |         |¦  «        }|                     t          |‰|         f¦  «        ¦  «         �ŒÇ|
t          j        k    rX|	j        d         }|                     t          t1          t3          |¦  «        ¦  «        ˆfd„|D ¦   «         ¦  «        ¦  «         �Œ/|
t          j        k    r>|	j        \  }}t7          ||¦  «        }‰|dd…         z  Š|                     |¦  «         �Œ}|
t          j        k    r>|	j        \  }}t=          ||¦  «        }||dd…         z  }|                     |¦  «         �ŒË|
t          j        k    r0|	j        \  }|D ]"}|                     t@          |         ¦  «         Œ#�Œ|
t          j!        k    rq|	j        \  }}g }|D ].}|j        t          j"        k    r n|                     |¦  «         Œ/|                     tG          ||tI          |¦  «        |¦  «        ¦  «         �ŒŒ|
t          j%        k    r/|	j        \  }}|                     tM          ||¦  «        ¦  «         �ŒËtO          d|	› �¦  «        ‚|S )aÛ  Loop through the Rust bytecode iterator `bytecode` producing a
    :class:`~qiskit.circuit.QuantumCircuit` instance from it.  All the hard work is done in Rust
    space where operations are faster; here, we're just about looping through the instructions as
    fast as possible, doing as little calculation as we can in Python space.  The Python-space
    components are the vast majority of the runtime.

    The "bytecode", and so also this Python function, is very tightly coupled to the output of the
    Rust parser.  The bytecode itself is largely defined by Rust; from Python space, the iterator is
    over essentially a 2-tuple of `(opcode, operands)`.  The `operands` are fixed by Rust, and
    assumed to be correct by this function.

    The Rust code is responsible for all validation.  If this function causes any errors to be
    raised by Qiskit (except perhaps for some symbolic manipulations of `Parameter` objects), we
    should consider that a bug in the Rust code.)FFÚUTÚCXc                 ó    •— g | ]
}‰|         ‘ŒS r    r    ©Ú.0ÚqÚqubitss     €r"   ú
<listcomp>z!from_bytecode.<locals>.<listcomp>ÿ   ó   ø€ Ð@^Ð@^Ð@^ÈqÀÈÄÐ@^Ð@^Ð@^r!   zOConditioned gates in qasm2 will be loaded as an IfElseOp starting in Qiskit 2.0rK   )Ú
stacklevelc                 ó    •— g | ]
}‰|         ‘ŒS r    r    r   s     €r"   rƒ   z!from_bytecode.<locals>.<listcomp>	  s   ø€ Ð0NÐ0NÐ0N¸q°¸´Ð0NÐ0NÐ0Nr!   zVConditioned measurements in qasm2 will be loaded as an IfElseOp starting in Qiskit 2.0r   zPConditioned resets in qasm2 will be loaded as an IfElseOp starting in Qiskit 2.0c                 ó    •— g | ]
}‰|         ‘ŒS r    r    r   s     €r"   rƒ   z!from_bytecode.<locals>.<listcomp>#  s   ø€ ÐCaÐCaÐCaÐRSÀFÈ1ÄIÐCaÐCaÐCar!   Nzinvalid operation: )(r   Úappendr*   r'   r   r   ÚCXGateÚiterÚopcoder   r	   ÚoperandsÚ_appendr   ÚConditionedGateÚwarningsÚwarnÚFutureWarningÚc_ifÚcregsr   ÚConditionedMeasurer   ÚConditionedResetr   ÚlenÚDeclareQregr   Úadd_registerÚDeclareCregr   ÚSpecialIncludeÚQELIB1ÚDeclareGateÚEndDeclareGateÚ_gate_builderÚtupleÚDeclareOpaqueÚ_opaque_builderÚ
ValueError)Úbytecoderz   ÚqcÚclbitsÚgatesÚhas_uÚhas_cxÚcustomÚbcÚopr‹   Úgate_idÚ
parametersÚ	op_qubitsÚcregÚvalueÚgateÚqubitÚclbitÚmeasureÚresetr'   ÚsizeÚregisterÚindicesÚindexr)   Úinner_bcÚinner_opr‚   s                                @r"   Úfrom_bytecoder¼   Ï   s‘  ø€ õ$ 
Ñ	Ô	€BØ€FØ€FØ€EØ �M€Eˆ6Ø%ð ð ˆØ�Š�VÔ'Ñ(Ô(Ð(ØŒ;˜#ÒÐØˆEˆEØŒ[˜DÒ Ð ØˆFøØð  Ø�Š•S”YÑÔÐØð !Ø�Š•S”ZÑ Ô Ð õ 
ˆh‰Œ€BØð U9ñ U9ˆð ”ˆð •V”[Ò Ð Ø-/¬[Ñ*ˆG�Z Ø�JŠJÝ" > 5¨¤>°:Ð#>Ð@^Ð@^Ð@^Ð@^ÐT]Ð@^Ñ@^Ô@^Ñ_Ô_ñô ð ð ð •vÔ-Ò-Ð-ÝŒMØaÝØðñ ô ð ð
 ;=¼+Ñ7ˆG�Z ¨D°%Ø!�5˜”> :Ð.×3Ò3°B´H¸T´NÀEÑJÔJˆDØ�JŠJÕ)¨$Ð0NÐ0NÐ0NÐ0NÀIÐ0NÑ0NÔ0NÑOÔOÑPÔPÐPÐPØ•v”~Ò%Ð%Øœ;‰LˆE�5Ø�JŠJÕ)­'©)¬)°f¸U´mÐ5EÈÈuÌÐGWÑXÔXÑYÔYÐYÑYØ•vÔ0Ò0Ð0ÝŒMØhÝØðñ ô ð ð
 )+¬Ñ%ˆE�5˜$ Ý‘i”i—n’n R¤X¨d¤^°UÑ;Ô;ˆGØ�JŠJÕ)¨'°F¸5´MÐ3CÀfÈUÄmÐEUÑVÔVÑWÔWÐWÑWØ•v”|Ò#Ð#Ø�JŠJÕ)­%©'¬'°F¸2¼;Àq¼>Ô4JÐ3LÑMÔMÑNÔNÐNÑNØ•vÔ.Ò.Ð.ÝŒMØbÝØðñ ô ð ð
 "$¤ÑˆE�4˜Ý‘G”G—L’L ¤¨$¤°Ñ7Ô7ˆEØ�JŠJÕ)¨%°&¸´-Ð1AÑBÔBÑCÔCÐCÑCØ•v”~Ò%Ð%Øœ AœˆIØ�JŠJÕ)­'µ#°i±.´.Ñ*AÔ*AÐCaÐCaÐCaÐCaÐW`ÐCaÑCaÔCaÑbÔbÑcÔcÐcÑcØ•vÔ)Ò)Ð)Øœ‰JˆD�$Ý& t¨TÑ2Ô2ˆHØ�h˜q˜q˜q”kÑ!ˆFØ�OŠO˜HÑ%Ô%Ð%Ñ%Ø•vÔ)Ò)Ð)Øœ‰JˆD�$Ý(¨¨tÑ4Ô4ˆHØ�h˜q˜q˜q”kÑ!ˆFØ�OŠO˜HÑ%Ô%Ð%Ñ%Ø•vÔ,Ò,Ð,ð œ‰JˆWØ ð ,ð ,�Ø—’�V Eœ]Ñ+Ô+Ð+Ð+ñ,à•vÔ)Ò)Ð)Ø!œ{ÑˆD�*ð ˆHØð *ð *�Ø”?¥fÔ&;Ò;Ð;Ø�EØ—’ Ñ)Ô)Ð)Ð)ð �LŠL� t¨Z½¸u¹¼ÀxÑPÔPÑQÔQÐQÑQØ•vÔ+Ò+Ð+Ø!œ{ÑˆD�*Ø�LŠL�¨¨zÑ:Ô:Ñ;Ô;Ð;Ñ;åÐ7°2Ð7Ð7Ñ8Ô8Ð8Ø€Ir!   c                   ó@   ‡ — e Zd ZdZˆ fd„Zd„ Zdd„Zd„ Zˆ fd„Zˆ xZ	S )	Ú_DefinedGatez®A gate object defined by a `gate` statement in an OpenQASM 2 program.  This object lazily
    binds its parameters to its definition, so it is only synthesized when required.c                 ó„   •— || _         || _        t          ¦   «                              ||t	          |¦  «        ¦  «         d S ©N)Ú_gatesÚ	_bytecoder=   r>   Úlist)r?   r'   r)   rD   r¦   r£   rA   s         €r"   r>   z_DefinedGate.__init__P  s9   ø€ ØˆŒØ!ˆŒÝ‰Œ×Ò˜˜z­4°©<¬<Ñ8Ô8Ð8Ð8Ð8r!   c           
      óB  ‡ ‡— d„ d g‰ j         z  D ¦   «         Št          ‰¦  «        }‰ j        D ]é}|j        t          j        k    rU|j        \  }}}|                     t           ‰ j	        |         ˆ fd„|D ¦   «         Ž ˆfd„|D ¦   «         ¦  «        ¦  «         Œl|j        t          j
        k    rW|j        d         }|                     t          t          t          |¦  «        ¦  «        ˆfd„|D ¦   «         ¦  «        ¦  «         ŒØt          d|› �¦  «        ‚|‰ _        d S )Nc                 ó*   — g | ]}t          ¦   «         ‘ŒS r    )r   )r€   rF   s     r"   rƒ   z(_DefinedGate._define.<locals>.<listcomp>Y  s   € Ð<Ð<Ð<˜a•%‘'”'Ð<Ð<Ð<r!   c              3   óB   •K  — | ]}t          |‰j        ¦  «        V — Œd S rÀ   )Ú_evaluate_argumentrD   )r€   Úar?   s     €r"   ú	<genexpr>z'_DefinedGate._define.<locals>.<genexpr>`  s1   øè è € Ð.`Ð.`ÐVWÕ/AÀ!ÀTÄ[Ñ/QÔ/QÐ.`Ð.`Ð.`Ð.`Ð.`Ð.`r!   c                 ó    •— g | ]
}‰|         ‘ŒS r    r    r   s     €r"   rƒ   z(_DefinedGate._define.<locals>.<listcomp>a  s   ø€ Ð6Ð6Ð6 q˜ œÐ6Ð6Ð6r!   r   c                 ó    •— g | ]
}‰|         ‘ŒS r    r    r   s     €r"   rƒ   z(_DefinedGate._define.<locals>.<listcomp>g  r„   r!   z)received invalid bytecode to build gate: )r)   r   rÂ   r‹   r   r	   rŒ   r�   r   rÁ   r   r–   r¢   rC   )r?   r¤   r«   r¬   Úargsr®   r‚   s   `     @r"   rG   z_DefinedGate._defineU  sT  øø€ ð =Ð< D 6¨D¬OÑ#;Ð<Ñ<Ô<ˆÝ˜FÑ#Ô#ˆØ”.ð 	Sð 	SˆBØŒy�FœKÒ'Ð'Ø+-¬;Ñ(�˜˜yØ—
’
Ý&Ø,˜œ GÔ,Ð.`Ð.`Ð.`Ð.`Ð[_Ð.`Ñ.`Ô.`ÐaØ6Ð6Ð6Ð6¨IÐ6Ñ6Ô6ñô ñô ð ð ð ”�fœnÒ,Ð,ØœK¨œN�	Ø—
’
Ý&¥w­s°9©~¬~Ñ'>Ô'>Ð@^Ð@^Ð@^Ð@^ÐT]Ð@^Ñ@^Ô@^Ñ_Ô_ñô ð ð õ !Ð!QÈRÐ!QÐ!QÑRÔRÐRØˆÔÐÐr!   Nc                 óx   — |du rt          d¦  «        ‚t          j        t          | j        ¦  «        |¬¦  «        S )NFz9unable to avoid copy while creating an array as requested)Údtype)r¢   ÚnpÚasarrayr   Ú
definition)r?   rÎ   Úcopys      r"   Ú	__array__z_DefinedGate.__array__m  s9   € Ø�5ˆ=ˆ=ÝÐXÑYÔYÐYÝŒz�( 4¤?Ñ3Ô3¸5ÐAÑAÔAÐAr!   c                 óB   — | j         | j        | j        | j        | j        fS rÀ   )r'   r)   rD   rÑ   Ú
_condition)r?   s    r"   Ú__getstate__z_DefinedGate.__getstate__u  s   € Ø”	˜4œ?¨D¬K¸¼È$Ì/ÐZÐZr!   c                 ó–   •— |\  }}}}}t          ¦   «                              |||¦  «         d| _        d| _        || _        || _        d S )Nr    )r=   r>   rÁ   rÂ   rC   rÕ   )r?   Ústater'   r)   rD   rÑ   Ú	conditionrA   s          €r"   Ú__setstate__z_DefinedGate.__setstate__x  sP   ø€ Ø:?Ñ7ˆˆj˜& *¨iÝ‰Œ×Ò˜˜z¨6Ñ2Ô2Ð2ØˆŒØˆŒØ%ˆÔØ#ˆŒˆˆr!   )NN)
r,   r-   r.   r/   r>   rG   rÓ   rÖ   rÚ   rH   rI   s   @r"   r¾   r¾   L  s–   ø€ € € € € ðXð Xð9ð 9ð 9ð 9ð 9ð
ð ð ð0Bð Bð Bð Bð[ð [ð [ð$ð $ð $ð $ð $ð $ð $ð $ð $r!   r¾   c                 ó   ‡ ‡‡‡— ˆˆˆ ˆfd„}|S )aq  Create a gate-builder function of the signature `*params -> Gate` for a gate with a given
    `name`.  This produces a `_DefinedGate` class, whose `_define` method runs through the given
    `bytecode` using the current list of `known_gates` to interpret the gate indices.

    The indirection here is mostly needed to correctly close over `known_gates` and `bytecode`.c            	      óD   •— t          ‰‰| ‰t          ‰¦  «        ¦  «        S rÀ   )r¾   rŸ   )rD   r£   Úknown_gatesr'   r)   s    €€€€r"   Údefinerz_gate_builder.<locals>.definerˆ  s   ø€ Ý˜D *¨f°kÅ5ÈÁ?Ä?ÑSÔSÐSr!   r    )r'   r)   rÝ   r£   rÞ   s   ```` r"   rž   rž   �  s=   øøøø€ ðTð Tð Tð Tð Tð Tð Tð Tð €Nr!   c                 ó   ‡ ‡— ˆ ˆfd„}|S )z–Create a gate-builder function of the signature `*params -> Gate` for an opaque gate with a
    given `name`, which takes the given numbers of qubits.c                  ó&   •— t          ‰‰| ¦  «        S rÀ   )r	   )rD   r'   r)   s    €€r"   rÞ   z _opaque_builder.<locals>.definer’  s   ø€ Ý�D˜* fÑ-Ô-Ð-r!   r    )r'   r)   rÞ   s   `` r"   r¡   r¡   Ž  s)   øø€ ð.ð .ð .ð .ð .ð .ð €Nr!   c                 óä  ‡— t          | t          ¦  «        r| j        S t          | t          ¦  «        r‰| j                 S t          | t
          ¦  «        �rt          | j        ‰¦  «        }| j        }|t          j
        k    r| S |t          j        k    rt          j        |¦  «        S |t          j        k    rt          j        |¦  «        S |t          j        k    rt          j        |¦  «        S |t          j        k    rt          j        |¦  «        S |t          j        k    rt          j        |¦  «        S |t          j        k    rt          j        |¦  «        S t1          d|› �¦  «        ‚t          | t2          ¦  «        r¬t          | j        ‰¦  «        }t          | j        ‰¦  «        }| j        }|t8          j        k    r||z   S |t8          j        k    r||z
  S |t8          j        k    r||z  S |t8          j         k    r||z  S |t8          j!        k    r||z  S t1          d|› �¦  «        ‚t          | tD          ¦  «        r | j#        ˆfd„| j$        D ¦   «         Ž S t1          d| › �¦  «        ‚)z…Inner recursive function to calculate the value of a mathematical expression given the
    concrete values in the `parameters` field.zunhandled unary opcode: zunhandled binary opcode: c              3   ó8   •K  — | ]}t          |‰¦  «        V — Œd S rÀ   )rÇ   )r€   rR   r­   s     €r"   rÉ   z%_evaluate_argument.<locals>.<genexpr>Ã  s.   øè è € ÐYÐYÀQÕ1°!°ZÑ@Ô@ÐYÐYÐYÐYÐYÐYr!   zunhandled expression type: )%Ú
isinstancer   r°   r   r¹   r   rÇ   Úargumentr‹   r   ÚNegateÚCosÚmathÚcosÚExpÚexpÚLnÚlogÚSinÚsinÚSqrtÚsqrtÚTanÚtanr¢   r   ÚleftÚrightr   ÚAddÚSubtractÚMultiplyÚDivideÚPowerr   ÚcallableÚ	arguments)Úexprr­   Úinnerr‹   ró   rô   s    `    r"   rÇ   rÇ   š  sS  ø€ õ �$�Ñ%Ô%ð ØŒzÐÝ�$�Ñ%Ô%ð &Ø˜$œ*Ô%Ð%Ý�$�	Ñ"Ô"ñ >Ý" 4¤=°*Ñ=Ô=ˆØ”ˆØ•[Ô'Ò'Ð'Ø�6ˆMØ•[”_Ò$Ð$Ý”8˜E‘?”?Ð"Ø•[”_Ò$Ð$Ý”8˜E‘?”?Ð"Ø•[”^Ò#Ð#Ý”8˜E‘?”?Ð"Ø•[”_Ò$Ð$Ý”8˜E‘?”?Ð"Ø•[Ô%Ò%Ð%Ý”9˜UÑ#Ô#Ð#Ø•[”_Ò$Ð$Ý”8˜E‘?”?Ð"ÝÐ<°FÐ<Ð<Ñ=Ô=Ð=Ý�$�
Ñ#Ô#ð ?Ý! $¤)¨ZÑ8Ô8ˆÝ" 4¤:¨zÑ:Ô:ˆØ”ˆØ•\Ô%Ò%Ð%Ø˜%‘<ÐØ•\Ô*Ò*Ð*Ø˜%‘<ÐØ•\Ô*Ò*Ð*Ø˜%‘<ÐØ•\Ô(Ò(Ð(Ø˜%‘<ÐØ•\Ô'Ò'Ð'Ø˜‘;ÐÝÐ=°VÐ=Ð=Ñ>Ô>Ð>Ý�$�
Ñ#Ô#ð [ØˆtŒ}ÐYÐYÐYÐYÈ$Ì.ÐYÑYÔYÐZÐZÝ
Ð9°4Ð9Ð9Ñ
:Ô
:Ð:r!   )^r/   r�   Údataclassesrç   Útypingr   r   ÚnumpyrÏ   Úqiskit.circuitr   r   r   r   r	   r
   r   r   r   r   r   r   r   Úqiskit.quantum_infor   Úqiskit._accelerate.qasm2r   r   r   r   r   r   r   r   r   Ú
exceptionsr   ÚU3GateÚU2GateÚU1Gater‰   ÚXGateÚYGateÚZGateÚHGateÚSGateÚSdgGateÚTGateÚTdgGateÚRXGateÚRYGateÚRZGateÚCZGateÚCYGateÚCHGateÚCCXGateÚCRZGateÚCU1GateÚCU3Gater›   Ú	dataclassr&   Úfloatr8   r:   ÚIGater   Ú	PhaseGateÚSXGateÚSXdgGateÚSwapGateÚ	CSwapGateÚCRXGateÚCRYGateÚ
CPhaseGateÚCSXGateÚCUGateÚRXXGateÚRZZGateÚRCCXGateÚRC3XGateÚC3XGateÚC3SXGateÚC4XGateÚLEGACY_CUSTOM_INSTRUCTIONSrw   rx   ry   ÚLEGACY_CUSTOM_CLASSICALr¼   r¾   rž   r¡   rÇ   r    r!   r"   ú<module>r0     s¦  ðð VÐ UØ €€€Ø Ð Ð Ð Ø €€€Ø %Ð %Ð %Ð %Ð %Ð %Ð %Ð %à Ð Ð Ð ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð )Ð (Ð (Ð (Ð (Ð (ð
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð 
ð (Ð 'Ð 'Ð 'Ð 'Ð 'ð
 „JØ„JØ„JØ„Jð ÐØ„IØ„IØ„IØ„IØ„IØ„KØ„IØ„KØ„JØ„JØ„JØ„JØ„JØ„JØ„KØ„KØ„KØ„Kð3
€ð: €Ô˜dÐ#Ñ#Ô#ð0ð 0ð 0ð 0ð 0ñ 0ô 0ñ $Ô#ð0ðf'˜%ð 'ð 'ð 'ð 'ð	#ð 	#ð 	#ð 	#ð 	#ˆdñ 	#ô 	#ð 	#ð-ØÐ�d˜A˜q #¤*Ñ-Ô-ð-àÐ�d˜A˜q #¤*Ñ-Ô-ð-ð Ð�d˜A˜q #¤*Ñ-Ô-ð-ð Ð�d˜A˜q #¤*Ñ-Ô-ð	-ð Ð�d˜A˜q #¤)Ñ,Ô,ð-ð Ð�d˜A˜q '°4Ð8Ñ8Ô8ð-ð Ð�c˜1˜a ¤°DÐ9Ñ9Ô9ð-ð Ð�c˜1˜a ¤¸Ð=Ñ=Ô=ð-ð Ð�c˜1˜a ¤Ñ+Ô+ð-ð Ð�c˜1˜a ¤Ñ+Ô+ð-ð Ð�c˜1˜a ¤Ñ+Ô+ð-ð Ð�c˜1˜a ¤Ñ+Ô+ð-ð Ð�c˜1˜a ¤Ñ+Ô+ð-ð Ð�e˜Q  3¤;Ñ/Ô/ð-ð  Ð�c˜1˜a ¤Ñ+Ô+ð!-ð" Ð�e˜Q  3¤;Ñ/Ô/ð#-ð$ Ð�d˜A˜q #¤*Ñ-Ô-ð%-ð& Ð�d˜A˜q #¤*Ñ-Ô-ð'-ð( Ð�d˜A˜q #¤*Ñ-Ô-ð)-ð* Ð�d˜A˜q #¤*°dÐ;Ñ;Ô;ð+-ð, Ð�f˜a  C¤L¸$Ð?Ñ?Ô?ð--ð. Ð�d˜A˜q #¤*Ñ-Ô-ð/-ð0 Ð�d˜A˜q #¤*Ñ-Ô-ð1-ð2 Ð�f˜a  C¤L¸$Ð?Ñ?Ô?ð3-ð4 Ð�d˜A˜q #¤*Ñ-Ô-ð5-ð6 Ð�e˜Q  3¤;Ñ/Ô/ð7-ð8 Ð�g˜q ! S¤]¸DÐAÑAÔAð9-ð: Ð�e˜Q  3¤;¸Ð=Ñ=Ô=ð;-ð< Ð�e˜Q  3¤;¸Ð=Ñ=Ô=ð=-ð> Ð�e˜Q  3¤;Ñ/Ô/ð?-ð@ Ð�e˜Q  3¤;Ñ/Ô/ðA-ðB Ð�d˜A˜q #¤.¸$Ð?Ñ?Ô?ðC-ðD Ð�e˜Q  3¤;Ñ/Ô/ðE-ðF Ð�e˜Q  3¤;¸Ð=Ñ=Ô=ðG-ðH Ð�d˜A˜q #¤*°dÐ;Ñ;Ô;ðI-ðJ Ð�e˜Q  3¤;¸Ð=Ñ=Ô=ðK-ðL Ð�e˜Q  3¤;¸Ð=Ñ=Ô=ðM-ðN Ð�f˜a  C¤L¸$Ð?Ñ?Ô?ðO-ðP Ð�f˜a  C¤L¸$Ð?Ñ?Ô?ðQ-ðR Ð�e˜Q  3¤;¸Ð=Ñ=Ô=ðS-ðT Ð�i  A s¤|¸TÐBÑBÔBðU-ðV Ð�e˜Q  3¤;¸Ð=Ñ=Ô=ðW-ðX Ð�g˜q ! _Ñ5Ô5ðY-ð -Ð ð` €O�F˜A˜tœyÑ)Ô)Ø€O�F˜A˜tœyÑ)Ô)Ø€O�F˜A˜tœyÑ)Ô)ðÐ ðz°Ð:KÔ1Lð zð zð zð zðz2$ð 2$ð 2$ð 2$ð 2$�4ñ 2$ô 2$ð 2$ðj
ð 
ð 
ðð ð ð*;ð *;ð *;ð *;ð *;r!   