Skip to content
This repository was archived by the owner on Dec 7, 2021. It is now read-only.
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion qiskit/aqua/operators/converters/circuit_sampler.py
Original file line number Diff line number Diff line change
Expand Up @@ -164,12 +164,13 @@ def convert(self,
Returns:
The converted Operator with CircuitStateFns replaced by DictStateFns or VectorStateFns.
"""
if self._last_op is None or operator != self._last_op:
if self._last_op is None or id(operator) != id(self._last_op):
# Clear caches
self._last_op = operator
self._reduced_op_cache = None
self._circuit_ops_cache = None
self._transpiled_circ_cache = None
self._transpile_before_bind = True

if not self._reduced_op_cache:
operator_dicts_replaced = operator.to_circuit_op()
Expand Down
11 changes: 5 additions & 6 deletions qiskit/aqua/operators/primitive_ops/circuit_op.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,7 +47,7 @@ def __init__(self,
coeff: A coefficient multiplying the primitive

Raises:
TypeError: invalid parameters.
TypeError: Unsupported primitive, or primitive has ClassicalRegisters.
"""
if isinstance(primitive, Instruction):
qc = QuantumCircuit(primitive.num_qubits)
Expand All @@ -58,6 +58,9 @@ def __init__(self,
raise TypeError('CircuitOp can only be instantiated with '
'QuantumCircuit, not {}'.format(type(primitive)))

if len(primitive.clbits) != 0:
raise TypeError('CircuitOp does not support QuantumCircuits with ClassicalRegisters.')

super().__init__(primitive, coeff=coeff)

def primitive_strings(self) -> Set[str]:
Expand Down Expand Up @@ -122,11 +125,7 @@ def compose(self, other: OperatorBase) -> OperatorBase:
other = other.to_circuit_op()

if isinstance(other, (CircuitOp, CircuitStateFn)):
new_qc = QuantumCircuit(self.num_qubits)
new_qc.append(other.to_instruction(), qargs=range(self.num_qubits))
new_qc.append(self.to_instruction(), qargs=range(self.num_qubits))
# TODO Fix, because converting to dag just to append is nuts
new_qc = new_qc.decompose()
new_qc = other.primitive.combine(self.primitive)
if isinstance(other, CircuitStateFn):
return CircuitStateFn(new_qc,
is_measurement=other.is_measurement,
Expand Down
15 changes: 9 additions & 6 deletions qiskit/aqua/operators/state_fns/circuit_state_fn.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from typing import Union, Set
import numpy as np

from qiskit import QuantumCircuit, BasicAer, execute
from qiskit import QuantumCircuit, BasicAer, execute, ClassicalRegister
from qiskit.circuit import Instruction, ParameterExpression
from qiskit.extensions import Initialize, IGate

Expand Down Expand Up @@ -46,7 +46,7 @@ def __init__(self,
is_measurement: Whether the StateFn is a measurement operator.

Raises:
TypeError: invalid parameters.
TypeError: Unsupported primitive, or primitive has ClassicalRegisters.
"""
if isinstance(primitive, Instruction):
qc = QuantumCircuit(primitive.num_qubits)
Expand All @@ -57,6 +57,9 @@ def __init__(self,
raise TypeError('CircuitStateFn can only be instantiated '
'with QuantumCircuit, not {}'.format(type(primitive)))

if len(primitive.clbits) != 0:
raise TypeError('CircuitOp does not support QuantumCircuits with ClassicalRegisters.')

super().__init__(primitive, coeff=coeff, is_measurement=is_measurement)

@staticmethod
Expand Down Expand Up @@ -294,10 +297,10 @@ def eval(self,
def to_circuit(self, meas: bool = False) -> QuantumCircuit:
""" Return QuantumCircuit representing StateFn """
if meas:
qc = QuantumCircuit(self.num_qubits, self.num_qubits)
qc.append(self.to_instruction(), qargs=range(self.primitive.num_qubits))
qc.measure(qubit=range(self.num_qubits), cbit=range(self.num_qubits))
return qc.decompose()
meas_qc = self.primitive.copy()
meas_qc.add_register(ClassicalRegister(self.num_qubits))
meas_qc.measure(qubit=range(self.num_qubits), cbit=range(self.num_qubits))
return meas_qc
else:
return self.primitive

Expand Down
3 changes: 2 additions & 1 deletion test/aqua/operators/test_pauli_expectation.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,7 @@
PauliExpectation, AbelianGrouper,
CircuitSampler)

from qiskit import BasicAer, IBMQ
from qiskit import BasicAer


# pylint: disable=invalid-name
Expand Down Expand Up @@ -190,6 +190,7 @@ def test_grouped_pauli_expectation(self):
@unittest.skip(reason="IBMQ testing not available in general.")
def test_ibmq_grouped_pauli_expectation(self):
""" pauli expect op vector state vector test """
from qiskit import IBMQ
p = IBMQ.load_account()
backend = p.get_backend('ibmq_qasm_simulator')
paulis_op = ListOp([X, Y, Z, I])
Expand Down
3 changes: 2 additions & 1 deletion test/aqua/test_vqe.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@
from test.aqua import QiskitAquaTestCase
import numpy as np
from ddt import ddt, unpack, data
from qiskit import BasicAer, QuantumCircuit, IBMQ
from qiskit import BasicAer, QuantumCircuit
from qiskit.circuit import ParameterVector

from qiskit.aqua import QuantumInstance, aqua_globals, AquaError
Expand Down Expand Up @@ -259,6 +259,7 @@ def test_vqe_mes(self):
@unittest.skip(reason="IBMQ testing not available in general.")
def test_ibmq_vqe(self):
""" IBMQ VQE Test """
from qiskit import IBMQ
provider = IBMQ.load_account()
backend = provider.get_backend('ibmq_qasm_simulator')
var_form = RYRZ(self.qubit_op.num_qubits)
Expand Down