Skip to content

Commit

Permalink
Merge pull request #407 from ionq/bugfix-lindblad-modelnoise-basis
Browse files Browse the repository at this point in the history
Fixes bug where depolarizing noise strength differs with parameterization
  • Loading branch information
sserita committed Mar 25, 2024
2 parents 0299e1d + 5d1045b commit 15b3605
Show file tree
Hide file tree
Showing 2 changed files with 32 additions and 2 deletions.
4 changes: 2 additions & 2 deletions pygsti/models/modelnoise.py
Original file line number Diff line number Diff line change
Expand Up @@ -799,7 +799,7 @@ def create_errorgen(self, evotype, state_space):

# LindbladErrorgen with "depol" or "diagonal" param
basis_size = state_space.dim # e.g. 4 for a single qubit
basis = _BuiltinBasis('pp', basis_size)
basis = _BuiltinBasis('PP', basis_size)
rate_per_pauli = self.depolarization_rate / (basis_size - 1)
errdict = {('S', bl): rate_per_pauli for bl in basis.labels[1:]}
return _op.LindbladErrorgen.from_elementary_errorgens(
Expand Down Expand Up @@ -896,7 +896,7 @@ def create_errorgen(self, evotype, state_space):
raise ValueError("Stochastic noise parameterization must be one of %s" % str(allowed_values))

basis_size = state_space.dim # e.g. 4 for a single qubit
basis = _BuiltinBasis('pp', basis_size)
basis = _BuiltinBasis('PP', basis_size)
errdict = {('S', bl): rate for bl, rate in zip(basis.labels[1:], sto_rates)}
return _op.LindbladErrorgen.from_elementary_errorgens(
errdict, "S", basis, mx_basis='pp',
Expand Down
30 changes: 30 additions & 0 deletions test/unit/objects/test_modelnoise.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
from pygsti.processors import QubitProcessorSpec
from pygsti.models import create_crosstalk_free_model
from pygsti.circuits import Circuit
from pygsti.modelmembers.operations.opfactory import ComposedOpFactory
from pygsti.modelmembers.operations.depolarizeop import DepolarizeOp

from ..util import BaseCase


class ModelNoiseTester(BaseCase):
def test_linblad_agrees_with_depol(self):
pspec = QubitProcessorSpec(1, ["Gi"], geometry="line")

mdl1 = create_crosstalk_free_model(
pspec,
depolarization_parameterization="lindblad",
depolarization_strengths={'Gi': 0.02}
)

mdl2 = create_crosstalk_free_model(
pspec,
depolarization_parameterization="depolarize",
depolarization_strengths={'Gi': 0.02}
)

c = Circuit("Gi:0@(0)")
p1 = mdl1.probabilities(c)
p2 = mdl2.probabilities(c)
self.assertAlmostEqual(p1['0'], p2['0'], places=3)
self.assertAlmostEqual(p1['1'], p2['1'], places=3)

0 comments on commit 15b3605

Please sign in to comment.