§
    ¹³Ùg  ã                   óF   — d Z ddlmZ ddlmZ ddlmZ ddlmZm	Z	 dd„Z
dS )	z;Helper function for converting a circuit to an instruction.é    )ÚQiskitError)ÚInstruction)ÚQuantumRegister)ÚClassicalRegisterÚClbitNc                 óP  ‡‡‡— ddl m} | j        rt          d¦  «        ‚| j        rt          d¦  «        ‚| j        rt          d¦  «        ‚|€d„ | j        D ¦   «         }n|                      |¦  «        }|                     ¦   «         | j        k    rt          d| j        › d	|› �¦  «        ‚t          | j
        | j        | j        g |                     ¦   «         ¢|¬
¦  «        }d|_        |                      |d¬¦  «        }|�|                     ||¦  «         g }d\  }	Š|j        dk    r*t#          |j        d¦  «        }	|                     |	¦  «         |j        dk    r*t'          |j        d¦  «        Š|                     ‰¦  «         ˆfd„t)          | j        ¦  «        D ¦   «         Ši Šˆˆˆfd„}
|j                             ¦   «         }|                     |	‰¬¦  «         |                     |
¦  «          ||d|j
        iŽ}||_        | j        r| j        |_        ||_        |S )a&  Build an :class:`~.circuit.Instruction` object from a :class:`.QuantumCircuit`.

    The instruction is anonymous (not tied to a named quantum register),
    and so can be inserted into another circuit. The instruction will
    have the same string name as the circuit.

    Args:
        circuit (QuantumCircuit): the input circuit.
        parameter_map (dict): For parameterized circuits, a mapping from
           parameters in the circuit to parameters to be used in the instruction.
           If None, existing circuit parameters will also parameterize the
           instruction.
        equivalence_library (EquivalenceLibrary): Optional equivalence library
           where the converted instruction will be registered.
        label (str): Optional instruction label.

    Raises:
        QiskitError: if parameter_map is not compatible with circuit

    Return:
        qiskit.circuit.Instruction: an instruction equivalent to the action of the
        input circuit. Upon decomposition, this instruction will
        yield the components comprising the original circuit.

    Example:
        .. code-block::

            from qiskit import QuantumRegister, ClassicalRegister, QuantumCircuit
            from qiskit.converters import circuit_to_instruction

            q = QuantumRegister(3, 'q')
            c = ClassicalRegister(3, 'c')
            circ = QuantumCircuit(q, c)
            circ.h(q[0])
            circ.cx(q[0], q[1])
            circ.measure(q[0], c[0])
            circ.rz(0.5, q[1]).c_if(c, 2)
            circuit_to_instruction(circ)
    r   )ÚQuantumCircuitzGCircuits with 'input' variables cannot yet be converted to instructionszCCircuits that capture variables cannot be converted to instructionszžCircuits with internal variables cannot yet be converted to instructions. You may be able to use `QuantumCircuit.compose` to inline this circuit into another.Nc                 ó   — i | ]}||“ŒS © r   )Ú.0Úps     ú^/granary/edev/quantum/lib/python3.11/site-packages/qiskit/converters/circuit_to_instruction.pyú
<dictcomp>z*circuit_to_instruction.<locals>.<dictcomp>V   s   € Ð;Ð;Ð; 1˜!˜QÐ;Ð;Ð;ó    zEparameter_map should map all circuit parameters. Circuit parameters: z, parameter_map: )ÚnameÚ
num_qubitsÚ
num_clbitsÚparamsÚlabelF)Úinplace)NNÚqÚcc                 ó(   •— i | ]\  }}|‰|         “ŒS r   r   )r   ÚidxÚbitÚcregs      €r   r   z*circuit_to_instruction.<locals>.<dictcomp>x   s#   ø€ ÐJÐJÐJ¡H C¨��d˜3”iÐJÐJÐJr   c                 ób  •— t          | ¦  «        }‰                     |¦  «        x}�|S t          | dd ¦  «        }|rm|\  }}t          |t          ¦  «        r|                      ‰|         |¦  «        } n6|j        ‰j        k    r|                      ‰|¦  «        } nt          d¦  «        ‚| ‰|<   | S )NÚ
_conditionzTCannot convert condition in circuit with multiple classical registers to instruction)ÚidÚgetÚgetattrÚ
isinstancer   Úc_ifÚsizer   )	ÚopÚoriginal_idÚoutÚ	conditionÚregÚvalÚ	clbit_mapr   Úoperation_maps	         €€€r   Úfix_conditionz-circuit_to_instruction.<locals>.fix_condition{   sÆ   ø€ Ý˜‘f”fˆØ ×$Ò$ [Ñ1Ô1Ð1ˆCÐ>ØˆJå˜B ¨dÑ3Ô3ˆ	Øð 
	Ø ‰HˆC�Ý˜#�uÑ%Ô%ð Ø—W’W˜Y sœ^¨SÑ1Ô1��Ø”˜TœYÒ&Ð&Ø—W’W˜T 3Ñ'Ô'��å!ðBñô ð ð &(ˆ�kÑ"Øˆ	r   )ÚqubitsÚclbitsr   )Úqiskit.circuit.quantumcircuitr	   Únum_input_varsr   Únum_captured_varsÚnum_declared_varsÚ
parametersÚ_unroll_param_dictÚkeysr   r   r   r   Úvaluesr   Úassign_parametersÚadd_equivalencer   Úappendr   Ú	enumerater/   Ú_dataÚcopyÚreplace_bitsÚmap_nonstandard_opsÚglobal_phaseÚ
definition)ÚcircuitÚparameter_mapÚequivalence_libraryr   r	   Úparameter_dictÚout_instructionÚtargetÚregsÚqregr-   ÚdataÚqcr+   r   r,   s                @@@r   Úcircuit_to_instructionrL      s¹  øøø€ ðR =Ð<Ð<Ð<Ð<Ð<àÔð eõ ÐcÑdÔdÐdØÔ ð aÝÐ_Ñ`Ô`Ð`ØÔ ð 
õ ðdñ
ô 
ð 	
ð
 ÐØ;Ð;¨Ô(:Ð;Ñ;Ô;ˆˆà ×3Ò3°MÑBÔBˆà×ÒÑÔ Ô 2Ò2Ð2ÝðYØ#*Ô#5ðYð YØHVðYð Yñ
ô 
ð 	
õ
 "ØŒ\ØÔ%ØÔ%Ø)�×&Ò&Ñ(Ô(Ð)Øðñ ô €Oð "&€OÔà×&Ò& ~¸uÐ&ÑEÔE€FàÐ&Ø×+Ò+¨O¸VÑDÔDÐDà€DØ�J€Dˆ$ØÔ! AÒ%Ð%Ý˜Ô9¸3Ñ?Ô?ˆØ�Š�DÑÔÐàÔ! AÒ%Ð%Ý  Ô!;¸SÑAÔAˆØ�Š�DÑÔÐàJÐJÐJÐJµ	¸'¼.Ñ0IÔ0IÐJÑJÔJ€IØ€Mðð ð ð ð ð ð ð( Œ<×ÒÑÔ€DØ×Ò˜T¨$ÐÑ/Ô/Ð/Ø×Ò˜]Ñ+Ô+Ð+à	ˆ˜Ð	9 OÔ$8Ð	9Ð	9€BØ€B„HàÔð /Ø!Ô.ˆŒà!#€OÔàÐr   )NNN)Ú__doc__Úqiskit.exceptionsr   Úqiskit.circuit.instructionr   Úqiskit.circuit.quantumregisterr   Ú qiskit.circuit.classicalregisterr   r   rL   r   r   r   ú<module>rR      s€   ðð BÐ AØ )Ð )Ð )Ð )Ð )Ð )Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2Ø :Ð :Ð :Ð :Ð :Ð :Ø EÐ EÐ EÐ EÐ EÐ EÐ EÐ EðGð Gð Gð Gð Gð Gr   