Skip to content

Commit 1c1bf87

Browse files
authored
Fix qutip Qobj handling for qutip 5.0.0 (#354)
1 parent 5f40346 commit 1c1bf87

File tree

4 files changed

+16
-15
lines changed

4 files changed

+16
-15
lines changed

qiskit_dynamics/arraylias/register_functions/asarray.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -29,13 +29,7 @@ def _isinstance_qutip_qobj(obj):
2929
Returns:
3030
Bool: True if obj is qutip Qobj
3131
"""
32-
if (
33-
type(obj).__name__ == "Qobj"
34-
and hasattr(obj, "_data")
35-
and type(obj._data).__name__ == "fast_csr_matrix"
36-
):
37-
return True
38-
return False
32+
return type(obj).__name__ == "Qobj"
3933

4034

4135
def register_asarray(alias):
@@ -44,7 +38,7 @@ def register_asarray(alias):
4438
@alias.register_default(path="asarray")
4539
def _(arr):
4640
if _isinstance_qutip_qobj(arr):
47-
return csr_matrix(arr)
41+
return arr.full()
4842
return np.asarray(arr)
4943

5044
@alias.register_function(lib="scipy_sparse", path="asarray")
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
---
2+
upgrade:
3+
- |
4+
To enable compatibility with QuTiP 5.0.0, ``qutip.Qobj`` instances are now converted to a raw
5+
array type in Dynamics via the ``qutip.Qobj.full`` method. This method always returns a dense
6+
array, and hence ``qutip.Qobj`` instances are no longer turned into ``scipy.sparse.csr_matrix``
7+
instances in Dynamics.

test/dynamics/arraylias/test_alias.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -183,5 +183,5 @@ def test_qutip_conversion(self):
183183
qobj = Qobj([[0, 1], [1, 0]])
184184

185185
out = unp.asarray(qobj)
186-
self.assertTrue(isinstance(out, csr_matrix))
187-
self.assertAllClose(out.todense(), np.array([[0.0, 1.0], [1.0, 0.0]]))
186+
self.assertTrue(isinstance(out, np.ndarray))
187+
self.assertAllClose(out, np.array([[0.0, 1.0], [1.0, 0.0]]))

test/dynamics/models/test_rotating_frame.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -521,16 +521,16 @@ def test_state_transformations_no_frame_qobj_type(self):
521521
t = 0.123
522522
y = qutip.Qobj([[1.0, 1]])
523523
out = rotating_frame.state_into_frame(t, y)
524-
self.assertTrue(isinstance(out, csr_matrix))
524+
self.assertTrue(isinstance(out, np.ndarray))
525525
out = rotating_frame.state_out_of_frame(t, y)
526-
self.assertTrue(isinstance(out, csr_matrix))
526+
self.assertTrue(isinstance(out, np.ndarray))
527527

528528
t = 100.12498
529-
y = csr_matrix(np.eye(2))
529+
y = qutip.Qobj(np.eye(2))
530530
out = rotating_frame.state_into_frame(t, y)
531-
self.assertTrue(isinstance(out, csr_matrix))
531+
self.assertTrue(isinstance(out, np.ndarray))
532532
out = rotating_frame.state_out_of_frame(t, y)
533-
self.assertTrue(isinstance(out, csr_matrix))
533+
self.assertTrue(isinstance(out, np.ndarray))
534534

535535
def test_state_transformations_no_frame_Operator_types(self):
536536
"""Test frame transformations with no frame."""

0 commit comments

Comments
 (0)