Skip to content

Commit 3de6564

Browse files
authored
refactor: make import and export explicit (#251)
* move all import into QuantumCumulants.jl file * check_all_explicit_imports_via_owners * fix SQA import list * fix tests * idmergeable method in docs example to use SQA * enable tests again
1 parent 00b60aa commit 3de6564

20 files changed

+144
-106
lines changed

Project.toml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ Latexify = "23fbe1c1-3f47-55db-b15f-69d7ec21a316"
99
LinearAlgebra = "37e2e46d-f89d-539d-b4ee-838fcccc9c8e"
1010
MacroTools = "1914dd2f-81c6-5fcd-8719-6d5c9610ff09"
1111
ModelingToolkit = "961ee093-0014-501f-94e3-6117800e7a78"
12+
OrderedCollections = "bac558e1-5e72-5ebc-8fee-abe8a469f55d"
1213
QuantumOpticsBase = "4f57444f-1401-5e15-980d-4471b28d5678"
13-
Reexport = "189a3867-3050-52da-a836-e630ba90ab69"
1414
SciMLBase = "0bca4576-84f4-4d90-8ffe-ffa030f20462"
1515
SecondQuantizedAlgebra = "f7aa4685-e143-4cb6-a7f3-073579757907"
1616
SymbolicUtils = "d1185830-fcd6-423d-90d6-eec64667417b"
@@ -29,10 +29,10 @@ LinearAlgebra = "1.10"
2929
MacroTools = "0.5"
3030
ModelingToolkit = "~9.70"
3131
OrdinaryDiffEq = "6"
32+
OrderedCollections = "1.8"
3233
QuantumOptics = "1"
3334
QuantumOpticsBase = "0.4, 0.5"
3435
Random = "1.10"
35-
Reexport = "1"
3636
SciMLBase = "1, 2"
3737
SecondQuantizedAlgebra = "0.3.1"
3838
SteadyStateDiffEq = "2"

docs/src/implementation.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -404,7 +404,8 @@ Symbolics.jl. More fields could be added, but the four shown here are always req
404404
Now, for methods we simply need:
405405

406406
```@example custom-operators
407-
QuantumCumulants.ismergeable(::Position,::Momentum) = true
407+
using SecondQuantizedAlgebra
408+
SecondQuantizedAlgebra.ismergeable(::Position,::Momentum) = true
408409
Base.:*(x::Position, p::Momentum) = im + p*x
409410
Base.isequal(a::Position, b::Position) = isequal(a.hilbert, b.hilbert) && isequal(a.name, b.name) && isequal(a.aon, b.aon)
410411
Base.isequal(a::Momentum, b::Momentum) = isequal(a.hilbert, b.hilbert) && isequal(a.name, b.name) && isequal(a.aon, b.aon)

src/QuantumCumulants.jl

Lines changed: 70 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,65 +1,106 @@
11
module QuantumCumulants
22

3-
import SymbolicUtils
4-
import SymbolicUtils: substitute, BasicSymbolic, operation, arguments, iscall
3+
using Latexify: Latexify, @latexrecipe, latexify
4+
using MacroTools: MacroTools
5+
using LaTeXStrings: LaTeXStrings, latexstring, @L_str
56

6-
import Symbolics
7-
import TermInterface
7+
using Combinatorics: partitions
8+
using LinearAlgebra: LinearAlgebra
9+
using OrderedCollections: OrderedCollections
810

9-
import SciMLBase
11+
using SciMLBase: SciMLBase
12+
using QuantumOpticsBase: QuantumOpticsBase
1013

11-
import ModelingToolkit
12-
import ModelingToolkit: complete, complete!
13-
const MTK = ModelingToolkit
14-
15-
using Combinatorics: partitions, combinations, levicivita
16-
using LinearAlgebra
14+
using SymbolicUtils: SymbolicUtils, substitute, BasicSymbolic, operation, arguments, iscall
1715

18-
using QuantumOpticsBase
19-
import QuantumOpticsBase: , tensor
16+
using Symbolics: Symbolics
17+
using TermInterface: TermInterface
2018

19+
using ModelingToolkit: ModelingToolkit, complete, complete!
20+
const MTK = ModelingToolkit
2121

22-
using Reexport
23-
@reexport using SecondQuantizedAlgebra
2422
using SecondQuantizedAlgebra:
23+
SecondQuantizedAlgebra,
24+
QTerm,
25+
QSym,
26+
CNumber,
27+
Average,
2528
QNumber,
26-
SNuN,
2729
QMul,
2830
QAdd,
31+
SpecialIndexedTerm,
32+
IndexedOperator,
2933
ClusterAon,
3034
CallableTransition,
31-
IndexInt,
35+
NumberedOperator,
36+
Parameter,
37+
ProductSpace,
38+
FockSpace,
39+
Destroy,
40+
Create,
41+
Index,
42+
SingleSum,
43+
DoubleSum,
44+
Transition,
45+
NLevelSpace,
3246
get_indices,
3347
commutator,
34-
numeric_average,
3548
_conj,
3649
_adjoint,
3750
get_i,
3851
hilbert,
3952
inorder!,
4053
levels,
4154
has_cluster,
42-
ismergeable,
43-
inadjoint,
4455
undo_average,
4556
_average,
4657
sym_average,
4758
IndexedVariable,
4859
DoubleIndexedVariable,
4960
SpecialIndexedAverage,
50-
IndexedAverageSum,
5161
_inconj,
5262
DoubleNumberedVariable,
5363
SingleNumberedVariable,
5464
create_index_arrays,
55-
IndexedAverageDoubleSum,
56-
getIndName,
5765
_to_expression,
5866
AvgSums,
59-
get_numbers
60-
const SQA = SecondQuantizedAlgebra
67+
get_numbers,
68+
@cnumbers,
69+
@qnumbers,
70+
@rnumbers,
71+
ClusterSpace,
72+
HilbertSpace,
73+
Pauli,
74+
PauliSpace,
75+
SpinSpace,
76+
RNumber,
77+
RealParameter,
78+
Spin,
79+
cnumber,
80+
cnumbers,
81+
find_operators,
82+
fundamental_operators,
83+
insert_index,
84+
order_by_index,
85+
reorder,
86+
rnumber,
87+
rnumbers,
88+
to_numeric,
89+
transition_superscript,
90+
unique_ops,
91+
unique_ops!,
92+
Σ,
93+
∑,
94+
,
95+
tensor,
96+
acts_on,
97+
average,
98+
change_index,
99+
numeric_average,
100+
IndexedAverageSum,
101+
IndexedAverageDoubleSum
61102

62-
import Base: *, +, -
103+
const SQA = SecondQuantizedAlgebra
63104

64105
export HilbertSpace,
65106
ProductSpace,
@@ -91,6 +132,8 @@ export HilbertSpace,
91132
@rnumbers,
92133
rnumbers,
93134
rnumber,
135+
Average,
136+
average,
94137
cumulant_expansion,
95138
get_order,
96139
cumulant,
@@ -145,11 +188,7 @@ export HilbertSpace,
145188
insert_index,
146189
eval_term,
147190
MeanfieldNoiseEquations,
148-
IndexedMeanfieldNoiseEquations#, indexed_arithmetic, indexed_noise, simplified_indexed_complete!
149-
150-
151-
source_metadata(source, name) =
152-
Base.ImmutableDict{DataType,Any}(Symbolics.VariableSource, (source, name))
191+
IndexedMeanfieldNoiseEquations
153192

154193

155194
include("equations.jl")

src/correlation.jl

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@ function CorrelationFunction(
4040
)
4141
if iv === nothing
4242
iv_ = SymbolicUtils.Sym{Real}()
43-
iv_ = SymbolicUtils.setmetadata(iv_, MTK.VariableSource, (:parameters, ))
43+
iv_ = SymbolicUtils.setmetadata(iv_, Symbolics.VariableSource, (:parameters, ))
4444
iv_ = SymbolicUtils.setmetadata(iv_, MTK.MTKVariableTypeCtx, MTK.PARAMETER)
4545
else
4646
iv_ = iv
@@ -383,7 +383,7 @@ function MTK.ODESystem(c::CorrelationFunction; complete_sys = true, kwargs...)
383383
return complete_sys ? complete(sys) : sys
384384
end
385385

386-
substitute(c::CorrelationFunction, args...; kwargs...) = CorrelationFunction(
386+
SymbolicUtils.substitute(c::CorrelationFunction, args...; kwargs...) = CorrelationFunction(
387387
c.op1,
388388
c.op2,
389389
substitute(c.de0, args...; kwargs...),
@@ -619,7 +619,7 @@ function _substitute_vars(t::T) where {T<:SymbolicUtils.Symbolic}
619619
)
620620
else
621621
args = [_substitute_vars(arg) for arg SymbolicUtils.arguments(t)]
622-
return SymbolicUtils.maketerm(T, f, args, TermInterface.metadata(t))
622+
return TermInterface.maketerm(T, f, args, TermInterface.metadata(t))
623623
end
624624
else
625625
return t

src/cumulant_expansion.jl

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -205,19 +205,19 @@ function _cumulant_expansion(x::IndexedAverageDoubleSum, order; kwargs...)
205205
end
206206
function _cumulant_expansion(a::BasicSymbolic{IndexedAverageSum}, order; kwargs...)
207207
if SymbolicUtils.hasmetadata(a, IndexedAverageSum)
208-
meta = SymbolicUtils.metadata(a)[IndexedAverageSum]
208+
meta = TermInterface.metadata(a)[IndexedAverageSum]
209209
return _cumulant_expansion(meta, order; kwargs...)
210210
end
211211
end
212212
function _cumulant_expansion(a::BasicSymbolic{IndexedAverageDoubleSum}, order; kwargs...)
213213
if SymbolicUtils.hasmetadata(a, IndexedAverageDoubleSum)
214-
meta = SymbolicUtils.metadata(a)[IndexedAverageDoubleSum]
214+
meta = TermInterface.metadata(a)[IndexedAverageDoubleSum]
215215
return _cumulant_expansion(meta, order; kwargs...)
216216
end
217217
end
218218
function _cumulant_expansion(a::BasicSymbolic{SpecialIndexedAverage}, order; kwargs...)
219219
if SymbolicUtils.hasmetadata(a, SpecialIndexedAverage)
220-
meta = SymbolicUtils.metadata(a)[SpecialIndexedAverage]
220+
meta = TermInterface.metadata(a)[SpecialIndexedAverage]
221221
return SpecialIndexedAverage(
222222
cumulant_expansion(meta.term, order; kwargs...),
223223
meta.indexMapping,
@@ -328,19 +328,19 @@ get_order(a::IndexedAverageDoubleSum) = get_order(a.innerSum)
328328
get_order(a::SpecialIndexedAverage) = get_order(a.term)
329329
function get_order(a::BasicSymbolic{IndexedAverageSum})
330330
if SymbolicUtils.hasmetadata(a, IndexedAverageSum)
331-
meta = SymbolicUtils.metadata(a)[IndexedAverageSum]
331+
meta = TermInterface.metadata(a)[IndexedAverageSum]
332332
return get_order(meta)
333333
end
334334
end
335335
function get_order(a::BasicSymbolic{IndexedAverageDoubleSum})
336336
if SymbolicUtils.hasmetadata(a, IndexedAverageDoubleSum)
337-
meta = SymbolicUtils.metadata(a)[IndexedAverageDoubleSum]
337+
meta = TermInterface.metadata(a)[IndexedAverageDoubleSum]
338338
return get_order(meta)
339339
end
340340
end
341341
function get_order(a::BasicSymbolic{SpecialIndexedAverage})
342342
if SymbolicUtils.hasmetadata(a, SpecialIndexedAverage)
343-
meta = SymbolicUtils.metadata(a)[SpecialIndexedAverage]
343+
meta = TermInterface.metadata(a)[SpecialIndexedAverage]
344344
return get_order(meta)
345345
end
346346
end

src/diffeq.jl

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -46,7 +46,7 @@ function substitute_conj(t::T, vs′, vs′hash) where {T}
4646
else
4747
_f = x->substitute_conj(x, vs′, vs′hash)
4848
args = map(_f, SymbolicUtils.arguments(t))
49-
return SymbolicUtils.maketerm(
49+
return TermInterface.maketerm(
5050
T,
5151
SymbolicUtils.operation(t),
5252
args,
@@ -128,7 +128,7 @@ function substitute_conj_ind(t::T, vs′, vs′hash) where {T}
128128
_f = x->substitute_conj_ind(x, vs′, vs′hash)
129129
args = map(_f, SymbolicUtils.arguments(t))
130130
f = SymbolicUtils.operation(t)
131-
return SymbolicUtils.maketerm(T, f, args, TermInterface.metadata(t))
131+
return TermInterface.maketerm(T, f, args, TermInterface.metadata(t))
132132
end
133133
else
134134
return t

src/equations.jl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -131,14 +131,14 @@ function _append!(de::T, me::T) where {T<:AbstractMeanfieldEquations}
131131
end
132132

133133
# Substitution
134-
function substitute(de::T, dict) where {T<:AbstractMeanfieldEquations}
134+
function SymbolicUtils.substitute(de::T, dict) where {T<:AbstractMeanfieldEquations}
135135
eqs = [substitute(eq, dict) for eq de.equations]
136136
states = getfield.(eqs, :lhs)
137137
fields = [getfield(de, s) for s fieldnames(T)[4:end]]
138138
return T(eqs, de.operator_equations, states, fields...)
139139
end
140140

141-
function substitute(de::IndexedMeanfieldEquations, dict)
141+
function SymbolicUtils.substitute(de::IndexedMeanfieldEquations, dict)
142142
eqs = [
143143
Symbolics.Equation(
144144
inorder!(substitute(eq.lhs, dict)),
@@ -190,6 +190,9 @@ function make_var(v, t)
190190
return SymbolicUtils.Term{Complex}(var_f, [t]; metadata = d)
191191
end
192192

193+
source_metadata(source, name) =
194+
Base.ImmutableDict{DataType,Any}(Symbolics.VariableSource, (source, name))
195+
193196
function make_varmap(vs, t)
194197
varmap = Pair{Any,Any}[]
195198
add_vars!(varmap, vs, t)

src/index_average.jl

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ function eval_term(
212212
h = nothing,
213213
kwargs...,
214214
)
215-
meta = SymbolicUtils.metadata(sum_)[IndexedAverageSum]
215+
meta = TermInterface.metadata(sum_)[IndexedAverageSum]
216216
if !=(h, nothing)
217217
if !(h isa Vector)
218218
h = [h]
@@ -261,7 +261,7 @@ function eval_term(
261261
return sum(adds)
262262
end
263263
function eval_term(sum::BasicSymbolic{IndexedAverageDoubleSum}; kwargs...)
264-
meta = SymbolicUtils.metadata(sum)[IndexedAverageDoubleSum]
264+
meta = TermInterface.metadata(sum)[IndexedAverageDoubleSum]
265265
return eval_term(
266266
IndexedAverageDoubleSum(
267267
eval_term(meta.innerSum; kwargs...),
@@ -342,7 +342,7 @@ function create_value_map(
342342
limits = Dict{BasicSymbolic,Int64}(),
343343
kwargs...,
344344
)
345-
iVar = SymbolicUtils.metadata(sym)[IndexedVariable]
345+
iVar = TermInterface.metadata(sym)[IndexedVariable]
346346
if iVar.ind.range isa SymbolicUtils.BasicSymbolic
347347
if iVar.ind.range in keys(limits)
348348
range1 = limits[iVar.ind.range]
@@ -367,7 +367,7 @@ function create_value_map(
367367
limits = Dict{BasicSymbolic,Int64}(),
368368
kwargs...,
369369
)
370-
iVar = SymbolicUtils.metadata(sym)[IndexedVariable]
370+
iVar = TermInterface.metadata(sym)[IndexedVariable]
371371
dict = Dict{BasicSymbolic,ComplexF64}()
372372
if iVar.ind.range isa SymbolicUtils.BasicSymbolic
373373
if iVar.ind.range in keys(limits)
@@ -390,7 +390,7 @@ function create_value_map(
390390
kwargs...,
391391
)
392392
dict = Dict{BasicSymbolic,ComplexF64}()
393-
var = SymbolicUtils.metadata(sym)[DoubleIndexedVariable]
393+
var = TermInterface.metadata(sym)[DoubleIndexedVariable]
394394
if var.ind1.range isa SymbolicUtils.BasicSymbolic
395395
if var.ind1.range in keys(limits)
396396
range1 = limits[var.ind1.range]
@@ -436,11 +436,11 @@ containsIndex(term::Average, ind::Index) = ind ∈ get_indices(term)
436436
# TODO: only used in tests, remove?
437437

438438
getAvrgs(sum::BasicSymbolic{SpecialIndexedAverage}) =
439-
getAvrgs(SymbolicUtils.metadata(sum)[SpecialIndexedAverage].term)
439+
getAvrgs(TermInterface.metadata(sum)[SpecialIndexedAverage].term)
440440
getAvrgs(sum::BasicSymbolic{IndexedAverageSum}) =
441-
getAvrgs(SymbolicUtils.metadata(sum)[IndexedAverageSum].term)
441+
getAvrgs(TermInterface.metadata(sum)[IndexedAverageSum].term)
442442
getAvrgs(Dsum::BasicSymbolic{IndexedAverageDoubleSum}) =
443-
getAvrgs(SymbolicUtils.metadata(Dsum)[IndexedAverageDoubleSum].innerSum)
443+
getAvrgs(TermInterface.metadata(Dsum)[IndexedAverageDoubleSum].innerSum)
444444
function getAvrgs(term::BasicSymbolic{<:CNumber})
445445
if iscall(term)
446446
return vcat(

0 commit comments

Comments
 (0)