Source code for scqubits.io_utils.fileio_qutip
# fileio_qutip.py
#
# This file is part of scqubits: a Python package for superconducting qubits,
# Quantum 5, 583 (2021). https://quantum-journal.org/papers/q-2021-11-17-583/
#
# Copyright (c) 2019 and later, Jens Koch and Peter Groszkowski
# All rights reserved.
#
# This source code is licensed under the BSD-style license found in the
# LICENSE file in the root directory of this source tree.
############################################################################
import numpy as np
import qutip as qt
from scqubits.io_utils.fileio import IOData
from scqubits.io_utils.fileio_serializers import Serializable
from scqubits.utils import misc as utils
[docs]class QutipEigenstates(np.ndarray, Serializable):
"""Wrapper class that adds serialization functionality to the numpy
ndarray class."""
[docs] @classmethod
def deserialize(cls, io_data: IOData) -> np.ndarray: # type:ignore
"""
Take the given IOData and return an instance of the described class, initialized
with the data stored in io_data.
"""
qobj_dims = io_data.ndarrays["qobj_dims"]
qobj_shape = io_data.ndarrays["qobj_shape"]
evec_array = io_data.ndarrays["evecs"]
qt_eigenstates = np.asarray(
[
(
qt.Qobj(evec, type="ket")
if qt.__version__ >= "5.0.0"
else qt.Qobj(evec, dims=qobj_dims, shape=qobj_shape, type="ket")
)
for evec in evec_array
],
dtype=np.dtype("O"),
)
return qt_eigenstates
[docs] def serialize(self) -> IOData:
"""
Convert the content of the current class instance into IOData format.
"""
import scqubits.io_utils.fileio as io
typename = type(self).__name__
evec_count = len(self)
qobj_dims = np.asarray(self[0].dims)
qobj_shape = np.asarray(self[0].shape)
io_attributes = {"evec_count": evec_count}
io_ndarrays = {
"evecs": np.asarray(
[utils.qt_ket_to_ndarray(qobj_ket) for qobj_ket in self]
),
"qobj_dims": qobj_dims,
"qobj_shape": qobj_shape,
}
return io.IOData(typename, io_attributes, io_ndarrays, objects=None)
[docs] def filewrite(self, filename: str):
"""Convenience method bound to the class. Simply accesses the
`write` function."""
import scqubits.io_utils.fileio as io
io.write(self, filename)