コード例 #1
0
    def test_raises_on_bad_values(self):
        with self.assertRaises(ValueError):
            op.StaticStandardOp('BadGate', 'pp', 'statevec')
        with self.assertRaises(ValueError):
            op.StaticStandardOp('BadGate', 'pp', 'densitymx')

        with self.assertRaises(ModuleNotFoundError):
            op.StaticStandardOp('Gi', 'pp', 'not_an_evotype')
コード例 #2
0
    def test_statevec(self):
        std_unitaries = itgs.standard_gatename_unitaries()

        for name, U in std_unitaries.items():
            if callable(U):
                continue  # skip unitary functions (create factories)
            try:
                svop = op.StaticStandardOp(name,
                                           'pp',
                                           'statevec',
                                           state_space=None)
            except ModuleNotFoundError:  # if 'statevec' isn't built (no cython)
                svop = op.StaticStandardOp(name,
                                           'pp',
                                           'statevec_slow',
                                           state_space=None)
            self.assertArraysAlmostEqual(svop._rep.to_dense('Hilbert'), U)
コード例 #3
0
    def test_chp(self):
        std_chp_ops = itgs.standard_gatenames_chp_conversions()

        for name, ops in std_chp_ops.items():
            if not name.startswith('G'):
                continue  # currently the 'h', 'p', 'm' gates aren't "standard" yet because they lack unitaries
            chpop = op.StaticStandardOp(name, 'pp', 'chp', state_space=None)
            op_str = '\n'.join(ops)
            if len(op_str):
                op_str += '\n'
            self.assertEqual(chpop._rep.chp_str(), op_str)
コード例 #4
0
ファイル: chpforwardsim.py プロジェクト: sethmerkel/pyGSTi
        def process_computational_state(rho, target_offset=0):
            assert isinstance(rho, _state.ComputationalBasisState), \
                "CHP prep must be ComputationalBasisState (may be inside ComposedState/TensorProductState)"

            bitflip = _op.StaticStandardOp('Gxpi',
                                           'pp',
                                           evotype='chp',
                                           state_space=None)
            for i, zval in enumerate(rho._zvals):
                if zval:
                    file_handle.write(bitflip.chp_str)
コード例 #5
0
    def test_densitymx_svterm_cterm(self):
        std_unitaries = itgs.standard_gatename_unitaries()

        for evotype in ['default']:  # 'densitymx', 'svterm', 'cterm'
            for name, U in std_unitaries.items():
                if callable(U):
                    continue  # skip unitary functions (create factories)
                dmop = op.StaticStandardOp(name,
                                           'pp',
                                           evotype,
                                           state_space=None)
                self.assertArraysAlmostEqual(
                    dmop._rep.to_dense('HilbertSchmidt'),
                    gt.unitary_to_pauligate(U))
コード例 #6
0
class ComposedSpamvecBase(object):
    base_prep_vec = sv.ComputationalBasisState([0], 'pp', 'default')
    base_noise_op = op.StaticStandardOp('Gxpi2', 'pp',
                                        'default')  # X(pi/2) rotation as noise
    base_povm = pv.ComputationalBasisPOVM(1, 'default')  # Z-basis measurement
    expected_out = ld.OutcomeLabelDict([(('0', ), 0.5), (('1', ), 0.5)])

    def setUp(self):
        self.vec = self.build_vec()
        ExplicitOpModel._strict = False

    def test_num_params(self):
        self.assertEqual(self.vec.num_params, self.n_params)

    def test_get_dimension(self):
        self.assertEqual(self.vec.dim, 4)

    def test_hessian(self):
        if self.n_params:
            self.assertTrue(self.vec.has_nonzero_hessian())
        else:
            self.assertFalse(self.vec.has_nonzero_hessian())

    def test_forward_simulation(self):
        pure_vec = self.vec.state_vec
        noise_op = self.vec.error_map

        # TODO: Would be nice to check more than densitymx evotype
        indep_mdl = ExplicitOpModel(['Q0'], evotype='default')
        indep_mdl['rho0'] = pure_vec
        indep_mdl['G0'] = noise_op
        indep_mdl['Mdefault'] = self.base_povm
        indep_mdl.num_params  # triggers paramvec rebuild

        composed_mdl = ExplicitOpModel(['Q0'], evotype='default')
        composed_mdl['rho0'] = self.vec
        composed_mdl['Mdefault'] = self.base_povm
        composed_mdl.num_params  # triggers paramvec rebuild

        # Sanity check
        indep_circ = Circuit(['rho0', 'G0', 'Mdefault'])
        indep_probs = indep_mdl.probabilities(indep_circ)
        for k, v in indep_probs.items():
            self.assertAlmostEqual(self.expected_out[k], v)

        composed_circ = Circuit(['rho0', 'Mdefault'])
        composed_probs = composed_mdl.probabilities(composed_circ)
        for k, v in composed_probs.items():
            self.assertAlmostEqual(self.expected_out[k], v)
コード例 #7
0
class ComposedPovmBase(object):
    base_prep = sv.ComputationalBasisState([0], 'pp',
                                           'default')  # 0 state prep
    base_noise_op = op.StaticStandardOp('Gxpi2', 'pp',
                                        'default')  # X(pi/2) rotation as noise
    base_povm = pv.ComputationalBasisPOVM(1, 'default')  # Z-basis measurement
    expected_out = ld.OutcomeLabelDict([(('0', ), 0.5), (('1', ), 0.5)])

    def setUp(self):
        self.povm = self.build_povm()
        ExplicitOpModel._strict = False

    def test_num_params(self):
        self.assertEqual(self.povm.num_params, self.n_params)

    def test_get_dimension(self):
        self.assertEqual(self.povm.state_space.dim, 4)

    def test_forward_simulation(self):
        pure_povm = self.povm.base_povm
        noise_op = self.povm.error_map

        # TODO: Would be nice to check more than densitymx evotype
        indep_mdl = ExplicitOpModel(['Q0'], evotype='default')
        indep_mdl['rho0'] = self.base_prep
        indep_mdl['G0'] = noise_op.copy()
        indep_mdl['Mdefault'] = pure_povm
        indep_mdl._clean_paramvec()

        composed_mdl = ExplicitOpModel(['Q0'], evotype='default')
        composed_mdl['rho0'] = self.base_prep
        composed_mdl['Mdefault'] = self.povm
        composed_mdl._clean_paramvec()

        # Sanity check
        indep_circ = Circuit(['rho0', 'G0', 'Mdefault'])
        indep_probs = indep_mdl.probabilities(indep_circ)
        for k, v in indep_probs.items():
            self.assertAlmostEqual(self.expected_out[k], v)

        composed_circ = Circuit(['rho0', 'Mdefault'])
        composed_probs = composed_mdl.probabilities(composed_circ)
        for k, v in composed_probs.items():
            self.assertAlmostEqual(self.expected_out[k], v)