From 4242f23e245ec1d67f2ee67caa4e9501fef50bf1 Mon Sep 17 00:00:00 2001 From: merav-aharoni Date: Tue, 17 Oct 2023 09:45:56 +0000 Subject: [PATCH] Fixed bug when defining shots as int64 --- qiskit_ibm_runtime/utils/json.py | 2 ++ releasenotes/notes/fix_np_int64-864b605a88f57419.yaml | 5 +++++ test/unit/test_data_serialization.py | 7 +++++++ 3 files changed, 14 insertions(+) create mode 100644 releasenotes/notes/fix_np_int64-864b605a88f57419.yaml diff --git a/qiskit_ibm_runtime/utils/json.py b/qiskit_ibm_runtime/utils/json.py index d5f51935bb..de477f982d 100644 --- a/qiskit_ibm_runtime/utils/json.py +++ b/qiskit_ibm_runtime/utils/json.py @@ -207,6 +207,8 @@ def default(self, obj: Any) -> Any: # pylint: disable=arguments-differ return {"__type__": "ndarray", "__value__": obj.tolist()} value = _serialize_and_encode(obj, np.save, allow_pickle=False) return {"__type__": "ndarray", "__value__": value} + if isinstance(obj, np.int64): + return obj.item() if isinstance(obj, set): return {"__type__": "set", "__value__": list(obj)} if isinstance(obj, Result): diff --git a/releasenotes/notes/fix_np_int64-864b605a88f57419.yaml b/releasenotes/notes/fix_np_int64-864b605a88f57419.yaml new file mode 100644 index 0000000000..106c68469a --- /dev/null +++ b/releasenotes/notes/fix_np_int64-864b605a88f57419.yaml @@ -0,0 +1,5 @@ +--- +fixes: + - | + Fixed a bug where ``shots`` passed in as a numpy type were not being + serialized correctly. diff --git a/test/unit/test_data_serialization.py b/test/unit/test_data_serialization.py index f4845e55ef..604b78cb19 100644 --- a/test/unit/test_data_serialization.py +++ b/test/unit/test_data_serialization.py @@ -186,6 +186,13 @@ def test_encoder_instruction(self): decoded = json.loads(encoded, cls=RuntimeDecoder) self.assertEqual(decoded, obj) + def test_encoder_np_number(self): + """Test encoding and decoding instructions""" + encoded = json.dumps(np.int64(100), cls=RuntimeEncoder) + self.assertIsInstance(encoded, str) + decoded = json.loads(encoded, cls=RuntimeDecoder) + self.assertEqual(decoded, 100) + def test_encoder_callable(self): """Test encoding a callable.""" with warnings.catch_warnings(record=True) as warn_cm: