From 7ac1bdbb92279bd0da78f13ceded576dfa870ae2 Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Tue, 30 Jun 2026 12:29:29 -0400 Subject: [PATCH 1/3] Migrate to a src-layout This commit migrates this package to a src-layout, which has [a number of advantages](https://packaging.python.org/en/latest/discussions/src-layout-vs-flat-layout/). Another advantage is that this change requires fewer mentions of the package name in `tox.ini`, which means that as addons adopt this change, there will be fewer lines which must diverge among them. The disadvantage to merging this is that any new files in outstanding pull requests will need to have their locations updated before merging. --- pyproject.toml | 4 ++-- .../qiskit_addon_utils}/__init__.py | 0 .../qiskit_addon_utils}/coloring/__init__.py | 0 .../coloring/automatic_coloring.py | 0 .../qiskit_addon_utils}/coloring/validation.py | 0 .../qiskit_addon_utils}/exp_vals/__init__.py | 0 .../exp_vals/expectation_values.py | 0 .../exp_vals/measurement_bases.py | 0 .../exp_vals/observable_mappings.py | 0 .../noise_management/__init__.py | 0 .../noise_management/constants.py | 0 .../noise_management/gamma_factor.py | 0 .../post_selection/__init__.py | 0 .../post_selection/post_selection_summary.py | 0 .../post_selection/post_selector.py | 0 .../post_selection/transpiler/__init__.py | 0 .../transpiler/passes/__init__.py | 0 .../passes/add_post_selection_measures.py | 0 .../passes/add_spectator_measures.py | 0 .../post_selection/transpiler/passes/utils.py | 0 .../transpiler/passes/xslow_gate.py | 0 .../noise_management/trex_factors.py | 0 .../problem_generators/__init__.py | 0 .../generate_time_evolution_circuit.py | 0 .../generate_xyz_hamiltonian.py | 0 .../qiskit_addon_utils}/slicing/__init__.py | 0 .../slicing/combine_slices.py | 0 .../slicing/slice_by_barriers.py | 0 .../slicing/slice_by_coloring.py | 0 .../slicing/slice_by_depth.py | 0 .../slicing/slice_by_gate_types.py | 0 .../slicing/transpiler/__init__.py | 0 .../slicing/transpiler/passes/__init__.py | 0 .../transpiler/passes/collect_op_color.py | 0 .../transpiler/passes/collect_op_size.py | 0 .../transpiler/passes/collect_op_type.py | 0 tox.ini | 18 +++++++++--------- 37 files changed, 11 insertions(+), 11 deletions(-) rename {qiskit_addon_utils => src/qiskit_addon_utils}/__init__.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/coloring/__init__.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/coloring/automatic_coloring.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/coloring/validation.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/exp_vals/__init__.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/exp_vals/expectation_values.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/exp_vals/measurement_bases.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/exp_vals/observable_mappings.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/noise_management/__init__.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/noise_management/constants.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/noise_management/gamma_factor.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/noise_management/post_selection/__init__.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/noise_management/post_selection/post_selection_summary.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/noise_management/post_selection/post_selector.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/noise_management/post_selection/transpiler/__init__.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/noise_management/post_selection/transpiler/passes/__init__.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/noise_management/post_selection/transpiler/passes/add_post_selection_measures.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/noise_management/post_selection/transpiler/passes/add_spectator_measures.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/noise_management/post_selection/transpiler/passes/utils.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/noise_management/post_selection/transpiler/passes/xslow_gate.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/noise_management/trex_factors.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/problem_generators/__init__.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/problem_generators/generate_time_evolution_circuit.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/problem_generators/generate_xyz_hamiltonian.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/slicing/__init__.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/slicing/combine_slices.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/slicing/slice_by_barriers.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/slicing/slice_by_coloring.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/slicing/slice_by_depth.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/slicing/slice_by_gate_types.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/slicing/transpiler/__init__.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/slicing/transpiler/passes/__init__.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/slicing/transpiler/passes/collect_op_color.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/slicing/transpiler/passes/collect_op_size.py (100%) rename {qiskit_addon_utils => src/qiskit_addon_utils}/slicing/transpiler/passes/collect_op_type.py (100%) diff --git a/pyproject.toml b/pyproject.toml index fa939ed5..4394044b 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -93,8 +93,8 @@ fail_under = 70 show_missing = true [tool.hatch.build.targets.wheel] -only-include = [ - "qiskit_addon_utils", +packages = [ + "src/qiskit_addon_utils", ] [tool.hatch.metadata] diff --git a/qiskit_addon_utils/__init__.py b/src/qiskit_addon_utils/__init__.py similarity index 100% rename from qiskit_addon_utils/__init__.py rename to src/qiskit_addon_utils/__init__.py diff --git a/qiskit_addon_utils/coloring/__init__.py b/src/qiskit_addon_utils/coloring/__init__.py similarity index 100% rename from qiskit_addon_utils/coloring/__init__.py rename to src/qiskit_addon_utils/coloring/__init__.py diff --git a/qiskit_addon_utils/coloring/automatic_coloring.py b/src/qiskit_addon_utils/coloring/automatic_coloring.py similarity index 100% rename from qiskit_addon_utils/coloring/automatic_coloring.py rename to src/qiskit_addon_utils/coloring/automatic_coloring.py diff --git a/qiskit_addon_utils/coloring/validation.py b/src/qiskit_addon_utils/coloring/validation.py similarity index 100% rename from qiskit_addon_utils/coloring/validation.py rename to src/qiskit_addon_utils/coloring/validation.py diff --git a/qiskit_addon_utils/exp_vals/__init__.py b/src/qiskit_addon_utils/exp_vals/__init__.py similarity index 100% rename from qiskit_addon_utils/exp_vals/__init__.py rename to src/qiskit_addon_utils/exp_vals/__init__.py diff --git a/qiskit_addon_utils/exp_vals/expectation_values.py b/src/qiskit_addon_utils/exp_vals/expectation_values.py similarity index 100% rename from qiskit_addon_utils/exp_vals/expectation_values.py rename to src/qiskit_addon_utils/exp_vals/expectation_values.py diff --git a/qiskit_addon_utils/exp_vals/measurement_bases.py b/src/qiskit_addon_utils/exp_vals/measurement_bases.py similarity index 100% rename from qiskit_addon_utils/exp_vals/measurement_bases.py rename to src/qiskit_addon_utils/exp_vals/measurement_bases.py diff --git a/qiskit_addon_utils/exp_vals/observable_mappings.py b/src/qiskit_addon_utils/exp_vals/observable_mappings.py similarity index 100% rename from qiskit_addon_utils/exp_vals/observable_mappings.py rename to src/qiskit_addon_utils/exp_vals/observable_mappings.py diff --git a/qiskit_addon_utils/noise_management/__init__.py b/src/qiskit_addon_utils/noise_management/__init__.py similarity index 100% rename from qiskit_addon_utils/noise_management/__init__.py rename to src/qiskit_addon_utils/noise_management/__init__.py diff --git a/qiskit_addon_utils/noise_management/constants.py b/src/qiskit_addon_utils/noise_management/constants.py similarity index 100% rename from qiskit_addon_utils/noise_management/constants.py rename to src/qiskit_addon_utils/noise_management/constants.py diff --git a/qiskit_addon_utils/noise_management/gamma_factor.py b/src/qiskit_addon_utils/noise_management/gamma_factor.py similarity index 100% rename from qiskit_addon_utils/noise_management/gamma_factor.py rename to src/qiskit_addon_utils/noise_management/gamma_factor.py diff --git a/qiskit_addon_utils/noise_management/post_selection/__init__.py b/src/qiskit_addon_utils/noise_management/post_selection/__init__.py similarity index 100% rename from qiskit_addon_utils/noise_management/post_selection/__init__.py rename to src/qiskit_addon_utils/noise_management/post_selection/__init__.py diff --git a/qiskit_addon_utils/noise_management/post_selection/post_selection_summary.py b/src/qiskit_addon_utils/noise_management/post_selection/post_selection_summary.py similarity index 100% rename from qiskit_addon_utils/noise_management/post_selection/post_selection_summary.py rename to src/qiskit_addon_utils/noise_management/post_selection/post_selection_summary.py diff --git a/qiskit_addon_utils/noise_management/post_selection/post_selector.py b/src/qiskit_addon_utils/noise_management/post_selection/post_selector.py similarity index 100% rename from qiskit_addon_utils/noise_management/post_selection/post_selector.py rename to src/qiskit_addon_utils/noise_management/post_selection/post_selector.py diff --git a/qiskit_addon_utils/noise_management/post_selection/transpiler/__init__.py b/src/qiskit_addon_utils/noise_management/post_selection/transpiler/__init__.py similarity index 100% rename from qiskit_addon_utils/noise_management/post_selection/transpiler/__init__.py rename to src/qiskit_addon_utils/noise_management/post_selection/transpiler/__init__.py diff --git a/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/__init__.py b/src/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/__init__.py similarity index 100% rename from qiskit_addon_utils/noise_management/post_selection/transpiler/passes/__init__.py rename to src/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/__init__.py diff --git a/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/add_post_selection_measures.py b/src/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/add_post_selection_measures.py similarity index 100% rename from qiskit_addon_utils/noise_management/post_selection/transpiler/passes/add_post_selection_measures.py rename to src/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/add_post_selection_measures.py diff --git a/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/add_spectator_measures.py b/src/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/add_spectator_measures.py similarity index 100% rename from qiskit_addon_utils/noise_management/post_selection/transpiler/passes/add_spectator_measures.py rename to src/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/add_spectator_measures.py diff --git a/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/utils.py b/src/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/utils.py similarity index 100% rename from qiskit_addon_utils/noise_management/post_selection/transpiler/passes/utils.py rename to src/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/utils.py diff --git a/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/xslow_gate.py b/src/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/xslow_gate.py similarity index 100% rename from qiskit_addon_utils/noise_management/post_selection/transpiler/passes/xslow_gate.py rename to src/qiskit_addon_utils/noise_management/post_selection/transpiler/passes/xslow_gate.py diff --git a/qiskit_addon_utils/noise_management/trex_factors.py b/src/qiskit_addon_utils/noise_management/trex_factors.py similarity index 100% rename from qiskit_addon_utils/noise_management/trex_factors.py rename to src/qiskit_addon_utils/noise_management/trex_factors.py diff --git a/qiskit_addon_utils/problem_generators/__init__.py b/src/qiskit_addon_utils/problem_generators/__init__.py similarity index 100% rename from qiskit_addon_utils/problem_generators/__init__.py rename to src/qiskit_addon_utils/problem_generators/__init__.py diff --git a/qiskit_addon_utils/problem_generators/generate_time_evolution_circuit.py b/src/qiskit_addon_utils/problem_generators/generate_time_evolution_circuit.py similarity index 100% rename from qiskit_addon_utils/problem_generators/generate_time_evolution_circuit.py rename to src/qiskit_addon_utils/problem_generators/generate_time_evolution_circuit.py diff --git a/qiskit_addon_utils/problem_generators/generate_xyz_hamiltonian.py b/src/qiskit_addon_utils/problem_generators/generate_xyz_hamiltonian.py similarity index 100% rename from qiskit_addon_utils/problem_generators/generate_xyz_hamiltonian.py rename to src/qiskit_addon_utils/problem_generators/generate_xyz_hamiltonian.py diff --git a/qiskit_addon_utils/slicing/__init__.py b/src/qiskit_addon_utils/slicing/__init__.py similarity index 100% rename from qiskit_addon_utils/slicing/__init__.py rename to src/qiskit_addon_utils/slicing/__init__.py diff --git a/qiskit_addon_utils/slicing/combine_slices.py b/src/qiskit_addon_utils/slicing/combine_slices.py similarity index 100% rename from qiskit_addon_utils/slicing/combine_slices.py rename to src/qiskit_addon_utils/slicing/combine_slices.py diff --git a/qiskit_addon_utils/slicing/slice_by_barriers.py b/src/qiskit_addon_utils/slicing/slice_by_barriers.py similarity index 100% rename from qiskit_addon_utils/slicing/slice_by_barriers.py rename to src/qiskit_addon_utils/slicing/slice_by_barriers.py diff --git a/qiskit_addon_utils/slicing/slice_by_coloring.py b/src/qiskit_addon_utils/slicing/slice_by_coloring.py similarity index 100% rename from qiskit_addon_utils/slicing/slice_by_coloring.py rename to src/qiskit_addon_utils/slicing/slice_by_coloring.py diff --git a/qiskit_addon_utils/slicing/slice_by_depth.py b/src/qiskit_addon_utils/slicing/slice_by_depth.py similarity index 100% rename from qiskit_addon_utils/slicing/slice_by_depth.py rename to src/qiskit_addon_utils/slicing/slice_by_depth.py diff --git a/qiskit_addon_utils/slicing/slice_by_gate_types.py b/src/qiskit_addon_utils/slicing/slice_by_gate_types.py similarity index 100% rename from qiskit_addon_utils/slicing/slice_by_gate_types.py rename to src/qiskit_addon_utils/slicing/slice_by_gate_types.py diff --git a/qiskit_addon_utils/slicing/transpiler/__init__.py b/src/qiskit_addon_utils/slicing/transpiler/__init__.py similarity index 100% rename from qiskit_addon_utils/slicing/transpiler/__init__.py rename to src/qiskit_addon_utils/slicing/transpiler/__init__.py diff --git a/qiskit_addon_utils/slicing/transpiler/passes/__init__.py b/src/qiskit_addon_utils/slicing/transpiler/passes/__init__.py similarity index 100% rename from qiskit_addon_utils/slicing/transpiler/passes/__init__.py rename to src/qiskit_addon_utils/slicing/transpiler/passes/__init__.py diff --git a/qiskit_addon_utils/slicing/transpiler/passes/collect_op_color.py b/src/qiskit_addon_utils/slicing/transpiler/passes/collect_op_color.py similarity index 100% rename from qiskit_addon_utils/slicing/transpiler/passes/collect_op_color.py rename to src/qiskit_addon_utils/slicing/transpiler/passes/collect_op_color.py diff --git a/qiskit_addon_utils/slicing/transpiler/passes/collect_op_size.py b/src/qiskit_addon_utils/slicing/transpiler/passes/collect_op_size.py similarity index 100% rename from qiskit_addon_utils/slicing/transpiler/passes/collect_op_size.py rename to src/qiskit_addon_utils/slicing/transpiler/passes/collect_op_size.py diff --git a/qiskit_addon_utils/slicing/transpiler/passes/collect_op_type.py b/src/qiskit_addon_utils/slicing/transpiler/passes/collect_op_type.py similarity index 100% rename from qiskit_addon_utils/slicing/transpiler/passes/collect_op_type.py rename to src/qiskit_addon_utils/slicing/transpiler/passes/collect_op_type.py diff --git a/tox.ini b/tox.ini index b87fbaaf..27025303 100644 --- a/tox.ini +++ b/tox.ini @@ -16,8 +16,8 @@ commands = extras = style commands = - ruff format qiskit_addon_utils/ docs/ test/ - ruff check --fix qiskit_addon_utils/ docs/ test/ + ruff format src/ docs/ test/ + ruff check --fix src/ docs/ test/ nbqa ruff --fix docs/ [testenv:lint] @@ -28,13 +28,13 @@ basepython = python3.10 extras = lint commands = - ruff format --check qiskit_addon_utils/ docs/ test/ - ruff check qiskit_addon_utils/ docs/ test/ - ruff check --preview --select CPY001 --exclude "*.ipynb" qiskit_addon_utils/ test/ + ruff format --check src/ docs/ test/ + ruff check src/ docs/ test/ + ruff check --preview --select CPY001 --exclude "*.ipynb" src/ test/ nbqa ruff docs/ - mypy qiskit_addon_utils/ - pylint -rn qiskit_addon_utils/ test/ - sphinx-alt-text-validator -f qiskit_addon_utils + mypy src/ + pylint -rn src/ test/ + sphinx-alt-text-validator -f src nbqa pylint -rn docs/ reno lint @@ -60,7 +60,7 @@ extras = test doctest commands = - pytest --doctest-modules --cov=qiskit_addon_utils/ + pytest --doctest-modules --cov=src/ [testenv:docs] basepython = python3.10 From fc9e860913a9d0f2546e632240953e0f6c500acd Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Tue, 30 Jun 2026 12:43:03 -0400 Subject: [PATCH 2/3] Update a few paths in pyproject.toml --- pyproject.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 4394044b..446d84d0 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -129,11 +129,11 @@ enable = [ ] [tool.pytest.ini_options] -testpaths = ["./qiskit_addon_utils/", "./test/"] +testpaths = ["./src/", "./test/"] [tool.ruff] line-length = 100 -src = ["qiskit_addon_utils", "test"] +src = ["src", "test"] target-version = "py39" [tool.ruff.lint] From 241ed214eb98591e91f60a5b30206b861c922ee7 Mon Sep 17 00:00:00 2001 From: Jim Garrison Date: Tue, 30 Jun 2026 13:48:16 -0400 Subject: [PATCH 3/3] Fix ruff isort first-party detection for src-layout Point ruff to `src/qiskit_addon_utils` so qiskit_addon_utils is classified as a first-party import, fixing the spurious I001 lint failures. --- pyproject.toml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pyproject.toml b/pyproject.toml index 446d84d0..b0a6b553 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -133,7 +133,7 @@ testpaths = ["./src/", "./test/"] [tool.ruff] line-length = 100 -src = ["src", "test"] +src = ["src/qiskit_addon_utils", "test"] target-version = "py39" [tool.ruff.lint]