def test_io_consistency(self): """ consistency test """ new_op = X ^ Y ^ I label = 'XYI' # label = new_op.primitive.to_label() self.assertEqual(str(new_op.primitive), label) np.testing.assert_array_almost_equal(new_op.primitive.to_matrix(), Operator.from_label(label).data) self.assertEqual(new_op.primitive, Pauli(label=label)) x_mat = X.primitive.to_matrix() y_mat = Y.primitive.to_matrix() i_mat = np.eye(2, 2) np.testing.assert_array_almost_equal(new_op.primitive.to_matrix(), np.kron(np.kron(x_mat, y_mat), i_mat)) hi = np.kron(H.to_matrix(), I.to_matrix()) hi2 = Operator.from_label('HI').data hi3 = (H ^ I).to_matrix() np.testing.assert_array_almost_equal(hi, hi2) np.testing.assert_array_almost_equal(hi2, hi3) xy = np.kron(X.to_matrix(), Y.to_matrix()) xy2 = Operator.from_label('XY').data xy3 = (X ^ Y).to_matrix() np.testing.assert_array_almost_equal(xy, xy2) np.testing.assert_array_almost_equal(xy2, xy3) # Check if numpy array instantiation is the same as from Operator matrix_op = Operator.from_label('+r') np.testing.assert_array_almost_equal(PrimitiveOp(matrix_op).to_matrix(), PrimitiveOp(matrix_op.data).to_matrix()) # Ditto list of lists np.testing.assert_array_almost_equal(PrimitiveOp(matrix_op.data.tolist()).to_matrix(), PrimitiveOp(matrix_op.data).to_matrix())
def aux_operators( self, aux_operators: Optional[ Union[OperatorBase, LegacyBaseOperator, List[Optional[Union[OperatorBase, LegacyBaseOperator]]]]] ) -> None: """ Set aux operators """ if aux_operators is None: aux_operators = [] elif not isinstance(aux_operators, list): aux_operators = [aux_operators] # We need to handle the array entries being Optional i.e. having value None self._aux_op_nones = [op is None for op in aux_operators] if aux_operators: zero_op = I.tensorpower(self.operator.num_qubits) * 0.0 converted = [] for op in aux_operators: if op is None: converted.append(zero_op) elif isinstance(op, LegacyBaseOperator): converted.append(op.to_opflow()) else: converted.append(op) # For some reason Chemistry passes aux_ops with 0 qubits and paulis sometimes. aux_operators = [zero_op if op == 0 else op for op in converted] self._aux_operators = aux_operators # type: List
def aux_operators(self, aux_operators: Optional[List[Optional[Union[OperatorBase, LegacyBaseOperator]]]]) -> None: """ Set aux operators """ # We need to handle the array entries being Optional i.e. having value None self._aux_op_nones = None if isinstance(aux_operators, list): self._aux_op_nones = [op is None for op in aux_operators] zero_op = I.tensorpower(self.operator.num_qubits) * 0.0 converted = [op.to_opflow() if op else zero_op for op in aux_operators] # For some reason Chemistry passes aux_ops with 0 qubits and paulis sometimes. converted = [zero_op if op == 0 else op for op in converted] aux_operators = ListOp(converted) elif isinstance(aux_operators, LegacyBaseOperator): aux_operators = [aux_operators.to_opflow()] self._aux_operators = aux_operators
def aux_operators(self, aux_operators: Optional[List[Optional[Union[OperatorBase, LegacyBaseOperator]]]]) -> None: """ Set aux operators """ # This is all terrible code to deal with weight 0-qubit None aux_ops. self._aux_op_nones = None if isinstance(aux_operators, list): self._aux_op_nones = [op is None for op in aux_operators] zero_op = I.tensorpower(self.operator.num_qubits) * 0.0 converted = [op.to_opflow() if op else zero_op for op in aux_operators] # For some reason Chemistry passes aux_ops with 0 qubits and paulis sometimes. converted = [zero_op if op == 0 else op for op in converted] aux_operators = ListOp(converted) elif isinstance(aux_operators, LegacyBaseOperator): aux_operators = [aux_operators.to_opflow()] self._aux_operators = aux_operators
def aux_operators( self, aux_operators: Optional[List[Optional[Union[OperatorBase, LegacyBaseOperator]]]] ) -> None: """ set aux operators """ if aux_operators is None: self._aux_operators = [] else: aux_operators = \ [aux_operators] if not isinstance(aux_operators, list) else aux_operators converted = [ op.to_opflow() if op is not None else None for op in aux_operators ] # Chemistry passes aux_ops with 0 qubits and paulis sometimes zero_op = I.tensorpower(self.operator.num_qubits) * 0.0 converted = [zero_op if op == 0 else op for op in converted] self._aux_operators = converted
def aux_operators(self, aux_operators: Optional[ Union[OperatorBase, LegacyBaseOperator, List[Optional[Union[OperatorBase, LegacyBaseOperator]]]]]) -> None: if aux_operators is None: aux_operators = [] elif not isinstance(aux_operators, list): aux_operators = [aux_operators] if aux_operators: zero_op = I.tensorpower(self.operator.num_qubits) * 0.0 converted = [op.to_opflow() if isinstance(op, LegacyBaseOperator) else op for op in aux_operators] # For some reason Chemistry passes aux_ops with 0 qubits and paulis sometimes. aux_operators = [zero_op if op == 0 else op for op in converted] self._aux_operators = aux_operators
@author: linmin """ import numpy as np from docplex.mp.model import Model from qiskit.optimization.problems import QuadraticProgram from qiskit.optimization.converters import QuadraticProgramToIsing from qiskit import QuantumCircuit from qiskit.aqua.operators import StateFn from qiskit.aqua.operators import Z, X, Y, I, H, S import random count = 0 w = 0 P_0 = I.to_matrix() P_1 = X.to_matrix() P_2 = Y.to_matrix() P_3 = Z.to_matrix() HH = H.to_matrix() S = S.to_matrix() OPE = [P_0, HH, S] pauli = [P_0, P_1, P_2, P_3] Pauli = [I, X, Y, Z] R = 2 #number of iteration == R n = 5 #number of qubits x_matrix = np.zeros((R, n)) z_matrix = np.zeros((R, n)) matrix = np.zeros((R, 2*n))