Skip to content

Commit 5b8d104

Browse files
committed
Introduce merge; fix a couple of refactor residual bugs
1 parent b6f73f5 commit 5b8d104

File tree

4 files changed

+34
-8
lines changed

4 files changed

+34
-8
lines changed

ext/ModelTestingCalibration.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -20,8 +20,7 @@ function ModelTesting.validate(model::AbstractTimeDependentSystem, data; pem_coe
2020
filter(arg->first(arg) != :model_transformations, experiment_kwargs)...)
2121
# no search space - this is just a validation run
2222
i = InverseProblem([experiment], nothing, search_space)
23-
sim_sol = simulate(experiment, i)
24-
return compare_discrete_to_continous(sim_sol, data)
23+
return simulate(experiment, i)
2524
end
2625

2726
end

src/ModelTesting.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,4 +5,5 @@ using ModelingToolkit, DifferentialEquations, DiffEqDevTools, SymbolicIndexingIn
55
include("test/measured.jl")
66
include("test/continuous/delta_sol.jl")
77
include("test/discrete/single_shooting.jl")
8+
include("test/discrete/merge.jl")
89
end

src/test/discrete/merge.jl

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
function merge_results(
2+
results...
3+
)
4+
for (name, result) in results
5+
@assert "timestamp" names(result) "Each result must have a column `timestamp`; the result set $(name) is missing this."
6+
end
7+
8+
merged = nothing
9+
for (name, result) in results
10+
col_rename(n) = string(n) == "timestamp" ? Symbol(n) : namespace_symbol(name, n)
11+
if isnothing(merged)
12+
merged = rename(result, names(result) .=> col_rename.(names(result)))
13+
else
14+
merged = outerjoin(merged, result;
15+
on=:timestamp,
16+
validate=(true, true),
17+
renamecols = (x -> x) => col_rename)
18+
end
19+
display(merged)
20+
end
21+
return merged
22+
end
23+
export merge_results

test/timeseries.jl

Lines changed: 9 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ tol = 1e-6
4141
@test results_bad[:l∞] > tol
4242
@test results_bad[:l2] > tol
4343
@test results_bad[:final] > tol
44+
45+
merge_results(:reference => d1, :good => d2, :bad => d3)
4446
end
4547
@testset "Model-Model Continous Comparison" begin
4648
@variables t
@@ -84,11 +86,12 @@ end
8486
push!(data, [t, ref_sol(t, idxs=fol.x) + randn() * 0.1, ref_sol(t, idxs=fol.y) * randn() * 0.1])
8587
end
8688

87-
results_bad = ModelTesting.validate(fol, data; search_space=[fol.τ => (0.5,0.5)], params = [fol.τ => 0.5], u0 = [fol.x => 0.0])
88-
results_good = ModelTesting.validate(fol, data; search_space=[fol.τ => (1.0,1.0)], params = [fol.τ => 1.0], u0 = [fol.x => 0.0])
89-
@test results_good[:metrics][:l∞] < results_bad[:metrics][:l∞]
90-
@test results_good[:metrics][:l2] < results_bad[:metrics][:l2]
91-
CSV.write("results.csv", results_bad[:data])
92-
display(results_good[:data])
89+
sim_bad = discretize_solution(ModelTesting.validate(fol, data; search_space=[fol.τ => (0.5,0.5)], params = [fol.τ => 0.5], u0 = [fol.x => 0.0]), data)
90+
sim_good = discretize_solution(ModelTesting.validate(fol, data; search_space=[fol.τ => (1.0,1.0)], params = [fol.τ => 1.0], u0 = [fol.x => 0.0]), data)
91+
results_good = compare_discrete(fol, data, sim_good)
92+
results_bad = compare_discrete(fol, data, sim_bad)
93+
94+
@test results_good[:l∞] < results_bad[:l∞]
95+
@test results_good[:l2] < results_bad[:l2]
9396
end
9497
end

0 commit comments

Comments
 (0)