Skip to content

Commit

Permalink
Qermit 0.5.0 (#93)
Browse files Browse the repository at this point in the history
* Uniform task labels (#36)

* Make _label case uniform

A VERY small PR making the case used for _label uniform.

* Capitalise Ex

* Pytket v1 upgrade (#41)

* Upgrade to pytket v1.0.1

This primarily includes:
- remove Rebase passes
- change module names

* Remove unused imports

* Add capitilisation

* Update docs with change to pytket version

* Correct version requirements

* Correct verson requirements

Co-authored-by: Daniel Mills <[email protected]>
Co-authored-by: Daniel Mills <[email protected]>

* Remove Partial SPAM correcter (#42)

* remove all traces

* update docs

* Update build_and_test.yml

* Remove copy.copy (#43)

* update use of copy.copy in code

remove in many cases

* copy.deepcopy -> deepcopy

* reintroduce necessary copy

* fix typo

* Add ObservableTracker.clear method (#44)

* Shot splitter mitres (#40)

* Add shot splitting mitres

* Better python practice with shot splitting

* Correct comment format

* Change function name

* Add a compiled shot splitting metres

* Correct typing on split_index

* Use OutcomeArray to gather results

* Correct comment spelling

* Add splitting mitres to docs

* Rebuild docs

Co-authored-by: Daniel Mills <[email protected]>
Co-authored-by: Daniel Mills <[email protected]>
Co-authored-by: Daniel Mills <[email protected]>

* Remove appendix from LICENSE file (#46)

* Update graph visualisation (#37)

* update to vertical visualisation

* Update mitresgraph.png

* Delete mitresgraph.png

* update manual images

* update mitex manual images

* update docs image

* rebuild docs and manual

Co-authored-by: sjdilkes <[email protected]>

* Add basic "_cache" attribute for storing all generated edge data from run() (#47)

* add bad cache

* smarten how cache works

* qermit.mittask -> qermit.taskgraph

* add .cache to mitres and mitex

* remove redundant print

* add "run_basic" method (#48)

* Correct qubit mutation (#50)

* Add qubit relabelling task

* Correct typing

* Add documentation

* Add tests

* Code reformatting

* Correct manual

* Rebuild docs

* Add missing tasks to docs

Co-authored-by: Daniel Mills <[email protected]>

* Minor edits, rebuild docs and manual (#49)

* add bad cache

* smarten how cache works

* qermit.mittask -> qermit.taskgraph

* add .cache to mitres and mitex

* add "run_basic" method

* fix obvious issues

* qermit -> Qermit

* Update index.rst

* Update index.rst

* q -> Q

* rebuild manual and docs

* remove print

* rebuild docs and manual

* add "real" string back

* update docs

* update docs

* Update pytket version to 1~(#55)

* update pytket

* update

* Remove pytket from test requirements, and cast mean

* Update zne.py

* Remove use of RebaseToCliffordSingles

* BLACK FORMAT

Co-authored-by: Daniel Mills <[email protected]>
Co-authored-by: sjdilkes <[email protected]>

* Add `characterisation` attribute to TaskGraph and pass as kwarg to TaskGraph.run  (#61)

* Update _version.py

* Update zne_test.py

* Add characterisation attribute to taskgraph

allow to be passed at run

* ignore numpy

* set mittask characterisation attribute when running

* Update frame_randomisation_test.py

* update pytket version

* Update frame_randomisation_test.py

* revert pytket changes

* update versioning

* Update SPAM correction to use characterisation instead of BackendInfo

* Update full_spam_test.py

* use characteriastoin in CCL

* update manual

* Add Spectral Filtering Method (#63)

* Initial commit with outline of protocol

* Remove unnecessary wires

* Add result extraction

* Output qpo

* Add test

* Add characterisation cache

* Add documentation

* Add spectral filtering tests

* Generalise tests to more complicated qpo

* Add type annotation

* Remove caches

* Add documentation

* Split FFT from formatting component

* Add tests for graph generation and new FFT and formating task

* Add tests, docs and type annotation for small coefficient filter

* Document FFT and related tasks

* Document SignalFilter

* Clean up some documentation

* Minor corrctions to typing

* Simplify NDArray typing

* Change to List type annotation

* Add additioinal documentation

* Address Silas PR comments

* Code Formatting

* Formatting and type checking

* Add compiled docs

* Compile manual

* Add spectral fiiltering to docs index

* Remove use of np array

* Correct typing

Co-authored-by: Daniel Mills <[email protected]>
Co-authored-by: Daniel Mills <[email protected]>

* Update python version (#66)

* Update copyright (#69)

* Update pytket version to 1.11(#67)

* Change copyright

* Add noise scaling via 2 qubit gate folding (#72)

* Add 2 qubit gate folding

* Run black

* Import isclose

* Add test call to main call

---------

Co-authored-by: dan-mills-cqc <[email protected]>

* update docs

* Add failing tests (#76)

* Add failing SPAM test

* Add test backends

* Add pytket-quantinuum to test requirements

* Remove myqos imports

* Add test init

* Add failing ZNE test

* Add types and docs to mock backend

* Fix pytket-quantinuum test version

---------

Co-authored-by: dan-mills-cqc <[email protected]>
Co-authored-by: dan-mills-cqc <[email protected]>

* ZNE Include all Qubit Map (#78)

* add failing test

* Add complete workflow failing test

* Pass list of node maps

* Correct documentation

---------

Co-authored-by: dan-mills-cqc <[email protected]>

* Add removed wires in get_full_transition_tomography_circuits (#75)

* Add coverage for removing wires, also format

* Remove added DecomposeBoxes

* format

* Move MockQuantinuumBackend to qermit subdirectory, update FullyConneted architeture constructed

* remove pytest fails

* Update test_requirements.txt

* Update mock_quantinuum_backend.py

* Format code and add format check to CI (#77)

* Format code and add format check to CI

* Revert some formatting

* Add coverage to requirements

* Add flake8 to test requirements

* Install test requirements before running tests

* Update README with formatting change

* Correct formatting

---------

Co-authored-by: dan-mills-cqc <[email protected]>
Co-authored-by: dan-mills-cqc <[email protected]>

* Update versions

* Fix mock backend tests (#82)

* Extend mock mackend gateset

* Reduce optimisation level

* Remove unrequired changes

* Add n_cl_reg to mock quantinuum backend

* Change node names to match updates quaninuum backends

---------

Co-authored-by: dan-mills-cqc <[email protected]>
Co-authored-by: dan-mills-cqc <[email protected]>

* Make cache visible (#86)

* Make cache visible

* Add test for visible cache

---------

Co-authored-by: dan-mills-cqc <[email protected]>

* Use equivalence check between characterisation (#84)

I believe it's okay if they are not exactly the same list of nodes?

* correct duplication of experiment mitex (#85)

Co-authored-by: dan-mills-cqc <[email protected]>

* Docs/update docs theme (#90)

* add build and .venv to .gitignore

* update theme configuration in conf.py

* update theme requirements

* replace CQC logo with Quantinuum logo

* remove refernce to old logo in index.rst

* add built files to .gitignore

* update copyright

* update docs theme in user manual

* add source code links to API docs

* update old links in index

* remove redundant .gitignore line

* Add doc build to tests (#89)

Co-authored-by: dan-mills-cqc <[email protected]>

* Make Folding and Fit methods staticmethod (#87)

* Remove self

* Add @staticmethod decorator

* Repair high compute tests

---------

Co-authored-by: dan-mills-cqc <[email protected]>
Co-authored-by: dan-mills-cqc <[email protected]>

* Postselection and leakage example (#88)

* Add postselection and leakage example

* Add documentation

* add rst files

* Code formatting

* add reset and reorder compilation

* Add test comparing to pytket method

* remove post_select from manager

move to using one work postselect

* remove post_select from mitres

* Remove post_select from tests

* Silas corrections

* Correct formatting

---------

Co-authored-by: dan-mills-cqc <[email protected]>

* Separate NoisyAerBackend (#91)

* Sperate noisyaerbackend from mock quantinuum

* Correct mypy

* Add docstrings on gate sets

* Update test requirements

* Remove commented out gate set

* Correct code formatting

* Move noise model definition

* Correct gateset

---------

Co-authored-by: dan-mills-cqc <[email protected]>

* Reformat code with `black` (#92)

* Reformat black

* Add copyright notices

* Fix mypy issues

* appease CI

* Update versions

* Correct type annotatioin (#94)

* Correct type annotatioin

* Remove prints

* Additional typing corrections

* install testing requirements

* Correct workflow formatting

* Correct all type errors

* Minor code style changes

---------

Co-authored-by: dan-mills-cqc <[email protected]>

---------

Co-authored-by: Daniel Mills <[email protected]>
Co-authored-by: Daniel Mills <[email protected]>
Co-authored-by: Silas Dilkes <[email protected]>
Co-authored-by: Daniel Mills <[email protected]>
Co-authored-by: Seyon Sivarajah <[email protected]>
Co-authored-by: sjdilkes <[email protected]>
Co-authored-by: cqc-melf <[email protected]>
Co-authored-by: CalMacCQ <[email protected]>
  • Loading branch information
9 people authored Oct 2, 2023
1 parent 4fe0b76 commit 5b48b76
Show file tree
Hide file tree
Showing 46 changed files with 1,033 additions and 233 deletions.
50 changes: 44 additions & 6 deletions .github/workflows/build_and_test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -31,12 +31,7 @@ jobs:
cd tests
pip install -r test_requirements.txt
pytest --cov-report term-missing:skip-covered --cov=qermit --durations=10
- name: Run mypy
if: github.event_name == 'pull_request'
run: mypy -p qermit
- name: Format check
if: github.event_name == 'pull_request'
run: flake8 qermit/ tests/ --ignore=E501,W503
linux:
name: Build and test (Linux)
runs-on: ubuntu-latest
Expand Down Expand Up @@ -82,3 +77,46 @@ jobs:
cd tests
pip install -r test_requirements.txt
pytest --cov-report term-missing:skip-covered --cov=qermit --durations=10
build-docs:
name: Test documentation build
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v3
- name: Install Qermit
run: pip install .
- name: Build Docs
run: |
cd docs_src
pip install -r requirements.txt
./build_docs.sh
cd ../manual
./build_manual.sh
- name: Save documentation
uses: actions/upload-artifact@v2
with:
name: docs_html
path: docs/
- name: Upload artifact
uses: actions/upload-pages-artifact@v1
with:
path: 'docs/'

formatting-checks:
name: Check typing and formatting
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v2
- name: Build qermit
run: |
pip install -e . -v
cd tests
pip install -r test_requirements.txt
- name: Run mypy
if: github.event_name == 'pull_request'
run: mypy -p qermit
- name: Format check
if: github.event_name == 'pull_request'
run: flake8 qermit/ tests/ --ignore=E501,W503
3 changes: 3 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,6 @@
.idea/
.dmypy.json
.DS_Store
.venv
build
docs/
2 changes: 1 addition & 1 deletion _version.py
Original file line number Diff line number Diff line change
@@ -1 +1 @@
__version__ = "0.4.0"
__version__ = "0.5.0"
Binary file removed docs_src/CQCLogo.png
Binary file not shown.
Binary file added docs_src/_static/Quantinuum_logo_black.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added docs_src/_static/Quantinuum_logo_white.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
37 changes: 37 additions & 0 deletions docs_src/_static/custom.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
.wy-side-nav-search,
.wy-nav-top {
background: #5A46BE;
}

.wy-grid-for-nav,
.wy-body-for-nav,
.wy-nav-side,
.wy-side-scroll,
.wy-menu,
.wy-menu-vertical {
background-color: #FFFFFF;
}

.wy-menu-vertical a:hover {
background-color: #d9d9d9;
}

.btn-link:visited,
.btn-link,
a:visited,
.a.reference.external,
.a.reference.internal,
.wy-menu-vertical a,
.wy-menu-vertical li,
.wy-menu-vertical ul,
.span.pre,
.sig-param,
.std.std-ref,

html[data-theme=light] {
--pst-color-inline-code: rgb(199, 37, 78) !important;
}

.sig-name {
font-size: 1.25rem;
}
27 changes: 19 additions & 8 deletions docs_src/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,13 +18,13 @@
# -- Project information -----------------------------------------------------

project = "Qermit"
copyright = "2021, Cambridge Quantum Computing Ltd"
author = "Cambridge Quantum Computing Ltd"
copyright = "2023 Quantinuum"
author = "Quantinuum"

# The short X.Y version
version = "0.4.0"
version = "0.5.0"
# The full version, including alpha/beta/rc tags
release = "0.4.0"
release = "0.5.0"


# -- General configuration ---------------------------------------------------
Expand All @@ -41,6 +41,7 @@
"sphinx.ext.autosummary",
"sphinx.ext.intersphinx",
"sphinx.ext.mathjax",
"sphinx.ext.viewcode",
]

# Add any paths that contain templates here, relative to this directory.
Expand All @@ -66,16 +67,26 @@
# This pattern also affects html_static_path and html_extra_path.
exclude_patterns = ["_build", "Thumbs.db", ".DS_Store"]

# The name of the Pygments (syntax highlighting) style to use.
pygments_style = "sphinx"


# -- Options for HTML output -------------------------------------------------

# The theme to use for HTML and HTML Help pages. See the documentation for
# a list of builtin themes.
#
html_theme = "sphinx_rtd_theme"
html_theme = "sphinx_book_theme"

html_theme_options = {
"repository_url": "https://github.com/CQCL/qermit",
"use_repository_button": True,
"use_issues_button": True,
"logo": {
"image_light": "_static/Quantinuum_logo_black.png",
"image_dark": "_static/Quantinuum_logo_white.png",
},
}

html_static_path = ["_static"]
html_css_files = ["custom.css"]

# Add any paths that contain custom static files (such as style sheets) here,
# relative to this directory. They are copied after the builtin static files,
Expand Down
12 changes: 5 additions & 7 deletions docs_src/index.rst
Original file line number Diff line number Diff line change
@@ -1,14 +1,10 @@
Qermit
======

.. image:: CQCLogo.png
:width: 120px
:align: right

``qermit`` is a python module for running error-mitigation protocols on quantum computers using ``pytket``,
CQC's python module for interfacing with `CQC <https://cambridgequantum.com/>`_ tket, a set of quantum programming tools.
``qermit`` is a python module for running error-mitigation protocols on quantum computers using the ``pytket``
python module for interfacing with tket, a set of quantum programming tools developed by `Quantinuum <https://www.quantinuum.com/>`_.
``qermit`` functions using the ``pytket`` :py:class:`Backend` class, meaning ``qermit`` supports any of the
`numerous providers <https://github.com/CQCL/pytket-extensions>`_ ``pytket`` does.
`numerous providers <https://cqcl.github.io/pytket-extensions/api/index.html>`_ ``pytket`` does.
``qermit`` also provides easy composability of error-mitigation methods, meaning
it is practically straightforward to run an experiment with multiple forms of error-mitigation
where appropriate.
Expand Down Expand Up @@ -137,6 +133,8 @@ are several ways to contact us:
measurement_reduction.rst
spam.rst
frame_randomisation.rst
postselection.rst
leakage_detection.rst
clifford_noise_characterisation.rst
zero_noise_extrapolation.rst
probabilistic_error_cancellation.rst
Expand Down
5 changes: 5 additions & 0 deletions docs_src/leakage_detection.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
qermit.leakage_detection
========================

.. automethod:: qermit.leakage_detection.leakage_detection.get_leakage_detection_mitres

9 changes: 9 additions & 0 deletions docs_src/postselection.rst
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
qermit.postselection
====================

.. automethod:: qermit.postselection.postselect_mitres.gen_postselect_mitres

.. autoclass:: qermit.postselection.postselect_manager.PostselectMgr
:members:
:special-members:

4 changes: 2 additions & 2 deletions docs_src/requirements.txt
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
sphinx
sphinx > 4.2.0, <6.2.0
sphinx_autodoc_annotation
sphinx_rtd_theme
sphinx_book_theme ~= 1.0.1
jupyter_sphinx
Binary file added manual/_static/Quantinuum_logo_black.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file added manual/_static/Quantinuum_logo_white.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
37 changes: 37 additions & 0 deletions manual/_static/custom.css
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
.wy-side-nav-search,
.wy-nav-top {
background: #5A46BE;
}

.wy-grid-for-nav,
.wy-body-for-nav,
.wy-nav-side,
.wy-side-scroll,
.wy-menu,
.wy-menu-vertical {
background-color: #FFFFFF;
}

.wy-menu-vertical a:hover {
background-color: #d9d9d9;
}

.btn-link:visited,
.btn-link,
a:visited,
.a.reference.external,
.a.reference.internal,
.wy-menu-vertical a,
.wy-menu-vertical li,
.wy-menu-vertical ul,
.span.pre,
.sig-param,
.std.std-ref,

html[data-theme=light] {
--pst-color-inline-code: rgb(199, 37, 78) !important;
}

.sig-name {
font-size: 1.25rem;
}
19 changes: 16 additions & 3 deletions manual/conf.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,8 @@
# See https://www.sphinx-doc.org/en/master/usage/configuration.html

project = "qermit-manual"
copyright = "2020-2021 Cambridge Quantum Computing Ltd"
author = "Cambridge Quantum Computing Ltd"
copyright = "2023 Quantinuum"
author = "Quantinuum"

extensions = [
"sphinx.ext.autodoc",
Expand All @@ -14,4 +14,17 @@
"jupyter_sphinx",
]

html_theme = "sphinx_rtd_theme"
html_theme = "sphinx_book_theme"

html_theme_options = {
"repository_url": "https://github.com/CQCL/qermit",
"use_repository_button": True,
"use_issues_button": True,
"logo": {
"image_light": "_static/Quantinuum_logo_black.png",
"image_dark": "_static/Quantinuum_logo_white.png",
},
}

html_static_path = ["_static"]
html_css_files = ["custom.css"]
7 changes: 1 addition & 6 deletions qermit/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,12 +20,7 @@
modify the expectation value of some observable (MitEx).
"""
from qermit.taskgraph.task_graph import TaskGraph # noqa:F401
from qermit.taskgraph.mittask import ( # noqa:F401
MitTask,
AnsatzCircuit,
CircuitShots,
ObservableExperiment,
)
from qermit.taskgraph.mittask import MitTask, AnsatzCircuit, CircuitShots, ObservableExperiment # noqa:F401
from qermit.taskgraph.mitres import MitRes # noqa:F401
from qermit.taskgraph.mitex import MitEx # noqa:F401
from qermit.taskgraph.utils import SymbolsDict, MeasurementCircuit, ObservableTracker # noqa:F401
Expand Down
41 changes: 24 additions & 17 deletions qermit/clifford_noise_characterisation/ccl.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,6 +40,8 @@
from enum import Enum
import warnings
from pytket.passes import auto_rebase_pass
from typing import cast
from pytket.unit_id import UnitID


ufr_gateset = {OpType.CX, OpType.Rz, OpType.H}
Expand Down Expand Up @@ -174,10 +176,13 @@ def gen_state_circuits(
for i in range(len(all_coms)):
com = all_coms[i]
if com.op.type == OpType.Rz:
new_circuit.add_barrier(com.qubits)
angle = sample_weighted_clifford_angle(com.op.params[0])
new_circuit.add_gate(com.op.type, [angle], com.qubits)
new_circuit.add_barrier(com.qubits)
new_circuit.add_barrier(cast(List[UnitID], com.qubits))
original_angle = com.op.params[0]
if not isinstance(original_angle, float):
raise Exception("Circuit cannot include parameters which are not floats.")
angle = sample_weighted_clifford_angle(original_angle)
new_circuit.add_gate(com.op.type, [angle], cast(List[UnitID], com.qubits))
new_circuit.add_barrier(cast(List[UnitID], com.qubits))
# Measure gate has special case, but can assume 1 qubit to 1 bit
elif com.op.type is OpType.Measure:
new_circuit.Measure(com.qubits[0], com.bits[0])
Expand All @@ -186,7 +191,7 @@ def gen_state_circuits(
new_circuit.add_barrier(com.args)
# CX or H gate, add as is
else:
new_circuit.add_gate(com.op.type, com.qubits)
new_circuit.add_gate(com.op.type, cast(List[UnitID], com.qubits))

# all circuits accepted and run, some results later discarded if not accepted by Metropolis-Hastings rule
state_circuits.append(new_circuit)
Expand Down Expand Up @@ -219,32 +224,35 @@ def gen_state_circuits(
for i in range(len(all_coms)):
com = all_coms[i]
if com.op.type == OpType.Rz:
new_circuit.add_barrier(com.qubits)
new_circuit.add_barrier(cast(List[UnitID], com.qubits))
# 3 sets of gates int must be in
# in clifford_pair_elements means gate has been denominated as Clifford,
# but is in some sampled pair so add original angle
if i in clifford_pair_elements:
new_circuit.add_gate(com.op.type, com.op.params, com.qubits)
new_circuit.add_barrier(com.qubits)
new_circuit.add_gate(com.op.type, com.op.params, cast(List[UnitID], com.qubits))
new_circuit.add_barrier(cast(List[UnitID], com.qubits))
# in non_clifford_pair_elements mean gate was denominated to be left non-Clifford,
# but its value has been sampled in a pair to now be Clifford
# random angle is sampled and returned
elif i in non_clifford_pair_elements:
angle = sample_weighted_clifford_angle(com.op.params[0])
new_circuit.add_gate(com.op.type, [angle], com.qubits)
new_circuit.add_barrier(com.qubits)
original_angle = com.op.params[0]
if not isinstance(original_angle, float):
raise Exception("Circuit cannot include parameters which are not floats.")
angle = sample_weighted_clifford_angle(original_angle)
new_circuit.add_gate(com.op.type, [angle], cast(List[UnitID], com.qubits))
new_circuit.add_barrier(cast(List[UnitID], com.qubits))
# in cliffords mean it is denominated as Clifford, and hasn't been sampled for a pair
# as clifford_pair_elements has already been checked
# in this case, cliffords is a dict between Rz index and substitution S power
# get power from dict, multiply by 0.5 to get angle, add to circuit
elif i in cliffords:
new_circuit.add_gate(com.op.type, [0.5 * cliffords[i]], com.qubits)
new_circuit.add_barrier(com.qubits)
new_circuit.add_gate(com.op.type, [0.5 * cliffords[i]], cast(List[UnitID], com.qubits))
new_circuit.add_barrier(cast(List[UnitID], com.qubits))
# final case means gate was chosen to retain non-Clifford, and has not been
# sampled in any pair, so add original angle.
else:
new_circuit.add_gate(com.op.type, com.op.params, com.qubits)
new_circuit.add_barrier(com.qubits)
new_circuit.add_gate(com.op.type, com.op.params, cast(List[UnitID], com.qubits))
new_circuit.add_barrier(cast(List[UnitID], com.qubits))
# Measure gate has special case, but can assume 1 qubit to 1 bit
elif com.op.type is OpType.Measure:
new_circuit.Measure(com.qubits[0], com.bits[0])
Expand All @@ -253,7 +261,7 @@ def gen_state_circuits(
new_circuit.add_barrier(com.args)
# CX or H gate, add as is
else:
new_circuit.add_gate(com.op.type, com.qubits)
new_circuit.add_gate(com.op.type, cast(List[UnitID], com.qubits))

# all circuits accepted and run, some results later discarded if not accepted by Metropolis-Hastings rule
state_circuits.append(new_circuit)
Expand Down Expand Up @@ -329,7 +337,6 @@ def task(
all_close = True
attempt = 0
while all_close and attempt < max_state_circuits_attempts:

state_circuits = gen_state_circuits(
c_copy,
n_non_cliffords,
Expand Down
Loading

0 comments on commit 5b48b76

Please sign in to comment.