Warning

The package qiskit-ibmq-provider is being deprecated and its repo is going to be archived soon. Please transition to the new packages. More information in https://ibm.biz/provider_migration_guide

Release Notes

0.20.0

Deprecation Notes

  • As of version 0.20.0, qiskit-ibmq-provider has been deprecated with its support ending and eventual archival being no sooner than 3 months from that date. The function provided by qiskit-ibmq-provider is not going away rather it has being split out to separate repositories. Please see https://github.com/Qiskit/qiskit-ibmq-provider#migration-guides.

Bug Fixes

  • In the upcoming terra release there will be a release candidate tagged prior to the final release. However changing the version string for the package is blocked on the qiskit-ibmq-provider right now because it is trying to parse the version and is assuming there will be no prelease suffix on the version string (see #8200 for the details). PR #1135 fixes this version parsing to use the regex from the pypa/packaging project which handles all the PEP440 package versioning include pre-release suffixes. This will enable terra to release an 0.21.0rc1 tag without breaking the qiskit-ibmq-provider.

  • PR #1129 updates least_busy() method to no longer support BaseBackend as a valid input or output type since it has been long deprecated in qiskit-terra and has recently been removed.

  • threading.currentThread and notifyAll were deprecated in Python 3.10 (October 2021) and will be removed in Python 3.12 (October 2023). PR #1133 replaces them with threading.current_thread, notify_all added in Python 2.6 (October 2008).

  • Calls to run a quantum circuit with dynamic=True now raise an error that asks the user to install the new qiskit-ibm-provider.

0.19.0

New Features

  • The qiskit-ibmq-provider package now supports IBM Quantum LiveData features. These features allow users to observe the real-time behavior of IBM Quantum backends while executing jobs. Specifically, the provider now includes a new tab in the backend Jupyter-related widget and supports the execution of jobs (via qiskit.providers.ibmq.IBMQBackend.run() method) with the live_data_enabled=True parameter in allowed IBM Quantum backends.

Upgrade Notes

  • Python 3.6 support has been dropped since it has reached end of life in Dec 2021.

  • qiskit.providers.ibmq.random, the random number service which was used to access the CQC randomness extractor is no longer supported and has been removed.

Deprecation Notes

Bug Fixes

  • Fixes #209 where the websocket connection kept timing out when streaming results for a runtime job, due to inactivity, when the job is in a pending state for a long time.

  • Fixed an issue with JSON encoding and decoding when using ParameterExpressions in conjunction with Qiskit Terra 0.19.1 and above. Previously, the Parameter instances reconstructed from the JSON output would have different unique identifiers, causing them to seem unequal to the input. They will now have the correct backing identities.

0.18.0

New Features

  • You can view the last updated date of a runtime program using update_date property.

  • You can now use the qiskit.providers.ibmq.runtime.IBMRuntimeService.update_program() method to update the metadata for a Qiskit Runtime program. Program metadata can be specified using the metadata parameter or individual parameters, such as name and description. If the same metadata field is specified in both places, the individual parameter takes precedence.

Upgrade Notes

  • Runtime programs will no longer have a version field.

  • qiskit.providers.ibmq.runtime.IBMRuntimeService.upload_program() now takes only two parameters, data, which is the program passed as a string or the path to the program file and the metadata, which is passed as a dictionary or path to the metadata JSON file. In metadata the backend_requirements, parameters, return_values and interim_results are now grouped under a specifications spec section. parameters, return_values and interim_results should now be specified as JSON Schema.

Bug Fixes

  • Fixes the issue wherein a runtime job result cannot be retrieved multiple times if the result contains a numpy array.

0.17.0

New Features

Upgrade Notes

Bug Fixes

0.16.0

New Features

  • A user can now set and retrieve preferences for qiskit.providers.ibmq.experiment.IBMExperimentService. Preferences are saved on disk in the $HOME/.qiskit/qiskitrc file. Currently the only preference option is auto_save, which tells applications that use this service, such as qiskit-experiments, whether you want changes to be automatically saved.

    Usage examples:

    provider.experiment.save_preferences(auto_save=True) # set and save preferences
    provider.experiment.preferences                      # return all saved preferences
    

Upgrade Notes

  • IBMExperimentService is updated to work with the new qiskit-experiments. As a result, the syntax of the experiment service is drastically changed. This change, however, takes the experiment service out of beta mode, and future changes will provide backward compatibility according to Qiskit deprecation policy.

0.15.0

New Features

  • An optional boolean parameter pending has been added to qiskit.providers.ibmq.runtime.IBMRuntimeService.jobs() and it allows filtering jobs by their status. If pending is not specified all jobs are returned. If pending is set to True, ‘QUEUED’ and ‘RUNNING’ jobs are returned. If pending is set to False, ‘DONE’, ‘ERROR’ and ‘CANCELLED’ jobs are returned.

  • Add support for the use_measure_esp flag in the qiskit.providers.ibmq.IBMQBackend.run() method. If True, the backend will use ESP readout for all measurements which are the terminal instruction on that qubit. If used and the backend does not support ESP readout, an error is raised.

Upgrade Notes

  • The open_pulse flag in backend configuration no longer indicates whether a backend supports pulse-level control. As a result, qiskit.providers.ibmq.IBMQBackend.configuration() may return a PulseBackendConfiguration instance even if its open_pulse flag is False.

  • Job share level is no longer supported due to low adoption and the corresponding interface will be removed in a future release. This means you should no longer pass share_level when creating a job or use qiskit.providers.ibmq.job.IBMQJob.share_level() method to get a job’s share level.

Deprecation Notes

  • The id instruction has been deprecated on IBM hardware backends. Instead, please use the delay instruction which implements variable-length delays, specified in units of dt. When running a circuit containing an id instruction, a warning will be raised on job submission and any id instructions in the job will be automatically replaced with their equivalent delay instruction.

0.14.0

New Features

  • A new backend configuration attribute input_allowed now tells you the types of input supported by the backend. Valid input types are job, which means circuit jobs, and runtime, which means Qiskit Runtime.

    You can also use input_allowed in backend filtering. For example:

    from qiskit import IBMQ
    
    provider = IBMQ.load_account()
    # Get a list of all backends that support runtime.
    runtime_backends = provider.backends(input_allowed='runtime')
    

Upgrade Notes

  • qiskit-ibmq-provider now requires a new package websocket-client. The package has been added to the requirements.txt file.

  • qiskit-ibmq-provider now uses a new package websocket-client as its websocket client, and packages websockets and nest-asyncio are no longer required. setup.py and requirements.txt have been updated accordingly.

Bug Fixes

  • Fixes the issue that uses shots=1 instead of the documented default when no shots is specified for run_circuits().

  • Fixes the issue wherein a QiskitBackendNotFoundError exception is raised when retrieving a runtime job that was submitted using a different provider than the one used for retrival.

  • Streaming runtime program interim results with proxies is now supported. You can specify the proxies to use when enabling the account as usual, for example:

    from qiskit import IBMQ
    
    proxies = {'urls': {'https://127.0.0.1:8085'}}
    provider = IBMQ.enable_account(API_TOKEN, proxies=proxies)
    

0.13.0

Prelude

This release introduces a new feature Qiskit Runtime Service. Qiskit Runtime is a new architecture offered by IBM Quantum that significantly reduces waiting time during computational iterations. You can execute your experiments near the quantum hardware, without the interactions of multiple layers of classical and quantum hardware slowing it down. Qiskit Runtime allows authorized users to upload their Qiskit quantum programs, which are Python code that takes certain inputs, performs quantum and maybe classical computation, and returns the processing results. The same or other authorized users can then invoke these quantum programs by simply passing in the required input parameters. Qiskit Runtime is currently in private beta for select account but will be released to the public in the near future.

New Features

  • qiskit.providers.ibmq.experiment.analysis_result.AnalysisResult now has an additional verified attribute which identifies if the quality has been verified by a human.

  • qiskit.providers.ibmq.experiment.Experiment now has an additional notes attribute which can be used to set notes on an experiment.

  • This release introduces a new feature Qiskit Runtime Service. Qiskit Runtime is a new architecture that significantly reduces waiting time during computational iterations. This new service allows authorized users to upload their Qiskit quantum programs, which are Python code that takes certain inputs, performs quantum and maybe classical computation, and returns the processing results. The same or other authorized users can then invoke these quantum programs by simply passing in the required input parameters.

    An example of using this new service:

    from qiskit import IBMQ
    
    provider = IBMQ.load_account()
    # Print all avaiable programs.
    provider.runtime.pprint_programs()
    
    # Prepare the inputs. See program documentation on input parameters.
    inputs = {...}
    options = {"backend_name": provider.backend.ibmq_montreal.name()}
    
    job = provider.runtime.run(program_id="circuit-runner",
                               options=options,
                               inputs=inputs)
    # Check job status.
    print(f"job status is {job.status()}")
    
    # Get job result.
    result = job.result()
    

Upgrade Notes

  • The deprecated Human Bad, Computer Bad, Computer Good and Human Good enum values have been removed from qiskit.providers.ibmq.experiment.constants.ResultQuality. They are replaced with Bad and Good values which should be used with the verified attribute on qiskit.providers.ibmq.experiment.analysis_result.AnalysisResult:

    Old Quality

    New Quality

    Verified

    Human Bad

    Bad

    True

    Computer Bad

    Bad

    False

    Computer Good

    Good

    False

    Human Good

    Good

    True

    Furthermore, the NO_INFORMATION enum has been renamed to UNKNOWN.

Bug Fixes

  • Fixes the issue wherein passing in a noise model when sending a job to an IBMQ simulator would raise a TypeError. Fixes #894

Other Notes

  • The qiskit.providers.ibmq.experiment.analysis_result.AnalysisResult fit attribute is now optional.

0.12.0

Prelude

qiskit.providers.ibmq.IBMQBackend.run() method now takes one or more QuantumCircuit or Schedule. Use of QasmQobj and PulseQobj is now deprecated. Runtime configuration options, such as the number of shots, can be set via either the run() method, or the qiskit.providers.ibmq.IBMQBackend.set_options() method. The former is used as a one-time setting for the job, and the latter for all jobs sent to the backend. If an option is set in both places, the value set in run() takes precedence.

IBM Quantum credentials are now loaded only from sections of the qiskitrc file that start with ‘ibmq’.

New Features

  • Python 3.9 support has been added in this release. You can now run Qiskit IBMQ provider using Python 3.9.

  • qiskit.providers.ibmq.IBMQBackend.run() method now takes one or more QuantumCircuit or Schedule. Runtime configuration options, such as the number of shots, can be set via either the run() method, or the qiskit.providers.ibmq.IBMQBackend.set_options() method. The former is used as a one-time setting for the job, and the latter for all jobs sent to the backend. If an option is set in both places, the value set in run() takes precedence. For example:

    from qiskit import IBMQ, transpile
    from qiskit.test.reference_circuits import ReferenceCircuits
    
    provider = IBMQ.load_account()
    backend = provider.get_backend('ibmq_vigo')
    circuits = transpile(ReferenceCircuits.bell(), backend=backend)
    default_shots = backend.options.shots  # Returns the backend default of 1024 shots.
    backend.set_options(shots=2048)        # All jobs will now have use 2048 shots.
    backend.run(circuits)                  # This runs with 2048 shots.
    backend.run(circuits, shots=8192)      # This runs with 8192 shots.
    backend.run(circuits)                  # This again runs with 2048 shots.
    
  • qiskit.providers.ibmq.experiment.Experiment now has three additional attributes, hub, group, and project, that identify the provider used to create the experiment.

  • qiskit.providers.ibmq.experiment.Experiment now has two additional attributes:

    • share_level: The level at which the experiment is shared which determines who can see it when listing experiments. This can be updated.

    • owner: The ID of the user that uploaded the experiment. This is set by the server and cannot be updated.

  • The method qiskit.providers.ibmq.experimentservice.ExperimentService.experiments() now accepts hub, group, and project as filtering keywords.

  • Methods qiskit.providers.ibmq.experiment.ExperimentService.experiments() and qiskit.providers.ibmq.experiment.ExperimentService.analysis_results() now support a limit parameter that allows you to limit the number of experiments and analysis results returned.

  • The method qiskit.providers.ibmq.experimentservice.ExperimentService.experiments() now accepts exclude_mine and mine_only as filtering keywords.

  • The method qiskit.providers.ibmq.experimentservice.ExperimentService.experiments() now accepts exclude_public and public_only as filtering keywords.

  • The least_busy() function now skips backends that are operational but paused, meaning they are accepting but not processing jobs.

  • You can now pickle an IBMQJob instance, as long as it doesn’t contain custom data that is not picklable (e.g. in Qobj header).

Upgrade Notes

  • A number of previously deprecated methods and features have been removed, including:

    • qiskit.providers.ibmq.job.IBMQJob.to_dict()

    • qiskit.providers.ibmq.job.IBMQJob.from_dict()

    • Qconfig.py support

    • Use of proxy URLs that do not include protocols

  • A new parameter, limit is now the first parameter for both qiskit.providers.ibmq.experiment.ExperimentService.experiments() and qiskit.providers.ibmq.experiment.ExperimentService.analysis_results() methods. This limit has a default value of 10, meaning by deafult only 10 experiments and analysis results will be returned.

  • IBM Quantum credentials are now loaded only from sections of the qiskitrc file that start with ‘ibmq’. This allows the qiskitrc file to be used for other functionality.

Deprecation Notes

  • The backends attribute of qiskit.providers.ibmq.AccountProvider has been renamed to backend (sigular). For backward compatibility, you can continue to use backends, but it is deprecated and will be removed in a future release. The qiskit.providers.ibmq.AccountProvider.backends() method remains unchanged. For example:

    backend = provider.backend.ibmq_vigo   # This is the new syntax.
    backend = provider.backends.ibmq_vigo  # This is deprecated.
    backends = provider.backends()         # This continues to work as before.
    
  • Setting of the IBMQJob client_version attribute has been deprecated. You can, however, continue to read the value of attribute.

Bug Fixes

  • Fixes the issue wherein a job could be left in the CREATING state if job submit fails half-way through.

  • Fixes the issue wherein using Jupyter backend widget would fail if the backend’s basis gates do not include the traditional u1, u2, and u3. Fixes #844

  • Fixes the infinite loop raised when passing an IBMQRandomService instance to a child process.

  • Fixes the issue wherein a TypeError is raised if the server returns an error code but the response data is not in the expected format.

0.10.0

New Features

  • CQC randomness extractors can now be invoked asynchronously, using methods run_async_ext1() and run_async_ext2(). Each of these methods returns a CQCExtractorJob instance that allows you to check on the job status (using status()) and wait for its result (using block_until_ready()). The qiskit.provider.ibmq.random.CQCExtractor.run() method remains synchronous.

  • You can now use the new IBMQ experiment service to query, retrieve, and download experiment related data. Interface to this service is located in the new qiskit.providers.ibmq.experiment package. Note that this feature is still in beta, and not all accounts have access to it. It is also subject to heavy modification in both functionality and API without backward compatibility.

  • Two Jupyter magic functions, the IQX dashboard and the backend widget, are updated to display backend reservations. If a backend has reservations scheduled in the next 24 hours, time to the next one and its duration are displayed (e.g. Reservation: in 6 hrs 30 min (60m)). If there is a reservation and the backend is active, the backend status is displayed as active [R].

Upgrade Notes

  • Starting from this release, the basis_gates returned by qiskit.providers.ibmq.IBMQBackend.configuration() may differ for each backend. You should update your program if it relies on the basis gates being ['id','u1','u2','u3','cx']. We recommend always using the configuration() method to find backend configuration values instead of hard coding them.

  • qiskit-ibmq-provider release 0.10 requires qiskit-terra release 0.15 or above. The package metadata has been updated to reflect the new dependency.

  • The deprecated support for running qiskit-ibmq-provider with Python 3.5 has been removed. To use qiskit-ibmq-provider >=0.11.0 you will now need at least Python 3.6. If you are using Python 3.5 the last version which will work is qiskit-ibmq-provider 0.10.x.

  • Prior to this release, websockets 7.0 was used for Python 3.6. With this release, websockets 8.0 or above is required for all Python versions. The package requirements have been updated to reflect this.