Skip to content

Commit 1034aca

Browse files
committed
Remove structure-preserving simplifications
- Did not actually do this; it is more complicated (see #24)
1 parent f047794 commit 1034aca

File tree

2 files changed

+15
-49
lines changed

2 files changed

+15
-49
lines changed

benchmark/benchmarks.jl

+6-18
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,10 @@ function benchmark_utilities()
8686
for func_k in ("copy", "convert", "simplify_tree", "combine_operators")
8787
suite[func_k] = let s = BenchmarkGroup()
8888
for k in ("break_topology", "preserve_topology")
89+
k == "preserve_topology" &&
90+
func_k in ("simplify_tree", "combine_operators") &&
91+
continue
92+
8993
f = if func_k == "copy"
9094
tree -> copy_node(tree; preserve_topology=(k == "preserve_topology"))
9195
elseif func_k == "convert"
@@ -99,25 +103,9 @@ function benchmark_utilities()
99103
tree -> convert(Node{Float64}, tree)
100104
end
101105
elseif func_k == "simplify_tree"
102-
if v_PACKAGE_VERSION >= v"0.6.1"
103-
tree -> simplify_tree(
104-
tree,
105-
options.operators;
106-
preserve_topology=(k == "preserve_topology"),
107-
)
108-
else
109-
tree -> simplify_tree(tree, options.operators)
110-
end
106+
tree -> simplify_tree(tree, options.operators)
111107
elseif func_k == "combine_operators"
112-
if v_PACKAGE_VERSION >= v"0.6.1"
113-
tree -> combine_operators(
114-
tree,
115-
options.operators;
116-
preserve_topology=(k == "preserve_topology"),
117-
)
118-
else
119-
tree -> combine_operators(tree, options.operators)
120-
end
108+
tree -> combine_operators(tree, options.operators)
121109
end
122110

123111
#! format: off

src/SimplifyEquation.jl

+9-31
Original file line numberDiff line numberDiff line change
@@ -2,22 +2,10 @@ module SimplifyEquationModule
22

33
import ..EquationModule: Node, copy_node
44
import ..OperatorEnumModule: AbstractOperatorEnum
5-
import ..UtilsModule: isbad, isgood, @generate_idmap, @use_idmap
5+
import ..UtilsModule: isbad, isgood
66

77
# Simplify tree
8-
function combine_operators(
9-
tree::Node{T}, operators::AbstractOperatorEnum; preserve_topology::Bool=false
10-
) where {T}
11-
if preserve_topology
12-
@use_idmap(_combine_operators(tree, operators), IdDict{Node{T},Node{T}}())
13-
else
14-
_combine_operators(tree, operators)
15-
end
16-
end
17-
18-
@generate_idmap tree function _combine_operators(
19-
tree::Node{T}, operators
20-
)::Node{T} where {T}
8+
function combine_operators(tree::Node{T}, operators::AbstractOperatorEnum) where {T}
219
# NOTE: (const (+*-) const) already accounted for. Call simplify_tree before.
2210
# ((const + var) + const) => (const + var)
2311
# ((const * var) * const) => (const * var)
@@ -27,10 +15,10 @@ end
2715
if tree.degree == 0
2816
return tree
2917
elseif tree.degree == 1
30-
tree.l = _combine_operators(tree.l, operators)
18+
tree.l = combine_operators(tree.l, operators)
3119
elseif tree.degree == 2
32-
tree.l = _combine_operators(tree.l, operators)
33-
tree.r = _combine_operators(tree.r, operators)
20+
tree.l = combine_operators(tree.l, operators)
21+
tree.r = combine_operators(tree.r, operators)
3422
end
3523

3624
top_level_constant = tree.degree == 2 && (tree.l.constant || tree.r.constant)
@@ -108,19 +96,9 @@ end
10896
end
10997

11098
# Simplify tree
111-
function simplify_tree(
112-
tree::Node{T}, operators::AbstractOperatorEnum; preserve_topology::Bool=false
113-
) where {T}
114-
if preserve_topology
115-
@use_idmap(_simplify_tree(tree, operators), IdDict{Node{T},Node{T}}())
116-
else
117-
_simplify_tree(tree, operators)
118-
end
119-
end
120-
121-
@generate_idmap tree function _simplify_tree(tree::Node{T}, operators)::Node{T} where {T}
99+
function simplify_tree(tree::Node{T}, operators::AbstractOperatorEnum) where {T}
122100
if tree.degree == 1
123-
tree.l = _simplify_tree(tree.l, operators)
101+
tree.l = simplify_tree(tree.l, operators)
124102
if tree.l.degree == 0 && tree.l.constant
125103
l = tree.l.val::T
126104
if isgood(l)
@@ -132,8 +110,8 @@ end
132110
end
133111
end
134112
elseif tree.degree == 2
135-
tree.l = _simplify_tree(tree.l, operators)
136-
tree.r = _simplify_tree(tree.r, operators)
113+
tree.l = simplify_tree(tree.l, operators)
114+
tree.r = simplify_tree(tree.r, operators)
137115
constantsBelow = (
138116
tree.l.degree == 0 && tree.l.constant && tree.r.degree == 0 && tree.r.constant
139117
)

0 commit comments

Comments
 (0)