Co-authored-by: mergify[bot] <37929162+mergify[bot]@users.noreply.github.com>
This commit is contained in:
Ikko Hamamura 2022-11-17 12:25:24 +09:00 committed by GitHub
parent da1a7e3093
commit 599b663e69
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 24 additions and 2 deletions

View File

@ -12,9 +12,10 @@
"""
Utility functions for primitives
"""
from __future__ import annotations
import numpy as np
from qiskit.circuit import Instruction, ParameterExpression, QuantumCircuit
from qiskit.circuit.bit import Bit
from qiskit.extensions.quantum_initializer.initializer import Initialize
@ -146,7 +147,10 @@ def _circuit_key(circuit: QuantumCircuit, functional: bool = True) -> tuple:
_bits_key(data.qubits, circuit), # qubits
_bits_key(data.clbits, circuit), # clbits
data.operation.name, # operation.name
tuple(data.operation.params), # operation.params
tuple(
param.data.tobytes() if isinstance(param, np.ndarray) else param
for param in data.operation.params
), # operation.params
)
for data in circuit.data
),

View File

@ -0,0 +1,5 @@
---
fixes:
- |
Fixed the problem in which primitives did not work when passing a circuit with ``numpy.ndarray``
as a parameter.

View File

@ -22,6 +22,7 @@ from qiskit import QuantumCircuit, pulse, transpile
from qiskit.circuit import Parameter
from qiskit.circuit.library import RealAmplitudes
from qiskit.exceptions import QiskitError
from qiskit.extensions.unitary import UnitaryGate
from qiskit.primitives import Sampler, SamplerResult
from qiskit.primitives.utils import _circuit_key
from qiskit.providers import JobStatus, JobV1
@ -770,6 +771,18 @@ class TestSampler(QiskitTestCase):
keys = [_circuit_key(test_with_scheduling(i)) for i in range(1, 5)]
self.assertEqual(len(keys), len(set(keys)))
def test_circuit_with_unitary(self):
"""Test for circuit with unitary gate."""
gate = UnitaryGate(np.eye(2))
circuit = QuantumCircuit(1)
circuit.append(gate, [0])
circuit.measure_all()
sampler = Sampler()
sampler_result = sampler.run([circuit]).result()
self.assertDictAlmostEqual(sampler_result.quasi_dists[0], {0: 1, 1: 0})
if __name__ == "__main__":
unittest.main()