§
    ¹³Ùg3n  ã            2       ó(  — d Z ddlZddlZddlZddlZddlmZ ddl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mZmZ ddlmZ dd	lmZ dd
lmZmZmZmZ ddlmZ ddl m!Z!m"Z"m#Z# ddl$m%Z%m&Z& ddl'm(Z( ddl)m*Z*  ej+        e,¦  «        Z-d„ Z. e(ddd¬¦  «        ddddddddddde%j/        e&j0        dddddddfde
eee         eee         eee         f         de	e         de	e1         de	e
e#ef                  de	e2         de	e3         de	e2         de	ee4                  d e	ee4                  d!e	ee4                  d"e	ee4                  d#e	e
ee
eee4f         ef                  e
eee4f         ef         f                  d$e
e2e%f         d%e
e1e&f         d&e	eee                           d'e2d(e	e2         d)e	e4         d*e	eeee4f                           d+e	ee1                  d,e3d-ed.e
e!e"f         f.d/„¦   «         Z5ddddddddddde%j/        e&j0        dddddddfde
eee         eee         eee         f         de	e         de	e1         de	e
e#ef                  de	e2         de	e3         de	e2         de	ee4                  d e	ee4                  d!e	ee4                  d"e	ee4                  d#e	e
ee
eee4f         ef                  e
eee4f         ef         f                  d$e
e2e%f         d%e
e1e&f         d&e	eee                           d'e2d(e	e2         d)e	e4         d*e	eeee4f                           d+e	ee1                  d,e3d-ed.e
e!e"f         f.d0„Z6	 d<d1„Z7d2e
ee4         df         d3e
ee4         df         d4e1fd5„Z8d6„ Z9d7„ Z:d)e4d8e4d9ee4         d.e4fd:„Z;d;„ Z<dS )=z?Assemble function for converting a list of circuits into a qobjé    N)Útime)ÚDictÚListÚOptionalÚUnion)Úassemble_schedules)Ú	RunConfig)Ú	ParameterÚQuantumCircuitÚQubit)ÚQiskitError)ÚBackend)ÚInstructionÚLoConfigÚScheduleÚScheduleBlock)ÚPulseChannel)ÚQasmQobjÚ	PulseQobjÚ
QobjHeader)Ú	MeasLevelÚMeasReturnType)Údeprecate_func)Ú_assemble_circuitsc                 óT   — d|| z
  dz  d›d�}t                                |¦  «         d S )NzTotal Assembly Time - iè  z.5fz (ms))ÚloggerÚinfo)Ú
start_timeÚend_timeÚlog_msgs      úO/granary/edev/quantum/lib/python3.11/site-packages/qiskit/compiler/assembler.pyÚ_log_assembly_timer"   &   s7   € ØR¨°JÑ)>À$Ñ(FÐRÐRÐRÐR€GÝ
‡K‚K�ÑÔÐÐÐó    z1.2zin the 2.0 releasezÿThe `Qobj` class and related functionality are part of the deprecated `BackendV1` workflow,  and no longer necessary for `BackendV2`. If a user workflow requires `Qobj` it likely relies on deprecated functionality and should be updated to use `BackendV2`.)ÚsinceÚremoval_timelineÚadditional_msgFéd   TÚexperimentsÚbackendÚqobj_idÚqobj_headerÚshotsÚmemoryÚseed_simulatorÚqubit_lo_freqÚmeas_lo_freqÚqubit_lo_rangeÚmeas_lo_rangeÚschedule_losÚ
meas_levelÚmeas_returnÚmeas_mapÚmemory_slot_sizeÚrep_timeÚ	rep_delayÚparameter_bindsÚparametric_pulsesÚinit_qubitsÚ
run_configÚreturnc                 óD   — t          | |||||||||	|
||||||||||fi |¤ŽS )a˜  Assemble a list of circuits or pulse schedules into a ``Qobj``.

    This function serializes the payloads, which could be either circuits or schedules,
    to create ``Qobj`` "experiments". It further annotates the experiment payload with
    header and configurations.

    NOTE: ``Backend.options`` is not used within assemble. The required values
    (previously given by backend.set_options) should be manually extracted
    from options and supplied directly when calling.

    Args:
        experiments: Circuit(s) or pulse schedule(s) to execute
        backend: If set, some runtime options are automatically grabbed from
            ``backend.configuration()`` and ``backend.defaults()``.
            If any other option is explicitly set (e.g., ``rep_time``), it
            will override the backend's.
            If any other options is set in the run_config, it will
            also override the backend's.
        qobj_id: String identifier to annotate the ``Qobj``
        qobj_header: User input that will be inserted in ``Qobj`` header, and will also be
            copied to the corresponding Result header. Headers do not affect the run.
        shots: Number of repetitions of each circuit, for sampling. Default: 1024
            or ``max_shots`` from the backend configuration, whichever is smaller
        memory: If ``True``, per-shot measurement bitstrings are returned as well
            (provided the backend supports it). For OpenPulse jobs, only
            measurement level 2 supports this option.
        seed_simulator: Random seed to control sampling, for when backend is a simulator
        qubit_lo_freq: List of job level qubit drive LO frequencies in Hz. Overridden by
            ``schedule_los`` if specified. Must have length ``n_qubits.``
        meas_lo_freq: List of measurement LO frequencies in Hz. Overridden by ``schedule_los`` if
            specified. Must have length ``n_qubits.``
        qubit_lo_range: List of job level drive LO ranges each of form ``[range_min, range_max]``
            in Hz. Used to validate ``qubit_lo_freq``. Must have length ``n_qubits.``
        meas_lo_range: List of job level measurement LO ranges each of form
            ``[range_min, range_max]`` in Hz. Used to validate ``meas_lo_freq``. Must have length
            ``n_qubits.``
        schedule_los: Experiment level (ie circuit or schedule) LO frequency configurations for
            qubit drive and measurement channels. These values override the job level values from
            ``default_qubit_los`` and ``default_meas_los``. Frequencies are in Hz. Settable for
            OpenQASM 2 and pulse jobs.
        meas_level: Set the appropriate level of the measurement output for pulse experiments.
        meas_return: Level of measurement data for the backend to return.

            For ``meas_level`` 0 and 1:
                * ``single`` returns information from every shot.
                * ``avg`` returns average measurement output (averaged over number of shots).
        meas_map: List of lists, containing qubits that must be measured together.
        memory_slot_size: Size of each memory slot if the output is Level 0.
        rep_time (int): Time per program execution in seconds. Must be from the list provided
            by the backend (``backend.configuration().rep_times``). Defaults to the first entry.
        rep_delay (float): Delay between programs in seconds. Only supported on certain
            backends (if ``backend.configuration().dynamic_reprate_enabled=True``). If supported,
            ``rep_delay`` will be used instead of ``rep_time`` and must be from the range supplied
            by the backend (``backend.configuration().rep_delay_range``). Default is given by
            ``backend.configuration().default_rep_delay``.
        parameter_binds: List of Parameter bindings over which the set of experiments will be
            executed. Each list element (bind) should be of the form
            {Parameter1: value1, Parameter2: value2, ...}. All binds will be
            executed across all experiments; e.g., if parameter_binds is a
            length-n list, and there are m experiments, a total of m x n
            experiments will be run (one for each experiment/bind pair).
        parametric_pulses: A list of pulse shapes which are supported internally on the backend.
            Example::

            ['gaussian', 'constant']
        init_qubits: Whether to reset the qubits to the ground state for each shot.
                     Default: ``True``.
        **run_config: Extra arguments used to configure the run (e.g., for Aer configurable
            backends). Refer to the backend documentation for details on these
            arguments.

    Returns:
            A ``Qobj`` that can be run on a backend. Depending on the type of input,
            this will be either a ``QasmQobj`` or a ``PulseQobj``.

    Raises:
        QiskitError: if the input cannot be interpreted as either circuits or schedules
    )Ú	_assemble)r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   s                         r!   ÚassemblerA   ,   se   € õt ØØØØØØØØØØØØØØØØØØØØØð+ð ð, ð-ð ð r#   c                 ó–  — t          ¦   «         }t          | t          ¦  «        r| n| g} t          d„ | D ¦   «         ¦  «        }t	          j        ¦   «         5  t	          j        dt          d¬¦  «         t          |||||||||||	|
|fd|i|¤Ž\  }}}d d d ¦  «         n# 1 swxY w Y   t          d„ | D ¦   «         ¦  «        ržt	          j        ¦   «         5  t	          j        dt          dd¬¦  «         t          |||||fi |¤Ž}d d d ¦  «         n# 1 swxY w Y   t          | |¬	¦  «        \  }}t          ¦   «         }t          ||¦  «         t          ||||¬
¦  «        S t          d„ | D ¦   «         ¦  «        rDt          |||||||fi |¤Ž}t          ¦   «         }t          ||¦  «         t          | |||¬¦  «        S t!          d¦  «        ‚)Nc              3   óZ   K  — | ]&}t          |t          t          t          f¦  «        V — Œ'd S ©N©Ú
isinstancer   r   r   ©Ú.0Úexps     r!   ú	<genexpr>z_assemble.<locals>.<genexpr>ð   s4   è è € ÐdÐdÐQT•Z ¥mµX½{Ð%KÑLÔLÐdÐdÐdÐdÐdÐdr#   ÚignoreÚqiskit©ÚcategoryÚmoduleÚ
pulse_qobjc              3   ó@   K  — | ]}t          |t          ¦  «        V — Œd S rD   )rF   r   rG   s     r!   rJ   z_assemble.<locals>.<genexpr>  s,   è è € Ð
BÐ
B¨s�:�c�>Ñ*Ô*Ð
BÐ
BÐ
BÐ
BÐ
BÐ
Br#   zD.+\.basic_provider\.basic_simulator\.BasicSimulator\.configuration.+)rN   ÚmessagerO   )Úcircuitsr=   )rS   r*   r+   r=   c              3   óZ   K  — | ]&}t          |t          t          t          f¦  «        V — Œ'd S rD   rE   rG   s     r!   rJ   z_assemble.<locals>.<genexpr>&  s3   è è € Ð\Ð\È�Z˜�m­Xµ{ÐCÑDÔDÐ\Ð\Ð\Ð\Ð\Ð\r#   )Ú	schedulesr*   r+   r=   zFbad input to assemble() function; must be either circuits or schedules)r   rF   ÚlistÚanyÚwarningsÚcatch_warningsÚfilterwarningsÚDeprecationWarningÚ_parse_common_argsÚallÚ_parse_circuit_argsÚ_expand_parametersr"   r   Ú_parse_pulse_argsr   r   )r(   r)   r*   r+   r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   r9   r:   r;   r<   r=   r   rP   Úrun_config_common_dictÚbound_experimentsr   s                              r!   r@   r@   Ê   sö  € õH ‘”€JÝ!+¨K½Ñ!>Ô!>ÐQ�+�+À[ÀM€KÝÐdÐdÐXcÐdÑdÔdÑdÔd€JÝ	Ô	 Ñ	"Ô	"ð 
ð 
åÔ Õ3EÈhÐWÑWÔWÐWÝ7IØØØØØØØØØØØØØð8
ð 8
ð "ð8
ð ð8
ð 8
Ñ4ˆ�Ð4ð
ð 
ð 
ñ 
ô 
ð 
ð 
ð 
ð 
ð 
ð 
øøøð 
ð 
ð 
ð 
õ, Ð
BÐ
B°kÐ
BÑ
BÔ
BÑBÔBð 2dÝÔ$Ñ&Ô&ð 	ð 	åÔ#ØÝ+Ø_Øð	ñ ô ð õ -ØØØØØ!ðð ð )ðð ˆJð	ð 	ð 	ñ 	ô 	ð 	ð 	ð 	ð 	ð 	ð 	øøøð 	ð 	ð 	ð 	õ$ );Ø ¨Zð)
ñ )
ô )
Ñ%Ð˜:õ ‘6”6ˆÝ˜: xÑ0Ô0Ð0Ý!Ø&ØØ#Ø!ð	
ñ 
ô 
ð 	
õ 
Ð\Ð\ÐP[Ð\Ñ\Ô\Ñ	\Ô	\ð dÝ&ØØØØØØØð	
ð 	
ð %ð	
ð 	
ˆ
õ ‘6”6ˆÝ˜: xÑ0Ô0Ð0Ý!Ø!¨7ÀÐXbð
ñ 
ô 
ð 	
õ
 ÐbÑcÔcÐcs$   Á<BÂB!Â$B!Ã/DÄDÄDc                 ón  — d}d}d}| r€|                       ¦   «         }|j        }|r|j        st          d|j        › �¦  «        ‚|dup|	dup|
dup|dup|du}|s	|j        r(|r&	 |                      ¦   «         }n# t          $ r Y nw xY w|pt          t          j
        ¦   «         ¦  «        }|pi }t          |t          ¦  «        r|                     ¦   «         }t          |dd¦  «        }t          |dd¦  «        }||dœ|¥}t          di d„ |                     ¦   «         D ¦   «         ¤Ž}t          |dd¦  «        }|€|rt!          d|¦  «        }nQd}nNt          |t"          t$          j        f¦  «        st          d	¦  «        ‚|r||k     rt          d
|› d|› d�¦  «        ‚t          |dd¦  «        }|r4t          |dd¦  «        }t          |dd¦  «        }t)          |||¦  «        }n|�d}t+          j        dt.          ¦  «         |pt          |dd¦  «        }|	pt          |dd¦  «        }	|
pt          |dd¦  «        }
|pt          |dd¦  «        }t1          ||
d¦  «         t1          |	|d¦  «         |pg }t          |t2          t4          f¦  «        r|g}d„ |D ¦   «         }|||||||	|
|||dœ|¥}|||fS )aü  Resolve the various types of args allowed to the assemble() function through
    duck typing, overriding args, etc. Refer to the assemble() docstring for details on
    what types of inputs are allowed.

    Here the args are resolved by converting them to standard instances, and prioritizing
    them in case a run option is passed through multiple args (explicitly setting an arg
    has more priority than the arg set by backend)

    Returns:
        RunConfig: a run config, which is a standardized object that configures the qobj
            and determines the runtime environment.

    Raises:
        QiskitError:
            - If the memory arg is True and the backend does not support memory.
            - If ``shots`` exceeds ``max_shots`` for the configured backend.
            - If ``shots`` are not int type.
            - If any of qubit or meas lo's, or associated ranges do not have length equal to
            ``n_qubits``.
            - If qubit or meas lo's do not fit into prescribed ranges.
    Nz memory not supported by backend Úbackend_nameÚbackend_version)rd   re   c                 ó   — i | ]
\  }}|®||“ŒS rD   © ©rH   ÚkÚvs      r!   ú
<dictcomp>z&_parse_common_args.<locals>.<dictcomp>‹  s   € ÐVÐVÐV©¨¨AÈÈ  1ÈÈÈr#   Ú	max_shotsi   z(Argument 'shots' should be of type 'int'zNumber of shots specified: z, exceeds max_shots property of the backend: ú.Údynamic_reprate_enabledFÚdefault_rep_delayÚrep_delay_rangezFDynamic rep rates not supported on this backend, cannot use rep_delay.Úqubit_freq_estÚmeas_freq_estr1   r2   ÚqubitÚmeasc                 óZ   — g | ](}t          |t          ¦  «        r|nt          |¦  «        ‘Œ)S rg   )rF   r   )rH   Ú	lo_configs     r!   ú
<listcomp>z&_parse_common_args.<locals>.<listcomp>¸  sC   € ð ð ð àõ   	­8Ñ4Ô4ÐMˆ	ˆ	½(À9Ñ:MÔ:Mðð ð r#   )r,   r-   r.   r<   r9   r/   r0   r1   r2   r3   Ún_qubitsrg   )Úconfigurationrx   r-   r   rd   Ú
open_pulseÚdefaultsÚAttributeErrorÚstrÚuuidÚuuid4rF   r   Úto_dictÚgetattrÚitemsÚminÚintÚnpÚintegerÚ_parse_rep_delayrX   ÚwarnÚRuntimeWarningÚ_check_lo_freqsr   Údict)r)   r*   r+   r,   r-   r.   r<   r9   r/   r0   r1   r2   r3   rP   r=   Úbackend_configÚbackend_defaultsrx   Úpulse_param_setrd   re   rl   rn   ro   rp   Úrun_config_dicts                             r!   r\   r\   =  sï  € ðN €NØÐØ€HØð Ø ×.Ò.Ñ0Ô0ˆØ!Ô*ˆàð 	`˜.Ô/ð 	`ÝÐ^ÀÔA\Ð^Ð^Ñ_Ô_Ð_ð  Ð%ð (Ø 4Ð'ð(à TÐ)ð(ð  DÐ(ð(ð  4Ð'ð 	ð ð 	˜.Ô3ð 	¸ð 	ðØ#*×#3Ò#3Ñ#5Ô#5Ð Ð øÝ!ð ð ð Ø�ðøøøð Ð*��TœZ™\œ\Ñ*Ô*€Gð Ð# €KÝ�+�zÑ*Ô*ð ,Ø!×)Ò)Ñ+Ô+ˆÝ˜>¨>¸4Ñ@Ô@€LÝ˜nÐ.?ÀÑFÔF€Oà$Ø*ðð ð ð€Kõ
 ÐWÐWÐVÐV°×1BÒ1BÑ1DÔ1DÐVÑVÔVÐWÐW€Kå˜¨°TÑ:Ô:€IØ€}Øð 	Ý˜˜iÑ(Ô(ˆEˆEàˆEˆEÝ˜¥¥R¤ZÐ0Ñ1Ô1ð 
ÝÐDÑEÔEÐEØ	ð 
�y 5Ò(Ð(Ýð%¨)ð %ð %Ø!ð%ð %ð %ñ
ô 
ð 	
õ
 & nÐ6OÐQVÑWÔWÐØð 
Ý# NÐ4GÈÑNÔNÐÝ! .Ð2CÀTÑJÔJˆÝ$ YÐ0AÀ?ÑSÔSˆ	ˆ	àÐ ØˆIÝŒMØXÝñô ð ð
 "ÐV¥WÐ-=Ð?OÐQUÑ%VÔ%V€MØÐS¥7Ð+;¸_ÈdÑ#SÔ#S€Là#ÐV¥w¨~Ð?OÐQUÑ'VÔ'V€NØ!ÐS¥W¨^¸_ÈdÑ%SÔ%S€Mõ �M >°7Ñ;Ô;Ð;Ý�L -°Ñ8Ô8Ð8ð  Ð% 2€LÝ�,¥­4Ð 0Ñ1Ô1ð &Ø$�~ˆðð à%ðñ ô €Lð ØØ(Ø"ØØ&Ø$Ø(Ø&Ø$Øðð ð ð€Oð �K Ð0Ð0s   Á$A9 Á9
BÂBÚlo_freqÚlo_rangeÚlo_typec                 ó�  — | r½|r½t          | ¦  «        t          |¦  «        k    rŸt          | ¦  «        D ]‘\  }}||         }t          |t          ¦  «        rt          |¦  «        dk    st	          d|› d�¦  «        ‚||d         k     s||d         k    r+t	          d|› d|› d|› d	|d         › d
|d         › d�¦  «        ‚ŒŒdS dS dS dS )a÷  Check that LO frequencies are within the perscribed LO range.

    NOTE: Only checks if frequency/range lists have equal length. And does not check that the lists
    have length ``n_qubits``. This is because some backends, like simulator backends, do not
    require these constraints. For real hardware, these parameters will be validated on the backend.

    Args:
        lo_freq: List of LO frequencies.
        lo_range: Nested list of LO frequency ranges. Inner list is of the form
            ``[lo_min, lo_max]``.
        lo_type: The type of LO value--"qubit" or "meas".

    Raises:
        QiskitError:
            - If each element of the LO range is not a 2d list.
            - If the LO frequency is not in the LO range for a given qubit.
    é   zEach element of z LO range must be a 2d list.r   é   zQubit ú z LO frequency is z. The range is [z, z].N)ÚlenÚ	enumeraterF   rV   r   )r�   r‘   r’   ÚiÚfreqÚ
freq_ranges         r!   rŠ   rŠ   Ð  s>  € ð, ð 	�8ð 	¥ G¡¤µ°H±´Ò =Ð =Ý  Ñ)Ô)ð 	ð 	‰GˆAˆtØ! !œˆJÝ˜z­4Ñ0Ô0ð \µS¸±_´_ÈÒ5IÐ5IÝ!Ð"Z°WÐ"ZÐ"ZÐ"ZÑ[Ô[Ð[Ø�j ”mÒ#Ð# t¨j¸¬mÒ';Ð';Ý!ðH˜Qð Hð H ð Hð H¸4ð Hð HØ%/°¤]ðHð HØ6@À´mðHð Hð Hñô ð ð (<ð	ð 	ð 	ð 	Ð =Ð =ð	ð 	r#   c           	      óL  — d}| rU|                       ¦   «         }|t          |dt          j        g¦  «        vr#t	          d|› d|j        › d|j        › d�¦  «        ‚|pt          |dd¦  «        }t          |dd	¦  «        }	|pt          |d
d¦  «        }|rK|	rt          j        dt          ¦  «         t          |t          ¦  «        r|d         }t          |dz  ¦  «        }|€t          |dg ¦  «        }||||||dœ|¥}
t          di d„ |
                     ¦   «         D ¦   «         ¤Ž}|S )aŸ  Build a pulse RunConfig replacing unset arguments with defaults derived from the `backend`.
    See `assemble` for more information on the required arguments.

    Returns:
        RunConfig: a run config, which is a standardized object that configures the qobj
            and determines the runtime environment.
    Raises:
        QiskitError: If the given meas_level is not allowed for the given `backend`.
    NÚmeas_levelszmeas_level = z not supported for backend z, only z is supportedr6   rn   FÚ	rep_timesz`Dynamic rep rates are supported on this backend. 'rep_delay' will be used instead of 'rep_time'.r   ç    €„.Ar;   )r4   r5   r6   r7   r8   r;   c                 ó   — i | ]
\  }}|®||“ŒS rD   rg   rh   s      r!   rk   z%_parse_pulse_args.<locals>.<dictcomp>+  ó   € ÐXÐXÐX¡t q¨!È!È-˜a È-È-È-r#   rg   )ry   r�   r   Ú
CLASSIFIEDr   rd   r�   rX   rˆ   r‰   rF   rV   r„   r	   r‚   )r)   r4   r5   r6   r7   r8   r;   r=   rŒ   rn   r�   s              r!   r`   r`   ò  s¤  € ð( €NØð Ø ×.Ò.Ñ0Ô0ˆà�W ^°]ÅYÔEYÐDZÑ[Ô[Ð[Ð[Ýða 
ð að aØ!Ô.ðað aØ7EÔ7Qðað að añô ð ð
 ÐD�7 >°:¸tÑDÔD€HÝ% nÐ6OÐQVÑWÔWÐàÐE�7 >°;ÀÑEÔE€HØð 	'Ø"ð 	ÝŒMð.åñô ð õ
 �h¥Ñ%Ô%ð 	#Ø ”{ˆHÝ�x #‘~Ñ&Ô&ˆØÐ Ý# NÐ4GÈÑLÔLÐð !Ø"ØØ,ØØ.ðð ð ð€Oõ ÐYÐYÐXÐX¨×/DÒ/DÑ/FÔ/FÐXÑXÔXÐYÐY€JàÐr#   c                 óœ  — | pg } d| i|¥}|€v|rnt          j        ¦   «         5  t          j        dt          d¬¦  «         t	          |                     ¦   «         dg ¦  «        |d<   ddd¦  «         n# 1 swxY w Y   ng |d<   n||d<   |r||d<   |t          j        k    r||d<   t          d
i d	„ | 	                    ¦   «         D ¦   «         ¤Ž}|S )a@  Build a circuit RunConfig replacing unset arguments with defaults derived from the `backend`.
    See `assemble` for more information on the required arguments.

    Returns:
        RunConfig: a run config, which is a standardized object that configures the qobj
            and determines the runtime environment.
    r:   NrK   rL   rM   r;   r4   r5   c                 ó   — i | ]
\  }}|®||“ŒS rD   rg   rh   s      r!   rk   z'_parse_circuit_args.<locals>.<dictcomp>O  r¡   r#   rg   )
rX   rY   rZ   r[   r�   ry   r   r¢   r	   r‚   )r:   r)   r4   r5   r;   r=   r�   s          r!   r^   r^   0  sL  € ð &Ð+¨€Oà(¨/ÐH¸ZÐH€OØÐ Øð 	6ÝÔ(Ñ*Ô*ð ð åÔ'¨Õ;MÐV^Ð_Ñ_Ô_Ð_Ý7>Ø×)Ò)Ñ+Ô+Ð-@À"ñ8ô 8�Ð 3Ñ4ðð ð ñ ô ð ð ð ð ð ð øøøð ð ð ð øð 46ˆOÐ/Ñ0Ð0à/@ˆÐ+Ñ,Øð 9Ø(2ˆ˜Ñ%à�Ô-Ò-Ð-Ø-8ˆO˜MÑ*åÐYÐYÐXÐX¨×/DÒ/DÑ/FÔ/FÐXÑXÔXÐYÐY€JàÐs   ¢AA1Á1A5Á8A5ro   rp   c                 óö   — | €|} | �r|�kt          |t          ¦  «        rVt          |¦  «        dk    rt          d|› d�¦  «        ‚|d         | cxk    r|d         k    sn t          d| › d|› �¦  «        ‚| d	z  } | S )
a†  Parse and set ``rep_delay`` parameter in runtime config.

    Args:
        rep_delay: Initial rep delay.
        default_rep_delay: Backend default rep delay.
        rep_delay_range: Backend list defining allowable range of rep delays.

    Raises:
        QiskitError: If rep_delay is not in the backend rep_delay_range.
    Returns:
        float: Modified rep delay after parsing.
    Nr”   zBackend rep_delay_range z! must be a list with two entries.r   r•   zSupplied rep delay z$ not in the supported backend range rŸ   )rF   rV   r—   r   )r9   ro   rp   s      r!   r‡   r‡   T  sÉ   € ð ÐØ%ˆ	àÐàÐ&­:°oÅtÑ+LÔ+LÐ&Ý�?Ñ#Ô# qÒ(Ð(Ý!Øa¨ÐaÐaÐañô ð ð # 1Ô%¨ÐHÐHÒHÐH°oÀaÔ6HÒHÐHÐHÐHÝ!ð7¨)ð 7ð 7Ø%4ð7ð 7ñô ð ð  ‘Oˆ	àÐr#   c                 óÊ  ‡‡— |j         Š‰rt          ‰¦  «        st          d„ | D ¦   «         ¦  «        r­d„ ‰D ¦   «         }d„ | D ¦   «         }d„ ||z   D ¦   «         Š|r8|r6t          ˆfd„|D ¦   «         ¦  «        st          ˆfd„|D ¦   «         ¦  «        r#t          d                     ||¦  «        ¦  «        ‚ˆfd„| D ¦   «         } t	          j        |¦  «        }g |_         | |fS )	a¤  Verifies that there is a single common set of parameters shared between
    all circuits and all parameter binds in the run_config. Returns an expanded
    list of circuits (if parameterized) with all parameters bound, and a copy of
    the run_config with parameter_binds cleared.

    If neither the circuits nor the run_config specify parameters, the two are
    returned unmodified.

    Raises:
        QiskitError: if run_config parameters are not compatible with circuit parameters

    Returns:
        Tuple(List[QuantumCircuit], RunConfig):
          - List of input circuits expanded and with parameters bound
          - RunConfig with parameter_binds removed
    c              3   ó$   K  — | ]}|j         V — Œd S rD   ©Ú
parameters©rH   Úcircuits     r!   rJ   z%_expand_parameters.<locals>.<genexpr>Š  s%   è è € Ð6bÐ6bÈg°wÔ7IÐ6bÐ6bÐ6bÐ6bÐ6bÐ6br#   c                 ót   — g | ]5}t          ¦   «                              |¦  «                             ¦   «         ‘Œ6S rg   )r   Ú_unroll_param_dictÚkeys)rH   Úbinds     r!   rw   z&_expand_parameters.<locals>.<listcomp>�  sE   € ð 
ð 
ð 
ØAE�NÑÔ×/Ò/°Ñ5Ô5×:Ò:Ñ<Ô<ð
ð 
ð 
r#   c                 ó   — g | ]	}|j         ‘Œ
S rg   r¨   rª   s     r!   rw   z&_expand_parameters.<locals>.<listcomp>‘  s   € Ð!MÐ!MÐ!M¸ 'Ô"4Ð!MÐ!MÐ!Mr#   c                 ó   — h | ]	}|D ]}|’ŒŒ
S rg   rg   )rH   Ú
param_listÚparams      r!   ú	<setcomp>z%_expand_parameters.<locals>.<setcomp>”  s?   € ð 
ð 
ð 
àØ#ð
ð 
ð ð ð
ð 
ð 
ð 
r#   c              3   ó$   •K  — | ]
}‰|k    V — Œd S rD   rg   )rH   Úbind_paramsÚunique_parameterss     €r!   rJ   z%_expand_parameters.<locals>.<genexpr>ž  s)   øè è € Ð[Ð[¸Ð$¨Ò3Ð[Ð[Ð[Ð[Ð[Ð[r#   c              3   ó$   •K  — | ]
}‰|k    V — Œd S rD   rg   )rH   r©   r·   s     €r!   rJ   z%_expand_parameters.<locals>.<genexpr>Ÿ  s)   øè è € Ð\Ð\°zÐ$¨
Ò2Ð\Ð\Ð\Ð\Ð\Ð\r#   zrMismatch between run_config.parameter_binds and all circuit parameters. Parameter binds: {} Circuit parameters: {}c                 óD   •— g | ]}‰D ]}|                      |¦  «        ‘ŒŒS rg   )Úassign_parameters)rH   r«   Úbindsr:   s      €r!   rw   z&_expand_parameters.<locals>.<listcomp>©  sI   ø€ ð 
ð 
ð 
Ø18ÐRað
ð 
ØINˆG×%Ò% eÑ,Ô,ð
ð 
ð 
ð 
r#   )r:   rW   r   ÚformatÚcopyÚdeepcopy)rS   r=   Úall_bind_parametersÚall_circuit_parametersr:   r·   s       @@r!   r_   r_   w  sy  øø€ ð" !Ô0€Oàð %(�3˜Ñ/Ô/ð %(µ3Ð6bÐ6bÐYaÐ6bÑ6bÔ6bÑ3bÔ3bð %(ð
ð 
ØIXð
ñ 
ô 
Ðð "NÐ!MÀHÐ!MÑ!MÔ!MÐð
ð 
à1Ð4JÑJð
ñ 
ô 
Ðð $ð	à)ð	õ Ð[Ð[Ð[Ð[ÐGZÐ[Ñ[Ô[Ñ[Ô[ð	õ Ð\Ð\Ð\Ð\ÐE[Ð\Ñ\Ô\Ñ\Ô\ð		õ ð/÷ ’&Ð,Ð.DÑEÔEñô ð ð
ð 
ð 
ð 
Ø<Dð
ñ 
ô 
ˆõ
 ”] :Ñ.Ô.ˆ
Ø%'ˆ
Ô"à�ZÐÐr#   )F)=Ú__doc__r½   Úloggingr~   rX   r   Útypingr   r   r   r   Únumpyr…   Úqiskit.assemblerr   Úqiskit.assembler.run_configr	   Úqiskit.circuitr
   r   r   Úqiskit.exceptionsr   Úqiskit.providers.backendr   Úqiskit.pulser   r   r   r   Úqiskit.pulse.channelsr   Úqiskit.qobjr   r   r   Úqiskit.qobj.utilsr   r   Úqiskit.utilsr   Ú"qiskit.assembler.assemble_circuitsr   Ú	getLoggerÚ__name__r   r"   r¢   ÚAVERAGEr}   r„   ÚboolÚfloatrA   r@   r\   rŠ   r`   r^   r‡   r_   rg   r#   r!   ú<module>rÕ      s�  ðð FÐ EØ €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ð .à Ð Ð Ð à /Ð /Ð /Ð /Ð /Ð /Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1Ø ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ð ;Ø )Ð )Ð )Ð )Ð )Ð )Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,Ø GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GÐ GØ .Ð .Ð .Ð .Ð .Ð .Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø AÐ AÐ AÐ AÐ AÐ Aà	ˆÔ	˜8Ñ	$Ô	$€ðð ð ð €Ø
Ø)ð,ðñ ô ð" "&Ø!Ø59ØØ"Ø$(Ø+/Ø*.Ø,0Ø+/ð 	Ø(1Ô(<Ø.<Ô.DØ,0ØØ"Ø!%Ø>BØ-1ØðCIð IØØØˆ^ÔØØˆXŒØØˆ]Ôð	ôðIð �gÔðIð �cŒ]ðIð ˜% 
¨DÐ 0Ô1Ô2ðIð �CŒ=ðIð �TŒNðIð ˜S”MðIð ˜D œKÔ(ðIð  ˜4 œ;Ô'ð!Ið" ˜T %œ[Ô)ð#Ið$ ˜D œKÔ(ð%Ið& ØØ��t˜L¨%Ð/Ô0°(Ð:Ô;Ô<Ø�$�| UÐ*Ô+¨XÐ5Ô6ð8ô	
ôð'Ið2 �c˜9�nÔ%ð3Ið4 �s˜NÐ*Ô+ð5Ið6 �t˜D œKÔ(Ô)ð7Ið8 ð9Ið: �sŒmð;Ið< ˜Œð=Ið> ˜d 4¨	°5Ð(8Ô#9Ô:Ô;ð?Ið@    S¤	Ô*ðAIðB ðCIðD ðEIðF ˆ8�YÐÔðGIð Ið Iñô ðIð~ "&Ø!Ø59ØØ"Ø$(Ø+/Ø*.Ø,0Ø+/ð 	Ø(1Ô(<Ø.<Ô.DØ,0ØØ"Ø!%Ø>BØ-1ØðCodð odØØØˆ^ÔØØˆXŒØØˆ]Ôð	ôðodð �gÔðodð �cŒ]ðodð ˜% 
¨DÐ 0Ô1Ô2ðodð �CŒ=ðodð �TŒNðodð ˜S”Mðodð ˜D œKÔ(ðodð  ˜4 œ;Ô'ð!odð" ˜T %œ[Ô)ð#odð$ ˜D œKÔ(ð%odð& ØØ��t˜L¨%Ð/Ô0°(Ð:Ô;Ô<Ø�$�| UÐ*Ô+¨XÐ5Ô6ð8ô	
ôð'odð2 �c˜9�nÔ%ð3odð4 �s˜NÐ*Ô+ð5odð6 �t˜D œKÔ(Ô)ð7odð8 ð9odð: �sŒmð;odð< ˜Œð=odð> ˜d 4¨	°5Ð(8Ô#9Ô:Ô;ð?odð@    S¤	Ô*ðAodðB ðCodðD ðEodðF ˆ8�YÐÔðGodð odð odð odðB ðP1ð P1ð P1ð P1ðfØ�4˜”; Ð$Ô%ðà�D˜”K Ð%Ô&ðð ðð ð ð ðD;ð ;ð ;ð|!ð !ð !ðH Øð Ø).ð ØAEÀeÄð à
ð ð  ð  ð  ðF: ð : ð : ð : ð : r#   