1
+ # Simplification.jl
2
+
1
3
# [[file:~/Documents/Julia/scrap.org::*Simplification.jl][Simplification.jl:1]]
2
4
# ----------------------------------------------------------------------------
3
5
# Some utility functions
92
94
# The simplification functions
93
95
# ----------------------------------------------------------------------------
94
96
95
-
96
- # addition_rules(x) = x
97
- # function addition_rules(ex::T) where {T<:AbstractSymExpr}
98
- # if ex.op == :+
99
- # @> ex begin
100
- # remove_addative_identity
101
- # end
102
- # else
103
- # ex
104
- # end
105
- # end
106
-
107
- # remove_addative_identity(x) = x
108
- # function remove_addative_identity(ex::T) where {T<:AbstractSymExpr}
109
- # if (0 in expr.args)
110
- # return +(expr.args[expr.args .!= 0]...)
111
- # end
112
- # end
113
-
114
- # remove_addative_identity(x) = x
115
- # function remove_addative_identity(ex::T) where {T<:AbstractSymExpr}
116
- # if (0 in expr.args)
117
- # return +(expr.args[expr.args .!= 0]...)
118
- # end
119
- # end
120
-
121
- # # collect_over_op(x) = x
122
- # # function collect_associative_terms(x, op) = x
123
-
124
97
# ----------------------------------------------------------------------------
125
98
# Rules for Addition
126
99
# ----------------------------------------------------------------------------
@@ -166,8 +139,6 @@ function factor_addition(ex::T) where {T<:AbstractSymExpr}
166
139
end
167
140
168
141
169
-
170
-
171
142
# ----------------------------------------------------------------------------
172
143
# Rules for Multiplication
173
144
# ----------------------------------------------------------------------------
@@ -223,6 +194,7 @@ function exp_rules(ex::T) where {T<:AbstractSymExpr}
223
194
@> ex begin
224
195
exp_one
225
196
exp_zero
197
+ exp_exp
226
198
end
227
199
end
228
200
@@ -241,6 +213,16 @@ function exp_zero(ex::T) where {T<:AbstractSymExpr}
241
213
end
242
214
ex
243
215
end
216
+
217
+ exp_exp (x) = x
218
+ function exp_exp (ex:: T ) where {T<: AbstractSymExpr }
219
+ @match ex begin
220
+ T (:^ , [T (:^ , [a,b]), c]) => a^ (b* c)
221
+ _ => ex
222
+ end
223
+ end
224
+
225
+
244
226
245
227
246
228
# ----------------------------------------------------------------------------
@@ -313,49 +295,4 @@ function collect_identical(ex::T) where {T<:AbstractSymExpr}
313
295
ex
314
296
end
315
297
end
316
-
317
- # eval_numeric(x) = x
318
- # function eval_numeric(ex::T) where {T<:AbstractSymExpr}
319
- # if (ex.args isa Array{U,1} where {U<:Number}) && (try eval(Symbol(ex.op)) isa Function catch e; false end)
320
- # eval(Expr(ex))
321
- # else
322
- # ex
323
- # end
324
- # end
325
-
326
-
327
- # function mult_zero(expr::SymExpr)
328
- # if expr.op == *
329
- # if length(findall(0 .== expr.args)) > 0
330
- # return 0
331
- # end
332
- # end
333
- # expr
334
- # end
335
- # mult_zero(x::Union{Sym,Number}) = x
336
-
337
-
338
- # function remove_identity_operations(expr::SymExpr)
339
- # if (expr.op == (^)) && (expr.args[2] == 1)
340
- # return expr.args[1]
341
-
342
- # elseif expr.op == +
343
- # lst = findall(0 .== expr.args)
344
- # if (length(expr.args) == 2) && (length(lst) > 0)
345
- # return expr.args[1:end .!= lst[1]]
346
- # elseif length(lst) > 0
347
- # return SymExpr(+, expr.args[1:end .!= lst[1]])
348
- # end
349
-
350
- # elseif expr.op == *
351
- # lst = findall(1 .== expr.args)
352
- # if (length(expr.args) == 2) && (length(lst) > 0)
353
- # return expr.args[1:end .!= lst[1]]
354
- # elseif length(lst) > 0
355
- # return SymExpr(*, expr.args[1:end .!= lst[1]])
356
- # end
357
- # end
358
- # expr
359
- # end
360
- # remove_identity_operations(x::Union{Sym,Number}) = x
361
298
# Simplification.jl:1 ends here
0 commit comments