-
Notifications
You must be signed in to change notification settings - Fork 55
/
test_processorspec.py
64 lines (48 loc) · 2.32 KB
/
test_processorspec.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
import unittest
import numpy as np
import scipy
from pygsti.processors import QubitProcessorSpec
from pygsti.models import modelconstruction as mc
from pygsti.circuits import Circuit
from ..util import BaseCase, with_temp_path
def save_and_load(obj, pth):
obj.write(pth + ".json")
return QubitProcessorSpec.read(pth + '.json')
class ProcessorSpecTester(BaseCase):
@unittest.skip("REMOVEME")
def test_construct_with_nonstd_gate_unitary_factory(self):
nQubits = 2
def fn(args):
if args is None: args = (0,)
a, = args
sigmaZ = np.array([[1, 0], [0, -1]], 'd')
return scipy.linalg.expm(1j * float(a) * sigmaZ)
ps = QubitProcessorSpec(nQubits, ('Gx', 'Gy', 'Gcnot', 'Ga'), nonstd_gate_unitaries={'Ga': fn})
mdl = mc.create_crosstalk_free_model(ps)
c = Circuit("Gx:1Ga;0.3:1Gx:1@(0,1)")
p = mdl.probabilities(c)
self.assertAlmostEqual(p['00'], 0.08733219254516078)
self.assertAlmostEqual(p['01'], 0.9126678074548386)
c2 = Circuit("Gx:1Ga;0.78539816:1Gx:1@(0,1)") # a clifford: 0.78539816 = pi/4
p2 = mdl.probabilities(c2)
self.assertAlmostEqual(p2['00'], 0.5)
self.assertAlmostEqual(p2['01'], 0.5)
@with_temp_path
def test_with_spam(self, pth):
pspec_defaults = QubitProcessorSpec(4, ['Gxpi2', 'Gypi2'], geometry='line')
pspec_names = QubitProcessorSpec(4, ['Gxpi2', 'Gypi2'], geometry='line',
prep_names=("rho1", "rho_1100"), povm_names=("Mz",))
prep_vec = np.zeros(2**4, complex)
prep_vec[4] = 1.0
EA = np.zeros(2**4, complex)
EA[14] = 1.0
EB = np.zeros(2**4, complex)
EB[15] = 1.0
pspec_vecs = QubitProcessorSpec(4, ['Gxpi2', 'Gypi2'], geometry='line',
prep_names=("rhoA", "rhoC"), povm_names=("Ma", "Mc"),
nonstd_preps={'rhoA': "rho0", 'rhoC': prep_vec},
nonstd_povms={'Ma': {'0': "0000", '1': EA},
'Mc': {'OutA': "0000", 'OutB': [EA, EB]}})
pspec_defaults = save_and_load(pspec_defaults, pth)
pspec_names = save_and_load(pspec_names, pth)
pspec_vecs = save_and_load(pspec_vecs, pth)