@@ -10,19 +10,17 @@ export enr_identity, enr_fock, enr_destroy, enr_thermal_dm
1010 size::Int
1111 dims::NTuple{N,Int}
1212 n_excitations::Int
13- n_subspace::Int
1413 state2idx::Dict{SVector{N,Int},Int}
1514 idx2state::Dict{Int,SVector{N,Int}}
1615 end
1716
18- A structure that describes an excitation-number restricted (ENR) state space.
17+ A structure that describes an excitation-number restricted (ENR) state space, where `N` is the number of sub-systems .
1918
2019# Fields
2120
2221- `size`: Number of states in the excitation-number restricted state space
2322- `dims`: A list of the number of states in each sub-system
2423- `n_excitations`: Maximum number of excitations
25- - `n_subspace`: The number of sub-systems
2624- `state2idx`: A dictionary for looking up a state index from a state (`SVector`)
2725- `idx2state`: A dictionary for looking up state (`SVector`) from a state index
2826
@@ -43,7 +41,6 @@ struct EnrSpace{N} <: AbstractSpace
4341 size:: Int
4442 dims:: SVector{N,Int}
4543 n_excitations:: Int
46- n_subspace:: Int
4744 state2idx:: Dict{SVector{N,Int},Int}
4845 idx2state:: Dict{Int,SVector{N,Int}}
4946
@@ -52,7 +49,7 @@ struct EnrSpace{N} <: AbstractSpace
5249 size, state2idx, idx2state = enr_state_dictionaries (dims, excitations)
5350
5451 L = length (dims)
55- return new {L} (size, SVector {L} (dims), excitations, L, state2idx, idx2state)
52+ return new {L} (size, SVector {L} (dims), excitations, state2idx, idx2state)
5653 end
5754end
5855
116113
117114function enr_identity (dims:: Union{AbstractVector{T},NTuple{N,T}} , excitations:: Int ) where {T<: Integer ,N}
118115 s_enr = EnrSpace (dims, excitations)
119- return QuantumObject ( Diagonal ( ones (ComplexF64, s_enr. size)), Operator (), Dimensions (s_enr) )
116+ return enr_identity ( s_enr)
120117end
118+ enr_identity (s_enr:: EnrSpace ) = QuantumObject (Diagonal (ones (ComplexF64, s_enr. size)), Operator (), Dimensions (s_enr))
121119
122120function enr_fock (
123121 dims:: Union{AbstractVector{T},NTuple{N,T}} ,
@@ -126,6 +124,13 @@ function enr_fock(
126124 sparse:: Union{Bool,Val} = Val (false ),
127125) where {T<: Integer ,N}
128126 s_enr = EnrSpace (dims, excitations)
127+ return enr_fock (s_enr, state, sparse = sparse)
128+ end
129+ function enr_fock (
130+ s_enr:: EnrSpace ,
131+ state:: AbstractVector{T} ;
132+ sparse:: Union{Bool,Val} = Val (false ),
133+ ) where {T<: Integer }
129134 if getVal (sparse)
130135 array = sparsevec ([s_enr. state2idx[[state... ]]], [1.0 + 0im ], s_enr. size)
131136 else
@@ -136,13 +141,19 @@ function enr_fock(
136141 return QuantumObject (array, Ket (), s_enr)
137142end
138143
139- function enr_destroy (dims:: Union{AbstractVector{T},NTuple{N,T}} , excitations:: Int ) where {T<: Integer ,N}
144+ function enr_destroy (
145+ dims:: Union{AbstractVector{T},NTuple{N,T}} ,
146+ excitations:: Int
147+ ) where {T<: Integer ,N}
140148 s_enr = EnrSpace (dims, excitations)
149+ return enr_destroy (s_enr)
150+ end
151+ function enr_destroy (s_enr:: EnrSpace{N} ) where {N}
141152 D = s_enr. size
142153 idx2state = s_enr. idx2state
143154 state2idx = s_enr. state2idx
144155
145- a_ops = ntuple (i -> QuantumObject (spzeros (ComplexF64, D, D), Operator (), s_enr), s_enr . n_subspace )
156+ a_ops = ntuple (i -> QuantumObject (spzeros (ComplexF64, D, D), Operator (), s_enr), N )
146157
147158 for (n1, state1) in idx2state
148159 for (idx, s) in pairs (state1)
@@ -162,11 +173,13 @@ end
162173
163174function enr_thermal_dm (dims:: Union{AbstractVector{T1},NTuple{N,T1}} , excitations:: Int , n:: Union{T2,AbstractVector{T2}} ) where {T1<: Integer ,T2<: Real ,N}
164175 s_enr = EnrSpace (dims, excitations)
165-
176+ return enr_thermal_dm (s_enr, n)
177+ end
178+ function enr_thermal_dm (s_enr:: EnrSpace{N} , n:: Union{T,AbstractVector{T}} ) where {N,T<: Real }
166179 if n isa Real
167- nvec = fill (n, s_enr . n_subspace )
180+ nvec = fill (n, N )
168181 else
169- (length (n) == s_enr . n_subspace ) || throw (ArgumentError (" The length of the vector `n` should be the same as `dims`." ))
182+ (length (n) == N ) || throw (ArgumentError (" The length of the vector `n` should be the same as `dims`." ))
170183 nvec = n
171184 end
172185
0 commit comments