§
    ¹³ÙgPc  ã                   óî   — d Z ddlmZ ddlmZ ddlZddlmZmZ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  G d„ d¦  «        Z G d„ dee¦  «        Z G d„ d¦  «        Z G d„ dee¦  «        ZdS )z)Backend abstract interface for providers.é    )ÚABC)ÚabstractmethodN)ÚListÚUnionÚIterableÚTuple)ÚProvider)ÚBackendStatus)ÚInstruction)Údeprecate_func)Údeprecate_pulse_dependencyc                   ó   — e Zd ZdZdZdS )ÚBackenda2  Base common type for all versioned Backend abstract classes.

    Note this class should not be inherited from directly, it is intended
    to be used for type checking. When implementing a provider you should use
    the versioned abstract classes as the parent class and not this class
    directly.
    r   N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Úversion© ó    úN/granary/edev/quantum/lib/python3.11/site-packages/qiskit/providers/backend.pyr   r      s   € € € € € ðð ð €G€G€Gr   r   c                   óÈ   — e Zd ZdZdZ eddd¬¦  «        dd„¦   «         Zeed	„ ¦   «         ¦   «         Z	d
„ Z
d„ Zd„ Zd„ Zd„ Zd„ Zd„ Zd„ Zed„ ¦   «         Zed„ ¦   «         ZdS )Ú	BackendV1aº  Abstract class for Backends

    This abstract class is to be used for Backend objects.
    There are several classes of information contained in a Backend.
    The first are the attributes of the class itself. These should be used to
    define the immutable characteristics of the backend. The ``options``
    attribute of the backend is used to contain the dynamic user configurable
    options of the backend. It should be used more for runtime options
    that configure how the backend is used. For example, something like a
    ``shots`` field for a backend that runs experiments which would contain an
    int for how many shots to execute. The ``properties`` attribute is
    optionally defined :class:`~qiskit.providers.models.BackendProperties`
    object and is used to return measured properties, or properties
    of a backend that may change over time. The simplest example of this would
    be a version string, which will change as a backend is updated, but also
    could be something like noise parameters for backends that run experiments.

    This first version of the Backend abstract class is written to be mostly
    backwards compatible with the legacy providers interface. This includes reusing
    the model objects :class:`~qiskit.providers.models.BackendProperties` and
    :class:`~qiskit.providers.models.BackendConfiguration`. This was done to
    ease the transition for users and provider maintainers to the new versioned providers.
    Expect, future versions of this abstract class to change the data model and
    interface.

    Subclasses of this should override the public method :meth:`run` and the internal
    :meth:`_default_options`:

    .. automethod:: _default_options
    é   z1.2zin the 2.0 releasea  If the backend only encapsulates a hardware description, consider constructing a Target directly. If it is part of a provider that gives access to execution, consider using Primitives instead. Alternatively, consider moving to BackendV2 (see https://qisk.it/backendV1-to-V2).)ÚsinceÚremoval_timelineÚadditional_msgNc                 óÌ   — || _         |                      ¦   «         | _        || _        |r:|D ]#}|| j        j        vrt          d|› d�¦  «        ‚Œ$ | j        j        di |¤Ž dS dS )a	  Initialize a backend class

        Args:
            configuration (BackendConfiguration): A backend configuration
                object for the backend object.
            provider (qiskit.providers.Provider): Optionally, the provider
                object that this Backend comes from.
            fields: kwargs for the values to use to override the default
                options.
        Raises:
            AttributeError: if input field not a valid options

        ..
            This next bit is necessary just because autosummary generally won't summarise private
            methods; changing that behavior would have annoying knock-on effects through all the
            rest of the documentation, so instead we just hard-code the automethod directive.
        úOptions field ú is not valid for this backendNr   )Ú_configurationÚ_default_optionsÚ_optionsÚ	_providerÚdataÚAttributeErrorÚupdate_config)ÚselfÚconfigurationÚproviderÚfieldsÚfields        r   Ú__init__zBackendV1.__init__L   s™   € ð4 ,ˆÔØ×-Ò-Ñ/Ô/ˆŒØ!ˆŒØð 	2Øð að a�Ø ¤Ô 2Ð2Ð2Ý(Ð)_¸%Ð)_Ð)_Ð)_Ñ`Ô`Ð`ð 3à'ˆDŒMÔ'Ð1Ð1¨&Ð1Ð1Ð1Ð1Ð1ð		2ð 	2r   c                 ó   — dS ©az  Return the default options

        This method will return a :class:`qiskit.providers.Options`
        subclass object that will be used for the default options. These
        should be the default parameters to use for the options of the
        backend.

        Returns:
            qiskit.providers.Options: A options object with
                default values set
        Nr   ©Úclss    r   r"   zBackendV1._default_optionso   s   € € € r   c                 ó„   — |D ]*}t          | j        |¦  «        st          d|› d�¦  «        ‚Œ+ | j        j        di |¤Ž dS ©a¨  Set the options fields for the backend

        This method is used to update the options of a backend. If
        you need to change any of the options prior to running just
        pass in the kwarg with the new value for the options.

        Args:
            fields: The fields to update the options

        Raises:
            AttributeError: If the field passed in is not part of the
                options
        r   r    Nr   ©Úhasattrr#   r&   Úupdate_options©r(   r+   r,   s      r   Úset_optionszBackendV1.set_options~   ók   € ð ð 	]ð 	]ˆEÝ˜4œ=¨%Ñ0Ô0ð ]Ý$Ð%[°eÐ%[Ð%[Ð%[Ñ\Ô\Ð\ð]à$ˆŒÔ$Ð.Ð. vÐ.Ð.Ð.Ð.Ð.r   c                 ó   — | j         S )z�Return the backend configuration.

        Returns:
            BackendConfiguration: the configuration for the backend.
        )r!   ©r(   s    r   r)   zBackendV1.configuration‘   s   € ð Ô"Ð"r   c                 ó   — dS )zÈReturn the backend properties.

        Returns:
            BackendProperties: the configuration for the backend. If the backend
            does not support properties, it returns ``None``.
        Nr   r;   s    r   Ú
propertieszBackendV1.properties™   s	   € ð ˆtr   c                 ó   — | j         S ©zwReturn the backend Provider.

        Returns:
            Provider: the Provider responsible for the backend.
        ©r$   r;   s    r   r*   zBackendV1.provider¢   s   € ð Œ~Ðr   c                 óN   — t          |                      ¦   «         dddd¬¦  «        S )zkReturn the backend status.

        Returns:
            BackendStatus: the status of the backend.
        Ú1Tr   Ú )Úbackend_nameÚbackend_versionÚoperationalÚpending_jobsÚ
status_msg)r
   Únamer;   s    r   ÚstatuszBackendV1.statusª   s2   € õ ØŸš™œØØØØð
ñ 
ô 
ð 	
r   c                 ó   — | j         j        S )z]Return the backend name.

        Returns:
            str: the name of the backend.
        )r!   rD   r;   s    r   rI   zBackendV1.name¸   s   € ð Ô"Ô/Ð/r   c                 ó*   — |                       ¦   «         S ©N)rI   r;   s    r   Ú__str__zBackendV1.__str__À   s   € Ø�yŠy‰{Œ{Ðr   c                 óL   — d| j         j        › d|                      ¦   «         › d�S )aN  Official string representation of a Backend.

        Note that, by Qiskit convention, it is consciously *not* a fully valid
        Python expression. Subclasses should provide 'a string of the form
        <...some useful description...>'. [0]

        [0] https://docs.python.org/3/reference/datamodel.html#object.__repr__
        ú<z('z')>)Ú	__class__r   rI   r;   s    r   Ú__repr__zBackendV1.__repr__Ã   s*   € ð ?�4”>Ô*Ð>Ð>¨d¯iªi©k¬kÐ>Ð>Ð>Ð>r   c                 ó   — | j         S ©zÌReturn the options for the backend

        The options of a backend are the dynamic parameters defining
        how the backend is used. These are used to control the :meth:`run`
        method.
        ©r#   r;   s    r   ÚoptionszBackendV1.optionsÎ   ó   € ð Œ}Ðr   c                 ó   — dS )a?  Run on the backend.

        This method returns a :class:`~qiskit.providers.Job` object
        that runs circuits. Depending on the backend this may be either an async
        or sync call. It is at the discretion of the provider to decide whether
        running should block until the execution is finished or not: the Job
        class can handle either situation.

        Args:
            run_input (QuantumCircuit or Schedule or list): An individual or a
                list of :class:`~qiskit.circuit.QuantumCircuit` or
                :class:`~qiskit.pulse.Schedule` objects to run on the backend.
                For legacy providers migrating to the new versioned providers,
                provider interface a :class:`~qiskit.qobj.QasmQobj` or
                :class:`~qiskit.qobj.PulseQobj` objects should probably be
                supported too (but deprecated) for backwards compatibility. Be
                sure to update the docstrings of subclasses implementing this
                method to document that. New provider implementations should not
                do this though as :mod:`qiskit.qobj` will be deprecated and
                removed along with the legacy providers interface.
            options: Any kwarg options to pass to the backend for running the
                config. If a key is also present in the options
                attribute/object then the expectation is that the value
                specified will be used instead of what's set in the options
                object.
        Returns:
            Job: The job object for the run
        Nr   ©r(   Ú	run_inputrV   s      r   ÚrunzBackendV1.runØ   s	   € ð< 	ˆr   rM   )r   r   r   r   r   r   r-   Úclassmethodr   r"   r8   r)   r=   r*   rJ   rI   rN   rR   ÚpropertyrV   r[   r   r   r   r   r   *   s6  € € € € € ðð ð> €Gà€^ØØ-ð]ðñ ô ð2ð 2ð 2ñô ð2ð6 Øðð ñ „^ñ „[ðð/ð /ð /ð&#ð #ð #ðð ð ðð ð ð
ð 
ð 
ð0ð 0ð 0ðð ð ð	?ð 	?ð 	?ð ðð ñ „Xðð ðð ñ „^ðð ð r   r   c                   ó$   — e Zd ZdZdZdd„Zd„ ZdS )ÚQubitPropertiesaÃ  A representation of the properties of a qubit on a backend.

    This class provides the optional properties that a backend can provide for
    a qubit. These represent the set of qubit properties that Qiskit can
    currently work with if present. However if your backend provides additional
    properties of qubits you should subclass this to add additional custom
    attributes for those custom/additional properties provided by the backend.
    ©Út1Út2Ú	frequencyNc                 ó0   — || _         || _        || _        dS )záCreate a new :class:`QubitProperties` object.

        Args:
            t1: The T1 time for a qubit in seconds
            t2: The T2 time for a qubit in seconds
            frequency: The frequency of a qubit in Hz
        Nr`   )r(   ra   rb   rc   s       r   r-   zQubitProperties.__init__  s   € ð ˆŒØˆŒØ"ˆŒˆˆr   c                 ó8   — d| j         › d| j        › d| j        › d�S )NzQubitProperties(t1=z, t2=z, frequency=ú)r`   r;   s    r   rR   zQubitProperties.__repr__  s)   € Ø] T¤WÐ]Ð]°4´7Ð]Ð]ÈDÌNÐ]Ð]Ð]Ð]r   )NNN)r   r   r   r   Ú	__slots__r-   rR   r   r   r   r_   r_   ù   sM   € € € € € ðð ð *€Ið
#ð 
#ð 
#ð 
#ð^ð ^ð ^ð ^ð ^r   r_   c                   ón  — e Zd ZdZdZ	 	 	 	 	 d&dedededej        def
d	„Ze	d
e
eeee         f                  fd„¦   «         Ze	d
e
e         fd„¦   «         Ze	d
e
e         fd„¦   «         Ze	ed„ ¦   «         ¦   «         Ze	d
efd„¦   «         Ze	d„ ¦   «         Ze	d„ ¦   «         Ze	ed„ ¦   «         ¦   «         Zeed„ ¦   «         ¦   «         Ze	d
eedf         fd„¦   «         Ze	d
efd„¦   «         Ze	d
e
e
e                  fd„¦   «         Ze	 ed¬¦  «        d„ ¦   «         ¦   «         Ze	d„ ¦   «         Z deee
e         f         d
ee!e
e!         f         fd„Z"edefd„¦   «         Z#edefd„¦   «         Z$edefd„¦   «         Z%ed e&e         fd!„¦   «         Z'd"„ Z(e	d#„ ¦   «         Z)e	d$„ ¦   «         Z*ed%„ ¦   «         Z+dS )'Ú	BackendV2a÷
  Abstract class for Backends

    This abstract class is to be used for all Backend objects created by a
    provider. This version differs from earlier abstract Backend classes in
    that the configuration attribute no longer exists. Instead, attributes
    exposing equivalent required immutable properties of the backend device
    are added. For example ``backend.configuration().n_qubits`` is accessible
    from ``backend.num_qubits`` now.

    The ``options`` attribute of the backend is used to contain the dynamic
    user configurable options of the backend. It should be used more for
    runtime options that configure how the backend is used. For example,
    something like a ``shots`` field for a backend that runs experiments which
    would contain an int for how many shots to execute.

    If migrating a provider from :class:`~qiskit.providers.BackendV1`
    one thing to keep in mind is for
    backwards compatibility you might need to add a configuration method that
    will build a :class:`~qiskit.providers.models.BackendConfiguration` object
    and :class:`~qiskit.providers.models.BackendProperties` from the attributes
    defined in this class for backwards compatibility.

    A backend object can optionally contain methods named
    ``get_translation_stage_plugin`` and ``get_scheduling_stage_plugin``. If these
    methods are present on a backend object and this object is used for
    :func:`~.transpile` or :func:`~.generate_preset_pass_manager` the
    transpilation process will default to using the output from those methods
    as the scheduling stage and the translation compilation stage. This
    enables a backend which has custom requirements for compilation to specify a
    stage plugin for these stages to enable custom transformation of
    the circuit to ensure it is runnable on the backend. These hooks are enabled
    by default and should only be used to enable extra compilation steps
    if they are **required** to ensure a circuit is executable on the backend or
    have the expected level of performance. These methods are passed no input
    arguments and are expected to return a ``str`` representing the method name
    which should be a stage plugin (see: :mod:`qiskit.transpiler.preset_passmanagers.plugin`
    for more details on plugins). The typical expected use case is for a backend
    provider to implement a stage plugin for ``translation`` or ``scheduling``
    that contains the custom compilation passes and then for the hook methods on
    the backend object to return the plugin name so that :func:`~.transpile` will
    use it by default when targetting the backend.

    Subclasses of this should override the public method :meth:`run` and the internal
    :meth:`_default_options`:

    .. automethod:: _default_options
    é   Nr*   rI   ÚdescriptionÚonline_daterE   c                 ó  — |                       ¦   «         | _        || _        |r8|D ]#}|| j        j        vrt	          d|› d�¦  «        ‚Œ$ | j        j        di |¤Ž || _        	 || _        	 || _        	 || _	        	 d| _
        dS )a$  Initialize a BackendV2 based backend

        Args:
            provider: An optional backwards reference to the
                :class:`~qiskit.providers.Provider` object that the backend
                is from
            name: An optional name for the backend
            description: An optional description of the backend
            online_date: An optional datetime the backend was brought online
            backend_version: An optional backend version string. This differs
                from the :attr:`~qiskit.providers.BackendV2.version` attribute
                as :attr:`~qiskit.providers.BackendV2.version` is for the
                abstract :attr:`~qiskit.providers.Backend` abstract interface
                version of the object while ``backend_version`` is for
                versioning the backend itself.
            fields: kwargs for the values to use to override the default
                options.

        Raises:
            AttributeError: If a field is specified that's outside the backend's
                options
        r   r    Nr   )r"   r#   r$   r%   r&   r'   rI   rk   rl   rE   Ú_coupling_map)r(   r*   rI   rk   rl   rE   r+   r,   s           r   r-   zBackendV2.__init__H  s¿   € ð@ ×-Ò-Ñ/Ô/ˆŒØ!ˆŒØð 	2Øð að a�Ø ¤Ô 2Ð2Ð2Ý(Ð)_¸%Ð)_Ð)_Ð)_Ñ`Ô`Ð`ð 3à'ˆDŒMÔ'Ð1Ð1¨&Ð1Ð1Ð1ØˆŒ	Ø"Ø&ˆÔØ2Ø&ˆÔØ0Ø.ˆÔð	ð "ˆÔÐÐr   Úreturnc                 ó   — | j         j        S )zRA list of Instruction tuples on the backend of the form ``(instruction, (qubits)``)ÚtargetÚinstructionsr;   s    r   rr   zBackendV2.instructions{  s   € ð Œ{Ô'Ð'r   c                 ó4   — t          | j        j        ¦  «        S )zSA list of :class:`~qiskit.circuit.Instruction` instances that the backend supports.)Úlistrq   Ú
operationsr;   s    r   ru   zBackendV2.operations€  s   € õ �D”KÔ*Ñ+Ô+Ð+r   c                 ó4   — t          | j        j        ¦  «        S )z6A list of instruction names that the backend supports.)rt   rq   Úoperation_namesr;   s    r   rw   zBackendV2.operation_names…  s   € õ �D”KÔ/Ñ0Ô0Ð0r   c                 ó   — dS )z\A :class:`qiskit.transpiler.Target` object for the backend.

        :rtype: Target
        Nr   r;   s    r   rq   zBackendV2.targetŠ  s	   € ð 	ˆr   c                 ó   — | j         j        S )z,Return the number of qubits the backend has.)rq   Ú
num_qubitsr;   s    r   rz   zBackendV2.num_qubits“  s   € ð Œ{Ô%Ð%r   c                 óZ   — | j         €| j                             ¦   «         | _         | j         S )z9Return the :class:`~qiskit.transpiler.CouplingMap` object)rn   rq   Úbuild_coupling_mapr;   s    r   Úcoupling_mapzBackendV2.coupling_map˜  s,   € ð ÔÐ%Ø!%¤×!?Ò!?Ñ!AÔ!AˆDÔØÔ!Ð!r   c                 ó4   — | j                              ¦   «         S )zCReturn the :class:`~qiskit.transpiler.InstructionDurations` object.)rq   Ú	durationsr;   s    r   Úinstruction_durationszBackendV2.instruction_durationsŸ  s   € ð Œ{×$Ò$Ñ&Ô&Ð&r   c                 ó   — dS )z™The maximum number of circuits (or Pulse schedules) that can be
        run in a single job.

        If there is no limit this will return None
        Nr   r;   s    r   Úmax_circuitszBackendV2.max_circuits¤  s	   € ð 	ˆr   c                 ó   — dS r/   r   r0   s    r   r"   zBackendV2._default_options®  s	   € ð 	ˆr   c                 ó   — | j         j        S )a*  Return the system time resolution of input signals

        This is required to be implemented if the backend supports Pulse
        scheduling.

        Returns:
            The input signal timestep in seconds. If the backend doesn't define ``dt``, ``None`` will
            be returned.
        )rq   Údtr;   s    r   r…   zBackendV2.dt¾  s   € ð Œ{Œ~Ðr   c                 ó   — t           ‚)a  Return the system time resolution of output signals

        Returns:
            The output signal timestep in seconds.

        Raises:
            NotImplementedError: if the backend doesn't support querying the
                output signal timestep
        ©ÚNotImplementedErrorr;   s    r   ÚdtmzBackendV2.dtmË  s
   € õ "Ð!r   c                 ó   — t           ‚)as  Return the grouping of measurements which are multiplexed

        This is required to be implemented if the backend supports Pulse
        scheduling.

        Returns:
            The grouping of measurements which are multiplexed

        Raises:
            NotImplementedError: if the backend doesn't support querying the
                measurement mapping
        r‡   r;   s    r   Úmeas_mapzBackendV2.meas_mapØ  ó
   € õ "Ð!r   T)Úis_propertyc                 ó   — | j         S )zwReturn the :class:`~qiskit.pulse.InstructionScheduleMap` for the
        instructions defined in this backend's target.)Ú_instruction_schedule_mapr;   s    r   Úinstruction_schedule_mapz"BackendV2.instruction_schedule_mapè  s   € ð
 Ô-Ð-r   c                 ó4   — | j                              ¦   «         S )zVAn alternative private path to be used internally to avoid pulse deprecation warnings.)rq   Ú_get_instruction_schedule_mapr;   s    r   r�   z#BackendV2._instruction_schedule_mapï  s   € ð Œ{×8Ò8Ñ:Ô:Ð:r   Úqubitc                 ó”   ‡ — ‰ j         j        €t          ‚t          |t          ¦  «        r‰ j         j        |         S ˆ fd„|D ¦   «         S )a_  Return QubitProperties for a given qubit.

        If there are no defined or the backend doesn't support querying these
        details this method does not need to be implemented.

        Args:
            qubit: The qubit to get the
                :class:`.QubitProperties` object for. This can
                be a single integer for 1 qubit or a list of qubits and a list
                of :class:`.QubitProperties` objects will be
                returned in the same order
        Returns:
            The :class:`~.QubitProperties` object for the
            specified qubit. If a list of qubits is provided a list will be
            returned. If properties are missing for a qubit this can be
            ``None``.

        Raises:
            NotImplementedError: if the backend doesn't support querying the
                qubit properties
        Nc                 ó4   •— g | ]}‰j         j        |         ‘ŒS r   )rq   Úqubit_properties)Ú.0Úqr(   s     €r   ú
<listcomp>z.BackendV2.qubit_properties.<locals>.<listcomp>  s#   ø€ Ð?Ð?Ð?°A�”Ô,¨QÔ/Ð?Ð?Ð?r   )rq   r–   rˆ   Ú
isinstanceÚint©r(   r“   s   ` r   r–   zBackendV2.qubit_propertiesô  sR   ø€ ð8 Œ;Ô'Ð/Ý%Ð%Ý�e�SÑ!Ô!ð 	7Ø”;Ô/°Ô6Ð6Ø?Ð?Ð?Ð?¸Ð?Ñ?Ô?Ð?r   c                 ó   — t           ‚)aZ  Return the drive channel for the given qubit.

        This is required to be implemented if the backend supports Pulse
        scheduling.

        Returns:
            DriveChannel: The Qubit drive channel

        Raises:
            NotImplementedError: if the backend doesn't support querying the
                measurement mapping
        r‡   rœ   s     r   Údrive_channelzBackendV2.drive_channel  rŒ   r   c                 ó   — t           ‚)as  Return the measure stimulus channel for the given qubit.

        This is required to be implemented if the backend supports Pulse
        scheduling.

        Returns:
            MeasureChannel: The Qubit measurement stimulus line

        Raises:
            NotImplementedError: if the backend doesn't support querying the
                measurement mapping
        r‡   rœ   s     r   Úmeasure_channelzBackendV2.measure_channel&  rŒ   r   c                 ó   — t           ‚)ar  Return the acquisition channel for the given qubit.

        This is required to be implemented if the backend supports Pulse
        scheduling.

        Returns:
            AcquireChannel: The Qubit measurement acquisition line.

        Raises:
            NotImplementedError: if the backend doesn't support querying the
                measurement mapping
        r‡   rœ   s     r   Úacquire_channelzBackendV2.acquire_channel6  rŒ   r   Úqubitsc                 ó   — t           ‚)am  Return the secondary drive channel for the given qubit

        This is typically utilized for controlling multiqubit interactions.
        This channel is derived from other channels.

        This is required to be implemented if the backend supports Pulse
        scheduling.

        Args:
            qubits: Tuple or list of qubits of the form
                ``(control_qubit, target_qubit)``.

        Returns:
            List[ControlChannel]: The multi qubit control line.

        Raises:
            NotImplementedError: if the backend doesn't support querying the
                measurement mapping
        r‡   )r(   r£   s     r   Úcontrol_channelzBackendV2.control_channelF  s
   € õ* "Ð!r   c                 ó„   — |D ]*}t          | j        |¦  «        st          d|› d�¦  «        ‚Œ+ | j        j        di |¤Ž dS r3   r4   r7   s      r   r8   zBackendV2.set_options]  r9   r   c                 ó   — | j         S rT   rU   r;   s    r   rV   zBackendV2.optionsp  rW   r   c                 ó   — | j         S r?   r@   r;   s    r   r*   zBackendV2.providerz  s   € ð Œ~Ðr   c                 ó   — dS )a  Run on the backend.

        This method returns a :class:`~qiskit.providers.Job` object
        that runs circuits. Depending on the backend this may be either an async
        or sync call. It is at the discretion of the provider to decide whether
        running should block until the execution is finished or not: the Job
        class can handle either situation.

        Args:
            run_input (QuantumCircuit or Schedule or ScheduleBlock or list): An
                individual or a list of :class:`.QuantumCircuit`,
                :class:`~qiskit.pulse.ScheduleBlock`, or :class:`~qiskit.pulse.Schedule` objects to
                run on the backend.
            options: Any kwarg options to pass to the backend for running the
                config. If a key is also present in the options
                attribute/object then the expectation is that the value
                specified will be used instead of what's set in the options
                object.

        Returns:
            Job: The job object for the run
        Nr   rY   s      r   r[   zBackendV2.runƒ  s	   € ð0 	ˆr   )NNNNN),r   r   r   r   r   r	   ÚstrÚdatetimer-   r]   r   r   r   r›   rr   ru   rw   r   rq   rz   r}   r€   r‚   r\   r"   r   Úfloatr…   r‰   r‹   r   r�   r�   r_   r–   rž   r    r¢   r   r¥   r8   rV   r*   r[   r   r   r   ri   ri     s  € € € € € ð.ð .ð` €Gð "ØØØ)-Ø#ð1"ð 1"àð1"ð ð1"ð ð	1"ð
 Ô&ð1"ð ð1"ð 1"ð 1"ð 1"ðf ð(˜d 5¨°e¸C´jÐ)@Ô#AÔBð (ð (ð (ñ „Xð(ð ð,˜D Ô-ð ,ð ,ð ,ñ „Xð,ð ð1  c¤ð 1ð 1ð 1ñ „Xð1ð Øðð ñ „^ñ „Xðð ð&˜Cð &ð &ð &ñ „Xð&ð ð"ð "ñ „Xð"ð ð'ð 'ñ „Xð'ð Øðð ñ „^ñ „Xðð Øðð ñ „^ñ „[ðð ð
�E˜% ˜+Ô&ð 
ð 
ð 
ñ „Xð
ð ð
"�Uð 
"ð 
"ð 
"ñ „Xð
"ð ð"˜$˜t Cœyœ/ð "ð "ð "ñ „Xð"ð ØÐ¨DÐ1Ñ1Ô1ð.ð .ñ 2Ô1ñ „Xð.ð
 ð;ð ;ñ „Xð;ð @Ø˜3  S¤	˜>Ô*ð @à	ˆ  _Ô 5Ð5Ô	6ð @ð  @ð  @ð  @ðD  ð" 3ð "ð "ð "ñ  Ôð"ð  ð" Sð "ð "ð "ñ  Ôð"ð  ð" Sð "ð "ð "ñ  Ôð"ð  ð" h¨s¤mð "ð "ð "ñ  Ôð"ð,/ð /ð /ð& ðð ñ „Xðð ðð ñ „Xðð ðð ñ „^ðð ð r   ri   )r   Úabcr   r   r«   Útypingr   r   r   r   Úqiskit.providers.providerr	   Ú%qiskit.providers.models.backendstatusr
   Úqiskit.circuit.gater   Úqiskit.utilsr   Úqiskit.utils.deprecate_pulser   r   r   r_   ri   r   r   r   ú<module>r´      s‡  ðð 0Ð /ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø €€€Ø /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /Ð /à .Ð .Ð .Ð .Ð .Ð .Ø ?Ð ?Ð ?Ð ?Ð ?Ð ?Ø +Ð +Ð +Ð +Ð +Ð +Ø 'Ð 'Ð 'Ð 'Ð 'Ð 'Ø CÐ CÐ CÐ CÐ CÐ Cð	ð 	ð 	ð 	ð 	ñ 	ô 	ð 	ðLð Lð Lð Lð L�˜ñ Lô Lð Lð^^ð ^ð ^ð ^ð ^ñ ^ô ^ð ^ð8Fð Fð Fð Fð F�˜ñ Fô Fð Fð Fð Fr   