diff --git a/.github/workflows/deploy-docs.yml b/.github/workflows/deploy-docs.yml index f2e43257c..14e64ba62 100644 --- a/.github/workflows/deploy-docs.yml +++ b/.github/workflows/deploy-docs.yml @@ -49,6 +49,8 @@ jobs: QISKIT_DOCS_BUILD_TUTORIALS: 'always' run: | echo "earliest_version: 0.1.0" >> releasenotes/config.yaml + # disable a PySCF UserWarning w.r.t. a change in the B3LYP DFT functional + echo "B3LYP_WITH_VWN5 = True" >> ~/.pyscf_conf.py tools/ignore_untagged_notes.sh make html shell: bash diff --git a/docs/tutorials/01_electronic_structure.ipynb b/docs/tutorials/01_electronic_structure.ipynb index db84e1b39..efd02f4b3 100644 --- a/docs/tutorials/01_electronic_structure.ipynb +++ b/docs/tutorials/01_electronic_structure.ipynb @@ -606,7 +606,7 @@ } ], "source": [ - "import qiskit.tools.jupyter\n", + "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" diff --git a/docs/tutorials/02_vibrational_structure.ipynb b/docs/tutorials/02_vibrational_structure.ipynb index 3150b09c9..b0ce5bbe6 100644 --- a/docs/tutorials/02_vibrational_structure.ipynb +++ b/docs/tutorials/02_vibrational_structure.ipynb @@ -731,7 +731,7 @@ } ], "source": [ - "import qiskit.tools.jupyter\n", + "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" diff --git a/docs/tutorials/03_ground_state_solvers.ipynb b/docs/tutorials/03_ground_state_solvers.ipynb index b7576c158..628ee0fdb 100644 --- a/docs/tutorials/03_ground_state_solvers.ipynb +++ b/docs/tutorials/03_ground_state_solvers.ipynb @@ -373,7 +373,7 @@ } ], "source": [ - "import qiskit.tools.jupyter\n", + "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" diff --git a/docs/tutorials/04_excited_states_solvers.ipynb b/docs/tutorials/04_excited_states_solvers.ipynb index c2cb66851..70d61ad77 100644 --- a/docs/tutorials/04_excited_states_solvers.ipynb +++ b/docs/tutorials/04_excited_states_solvers.ipynb @@ -421,7 +421,7 @@ } ], "source": [ - "import qiskit.tools.jupyter\n", + "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" diff --git a/docs/tutorials/05_problem_transformers.ipynb b/docs/tutorials/05_problem_transformers.ipynb index 1be924431..b14743e51 100644 --- a/docs/tutorials/05_problem_transformers.ipynb +++ b/docs/tutorials/05_problem_transformers.ipynb @@ -496,7 +496,7 @@ } ], "source": [ - "import qiskit.tools.jupyter\n", + "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" diff --git a/docs/tutorials/06_qubit_mappers.ipynb b/docs/tutorials/06_qubit_mappers.ipynb index 0b52f2d2d..a28f282ad 100644 --- a/docs/tutorials/06_qubit_mappers.ipynb +++ b/docs/tutorials/06_qubit_mappers.ipynb @@ -432,7 +432,7 @@ } ], "source": [ - "import qiskit.tools.jupyter\n", + "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" diff --git a/docs/tutorials/07_leveraging_qiskit_runtime.ipynb b/docs/tutorials/07_leveraging_qiskit_runtime.ipynb deleted file mode 100644 index 1b85c125a..000000000 --- a/docs/tutorials/07_leveraging_qiskit_runtime.ipynb +++ /dev/null @@ -1,510 +0,0 @@ -{ - "cells": [ - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "# Leveraging Qiskit Runtime " - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - ".. warning::\n", - " The `VQEClient` discussed in this tutorial is **DEPRECATED** as of version 0.6 of Qiskit Nature and will be removed no sooner than 3 months after the release. Instead you should use the new primitives based VQE with the Qiskit IBM Runtime Estimator primitive. For more details on how to migrate check out this guide [here](https://qisk.it/algo_migration#vqe)." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Iterative algorithms, such as the Variational Quantum Eigensolver (VQE), traditionally send one batch of circuits (one \"job\") to be executed on the quantum device in each iteration. Sending a job involves certain overhead, mainly\n", - "\n", - "* the time to process the requests and send the data (API overhead, usually about 10s)\n", - "* the job queue time, that is how long you have to wait before it's your turn to run on the device (usually about 2min)\n", - "\n", - "If we send hundreds of jobs iteratively, this overhead quickly dominates the execution time of our algorithm.\n", - "Qiskit Runtime allows us to tackle these issues and significantly speed up (especially) iterative algorithms. With Qiskit Runtime, one job does not contain only a batch of circuits but the _entire_ algorithm. That means we only experience the API overhead and queue wait _once_ instead of in every iteration! You'll be able to either upload algorithm parameters and delegate all the complexity to the cloud, where your program is executed, or upload your personal algorithm directly.\n", - "\n", - "For the VQE, the integration of Qiskit Runtime in your existing code is a piece of cake. There is a (almost) drop-in replacement, called `VQEClient` for the `VQE` class.\n", - "\n", - "Let's see how you can leverage the runtime on a simple chemistry example: Finding the ground state energy of the lithium hydrate (LiH) molecule at a given bond distance." - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Problem specification: LiH molecule\n", - "\n", - "First, we specify the molecule whose ground state energy we seek. Here, we look at LiH with a bond distance of 2.5 Å." - ] - }, - { - "cell_type": "code", - "execution_count": 1, - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit_nature.units import DistanceUnit\n", - "from qiskit_nature.second_q.drivers import PySCFDriver\n", - "from qiskit_nature.second_q.mappers import ParityMapper\n", - "from qiskit_nature.second_q.properties import ParticleNumber\n", - "from qiskit_nature.second_q.transformers import ActiveSpaceTransformer" - ] - }, - { - "cell_type": "code", - "execution_count": 2, - "metadata": {}, - "outputs": [], - "source": [ - "bond_distance = 2.5 # in Angstrom\n", - "\n", - "# specify driver\n", - "driver = PySCFDriver(\n", - " atom=f\"Li 0 0 0; H 0 0 {bond_distance}\",\n", - " basis=\"sto3g\",\n", - " charge=0,\n", - " spin=0,\n", - " unit=DistanceUnit.ANGSTROM,\n", - ")\n", - "problem = driver.run()\n", - "\n", - "# specify active space transformation\n", - "active_space_trafo = ActiveSpaceTransformer(\n", - " num_electrons=problem.num_particles, num_spatial_orbitals=3\n", - ")\n", - "\n", - "# transform the electronic structure problem\n", - "problem = active_space_trafo.transform(problem)\n", - "\n", - "# construct the parity mapper with 2-qubit reduction\n", - "qubit_mapper = ParityMapper(num_particles=problem.num_particles)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Classical reference solution" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "As a reference solution we can solve this system classically with the `NumPyEigensolver`." - ] - }, - { - "cell_type": "code", - "execution_count": 3, - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit_algorithms import NumPyMinimumEigensolver\n", - "from qiskit_nature.second_q.algorithms.ground_state_solvers import GroundStateEigensolver\n", - "\n", - "np_solver = NumPyMinimumEigensolver()\n", - "np_groundstate_solver = GroundStateEigensolver(qubit_mapper, np_solver)\n", - "\n", - "np_result = np_groundstate_solver.solve(problem)" - ] - }, - { - "cell_type": "code", - "execution_count": 19, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "=== GROUND STATE ENERGY ===\n", - " \n", - "* Electronic ground state energy (Hartree): -8.408630641972\n", - " - computed part: -8.408630641972\n", - " - ActiveSpaceTransformer extracted energy part: 0.0\n", - "~ Nuclear repulsion energy (Hartree): 0.635012653104\n", - "> Total ground state energy (Hartree): -7.773617988868\n", - " \n", - "=== MEASURED OBSERVABLES ===\n", - " \n", - " 0: # Particles: 4.000 S: 0.000 S^2: 0.000 M: 0.000\n", - " \n", - "=== DIPOLE MOMENTS ===\n", - " \n", - "~ Nuclear dipole moment (a.u.): [0.0 0.0 4.72431531]\n", - " \n", - " 0: \n", - " * Electronic dipole moment (a.u.): [0.0 0.0 6.45025807]\n", - " - computed part: [0.0 0.0 6.45025807]\n", - " - ActiveSpaceTransformer extracted energy part: [0.0 0.0 0.0]\n", - " > Dipole moment (a.u.): [0.0 0.0 -1.72594276] Total: 1.72594276\n", - " (debye): [0.0 0.0 -4.38690851] Total: 4.38690851\n", - " \n" - ] - } - ], - "source": [ - "target_energy = np_result.total_energies[0]\n", - "print(np_result)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## VQE\n", - "\n", - "To run the VQE we need to select a parameterized quantum circuit acting as ansatz and a classical optimizer. Here we'll choose a heuristic, hardware efficient ansatz and the SPSA optimizer." - ] - }, - { - "cell_type": "code", - "execution_count": 5, - "metadata": {}, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "execution_count": 5, - "metadata": {}, - "output_type": "execute_result" - } - ], - "source": [ - "from qiskit.circuit.library import EfficientSU2\n", - "\n", - "ansatz = EfficientSU2(num_qubits=4, reps=1, entanglement=\"linear\", insert_barriers=True)\n", - "ansatz.decompose().draw(\"mpl\", style=\"iqx\")" - ] - }, - { - "cell_type": "code", - "execution_count": 6, - "metadata": {}, - "outputs": [], - "source": [ - "import numpy as np\n", - "from qiskit.utils import algorithm_globals\n", - "\n", - "# fix random seeds for reproducibility\n", - "\n", - "np.random.seed(5)\n", - "algorithm_globals.random_seed = 5" - ] - }, - { - "cell_type": "code", - "execution_count": 7, - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit_algorithms.optimizers import SPSA\n", - "\n", - "optimizer = SPSA(maxiter=100)\n", - "\n", - "initial_point = np.random.random(ansatz.num_parameters)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Before executing the VQE in the cloud using Qiskit Runtime, let's execute a local VQE first." - ] - }, - { - "cell_type": "code", - "execution_count": 8, - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit_algorithms import VQE\n", - "from qiskit.primitives import Estimator\n", - "\n", - "estimator = Estimator()\n", - "\n", - "local_vqe = VQE(\n", - " estimator,\n", - " ansatz,\n", - " optimizer,\n", - " initial_point=initial_point,\n", - ")\n", - "\n", - "local_vqe_groundstate_solver = GroundStateEigensolver(qubit_mapper, local_vqe)\n", - "\n", - "local_vqe_result = local_vqe_groundstate_solver.solve(problem)" - ] - }, - { - "cell_type": "code", - "execution_count": 9, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "=== GROUND STATE ENERGY ===\n", - " \n", - "* Electronic ground state energy (Hartree): -8.223473551005\n", - " - computed part: -8.223473551005\n", - " - ActiveSpaceTransformer extracted energy part: 0.0\n", - "~ Nuclear repulsion energy (Hartree): 0.635012653104\n", - "> Total ground state energy (Hartree): -7.588460897901\n", - " \n", - "=== MEASURED OBSERVABLES ===\n", - " \n", - " 0: # Particles: 3.997 S: 0.438 S^2: 0.631 M: 0.001\n", - " \n", - "=== DIPOLE MOMENTS ===\n", - " \n", - "~ Nuclear dipole moment (a.u.): [0.0 0.0 4.72431531]\n", - " \n", - " 0: \n", - " * Electronic dipole moment (a.u.): [0.0 0.0 1.41136787]\n", - " - computed part: [0.0 0.0 1.41136787]\n", - " - ActiveSpaceTransformer extracted energy part: [0.0 0.0 0.0]\n", - " > Dipole moment (a.u.): [0.0 0.0 3.31294744] Total: 3.31294744\n", - " (debye): [0.0 0.0 8.42067168] Total: 8.42067168\n", - " \n" - ] - } - ], - "source": [ - "print(local_vqe_result)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "## Runtime VQE\n", - "\n", - "Let's exchange the eigensolver from a local VQE algorithm to a VQE executed using Qiskit Runtime -- simply by exchanging the `VQE` class by the `qiskit_nature.runtime.VQEClient`.\n", - "\n", - "First, we'll have to load a provider to access Qiskit Runtime. **Note:** You have to replace the next cell with your provider." - ] - }, - { - "cell_type": "code", - "execution_count": 10, - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit import IBMQ\n", - "\n", - "IBMQ.load_account()\n", - "provider = IBMQ.get_provider(group=\"open\") # replace by your runtime provider\n", - "\n", - "backend = provider.get_backend(\"ibmq_qasm_simulator\") # select a backend that supports the runtime" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "Now we can set up the `VQEClient`. In this first release, the optimizer must be provided as a dictionary, in future releases you'll be able to pass the same optimizer object as in the traditional VQE." - ] - }, - { - "cell_type": "code", - "execution_count": 11, - "metadata": {}, - "outputs": [], - "source": [ - "from qiskit_nature.runtime import VQEClient\n", - "\n", - "runtime_vqe = VQEClient(\n", - " ansatz=ansatz,\n", - " optimizer=optimizer,\n", - " initial_point=initial_point,\n", - " provider=provider,\n", - " backend=backend,\n", - " shots=1024,\n", - " measurement_error_mitigation=True,\n", - ") # use a complete measurement fitter for error mitigation" - ] - }, - { - "cell_type": "code", - "execution_count": 12, - "metadata": {}, - "outputs": [], - "source": [ - "runtime_vqe_groundstate_solver = GroundStateEigensolver(qubit_mapper, runtime_vqe)\n", - "runtime_vqe_result = runtime_vqe_groundstate_solver.solve(problem)" - ] - }, - { - "cell_type": "code", - "execution_count": 13, - "metadata": {}, - "outputs": [ - { - "name": "stdout", - "output_type": "stream", - "text": [ - "=== GROUND STATE ENERGY ===\n", - " \n", - "* Electronic ground state energy (Hartree): -8.172591259069\n", - " - computed part: -8.172591259069\n", - " - ActiveSpaceTransformer extracted energy part: 0.0\n", - "~ Nuclear repulsion energy (Hartree): 0.635012653104\n", - "> Total ground state energy (Hartree): -7.537578605965\n", - " \n", - "=== MEASURED OBSERVABLES ===\n", - " \n", - " 0: # Particles: 3.988 S: 0.596 S^2: 0.951 M: 0.002\n", - " \n", - "=== DIPOLE MOMENTS ===\n", - " \n", - "~ Nuclear dipole moment (a.u.): [0.0 0.0 4.72431531]\n", - " \n", - " 0: \n", - " * Electronic dipole moment (a.u.): [0.0 0.0 1.25645131]\n", - " - computed part: [0.0 0.0 1.25645131]\n", - " - ActiveSpaceTransformer extracted energy part: [0.0 0.0 0.0]\n", - " > Dipole moment (a.u.): [0.0 0.0 3.467864] Total: 3.467864\n", - " (debye): [0.0 0.0 8.81443024] Total: 8.81443024\n", - " \n" - ] - } - ], - "source": [ - "print(runtime_vqe_result)" - ] - }, - { - "cell_type": "markdown", - "metadata": {}, - "source": [ - "If we are interested in the development of the energy, the `VQEClient` allows access to the history of the optimizer, which contains the loss per iteration (along with the parameters and a timestamp). Note that this only holds for the SPSA and QN-SPSA optimizers. Otherwise you have to use a callback to the `VQEClient`, similar to the normal `VQE`.\n", - "\n", - "We can access this data via the `raw_result` attribute of the ground state solver." - ] - }, - { - "cell_type": "code", - "execution_count": 17, - "metadata": {}, - "outputs": [], - "source": [ - "runtime_result = runtime_vqe_result.raw_result\n", - "history = runtime_result.optimizer_history\n", - "loss = history[\"energy\"]" - ] - }, - { - "cell_type": "code", - "execution_count": 20, - "metadata": { - "tags": [] - }, - "outputs": [ - { - "data": { - "image/png": "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", - "text/plain": [ - "
" - ] - }, - "metadata": { - "needs_background": "light" - }, - "output_type": "display_data" - } - ], - "source": [ - "import matplotlib.pyplot as plt\n", - "\n", - "plt.rcParams[\"font.size\"] = 14\n", - "\n", - "# plot loss and reference value\n", - "plt.figure(figsize=(12, 6))\n", - "plt.plot(loss + runtime_vqe_result.nuclear_repulsion_energy, label=\"Runtime VQE\")\n", - "plt.axhline(y=target_energy + 0.2, color=\"tab:red\", ls=\":\", label=\"Target + 200mH\")\n", - "plt.axhline(y=target_energy, color=\"tab:red\", ls=\"--\", label=\"Target\")\n", - "\n", - "plt.legend(loc=\"best\")\n", - "plt.xlabel(\"Iteration\")\n", - "plt.ylabel(\"Energy [H]\")\n", - "plt.title(\"VQE energy\");" - ] - }, - { - "cell_type": "code", - "execution_count": 21, - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "

Version Information

Qiskit SoftwareVersion
qiskit-terra0.23.0.dev0+f339f71
qiskit-aer0.11.1
qiskit-ibmq-provider0.19.2
qiskit-nature0.6.0
System information
Python version3.9.15
Python compilerGCC 12.2.1 20220819 (Red Hat 12.2.1-2)
Python buildmain, Oct 12 2022 00:00:00
OSLinux
CPUs8
Memory (Gb)62.499855041503906
Wed Dec 07 11:09:57 2022 CET
" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - }, - { - "data": { - "text/html": [ - "

This code is a part of Qiskit

© Copyright IBM 2017, 2022.

This code is licensed under the Apache License, Version 2.0. You may
obtain a copy of this license in the LICENSE.txt file in the root directory
of this source tree or at http://www.apache.org/licenses/LICENSE-2.0.

Any modifications or derivative works of this code must retain this
copyright notice, and modified files need to carry a notice indicating
that they have been altered from the originals.

" - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "import qiskit.tools.jupyter\n", - "\n", - "%qiskit_version_table\n", - "%qiskit_copyright" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.16" - }, - "nbsphinx": { - "execute": "never" - }, - "vscode": { - "interpreter": { - "hash": "d4bd6456a0b47d0dd87b9ae107645ad9bf4ec16d9647d052356a2dc29fff80e1" - } - } - }, - "nbformat": 4, - "nbformat_minor": 4 -} diff --git a/docs/tutorials/08_qcschema.ipynb b/docs/tutorials/08_qcschema.ipynb index 23f260f2a..2a19d4434 100644 --- a/docs/tutorials/08_qcschema.ipynb +++ b/docs/tutorials/08_qcschema.ipynb @@ -196,7 +196,7 @@ } ], "source": [ - "import qiskit.tools.jupyter\n", + "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" diff --git a/docs/tutorials/09_properties.ipynb b/docs/tutorials/09_properties.ipynb index 9b583ac8a..811e8212d 100644 --- a/docs/tutorials/09_properties.ipynb +++ b/docs/tutorials/09_properties.ipynb @@ -198,7 +198,7 @@ } ], "source": [ - "import qiskit.tools.jupyter\n", + "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" diff --git a/docs/tutorials/10_lattice_models.ipynb b/docs/tutorials/10_lattice_models.ipynb index 1d9f42662..21646cca4 100644 --- a/docs/tutorials/10_lattice_models.ipynb +++ b/docs/tutorials/10_lattice_models.ipynb @@ -1161,7 +1161,7 @@ } ], "source": [ - "import qiskit.tools.jupyter\n", + "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" diff --git a/docs/tutorials/11_quadratic_hamiltonian_and_slater_determinants.ipynb b/docs/tutorials/11_quadratic_hamiltonian_and_slater_determinants.ipynb index 42b7ed452..68ac3eb6b 100644 --- a/docs/tutorials/11_quadratic_hamiltonian_and_slater_determinants.ipynb +++ b/docs/tutorials/11_quadratic_hamiltonian_and_slater_determinants.ipynb @@ -477,7 +477,7 @@ } ], "source": [ - "import qiskit.tools.jupyter\n", + "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" diff --git a/docs/tutorials/12_deuteron_binding_energy.ipynb b/docs/tutorials/12_deuteron_binding_energy.ipynb index 533df529e..0e1c96453 100644 --- a/docs/tutorials/12_deuteron_binding_energy.ipynb +++ b/docs/tutorials/12_deuteron_binding_energy.ipynb @@ -41,10 +41,10 @@ "from qiskit_algorithms import VQE\n", "from qiskit_algorithms.observables_evaluator import estimate_observables\n", "from qiskit_algorithms.optimizers import COBYLA, SLSQP\n", + "from qiskit_algorithms.utils import algorithm_globals\n", "from qiskit.circuit import QuantumCircuit, Parameter\n", "from qiskit.circuit.library import TwoLocal\n", "from qiskit.quantum_info import Pauli, SparsePauliOp\n", - "from qiskit.utils import algorithm_globals\n", "from qiskit_nature.second_q.operators import FermionicOp\n", "from qiskit_nature.second_q.mappers import JordanWignerMapper" ] @@ -781,7 +781,7 @@ " to know the expectation values.\n", "\n", " angles (list): A list with the values that will be used in the\n", - " 'bind_parameters' method.\n", + " 'assign_parameters' method.\n", "\n", " Returns:\n", " list_exp_values (list): A list containing the expectation values\n", @@ -791,7 +791,7 @@ " for observable in observables:\n", " exp_values = []\n", " for angle in angles:\n", - " qc = quantum_circuit.bind_parameters({theta: angle})\n", + " qc = quantum_circuit.assign_parameters({theta: angle})\n", " result = estimate_observables(\n", " Estimator(),\n", " quantum_state=qc,\n", @@ -909,7 +909,7 @@ "id": "738bb6e0", "metadata": {}, "source": [ - "# Acknowledgment\n", + "## Acknowledgment\n", "\n", "I would like to thank Steve Wood, Soham Pal and Siddhartha Morales for the debates in our meetings during the Qiskit Advocate Mentorship Program 2021 - Fall, they were very important for the construction of this tutorial. " ] @@ -919,7 +919,7 @@ "id": "711a7f4c", "metadata": {}, "source": [ - "# References\n", + "## References\n", "\n", "[1] Dumitrescu, Eugene F., et al. \"Cloud quantum computing of an atomic nucleus.\" Physical review letters 120.21 (2018): 210501. Arxiv version: https://arxiv.org/pdf/1801.03897.pdf\n", "\n", @@ -962,7 +962,7 @@ } ], "source": [ - "import qiskit.tools.jupyter\n", + "import tutorial_magics\n", "\n", "%qiskit_version_table\n", "%qiskit_copyright" @@ -971,7 +971,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3", + "display_name": "Python 3 (ipykernel)", "language": "python", "name": "python3" }, @@ -985,7 +985,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.16" + "version": "3.9.7" }, "vscode": { "interpreter": { diff --git a/docs/tutorials/tutorial_magics.py b/docs/tutorials/tutorial_magics.py new file mode 100644 index 000000000..22d88bdd6 --- /dev/null +++ b/docs/tutorials/tutorial_magics.py @@ -0,0 +1,96 @@ +# This code is part of a Qiskit project +# +# (C) Copyright IBM 2017, 2024 +# +# This code is licensed under the Apache License, Version 2.0. You may +# obtain a copy of this license in the LICENSE.txt file in the root directory +# of this source tree or at http://www.apache.org/licenses/LICENSE-2.0. +# +# Any modifications or derivative works of this code must retain this +# copyright notice, and modified files need to carry a notice indicating +# that they have been altered from the originals. +# pylint: disable=unused-argument + +"""A module for version and copyright magics.""" + +import datetime +import platform +import time +from sys import modules + +from IPython import get_ipython +from IPython.core.magic import line_magic, Magics, magics_class +from IPython.display import HTML, display + +import qiskit + + +@magics_class +class Copyright(Magics): + """A class of status magic functions.""" + + @line_magic + def qiskit_copyright(self, line="", cell=None): + """A Jupyter magic function return qiskit copyright""" + now = datetime.datetime.now() + + html = "
" + html += "

This code is a part of a Qiskit project

" + html += "

© Copyright IBM 2017, %s.

" % now.year + html += "

This code is licensed under the Apache License, Version 2.0. You may
" + html += "obtain a copy of this license in the LICENSE.txt file in the root directory
" + html += "of this source tree or at http://www.apache.org/licenses/LICENSE-2.0." + + html += "

Any modifications or derivative works of this code must retain this
" + html += "copyright notice, and modified files need to carry a notice indicating
" + html += "that they have been altered from the originals.

" + html += "
" + return display(HTML(html)) + + +@magics_class +class VersionTable(Magics): + """A class of status magic functions.""" + + @line_magic + def qiskit_version_table(self, line="", cell=None): + """ + Print an HTML-formatted table with version numbers for Qiskit and its + dependencies. This should make it possible to reproduce the environment + and the calculation later on. + """ + html = "

Version Information

" + html += "" + html += "" + + packages = {"qiskit": qiskit.__version__} + qiskit_modules = {module.split(".")[0] for module in modules.keys() if "qiskit" in module} + + for qiskit_module in qiskit_modules: + packages[qiskit_module] = getattr(modules[qiskit_module], "__version__", None) + + for name, version in packages.items(): + if version: + html += f"" + + html += "" + + sys_info = [ + ("Python version", platform.python_version()), + ("OS", "%s" % platform.system()), + ] + + for name, version in sys_info: + html += f"" + + html += "" % time.strftime("%a %b %d %H:%M:%S %Y %Z") + html += "
SoftwareVersion
{name}{version}
System information
{name}{version}
%s
" + + return display(HTML(html)) + + +_IP = get_ipython() +if _IP is not None: + _IP.register_magics(VersionTable) + _IP.register_magics(Copyright)