Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

merging the master #1162

Closed
wants to merge 106 commits into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
106 commits
Select commit Hold shift + click to select a range
1ff915b
clifford sampling
AlejandroSopena Oct 16, 2023
6563029
output compatible with cdr
AlejandroSopena Oct 16, 2023
40251ca
do not fuse I gates
AlejandroSopena Oct 17, 2023
5a261e4
fix fuse
AlejandroSopena Oct 17, 2023
2049207
transpiling circuit
AlejandroSopena Oct 20, 2023
cdf5647
fix
AlejandroSopena Oct 20, 2023
c1fc36b
fix transpiling
AlejandroSopena Oct 20, 2023
6c49e71
fix identities
AlejandroSopena Oct 20, 2023
b1b3971
remove prints
AlejandroSopena Oct 20, 2023
57db2ec
add minus for iqm5q
AlejandroSopena Oct 22, 2023
332d88b
readout
AlejandroSopena Oct 25, 2023
e240146
bayesian unfolding readout
AlejandroSopena Oct 30, 2023
81f44fe
remove logs
MatteoRobbiati Nov 20, 2023
1aed5d4
rm comments and add preliminary docstrings
MatteoRobbiati Nov 20, 2023
5a5f112
restrict qubits function
Simone-Bordoni Dec 5, 2023
9899a22
added tests
Simone-Bordoni Dec 5, 2023
6ada47c
restricted topology for placer
Simone-Bordoni Dec 8, 2023
c238ad9
get_gammas
AlejandroSopena Dec 11, 2023
b57184e
get_noisy_circuit
AlejandroSopena Dec 11, 2023
7fc6560
zero noise extrapolation
AlejandroSopena Dec 11, 2023
cf792bf
clifford data regression
AlejandroSopena Dec 11, 2023
d4414ac
vnCDR
AlejandroSopena Dec 11, 2023
72e5ef8
readout mitigation
AlejandroSopena Dec 11, 2023
aa7efb1
importance clifford sampling
AlejandroSopena Dec 11, 2023
626540b
transpile
AlejandroSopena Dec 11, 2023
6b13d0f
updating tests
AlejandroSopena Dec 11, 2023
83133c2
Merge branch 'master' into cdr
AlejandroSopena Dec 11, 2023
ea56f40
fix docstring
AlejandroSopena Dec 11, 2023
1dd96c7
fix variational
AlejandroSopena Dec 11, 2023
60c7299
update init
AlejandroSopena Dec 11, 2023
452661e
update pre-commit
AlejandroSopena Dec 11, 2023
d587786
refactor shortest paths
Simone-Bordoni Dec 11, 2023
1e87f5a
completed new shortest paths
Simone-Bordoni Dec 12, 2023
d2d6abd
remove prints
Simone-Bordoni Dec 12, 2023
9b31bfa
fix coverage and tests
Simone-Bordoni Dec 13, 2023
c69b40a
Merge branch 'master' into restrict_topology
renatomello Dec 13, 2023
44e2560
small correction in unroller
Simone-Bordoni Dec 14, 2023
80f2558
Merge branch 'master' into restrict_topology
renatomello Dec 14, 2023
a4b691a
fix documentation tests
AlejandroSopena Dec 14, 2023
8fcb3a2
unify readout mitigation
AlejandroSopena Dec 14, 2023
e0e8c71
fix coverage
AlejandroSopena Dec 14, 2023
7e08d72
Merge branch 'master' into cdr
AlejandroSopena Dec 15, 2023
1443cb6
fix coverage (raise error)
AlejandroSopena Dec 15, 2023
b1f0951
Merge branch 'master' into restrict_topology
renatomello Dec 16, 2023
f764ed8
initial commit
renatomello Dec 19, 2023
83d7ba8
diagonal and semi-diagonal
renatomello Dec 19, 2023
0428bae
fix coverage
renatomello Dec 19, 2023
fd81021
fix test
renatomello Dec 19, 2023
d6ce5f6
fix `diagonal` angles
renatomello Dec 19, 2023
933f3fe
update documentation
renatomello Dec 19, 2023
70bd87b
Merge branch 'master' into unary_architecture
renatomello Dec 20, 2023
24b8eed
Merge branch 'master' into restrict_topology
renatomello Dec 20, 2023
150e29a
improve docstrings `pipeline`
renatomello Dec 20, 2023
438f95d
improved docstring `unroller`
renatomello Dec 20, 2023
1e5ae8a
hiding `exceptions` submodule
renatomello Dec 20, 2023
dc9feee
rewrite imports for exceptions in tests
renatomello Dec 20, 2023
7316cb7
improved docstring `placer`
renatomello Dec 20, 2023
2b27317
updating tests
AlejandroSopena Dec 20, 2023
209aac6
improved docstrings `router`
renatomello Dec 20, 2023
8d2dd1f
fix test
renatomello Dec 20, 2023
38aae68
improved docstrings `router`
renatomello Dec 20, 2023
abdd623
updating doc strings
AlejandroSopena Dec 20, 2023
d9d0e76
updating documentation
AlejandroSopena Dec 20, 2023
caf4784
fix example
AlejandroSopena Dec 20, 2023
4af1eab
add example for ICS method
AlejandroSopena Dec 20, 2023
2b39afe
adding print to example
AlejandroSopena Dec 20, 2023
6fc230d
Add reference
AlejandroSopena Dec 20, 2023
6042d95
Merge branch 'master' into unary_architecture
renatomello Dec 21, 2023
23ee4fd
Merge branch 'master' into restrict_topology
renatomello Dec 21, 2023
5f9de8c
Merge branch 'master' into cdr
renatomello Dec 21, 2023
9b6c4ee
Merge branch 'master' into restrict_topology
renatomello Dec 21, 2023
024c472
Merge branch 'master' into unary_architecture
renatomello Dec 21, 2023
a7aa8aa
corrections
Simone-Bordoni Dec 22, 2023
a37d9ce
corrections
Simone-Bordoni Dec 22, 2023
b564fc4
corrections
Simone-Bordoni Dec 22, 2023
015a60c
100 coverage
Simone-Bordoni Dec 22, 2023
fee47af
Merge branch 'master' into unary_architecture
renatomello Jan 4, 2024
b89e4f5
Andrea's suggestion
renatomello Jan 4, 2024
12c31cd
Merge branch 'master' into restrict_topology
renatomello Jan 4, 2024
9302472
matteo's suggestions
AlejandroSopena Jan 7, 2024
38aa9bd
Merge branch 'master' into restrict_topology
renatomello Jan 10, 2024
52dacc5
Merge branch 'master' into unary_architecture
renatomello Jan 10, 2024
091fe3a
Merge branch 'master' into cdr
renatomello Jan 10, 2024
94bbd4f
code review
AlejandroSopena Jan 10, 2024
0c3830a
Bump jinja2 from 3.1.2 to 3.1.3
dependabot[bot] Jan 11, 2024
3f53ddc
Merge pull request #1121 from qiboteam/restrict_topology
renatomello Jan 11, 2024
8e96b46
Merge branch 'master' into unary_architecture
renatomello Jan 11, 2024
8e53dd0
Merge branch 'master' into cdr
renatomello Jan 11, 2024
b63fdad
Merge branch 'cdr' of https://github.com/qiboteam/qibo into cdr
renatomello Jan 11, 2024
d851a8e
Update src/qibo/models/error_mitigation.py
renatomello Jan 11, 2024
7746326
Update src/qibo/models/error_mitigation.py
renatomello Jan 11, 2024
1002a69
Update src/qibo/models/error_mitigation.py
renatomello Jan 11, 2024
f05141e
Update src/qibo/models/error_mitigation.py
renatomello Jan 11, 2024
159707b
Matteo's suggestions
AlejandroSopena Jan 12, 2024
f05a722
Merge pull request #1141 from qiboteam/unary_architecture
renatomello Jan 12, 2024
e9c51f5
Merge branch 'master' into cdr
renatomello Jan 12, 2024
2625ea8
Merge branch 'cdr' of https://github.com/qiboteam/qibo into cdr
renatomello Jan 12, 2024
bee350a
fix coverage
AlejandroSopena Jan 12, 2024
9cebb48
fix coverage
AlejandroSopena Jan 12, 2024
3a3dfaa
Merge pull request #1129 from qiboteam/cdr
AlejandroSopena Jan 12, 2024
81f0e01
Merge pull request #1155 from qiboteam/dependabot/pip/jinja2-3.1.3
scarrazza Jan 12, 2024
ac4e476
increasing version
scarrazza Jan 12, 2024
627eab7
improved docstrings
renatomello Jan 20, 2024
617fc7a
another fix
renatomello Jan 23, 2024
d92d4aa
another minor fix
renatomello Jan 23, 2024
b10eb08
Merge pull request #1160 from qiboteam/noise_doc
renatomello Jan 24, 2024
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 54 additions & 13 deletions doc/source/api-reference/qibo.rst
Original file line number Diff line number Diff line change
Expand Up @@ -279,7 +279,7 @@ and both can be used as standalone functions or in combination with the other
general mitigation methods by setting the paramter `readout`.


Calibration Matrix
Response Matrix
""""""""""""""""""
Given :math:`n` qubits, all the possible :math:`2^n` states are constructed via the
application of the corresponding sequence of :math:`X` gates
Expand All @@ -288,7 +288,7 @@ In the presence of readout errors, we will measure for each state :math:`i` some
frequencies :math:`F_i^{noisy}` different from the ideal ones
:math:`F_i^{ideal}=\delta_{i,j}`.

The effect of the error is modeled by the matrix composed of the noisy frequencies as
The effect of the error is modeled by the response matrix composed of the noisy frequencies as
columns :math:`M=\big(F_0^{noisy},...,F_{n-1}^{noisy}\big)`. We have indeed that:

.. math::
Expand All @@ -297,14 +297,31 @@ columns :math:`M=\big(F_0^{noisy},...,F_{n-1}^{noisy}\big)`. We have indeed that
and, therefore, the calibration matrix obtained as :math:`M_{\text{cal}}=M^{-1}`
can be used to recover the noise-free frequencies.

.. autofunction:: qibo.models.error_mitigation.calibration_matrix
The calibration matrix :math:`M_{\text{cal}}` lacks stochasticity, resulting in a 'negative probability' issue.
The distributions that arise after applying :math:`M_{\text{cal}}` are quasiprobabilities;
the individual elements can be negative surpass 1, provided they sum to 1.
It is posible to use Iterative Bayesian Unfolding (IBU) to preserve non-negativity.
See `Nachman et al <https://arxiv.org/abs/1910.01969>`_ for more details.


.. autofunction:: qibo.models.error_mitigation.apply_readout_mitigation

.. autofunction:: qibo.models.error_mitigation.get_response_matrix

Randomized
""""""""""

.. autofunction:: qibo.models.error_mitigation.iterative_bayesian_unfolding


.. autofunction:: qibo.models.error_mitigation.apply_resp_mat_readout_mitigation


.. autofunction:: qibo.models.error_mitigation.apply_randomized_readout_mitigation


.. autofunction:: qibo.models.error_mitigation.get_expectation_val_with_readout_mitigation


Randomized readout mitigation
""""""""""""""""""""""""""""""
This approach converts the effect of any noise map :math:`A` into a single multiplication
factor for each Pauli observable, that is, diagonalizes the measurement channel.
The multiplication factor :math:`\lambda` can be directly measured even without
Expand All @@ -320,7 +337,7 @@ factor results in the mitigated Pauli expectation value :math:`\langle O\rangle_
Zero Noise Extrapolation (ZNE)
""""""""""""""""""""""""""""""

Given a noisy circuit :math:`C` and an observable :math:`A`, Zero Noise Extrapolation (ZNE)
Given a noisy circuit :math:`C` and an observable :math:`A`, Zero Noise Extrapolation (ZNE)
consists in running :math:`n+1` versions of the circuit with different noise levels
:math:`\{c_j\}_{j=0..n}` and, for each of them, measuring the expected value of the observable
:math:`E_j=\langle A\rangle_j`.
Expand Down Expand Up @@ -381,7 +398,7 @@ See `Sopena et al <https://arxiv.org/abs/2103.12680>`_ for more details.
.. autofunction:: qibo.models.error_mitigation.CDR


.. autofunction:: qibo.models.error_mitigation.sample_training_circuit
.. autofunction:: qibo.models.error_mitigation.sample_training_circuit_cdr


Variable Noise CDR (vnCDR)
Expand Down Expand Up @@ -416,6 +433,34 @@ See `Sopena et al <https://arxiv.org/abs/2103.12680>`_ for all the details.
.. autofunction:: qibo.models.error_mitigation.vnCDR


Importance Clifford Sampling (ICS)
""""""""""""""""""""""""""""""""""

In the Importance Clifford Sampling (ICS) method, a set of :math:`n` circuits
:math:`S_n=\{C_i\}_{i=1,..,n}` that stabilizes a given Pauli observable is generated starting from the original circuit
:math:`C_0` by replacing all the non-Clifford gates with Clifford ones.
Given an observable :math:`A`, all the circuits of :math:`S_n` are both simulated
to obtain the correspondent expected values of :math:`A` in noise-free condition
:math:`\{a_i^{exact}\}_{i=1,..,n}`, and run in noisy conditions to obtain the noisy
expected values :math:`\{a_i^{noisy}\}_{i=1,..,n}`.

Finally, a theoretically inspired model :math:`f` is learned using the training data.

The mitigated expected value of :math:`A` at the end of :math:`C_0` is then
obtained simply with :math:`f(a_0^{noisy})`.

In this implementation the initial circuit is expected to be decomposed in the three
Clifford gates :math:`RX(\frac{\pi}{2})`, :math:`CNOT`, :math:`X` and in :math:`RZ(\theta)`
(which is Clifford only for :math:`\theta=\frac{n\pi}{2}`).
By default the set of Clifford gates used for substitution is
:math:`\{RZ(0),RZ(\frac{\pi}{2}),RZ(\pi),RZ(\frac{3}{2}\pi)\}`.
See `Sopena et al <https://arxiv.org/abs/2103.12680>`_ for more details.

.. autofunction:: qibo.models.error_mitigation.ICS


.. autofunction:: qibo.models.error_mitigation.sample_clifford_training_circuit

_______________________

.. _Gates:
Expand Down Expand Up @@ -804,7 +849,7 @@ U1q

- Pauli-:math:`Z` rotation: :class:`qibo.gates.RZ`
- Arbitrary :math:`ZZ` rotation: :class:`qibo.gates.RZZ`
- Fully-entangling :math:`ZZ`-interaction: :math:`R_{ZZ}(\\pi/2)`
- Fully-entangling :math:`ZZ`-interaction: :math:`R_{ZZ}(\pi/2)`


_______________________
Expand Down Expand Up @@ -1420,10 +1465,6 @@ passing a symplectic matrix to the constructor.
symplectic_matrix = backend.zero_state(nqubits=3)
clifford = Clifford(symplectic_matrix, engine=NumpyBackend())

# The initialization above is equivalent to the initialization below
circuit = Circuit(nqubits=3)
clifford = Clifford(circuit, engine=NumpyBackend())

The generators of the stabilizers can be extracted with the
:meth:`qibo.quantum_info.clifford.Clifford.generators` method,
or the complete set of :math:`d = 2^{n}` stabilizers operators can be extracted through the
Expand Down
106 changes: 67 additions & 39 deletions doc/source/code-examples/advancedexamples.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1203,23 +1203,23 @@ Let's see how to use them. For starters, let's define a dummy circuit with some
hz = 0.5
hx = 0.5
dt = 0.25
c = Circuit(nqubits, density_matrix=True)
c.add(gates.RZ(q, theta=-2 * hz * dt - np.pi / 2) for q in range(nqubits))
c.add(gates.RX(q, theta=np.pi / 2) for q in range(nqubits))
c.add(gates.RZ(q, theta=-2 * hx * dt + np.pi) for q in range(nqubits))
c.add(gates.RX(q, theta=np.pi / 2) for q in range(nqubits))
c.add(gates.RZ(q, theta=-np.pi / 2) for q in range(nqubits))
c.add(gates.CNOT(q, q + 1) for q in range(0, nqubits - 1, 2))
c.add(gates.RZ(q + 1, theta=-2 * dt) for q in range(0, nqubits - 1, 2))
c.add(gates.CNOT(q, q + 1) for q in range(0, nqubits - 1, 2))
c.add(gates.CNOT(q, q + 1) for q in range(1, nqubits, 2))
c.add(gates.RZ(q + 1, theta=-2 * dt) for q in range(1, nqubits, 2))
c.add(gates.CNOT(q, q + 1) for q in range(1, nqubits, 2))
circ = Circuit(nqubits, density_matrix=True)
circ.add(gates.RZ(q, theta=-2 * hz * dt - np.pi / 2) for q in range(nqubits))
circ.add(gates.RX(q, theta=np.pi / 2) for q in range(nqubits))
circ.add(gates.RZ(q, theta=-2 * hx * dt + np.pi) for q in range(nqubits))
circ.add(gates.RX(q, theta=np.pi / 2) for q in range(nqubits))
circ.add(gates.RZ(q, theta=-np.pi / 2) for q in range(nqubits))
circ.add(gates.CNOT(q, q + 1) for q in range(0, nqubits - 1, 2))
circ.add(gates.RZ(q + 1, theta=-2 * dt) for q in range(0, nqubits - 1, 2))
circ.add(gates.CNOT(q, q + 1) for q in range(0, nqubits - 1, 2))
circ.add(gates.CNOT(q, q + 1) for q in range(1, nqubits, 2))
circ.add(gates.RZ(q + 1, theta=-2 * dt) for q in range(1, nqubits, 2))
circ.add(gates.CNOT(q, q + 1) for q in range(1, nqubits, 2))
# Include the measurements
c.add(gates.M(*range(nqubits)))
circ.add(gates.M(*range(nqubits)))

# visualize the circuit
print(c.draw())
print(circ.draw())

# q0: ─RZ─RX─RZ─RX─RZ─o────o────────M─
# q1: ─RZ─RX─RZ─RX─RZ─X─RZ─X─o────o─M─
Expand Down Expand Up @@ -1252,7 +1252,7 @@ the real quantum hardware, instead, we can use a noise model:
.. testcode::

# Noise-free expected value
exact = obs.expectation(backend.execute_circuit(c).state())
exact = obs.expectation(backend.execute_circuit(circ).state())
print(exact)
# 0.9096065335014379

Expand All @@ -1270,7 +1270,7 @@ the real quantum hardware, instead, we can use a noise model:
)
noise.add(ReadoutError(probabilities=prob), gate=gates.M)
# Noisy expected value without mitigation
noisy = obs.expectation(backend.execute_circuit(noise.apply(c)).state())
noisy = obs.expectation(backend.execute_circuit(noise.apply(circ)).state())
print(noisy)
# 0.5647937721701448

Expand All @@ -1287,22 +1287,21 @@ Now let's check that error mitigation produces better estimates of the exact exp
Readout Mitigation
^^^^^^^^^^^^^^^^^^
Firstly, let's try to mitigate the readout errors. To do this, we can either compute the
calibration matrix and use it modify the final state after the circuit execution:
response matrix and use it modify the final state after the circuit execution:

.. testcode::

from qibo.models.error_mitigation import apply_readout_mitigation, calibration_matrix
from qibo.models.error_mitigation import get_expectation_val_with_readout_mitigation, get_response_matrix

nshots = 10000
# compute the calibration matrix
calibration = calibration_matrix(
# compute the response matrix
response_matrix = get_response_matrix(
nqubits, backend=backend, noise_model=noise, nshots=nshots
)
# execute the circuit
state = backend.execute_circuit(noise.apply(c), nshots=nshots)
# define mitigation options
readout = {"response_matrix": response_matrix}
# mitigate the readout errors
mit_state = apply_readout_mitigation(state, calibration)
mit_val = mit_state.expectation_from_samples(obs)
mit_val = get_expectation_val_with_readout_mitigation(circ, obs, noise, readout=readout)
print(mit_val)
# 0.5945794816381054

Expand All @@ -1317,13 +1316,10 @@ Or use the randomized readout mitigation:

from qibo.models.error_mitigation import apply_randomized_readout_mitigation

ncircuits = 10
result, result_cal = apply_randomized_readout_mitigation(
c, backend=backend, noise_model=noise, nshots=nshots, ncircuits=ncircuits
)
mit_val = result.expectation_from_samples(
obs
) / result_cal.expectation_from_samples(obs)
# define mitigation options
readout = {"ncircuits": 10}
# mitigate the readout errors
mit_val = get_expectation_val_with_readout_mitigation(circ, obs, noise, readout=readout)
print(mit_val)
# 0.5860884499785314

Expand Down Expand Up @@ -1363,7 +1359,7 @@ For example if we use the five levels ``[0,1,2,3,4]`` :

# Mitigated expected value
estimate = ZNE(
circuit=c,
circuit=circ,
observable=obs,
noise_levels=np.arange(5),
noise_model=noise,
Expand All @@ -1385,14 +1381,14 @@ combined with the readout mitigation:
.. testcode::

# we can either use
# the calibration matrix computed earlier
readout = {'calibration_matrix': calibration}
# the response matrix computed earlier
readout = {'response_matrix': response_matrix}
# or the randomized readout
readout = {'ncircuits': 10}

# Mitigated expected value
estimate = ZNE(
circuit=c,
circuit=circ,
observable=obs,
backend=backend,
noise_levels=np.arange(5),
Expand Down Expand Up @@ -1422,15 +1418,16 @@ circuit is expected to be decomposed in the set of primitive gates :math:`RX(\fr

# Mitigated expected value
estimate = CDR(
circuit=c,
circuit=circ,
observable=obs,
n_training_samples=10,
backend=backend,
noise_model=noise,
nshots=10000,
readout=readout,
)
print(estimate)
# 0.9090604794014961
# 0.8983676333969615

.. testoutput::
:hide:
Expand All @@ -1439,6 +1436,7 @@ circuit is expected to be decomposed in the set of primitive gates :math:`RX(\fr

Again, the mitigated expected value improves over the noisy one and is also slightly better compared to ZNE.


Variable Noise CDR (vnCDR)
^^^^^^^^^^^^^^^^^^^^^^^^^^

Expand All @@ -1451,8 +1449,9 @@ caveat about the input circuit for CDR is valid here as well.

# Mitigated expected value
estimate = vnCDR(
circuit=c,
circuit=circ,
observable=obs,
n_training_samples=10,
backend=backend,
noise_levels=np.arange(3),
noise_model=noise,
Expand All @@ -1461,7 +1460,7 @@ caveat about the input circuit for CDR is valid here as well.
readout=readout,
)
print(estimate)
# 0.9085991439303123
# 0.8998376314644383

.. testoutput::
:hide:
Expand All @@ -1472,6 +1471,35 @@ The result is similar to the one obtained by CDR. Usually, one would expect slig
however, this can substantially vary depending on the circuit and the observable considered and, therefore, it is hard to tell
a priori.


Importance Clifford Sampling (ICS)
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

The use of iCS is straightforward, analogous to CDR and vnCDR.

.. testcode::

from qibo.models.error_mitigation import ICS

# Mitigated expected value
estimate = ICS(
circuit=circ,
observable=obs,
n_training_samples=10,
backend=backend,
noise_model=noise,
nshots=10000,
readout=readout,
)
print(estimate)
# 0.9183495097398502

.. testoutput::
:hide:

...

Again, the mitigated expected value improves over the noisy one and is also slightly better compared to ZNE.
This was just a basic example usage of the three methods, for all the details about them you should check the API-reference page :ref:`Error Mitigation <error-mitigation>`.

.. _timeevol-example:
Expand Down
6 changes: 3 additions & 3 deletions poetry.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion pyproject.toml
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ build-backend = "poetry.core.masonry.api"

[tool.poetry]
name = "qibo"
version = "0.2.4"
version = "0.2.5"
description = "A framework for quantum computing with hardware acceleration."
authors = ["The Qibo team"]
license = "Apache License 2.0"
Expand Down
9 changes: 1 addition & 8 deletions src/qibo/models/__init__.py
Original file line number Diff line number Diff line change
@@ -1,14 +1,7 @@
from qibo.models import hep, tsp
from qibo.models.circuit import Circuit
from qibo.models.encodings import unary_encoder
from qibo.models.error_mitigation import (
CDR,
ZNE,
get_gammas,
get_noisy_circuit,
sample_training_circuit,
vnCDR,
)
from qibo.models.error_mitigation import CDR, ICS, ZNE, vnCDR
from qibo.models.evolution import AdiabaticEvolution, StateEvolution
from qibo.models.grover import Grover
from qibo.models.qft import QFT
Expand Down
Loading
Loading