@@ -5,7 +5,7 @@ using SymbolicUtils: getdepth, Rewriters, Term
55 @syms w z α:: Real β:: Real
66
77 r1 = @rule ~ x + ~ x => 2 * (~ x)
8- r2 = @acrule ~ x * + (~~ ys) => sum (map (y-> ~ x * y, ~~ ys));
8+ r2 = @acrule ~ x * + (~~ ys) => sum (map (y -> ~ x * y, ~~ ys))
99
1010 rset = Rewriters. Postwalk (Rewriters. Chain ([r2]))
1111 @test getdepth (rset) == typemax (Int)
2222 @eqtest simplify (Term {Real} (real, [x])) == x
2323 @eqtest simplify (Term {Real} (imag, [x])) == 0
2424 @eqtest simplify (Term {Real} (imag, [y])) == imag (y)
25- @eqtest simplify (x - y) == x + - 1 * y
26- @eqtest simplify (x - sin (y)) == x + - 1 * sin (y)
27- @eqtest simplify (- sin (x)) == - 1 * sin (x)
25+ @eqtest simplify (x - y) == x + - 1 * y
26+ @eqtest simplify (x - sin (y)) == x + - 1 * sin (y)
27+ @eqtest simplify (- sin (x)) == - 1 * sin (x)
2828 @eqtest simplify (1 * x * 2 ) == 2 * x
2929 @eqtest simplify (1 + x + 2 ) == 3 + x
30- @eqtest simplify (b* b) == b^ 2 # tests merge_repeats
31- @eqtest simplify ((a* b)^ 2 ) == a^ 2 * b^ 2
32- @eqtest simplify ((a* b)^ c) == (a* b)^ c
30+ @eqtest simplify (b * b) == b^ 2 # tests merge_repeats
31+ @eqtest simplify ((a * b)^ 2 ) == a^ 2 * b^ 2
32+ @eqtest simplify ((a * b)^ c) == (a * b)^ c
3333
3434 @eqtest simplify (1 x + 2 x) == 3 x
3535 @eqtest simplify (3 x + 2 x) == 5 x
3636
37- @eqtest simplify (a + b + (x * y) + c + 2 * (x * y) + d) == simplify ((3 * x * y) + a + b + c + d)
37+ @eqtest simplify (a + b + (x * y) + c + 2 * (x * y) + d) == simplify ((3 * x * y) + a + b + c + d)
3838 @eqtest simplify (a + b + 2 * (x * y) + c + 2 * (x * y) + d) == simplify ((4 * x * y) + a + b + c + d)
3939
40- @eqtest simplify (a * x^ y * b * x^ d) == simplify (a * b * (x ^ (d + y)))
40+ @eqtest simplify (a * x^ y * b * x^ d) == simplify (a * b * (x^ (d + y)))
4141
42- @eqtest simplify (a + b + 0 * c + d) == simplify (a + b + d)
42+ @eqtest simplify (a + b + 0 * c + d) == simplify (a + b + d)
4343 @eqtest simplify (a * b * c^ 0 * d) == simplify (a * b * d)
44- @eqtest simplify (a * b * 1 * c * d) == simplify (a * b * c * d)
45- @eqtest simplify_fractions (x^ 2.0 / (x * y)^ 2.0 ) == simplify_fractions (1 / (y^ 2.0 ))
44+ @eqtest simplify (a * b * 1 * c * d) == simplify (a * b * c * d)
45+ @eqtest simplify_fractions (x^ 2.0 / (x * y)^ 2.0 ) == simplify_fractions (1 / (y^ 2.0 ))
4646
4747 @test simplify (Term (one, [a])) == 1
48- @test simplify (Term (one, [b+ 1 ])) == 1
49- @test simplify (Term (one, [x+ 2 ])) == 1
48+ @test simplify (Term (one, [b + 1 ])) == 1
49+ @test simplify (Term (one, [x + 2 ])) == 1
5050
5151
5252 @test simplify (Term (zero, [a])) == 0
53- @test simplify (Term (zero, [b+ 1 ])) == 0
54- @test simplify (Term (zero, [x+ 2 ])) == 0
53+ @test simplify (Term (zero, [b + 1 ])) == 0
54+ @test simplify (Term (zero, [x + 2 ])) == 0
5555end
5656
5757@testset " boolean" begin
6767 @eqtest simplify ((0 < a) & false ) == false
6868 @eqtest simplify (Term {Bool} (! , [true ])) == false
6969 @eqtest simplify (Term {Bool} (| , [false , true ])) == true
70- @eqtest simplify (ifelse (true , a,b)) == a
71- @eqtest simplify (ifelse (false , a,b)) == b
70+ @eqtest simplify (ifelse (true , a, b)) == a
71+ @eqtest simplify (ifelse (false , a, b)) == b
7272
7373 # abs
74- @test simplify (substitute (ifelse (! (a < 0 ), a,- a), Dict (a=> - 1 ))) == 1
75- @test simplify (substitute (ifelse (! (a < 0 ), a,- a), Dict (a=> 1 ))) == 1
76- @test simplify (substitute (ifelse (a < 0 , - a, a), Dict (a=> - 1 ))) == 1
77- @test simplify (substitute (ifelse (a < 0 , - a, a), Dict (a=> 1 ))) == 1
74+ @test simplify (substitute (ifelse (! (a < 0 ), a, - a), Dict (a => - 1 ))) == 1
75+ @test simplify (substitute (ifelse (! (a < 0 ), a, - a), Dict (a => 1 ))) == 1
76+ @test simplify (substitute (ifelse (a < 0 , - a, a), Dict (a => - 1 ))) == 1
77+ @test simplify (substitute (ifelse (a < 0 , - a, a), Dict (a => 1 ))) == 1
7878end
7979
8080@testset " Pythagorean Identities" begin
9292
9393@testset " Double angle formulas" begin
9494 @syms r x
95- @eqtest simplify (r* cos (x/ 2 )^ 2 - r* sin (x/ 2 )^ 2 ) == r* cos (x)
96- @eqtest simplify (r* sin (x/ 2 )^ 2 - r* cos (x/ 2 )^ 2 ) == - r* cos (x)
97- @eqtest simplify (2 cos (x)* sin (x)) == sin (2 x)
95+ @eqtest simplify (r * cos (x / 2 )^ 2 - r * sin (x / 2 )^ 2 ) == r * cos (x)
96+ @eqtest simplify (r * sin (x / 2 )^ 2 - r * cos (x / 2 )^ 2 ) == - r * cos (x)
97+ @eqtest simplify (2 cos (x) * sin (x)) == sin (2 x)
9898end
9999
100100@testset " Exponentials" begin
101101 @syms a:: Real b:: Real
102- @eqtest simplify (exp (a)* exp (b)) == simplify (exp (a+ b))
103- @eqtest simplify (exp (a)* exp (a)) == simplify (exp (2 a))
104- @test simplify (exp (a)* exp (- a)) == 1
102+ @eqtest simplify (exp (a) * exp (b)) == simplify (exp (a + b))
103+ @eqtest simplify (exp (a) * exp (a)) == simplify (exp (2 a))
104+ @test simplify (exp (a) * exp (- a)) == 1
105105 @eqtest simplify (exp (a)^ 2 ) == simplify (exp (2 a))
106- @eqtest simplify (exp (a) * a * exp (b)) == simplify (a* exp (a+ b))
106+ @eqtest simplify (exp (a) * a * exp (b)) == simplify (a * exp (a + b))
107+ @eqtest simplify (one (Int)^ a) == 1
108+ @eqtest simplify (one (Complex{Float64})^ a) == 1
109+ @eqtest simplify (a^ b * 1 ^ a) == a^ b
107110end
108111
109112@testset " simplify_fractions" begin
110113 @syms x y z
111- @eqtest simplify (2 * ((y + z)/ x) - 2 * y / x - z/ x * 2 ) == 0
114+ @eqtest simplify (2 * ((y + z) / x) - 2 * y / x - z / x * 2 ) == 0
112115end
113116
114117@testset " Depth" begin
115118 @syms x
116119 R = Rewriters. Postwalk (Rewriters. Chain ([@rule (sin (~ x) => cos (~ x)),
117- @rule (1 + ~ x => ~ x - 1 )]))
120+ @rule (1 + ~ x => ~ x - 1 )]))
118121 @eqtest R (sin (sin (sin (x + 1 )))) == cos (cos (cos (x - 1 )))
119122 # @eqtest R(sin(sin(sin(x + 1))), depth=2) == cos(cos(sin(x + 1)))
120123end
@@ -125,24 +128,28 @@ pred(x) = error("Fail")
125128 @syms a b
126129
127130 rs = Rewriters. Postwalk (Rewriters. Chain (([@rule ~ x + ~ y:: pred => ~ x])))
128- @test_throws Metatheory. Rules. RuleRewriteError rs (a+ b)
129- err = try rs (a+ b) catch err; err; end
130- @test sprint (io-> Base. showerror (io, err)) == " Failed to apply rule ~x + ~(y::pred) => ~x on expression a + b"
131+ @test_throws Metatheory. Rules. RuleRewriteError rs (a + b)
132+ err = try
133+ rs (a + b)
134+ catch err
135+ err
136+ end
137+ @test sprint (io -> Base. showerror (io, err)) == " Failed to apply rule ~x + ~(y::pred) => ~x on expression a + b"
131138end
132139
133140@testset " Threading" begin
134141 @syms a b c d
135142 ex = (((0.6666666666666666 / (c / 1 )) + ((1 * a) / (c / 1 ))) +
136143 (1.0 / (((1 * d) / (1 + b)) * (1 / b)))) +
137- ((((1 * a) + (1 * a)) / ((2.0 * (d + 1 )) / 1.0 )) +
138- ((((d * 1 ) / (1 + c)) * 2.0 ) / ((1 / d) + (1 / c))))
144+ ((((1 * a) + (1 * a)) / ((2.0 * (d + 1 )) / 1.0 )) +
145+ ((((d * 1 ) / (1 + c)) * 2.0 ) / ((1 / d) + (1 / c))))
139146 @eqtest simplify (ex) == simplify (ex, threaded= true , thread_subtree_cutoff= 3 )
140147 @test SymbolicUtils. node_count (a + b * c / d) == 7
141148end
142149
143150@testset " timerwrite" begin
144151 @syms a b c d
145- expr1 = foldr ((x,y) -> rand ([* , / ])(x,y), rand ([a,b,c, d], 100 ))
152+ expr1 = foldr ((x, y) -> rand ([* , / ])(x, y), rand ([a, b, c, d], 100 ))
146153 SymbolicUtils. @timerewrite simplify (expr1)
147154end
148155
@@ -159,14 +166,14 @@ _f(x) = x === a
159166@testset " where" begin
160167 using Metatheory
161168 expected = :(_f (~ x) ? ~ x + ~ y : nothing )
162- @test Metatheory. Syntax. rewrite_rhs (:((~ x + ~ y) where _f (~ x))) == expected
169+ @test Metatheory. Syntax. rewrite_rhs (:((~ x + ~ y) where { _f (~ x)} )) == expected
163170
164171 @syms a b
165- r = @rule ~ x => ~ x where _f (~ x)
172+ r = @rule ~ x => ~ x where { _f (~ x)}
166173 @eqtest r (a) == a
167174 @test isnothing (r (b))
168175
169- r = @acrule ~ x => ~ x where _f (~ x)
176+ r = @acrule ~ x => ~ x where { _f (~ x)}
170177 @eqtest r (a) == a
171178 @test r (b) === nothing
172179end
0 commit comments