Skip to content

Commit 218e4a9

Browse files
Merge pull request #4447 from SciML/as/fix-perfect-aliases
fix: remember perfect alias equations when building alias groups
2 parents 8ee6187 + f9ae1dd commit 218e4a9

2 files changed

Lines changed: 35 additions & 34 deletions

File tree

.github/workflows/Downstream.yml

Lines changed: 31 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ concurrency:
1616

1717
jobs:
1818
test:
19-
name: ${{ matrix.package.repo }}/${{ matrix.package.group }}/${{ matrix.julia-version }}
19+
name: ${{ matrix.package.repo }}/${{ matrix.package.group }}/${{ matrix.julia-version }}/${{ matrix.package.subpkg }}
2020
runs-on: ${{ matrix.os }}
2121
env:
2222
GROUP: ${{ matrix.package.group }}
@@ -26,26 +26,27 @@ jobs:
2626
julia-version: [1]
2727
os: [ubuntu-latest]
2828
package:
29-
- {user: SciML, repo: SciMLBase.jl, group: Downstream}
30-
- {user: SciML, repo: SciMLBase.jl, group: SymbolicIndexingInterface}
31-
- {user: SciML, repo: Catalyst.jl, group: Modeling}
32-
- {user: SciML, repo: Catalyst.jl, group: Simulation}
33-
- {user: SciML, repo: Catalyst.jl, group: Hybrid}
34-
- {user: SciML, repo: Catalyst.jl, group: Misc}
35-
- {user: SciML, repo: Catalyst.jl, group: Spatial}
36-
- {user: SciML, repo: CellMLToolkit.jl, group: Core}
37-
- {user: SciML, repo: SBMLToolkit.jl, group: All}
38-
- {user: SciML, repo: NeuralPDE.jl, group: NNPDE1}
39-
- {user: SciML, repo: NeuralPDE.jl, group: NNPDE2}
40-
- {user: SciML, repo: DataDrivenDiffEq.jl, group: Downstream}
41-
- {user: SciML, repo: StructuralIdentifiability.jl, group: Core}
42-
- {user: SciML, repo: ModelingToolkitStandardLibrary.jl, group: Core}
43-
- {user: SciML, repo: ModelOrderReduction.jl, group: All}
44-
- {user: SciML, repo: MethodOfLines.jl, group: Interface}
45-
- {user: SciML, repo: MethodOfLines.jl, group: 2D_Diffusion}
46-
- {user: SciML, repo: MethodOfLines.jl, group: DAE}
47-
- {user: SciML, repo: ModelingToolkitNeuralNets.jl, group: Core}
48-
- {user: SciML, repo: SciMLSensitivity.jl, group: Core8}
29+
- {user: SciML, repo: SciMLBase.jl, group: Downstream, subpkg: ""}
30+
- {user: SciML, repo: SciMLBase.jl, group: SymbolicIndexingInterface, subpkg: ""}
31+
- {user: SciML, repo: Catalyst.jl, group: Modeling, subpkg: ""}
32+
- {user: SciML, repo: Catalyst.jl, group: Simulation, subpkg: ""}
33+
- {user: SciML, repo: Catalyst.jl, group: Hybrid, subpkg: ""}
34+
- {user: SciML, repo: Catalyst.jl, group: Misc, subpkg: ""}
35+
- {user: SciML, repo: Catalyst.jl, group: Spatial, subpkg: ""}
36+
- {user: SciML, repo: CellMLToolkit.jl, group: Core, subpkg: ""}
37+
- {user: SciML, repo: SBMLToolkit.jl, group: All, subpkg: ""}
38+
- {user: SciML, repo: NeuralPDE.jl, group: NNPDE1, subpkg: ""}
39+
- {user: SciML, repo: NeuralPDE.jl, group: NNPDE2, subpkg: ""}
40+
- {user: SciML, repo: DataDrivenDiffEq.jl, group: Downstream, subpkg: ""}
41+
- {user: SciML, repo: StructuralIdentifiability.jl, group: Core, subpkg: ""}
42+
- {user: SciML, repo: ModelingToolkitStandardLibrary.jl, group: Core, subpkg: ""}
43+
- {user: SciML, repo: ModelOrderReduction.jl, group: All, subpkg: ""}
44+
- {user: SciML, repo: MethodOfLines.jl, group: Interface, subpkg: ""}
45+
- {user: SciML, repo: MethodOfLines.jl, group: 2D_Diffusion, subpkg: ""}
46+
- {user: SciML, repo: MethodOfLines.jl, group: DAE, subpkg: ""}
47+
- {user: SciML, repo: ModelingToolkitNeuralNets.jl, group: Core, subpkg: ""}
48+
- {user: SciML, repo: SciMLSensitivity.jl, group: Core8, subpkg: ""}
49+
- {user: JuliaComputing, repo: StateSelection.jl, group: All, subpkg: ModelingToolkitTearing}
4950
steps:
5051
- uses: actions/checkout@v6
5152
- uses: julia-actions/setup-julia@v2
@@ -66,8 +67,16 @@ jobs:
6667
# force it to use this PR's version of the package
6768
Pkg.develop(PackageSpec(path="./lib/ModelingToolkitBase")) # resolver may fail with main deps
6869
Pkg.develop(PackageSpec(path=".")) # resolver may fail with main deps
70+
subpkg = "${{ matrix.package.subpkg }}"
71+
if subpkg != ""
72+
Pkg.develop(PackageSpec(path=joinpath("./downstream/lib", subpkg)))
73+
end
6974
Pkg.update()
70-
Pkg.test(coverage=true) # resolver may fail with test time deps
75+
if subpkg != ""
76+
Pkg.test(subpkg)
77+
else
78+
Pkg.test(coverage=true) # resolver may fail with test time deps
79+
end
7180
catch err
7281
err isa Pkg.Resolve.ResolverError || rethrow()
7382
# If we can't resolve that means this is incompatible by SemVer and this is fine

src/systems/alias_elimination.jl

Lines changed: 4 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,9 @@ function eliminate_perfect_aliases!(state::TearingState)
3434
eqs_to_rm = Int[]
3535
vars_to_rm = Int[]
3636
aliases = find_perfect_aliases!(state, eqs_to_rm, vars_to_rm)
37-
old_to_new_eq, old_to_new_var = StateSelection.rm_eqs_vars!(state, eqs_to_rm, vars_to_rm)
37+
old_to_new_eq, old_to_new_var = StateSelection.rm_eqs_vars!(
38+
state, eqs_to_rm, vars_to_rm; eqs_sorted_and_uniqued = true
39+
)
3840
return nothing
3941
end
4042

@@ -80,6 +82,7 @@ function find_perfect_aliases!(
8082
end
8183
_ => continue
8284
end
85+
push!(eqs_to_rm, ieq)
8386
push!(alias_groups, snbors[1])
8487
push!(alias_groups, snbors[2])
8588
union!(alias_groups, snbors[1], snbors[2])
@@ -105,14 +108,8 @@ function find_perfect_aliases!(
105108
aliases[v] = target
106109

107110
dnbors = copy(𝑑neighbors(graph, v))
108-
alias_eq = 0
109111
for e in dnbors
110112
snbors = 𝑠neighbors(graph, e)
111-
if alias_eq == 0 && length(snbors) == 2 && (snbors[1] == target || snbors[2] == target)
112-
push!(eqs_to_rm, e)
113-
alias_eq = e
114-
continue
115-
end
116113
eqs[e] = substitute(eqs[e], subs)
117114
original_eqs[e] = substitute(original_eqs[e], subs)
118115
Graphs.rem_edge!(graph, e, v)
@@ -133,11 +130,6 @@ function find_perfect_aliases!(
133130
dnbors = copy(𝑑neighbors(graph, dv))
134131
for e in dnbors
135132
snbors = 𝑠neighbors(graph, e)
136-
if length(snbors) == 2 && (snbors[1] == dtarget || snbors[2] == dtarget)
137-
push!(eqs_to_rm, e)
138-
alias_eq = e
139-
continue
140-
end
141133
eqs[e] = substitute(eqs[e], subs)
142134
original_eqs[e] = substitute(original_eqs[e], subs)
143135
Graphs.rem_edge!(graph, e, dv)

0 commit comments

Comments
 (0)