def test_hhl_random_hermitian(self): self.log.debug('Testing HHL with random hermitian matrix') hermitian_params = self.params hermitian_params['eigs']['num_ancillae'] = 4 n = 2 np.random.seed(0) matrix = rmg.random_hermitian(n, eigrange=[0, 1]) vector = random(n) algo_input = LinearSystemInput() algo_input.matrix = matrix algo_input.vector = vector # run ExactLSsolver ref_result = run_algorithm(self.els_params, algo_input) ref_solution = ref_result['solution'] ref_normed = ref_solution/np.linalg.norm(ref_solution) # run hhl hhl_result = run_algorithm(hermitian_params, algo_input) hhl_solution = hhl_result['solution'] hhl_normed = hhl_solution/np.linalg.norm(hhl_solution) # compare result fidelity = state_fidelity(ref_normed, hhl_normed) np.testing.assert_approx_equal(fidelity, 1, significant=2) self.log.debug('HHL solution vector: {}'.format(hhl_solution)) self.log.debug('algebraic solution vector: {}'.format(ref_normed)) self.log.debug('fidelity HHL to algebraic: {}'.format(fidelity)) self.log.debug('probability of result: {}'.format(hhl_result["probability_result"]))
def test_hhl_random_hermitian_sv(self): self.log.debug('Testing HHL with random hermitian matrix') hermitian_params = self.params hermitian_params['eigs']['num_ancillae'] = 4 n = 2 matrix = rmg.random_hermitian(n, eigrange=[0, 1]) vector = random(2) algo_input = LinearSystemInput() algo_input.matrix = matrix algo_input.vector = vector # run hhl result = run_algorithm(hermitian_params, algo_input) hhl_solution = result["solution_hhl"] hhl_normed = hhl_solution / np.linalg.norm(hhl_solution) # linear algebra solution linalg_solution = np.linalg.solve(matrix, vector) linalg_normed = linalg_solution / np.linalg.norm(linalg_solution) # compare result fidelity = abs(linalg_normed.dot(hhl_normed.conj()))**2 np.testing.assert_approx_equal(fidelity, 1, significant=2) self.log.debug('HHL solution vector: {}'.format(hhl_solution)) self.log.debug('algebraic solution vector: {}'.format(linalg_solution)) self.log.debug('fidelity HHL to algebraic: {}'.format(fidelity)) self.log.debug('probability of result: {}'.format( result["probability_result"]))
def test_hhl_random_hermitian(self): """ hhl random hermitian test """ self.log.debug('Testing HHL with random hermitian matrix') n = 2 matrix = rmg.random_hermitian(n, eigrange=[0, 1]) vector = aqua_globals.random.random(n) # run NumPyLSsolver ref_result = NumPyLSsolver(matrix, vector).run() ref_solution = ref_result['solution'] ref_normed = ref_solution / np.linalg.norm(ref_solution) # run hhl orig_size = len(vector) matrix, vector, truncate_powerdim, truncate_hermitian = HHL.matrix_resize( matrix, vector) # Initialize eigenvalue finding module eigs = TestHHL._create_eigs(matrix, 4, False) num_q, num_a = eigs.get_register_sizes() # Initialize initial state module init_state = Custom(num_q, state_vector=vector) # Initialize reciprocal rotation module reci = LookupRotation(negative_evals=eigs._negative_evals, evo_time=eigs._evo_time) algo = HHL(matrix, vector, truncate_powerdim, truncate_hermitian, eigs, init_state, reci, num_q, num_a, orig_size) warnings.filterwarnings('ignore', category=DeprecationWarning) hhl_result = algo.run( QuantumInstance(BasicAer.get_backend('statevector_simulator'), seed_simulator=aqua_globals.random_seed, seed_transpiler=aqua_globals.random_seed)) warnings.filterwarnings('always', category=DeprecationWarning) hhl_solution = hhl_result['solution'] hhl_normed = hhl_solution / np.linalg.norm(hhl_solution) # compare result fidelity = state_fidelity(ref_normed, hhl_normed) np.testing.assert_approx_equal(fidelity, 1, significant=1) self.log.debug('HHL solution vector: %s', hhl_solution) self.log.debug('algebraic solution vector: %s', ref_normed) self.log.debug('fidelity HHL to algebraic: %s', fidelity) self.log.debug('probability of result: %s', hhl_result["probability_result"])
def test_random_hermitian(self, N): a = random_hermitian(N) distance = abs(np.sum(a - a.T.conj())) self.assertAlmostEqual(distance, 0, places=10)
def test_random_hermitian(self, m_v): """ random hermitian test """ r_a = random_hermitian(m_v) distance = abs(np.sum(r_a - r_a.T.conj())) self.assertAlmostEqual(distance, 0, places=10)