From cd0a0c03879a36221b5f02313d97043695610cfc Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 21:03:02 -0400 Subject: [PATCH 01/26] Bump mypy from 1.10.1 to 1.11.1 (#651) Bumps [mypy](https://github.com/python/mypy) from 1.10.1 to 1.11.1. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.10.1...v1.11.1) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index fd8842796..bd327ae20 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,7 +60,7 @@ style = [ lint = [ "circuit-knitting-toolbox[style]", "pydocstyle==6.3.0", - "mypy==1.10.1", + "mypy==1.11.1", "reno>=3.4.0", "pylint==3.2.5", # pydocstyle prefers to parse our pyproject.toml, hence the following line From f5cc6ae69e72a37e7fed307f307b22e70e368682 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 21:03:09 -0400 Subject: [PATCH 02/26] Bump ruff from 0.5.2 to 0.5.5 (#652) Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.2 to 0.5.5. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.5.2...0.5.5) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index bd327ae20..3c1c3e88b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,7 +54,7 @@ nbtest = [ style = [ "autoflake==2.3.1", "black[jupyter]~=24.1", - "ruff==0.5.2", + "ruff==0.5.5", "nbqa>=1.6.0", ] lint = [ From 4ba5bef128b0c342dfaab17ab3ce929325e03353 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Thu, 1 Aug 2024 21:03:19 -0400 Subject: [PATCH 03/26] Bump pylint from 3.2.5 to 3.2.6 (#650) Bumps [pylint](https://github.com/pylint-dev/pylint) from 3.2.5 to 3.2.6. - [Release notes](https://github.com/pylint-dev/pylint/releases) - [Commits](https://github.com/pylint-dev/pylint/compare/v3.2.5...v3.2.6) --- updated-dependencies: - dependency-name: pylint dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 3c1c3e88b..6dd13d3c7 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,7 +62,7 @@ lint = [ "pydocstyle==6.3.0", "mypy==1.11.1", "reno>=3.4.0", - "pylint==3.2.5", + "pylint==3.2.6", # pydocstyle prefers to parse our pyproject.toml, hence the following line "toml", ] From a9bfc91b9855a78fd6b0dd9ffadcd03069808fc7 Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Fri, 2 Aug 2024 12:35:18 -0400 Subject: [PATCH 04/26] Use `BaseSamplerV1` with explicit version (#653) This change is motivated by the following warning: > DeprecationWarning: The class ``qiskit.primitives.base.base_sampler.BaseSampler`` > is deprecated as of qiskit 1.2. It will be removed no earlier > than 3 months after the release date. The `BaseSampler` class is > a type alias for the `BaseSamplerV1` interface that has been > deprecated in favor of explicitly versioned interface classes. > It is recommended to migrate all implementations to use > `BaseSamplerV2`. However, for implementations incompatible with > `BaseSamplerV2`, `BaseSampler` can be replaced with the explicitly > versioned `BaseSamplerV1` class. Related to #551 and #506. --- circuit_knitting/utils/simulation.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/circuit_knitting/utils/simulation.py b/circuit_knitting/utils/simulation.py index d1946afba..c66b472a3 100644 --- a/circuit_knitting/utils/simulation.py +++ b/circuit_knitting/utils/simulation.py @@ -29,7 +29,7 @@ import numpy as np from qiskit.circuit import QuantumCircuit from qiskit.quantum_info import Statevector, Operator -from qiskit.primitives.base import BaseSampler, SamplerResult +from qiskit.primitives.base import BaseSamplerV1, SamplerResult from qiskit.primitives.primitive_job import PrimitiveJob from qiskit.result import QuasiDistribution @@ -128,7 +128,7 @@ def simulate_statevector_outcomes(qc: QuantumCircuit, /) -> dict[int, float]: return {outcome: sum(prob for prob, _ in svs) for outcome, svs in current.items()} -class ExactSampler(BaseSampler): +class ExactSampler(BaseSamplerV1): """Sampler which returns exact probabilities for each possible outcome. This sampler supports: From 812341aeccc1ec704449eb70c6e83f38430a9a99 Mon Sep 17 00:00:00 2001 From: Ibrahim Shehzad <75153717+ibrahim-shehzad@users.noreply.github.com> Date: Tue, 20 Aug 2024 09:48:00 -0400 Subject: [PATCH 05/26] Edit cutting explanation (#657) * edit cutting explanation * edit cutting explanation * adding missing parenthesis * add remaining parenthesis --- docs/circuit_cutting/explanation/index.rst | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/circuit_cutting/explanation/index.rst b/docs/circuit_cutting/explanation/index.rst index 2769e3c3e..427ed1797 100644 --- a/docs/circuit_cutting/explanation/index.rst +++ b/docs/circuit_cutting/explanation/index.rst @@ -60,10 +60,10 @@ As a basic and explicit example, let us consider the decomposition of a cut :cla As shown in [`2 `__], a quantum circuit which implements an :class:`~qiskit.circuit.library.RZZGate` can be simulated by performing six subexperiments where the :class:`~qiskit.circuit.library.RZZGate` in the original circuit has been replaced with only local (single-qubit) operations [the :math:`\mathcal{F}_i`\ 's in Eq. :eq:`eq:qpd`]. The result is then reconstructed by combining the subexperiment results with certain coefficients [the :math:`a_i`\ 's in Eq. :eq:`eq:qpd`], which can be either positive or negative. Given the :math:`\theta` parameter of the :class:`~qiskit.circuit.library.RZZGate`, the six subexperiments are as follows: -1. With coefficient :math:`a_1 = \cos^2 \theta`, do nothing (:math:`I \otimes I`, where :math:`I` is the identity operation on a single qubit). -2. With coefficient :math:`a_2 = \sin^2 \theta`, perform a :class:`~qiskit.circuit.library.ZGate` on each qubit (:math:`Z \otimes Z`). -3. With coefficient :math:`a_3 = \sin(2\theta)/2`, perform a projective measurement in the Z basis on the first qubit and an :class:`~qiskit.circuit.library.SGate` gate on the second qubit (denote this as :math:`M_z \otimes S`). If the result of the measurement is 1, flip the sign of that outcome's contribution during reconstruction. -4. With coefficient :math:`a_4 = -\sin(2\theta)/2`, perform a projective measurement in the Z basis on the first qubit and an :class:`~qiskit.circuit.library.SdgGate` gate on the second qubit (denote this as :math:`M_z \otimes S^\dagger`). If the result of the measurement is 1, flip the sign of that outcome's contribution during reconstruction. +1. With coefficient :math:`a_1 = \cos^2 (\theta/2)`, do nothing (:math:`I \otimes I`, where :math:`I` is the identity operation on a single qubit). +2. With coefficient :math:`a_2 = \sin^2 (\theta/2)`, perform a :class:`~qiskit.circuit.library.ZGate` on each qubit (:math:`Z \otimes Z`). +3. With coefficient :math:`a_3 = -\sin(\theta)/2`, perform a projective measurement in the Z basis on the first qubit and an :class:`~qiskit.circuit.library.SGate` gate on the second qubit (denote this as :math:`M_z \otimes S`). If the result of the measurement is 1, flip the sign of that outcome's contribution during reconstruction. +4. With coefficient :math:`a_4 = \sin(\theta)/2`, perform a projective measurement in the Z basis on the first qubit and an :class:`~qiskit.circuit.library.SdgGate` gate on the second qubit (denote this as :math:`M_z \otimes S^\dagger`). If the result of the measurement is 1, flip the sign of that outcome's contribution during reconstruction. 5. Same as term 3 (:math:`a_5 = a_3`), but swap the qubits (:math:`S \otimes M_z`). 6. Same as term 4 (:math:`a_6 = a_4`), but swap the qubits (:math:`S^\dagger \otimes M_z`). From ce3ac0064b8dab2211228ec63caa595f38439144 Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Tue, 20 Aug 2024 16:12:30 -0400 Subject: [PATCH 06/26] Make copyright headers consistent with respect to Qiskit (#646) --- circuit_knitting/cutting/instructions/cut_wire.py | 2 +- circuit_knitting/cutting/instructions/move.py | 2 +- circuit_knitting/cutting/qpd/instructions/qpd_gate.py | 2 +- circuit_knitting/cutting/qpd/instructions/qpd_measure.py | 2 +- circuit_knitting/cutting/wire_cutting_transforms.py | 2 +- docs/conf.py | 2 +- test/cutting/test_wire_cutting_transforms.py | 2 +- 7 files changed, 7 insertions(+), 7 deletions(-) diff --git a/circuit_knitting/cutting/instructions/cut_wire.py b/circuit_knitting/cutting/instructions/cut_wire.py index 5f509772b..fec48f0c9 100644 --- a/circuit_knitting/cutting/instructions/cut_wire.py +++ b/circuit_knitting/cutting/instructions/cut_wire.py @@ -1,4 +1,4 @@ -# This code is part of Qiskit. +# This code is a Qiskit project. # # (C) Copyright IBM 2023. # diff --git a/circuit_knitting/cutting/instructions/move.py b/circuit_knitting/cutting/instructions/move.py index 522c06242..ff1806fdc 100644 --- a/circuit_knitting/cutting/instructions/move.py +++ b/circuit_knitting/cutting/instructions/move.py @@ -1,4 +1,4 @@ -# This code is part of Qiskit. +# This code is a Qiskit project. # # (C) Copyright IBM 2023. # diff --git a/circuit_knitting/cutting/qpd/instructions/qpd_gate.py b/circuit_knitting/cutting/qpd/instructions/qpd_gate.py index 913dc6a83..42f6a8330 100644 --- a/circuit_knitting/cutting/qpd/instructions/qpd_gate.py +++ b/circuit_knitting/cutting/qpd/instructions/qpd_gate.py @@ -1,4 +1,4 @@ -# This code is part of Qiskit. +# This code is a Qiskit project. # # (C) Copyright IBM 2023. # diff --git a/circuit_knitting/cutting/qpd/instructions/qpd_measure.py b/circuit_knitting/cutting/qpd/instructions/qpd_measure.py index 20a4c8fd6..69dcb6460 100644 --- a/circuit_knitting/cutting/qpd/instructions/qpd_measure.py +++ b/circuit_knitting/cutting/qpd/instructions/qpd_measure.py @@ -1,4 +1,4 @@ -# This code is part of Qiskit. +# This code is a Qiskit project. # # (C) Copyright IBM 2023. # diff --git a/circuit_knitting/cutting/wire_cutting_transforms.py b/circuit_knitting/cutting/wire_cutting_transforms.py index 22e094210..35688b362 100644 --- a/circuit_knitting/cutting/wire_cutting_transforms.py +++ b/circuit_knitting/cutting/wire_cutting_transforms.py @@ -1,4 +1,4 @@ -# This code is part of Qiskit. +# This code is a Qiskit project. # # (C) Copyright IBM 2023. # diff --git a/docs/conf.py b/docs/conf.py index 4131fcacd..a7c9f7b97 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -1,4 +1,4 @@ -# This code is part of Qiskit. +# This code is a Qiskit project. # # (C) Copyright IBM 2022. # diff --git a/test/cutting/test_wire_cutting_transforms.py b/test/cutting/test_wire_cutting_transforms.py index 2869dad8f..a6c5c0a40 100644 --- a/test/cutting/test_wire_cutting_transforms.py +++ b/test/cutting/test_wire_cutting_transforms.py @@ -1,4 +1,4 @@ -# This code is part of Qiskit. +# This code is a Qiskit project. # # (C) Copyright IBM 2023. # From ac08033683ffc117f223a49bf4aca0791ac044a8 Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Fri, 23 Aug 2024 15:47:42 -0400 Subject: [PATCH 07/26] Rename package to qiskit-addon-cutting (code only) (#661) * Rename package to qiskit-addon-cutting (code only) * Move tests out of `cutting` subdirectory --- circuit_knitting/__init__.py | 24 ---------------- docs/apidocs/circuit_cutting.rst | 10 ------- docs/apidocs/index.rst | 25 +++++++++++++---- docs/apidocs/utils.rst | 10 ------- docs/circuit_cutting/explanation/index.rst | 2 +- docs/circuit_cutting/how-tos/README.rst | 2 +- ...erate_exact_quasi_dists_from_sampler.ipynb | 6 ++-- ...generate_exact_sampling_coefficients.ipynb | 4 +-- .../how-tos/how_to_specify_cut_wires.ipynb | 6 ++-- ...gate_cutting_to_reduce_circuit_width.ipynb | 6 ++-- ...gate_cutting_to_reduce_circuit_depth.ipynb | 6 ++-- ...03_wire_cutting_via_move_instruction.ipynb | 8 +++--- .../tutorials/04_automatic_cut_finding.ipynb | 8 +++--- docs/conf.py | 6 ++-- pyproject.toml | 18 ++++++------ .../__init__.py | 13 +++++++-- .../automated_cut_finding.py | 0 .../cut_finding/__init__.py | 0 .../cut_finding/best_first_search.py | 0 .../cut_finding/cco_utils.py | 0 .../cut_finding/circuit_interface.py | 0 .../cut_finding/cut_optimization.py | 0 .../cut_finding/cutting_actions.py | 0 .../cut_finding/disjoint_subcircuits_state.py | 0 .../cut_finding/lo_cuts_optimizer.py | 0 .../cut_finding/optimization_settings.py | 0 .../cut_finding/search_space_generator.py | 0 .../cutting_decomposition.py | 4 +-- .../cutting_experiments.py | 4 +-- .../cutting_reconstruction.py | 4 +-- .../instructions/__init__.py | 0 .../instructions/cut_wire.py | 0 .../instructions/move.py | 2 +- .../qpd/__init__.py | 0 .../qpd/decompose.py | 0 .../qpd/decompositions.py | 2 +- .../qpd/instructions/__init__.py | 0 .../qpd/instructions/qpd_gate.py | 0 .../qpd/instructions/qpd_measure.py | 0 .../qpd/qpd_basis.py | 0 .../qpd/weights.py | 2 +- .../utils/__init__.py | 28 +++++++++---------- .../utils/bitwise.py | 2 +- .../utils/iteration.py | 2 +- .../utils/observable_grouping.py | 2 +- .../utils/simulation.py | 2 +- .../utils/transforms.py | 2 +- .../utils/transpiler_passes.py | 2 +- .../wire_cutting_transforms.py | 0 test/{cutting => }/cut_finding/__init__.py | 0 .../cut_finding/test_best_first_search.py | 14 +++++----- .../cut_finding/test_cco_utils.py | 4 +-- .../cut_finding/test_circuit_interfaces.py | 4 +-- .../cut_finding/test_cut_finder_results.py | 14 +++++----- .../cut_finding/test_cutting_actions.py | 8 +++--- .../test_disjoint_subcircuits_state.py | 6 ++-- .../cut_finding/test_optimization_settings.py | 2 +- test/cutting/__init__.py | 10 ------- test/{cutting => }/qpd/__init__.py | 0 .../qpd/instructions/test_qpd_gate.py | 2 +- .../qpd/instructions/test_qpd_measure.py | 2 +- test/{cutting => }/qpd/test_qpd.py | 10 +++---- test/{cutting => }/qpd/test_qpd_basis.py | 2 +- .../test_cutting_decomposition.py | 6 ++-- .../{cutting => }/test_cutting_experiments.py | 12 ++++---- .../test_cutting_reconstruction.py | 6 ++-- test/{cutting => }/test_cutting_roundtrip.py | 6 ++-- test/{cutting => }/test_cutting_workflows.py | 8 +++--- test/{cutting => }/test_find_cuts.py | 3 +- .../test_wire_cutting_transforms.py | 8 +++--- test/utils/test_iteration.py | 2 +- test/utils/test_observable_grouping.py | 2 +- test/utils/test_simulation.py | 2 +- test/utils/test_transforms.py | 8 +++--- test/utils/test_transpiler_passes.py | 5 +++- tox.ini | 20 ++++++------- 76 files changed, 174 insertions(+), 204 deletions(-) delete mode 100644 circuit_knitting/__init__.py delete mode 100644 docs/apidocs/circuit_cutting.rst delete mode 100644 docs/apidocs/utils.rst rename {circuit_knitting/cutting => qiskit_addon_cutting}/__init__.py (88%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/automated_cut_finding.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/cut_finding/__init__.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/cut_finding/best_first_search.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/cut_finding/cco_utils.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/cut_finding/circuit_interface.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/cut_finding/cut_optimization.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/cut_finding/cutting_actions.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/cut_finding/disjoint_subcircuits_state.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/cut_finding/lo_cuts_optimizer.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/cut_finding/optimization_settings.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/cut_finding/search_space_generator.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/cutting_decomposition.py (98%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/cutting_experiments.py (99%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/cutting_reconstruction.py (98%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/instructions/__init__.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/instructions/cut_wire.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/instructions/move.py (97%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/qpd/__init__.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/qpd/decompose.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/qpd/decompositions.py (99%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/qpd/instructions/__init__.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/qpd/instructions/qpd_gate.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/qpd/instructions/qpd_measure.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/qpd/qpd_basis.py (100%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/qpd/weights.py (99%) rename {circuit_knitting => qiskit_addon_cutting}/utils/__init__.py (64%) rename {circuit_knitting => qiskit_addon_cutting}/utils/bitwise.py (94%) rename {circuit_knitting => qiskit_addon_cutting}/utils/iteration.py (97%) rename {circuit_knitting => qiskit_addon_cutting}/utils/observable_grouping.py (99%) rename {circuit_knitting => qiskit_addon_cutting}/utils/simulation.py (99%) rename {circuit_knitting => qiskit_addon_cutting}/utils/transforms.py (99%) rename {circuit_knitting => qiskit_addon_cutting}/utils/transpiler_passes.py (96%) rename {circuit_knitting/cutting => qiskit_addon_cutting}/wire_cutting_transforms.py (100%) rename test/{cutting => }/cut_finding/__init__.py (100%) rename test/{cutting => }/cut_finding/test_best_first_search.py (94%) rename test/{cutting => }/cut_finding/test_cco_utils.py (97%) rename test/{cutting => }/cut_finding/test_circuit_interfaces.py (98%) rename test/{cutting => }/cut_finding/test_cut_finder_results.py (97%) rename test/{cutting => }/cut_finding/test_cutting_actions.py (94%) rename test/{cutting => }/cut_finding/test_disjoint_subcircuits_state.py (97%) rename test/{cutting => }/cut_finding/test_optimization_settings.py (96%) delete mode 100644 test/cutting/__init__.py rename test/{cutting => }/qpd/__init__.py (100%) rename test/{cutting => }/qpd/instructions/test_qpd_gate.py (98%) rename test/{cutting => }/qpd/instructions/test_qpd_measure.py (92%) rename test/{cutting => }/qpd/test_qpd.py (98%) rename test/{cutting => }/qpd/test_qpd_basis.py (99%) rename test/{cutting => }/test_cutting_decomposition.py (98%) rename test/{cutting => }/test_cutting_experiments.py (97%) rename test/{cutting => }/test_cutting_reconstruction.py (97%) rename test/{cutting => }/test_cutting_roundtrip.py (97%) rename test/{cutting => }/test_cutting_workflows.py (96%) rename test/{cutting => }/test_find_cuts.py (98%) rename test/{cutting => }/test_wire_cutting_transforms.py (97%) diff --git a/circuit_knitting/__init__.py b/circuit_knitting/__init__.py deleted file mode 100644 index 45faabee1..000000000 --- a/circuit_knitting/__init__.py +++ /dev/null @@ -1,24 +0,0 @@ -# This code is a Qiskit project. - -# (C) Copyright IBM 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. - -"""Main Circuit Knitting Toolbox public functionality.""" - -from __future__ import annotations -from importlib.metadata import version, PackageNotFoundError - - -try: - __version__ = version("circuit-knitting-toolbox") -except PackageNotFoundError: # pragma: no cover - # Package is not installed - pass - -__all__: list[str] = [] diff --git a/docs/apidocs/circuit_cutting.rst b/docs/apidocs/circuit_cutting.rst deleted file mode 100644 index 0df7cd13f..000000000 --- a/docs/apidocs/circuit_cutting.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. _circuit_cutting: - -############### -Circuit Cutting -############### - -.. automodule:: circuit_knitting.cutting - :no-members: - :no-inherited-members: - :no-special-members: diff --git a/docs/apidocs/index.rst b/docs/apidocs/index.rst index fb6e7ced6..0cc647d1c 100644 --- a/docs/apidocs/index.rst +++ b/docs/apidocs/index.rst @@ -1,13 +1,26 @@ -.. circuit_knitting: +.. qiskit_addon_cutting: -.. module:: circuit_knitting +.. module:: qiskit_addon_cutting ======================================= Circuit Knitting Toolbox API References ======================================= -.. toctree:: - :maxdepth: 1 +############### +Circuit Cutting +############### - circuit_cutting - utils +.. automodule:: qiskit_addon_cutting + :no-index: + :no-members: + :no-inherited-members: + :no-special-members: + +######### +Utilities +######### + +.. automodule:: qiskit_addon_cutting.utils + :no-members: + :no-inherited-members: + :no-special-members: diff --git a/docs/apidocs/utils.rst b/docs/apidocs/utils.rst deleted file mode 100644 index 4f3dc87a1..000000000 --- a/docs/apidocs/utils.rst +++ /dev/null @@ -1,10 +0,0 @@ -.. _utils: - -######### -Utilities -######### - -.. automodule:: circuit_knitting.utils - :no-members: - :no-inherited-members: - :no-special-members: diff --git a/docs/circuit_cutting/explanation/index.rst b/docs/circuit_cutting/explanation/index.rst index 427ed1797..8f9e2208c 100644 --- a/docs/circuit_cutting/explanation/index.rst +++ b/docs/circuit_cutting/explanation/index.rst @@ -74,7 +74,7 @@ Equation :eq:`eq:qpd` for :class:`~qiskit.circuit.library.RZZGate` can thus be w import numpy as np import matplotlib.pyplot as plt from qiskit.circuit.library import RZZGate - from circuit_knitting.cutting.qpd import QPDBasis + from qiskit_addon_cutting.qpd import QPDBasis theta_values = np.linspace(0, np.pi, 101) bases = [QPDBasis.from_instruction(RZZGate(theta)) for theta in theta_values] diff --git a/docs/circuit_cutting/how-tos/README.rst b/docs/circuit_cutting/how-tos/README.rst index 3e56f9ebc..9cb7f9223 100644 --- a/docs/circuit_cutting/how-tos/README.rst +++ b/docs/circuit_cutting/how-tos/README.rst @@ -2,7 +2,7 @@ Circuit Cutting How-To Guides ----------------------------- - `Generate exact quasi-distributions `__: - Use the :class:`~circuit_knitting.utils.simulation.ExactSampler` interface to generate + Use the :class:`~qiskit_addon_cutting.utils.simulation.ExactSampler` interface to generate exact quasi-distributions for circuits containing mid-circuit measurements. - `Generate exact sampling coefficients `__: Generate exact sampling coefficients and run all unique samples from the distribution. diff --git a/docs/circuit_cutting/how-tos/how_to_generate_exact_quasi_dists_from_sampler.ipynb b/docs/circuit_cutting/how-tos/how_to_generate_exact_quasi_dists_from_sampler.ipynb index 4e4ea5c5d..e83ca399d 100644 --- a/docs/circuit_cutting/how-tos/how_to_generate_exact_quasi_dists_from_sampler.ipynb +++ b/docs/circuit_cutting/how-tos/how_to_generate_exact_quasi_dists_from_sampler.ipynb @@ -20,7 +20,7 @@ "from qiskit import QuantumCircuit\n", "from qiskit.quantum_info import SparsePauliOp\n", "\n", - "from circuit_knitting.cutting import (\n", + "from qiskit_addon_cutting import (\n", " partition_problem,\n", " generate_cutting_experiments,\n", ")" @@ -79,7 +79,7 @@ "id": "bc59b1be", "metadata": {}, "source": [ - "In order to calculate exact quasiprobability distributions for circuits with mid-circuit measurements, users will need to use the `ExactSampler` class from `circuit_knitting.utils.simulation`. The Qiskit Samplers do not support mid-circuit measurements in statevector mode." + "In order to calculate exact quasiprobability distributions for circuits with mid-circuit measurements, users will need to use the `ExactSampler` class from `qiskit_addon_cutting.utils.simulation`. The Qiskit Samplers do not support mid-circuit measurements in statevector mode." ] }, { @@ -89,7 +89,7 @@ "metadata": {}, "outputs": [], "source": [ - "from circuit_knitting.utils.simulation import ExactSampler\n", + "from qiskit_addon_cutting.utils.simulation import ExactSampler\n", "\n", "exact_sampler = ExactSampler()" ] diff --git a/docs/circuit_cutting/how-tos/how_to_generate_exact_sampling_coefficients.ipynb b/docs/circuit_cutting/how-tos/how_to_generate_exact_sampling_coefficients.ipynb index b1976bfa2..88c4dbd45 100644 --- a/docs/circuit_cutting/how-tos/how_to_generate_exact_sampling_coefficients.ipynb +++ b/docs/circuit_cutting/how-tos/how_to_generate_exact_sampling_coefficients.ipynb @@ -23,7 +23,7 @@ "from qiskit.circuit.library import EfficientSU2\n", "from qiskit.quantum_info import SparsePauliOp\n", "\n", - "from circuit_knitting.cutting import (\n", + "from qiskit_addon_cutting import (\n", " partition_problem,\n", " generate_cutting_experiments,\n", ")" @@ -236,7 +236,7 @@ } ], "source": [ - "from circuit_knitting.cutting.qpd import QPDBasis\n", + "from qiskit_addon_cutting.qpd import QPDBasis\n", "from qiskit.circuit.library.standard_gates import CXGate\n", "\n", "qpd_basis_cx = QPDBasis.from_instruction(CXGate())\n", diff --git a/docs/circuit_cutting/how-tos/how_to_specify_cut_wires.ipynb b/docs/circuit_cutting/how-tos/how_to_specify_cut_wires.ipynb index 380971d51..1711d23c0 100644 --- a/docs/circuit_cutting/how-tos/how_to_specify_cut_wires.ipynb +++ b/docs/circuit_cutting/how-tos/how_to_specify_cut_wires.ipynb @@ -22,14 +22,14 @@ "from qiskit.quantum_info import SparsePauliOp\n", "from qiskit_aer.primitives import EstimatorV2, SamplerV2\n", "\n", - "from circuit_knitting.cutting import (\n", + "from qiskit_addon_cutting import (\n", " partition_problem,\n", " generate_cutting_experiments,\n", " reconstruct_expectation_values,\n", ")\n", "\n", - "from circuit_knitting.cutting.instructions import CutWire\n", - "from circuit_knitting.cutting import cut_wires, expand_observables" + "from qiskit_addon_cutting.instructions import CutWire\n", + "from qiskit_addon_cutting import cut_wires, expand_observables" ] }, { diff --git a/docs/circuit_cutting/tutorials/01_gate_cutting_to_reduce_circuit_width.ipynb b/docs/circuit_cutting/tutorials/01_gate_cutting_to_reduce_circuit_width.ipynb index 29d48ae8b..ac2480fa0 100644 --- a/docs/circuit_cutting/tutorials/01_gate_cutting_to_reduce_circuit_width.ipynb +++ b/docs/circuit_cutting/tutorials/01_gate_cutting_to_reduce_circuit_width.ipynb @@ -90,7 +90,7 @@ "metadata": {}, "outputs": [], "source": [ - "from circuit_knitting.cutting import partition_problem\n", + "from qiskit_addon_cutting import partition_problem\n", "\n", "partitioned_problem = partition_problem(\n", " circuit=qc, partition_labels=\"AABB\", observables=observable.paulis\n", @@ -232,7 +232,7 @@ "metadata": {}, "outputs": [], "source": [ - "from circuit_knitting.cutting import generate_cutting_experiments\n", + "from qiskit_addon_cutting import generate_cutting_experiments\n", "\n", "subexperiments, coefficients = generate_cutting_experiments(\n", " circuits=subcircuits, observables=subobservables, num_samples=np.inf\n", @@ -352,7 +352,7 @@ "metadata": {}, "outputs": [], "source": [ - "from circuit_knitting.cutting import reconstruct_expectation_values\n", + "from qiskit_addon_cutting import reconstruct_expectation_values\n", "\n", "# Get expectation values for each observable term\n", "reconstructed_expvals = reconstruct_expectation_values(\n", diff --git a/docs/circuit_cutting/tutorials/02_gate_cutting_to_reduce_circuit_depth.ipynb b/docs/circuit_cutting/tutorials/02_gate_cutting_to_reduce_circuit_depth.ipynb index 89507026e..ef67b7393 100644 --- a/docs/circuit_cutting/tutorials/02_gate_cutting_to_reduce_circuit_depth.ipynb +++ b/docs/circuit_cutting/tutorials/02_gate_cutting_to_reduce_circuit_depth.ipynb @@ -178,7 +178,7 @@ } ], "source": [ - "from circuit_knitting.cutting import cut_gates\n", + "from qiskit_addon_cutting import cut_gates\n", "\n", "# Find the indices of the distant gates\n", "cut_indices = [\n", @@ -215,7 +215,7 @@ "outputs": [], "source": [ "import numpy as np\n", - "from circuit_knitting.cutting import generate_cutting_experiments\n", + "from qiskit_addon_cutting import generate_cutting_experiments\n", "\n", "# Generate the subexperiments and sampling coefficients\n", "subexperiments, coefficients = generate_cutting_experiments(\n", @@ -357,7 +357,7 @@ "metadata": {}, "outputs": [], "source": [ - "from circuit_knitting.cutting import reconstruct_expectation_values\n", + "from qiskit_addon_cutting import reconstruct_expectation_values\n", "\n", "reconstructed_expvals = reconstruct_expectation_values(\n", " results,\n", diff --git a/docs/circuit_cutting/tutorials/03_wire_cutting_via_move_instruction.ipynb b/docs/circuit_cutting/tutorials/03_wire_cutting_via_move_instruction.ipynb index 3d427dd42..72c4f59db 100644 --- a/docs/circuit_cutting/tutorials/03_wire_cutting_via_move_instruction.ipynb +++ b/docs/circuit_cutting/tutorials/03_wire_cutting_via_move_instruction.ipynb @@ -136,7 +136,7 @@ } ], "source": [ - "from circuit_knitting.cutting.instructions import Move\n", + "from qiskit_addon_cutting.instructions import Move\n", "\n", "qc_1 = QuantumCircuit(8)\n", "for i in [*range(4), *range(5, 8)]:\n", @@ -193,7 +193,7 @@ "metadata": {}, "outputs": [], "source": [ - "from circuit_knitting.cutting import partition_problem\n", + "from qiskit_addon_cutting import partition_problem\n", "\n", "partitioned_problem = partition_problem(\n", " circuit=qc_1, partition_labels=\"AAAABBBB\", observables=observable_expanded.paulis\n", @@ -326,7 +326,7 @@ "metadata": {}, "outputs": [], "source": [ - "from circuit_knitting.cutting import generate_cutting_experiments\n", + "from qiskit_addon_cutting import generate_cutting_experiments\n", "\n", "subexperiments, coefficients = generate_cutting_experiments(\n", " circuits=subcircuits, observables=subobservables, num_samples=np.inf\n", @@ -446,7 +446,7 @@ "metadata": {}, "outputs": [], "source": [ - "from circuit_knitting.cutting import reconstruct_expectation_values\n", + "from qiskit_addon_cutting import reconstruct_expectation_values\n", "\n", "reconstructed_expvals = reconstruct_expectation_values(\n", " results,\n", diff --git a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb index c77bb832d..366cda7bd 100644 --- a/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb +++ b/docs/circuit_cutting/tutorials/04_automatic_cut_finding.ipynb @@ -78,7 +78,7 @@ } ], "source": [ - "from circuit_knitting.cutting.automated_cut_finding import (\n", + "from qiskit_addon_cutting.automated_cut_finding import (\n", " find_cuts,\n", " OptimizationParameters,\n", " DeviceConstraints,\n", @@ -126,7 +126,7 @@ } ], "source": [ - "from circuit_knitting.cutting import cut_wires, expand_observables\n", + "from qiskit_addon_cutting import cut_wires, expand_observables\n", "\n", "qc_w_ancilla = cut_wires(cut_circuit)\n", "observables_expanded = expand_observables(observable.paulis, circuit, qc_w_ancilla)\n", @@ -154,7 +154,7 @@ } ], "source": [ - "from circuit_knitting.cutting import partition_problem\n", + "from qiskit_addon_cutting import partition_problem\n", "\n", "partitioned_problem = partition_problem(\n", " circuit=qc_w_ancilla, observables=observables_expanded\n", @@ -250,7 +250,7 @@ } ], "source": [ - "from circuit_knitting.cutting import generate_cutting_experiments\n", + "from qiskit_addon_cutting import generate_cutting_experiments\n", "\n", "subexperiments, coefficients = generate_cutting_experiments(\n", " circuits=subcircuits, observables=subobservables, num_samples=1_000\n", diff --git a/docs/conf.py b/docs/conf.py index a7c9f7b97..370e5abd5 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -24,14 +24,14 @@ from importlib.metadata import version as metadata_version project = "Circuit Knitting Toolbox" -copyright = "2023" # pylint: disable=redefined-builtin +copyright = "2024" # pylint: disable=redefined-builtin author = "IBM Quantum" _rootdir = Path(__file__).parent.parent sys.path.insert(0, str(_rootdir)) # The full version, including alpha/beta/rc tags -release = metadata_version("circuit-knitting-toolbox") +release = metadata_version("qiskit-addon-cutting") # The short X.Y version version = ".".join(release.split(".")[:2]) @@ -59,7 +59,7 @@ language = "en" pygments_style = "colorful" add_module_names = False -modindex_common_prefix = ["circuit_knitting."] +modindex_common_prefix = ["qiskit_addon_cutting."] html_theme = "qiskit-ecosystem" html_title = f"{project} {release}" diff --git a/pyproject.toml b/pyproject.toml index 6dd13d3c7..e8a7a68b9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -3,8 +3,8 @@ requires = ["hatchling"] build-backend = "hatchling.build" [project] -name = "circuit-knitting-toolbox" -version = "0.7.1" +name = "qiskit-addon-cutting" +version = "0.9.0.dev" description = "A software prototype for a circuit knitting toolbox which connects user applications with runtime primitives" readme = "README.md" license = {file = "LICENSE.txt"} @@ -37,18 +37,18 @@ dependencies = [ [project.optional-dependencies] dev = [ - "circuit-knitting-toolbox[test,nbtest,lint]", + "qiskit-addon-cutting[test,nbtest,lint]", ] basetest = [ "pytest>=6.2.5", "pytest-randomly>=1.2.0", ] test = [ - "circuit-knitting-toolbox[basetest]", + "qiskit-addon-cutting[basetest]", "ddt>=1.4.4", ] nbtest = [ - "circuit-knitting-toolbox[basetest]", + "qiskit-addon-cutting[basetest]", "nbmake>=1.4.3" ] style = [ @@ -58,7 +58,7 @@ style = [ "nbqa>=1.6.0", ] lint = [ - "circuit-knitting-toolbox[style]", + "qiskit-addon-cutting[style]", "pydocstyle==6.3.0", "mypy==1.11.1", "reno>=3.4.0", @@ -88,7 +88,7 @@ notebook-dependencies = [ [tool.hatch.build.targets.wheel] only-include = [ - "circuit_knitting", + "qiskit_addon_cutting", ] [tool.autoflake] @@ -135,9 +135,9 @@ ignore_missing_imports = true #[tool.coverage.run] #omit = [ # # deprecated import location(s) -# "circuit_knitting/path/to/deprecated/module", +# "qiskit_addon_cutting/path/to/deprecated/module", #] [tool.pytest.ini_options] -testpaths = ["./circuit_knitting/", "./test/"] +testpaths = ["./qiskit_addon_cutting/", "./test/"] addopts = "--doctest-modules -rs --durations=10" diff --git a/circuit_knitting/cutting/__init__.py b/qiskit_addon_cutting/__init__.py similarity index 88% rename from circuit_knitting/cutting/__init__.py rename to qiskit_addon_cutting/__init__.py index bb015ef47..2864920b7 100644 --- a/circuit_knitting/cutting/__init__.py +++ b/qiskit_addon_cutting/__init__.py @@ -10,9 +10,9 @@ # that they have been altered from the originals. """ -Circuit Cutting (:mod:`circuit_knitting.cutting`). +Circuit Cutting (:mod:`qiskit_addon_cutting`). -.. currentmodule:: circuit_knitting.cutting +.. currentmodule:: qiskit_addon_cutting Circuit Cutting =============== @@ -78,6 +78,9 @@ qpd.qpdbasis_from_instruction """ +from __future__ import annotations +from importlib.metadata import version, PackageNotFoundError + from .cutting_decomposition import ( partition_circuit_qubits, partition_problem, @@ -89,6 +92,12 @@ from .wire_cutting_transforms import cut_wires, expand_observables from .automated_cut_finding import find_cuts, DeviceConstraints, OptimizationParameters +try: + __version__ = version("qiskit-addon-cutting") +except PackageNotFoundError: # pragma: no cover + # Package is not installed + pass + __all__ = [ "partition_circuit_qubits", "partition_problem", diff --git a/circuit_knitting/cutting/automated_cut_finding.py b/qiskit_addon_cutting/automated_cut_finding.py similarity index 100% rename from circuit_knitting/cutting/automated_cut_finding.py rename to qiskit_addon_cutting/automated_cut_finding.py diff --git a/circuit_knitting/cutting/cut_finding/__init__.py b/qiskit_addon_cutting/cut_finding/__init__.py similarity index 100% rename from circuit_knitting/cutting/cut_finding/__init__.py rename to qiskit_addon_cutting/cut_finding/__init__.py diff --git a/circuit_knitting/cutting/cut_finding/best_first_search.py b/qiskit_addon_cutting/cut_finding/best_first_search.py similarity index 100% rename from circuit_knitting/cutting/cut_finding/best_first_search.py rename to qiskit_addon_cutting/cut_finding/best_first_search.py diff --git a/circuit_knitting/cutting/cut_finding/cco_utils.py b/qiskit_addon_cutting/cut_finding/cco_utils.py similarity index 100% rename from circuit_knitting/cutting/cut_finding/cco_utils.py rename to qiskit_addon_cutting/cut_finding/cco_utils.py diff --git a/circuit_knitting/cutting/cut_finding/circuit_interface.py b/qiskit_addon_cutting/cut_finding/circuit_interface.py similarity index 100% rename from circuit_knitting/cutting/cut_finding/circuit_interface.py rename to qiskit_addon_cutting/cut_finding/circuit_interface.py diff --git a/circuit_knitting/cutting/cut_finding/cut_optimization.py b/qiskit_addon_cutting/cut_finding/cut_optimization.py similarity index 100% rename from circuit_knitting/cutting/cut_finding/cut_optimization.py rename to qiskit_addon_cutting/cut_finding/cut_optimization.py diff --git a/circuit_knitting/cutting/cut_finding/cutting_actions.py b/qiskit_addon_cutting/cut_finding/cutting_actions.py similarity index 100% rename from circuit_knitting/cutting/cut_finding/cutting_actions.py rename to qiskit_addon_cutting/cut_finding/cutting_actions.py diff --git a/circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py b/qiskit_addon_cutting/cut_finding/disjoint_subcircuits_state.py similarity index 100% rename from circuit_knitting/cutting/cut_finding/disjoint_subcircuits_state.py rename to qiskit_addon_cutting/cut_finding/disjoint_subcircuits_state.py diff --git a/circuit_knitting/cutting/cut_finding/lo_cuts_optimizer.py b/qiskit_addon_cutting/cut_finding/lo_cuts_optimizer.py similarity index 100% rename from circuit_knitting/cutting/cut_finding/lo_cuts_optimizer.py rename to qiskit_addon_cutting/cut_finding/lo_cuts_optimizer.py diff --git a/circuit_knitting/cutting/cut_finding/optimization_settings.py b/qiskit_addon_cutting/cut_finding/optimization_settings.py similarity index 100% rename from circuit_knitting/cutting/cut_finding/optimization_settings.py rename to qiskit_addon_cutting/cut_finding/optimization_settings.py diff --git a/circuit_knitting/cutting/cut_finding/search_space_generator.py b/qiskit_addon_cutting/cut_finding/search_space_generator.py similarity index 100% rename from circuit_knitting/cutting/cut_finding/search_space_generator.py rename to qiskit_addon_cutting/cut_finding/search_space_generator.py diff --git a/circuit_knitting/cutting/cutting_decomposition.py b/qiskit_addon_cutting/cutting_decomposition.py similarity index 98% rename from circuit_knitting/cutting/cutting_decomposition.py rename to qiskit_addon_cutting/cutting_decomposition.py index ef35e3bd0..9263918e3 100644 --- a/circuit_knitting/cutting/cutting_decomposition.py +++ b/qiskit_addon_cutting/cutting_decomposition.py @@ -24,8 +24,8 @@ ) from qiskit.quantum_info import PauliList -from ..utils.observable_grouping import observables_restricted_to_subsystem -from ..utils.transforms import separate_circuit, _partition_labels_from_circuit +from .utils.observable_grouping import observables_restricted_to_subsystem +from .utils.transforms import separate_circuit, _partition_labels_from_circuit from .qpd.qpd_basis import QPDBasis from .qpd.instructions import TwoQubitQPDGate diff --git a/circuit_knitting/cutting/cutting_experiments.py b/qiskit_addon_cutting/cutting_experiments.py similarity index 99% rename from circuit_knitting/cutting/cutting_experiments.py rename to qiskit_addon_cutting/cutting_experiments.py index f4945409e..9870b5f03 100644 --- a/circuit_knitting/cutting/cutting_experiments.py +++ b/qiskit_addon_cutting/cutting_experiments.py @@ -20,8 +20,8 @@ from qiskit.circuit import QuantumCircuit, ClassicalRegister from qiskit.quantum_info import PauliList -from ..utils.iteration import strict_zip -from ..utils.observable_grouping import ObservableCollection, CommutingObservableGroup +from .utils.iteration import strict_zip +from .utils.observable_grouping import ObservableCollection, CommutingObservableGroup from .qpd import ( WeightType, QPDBasis, diff --git a/circuit_knitting/cutting/cutting_reconstruction.py b/qiskit_addon_cutting/cutting_reconstruction.py similarity index 98% rename from circuit_knitting/cutting/cutting_reconstruction.py rename to qiskit_addon_cutting/cutting_reconstruction.py index 042158f65..96ec6067a 100644 --- a/circuit_knitting/cutting/cutting_reconstruction.py +++ b/qiskit_addon_cutting/cutting_reconstruction.py @@ -22,8 +22,8 @@ PrimitiveResult, # for SamplerV2 ) -from ..utils.observable_grouping import CommutingObservableGroup, ObservableCollection -from ..utils.bitwise import bit_count +from .utils.observable_grouping import CommutingObservableGroup, ObservableCollection +from .utils.bitwise import bit_count from .cutting_decomposition import decompose_observables from .cutting_experiments import _get_pauli_indices from .qpd import WeightType diff --git a/circuit_knitting/cutting/instructions/__init__.py b/qiskit_addon_cutting/instructions/__init__.py similarity index 100% rename from circuit_knitting/cutting/instructions/__init__.py rename to qiskit_addon_cutting/instructions/__init__.py diff --git a/circuit_knitting/cutting/instructions/cut_wire.py b/qiskit_addon_cutting/instructions/cut_wire.py similarity index 100% rename from circuit_knitting/cutting/instructions/cut_wire.py rename to qiskit_addon_cutting/instructions/cut_wire.py diff --git a/circuit_knitting/cutting/instructions/move.py b/qiskit_addon_cutting/instructions/move.py similarity index 97% rename from circuit_knitting/cutting/instructions/move.py rename to qiskit_addon_cutting/instructions/move.py index ff1806fdc..ebe8ac825 100644 --- a/circuit_knitting/cutting/instructions/move.py +++ b/qiskit_addon_cutting/instructions/move.py @@ -52,7 +52,7 @@ class Move(Instruction): import numpy as np from qiskit import QuantumCircuit - from circuit_knitting.cutting.instructions import Move + from qiskit_addon_cutting.instructions import Move qc = QuantumCircuit(4) qc.ryy(np.pi / 4, 0, 1) diff --git a/circuit_knitting/cutting/qpd/__init__.py b/qiskit_addon_cutting/qpd/__init__.py similarity index 100% rename from circuit_knitting/cutting/qpd/__init__.py rename to qiskit_addon_cutting/qpd/__init__.py diff --git a/circuit_knitting/cutting/qpd/decompose.py b/qiskit_addon_cutting/qpd/decompose.py similarity index 100% rename from circuit_knitting/cutting/qpd/decompose.py rename to qiskit_addon_cutting/qpd/decompose.py diff --git a/circuit_knitting/cutting/qpd/decompositions.py b/qiskit_addon_cutting/qpd/decompositions.py similarity index 99% rename from circuit_knitting/cutting/qpd/decompositions.py rename to qiskit_addon_cutting/qpd/decompositions.py index 0b6bf9a29..5c0580d9f 100644 --- a/circuit_knitting/cutting/qpd/decompositions.py +++ b/qiskit_addon_cutting/qpd/decompositions.py @@ -62,7 +62,7 @@ from .qpd_basis import QPDBasis from .instructions import QPDMeasure from ..instructions import Move -from ...utils.iteration import unique_by_id +from ..utils.iteration import unique_by_id _qpdbasis_from_instruction_funcs: dict[str, Callable[[Instruction], QPDBasis]] = {} diff --git a/circuit_knitting/cutting/qpd/instructions/__init__.py b/qiskit_addon_cutting/qpd/instructions/__init__.py similarity index 100% rename from circuit_knitting/cutting/qpd/instructions/__init__.py rename to qiskit_addon_cutting/qpd/instructions/__init__.py diff --git a/circuit_knitting/cutting/qpd/instructions/qpd_gate.py b/qiskit_addon_cutting/qpd/instructions/qpd_gate.py similarity index 100% rename from circuit_knitting/cutting/qpd/instructions/qpd_gate.py rename to qiskit_addon_cutting/qpd/instructions/qpd_gate.py diff --git a/circuit_knitting/cutting/qpd/instructions/qpd_measure.py b/qiskit_addon_cutting/qpd/instructions/qpd_measure.py similarity index 100% rename from circuit_knitting/cutting/qpd/instructions/qpd_measure.py rename to qiskit_addon_cutting/qpd/instructions/qpd_measure.py diff --git a/circuit_knitting/cutting/qpd/qpd_basis.py b/qiskit_addon_cutting/qpd/qpd_basis.py similarity index 100% rename from circuit_knitting/cutting/qpd/qpd_basis.py rename to qiskit_addon_cutting/qpd/qpd_basis.py diff --git a/circuit_knitting/cutting/qpd/weights.py b/qiskit_addon_cutting/qpd/weights.py similarity index 99% rename from circuit_knitting/cutting/qpd/weights.py rename to qiskit_addon_cutting/qpd/weights.py index 940e30d7a..a49878686 100644 --- a/circuit_knitting/cutting/qpd/weights.py +++ b/qiskit_addon_cutting/qpd/weights.py @@ -24,7 +24,7 @@ import numpy.typing as npt from .qpd_basis import QPDBasis -from ...utils.iteration import strict_zip +from ..utils.iteration import strict_zip logger = logging.getLogger(__name__) diff --git a/circuit_knitting/utils/__init__.py b/qiskit_addon_cutting/utils/__init__.py similarity index 64% rename from circuit_knitting/utils/__init__.py rename to qiskit_addon_cutting/utils/__init__.py index ecf71eb3c..52546a5b2 100644 --- a/circuit_knitting/utils/__init__.py +++ b/qiskit_addon_cutting/utils/__init__.py @@ -13,38 +13,38 @@ Utility functions. ================================================================= -Bitwise utilities (:mod:`circuit_knitting.utils.bitwise`) +Bitwise utilities (:mod:`qiskit_addon_cutting.utils.bitwise`) ================================================================= -.. automodule:: circuit_knitting.utils.bitwise +.. automodule:: qiskit_addon_cutting.utils.bitwise ===================================================================== -Iteration utilities (:mod:`circuit_knitting.utils.iteration`) +Iteration utilities (:mod:`qiskit_addon_cutting.utils.iteration`) ===================================================================== -.. automodule:: circuit_knitting.utils.iteration +.. automodule:: qiskit_addon_cutting.utils.iteration =============================================================================== -Observable grouping (:mod:`circuit_knitting.utils.observable_grouping`) +Observable grouping (:mod:`qiskit_addon_cutting.utils.observable_grouping`) =============================================================================== -.. automodule:: circuit_knitting.utils.observable_grouping +.. automodule:: qiskit_addon_cutting.utils.observable_grouping ============================================================= -Simulation (:mod:`circuit_knitting.utils.simulation`) +Simulation (:mod:`qiskit_addon_cutting.utils.simulation`) ============================================================= -.. automodule:: circuit_knitting.utils.simulation +.. automodule:: qiskit_addon_cutting.utils.simulation ============================================================= -Transforms (:mod:`circuit_knitting.utils.transforms`) +Transforms (:mod:`qiskit_addon_cutting.utils.transforms`) ============================================================= -.. automodule:: circuit_knitting.utils.transforms +.. automodule:: qiskit_addon_cutting.utils.transforms -=================================================================== -Transpiler passes (:mod:`circuit_knitting.utils.transpiler_passes`) -=================================================================== +======================================================================= +Transpiler passes (:mod:`qiskit_addon_cutting.utils.transpiler_passes`) +======================================================================= -.. automodule:: circuit_knitting.utils.transpiler_passes +.. automodule:: qiskit_addon_cutting.utils.transpiler_passes """ diff --git a/circuit_knitting/utils/bitwise.py b/qiskit_addon_cutting/utils/bitwise.py similarity index 94% rename from circuit_knitting/utils/bitwise.py rename to qiskit_addon_cutting/utils/bitwise.py index a002ee901..9cc114213 100644 --- a/circuit_knitting/utils/bitwise.py +++ b/qiskit_addon_cutting/utils/bitwise.py @@ -12,7 +12,7 @@ """ Bitwise utilities. -.. currentmodule:: circuit_knitting.utils.bitwise +.. currentmodule:: qiskit_addon_cutting.utils.bitwise .. autosummary:: :toctree: ../stubs/ diff --git a/circuit_knitting/utils/iteration.py b/qiskit_addon_cutting/utils/iteration.py similarity index 97% rename from circuit_knitting/utils/iteration.py rename to qiskit_addon_cutting/utils/iteration.py index 4fddb53a2..4104c0d90 100644 --- a/circuit_knitting/utils/iteration.py +++ b/qiskit_addon_cutting/utils/iteration.py @@ -12,7 +12,7 @@ """ Iteration utilities. -.. currentmodule:: circuit_knitting.utils.iteration +.. currentmodule:: qiskit_addon_cutting.utils.iteration .. autosummary:: :toctree: ../stubs/ diff --git a/circuit_knitting/utils/observable_grouping.py b/qiskit_addon_cutting/utils/observable_grouping.py similarity index 99% rename from circuit_knitting/utils/observable_grouping.py rename to qiskit_addon_cutting/utils/observable_grouping.py index 210fac1f1..05d26413b 100644 --- a/circuit_knitting/utils/observable_grouping.py +++ b/qiskit_addon_cutting/utils/observable_grouping.py @@ -12,7 +12,7 @@ """ Module for conducting Pauli observable grouping. -.. currentmodule:: circuit_knitting.utils.observable_grouping +.. currentmodule:: qiskit_addon_cutting.utils.observable_grouping .. autosummary:: :toctree: ../stubs diff --git a/circuit_knitting/utils/simulation.py b/qiskit_addon_cutting/utils/simulation.py similarity index 99% rename from circuit_knitting/utils/simulation.py rename to qiskit_addon_cutting/utils/simulation.py index c66b472a3..3417d959c 100644 --- a/circuit_knitting/utils/simulation.py +++ b/qiskit_addon_cutting/utils/simulation.py @@ -12,7 +12,7 @@ """ Simulation of precise measurement outcome probabilities. -.. currentmodule:: circuit_knitting.utils.simulation +.. currentmodule:: qiskit_addon_cutting.utils.simulation .. autosummary:: :toctree: ../stubs diff --git a/circuit_knitting/utils/transforms.py b/qiskit_addon_cutting/utils/transforms.py similarity index 99% rename from circuit_knitting/utils/transforms.py rename to qiskit_addon_cutting/utils/transforms.py index 2849d093e..bb6dfc264 100644 --- a/circuit_knitting/utils/transforms.py +++ b/qiskit_addon_cutting/utils/transforms.py @@ -12,7 +12,7 @@ """ Functions for manipulating quantum circuits. -.. currentmodule:: circuit_knitting.utils.transforms +.. currentmodule:: qiskit_addon_cutting.utils.transforms .. autosummary:: :toctree: ../stubs diff --git a/circuit_knitting/utils/transpiler_passes.py b/qiskit_addon_cutting/utils/transpiler_passes.py similarity index 96% rename from circuit_knitting/utils/transpiler_passes.py rename to qiskit_addon_cutting/utils/transpiler_passes.py index c4885461e..1b913f4ef 100644 --- a/circuit_knitting/utils/transpiler_passes.py +++ b/qiskit_addon_cutting/utils/transpiler_passes.py @@ -12,7 +12,7 @@ """ Transpiler passes useful for circuit knitting. -.. currentmodule:: circuit_knitting.utils.transpiler_passes +.. currentmodule:: qiskit_addon_cutting.utils.transpiler_passes .. autosummary:: :toctree: ../stubs/ diff --git a/circuit_knitting/cutting/wire_cutting_transforms.py b/qiskit_addon_cutting/wire_cutting_transforms.py similarity index 100% rename from circuit_knitting/cutting/wire_cutting_transforms.py rename to qiskit_addon_cutting/wire_cutting_transforms.py diff --git a/test/cutting/cut_finding/__init__.py b/test/cut_finding/__init__.py similarity index 100% rename from test/cutting/cut_finding/__init__.py rename to test/cut_finding/__init__.py diff --git a/test/cutting/cut_finding/test_best_first_search.py b/test/cut_finding/test_best_first_search.py similarity index 94% rename from test/cutting/cut_finding/test_best_first_search.py rename to test/cut_finding/test_best_first_search.py index 59a07fa40..d8d30b6df 100644 --- a/test/cutting/cut_finding/test_best_first_search.py +++ b/test/cut_finding/test_best_first_search.py @@ -15,12 +15,12 @@ from pytest import fixture from numpy import inf -from circuit_knitting.cutting.cut_finding.circuit_interface import ( +from qiskit_addon_cutting.cut_finding.circuit_interface import ( SimpleGateList, CircuitElement, GateSpec, ) -from circuit_knitting.cutting.cut_finding.cut_optimization import ( +from qiskit_addon_cutting.cut_finding.cut_optimization import ( cut_optimization_next_state_func, cut_optimization_min_cost_bound_func, cut_optimization_cost_func, @@ -29,19 +29,19 @@ CutOptimizationFuncArgs, CutOptimization, ) -from circuit_knitting.cutting.cut_finding.optimization_settings import ( +from qiskit_addon_cutting.cut_finding.optimization_settings import ( OptimizationSettings, ) -from circuit_knitting.cutting.automated_cut_finding import DeviceConstraints -from circuit_knitting.cutting.cut_finding.disjoint_subcircuits_state import ( +from qiskit_addon_cutting.automated_cut_finding import DeviceConstraints +from qiskit_addon_cutting.cut_finding.disjoint_subcircuits_state import ( get_actions_list, ) -from circuit_knitting.cutting.cut_finding.cutting_actions import ( +from qiskit_addon_cutting.cut_finding.cutting_actions import ( disjoint_subcircuit_actions, DisjointSubcircuitsState, ) -from circuit_knitting.cutting.cut_finding.best_first_search import ( +from qiskit_addon_cutting.cut_finding.best_first_search import ( BestFirstSearch, SearchFunctions, ) diff --git a/test/cutting/cut_finding/test_cco_utils.py b/test/cut_finding/test_cco_utils.py similarity index 97% rename from test/cutting/cut_finding/test_cco_utils.py rename to test/cut_finding/test_cco_utils.py index f4d39cbff..e3df835d0 100644 --- a/test/cutting/cut_finding/test_cco_utils.py +++ b/test/cut_finding/test_cco_utils.py @@ -19,11 +19,11 @@ from qiskit.circuit.library import EfficientSU2 from qiskit import QuantumCircuit, QuantumRegister from qiskit.circuit import Qubit, Instruction, CircuitInstruction -from circuit_knitting.cutting.cut_finding.cco_utils import ( +from qiskit_addon_cutting.cut_finding.cco_utils import ( qc_to_cco_circuit, cco_to_qc_circuit, ) -from circuit_knitting.cutting.cut_finding.circuit_interface import ( +from qiskit_addon_cutting.cut_finding.circuit_interface import ( SimpleGateList, CircuitElement, ) diff --git a/test/cutting/cut_finding/test_circuit_interfaces.py b/test/cut_finding/test_circuit_interfaces.py similarity index 98% rename from test/cutting/cut_finding/test_circuit_interfaces.py rename to test/cut_finding/test_circuit_interfaces.py index e0782ce99..a51abeedd 100644 --- a/test/cutting/cut_finding/test_circuit_interfaces.py +++ b/test/cut_finding/test_circuit_interfaces.py @@ -13,13 +13,13 @@ from __future__ import annotations -from circuit_knitting.cutting.cut_finding.circuit_interface import ( +from qiskit_addon_cutting.cut_finding.circuit_interface import ( CircuitElement, SimpleGateList, GateSpec, ) -from circuit_knitting.cutting.cut_finding.cut_optimization import ( +from qiskit_addon_cutting.cut_finding.cut_optimization import ( max_wire_cuts_circuit, max_wire_cuts_gamma, ) diff --git a/test/cutting/cut_finding/test_cut_finder_results.py b/test/cut_finding/test_cut_finder_results.py similarity index 97% rename from test/cutting/cut_finding/test_cut_finder_results.py rename to test/cut_finding/test_cut_finder_results.py index 0ecf9a351..ba20076c4 100644 --- a/test/cutting/cut_finding/test_cut_finder_results.py +++ b/test/cut_finding/test_cut_finder_results.py @@ -18,25 +18,25 @@ from pytest import raises from qiskit import QuantumCircuit from qiskit.circuit.library import EfficientSU2 -from circuit_knitting.cutting.cut_finding.cco_utils import qc_to_cco_circuit -from circuit_knitting.cutting.cut_finding.circuit_interface import ( +from qiskit_addon_cutting.cut_finding.cco_utils import qc_to_cco_circuit +from qiskit_addon_cutting.cut_finding.circuit_interface import ( SimpleGateList, ) -from circuit_knitting.cutting.cut_finding.optimization_settings import ( +from qiskit_addon_cutting.cut_finding.optimization_settings import ( OptimizationSettings, ) -from circuit_knitting.cutting.automated_cut_finding import DeviceConstraints -from circuit_knitting.cutting.cut_finding.disjoint_subcircuits_state import ( +from qiskit_addon_cutting.automated_cut_finding import DeviceConstraints +from qiskit_addon_cutting.cut_finding.disjoint_subcircuits_state import ( get_actions_list, SingleWireCutIdentifier, WireCutLocation, CutIdentifier, CutLocation, ) -from circuit_knitting.cutting.cut_finding.lo_cuts_optimizer import ( +from qiskit_addon_cutting.cut_finding.lo_cuts_optimizer import ( LOCutsOptimizer, ) -from circuit_knitting.cutting.cut_finding.cut_optimization import CutOptimization +from qiskit_addon_cutting.cut_finding.cut_optimization import CutOptimization class TestCuttingFourQubitCircuit(unittest.TestCase): diff --git a/test/cutting/cut_finding/test_cutting_actions.py b/test/cut_finding/test_cutting_actions.py similarity index 94% rename from test/cutting/cut_finding/test_cutting_actions.py rename to test/cut_finding/test_cutting_actions.py index 3b7fb48bc..056e7f831 100644 --- a/test/cutting/cut_finding/test_cutting_actions.py +++ b/test/cut_finding/test_cutting_actions.py @@ -15,24 +15,24 @@ from pytest import fixture from typing import Callable -from circuit_knitting.cutting.cut_finding.circuit_interface import ( +from qiskit_addon_cutting.cut_finding.circuit_interface import ( CircuitElement, SimpleGateList, GateSpec, ) -from circuit_knitting.cutting.cut_finding.cutting_actions import ( +from qiskit_addon_cutting.cut_finding.cutting_actions import ( ActionApplyGate, ActionCutTwoQubitGate, ActionCutLeftWire, ActionCutRightWire, ) -from circuit_knitting.cutting.cut_finding.disjoint_subcircuits_state import ( +from qiskit_addon_cutting.cut_finding.disjoint_subcircuits_state import ( DisjointSubcircuitsState, get_actions_list, CutIdentifier, CutLocation, ) -from circuit_knitting.cutting.cut_finding.search_space_generator import ActionNames +from qiskit_addon_cutting.cut_finding.search_space_generator import ActionNames @fixture diff --git a/test/cutting/cut_finding/test_disjoint_subcircuits_state.py b/test/cut_finding/test_disjoint_subcircuits_state.py similarity index 97% rename from test/cutting/cut_finding/test_disjoint_subcircuits_state.py rename to test/cut_finding/test_disjoint_subcircuits_state.py index 6bc14ef39..08eb8d271 100644 --- a/test/cutting/cut_finding/test_disjoint_subcircuits_state.py +++ b/test/cut_finding/test_disjoint_subcircuits_state.py @@ -15,13 +15,13 @@ from pytest import mark, raises, fixture from typing import Callable -from circuit_knitting.cutting.cut_finding.disjoint_subcircuits_state import ( +from qiskit_addon_cutting.cut_finding.disjoint_subcircuits_state import ( DisjointSubcircuitsState, ) -from circuit_knitting.cutting.cut_finding.cut_optimization import ( +from qiskit_addon_cutting.cut_finding.cut_optimization import ( disjoint_subcircuit_actions, ) -from circuit_knitting.cutting.cut_finding.circuit_interface import ( +from qiskit_addon_cutting.cut_finding.circuit_interface import ( SimpleGateList, CircuitElement, GateSpec, diff --git a/test/cutting/cut_finding/test_optimization_settings.py b/test/cut_finding/test_optimization_settings.py similarity index 96% rename from test/cutting/cut_finding/test_optimization_settings.py rename to test/cut_finding/test_optimization_settings.py index 251b2edd5..5a6866650 100644 --- a/test/cutting/cut_finding/test_optimization_settings.py +++ b/test/cut_finding/test_optimization_settings.py @@ -14,7 +14,7 @@ from __future__ import annotations import pytest -from circuit_knitting.cutting.cut_finding.optimization_settings import ( +from qiskit_addon_cutting.cut_finding.optimization_settings import ( OptimizationSettings, ) diff --git a/test/cutting/__init__.py b/test/cutting/__init__.py deleted file mode 100644 index 71d83fd8a..000000000 --- a/test/cutting/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# This code is a Qiskit project. - -# (C) Copyright IBM 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. diff --git a/test/cutting/qpd/__init__.py b/test/qpd/__init__.py similarity index 100% rename from test/cutting/qpd/__init__.py rename to test/qpd/__init__.py diff --git a/test/cutting/qpd/instructions/test_qpd_gate.py b/test/qpd/instructions/test_qpd_gate.py similarity index 98% rename from test/cutting/qpd/instructions/test_qpd_gate.py rename to test/qpd/instructions/test_qpd_gate.py index 65064ce03..e5f91ccc6 100644 --- a/test/cutting/qpd/instructions/test_qpd_gate.py +++ b/test/qpd/instructions/test_qpd_gate.py @@ -19,7 +19,7 @@ from qiskit import QuantumCircuit, qpy from qiskit.circuit.library.standard_gates import CXGate, XGate, YGate, ZGate -from circuit_knitting.cutting.qpd import ( +from qiskit_addon_cutting.qpd import ( QPDBasis, TwoQubitQPDGate, SingleQubitQPDGate, diff --git a/test/cutting/qpd/instructions/test_qpd_measure.py b/test/qpd/instructions/test_qpd_measure.py similarity index 92% rename from test/cutting/qpd/instructions/test_qpd_measure.py rename to test/qpd/instructions/test_qpd_measure.py index 07271ab28..e72a88b5d 100644 --- a/test/cutting/qpd/instructions/test_qpd_measure.py +++ b/test/qpd/instructions/test_qpd_measure.py @@ -13,7 +13,7 @@ import unittest -from circuit_knitting.cutting.qpd import QPDMeasure +from qiskit_addon_cutting.qpd import QPDMeasure class TestQPDMeasure(unittest.TestCase): diff --git a/test/cutting/qpd/test_qpd.py b/test/qpd/test_qpd.py similarity index 98% rename from test/cutting/qpd/test_qpd.py rename to test/qpd/test_qpd.py index a3478d040..c3641c294 100644 --- a/test/cutting/qpd/test_qpd.py +++ b/test/qpd/test_qpd.py @@ -46,9 +46,9 @@ DCXGate, ) -from circuit_knitting.utils.iteration import unique_by_eq, strict_zip -from circuit_knitting.cutting.instructions import Move -from circuit_knitting.cutting.qpd import ( +from qiskit_addon_cutting.utils.iteration import unique_by_eq, strict_zip +from qiskit_addon_cutting.instructions import Move +from qiskit_addon_cutting.qpd import ( QPDBasis, SingleQubitQPDGate, TwoQubitQPDGate, @@ -57,11 +57,11 @@ decompose_qpd_instructions, qpdbasis_from_instruction, ) -from circuit_knitting.cutting.qpd.weights import ( +from qiskit_addon_cutting.qpd.weights import ( _generate_qpd_weights, _generate_exact_weights_and_conditional_probabilities, ) -from circuit_knitting.cutting.qpd.decompositions import ( +from qiskit_addon_cutting.qpd.decompositions import ( _nonlocal_qpd_basis_from_u, _u_from_thetavec, _explicitly_supported_instructions, diff --git a/test/cutting/qpd/test_qpd_basis.py b/test/qpd/test_qpd_basis.py similarity index 99% rename from test/cutting/qpd/test_qpd_basis.py rename to test/qpd/test_qpd_basis.py index 57e0052d6..ace200598 100644 --- a/test/cutting/qpd/test_qpd_basis.py +++ b/test/qpd/test_qpd_basis.py @@ -19,7 +19,7 @@ from qiskit.circuit import Parameter from qiskit.circuit.library.standard_gates import * -from circuit_knitting.cutting.qpd import QPDBasis, QPDMeasure +from qiskit_addon_cutting.qpd import QPDBasis, QPDMeasure class TestQPDBasis(unittest.TestCase): diff --git a/test/cutting/test_cutting_decomposition.py b/test/test_cutting_decomposition.py similarity index 98% rename from test/cutting/test_cutting_decomposition.py rename to test/test_cutting_decomposition.py index 2595f1cca..951a45afe 100644 --- a/test/cutting/test_cutting_decomposition.py +++ b/test/test_cutting_decomposition.py @@ -21,13 +21,13 @@ from qiskit.circuit.library.standard_gates import CXGate from qiskit.quantum_info import PauliList -from circuit_knitting.cutting import ( +from qiskit_addon_cutting import ( partition_circuit_qubits, partition_problem, cut_gates, ) -from circuit_knitting.cutting.instructions import Move -from circuit_knitting.cutting.qpd import ( +from qiskit_addon_cutting.instructions import Move +from qiskit_addon_cutting.qpd import ( QPDBasis, TwoQubitQPDGate, BaseQPDGate, diff --git a/test/cutting/test_cutting_experiments.py b/test/test_cutting_experiments.py similarity index 97% rename from test/cutting/test_cutting_experiments.py rename to test/test_cutting_experiments.py index 47c6e15c0..c0ca059af 100644 --- a/test/cutting/test_cutting_experiments.py +++ b/test/test_cutting_experiments.py @@ -18,16 +18,16 @@ from qiskit.circuit import QuantumCircuit, QuantumRegister from qiskit.circuit.library.standard_gates import CXGate -from circuit_knitting.cutting.qpd import ( +from qiskit_addon_cutting.qpd import ( SingleQubitQPDGate, TwoQubitQPDGate, QPDBasis, ) -from circuit_knitting.utils.observable_grouping import CommutingObservableGroup -from circuit_knitting.cutting import generate_cutting_experiments -from circuit_knitting.cutting.qpd import WeightType -from circuit_knitting.cutting import partition_problem -from circuit_knitting.cutting.cutting_experiments import ( +from qiskit_addon_cutting.utils.observable_grouping import CommutingObservableGroup +from qiskit_addon_cutting import generate_cutting_experiments +from qiskit_addon_cutting.qpd import WeightType +from qiskit_addon_cutting import partition_problem +from qiskit_addon_cutting.cutting_experiments import ( _append_measurement_register, _append_measurement_circuit, _remove_final_resets, diff --git a/test/cutting/test_cutting_reconstruction.py b/test/test_cutting_reconstruction.py similarity index 97% rename from test/cutting/test_cutting_reconstruction.py rename to test/test_cutting_reconstruction.py index 7b2495b5d..d7b0ef11e 100644 --- a/test/cutting/test_cutting_reconstruction.py +++ b/test/test_cutting_reconstruction.py @@ -24,9 +24,9 @@ from qiskit.primitives.containers import make_data_bin from qiskit.quantum_info import Pauli, PauliList, SparsePauliOp -from circuit_knitting.utils.observable_grouping import CommutingObservableGroup -from circuit_knitting.cutting.qpd import WeightType -from circuit_knitting.cutting.cutting_reconstruction import ( +from qiskit_addon_cutting.utils.observable_grouping import CommutingObservableGroup +from qiskit_addon_cutting.qpd import WeightType +from qiskit_addon_cutting.cutting_reconstruction import ( _process_outcome, reconstruct_expectation_values, ) diff --git a/test/cutting/test_cutting_roundtrip.py b/test/test_cutting_roundtrip.py similarity index 97% rename from test/cutting/test_cutting_roundtrip.py rename to test/test_cutting_roundtrip.py index 43999c199..92d0a4252 100644 --- a/test/cutting/test_cutting_roundtrip.py +++ b/test/test_cutting_roundtrip.py @@ -46,13 +46,13 @@ from qiskit_aer import AerSimulator from qiskit_aer.primitives import Sampler, EstimatorV2 -from circuit_knitting.utils.simulation import ExactSampler -from circuit_knitting.cutting import ( +from qiskit_addon_cutting.utils.simulation import ExactSampler +from qiskit_addon_cutting import ( partition_problem, generate_cutting_experiments, reconstruct_expectation_values, ) -from circuit_knitting.cutting.instructions import Move +from qiskit_addon_cutting.instructions import Move logger = logging.getLogger(__name__) diff --git a/test/cutting/test_cutting_workflows.py b/test/test_cutting_workflows.py similarity index 96% rename from test/cutting/test_cutting_workflows.py rename to test/test_cutting_workflows.py index 406d92816..d79a348e9 100644 --- a/test/cutting/test_cutting_workflows.py +++ b/test/test_cutting_workflows.py @@ -23,10 +23,10 @@ from qiskit_ibm_runtime import SamplerV2 from qiskit_aer import AerSimulator -from circuit_knitting.cutting.qpd.instructions import SingleQubitQPDGate -from circuit_knitting.cutting.qpd import QPDBasis -from circuit_knitting.cutting.instructions import CutWire, Move -from circuit_knitting.cutting import ( +from qiskit_addon_cutting.qpd.instructions import SingleQubitQPDGate +from qiskit_addon_cutting.qpd import QPDBasis +from qiskit_addon_cutting.instructions import CutWire, Move +from qiskit_addon_cutting import ( partition_problem, generate_cutting_experiments, reconstruct_expectation_values, diff --git a/test/cutting/test_find_cuts.py b/test/test_find_cuts.py similarity index 98% rename from test/cutting/test_find_cuts.py rename to test/test_find_cuts.py index 559869ba1..5a8f2d67d 100644 --- a/test/cutting/test_find_cuts.py +++ b/test/test_find_cuts.py @@ -19,7 +19,7 @@ from qiskit import QuantumCircuit from qiskit.circuit.library import EfficientSU2 -from circuit_knitting.cutting.automated_cut_finding import ( +from qiskit_addon_cutting.automated_cut_finding import ( find_cuts, OptimizationParameters, DeviceConstraints, @@ -31,7 +31,6 @@ def test_find_cuts(self): with self.subTest("simple circuit"): path_to_circuit = os.path.join( os.path.dirname(__file__), - "..", "qasm_circuits", "circuit_find_cuts_test.qasm", ) diff --git a/test/cutting/test_wire_cutting_transforms.py b/test/test_wire_cutting_transforms.py similarity index 97% rename from test/cutting/test_wire_cutting_transforms.py rename to test/test_wire_cutting_transforms.py index a6c5c0a40..498993d63 100644 --- a/test/cutting/test_wire_cutting_transforms.py +++ b/test/test_wire_cutting_transforms.py @@ -16,10 +16,10 @@ from pytest import fixture, mark, raises from qiskit.circuit import QuantumCircuit, QuantumRegister, Qubit, ClassicalRegister from qiskit.quantum_info import PauliList -from circuit_knitting.cutting.instructions import Move, CutWire -from circuit_knitting.cutting.qpd.instructions import TwoQubitQPDGate -from circuit_knitting.cutting import cut_wires, expand_observables -from circuit_knitting.cutting.wire_cutting_transforms import _transform_cuts_to_moves +from qiskit_addon_cutting.instructions import Move, CutWire +from qiskit_addon_cutting.qpd.instructions import TwoQubitQPDGate +from qiskit_addon_cutting import cut_wires, expand_observables +from qiskit_addon_cutting.wire_cutting_transforms import _transform_cuts_to_moves @fixture diff --git a/test/utils/test_iteration.py b/test/utils/test_iteration.py index dad24f1de..24b755901 100644 --- a/test/utils/test_iteration.py +++ b/test/utils/test_iteration.py @@ -9,7 +9,7 @@ # copyright notice, and modified files need to carry a notice indicating # that they have been altered from the originals. -from circuit_knitting.utils.iteration import ( +from qiskit_addon_cutting.utils.iteration import ( unique_by_id, unique_by_eq, strict_zip, diff --git a/test/utils/test_observable_grouping.py b/test/utils/test_observable_grouping.py index a193262f1..199d66858 100644 --- a/test/utils/test_observable_grouping.py +++ b/test/utils/test_observable_grouping.py @@ -17,7 +17,7 @@ from qiskit.quantum_info import Pauli, PauliList from qiskit.circuit import QuantumCircuit, ClassicalRegister -from circuit_knitting.utils.observable_grouping import * +from qiskit_addon_cutting.utils.observable_grouping import * @ddt diff --git a/test/utils/test_simulation.py b/test/utils/test_simulation.py index 94d4b4ebf..23874a212 100644 --- a/test/utils/test_simulation.py +++ b/test/utils/test_simulation.py @@ -15,7 +15,7 @@ import numpy as np from qiskit import QuantumCircuit -from circuit_knitting.utils.simulation import ( +from qiskit_addon_cutting.utils.simulation import ( simulate_statevector_outcomes, ExactSampler, ) diff --git a/test/utils/test_transforms.py b/test/utils/test_transforms.py index 181a7b27f..2fdbebdcc 100644 --- a/test/utils/test_transforms.py +++ b/test/utils/test_transforms.py @@ -23,13 +23,13 @@ from qiskit.circuit.library import EfficientSU2, Measure from qiskit.circuit.library.standard_gates import RZZGate -from circuit_knitting.cutting import partition_circuit_qubits -from circuit_knitting.cutting.qpd import ( +from qiskit_addon_cutting import partition_circuit_qubits +from qiskit_addon_cutting.qpd import ( decompose_qpd_instructions, TwoQubitQPDGate, ) -from circuit_knitting.utils.transforms import separate_circuit -from circuit_knitting.utils.iteration import strict_zip +from qiskit_addon_cutting.utils.transforms import separate_circuit +from qiskit_addon_cutting.utils.iteration import strict_zip def prepare_hwea(): diff --git a/test/utils/test_transpiler_passes.py b/test/utils/test_transpiler_passes.py index bf195a77d..84cbc9cb3 100644 --- a/test/utils/test_transpiler_passes.py +++ b/test/utils/test_transpiler_passes.py @@ -19,7 +19,10 @@ from qiskit.passmanager.flow_controllers import DoWhileController from qiskit.converters import circuit_to_dag -from circuit_knitting.utils.transpiler_passes import RemoveFinalReset, ConsolidateResets +from qiskit_addon_cutting.utils.transpiler_passes import ( + RemoveFinalReset, + ConsolidateResets, +) class TestRemoveFinalReset(unittest.TestCase): diff --git a/tox.ini b/tox.ini index 4ca775f01..df8b06c01 100644 --- a/tox.ini +++ b/tox.ini @@ -13,23 +13,23 @@ commands = extras = style commands = - ruff check --fix circuit_knitting/ docs/ test/ tools/ + ruff check --fix qiskit_addon_cutting/ docs/ test/ tools/ nbqa ruff --fix docs/ - autoflake --in-place --recursive circuit_knitting/ docs/ test/ tools/ - black circuit_knitting/ docs/ test/ tools/ + autoflake --in-place --recursive qiskit_addon_cutting/ docs/ test/ tools/ + black qiskit_addon_cutting/ docs/ test/ tools/ [testenv:lint] extras = lint commands = - ruff check circuit_knitting/ docs/ test/ tools/ + ruff check qiskit_addon_cutting/ docs/ test/ tools/ nbqa ruff docs/ - autoflake --check --quiet --recursive circuit_knitting/ docs/ test/ tools/ - black --check circuit_knitting/ docs/ test/ tools/ - pydocstyle circuit_knitting/ - mypy circuit_knitting/ + autoflake --check --quiet --recursive qiskit_addon_cutting/ docs/ test/ tools/ + black --check qiskit_addon_cutting/ docs/ test/ tools/ + pydocstyle qiskit_addon_cutting/ + mypy qiskit_addon_cutting/ reno lint - pylint -rn circuit_knitting/ test/ tools/ + pylint -rn qiskit_addon_cutting/ test/ tools/ nbqa pylint -rn docs/ [testenv:{,py-,py3-,py38-,py39-,py310-,py311-,py312-}notebook] @@ -45,7 +45,7 @@ deps = extras = test commands = - coverage3 run --source circuit_knitting --parallel-mode -m pytest --run-slow test/ --coverage {posargs} + coverage3 run --source qiskit_addon_cutting --parallel-mode -m pytest --run-slow test/ --coverage {posargs} coverage3 combine coverage3 html coverage3 report --fail-under=100 --show-missing From be27c254cf15348a239fc383726d469256ce36de Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Fri, 23 Aug 2024 15:57:53 -0400 Subject: [PATCH 08/26] Add note to README about the in-progress rename --- README.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/README.md b/README.md index af115783a..d3597f80c 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,7 @@ +:exclamation: _This repository is in the process of being renamed to `qiskit-addon-cutting`. The first release under the new name is expected by mid-September._ + +--- +
From 25d8e6c5ae7f6007b0dc16db7be37ec7df60687b Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Fri, 23 Aug 2024 16:09:34 -0400 Subject: [PATCH 09/26] Split `extremal-python-dependencies` out into its own subpackage (#635) * Split `extremal-python-dependencies` out into its own subpackage * Update pyproject.toml * Add README * Clarify tox minversion --- .../workflows/test_development_versions.yml | 4 +- .github/workflows/test_minimum_versions.yml | 6 +-- tools/extremal-python-dependencies/README.md | 40 +++++++++++++++++++ .../extremal_python_dependencies/__init__.py | 10 +++++ .../extremal_python_dependencies/main.py} | 5 +-- .../pyproject.toml | 38 ++++++++++++++++++ 6 files changed, 95 insertions(+), 8 deletions(-) create mode 100644 tools/extremal-python-dependencies/README.md create mode 100644 tools/extremal-python-dependencies/extremal_python_dependencies/__init__.py rename tools/{extremal-python-dependencies.py => extremal-python-dependencies/extremal_python_dependencies/main.py} (98%) mode change 100755 => 100644 create mode 100644 tools/extremal-python-dependencies/pyproject.toml diff --git a/.github/workflows/test_development_versions.yml b/.github/workflows/test_development_versions.yml index cac3d71fb..faf9a07d5 100644 --- a/.github/workflows/test_development_versions.yml +++ b/.github/workflows/test_development_versions.yml @@ -30,8 +30,8 @@ jobs: shell: bash run: | python -m pip install --upgrade pip tox - python -m pip install toml typer - python tools/extremal-python-dependencies.py pin-dependencies \ + python -m pip install ./tools/extremal-python-dependencies + extremal-python-dependencies pin-dependencies \ "qiskit @ git+https://github.com/Qiskit/qiskit.git" \ "qiskit-ibm-runtime @ git+https://github.com/Qiskit/qiskit-ibm-runtime.git" \ --inplace diff --git a/.github/workflows/test_minimum_versions.yml b/.github/workflows/test_minimum_versions.yml index bf454c7c1..0095b4963 100644 --- a/.github/workflows/test_minimum_versions.yml +++ b/.github/workflows/test_minimum_versions.yml @@ -28,9 +28,9 @@ jobs: shell: bash run: | python -m pip install --upgrade pip - python -m pip install toml typer - pip install "tox==$(python tools/extremal-python-dependencies.py get-tox-minversion)" - python tools/extremal-python-dependencies.py pin-dependencies-to-minimum --inplace + python -m pip install ./tools/extremal-python-dependencies + pip install "tox==$(extremal-python-dependencies get-tox-minversion)" + extremal-python-dependencies pin-dependencies-to-minimum --inplace - name: Modify tox.ini for more thorough check shell: bash run: | diff --git a/tools/extremal-python-dependencies/README.md b/tools/extremal-python-dependencies/README.md new file mode 100644 index 000000000..397cb58ac --- /dev/null +++ b/tools/extremal-python-dependencies/README.md @@ -0,0 +1,40 @@ +# extremal-python-dependencies + +Install extremal versions of package dependencies for more robust continuous integration testing, given a package that specifies its dependencies in a `pyproject.toml` file. + +For instance, one might use this utility to install the minimum supported version of each dependency before a CI run. Ensuring all tests then pass ensures that the code is indeed compatible with the range of package versions it claims to be compatible with, helping to prevent users from encountering broken installs. + +Another way to use this tool is to install development versions of certain packages. + +This utility works with dependencies specified in a `pyproject.toml` file. It modifies `pyproject.toml`, either by sending the transformed version to stdout (the default) or by modifying in place (which may be useful in CI scripts). + +## How to use + +The following snippet modifies `pyproject.toml` in place to test with the minimum supported version of each direct dependency, under the minimum supported [tox](https://tox.wiki/) version (as specified by `minversion` in `tox.ini`). + +```sh +pip install "tox==$(extremal-python-dependencies get-tox-minversion)" +extremal-python-dependencies pin-dependencies-to-minimum --inplace +tox -epy +``` + +The following snippet modifies `pyproject.toml` in place to test with the development version of one or more dependencies: + +```sh +extremal-python-dependencies pin-dependencies \ + "qiskit @ git+https://github.com/Qiskit/qiskit.git" \ + "qiskit-ibm-runtime @ git+https://github.com/Qiskit/qiskit-ibm-runtime.git" \ + --inplace +tox -epy +``` + +Each of the above patterns can be used in a CI script. + +## Caveats + +- The minimum versions of all optional dependencies installed simultaneously must be compatible with each other. +- This tool does not set the minimum supported version of transitive dependencies. + +## Similar tools + +- [requirements-builder](https://requirements-builder.readthedocs.io/) (builds requirements from a `setup.py` file instead of a `pyproject.toml` file) diff --git a/tools/extremal-python-dependencies/extremal_python_dependencies/__init__.py b/tools/extremal-python-dependencies/extremal_python_dependencies/__init__.py new file mode 100644 index 000000000..75efffef4 --- /dev/null +++ b/tools/extremal-python-dependencies/extremal_python_dependencies/__init__.py @@ -0,0 +1,10 @@ +# This code is a Qiskit project. + +# (C) Copyright IBM 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. diff --git a/tools/extremal-python-dependencies.py b/tools/extremal-python-dependencies/extremal_python_dependencies/main.py old mode 100755 new mode 100644 similarity index 98% rename from tools/extremal-python-dependencies.py rename to tools/extremal-python-dependencies/extremal_python_dependencies/main.py index e64e48b55..9f962331c --- a/tools/extremal-python-dependencies.py +++ b/tools/extremal-python-dependencies/extremal_python_dependencies/main.py @@ -1,4 +1,3 @@ -#!/usr/bin/env python3 # This code is a Qiskit project. # (C) Copyright IBM 2022. @@ -151,5 +150,5 @@ def _save_pyproject_toml(d: dict, inplace: bool) -> None: print(toml.dumps(d)) -if __name__ == "__main__": - app() +def main(): + return app() diff --git a/tools/extremal-python-dependencies/pyproject.toml b/tools/extremal-python-dependencies/pyproject.toml new file mode 100644 index 000000000..0023036dc --- /dev/null +++ b/tools/extremal-python-dependencies/pyproject.toml @@ -0,0 +1,38 @@ +[build-system] +requires = ["hatchling"] +build-backend = "hatchling.build" + +[project] +name = "extremal-python-dependencies" +version = "0.0.0" +description = "A utility for installing extremal versions of dependencies for more robust testing" +readme = "README.md" +license = {file = "../../LICENSE.txt"} +classifiers = [ + "Development Status :: 3 - Alpha", + "Intended Audience :: Developers", + "License :: OSI Approved :: Apache Software License", + "Natural Language :: English", + "Operating System :: MacOS", + "Operating System :: POSIX :: Linux", + "Programming Language :: Python :: 3.8", + "Programming Language :: Python :: 3.9", + "Programming Language :: Python :: 3.10", + "Programming Language :: Python :: 3.11", + "Programming Language :: Python :: 3.12", +] + +requires-python = ">=3.8" + +dependencies = [ + "toml==0.10.2", + "typer==0.12.3", +] + +[tool.hatch.build.targets.wheel] +only-include = [ + "extremal_python_dependencies", +] + +[project.scripts] +extremal-python-dependencies = "extremal_python_dependencies.main:main" From f71279c471465ab0c6b5da2474ce891a5d3fb76f Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Fri, 23 Aug 2024 16:29:54 -0400 Subject: [PATCH 10/26] Use `qiskit_addon_cutting.__version__` in `docs/conf.py` (#665) We might as well do this, to make sure it is set properly. And it fixes an instance of don't-repeat-yourself. --- docs/conf.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/conf.py b/docs/conf.py index 370e5abd5..1448e0ba7 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -21,7 +21,7 @@ import os import sys -from importlib.metadata import version as metadata_version +import qiskit_addon_cutting project = "Circuit Knitting Toolbox" copyright = "2024" # pylint: disable=redefined-builtin @@ -31,7 +31,7 @@ sys.path.insert(0, str(_rootdir)) # The full version, including alpha/beta/rc tags -release = metadata_version("qiskit-addon-cutting") +release = qiskit_addon_cutting.__version__ # The short X.Y version version = ".".join(release.split(".")[:2]) From 95a3ad2f57b58013683567a3f5ea80cf6df68e72 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 09:26:38 -0400 Subject: [PATCH 11/26] Bump mypy from 1.11.1 to 1.11.2 (#672) Bumps [mypy](https://github.com/python/mypy) from 1.11.1 to 1.11.2. - [Changelog](https://github.com/python/mypy/blob/master/CHANGELOG.md) - [Commits](https://github.com/python/mypy/compare/v1.11.1...v1.11.2) --- updated-dependencies: - dependency-name: mypy dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index e8a7a68b9..272218a36 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -60,7 +60,7 @@ style = [ lint = [ "qiskit-addon-cutting[style]", "pydocstyle==6.3.0", - "mypy==1.11.1", + "mypy==1.11.2", "reno>=3.4.0", "pylint==3.2.6", # pydocstyle prefers to parse our pyproject.toml, hence the following line From 5d842f5e5456c26f6bb17ce3b5b73a6b08e96c49 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 09:27:21 -0400 Subject: [PATCH 12/26] Bump pylint from 3.2.6 to 3.2.7 (#669) Bumps [pylint](https://github.com/pylint-dev/pylint) from 3.2.6 to 3.2.7. - [Release notes](https://github.com/pylint-dev/pylint/releases) - [Commits](https://github.com/pylint-dev/pylint/compare/v3.2.6...v3.2.7) --- updated-dependencies: - dependency-name: pylint dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 272218a36..f01216adc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -62,7 +62,7 @@ lint = [ "pydocstyle==6.3.0", "mypy==1.11.2", "reno>=3.4.0", - "pylint==3.2.6", + "pylint==3.2.7", # pydocstyle prefers to parse our pyproject.toml, hence the following line "toml", ] From 28ebf42bec2d6a9fd42955f2a31ea3c7dc06ed30 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Tue, 3 Sep 2024 09:27:56 -0400 Subject: [PATCH 13/26] Bump ruff from 0.5.5 to 0.6.3 (#671) Bumps [ruff](https://github.com/astral-sh/ruff) from 0.5.5 to 0.6.3. - [Release notes](https://github.com/astral-sh/ruff/releases) - [Changelog](https://github.com/astral-sh/ruff/blob/main/CHANGELOG.md) - [Commits](https://github.com/astral-sh/ruff/compare/0.5.5...0.6.3) --- updated-dependencies: - dependency-name: ruff dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index f01216adc..a3293c311 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -54,7 +54,7 @@ nbtest = [ style = [ "autoflake==2.3.1", "black[jupyter]~=24.1", - "ruff==0.5.5", + "ruff==0.6.3", "nbqa>=1.6.0", ] lint = [ From d27efbb755c6cdccd17b227eb86fc8ac6a816fbd Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Tue, 3 Sep 2024 17:01:41 -0400 Subject: [PATCH 14/26] Install extremal-python-dependencies from pypi (#673) * Install extremal-python-dependencies from pypi This removes extremal-python-dependencies from this repository, as it now lives at https://github.com/IBM/extremal-python-dependencies and has releases [available on PyPI](https://pypi.org/project/extremal-python-dependencies/). * Remove mentions of `tools/` directory from `tox.ini` --- .../workflows/test_development_versions.yml | 2 +- .github/workflows/test_minimum_versions.yml | 2 +- tools/extremal-python-dependencies/README.md | 40 ----- .../extremal_python_dependencies/__init__.py | 10 -- .../extremal_python_dependencies/main.py | 154 ------------------ .../pyproject.toml | 38 ----- tox.ini | 14 +- 7 files changed, 9 insertions(+), 251 deletions(-) delete mode 100644 tools/extremal-python-dependencies/README.md delete mode 100644 tools/extremal-python-dependencies/extremal_python_dependencies/__init__.py delete mode 100644 tools/extremal-python-dependencies/extremal_python_dependencies/main.py delete mode 100644 tools/extremal-python-dependencies/pyproject.toml diff --git a/.github/workflows/test_development_versions.yml b/.github/workflows/test_development_versions.yml index faf9a07d5..41aa68e2b 100644 --- a/.github/workflows/test_development_versions.yml +++ b/.github/workflows/test_development_versions.yml @@ -30,7 +30,7 @@ jobs: shell: bash run: | python -m pip install --upgrade pip tox - python -m pip install ./tools/extremal-python-dependencies + python -m pip install extremal-python-dependencies==0.0.3 extremal-python-dependencies pin-dependencies \ "qiskit @ git+https://github.com/Qiskit/qiskit.git" \ "qiskit-ibm-runtime @ git+https://github.com/Qiskit/qiskit-ibm-runtime.git" \ diff --git a/.github/workflows/test_minimum_versions.yml b/.github/workflows/test_minimum_versions.yml index 0095b4963..646766ee4 100644 --- a/.github/workflows/test_minimum_versions.yml +++ b/.github/workflows/test_minimum_versions.yml @@ -28,7 +28,7 @@ jobs: shell: bash run: | python -m pip install --upgrade pip - python -m pip install ./tools/extremal-python-dependencies + python -m pip install extremal-python-dependencies==0.0.3 pip install "tox==$(extremal-python-dependencies get-tox-minversion)" extremal-python-dependencies pin-dependencies-to-minimum --inplace - name: Modify tox.ini for more thorough check diff --git a/tools/extremal-python-dependencies/README.md b/tools/extremal-python-dependencies/README.md deleted file mode 100644 index 397cb58ac..000000000 --- a/tools/extremal-python-dependencies/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# extremal-python-dependencies - -Install extremal versions of package dependencies for more robust continuous integration testing, given a package that specifies its dependencies in a `pyproject.toml` file. - -For instance, one might use this utility to install the minimum supported version of each dependency before a CI run. Ensuring all tests then pass ensures that the code is indeed compatible with the range of package versions it claims to be compatible with, helping to prevent users from encountering broken installs. - -Another way to use this tool is to install development versions of certain packages. - -This utility works with dependencies specified in a `pyproject.toml` file. It modifies `pyproject.toml`, either by sending the transformed version to stdout (the default) or by modifying in place (which may be useful in CI scripts). - -## How to use - -The following snippet modifies `pyproject.toml` in place to test with the minimum supported version of each direct dependency, under the minimum supported [tox](https://tox.wiki/) version (as specified by `minversion` in `tox.ini`). - -```sh -pip install "tox==$(extremal-python-dependencies get-tox-minversion)" -extremal-python-dependencies pin-dependencies-to-minimum --inplace -tox -epy -``` - -The following snippet modifies `pyproject.toml` in place to test with the development version of one or more dependencies: - -```sh -extremal-python-dependencies pin-dependencies \ - "qiskit @ git+https://github.com/Qiskit/qiskit.git" \ - "qiskit-ibm-runtime @ git+https://github.com/Qiskit/qiskit-ibm-runtime.git" \ - --inplace -tox -epy -``` - -Each of the above patterns can be used in a CI script. - -## Caveats - -- The minimum versions of all optional dependencies installed simultaneously must be compatible with each other. -- This tool does not set the minimum supported version of transitive dependencies. - -## Similar tools - -- [requirements-builder](https://requirements-builder.readthedocs.io/) (builds requirements from a `setup.py` file instead of a `pyproject.toml` file) diff --git a/tools/extremal-python-dependencies/extremal_python_dependencies/__init__.py b/tools/extremal-python-dependencies/extremal_python_dependencies/__init__.py deleted file mode 100644 index 75efffef4..000000000 --- a/tools/extremal-python-dependencies/extremal_python_dependencies/__init__.py +++ /dev/null @@ -1,10 +0,0 @@ -# This code is a Qiskit project. - -# (C) Copyright IBM 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. diff --git a/tools/extremal-python-dependencies/extremal_python_dependencies/main.py b/tools/extremal-python-dependencies/extremal_python_dependencies/main.py deleted file mode 100644 index 9f962331c..000000000 --- a/tools/extremal-python-dependencies/extremal_python_dependencies/main.py +++ /dev/null @@ -1,154 +0,0 @@ -# This code is a Qiskit project. - -# (C) Copyright IBM 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. - -import re -import configparser -from typing import List - -import toml -import typer - - -# https://peps.python.org/pep-0508/#names -_name_re = re.compile(r"^([A-Z0-9][A-Z0-9._-]*[A-Z0-9])", re.IGNORECASE) - - -def mapfunc_replace(replacements: List[str]): - """Use the provided version(s) of certain packages""" - d: dict[str, str] = {} - for r in replacements: - match = _name_re.match(r) - if match is None: - raise RuntimeError(f"Replacement dependency does not match PEP 508: {r}") - name = match.group() - if name in d: - raise RuntimeError("Duplicate name") - d[name] = r - - def _mapfunc_replace(dep): - # Replace https://peps.python.org/pep-0508/#names with provided - # version, often a https://peps.python.org/pep-0440/#direct-references - match = _name_re.match(dep) - if match is None: - raise RuntimeError(f"Dependency does not match PEP 508: `{dep}`") - dep_name = match.group() - return d.get(dep_name, dep) - - return _mapfunc_replace - - -def mapfunc_minimum(dep): - """Set each dependency to its minimum version""" - for clause in dep.split(","): - if "*" in clause and "==" in clause: - raise ValueError( - "Asterisks in version specifiers are not currently supported " - "by the minimum version tests. We recommend using the " - "'compatible release' operator instead: " - "https://peps.python.org/pep-0440/#compatible-release" - ) - return re.sub(r"[>~]=", r"==", dep) - - -def inplace_map(fun, lst: list): - """In-place version of Python's `map` function""" - for i, x in enumerate(lst): - lst[i] = fun(x) - - -def process_dependencies_in_place(d: dict, mapfunc): - """Given a parsed `pyproject.toml`, process dependencies according to `mapfunc`""" - proj = d["project"] - - try: - deps = proj["dependencies"] - except KeyError: - pass # no dependencies; that's unusual, but fine. - else: - inplace_map(mapfunc, deps) - - try: - opt_deps = proj["optional-dependencies"] - except KeyError: - pass # no optional dependencies; that's fine. - else: - for dependencies_list in opt_deps.values(): - inplace_map(mapfunc, dependencies_list) - - try: - build_system = d["build-system"] - except KeyError: - pass - else: - try: - build_system_requires = build_system["requires"] - except KeyError: - pass - else: - inplace_map(mapfunc, build_system_requires) - - -app = typer.Typer() - - -@app.command() -def get_tox_minversion(): - """Extract tox minversion from `tox.ini`""" - config = configparser.ConfigParser() - config.read("tox.ini") - print(config["tox"]["minversion"]) - - -def _pin_dependencies(mapfunc, inplace: bool): - with open("pyproject.toml") as f: - d = toml.load(f) - process_dependencies_in_place(d, mapfunc) - - # Modify pyproject.toml so hatchling will allow direct references - # as dependencies. - d.setdefault("tool", {}).setdefault("hatch", {}).setdefault("metadata", {})[ - "allow-direct-references" - ] = True - - _save_pyproject_toml(d, inplace) - - -@app.command() -def pin_dependencies_to_minimum(inplace: bool = False): - """Pin all dependencies in `pyproject.toml` to their minimum versions.""" - _pin_dependencies(mapfunc_minimum, inplace) - - -@app.command() -def pin_dependencies(replacements: List[str], inplace: bool = False): - """Pin dependencies in `pyproject.toml` to the provided versions.""" - _pin_dependencies(mapfunc_replace(replacements), inplace) - - -@app.command() -def add_dependency(dependency: str, inplace: bool = False): - """Add a dependency to `pyproject.toml`.""" - with open("pyproject.toml") as f: - d = toml.load(f) - d["project"]["dependencies"].append(dependency) - _save_pyproject_toml(d, inplace) - - -def _save_pyproject_toml(d: dict, inplace: bool) -> None: - if inplace: - with open("pyproject.toml", "w") as f: - toml.dump(d, f) - else: - print(toml.dumps(d)) - - -def main(): - return app() diff --git a/tools/extremal-python-dependencies/pyproject.toml b/tools/extremal-python-dependencies/pyproject.toml deleted file mode 100644 index 0023036dc..000000000 --- a/tools/extremal-python-dependencies/pyproject.toml +++ /dev/null @@ -1,38 +0,0 @@ -[build-system] -requires = ["hatchling"] -build-backend = "hatchling.build" - -[project] -name = "extremal-python-dependencies" -version = "0.0.0" -description = "A utility for installing extremal versions of dependencies for more robust testing" -readme = "README.md" -license = {file = "../../LICENSE.txt"} -classifiers = [ - "Development Status :: 3 - Alpha", - "Intended Audience :: Developers", - "License :: OSI Approved :: Apache Software License", - "Natural Language :: English", - "Operating System :: MacOS", - "Operating System :: POSIX :: Linux", - "Programming Language :: Python :: 3.8", - "Programming Language :: Python :: 3.9", - "Programming Language :: Python :: 3.10", - "Programming Language :: Python :: 3.11", - "Programming Language :: Python :: 3.12", -] - -requires-python = ">=3.8" - -dependencies = [ - "toml==0.10.2", - "typer==0.12.3", -] - -[tool.hatch.build.targets.wheel] -only-include = [ - "extremal_python_dependencies", -] - -[project.scripts] -extremal-python-dependencies = "extremal_python_dependencies.main:main" diff --git a/tox.ini b/tox.ini index df8b06c01..d748393ef 100644 --- a/tox.ini +++ b/tox.ini @@ -13,23 +13,23 @@ commands = extras = style commands = - ruff check --fix qiskit_addon_cutting/ docs/ test/ tools/ + ruff check --fix qiskit_addon_cutting/ docs/ test/ nbqa ruff --fix docs/ - autoflake --in-place --recursive qiskit_addon_cutting/ docs/ test/ tools/ - black qiskit_addon_cutting/ docs/ test/ tools/ + autoflake --in-place --recursive qiskit_addon_cutting/ docs/ test/ + black qiskit_addon_cutting/ docs/ test/ [testenv:lint] extras = lint commands = - ruff check qiskit_addon_cutting/ docs/ test/ tools/ + ruff check qiskit_addon_cutting/ docs/ test/ nbqa ruff docs/ - autoflake --check --quiet --recursive qiskit_addon_cutting/ docs/ test/ tools/ - black --check qiskit_addon_cutting/ docs/ test/ tools/ + autoflake --check --quiet --recursive qiskit_addon_cutting/ docs/ test/ + black --check qiskit_addon_cutting/ docs/ test/ pydocstyle qiskit_addon_cutting/ mypy qiskit_addon_cutting/ reno lint - pylint -rn qiskit_addon_cutting/ test/ tools/ + pylint -rn qiskit_addon_cutting/ test/ nbqa pylint -rn docs/ [testenv:{,py-,py3-,py38-,py39-,py310-,py311-,py312-}notebook] From 28e949692340e61fed5b9b44baaefb1d95061b1a Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Wed, 4 Sep 2024 10:49:32 -0400 Subject: [PATCH 15/26] Update deprecation policy (#667) * Updated deprecation policy * drop "do our best to" * Update `index.rst` --- README.md | 2 +- docs/index.rst | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index d3597f80c..86de7246a 100644 --- a/README.md +++ b/README.md @@ -62,7 +62,7 @@ For information on installing from source, running CKT in a container, and platf ### Deprecation Policy -This project is meant to evolve rapidly and, as such, does not follow [Qiskit's deprecation policy](https://github.com/Qiskit/qiskit/blob/main/DEPRECATION.md). We may occasionally make breaking changes in order to improve the user experience. When possible, we will keep old interfaces and mark them as deprecated, as long as they can co-exist with the new ones. Each substantial improvement, breaking change, or deprecation will be documented in the [release notes](https://qiskit-extensions.github.io/circuit-knitting-toolbox/release-notes.html). +We follow [semantic versioning](https://semver.org/) and are guided by the principles in [Qiskit's deprecation policy](https://github.com/Qiskit/qiskit/blob/main/DEPRECATION.md). We may occasionally make breaking changes in order to improve the user experience. When possible, we will keep old interfaces and mark them as deprecated, as long as they can co-exist with the new ones. Each substantial improvement, breaking change, or deprecation will be documented in the [release notes](https://qiskit-extensions.github.io/circuit-knitting-toolbox/release-notes.html). ---------------------------------------------------------------------------------------------------- diff --git a/docs/index.rst b/docs/index.rst index 246ddc35b..d8022f570 100644 --- a/docs/index.rst +++ b/docs/index.rst @@ -14,7 +14,7 @@ The toolbox currently contains the following tools: For a more detailed discussion on circuit cutting, check out our `technical guide <./circuit_cutting/explanation/index.rst#overview-of-circuit-cutting>`__. -This project is meant to evolve rapidly and, as such, does not follow `Qiskit's deprecation policy `__. We may occasionally make breaking changes in order to improve the user experience. When possible, we will keep old interfaces and mark them as deprecated, as long as they can co-exist with the new ones. Each substantial improvement, breaking change, or deprecation will be documented in the :ref:`release notes`. +We follow `semantic versioning `__ and are guided by the principles in `Qiskit's deprecation policy `__. We may occasionally make breaking changes in order to improve the user experience. When possible, we will keep old interfaces and mark them as deprecated, as long as they can co-exist with the new ones. Each substantial improvement, breaking change, or deprecation will be documented in the :ref:`release notes`. Citing this project ------------------- From 6670aded89e0cd687f8abfa0399e2f9c7d774ac4 Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Thu, 5 Sep 2024 20:52:28 -0400 Subject: [PATCH 16/26] Remove "prototype" handling from `citation.yml` workflow (#677) * Remove "prototype" handling from `citation.yml` workflow * `preview.pdf` -> `citation-preview.pdf` --- .github/workflows/citation.yml | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/.github/workflows/citation.yml b/.github/workflows/citation.yml index f8cab13b2..6a018f0ff 100644 --- a/.github/workflows/citation.yml +++ b/.github/workflows/citation.yml @@ -34,36 +34,35 @@ jobs: run: | if [ -f "CITATION.bib" ]; then arr=(${GITHUB_REPOSITORY//\// }) - REPO=${arr[1]} - export PROTOTYPE=${REPO#"prototype-"} - cat <<- EOF > preview.tex + export REPO=${arr[1]} + cat <<- EOF > citation-preview.tex \documentclass[preprint,aps,physrev,notitlepage]{revtex4-2} \usepackage{hyperref} \begin{document} - \title{\texttt{$PROTOTYPE} BibTeX test} + \title{\texttt{$REPO} BibTeX test} \maketitle \noindent - \texttt{$PROTOTYPE} - \cite{$PROTOTYPE} + \texttt{$REPO} + \cite{$REPO} \bibliography{CITATION} \end{document} EOF - pdflatex preview + pdflatex citation-preview fi - name: Run BibTeX run: | if [ -f "CITATION.bib" ]; then - bibtex preview + bibtex citation-preview fi - name: Re-run LaTeX run: | if [ -f "CITATION.bib" ]; then - pdflatex preview - pdflatex preview + pdflatex citation-preview + pdflatex citation-preview fi - name: Upload PDF if: always() uses: actions/upload-artifact@v4 with: - name: preview.pdf - path: preview.pdf + name: citation-preview.pdf + path: citation-preview.pdf From d828281177041b1f0898878b6e692f9ef5dc4c95 Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Fri, 6 Sep 2024 13:26:15 -0400 Subject: [PATCH 17/26] Update release workflow (#674) --- .github/workflows/release.yml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index e9fb165da..80fde5991 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -26,22 +26,22 @@ jobs: name: pypi runs-on: ubuntu-latest needs: github + environment: + name: pypi + url: https://pypi.org/p/qiskit-addon-cutting + permissions: + id-token: write steps: - name: Checkout tag uses: actions/checkout@v4 with: ref: ${{ github.ref_name }} - - name: Install hatch + - name: Install `build` tool run: | python -m pip install --upgrade pip - pip install hatch - - name: Build using hatch + pip install build + - name: Build distribution run: | - hatch build - - name: Publish release - env: - HATCH_INDEX_REPO: https://upload.pypi.org/legacy/ - HATCH_INDEX_USER: __token__ - HATCH_INDEX_AUTH: ${{ secrets.PYPI_TOKEN }} - run: | - hatch publish + python -m build + - name: Publish release to PyPI + uses: pypa/gh-action-pypi-publish@release/v1 From 1ad9cda52a46a26e6fc8fd15fc781bed07df49cf Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Fri, 6 Sep 2024 13:27:30 -0400 Subject: [PATCH 18/26] Upgrade to qiskit-sphinx-theme 2.0.0 (#676) This upgrades to qiskit-sphinx-theme 2.0.0. It includes the Qiskit logo because the logo is no longer included in the theme. qiskit-sphinx-theme 2.0 supports dark mode as a new feature, so both light and dark versions of the logo are included. This implements the same change as the PR at https://github.com/Qiskit/qiskit-serverless/pull/1481. --- docs/_static/images/qiskit-dark-logo.svg | 178 ++++++++++++++++++++++ docs/_static/images/qiskit-light-logo.svg | 178 ++++++++++++++++++++++ docs/conf.py | 3 + pyproject.toml | 2 +- 4 files changed, 360 insertions(+), 1 deletion(-) create mode 100644 docs/_static/images/qiskit-dark-logo.svg create mode 100644 docs/_static/images/qiskit-light-logo.svg diff --git a/docs/_static/images/qiskit-dark-logo.svg b/docs/_static/images/qiskit-dark-logo.svg new file mode 100644 index 000000000..b52089083 --- /dev/null +++ b/docs/_static/images/qiskit-dark-logo.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/_static/images/qiskit-light-logo.svg b/docs/_static/images/qiskit-light-logo.svg new file mode 100644 index 000000000..25b27dd31 --- /dev/null +++ b/docs/_static/images/qiskit-light-logo.svg @@ -0,0 +1,178 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/docs/conf.py b/docs/conf.py index 1448e0ba7..ec2bb5465 100644 --- a/docs/conf.py +++ b/docs/conf.py @@ -80,7 +80,10 @@ "source_repository": "https://github.com/Qiskit-Extensions/circuit-knitting-toolbox/", "source_branch": "main", "source_directory": "docs/", + "dark_logo": "images/qiskit-dark-logo.svg", + "light_logo": "images/qiskit-light-logo.svg", } +html_static_path = ["_static"] # autodoc/autosummary options autosummary_generate = True diff --git a/pyproject.toml b/pyproject.toml index a3293c311..ead9dc1cb 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -74,7 +74,7 @@ docs = [ "nbsphinx>=0.8.8", "sphinx-copybutton>=0.5.0", "reno>=3.4.0", - "qiskit-sphinx-theme>=1.14.0, <2" + "qiskit-sphinx-theme>=2.0.0, <3" ] notebook-dependencies = [ "matplotlib", From 51e7096ccd44fbb8bd05c5d814ae8ff964b555db Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Tue, 10 Sep 2024 10:20:10 -0400 Subject: [PATCH 19/26] Rename package to qiskit-addon-cutting (#678) * Rename package to qiskit-addon-cutting This is a follow-up to #661, which contained only the necessary source code changes. * Update the Docker registry, don't specify a particular python version * Update description --- .github/workflows/docs.yml | 4 +- CITATION.bib | 8 +- CONTRIBUTING.md | 5 +- Dockerfile | 8 +- INSTALL.rst | 34 ++++---- README.md | 40 ++++----- SECURITY.md | 7 +- compose.yaml | 10 +-- docs/apidocs/index.rst | 6 +- docs/conf.py | 86 ++++++++++++++++--- .../explanation/index.rst | 26 +++--- docs/{circuit_cutting => }/how-tos/README.rst | 4 +- ...erate_exact_quasi_dists_from_sampler.ipynb | 0 ...generate_exact_sampling_coefficients.ipynb | 0 .../how-tos/how_to_specify_cut_wires.ipynb | 0 docs/{circuit_cutting => }/how-tos/index.rst | 0 docs/index.rst | 49 +++++------ ...gate_cutting_to_reduce_circuit_width.ipynb | 0 ...gate_cutting_to_reduce_circuit_depth.ipynb | 0 ...03_wire_cutting_via_move_instruction.ipynb | 0 .../tutorials/04_automatic_cut_finding.ipynb | 2 +- .../tutorials/README.rst | 4 +- .../{circuit_cutting => }/tutorials/index.rst | 0 pyproject.toml | 8 +- .../cut_finding/circuit_interface.py | 2 +- .../cut_finding/cutting_actions.py | 2 +- qiskit_addon_cutting/cutting_experiments.py | 4 +- qiskit_addon_cutting/instructions/move.py | 2 +- .../utils/observable_grouping.py | 2 +- .../0.7/prepare-0.7.0-48b344ae77523c34.yaml | 2 +- test/conftest.py | 2 +- test/test_cutting_roundtrip.py | 2 +- test/test_find_cuts.py | 2 +- test/utils/test_transpiler_passes.py | 2 +- 34 files changed, 186 insertions(+), 137 deletions(-) rename docs/{circuit_cutting => }/explanation/index.rst (91%) rename docs/{circuit_cutting => }/how-tos/README.rst (91%) rename docs/{circuit_cutting => }/how-tos/how_to_generate_exact_quasi_dists_from_sampler.ipynb (100%) rename docs/{circuit_cutting => }/how-tos/how_to_generate_exact_sampling_coefficients.ipynb (100%) rename docs/{circuit_cutting => }/how-tos/how_to_specify_cut_wires.ipynb (100%) rename docs/{circuit_cutting => }/how-tos/index.rst (100%) rename docs/{circuit_cutting => }/tutorials/01_gate_cutting_to_reduce_circuit_width.ipynb (100%) rename docs/{circuit_cutting => }/tutorials/02_gate_cutting_to_reduce_circuit_depth.ipynb (100%) rename docs/{circuit_cutting => }/tutorials/03_wire_cutting_via_move_instruction.ipynb (100%) rename docs/{circuit_cutting => }/tutorials/04_automatic_cut_finding.ipynb (99%) rename docs/{circuit_cutting => }/tutorials/README.rst (90%) rename docs/{circuit_cutting => }/tutorials/index.rst (100%) diff --git a/.github/workflows/docs.yml b/.github/workflows/docs.yml index e181deadf..b9e124a26 100644 --- a/.github/workflows/docs.yml +++ b/.github/workflows/docs.yml @@ -44,12 +44,12 @@ jobs: shell: bash run: | mkdir artifact - cp -a docs/_build/html artifact/ckt_html_docs + cp -a docs/_build/html artifact/qiskit-addon-cutting-htmldocs - name: Upload docs artifact if: always() uses: actions/upload-artifact@v4 with: - name: ckt_html_docs + name: qiskit-addon-cutting-htmldocs path: ./artifact - name: Deploy docs if: ${{ github.ref == 'refs/heads/stable/0.7' }} diff --git a/CITATION.bib b/CITATION.bib index 7f90b42a3..06b82f1f5 100644 --- a/CITATION.bib +++ b/CITATION.bib @@ -1,4 +1,4 @@ -@misc{circuit-knitting-toolbox, +@misc{qiskit-addon-cutting, author = { Agata M. Bra\'{n}czyk and Almudena {Carrera Vazquez} @@ -15,8 +15,8 @@ @misc{circuit-knitting-toolbox and Ibrahim Shehzad and Stefan Woerner }, - title = {{Circuit Knitting Toolbox}}, - howpublished = {\url{https://github.com/Qiskit-Extensions/circuit-knitting-toolbox}}, - year = {2023}, + title = {{Qiskit addon: circuit cutting}}, + howpublished = {\url{https://github.com/Qiskit/qiskit-addon-cutting}}, + year = {2024}, doi = {10.5281/zenodo.7987997} } diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 19f3f18a3..8ce24fb67 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -1,8 +1,8 @@ # Developer guide -Development of the Circuit Knitting Toolbox takes place [on GitHub](https://github.com/Qiskit-Extensions/circuit-knitting-toolbox). The [Contributing to Qiskit](https://github.com/Qiskit/qiskit/blob/main/CONTRIBUTING.md) guide may serve as a useful starting point, as the toolbox builds on [Qiskit] and is part of the [Qiskit Ecosystem]. +Development of the `qiskit-addon-cutting` package takes place [on GitHub](https://github.com/Qiskit/qiskit-addon-cutting). The [Contributing to Qiskit](https://github.com/Qiskit/qiskit/blob/main/CONTRIBUTING.md) guide may serve as a useful starting point, as this package builds on [Qiskit]. -The toolbox is written in [Python] and uses [tox] as a testing framework. A description of the available `tox` test environments is located at [`test/README.md`](test/README.md). These environments are used in the CI workflows, which are described at [`.github/workflows/README.md`](.github/workflows/README.md). +This package is written in [Python] and uses [tox] as a testing framework. A description of the available `tox` test environments is located at [`test/README.md`](test/README.md). These environments are used in the CI workflows, which are described at [`.github/workflows/README.md`](.github/workflows/README.md). Project configuration, including information about dependencies, is stored in [`pyproject.toml`](pyproject.toml). @@ -11,7 +11,6 @@ We use [Sphinx] for documentation and [reno] for release notes. We use [Google We require 100% coverage in all new code. In rare cases where it is not possible to test a code block, we mark it with ``# pragma: no cover`` so that the ``coverage`` tests will pass. [Qiskit]: https://www.ibm.com/quantum/qiskit -[Qiskit Ecosystem]: https://qiskit.github.io/ecosystem/ [Python]: https://www.python.org/ [tox]: https://github.com/tox-dev/tox [Sphinx]: https://www.sphinx-doc.org/ diff --git a/Dockerfile b/Dockerfile index 8a607a1dd..55806e286 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,4 +1,4 @@ -FROM jupyter/minimal-notebook:python-3.11 +FROM quay.io/jupyter/minimal-notebook LABEL maintainer="Jim Garrison " @@ -7,7 +7,7 @@ LABEL maintainer="Jim Garrison " RUN rm -rf work && \ mkdir .src -COPY . .src/circuit-knitting-toolbox +COPY . .src/qiskit-addon-cutting # Fix the permissions of ~/.src and ~/persistent-volume USER root @@ -17,7 +17,7 @@ USER ${NB_UID} # Consolidate the docs into the home directory RUN mkdir docs && \ - cp -a .src/circuit-knitting-toolbox/docs docs/circuit-knitting-toolbox + cp -a .src/qiskit-addon-cutting/docs docs/qiskit-addon-cutting # Pip install everything -RUN pip install -e '.src/circuit-knitting-toolbox[notebook-dependencies]' +RUN pip install -e '.src/qiskit-addon-cutting[notebook-dependencies]' diff --git a/INSTALL.rst b/INSTALL.rst index 0d84681b5..60b613f46 100644 --- a/INSTALL.rst +++ b/INSTALL.rst @@ -1,7 +1,7 @@ Installation Instructions ========================= -Let's see how to install the Circuit Knitting Toolbox (CKT). The first +Let's see how to install the Qiskit addon for circuit cutting. The first thing to do is choose how you're going to run and install the packages. There are three primary ways to do this: @@ -17,7 +17,7 @@ Pre-Installation Users who wish to install locally (using either :ref:`Option 1` or :ref:`Option 2`) are encouraged to follow a brief set of common instructions to prepare a Python environment for -installation of CKT: +installation: First, create a minimal environment with only Python installed in it. We recommend using `Python virtual environments `__. @@ -41,15 +41,15 @@ Note: If you are using Windows, use the following commands in PowerShell: .. _Option 1: -Option 1: Pip Installation -^^^^^^^^^^^^^^^^^^^^^^^^^^ +Option 1: Install from PyPI +^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Upgrade pip and install the CKT package. +The most straightforward way to install the ``qiskit-addon-cutting`` package is via PyPI. .. code:: sh pip install --upgrade pip - pip install circuit-knitting-toolbox + pip install qiskit-addon-cutting .. _Option 2: @@ -57,22 +57,22 @@ Upgrade pip and install the CKT package. Option 2: Install from Source ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ -Users who wish to develop in the repository or run the tutorials locally may want to install from source. +Users who wish to develop in the repository or run the notebooks locally may want to install from source. -In either case, the first step is to clone the CKT repository. +In either case, the first step is to clone the ``qiskit-addon-cutting`` repository. .. code:: sh - git clone git@github.com:Qiskit-Extensions/circuit-knitting-toolbox.git + git clone git@github.com:Qiskit/qiskit-addon-cutting.git Next, upgrade pip and enter the repository. .. code:: sh pip install --upgrade pip - cd circuit-knitting-toolbox + cd qiskit-addon-cutting -The next step is to install CKT to the virtual environment. If you plan on running the tutorials, install the +The next step is to install to the virtual environment. If you plan on running the notebooks, install the notebook dependencies in order to run all the visualizations in the notebooks. If you plan on developing in the repository, you may want to install the ``dev`` dependencies. @@ -82,7 +82,7 @@ Adjust the options below to suit your needs. pip install tox notebook -e '.[notebook-dependencies,dev]' -If you installed the notebook dependencies, you can get started with CKT by running the notebooks in the docs. +If you installed the notebook dependencies, you can get started with the addon by running the notebooks in the docs. .. code:: @@ -95,15 +95,15 @@ If you installed the notebook dependencies, you can get started with CKT by runn Option 3: Use within Docker ^^^^^^^^^^^^^^^^^^^^^^^^^^^ -We have provided a `Dockerfile `__, which can be used to +We have provided a `Dockerfile `__, which can be used to build a Docker image, as well as a -`compose.yaml `__ file, which allows one +`compose.yaml `__ file, which allows one to use the Docker image with just a few simple commands. .. code:: sh - git clone git@github.com:Qiskit-Extensions/circuit-knitting-toolbox.git - cd circuit-knitting-toolbox + git clone git@github.com:Qiskit/qiskit-addon-cutting.git + cd qiskit-addon-cutting docker compose build docker compose up @@ -148,4 +148,4 @@ Platform Support We expect this package to work on `any platform supported by Qiskit `__. If you are experiencing issues running the software on your device, you -may consider :ref:`using the toolbox within Docker