/
test_opcalc.py
40 lines (30 loc) · 1.15 KB
/
test_opcalc.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
import numpy as np
import unittest
from ..util import BaseCase
from pygsti.objects.polynomial import Polynomial
from pygsti.objects.opcalc import slowopcalc
try:
from pygsti.objects.opcalc import fastopcalc
_FASTOPCALC_LOADED = True
except ImportError:
_FASTOPCALC_LOADED = False
class OpCalcBase:
def test_fast_compact_deriv(self):
q = Polynomial({(): 4.0, (1, 1): 5.0, (2, 2, 3): 6.0})
v, c = q.compact()
d_v, d_c = self.opcalc.compact_deriv(
v,
np.ascontiguousarray(c, complex),
np.array((1, 2, 3), int)
)
self.assertArraysAlmostEqual(d_v, np.array([1, 1, 1, 1, 2, 2, 3, 1, 2, 2, 2]))
self.assertArraysAlmostEqual(d_c, np.array([10, 12, 6], dtype='complex'))
class SlowOpCalcTester(OpCalcBase, BaseCase):
opcalc = slowopcalc
@unittest.skipUnless(_FASTOPCALC_LOADED, "`pygsti.objects.fastopcalc` not built")
class FastOpCalcTester(OpCalcBase, BaseCase):
@classmethod
def setUpClass(cls):
# bind opcalc during test setup
# class should still be defined without fastopcalc, so it can be shown as skipped
cls.opcalc = fastopcalc