§
    ¹³Ùg†g  ã            ?       ó   — d Z ddlZddlmZ ddlmZmZmZmZmZm	Z	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 dd	lmZ dd
lmZ ddlmZmZ ddlmZmZmZ ddlm Z  ddl!m"Z"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- ddl.m/Z/  ej0        e1¦  «        Z2 e
deeee         f         ¬¦  «        Z3 e-ddddd¬¦  «         e-ddddd¬¦  «         e-ddddd ¬¦  «         e/d!d"„ ¬#¦  «        	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dFd(e3d)e	e         d*e	ee4                  d!e	ee                  d+e	eeeee5                  f                  de	e         d,e	eeeef                  d-e	e4         d.e	e4         d/e	e4         d0e	e4         de	e%         d1e	e6         d2e	e6         de	ee4e5f                  d3e	e5         d4e	e5         d5e	ee ee6ee5gef                  d6e	ee4ee4         f                  d7e4d8e	e7         d9e	e+         d:e	e'         d;e	e4         d<e	e4         d=e8d>e	e5         d?e8d@e3f:dA„¦   «         ¦   «         ¦   «         ¦   «         Z9dB„ Z:dC„ Z;dD„ Z<dE„ Z=dS )GzCircuit transpile functioné    N)Útime)ÚListÚUnionÚDictÚCallableÚAnyÚOptionalÚTypeVar)Úuser_config)ÚQuantumCircuit)Ú
DAGCircuit)ÚBackend)ÚBackendV2Converter)ÚBackendProperties)ÚScheduleÚInstructionScheduleMap)ÚLayoutÚCouplingMapÚPropertySet)ÚBasePass)ÚTranspilerErrorÚCircuitTooWideForTarget)ÚInstructionDurationsType)Ú	HLSConfig)Úgenerate_preset_pass_manager)ÚTarget)Údeprecate_arg)Údeprecate_pulse_argÚ	_CircuitT)ÚboundÚinstruction_durationsz1.3ÚQiskitzin Qiskit 2.0z´The `target` parameter should be used instead. You can build a `Target` instance with defined instruction durations with `Target.from_configuration(..., instruction_durations=...)`)ÚnameÚsinceÚpackage_nameÚremoval_timelineÚadditional_msgÚtiming_constraintsz®The `target` parameter should be used instead. You can build a `Target` instance with defined timing constraints with `Target.from_configuration(..., timing_constraints=...)`Úbackend_propertiesz¤The `target` parameter should be used instead. You can build a `Target` instance with defined properties with Target.from_configuration(..., backend_properties=...)Úinst_mapc                 ó
   — | d uS ©N© )r*   s    úP/granary/edev/quantum/lib/python3.11/site-packages/qiskit/compiler/transpiler.pyú<lambda>r/   E   s   € ¸HÈDÐ<P€ ó    )Ú	predicateç      ð?ÚdefaultFTÚcircuitsÚbackendÚbasis_gatesÚcoupling_mapÚinitial_layoutÚlayout_methodÚrouting_methodÚtranslation_methodÚscheduling_methodÚdtÚapproximation_degreeÚseed_transpilerÚoptimization_levelÚcallbackÚoutput_nameÚunitary_synthesis_methodÚunitary_synthesis_plugin_configÚtargetÚ
hls_configÚinit_methodÚoptimization_methodÚ'ignore_backend_supplied_default_methodsÚnum_processesÚqubits_initially_zeroÚreturnc                 ó`  — t          | t          ¦  «        }|r| n| g} | sg S t          ¦   «         }t          d„ | D ¦   «         ¦  «        rDt	          j        dt          ¦  «         t          ¦   «         }t          ||¦  «         |r| S | d         S |€)t          j	        ¦   «         }| 
                    dd¦  «        }|�Œt          |dd¦  «        dk    rwt	          j        d	|› d
�t          d¬¦  «         t	          j        ¦   «         5  t	          j        dt          dd¬¦  «         t          |¦  «        }ddd¦  «         n# 1 swxY w Y   |
� |€|€|st	          j        dt          ¦  «         |sL|
€$t!          |d¦  «        r|                     ¦   «         }
|	€$t!          |d¦  «        r|                     ¦   «         }	t'          || ¦  «        }t)          |¦  «        }t+          | ||¦  «         t	          j        ¦   «         5  t	          j        dt          dd¬¦  «         t	          j        dt          dd¬¦  «         t	          j        dt          dd¬¦  «         t	          j        dt          dd¬¦  «         t-          |fi d|“d|“d|“d|“d|“d|“d|“d|“d|“d |“d!|“d"|	“d#|
“d$|“d%|“d&|“d'|“d(|“d)|“d*|“d+|“d,|“Ž} ddd¦  «         n# 1 swxY w Y   |                      | ||¬-¦  «        }!t1          ||!¦  «        D ]\  }"}#|"|#_        Œt          ¦   «         }t          ||¦  «         |r|!S |!d         S ).a56  Transpile one or more circuits, according to some desired transpilation targets.

    Transpilation is potentially done in parallel using multiprocessing when ``circuits``
    is a list with > 1 :class:`~.QuantumCircuit` object, depending on the local environment
    and configuration.

    The prioritization of transpilation target constraints works as follows: if a ``target``
    input is provided, it will take priority over any ``backend`` input or loose constraints
    (``basis_gates``, ``inst_map``, ``coupling_map``, ``backend_properties``, ``instruction_durations``,
    ``dt`` or ``timing_constraints``). If a ``backend`` is provided together with any loose constraint
    from the list above, the loose constraint will take priority over the corresponding backend
    constraint. This behavior is independent of whether the ``backend`` instance is of type
    :class:`.BackendV1` or :class:`.BackendV2`, as summarized in the table below. The first column
    in the table summarizes the potential user-provided constraints, and each cell shows whether
    the priority is assigned to that specific constraint input or another input
    (`target`/`backend(V1)`/`backend(V2)`).

    ============================ ========= ======================== =======================
    User Provided                target    backend(V1)              backend(V2)
    ============================ ========= ======================== =======================
    **basis_gates**              target    basis_gates              basis_gates
    **coupling_map**             target    coupling_map             coupling_map
    **instruction_durations**    target    instruction_durations    instruction_durations
    **inst_map**                 target    inst_map                 inst_map
    **dt**                       target    dt                       dt
    **timing_constraints**       target    timing_constraints       timing_constraints
    **backend_properties**       target    backend_properties       backend_properties
    ============================ ========= ======================== =======================

    Args:
        circuits: Circuit(s) to transpile
        backend: If set, the transpiler will compile the input circuit to this target
            device. If any other option is explicitly set (e.g., ``coupling_map``), it
            will override the backend's.
        basis_gates: List of basis gate names to unroll to
            (e.g: ``['u1', 'u2', 'u3', 'cx']``). If ``None``, do not unroll.
        inst_map: DEPRECATED. Mapping of unrolled gates to pulse schedules. If this is not provided,
            transpiler tries to get from the backend. If any user defined calibration
            is found in the map and this is used in a circuit, transpiler attaches
            the custom gate definition to the circuit. This enables one to flexibly
            override the low-level instruction implementation. This feature is available
            iff the backend supports the pulse gate experiment.
        coupling_map: Directed coupling map (perhaps custom) to target in mapping. If
            the coupling map is symmetric, both directions need to be specified.

            Multiple formats are supported:

            #. ``CouplingMap`` instance
            #. List, must be given as an adjacency matrix, where each entry
               specifies all directed two-qubit interactions supported by backend,
               e.g: ``[[0, 1], [0, 3], [1, 2], [1, 5], [2, 5], [4, 1], [5, 3]]``

        backend_properties: properties returned by a backend, including information on gate
            errors, readout errors, qubit coherence times, etc. Find a backend
            that provides this information with: ``backend.properties()``
        initial_layout: Initial position of virtual qubits on physical qubits.
            If this layout makes the circuit compatible with the coupling_map
            constraints, it will be used. The final layout is not guaranteed to be the same,
            as the transpiler may permute qubits through swaps or other means.
            Multiple formats are supported:

            #. ``Layout`` instance
            #. Dict
               * virtual to physical::

                    {qr[0]: 0,
                     qr[1]: 3,
                     qr[2]: 5}

               * physical to virtual::

                    {0: qr[0],
                     3: qr[1],
                     5: qr[2]}

            #. List

               * virtual to physical::

                    [0, 3, 5]  # virtual qubits are ordered (in addition to named)

               * physical to virtual::

                    [qr[0], None, None, qr[1], None, qr[2]]

        layout_method: Name of layout selection pass ('trivial', 'dense', 'sabre').
            This can also be the external plugin name to use for the ``layout`` stage.
            You can see a list of installed plugins by using :func:`~.list_stage_plugins` with
            ``"layout"`` for the ``stage_name`` argument.
        routing_method: Name of routing pass
            ('basic', 'lookahead', 'stochastic', 'sabre', 'none'). Note
            This can also be the external plugin name to use for the ``routing`` stage.
            You can see a list of installed plugins by using :func:`~.list_stage_plugins` with
            ``"routing"`` for the ``stage_name`` argument.
        translation_method: Name of translation pass (``"translator"`` or ``"synthesis"``)
            This can also be the external plugin name to use for the ``translation`` stage.
            You can see a list of installed plugins by using :func:`~.list_stage_plugins` with
            ``"translation"`` for the ``stage_name`` argument.
        scheduling_method: Name of scheduling pass.
            * ``'as_soon_as_possible'``: Schedule instructions greedily, as early as possible
            on a qubit resource. (alias: ``'asap'``)
            * ``'as_late_as_possible'``: Schedule instructions late, i.e. keeping qubits
            in the ground state when possible. (alias: ``'alap'``)
            If ``None``, no scheduling will be done. This can also be the external plugin name
            to use for the ``scheduling`` stage. You can see a list of installed plugins by
            using :func:`~.list_stage_plugins` with ``"scheduling"`` for the ``stage_name``
            argument.
        instruction_durations: Durations of instructions.
            Applicable only if scheduling_method is specified.
            The gate lengths defined in ``backend.properties`` are used as default.
            They are overwritten if this ``instruction_durations`` is specified.
            The format of ``instruction_durations`` must be as follows.
            The `instruction_durations` must be given as a list of tuples
            [(instruction_name, qubits, duration, unit), ...].
            | [('cx', [0, 1], 12.3, 'ns'), ('u3', [0], 4.56, 'ns')]
            | [('cx', [0, 1], 1000), ('u3', [0], 300)]
            If unit is omitted, the default is 'dt', which is a sample time depending on backend.
            If the time unit is 'dt', the duration must be an integer.
        dt: Backend sample time (resolution) in seconds.
            If ``None`` (default), ``backend.configuration().dt`` is used.
        approximation_degree (float): heuristic dial used for circuit approximation
            (1.0=no approximation, 0.0=maximal approximation)
        timing_constraints: An optional control hardware restriction on instruction time resolution.
            A quantum computer backend may report a set of restrictions, namely:

            - granularity: An integer value representing minimum pulse gate
              resolution in units of ``dt``. A user-defined pulse gate should have
              duration of a multiple of this granularity value.
            - min_length: An integer value representing minimum pulse gate
              length in units of ``dt``. A user-defined pulse gate should be longer
              than this length.
            - pulse_alignment: An integer value representing a time resolution of gate
              instruction starting time. Gate instruction should start at time which
              is a multiple of the alignment value.
            - acquire_alignment: An integer value representing a time resolution of measure
              instruction starting time. Measure instruction should start at time which
              is a multiple of the alignment value.

            This information will be provided by the backend configuration.
            If the backend doesn't have any restriction on the instruction time allocation,
            then ``timing_constraints`` is None and no adjustment will be performed.
        seed_transpiler: Sets random seed for the stochastic parts of the transpiler
        optimization_level: How much optimization to perform on the circuits.
            Higher levels generate more optimized circuits,
            at the expense of longer transpilation time.

            * 0: no optimization
            * 1: light optimization
            * 2: heavy optimization
            * 3: even heavier optimization

            If ``None``, level 2 will be chosen as default.
        callback: A callback function that will be called after each
            pass execution. The function will be called with 5 keyword
            arguments,
            | ``pass_``: the pass being run.
            | ``dag``: the dag output of the pass.
            | ``time``: the time to execute the pass.
            | ``property_set``: the property set.
            | ``count``: the index for the pass execution.
            The exact arguments passed expose the internals of the pass manager,
            and are subject to change as the pass manager internals change. If
            you intend to reuse a callback function over multiple releases, be
            sure to check that the arguments being passed are the same.
            To use the callback feature, define a function that will
            take in kwargs dict and access the variables. For example::

                def callback_func(**kwargs):
                    pass_ = kwargs['pass_']
                    dag = kwargs['dag']
                    time = kwargs['time']
                    property_set = kwargs['property_set']
                    count = kwargs['count']
                    ...
                transpile(circ, callback=callback_func)

        output_name: A list with strings to identify the output circuits. The length of
            the list should be exactly the length of the ``circuits`` parameter.
        unitary_synthesis_method (str): The name of the unitary synthesis
            method to use. By default ``'default'`` is used. You can see a list of installed
            plugins with :func:`.unitary_synthesis_plugin_names`.
        unitary_synthesis_plugin_config: An optional configuration dictionary
            that will be passed directly to the unitary synthesis plugin. By
            default this setting will have no effect as the default unitary
            synthesis method does not take custom configuration. This should
            only be necessary when a unitary synthesis plugin is specified with
            the ``unitary_synthesis_method`` argument. As this is custom for each
            unitary synthesis plugin refer to the plugin documentation for how
            to use this option.
        target: A backend transpiler target. Normally this is specified as part of
            the ``backend`` argument, but if you have manually constructed a
            :class:`~qiskit.transpiler.Target` object you can specify it manually here.
            This will override the target from ``backend``.
        hls_config: An optional configuration class
            :class:`~qiskit.transpiler.passes.synthesis.HLSConfig` that will be passed directly
            to :class:`~qiskit.transpiler.passes.synthesis.HighLevelSynthesis` transformation pass.
            This configuration class allows to specify for various high-level objects the lists of
            synthesis algorithms and their parameters.
        init_method: The plugin name to use for the ``init`` stage. By default an external
            plugin is not used. You can see a list of installed plugins by
            using :func:`~.list_stage_plugins` with ``"init"`` for the stage
            name argument.
        optimization_method: The plugin name to use for the
            ``optimization`` stage. By default an external
            plugin is not used. You can see a list of installed plugins by
            using :func:`~.list_stage_plugins` with ``"optimization"`` for the
            ``stage_name`` argument.
        ignore_backend_supplied_default_methods: If set to ``True`` any default methods specified by
            a backend will be ignored. Some backends specify alternative default methods
            to support custom compilation target-specific passes/plugins which support
            backend-specific compilation techniques. If you'd prefer that these defaults were
            not used this option is used to disable those backend-specific defaults.
        num_processes: The maximum number of parallel processes to launch for this call to
            transpile if parallel execution is enabled. This argument overrides
            ``num_processes`` in the user configuration file, and the ``QISKIT_NUM_PROCS``
            environment variable. If set to ``None`` the system default or local user configuration
            will be used.
        qubits_initially_zero: Indicates whether the input circuit is zero-initialized.

    Returns:
        The transpiled circuit(s).

    Raises:
        TranspilerError: in case of bad inputs to transpiler (like conflicting parameters)
            or errors in passes
    c              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r,   )Ú
isinstancer   )Ú.0Úcs     r.   ú	<genexpr>ztranspile.<locals>.<genexpr>N  s,   è è € Ð
5Ð
5 q�:�a�Ñ"Ô"Ð
5Ð
5Ð
5Ð
5Ð
5Ð
5r0   z+Transpiling schedules is not supported yet.r   NÚtranspile_optimization_levelé   Úversioné   zKThe `transpile` function will stop supporting inputs of type `BackendV1` ( z� ) in the `backend` parameter in a future release no earlier than 2.0. `BackendV1` is deprecated and implementations should move to `BackendV2`.)ÚcategoryÚ
stacklevelÚignorez9.+qiskit\.providers\.backend_compat\.BackendV2Converter.+Úqiskit)rW   ÚmessageÚmodulez]When scheduling circuits without backend, 'instruction_durations' should be usually provided.Úget_scheduling_stage_pluginÚget_translation_stage_pluginz/.*``inst_map`` is deprecated as of Qiskit 1.3.*z9.*``timing_constraints`` is deprecated as of Qiskit 1.3.*z<.*``instruction_durations`` is deprecated as of Qiskit 1.3.*z9.*``backend_properties`` is deprecated as of Qiskit 1.3.*rE   r5   r6   r7   r!   r)   r(   r*   r8   r9   r:   r;   r<   r>   r?   rC   rD   rF   rG   rH   r=   rK   )rA   rJ   )rO   Úlistr   ÚallÚwarningsÚwarnÚUserWarningÚ_log_transpile_timer   Ú
get_configÚgetÚgetattrÚDeprecationWarningÚcatch_warningsÚfilterwarningsr   Úhasattrr]   r^   Ú_parse_output_nameÚ_parse_coupling_mapÚ_check_circuits_coupling_mapr   ÚrunÚzipr#   )$r4   r5   r6   r*   r7   r)   r8   r9   r:   r;   r<   r!   r=   r>   r(   r?   r@   rA   rB   rC   rD   rE   rF   rG   rH   rI   rJ   rK   Úarg_circuits_listÚ
start_timeÚend_timeÚconfigÚpmÚout_circuitsr#   Úcircs$                                       r.   Ú	transpilerx   +   s  € õv # 8­TÑ2Ô2ÐØ,Ð<ˆxˆx°8°*€Hàð Øˆ	õ ‘”€JÝ
Ð
5Ð
5¨HÐ
5Ñ
5Ô
5Ñ5Ô5ð ÝŒÐCÅ[ÑQÔQÐQÝ‘6”6ˆÝ˜J¨Ñ1Ô1Ð1Øð 	ØˆOà˜A”;ÐàÐ!åÔ'Ñ)Ô)ˆØ#ŸZšZÐ(FÈÑJÔJÐàÐ�w w°	¸1Ñ=Ô=ÀÒBÐBÝŒð*Ø")ð*ð *ð *õ (Øð	
ñ 	
ô 	
ð 	
õ Ô$Ñ&Ô&ð 	2ð 	2õ Ô#ØÝ+ØTØð	ñ ô ð õ )¨Ñ1Ô1ˆGð	2ð 	2ð 	2ñ 	2ô 	2ð 	2ð 	2ð 	2ð 	2ð 	2ð 	2øøøð 	2ð 	2ð 	2ð 	2ð  	Ð%ØˆOØˆNØ%ð õ 	ŒðCåñ	
ô 	
ð 	
ð 3ð HØÐ$­°Ð:WÑ)XÔ)XÐ$Ø '× CÒ CÑ EÔ EÐØÐ%­'°'Ð;YÑ*ZÔ*ZÐ%Ø!(×!EÒ!EÑ!GÔ!GÐå$ [°(Ñ;Ô;€KÝ& |Ñ4Ô4€LÝ  ¨<¸ÑAÔAÐAõ 
Ô	 Ñ	"Ô	"ð 1
ð 1
ÝÔØÝ'ØEØð		
ñ 	
ô 	
ð 	
õ 	ÔØÝ'ØOØð		
ñ 	
ô 	
ð 	
õ 	ÔØÝ'ØRØð		
ñ 	
ô 	
ð 	
õ 	ÔØÝ'ØOØð		
ñ 	
ô 	
ð 	
õ *Øð
ð 
ð 
à�6ð
ð �Gð
ð $˜ð	
ð
 &˜ð
ð #8Ð"7ð
ð  2Ð1ð
ð  2Ð1ð
ð �Xð
ð *˜>ð
ð (˜-ð
ð *˜>ð
ð  2Ð1ð
ð 0Ð/ð
ð "6Ð!5ð
ð  ,˜Oð!
ð" &>Ð%=ð#
ð$ -LÐ,Kð%
ð& "�zð'
ð( $˜ð)
ð* !4Ð 3ð+
ð, ˆrð-
ð. #8Ð"7ð/
ˆð31
ð 1
ð 1
ñ 1
ô 1
ð 1
ð 1
ð 1
ð 1
ð 1
ð 1
øøøð 1
ð 1
ð 1
ð 1
ðf —6’6˜(¨XÀ]�6ÑSÔS€Lå˜+ |Ñ4Ô4ð ð ‰
ˆˆdØˆŒ	ˆ	Ý‰vŒv€HÝ˜
 HÑ-Ô-Ð-Øð ØÐà˜AŒÐs%   Ä-D:Ä:D>ÅD>Ç8CKËK
ËK
c           
      óÈ   — d }|�|                      ¦   «         }n	|�|j        }| D ]<}t          |j        ¦  «        }|�$||k    rt	          d|› d|j        › d|› d�¦  «        ‚Œ=d S )NzNumber of qubits (z) in z is greater than maximum (z) in the coupling_map)ÚsizeÚ
num_qubitsÚlenÚqubitsr   r#   )r4   Úcmapr5   Ú
max_qubitsÚcircuitr{   s         r.   rn   rn   Í  s®   € à€JØÐØ—Y’Y‘[”[ˆ
ˆ
Ø	Ð	ØÔ'ˆ
àð ð ˆå˜œÑ(Ô(ˆ
ØÐ! z°JÒ'>Ð'>Ý)ðN Zð Nð N°g´lð Nð NØ,6ðNð Nð Nñô ð øð	ð r0   c                 óT   — d|| z
  dz  d›d�}t                                |¦  «         d S )NzTotal Transpile Time - iè  z.5fz (ms))ÚloggerÚinfo)rr   rs   Úlog_msgs      r.   rd   rd   ß  s7   € ØS¨(°ZÑ*?À4Ñ)GÐSÐSÐSÐS€GÝ
‡K‚K�ÑÔÐÐÐr0   c                 óÈ   — t          | t          ¦  «        r(t          d„ | D ¦   «         ¦  «        rt          | ¦  «        S t          | t          ¦  «        rt	          d¦  «        ‚| S )Nc              3   óf   K  — | ],}t          |t          ¦  «        ot          |¦  «        d k    V — Œ-dS )rT   N)rO   r_   r|   )rP   Úis     r.   rR   z&_parse_coupling_map.<locals>.<genexpr>æ  sL   è è € ð .ð .Ø01�
�1•dÑÔÐ+¥ A¡¤¨!¢ð.ð .ð .ð .ð .ð .r0   z«Only a single input coupling map can be used with transpile() if you need to target different coupling maps for different circuits you must call transpile() multiple times)rO   r_   r`   r   r   )r7   s    r.   rm   rm   ä  s‚   € å�,¥Ñ%Ô%ð ­#ð .ð .Ø5Að.ñ .ô .ñ +ô +ð õ ˜<Ñ(Ô(Ð(Ý	�L¥$Ñ	'Ô	'ð Ýðñ
ô 
ð 	
ð Ðr0   c                 ó�  — | �¹t          | t          ¦  «        r%t          |¦  «        dk    r| gS t          d¦  «        ‚t          | t          ¦  «        rJt          |¦  «        t          | ¦  «        k    rt          d„ | D ¦   «         ¦  «        r| S t          d¦  «        ‚t          dt          | ¦  «        › d�¦  «        ‚d„ |D ¦   «         S )NrV   zYExpected a list object of length equal to that of the number of circuits being transpiledc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S r,   )rO   Ústr)rP   r#   s     r.   rR   z%_parse_output_name.<locals>.<genexpr>  s=   è è € ð 9ð 9Ø*.•
˜4¥Ñ%Ô%ð9ð 9ð 9ð 9ð 9ð 9r0   z}The length of output_name list must be equal to the number of transpiled circuits and the output_name list should be strings.zBThe parameter output_name should be a string or alist of strings: z
 was used.c                 ó   — g | ]	}|j         ‘Œ
S r-   )r#   )rP   r€   s     r.   ú
<listcomp>z&_parse_output_name.<locals>.<listcomp>  s   € Ð5Ð5Ð5 �”Ð5Ð5Ð5r0   )rO   rŠ   r|   r   r_   r`   Útype)rB   r4   s     r.   rl   rl   ô  s  € ð ÐÝ�k¥3Ñ'Ô'ð 	å�8‰}Œ} Ò!Ð!Ø#�}Ð$õ &ð)ñô ð õ
 ˜¥TÑ*Ô*ð 	Ý�8‰}Œ}¥ KÑ 0Ô 0Ò0Ð0µSð 9ð 9Ø2=ð9ñ 9ô 9ñ 6ô 6Ð0ð #Ð"å%ð.ñô ð õ "ðBÝ$(¨Ñ$5Ô$5ðBð Bð Bñô ð ð
 6Ð5¨HÐ5Ñ5Ô5Ð5r0   )NNNNNNNNNNNNr2   NNNNNr3   NNNNNFNT)>Ú__doc__Úloggingr   Útypingr   r   r   r   r   r	   r
   ra   rZ   r   Úqiskit.circuit.quantumcircuitr   Úqiskit.dagcircuitr   Úqiskit.providers.backendr   Úqiskit.providers.backend_compatr   Ú)qiskit.providers.models.backendpropertiesr   Úqiskit.pulser   r   Úqiskit.transpilerr   r   r   Úqiskit.transpiler.basepassesr   Úqiskit.transpiler.exceptionsr   r   Ú'qiskit.transpiler.instruction_durationsr   Ú7qiskit.transpiler.passes.synthesis.high_level_synthesisr   Ú%qiskit.transpiler.preset_passmanagersr   Úqiskit.transpiler.targetr   Úqiskit.utilsr   Úqiskit.utils.deprecate_pulser   Ú	getLoggerÚ__name__r‚   r   rŠ   ÚintÚfloatÚdictÚboolrx   rn   rd   rm   rl   r-   r0   r.   ú<module>r¦      s?  ðð !Ð  Ø €€€Ø Ð Ð Ð Ð Ð Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ €€€à Ð Ð Ð Ð Ð Ø 8Ð 8Ð 8Ð 8Ð 8Ð 8Ø (Ð (Ð (Ð (Ð (Ð (Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø >Ð >Ð >Ð >Ð >Ð >Ø GÐ GÐ GÐ GÐ GÐ GØ 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ð >Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ QØ LÐ LÐ LÐ LÐ LÐ LØ MÐ MÐ MÐ MÐ MÐ MØ NÐ NÐ NÐ NÐ NÐ NØ +Ð +Ð +Ð +Ð +Ð +Ø &Ð &Ð &Ð &Ð &Ð &Ø <Ð <Ð <Ð <Ð <Ð <à	ˆÔ	˜8Ñ	$Ô	$€àˆG�K u¨^¸TÀ.Ô=QÐ-QÔ'RÐSÑSÔS€	ð €Ø	 Ø
ØØ$ðBðñ ô ð €Ø	Ø
ØØ$ð?ðñ ô ð €Ø	Ø
ØØ$ðZðñ ô ð Ð�ZÐ+PÐ+PÐQÑQÔQð "&Ø'+Ø7;ØBFØ6:Ø:>Ø#'Ø$(Ø(,Ø'+Ø@DØØ,/Ø37Ø%)Ø(,ØY]Ø37Ø$-Ø6:Ø#Ø&*Ø!%Ø)-Ø49Ø#'Ø"&ð9Dð DØðDà�gÔðDð ˜$˜sœ)Ô$ðDð �tÐ2Ô3Ô4ð	Dð
 ˜5 ¨d°4¸´9¬oÐ!=Ô>Ô?ðDð !Ð!2Ô3ðDð ˜U 6¨4°Ð#5Ô6Ô7ðDð ˜C”=ðDð ˜S”MðDð ! œðDð   ”}ðDð $Ð$<Ô=ðDð 	�ŒðDð # 5œ/ðDð !  c¨3 h¤Ô0ðDð  ˜c”]ð!Dð" ! œð#Dð$ �x ¨:°u¸kÈ3Ð OÐQTÐ TÔUÔVð%Dð& ˜%  T¨#¤Y Ô/Ô0ð'Dð( "ð)Dð* &.¨d¤^ð+Dð, �VÔð-Dð. ˜Ô#ð/Dð0 ˜#”ð1Dð2 " #œð3Dð4 .2ð5Dð6 ˜C”=ð7Dð8  ð9Dð: ð;Dð Dð Dñ RÔQñô ñô ñô ð6DðNð ð ð$ð ð ð
ð ð ð !6ð !6ð !6ð !6ð !6r0   