def test_log_i(self): """ MatrixOp.log_i() test """ op = (-1.052373245772859 * I ^ I) + \ (0.39793742484318045 * I ^ Z) + \ (0.18093119978423156 * X ^ X) + \ (-0.39793742484318045 * Z ^ I) + \ (-0.01128010425623538 * Z ^ Z) * np.pi/2 # Test with CircuitOp log_exp_op = op.to_matrix_op().exp_i().log_i().to_pauli_op() np.testing.assert_array_almost_equal(op.to_matrix(), log_exp_op.to_matrix()) # Test with MatrixOp log_exp_op = op.to_matrix_op().exp_i().to_matrix_op().log_i().to_pauli_op() np.testing.assert_array_almost_equal(op.to_matrix(), log_exp_op.to_matrix()) # Test with PauliOp log_exp_op = op.to_matrix_op().exp_i().to_pauli_op().log_i().to_pauli_op() np.testing.assert_array_almost_equal(op.to_matrix(), log_exp_op.to_matrix()) # Test with EvolvedOp log_exp_op = op.exp_i().to_pauli_op().log_i().to_pauli_op() np.testing.assert_array_almost_equal(op.to_matrix(), log_exp_op.to_matrix()) # Test with proper ListOp op = ListOp([(0.39793742484318045 * I ^ Z), (0.18093119978423156 * X ^ X), (-0.39793742484318045 * Z ^ I), (-0.01128010425623538 * Z ^ Z) * np.pi / 2]) log_exp_op = op.to_matrix_op().exp_i().to_matrix_op().log_i().to_pauli_op() np.testing.assert_array_almost_equal(op.to_matrix(), log_exp_op.to_matrix())
def test_to_matrix_called(self): """test to matrix called in different situations""" qs = 45 states_op = ListOp([Zero ^ qs, One ^ qs, (Zero ^ qs) + (One ^ qs)]) paulis_op = ListOp([Z ^ qs, (I ^ Z ^ I) ^ int(qs / 3)]) # 45 qubit calculation - throws exception if to_matrix is called # massive is False with self.assertRaises(ValueError): states_op.to_matrix() paulis_op.to_matrix() # now set global variable or argument try: algorithm_globals.massive = True with self.assertRaises(MemoryError): states_op.to_matrix() paulis_op.to_matrix() algorithm_globals.massive = False with self.assertRaises(MemoryError): states_op.to_matrix(massive=True) paulis_op.to_matrix(massive=True) finally: algorithm_globals.massive = False