@@ -9,10 +9,10 @@ It also implements the fundamental functions in Julia standard library:
99export QuantumObject
1010
1111@doc raw """
12- struct QuantumObject{MT<:AbstractArray,ObjType<:QuantumObjectType,N }
12+ struct QuantumObject{MT<:AbstractArray,ObjType<:QuantumObjectType,DimType<:AbstractDimensions }
1313 data::MT
1414 type::ObjType
15- dims::SVector{N, Int}
15+ dims::DimType
1616 end
1717
1818Julia struct representing any quantum objects.
@@ -33,26 +33,21 @@ julia> a isa QuantumObject
3333true
3434```
3535"""
36- struct QuantumObject{MT<: AbstractArray ,ObjType<: QuantumObjectType ,N } <: AbstractQuantumObject{MT,ObjType,N }
36+ struct QuantumObject{MT<: AbstractArray ,ObjType<: QuantumObjectType ,DimType <: AbstractDimensions } <: AbstractQuantumObject{MT,ObjType,DimType }
3737 data:: MT
3838 type:: ObjType
39- dims:: SVector{N,Int}
39+ dims:: DimType
4040
4141 function QuantumObject (data:: MT , type:: ObjType , dims) where {MT<: AbstractArray ,ObjType<: QuantumObjectType }
42- _check_dims (dims)
42+ _dims = _gen_dims (dims)
4343
4444 _size = _get_size (data)
45- _check_QuantumObject (type, dims , _size[1 ], _size[2 ])
45+ _check_QuantumObject (type, _dims , _size[1 ], _size[2 ])
4646
47- N = length (dims)
48-
49- return new {MT,ObjType,N} (data, type, SVector {N,Int} (dims))
47+ return new {MT,ObjType,typeof(_dims)} (data, type, _dims)
5048 end
5149end
5250
53- QuantumObject (A:: AbstractArray , type:: ObjType , dims:: Integer ) where {ObjType<: QuantumObjectType } =
54- QuantumObject (A, type, SVector {1,Int} (dims))
55-
5651@doc raw """
5752 Qobj(A::AbstractArray; type = nothing, dims = nothing)
5853 QuantumObject(A::AbstractArray; type = nothing, dims = nothing)
@@ -81,9 +76,9 @@ function QuantumObject(
8176
8277 if dims isa Nothing
8378 if type isa OperatorQuantumObject || type isa BraQuantumObject
84- dims = SVector {1,Int} ( _size[2 ])
79+ dims = _size[2 ]
8580 elseif type isa SuperOperatorQuantumObject || type isa OperatorBraQuantumObject
86- dims = SVector {1,Int} ( isqrt (_size[2 ]) )
81+ dims = isqrt (_size[2 ])
8782 end
8883 end
8984
@@ -104,9 +99,9 @@ function QuantumObject(
10499 if dims isa Nothing
105100 _size = _get_size (A)
106101 if type isa KetQuantumObject
107- dims = SVector {1,Int} (_size[1 ])
102+ dims = _gen_dims (_size[1 ])
108103 elseif type isa OperatorKetQuantumObject
109- dims = SVector {1,Int} (isqrt (_size[1 ]))
104+ dims = _gen_dims (isqrt (_size[1 ]))
110105 end
111106 end
112107
@@ -127,8 +122,9 @@ function QuantumObject(
127122 dims = A. dims,
128123) where {T,N,ObjType<: QuantumObjectType }
129124 _size = N == 1 ? (length (A), 1 ) : size (A)
130- _check_QuantumObject (type, dims, _size[1 ], _size[2 ])
131- return QuantumObject (copy (A. data), type, dims)
125+ _dims = _gen_dims (dims)
126+ _check_QuantumObject (type, _dims, _size[1 ], _size[2 ])
127+ return QuantumObject (copy (A. data), type, _dims)
132128end
133129
134130function Base. show (
0 commit comments