Skip to content

Commit

Permalink
fix indexing and sums tests; conj; project.toml
Browse files Browse the repository at this point in the history
  • Loading branch information
ChristophHotter committed Aug 19, 2024
1 parent 870d7f8 commit 11fd81c
Show file tree
Hide file tree
Showing 7 changed files with 47 additions and 17 deletions.
6 changes: 3 additions & 3 deletions Project.toml
Original file line number Diff line number Diff line change
Expand Up @@ -24,9 +24,9 @@ MacroTools = "0.5"
ModelingToolkit = "9"
QuantumOpticsBase = "0.4, 0.5"
SciMLBase = "1, 2"
SymbolicUtils = "1, 2"
Symbolics = "5"
TermInterface = "0.4"
SymbolicUtils = "3.1.2"
Symbolics = "6"
TermInterface = "2"
julia = "1.6"

[extras]
Expand Down
2 changes: 2 additions & 0 deletions src/cnumber.jl
Original file line number Diff line number Diff line change
Expand Up @@ -26,6 +26,7 @@ Base.promote_rule(::Type{<:CNumber},::Type{<:Number}) = CNumber
Base.one(::Type{Parameter}) = 1
Base.zero(::Type{Parameter}) = 0
Base.adjoint(x::SymbolicUtils.Symbolic{<:CNumber}) = conj(x)
Base.adjoint(x::SymbolicUtils.BasicSymbolic{Complex{Real}}) = _conj(x)


"""
Expand Down Expand Up @@ -130,6 +131,7 @@ Base.zero(::Type{RealParameter}) = 0
Base.adjoint(x::SymbolicUtils.Symbolic{<:RNumber}) = x
Base.adjoint(x::RNumber) = x
Base.conj(x::RNumber) = x
Base.adjoint(x::SymbolicUtils.Symbolic{<:Real}) = conj(x)


"""
Expand Down
3 changes: 2 additions & 1 deletion src/index_average.jl
Original file line number Diff line number Diff line change
Expand Up @@ -701,7 +701,8 @@ function eval_term(sum_::BasicSymbolic{IndexedAverageSum};limits=Dict{SymbolicUt
if meta.sum_index.range in keys(limits)
rangeEval = limits[meta.sum_index.range]
else
if meta.sum_index.range isa BasicSymbolic{<:CNumber}
if meta.sum_index.range isa BasicSymbolic{ComplexF64}
# if meta.sum_index.range isa BasicSymbolic{<:CNumber}
if iscall(meta.sum_index.range)
args = arguments(meta.sum_index.range)
args_ = Vector{Any}(nothing,length(args))
Expand Down
9 changes: 8 additions & 1 deletion src/indexing.jl
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,14 @@ SingleSum(ops::QMul,ind::Index;metadata=NO_METADATA) = SingleSum(ops,ind,Index[]
SingleSum(ops::QAdd,ind::Index;metadata=NO_METADATA) = SingleSum(ops,ind,Index[];metadata=metadata)
SingleSum(op::QNumber,ind::Index;metadata=NO_METADATA) = SingleSum(op,ind,Index[];metadata=metadata)
SingleSum(ops::Number,ind::Index,NEI::Vector;metadata=NO_METADATA) = (ind.range - length(NEI))*ops
SingleSum(term, sum_index, non_equal_indices;metadata=NO_METADATA) = (sum_index.range - length(non_equal_indices)) * term
# SingleSum(term, sum_index, non_equal_indices;metadata=NO_METADATA) = (sum_index.range - length(non_equal_indices)) * term
function SingleSum(term, sum_index, non_equal_indices;metadata=NO_METADATA)
if (sum_index get_indices(term)) # saver way to avoid wrong simplification
return (sum_index.range - length(non_equal_indices)) * term
else
return SingleSum(term,sum_index,non_equal_indices,metadata)
end
end

function IndexedOperator(op::QMul,ind::Index)
arg_c = op.arg_c
Expand Down
26 changes: 18 additions & 8 deletions test/test_average_sums.jl
Original file line number Diff line number Diff line change
Expand Up @@ -52,7 +52,8 @@ g_ = insert_index(g(ind(:j)),ind(:j),1)
@test gamma isa SymbolicUtils.BasicSymbolic{qc.DoubleNumberedVariable}

gamma_ = insert_index(gamma,ind(:j),2)
@test gamma_ isa SymbolicUtils.BasicSymbolic{Parameter}
# @test gamma_ isa SymbolicUtils.BasicSymbolic{Parameter}
@test gamma_ isa SymbolicUtils.BasicSymbolic{ComplexF64}

@test !isequal(gamma,gamma_)
@test !isequal(gamma,g_)
Expand All @@ -74,19 +75,28 @@ pind = Index(h,:p,5,ha)

avrgTerm = average(Σ(σ(2,1,ind(:i))*σ(1,2,ind(:j)),ind(:i)))
@test avrgTerm isa SymbolicUtils.BasicSymbolic && operation(avrgTerm) === +
ADsum1 = qc.IndexedAverageDoubleSum(avrgTerm,ind(:j),[ind(:i)])
# ADsum1 = qc.IndexedAverageDoubleSum(avrgTerm,ind(:j),[ind(:i)])
# @test ADsum1 isa SymbolicUtils.BasicSymbolic && operation(ADsum1) === +
# @test SymbolicUtils.metadata(arguments(ADsum1)[it_2])[qc.IndexedAverageDoubleSum] isa qc.IndexedAverageDoubleSum
# @test SymbolicUtils.metadata(arguments(ADsum1)[2])[qc.IndexedAverageSum] isa qc.IndexedAverageSum

# executing it line by line gives a different order of the arguments?? arguments(ADsum1)
ADsum1 = simplify(qc.IndexedAverageDoubleSum(avrgTerm,ind(:j),[ind(:i)]))
it_1 = findfirst(x->typeof((x))==SymbolicUtils.BasicSymbolic{IndexedAverageSum}, arguments(ADsum1))
it_2 = findfirst(x->typeof((x))==SymbolicUtils.BasicSymbolic{IndexedAverageDoubleSum}, arguments(ADsum1))
@test ADsum1 isa SymbolicUtils.BasicSymbolic && operation(ADsum1) === +
@test SymbolicUtils.metadata(arguments(ADsum1)[1])[qc.IndexedAverageDoubleSum] isa qc.IndexedAverageDoubleSum
@test SymbolicUtils.metadata(arguments(ADsum1)[2])[qc.IndexedAverageSum] isa qc.IndexedAverageSum
@test SymbolicUtils.metadata(arguments(ADsum1)[it_2])[qc.IndexedAverageDoubleSum] isa qc.IndexedAverageDoubleSum
@test SymbolicUtils.metadata(arguments(ADsum1)[it_1])[qc.IndexedAverageSum] isa qc.IndexedAverageSum


@test isequal(qc.SpecialIndexedAverage(average(σ(1,2,ind(:i))),[(ind(:i),ind(:j))])+qc.SpecialIndexedAverage(average(σ(2,1,ind(:j))),[(ind(:i),ind(:j))]),
qc.SpecialIndexedAverage(average(σ(1,2,ind(:i))) + average(σ(2,1,ind(:j))),[(ind(:i),ind(:j))]))

@test qc.SpecialIndexedAverage(average(0),[(ind(:i),ind(:j))]) == 0
@test SymbolicUtils.metadata(qc.SpecialIndexedAverage(average(σ(2,1,ind(:i))),[(ind(:i),ind(:j))]))[qc.SpecialIndexedAverage] isa qc.SpecialIndexedAverage

@test qc.undo_average(arguments(ADsum1)[1]) isa qc.DoubleSum
@test isequal(Σ(Σ(σ(2,1,ind(:i))*σ(1,2,ind(:j)),ind(:i)),ind(:j),[ind(:i)]),qc.undo_average(ADsum1))
@test qc.undo_average(arguments(ADsum1)[it_2]) isa qc.DoubleSum
@test isequal(simplify(Σ(Σ(σ(2,1,ind(:i))*σ(1,2,ind(:j)),ind(:i)),ind(:j),[ind(:i)])),simplify(qc.undo_average(ADsum1)))

@test σ(1,2,ind(:i))*σ(2,1,ind(:j))*σn(2,2,3) isa qc.QMul
@test σn(2,2,3)*σ(1,2,ind(:i))*σ(2,1,ind(:j)) isa qc.QMul
Expand All @@ -97,9 +107,9 @@ qc.SpecialIndexedAverage(average(σ(1,2,ind(:i))) + average(σ(2,1,ind(:j))),[(i
specAvrg = qc.SpecialIndexedAverage(average(σ(2,1,ind(:i))*σ(1,2,ind(:j))),[(ind(:i),ind(:j))])

@test isequal("(i≠1)",qc.writeNeqs([(ind(:i),1)]))
@test (isequal(SymbolicUtils.arguments(SymbolicUtils.arguments(ADsum1)[1]),SymbolicUtils.arguments(avrgTerm)[1]) || isequal(SymbolicUtils.arguments(SymbolicUtils.arguments(ADsum1)[1]),SymbolicUtils.arguments(avrgTerm)[2]) )
@test (isequal(SymbolicUtils.arguments(SymbolicUtils.arguments(ADsum1)[it_2]),SymbolicUtils.arguments(avrgTerm)[1]) || isequal(SymbolicUtils.arguments(SymbolicUtils.arguments(ADsum1)[it_2]),SymbolicUtils.arguments(avrgTerm)[2]) )
# SymbolicUtilsv1.4.0 argument order changed
@test isequal(SymbolicUtils.arguments(SymbolicUtils.arguments(SymbolicUtils.arguments(ADsum1)[1])),SymbolicUtils.arguments(average(σ(2,1,ind(:i))*σ(1,2,ind(:j)))))
@test isequal(SymbolicUtils.arguments(SymbolicUtils.arguments(SymbolicUtils.arguments(ADsum1)[it_2])),SymbolicUtils.arguments(average(σ(2,1,ind(:i))*σ(1,2,ind(:j)))))
@test isequal(SymbolicUtils.arguments(specAvrg),SymbolicUtils.arguments(average(σ(2,1,ind(:i))*σ(1,2,ind(:j)))))

@test isequal(qc.insert_index(σ(1,2,ind(:j))*σn(1,2,2),ind(:j),1),qc.insert_index(qc.insert_index(σ(1,2,ind(:i))*σ(1,2,ind(:j)),ind(:i),2),ind(:j),1))
Expand Down
5 changes: 4 additions & 1 deletion test/test_indexed_correlation.jl
Original file line number Diff line number Diff line change
Expand Up @@ -104,7 +104,10 @@ split2 = split_sums(avrgSum,k,M)
@test isequal(M,arguments(split2)[1])
@test isequal(N/M,arguments(split2)[2].metadata[qc.IndexedAverageSum].sum_index.range)

avrgSum2 = arguments(arguments(eqs_c[3].rhs)[1])[2]
# avrgSum2 = arguments(arguments(eqs_c[3].rhs)[1])[2] # order of arguments changed!
args_ = (arguments(eqs_c[3].rhs))
it_ = findfirst(x->typeof(arguments(x)[2]) == SymbolicUtils.BasicSymbolic{IndexedAverageSum}, args_)
avrgSum2 = arguments(arguments(eqs_c[3].rhs)[1it_])[2]

_split0 = split_sums(avrgSum2,l,15)

Expand Down
13 changes: 10 additions & 3 deletions test/test_v-level.jl
Original file line number Diff line number Diff line change
Expand Up @@ -23,9 +23,16 @@ h = hf⊗ha
@test isequal(conj(Γ3), Γ3)
@test isequal(adjoint(κ), κ)
#
@test typeof(Δ2*(Γ3 + 1)) == SymbolicUtils.BasicSymbolic{CNumber}
@test typeof*(Γ3 + 1)) == SymbolicUtils.BasicSymbolic{RNumber}
@test typeof(1im*κ*(Γ3 + 1)) == SymbolicUtils.BasicSymbolic{Complex{RNumber}}
# @test typeof(Δ2*(Γ3 + 1)) == SymbolicUtils.BasicSymbolic{CNumber}
# @test typeof(κ*(Γ3 + 1)) == SymbolicUtils.BasicSymbolic{RNumber}
# @test typeof(1im*κ*(Γ3 + 1)) == SymbolicUtils.BasicSymbolic{Complex{RNumber}}
# @test isequal((Δ2*(Γ3 + 1))', (conj(Δ2)*(Γ3 + 1)))
# @test isequal(κ*(Γ3 + 1)', κ*(Γ3 + 1))
# @test isequal((1im*κ*(Γ3 + 1))', -1im*κ*(Γ3 + 1))
# @test isequal(simplify(exp(1im*κ)*(exp(1im*κ))'), 1)
@test typeof(Δ2*(Γ3 + 1)) == SymbolicUtils.BasicSymbolic{Complex{Real}}
@test typeof*(Γ3 + 1)) == SymbolicUtils.BasicSymbolic{Real}
@test typeof(1im*κ*(Γ3 + 1)) == SymbolicUtils.BasicSymbolic{Complex{Real}}
@test isequal((Δ2*(Γ3 + 1))', (conj(Δ2)*(Γ3 + 1)))
@test isequal*(Γ3 + 1)', κ*(Γ3 + 1))
@test isequal((1im*κ*(Γ3 + 1))', -1im*κ*(Γ3 + 1))
Expand Down

0 comments on commit 11fd81c

Please sign in to comment.