def test_trace_with_cache(self, backend): observable = Observable.ZZ(0,1) + Observable.ZZ(0,3) contract_option = BMPS(ReducedSVD(1)) qstate = peps.identity(3, 3, backend=backend) cache = qstate.make_trace_cache(contract_option) self.assertTrue(backend.isclose( qstate.trace(contract_option=contract_option, cache=cache), 2**qstate.nsite )) self.assertTrue(backend.isclose( qstate.trace(observable, contract_option=contract_option, cache=cache), 0, atol=1e-8 ))
def test_expectation(self, backend): qstate = statevector.computational_zeros(6, backend=backend) qstate.apply_circuit([ Gate('X', [], [0]), Gate('CX', [], [0, 3]), Gate('H', [], [2]), ]) observable = 1.5 * Observable.sum([ Observable.Z(0) * 2, Observable.Z(1), Observable.Z(2) * 2, Observable.Z(3), ]) self.assertTrue(np.isclose(qstate.expectation(observable), -3))
def test_expectation_use_cache_approx(self, backend): qstate = peps.computational_zeros(2, 3, backend=backend) qstate.apply_circuit([ Gate('X', [], [0]), Gate('CX', [], [0,3]), Gate('H', [], [2]), ], update_option=peps.DirectUpdate(ImplicitRandomizedSVD(rank=2))) observable = 1.5 * Observable.sum([ Observable.Z(0) * 2, Observable.Z(1), Observable.Z(2) * 2, Observable.Z(3), ]) contract_option = peps.BMPS(ReducedSVD(rank=2)) self.assertTrue(backend.isclose(qstate.expectation(observable, use_cache=True, contract_option=contract_option), -3))
def test_expectation_single_layer(self, backend): qstate = peps.computational_zeros(2, 3, backend=backend) qstate.apply_circuit([ Gate('X', [], [0]), Gate('CX', [], [0,3]), Gate('H', [], [2]), ]) observable = 1.5 * Observable.sum([ Observable.Z(0) * 2, Observable.Z(1), Observable.Z(2) * 2, Observable.Z(3), ]) contract_option = peps.SingleLayer(ImplicitRandomizedSVD(rank=2)) self.assertTrue(backend.isclose(qstate.expectation(observable, contract_option=contract_option), -3))
def test_expectation_use_cache(self, backend): qstate = peps.computational_zeros(2, 3, backend=backend) qstate.apply_circuit([ Gate('X', [], [0]), Gate('CX', [], [0, 3]), Gate('H', [], [2]), ]) observable = 1.5 * Observable.sum([ Observable.Z(0) * 2, Observable.Z(1), Observable.Z(2) * 2, Observable.Z(3), ]) self.assertTrue( backend.isclose(qstate.expectation(observable, use_cache=True), -3))
def test_trace(self, backend): observable = Observable.ZZ(0,1) + Observable.ZZ(0,3) qstate = peps.identity(3, 3, backend=backend) self.assertTrue(backend.isclose(qstate.trace(), 2**qstate.nsite)) self.assertTrue(backend.isclose(qstate.trace(observable), 0, atol=1e-8))