From 0e75280fc01934765e50247b87b5d39fbc9af901 Mon Sep 17 00:00:00 2001 From: Yingbo Ma Date: Tue, 21 Sep 2021 10:08:00 -0400 Subject: [PATCH 1/3] Compat --- Project.toml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Project.toml b/Project.toml index 74fadadc3..36582e0cb 100644 --- a/Project.toml +++ b/Project.toml @@ -1,7 +1,7 @@ name = "Symbolics" uuid = "0c5d862f-8b57-4792-8d23-62f2024744c7" authors = ["Shashi Gowda "] -version = "3.3.1" +version = "3.4.0" [deps] ConstructionBase = "187b0558-2788-49d3-abe0-74a17ed4e7c9" @@ -46,7 +46,7 @@ SciMLBase = "1.8" Setfield = "0.7" SpecialFunctions = "0.7, 0.8, 0.9, 0.10, 1.0" StaticArrays = "1.1" -SymbolicUtils = "0.15.1" +SymbolicUtils = "0.16" TreeViews = "0.3" julia = "1.5" From 680b90ce747b60608d760f4260fdd576bb47ff5f Mon Sep 17 00:00:00 2001 From: Yingbo Ma Date: Tue, 21 Sep 2021 10:27:59 -0400 Subject: [PATCH 2/3] Update compat --- test/build_function.jl | 2 +- test/build_targets.jl | 82 ++++++------------------------ test/ctarget_functions/issue123.c | 4 -- test/runtests.jl | 2 +- test/target_functions/1.c | 5 ++ test/target_functions/1.m | 4 ++ test/target_functions/1.stan | 6 +++ test/target_functions/issue123.c | 4 ++ test/target_functions/matrix.c | 15 ++++++ test/target_functions/matrix.m | 6 +++ test/target_functions/matrix.stan | 16 ++++++ test/target_functions/scalar1.c | 4 ++ test/target_functions/scalar1.m | 3 ++ test/target_functions/scalar1.stan | 5 ++ test/target_functions/scalar2.c | 4 ++ 15 files changed, 89 insertions(+), 73 deletions(-) delete mode 100644 test/ctarget_functions/issue123.c create mode 100644 test/target_functions/1.c create mode 100644 test/target_functions/1.m create mode 100644 test/target_functions/1.stan create mode 100644 test/target_functions/issue123.c create mode 100644 test/target_functions/matrix.c create mode 100644 test/target_functions/matrix.m create mode 100644 test/target_functions/matrix.stan create mode 100644 test/target_functions/scalar1.c create mode 100644 test/target_functions/scalar1.m create mode 100644 test/target_functions/scalar1.stan create mode 100644 test/target_functions/scalar2.c diff --git a/test/build_function.jl b/test/build_function.jl index fb65f3f45..110c179b3 100644 --- a/test/build_function.jl +++ b/test/build_function.jl @@ -133,7 +133,7 @@ let # Symbolics.jl#123 @variables qd[1:6] output_eq = u*(qd[1]*(M[1]*qd[1] + M[1]*qd[3] + M[1]*qd[4] + M[25]*qd[5] + M[31]*qd[6] + M[7]*qd[2])) - @test_reference "ctarget_functions/issue123.c" build_function(output_eq, x, target=Symbolics.CTarget()) + @test_reference "target_functions/issue123.c" build_function(output_eq, x, target=Symbolics.CTarget()) end using Symbolics: value diff --git a/test/build_targets.jl b/test/build_targets.jl index 37a6aa5fd..70e286d6a 100644 --- a/test/build_targets.jl +++ b/test/build_targets.jl @@ -1,35 +1,15 @@ using Symbolics, Test +using ReferenceTests @variables t a x(t) y(t) expr = [a*x - x*y,-3y + x*y] -@test Symbolics.build_function(expr,[x,y],[a],t,target = Symbolics.StanTarget()) == - """ - vector diffeqf(real t,vector internal_var___u,vector internal_var___p) { - vector[2] internal_var___du; - internal_var___du[1] = internal_var___p[1] * internal_var___u[1] + -1 * internal_var___u[1] * internal_var___u[2]; - internal_var___du[2] = internal_var___u[1] * internal_var___u[2] + -3 * internal_var___u[2]; - return internal_var___du; - } - """ +@test_reference "target_functions/1.stan" Symbolics.build_function(expr,[x,y],[a],t,target = Symbolics.StanTarget()) -@test Symbolics.build_function(expr,[x,y],[a],t,target = Symbolics.CTarget(), +@test_reference "target_functions/1.c" Symbolics.build_function(expr,[x,y],[a],t,target = Symbolics.CTarget(), lhsname=:internal_var___du, - rhsnames=[:internal_var___u,:internal_var___p,:t]) == - """ - #include - void diffeqf(double* internal_var___du, const double* internal_var___u, const double* internal_var___p, const double t) { - internal_var___du[0] = internal_var___p[0] * internal_var___u[0] + -1 * internal_var___u[0] * internal_var___u[1]; - internal_var___du[1] = internal_var___u[0] * internal_var___u[1] + -3 * internal_var___u[1]; - } - """ + rhsnames=[:internal_var___u,:internal_var___p,:t]) -@test Symbolics.build_function(expr,[x,y],[a],t,target = Symbolics.MATLABTarget()) == - """ - diffeqf = @(t,internal_var___u) [ - internal_var___p(1) * internal_var___u(1) + -1 * internal_var___u(1) * internal_var___u(2); - internal_var___u(1) * internal_var___u(2) + -3 * internal_var___u(2); - ]; - """ +@test_reference "target_functions/1.m" Symbolics.build_function(expr,[x,y],[a],t,target = Symbolics.MATLABTarget()) @test Symbolics.build_function(expr,[x,y],[a],t,target = Symbolics.CTarget(), lhsname=:internal_var___du, @@ -64,9 +44,7 @@ let expression = hcat(x,y,z) # Results in [x1 y1 z1; x2 y2 z2; ...] variables = vcat(x,y,z) # Results in [x1, x2, x3, x4, y1, ...] cfunc = build_function(expression, variables; target = Symbolics.CTarget(), expression = Val{true}) - - # Generated function should be out[0] = in[0], out[1] = in[1], out[2] = in[2], etc. - @test cfunc == "#include \nvoid diffeqf(double* du, const double* RHS1) {\n du[0] = RHS1[0];\n du[1] = RHS1[1];\n du[2] = RHS1[2];\n du[3] = RHS1[3];\n du[4] = RHS1[4];\n du[5] = RHS1[5];\n du[6] = RHS1[6];\n du[7] = RHS1[7];\n du[8] = RHS1[8];\n du[9] = RHS1[9];\n du[10] = RHS1[10];\n du[11] = RHS1[11];\n}\n" + @test_reference "target_functions/matrix.c" cfunc end # Scalar CTarget test @@ -74,19 +52,16 @@ let @variables x y t expression = x + y + t cfunc = build_function(expression, [x], [y], t; target = Symbolics.CTarget(), expression = Val{true}) - - # Generated function should be out[0] = in1[0] + in2[0] + in3 - @test cfunc == "#include \nvoid diffeqf(double* du, const double* RHS1, const double* RHS2, const double RHS3) {\n du[0] = RHS3 + RHS1[0] + RHS2[0];\n}\n" + @test_reference "target_functions/scalar1.c" cfunc end # Scalar CTarget test with scalar multiplication and powers let - @variables x y a t - expression = x^2 + y^-1 + sin(a)^3.5 + 2t - cfunc = build_function(expression, [x, y], [a], t; target = Symbolics.CTarget(), expression = Val{true}) + @variables x y a t + expression = x^2 + y^-1 + sin(a)^3.5 + 2t + cfunc = build_function(expression, [x, y], [a], t; target = Symbolics.CTarget(), expression = Val{true}) - # Generated function should avoid scalar multiplication of the form "4t" (currently done by adding another "* 1") and other invalid C syntax - @test cfunc == "#include \nvoid diffeqf(double* du, const double* RHS1, const double* RHS2, const double RHS3) {\n du[0] = 2 * RHS3 * 1 + pow(RHS1[0], 2) + 1 / RHS1[1] + pow(sin(RHS2[0]), 3.5);\n}\n" + @test_reference "target_functions/scalar2.c" cfunc end @@ -97,25 +72,7 @@ let variables = vcat(x,y,z) # Results in [x1, x2, x3, x4, y1, ...] sfunc = build_function(expression, vcat(x,y), z, []; target = Symbolics.StanTarget(), expression = Val{true}) - # Generated function should be out[1] = v[1], out[2] = v[2], ..., out[9] = p[9], etc. - @test sfunc == """ - vector diffeqf(real Any[],vector internal_var___u,vector internal_var___p) { - vector[12] internal_var___du; - internal_var___du[1] = internal_var___u[1]; - internal_var___du[2] = internal_var___u[2]; - internal_var___du[3] = internal_var___u[3]; - internal_var___du[4] = internal_var___u[4]; - internal_var___du[5] = internal_var___u[5]; - internal_var___du[6] = internal_var___u[6]; - internal_var___du[7] = internal_var___u[7]; - internal_var___du[8] = internal_var___u[8]; - internal_var___du[9] = internal_var___p[1]; - internal_var___du[10] = internal_var___p[2]; - internal_var___du[11] = internal_var___p[3]; - internal_var___du[12] = internal_var___p[4]; - return internal_var___du; - } - """ + @test_reference "target_functions/matrix.stan" sfunc end # Scalar StanTarget test @@ -124,14 +81,7 @@ let expression = x + y + z sfunc = build_function(expression, vcat(x,y), [z], t; target = Symbolics.StanTarget(), expression = Val{true}) - # Generated function should be out[0] = v[0] + p[0] + t[0] - @test sfunc == """ - vector diffeqf(real t,vector internal_var___u,vector internal_var___p) { - vector[1] internal_var___du; - internal_var___du[1] = internal_var___u[1] + internal_var___u[2] + internal_var___p[1]; - return internal_var___du; - } - """ + @test_reference "target_functions/scalar1.stan" sfunc end # Matrix MATLABTarget test @@ -141,8 +91,7 @@ let variables = vcat(x,y,z) # Results in [x1, x2, x3, x4, y1, ...] mfunc = build_function(expression, vcat(x,y,z); target = Symbolics.MATLABTarget(), expression = Val{true}) - # Generated function should be of the same form as expression - @test mfunc == "diffeqf = @(t,internal_var___u) [\n internal_var___u(1), internal_var___u(5), internal_var___u(9);\n internal_var___u(2), internal_var___u(6), internal_var___u(10);\n internal_var___u(3), internal_var___u(7), internal_var___u(11);\n internal_var___u(4), internal_var___u(8), internal_var___u(12);\n];\n" + @test_reference "target_functions/matrix.m" mfunc end # Scalar MATLABTarget test @@ -151,6 +100,5 @@ let expression = x + y + z mfunc = build_function(expression, vcat(x,y,z); target = Symbolics.MATLABTarget(), expression = Val{true}) - # Generated function should be out[0] = v[0] + p[0] + t[0] - @test mfunc == "diffeqf = @(t,internal_var___u) [\n internal_var___u(1) + internal_var___u(2) + internal_var___u(3);\n];\n" + @test_reference "target_functions/scalar1.m" mfunc end diff --git a/test/ctarget_functions/issue123.c b/test/ctarget_functions/issue123.c deleted file mode 100644 index 83ad5d711..000000000 --- a/test/ctarget_functions/issue123.c +++ /dev/null @@ -1,4 +0,0 @@ -#include -void diffeqf(double* du, const double* RHS1) { - du[0] = u * (M[0] * qd[0] + M[0] * qd[2] + M[0] * qd[3] + M[6] * qd[1] + M[24] * qd[4] + M[30] * qd[5]) * qd[0]; -} diff --git a/test/runtests.jl b/test/runtests.jl index 6836a1732..118507f45 100644 --- a/test/runtests.jl +++ b/test/runtests.jl @@ -19,7 +19,7 @@ if GROUP == "All" || GROUP == "Core" @safetestset "Fuzz Arrays" begin include("fuzz-arrays.jl") end @safetestset "Differentiation Test" begin include("diff.jl") end @safetestset "Difference Test" begin include("difference.jl") end - @safetestset "Degree Test" begin include("degree.jl") end + @safetestset "Degree Test" begin include("degree.jl") end @safetestset "Is Linear or Affine Test" begin include("islinear_affine.jl") end @safetestset "Linear Solver Test" begin include("linear_solver.jl") end @safetestset "Overloading Test" begin include("overloads.jl") end diff --git a/test/target_functions/1.c b/test/target_functions/1.c new file mode 100644 index 000000000..d0013878b --- /dev/null +++ b/test/target_functions/1.c @@ -0,0 +1,5 @@ +#include +void diffeqf(double* internal_var___du, const double* internal_var___u, const double* internal_var___p, const double t) { + internal_var___du[0] = internal_var___p[0] * internal_var___u[0] + -1 * internal_var___u[0] * internal_var___u[1]; + internal_var___du[1] = -3 * internal_var___u[1] + internal_var___u[0] * internal_var___u[1]; +} diff --git a/test/target_functions/1.m b/test/target_functions/1.m new file mode 100644 index 000000000..8b4754819 --- /dev/null +++ b/test/target_functions/1.m @@ -0,0 +1,4 @@ +diffeqf = @(t,internal_var___u) [ + internal_var___p(1) * internal_var___u(1) + -1 * internal_var___u(1) * internal_var___u(2); + -3 * internal_var___u(2) + internal_var___u(1) * internal_var___u(2); +]; diff --git a/test/target_functions/1.stan b/test/target_functions/1.stan new file mode 100644 index 000000000..a9f784c49 --- /dev/null +++ b/test/target_functions/1.stan @@ -0,0 +1,6 @@ +vector diffeqf(real t,vector internal_var___u,vector internal_var___p) { + vector[2] internal_var___du; + internal_var___du[1] = internal_var___p[1] * internal_var___u[1] + -1 * internal_var___u[1] * internal_var___u[2]; + internal_var___du[2] = -3 * internal_var___u[2] + internal_var___u[1] * internal_var___u[2]; + return internal_var___du; +} diff --git a/test/target_functions/issue123.c b/test/target_functions/issue123.c new file mode 100644 index 000000000..4b60c3cbe --- /dev/null +++ b/test/target_functions/issue123.c @@ -0,0 +1,4 @@ +#include +void diffeqf(double* du, const double* RHS1) { + du[0] = u * (M[0] * qd[0] + M[6] * qd[1] + M[0] * qd[2] + M[0] * qd[3] + M[24] * qd[4] + M[30] * qd[5]) * qd[0]; +} diff --git a/test/target_functions/matrix.c b/test/target_functions/matrix.c new file mode 100644 index 000000000..c123cf6e7 --- /dev/null +++ b/test/target_functions/matrix.c @@ -0,0 +1,15 @@ +#include +void diffeqf(double* du, const double* RHS1) { + du[0] = RHS1[0]; + du[1] = RHS1[1]; + du[2] = RHS1[2]; + du[3] = RHS1[3]; + du[4] = RHS1[4]; + du[5] = RHS1[5]; + du[6] = RHS1[6]; + du[7] = RHS1[7]; + du[8] = RHS1[8]; + du[9] = RHS1[9]; + du[10] = RHS1[10]; + du[11] = RHS1[11]; +} diff --git a/test/target_functions/matrix.m b/test/target_functions/matrix.m new file mode 100644 index 000000000..7791cc2a7 --- /dev/null +++ b/test/target_functions/matrix.m @@ -0,0 +1,6 @@ +diffeqf = @(t,internal_var___u) [ + internal_var___u(1), internal_var___u(5), internal_var___u(9); + internal_var___u(2), internal_var___u(6), internal_var___u(10); + internal_var___u(3), internal_var___u(7), internal_var___u(11); + internal_var___u(4), internal_var___u(8), internal_var___u(12); +]; diff --git a/test/target_functions/matrix.stan b/test/target_functions/matrix.stan new file mode 100644 index 000000000..53f8a5ac4 --- /dev/null +++ b/test/target_functions/matrix.stan @@ -0,0 +1,16 @@ +vector diffeqf(real Any[],vector internal_var___u,vector internal_var___p) { + vector[12] internal_var___du; + internal_var___du[1] = internal_var___u[1]; + internal_var___du[2] = internal_var___u[2]; + internal_var___du[3] = internal_var___u[3]; + internal_var___du[4] = internal_var___u[4]; + internal_var___du[5] = internal_var___u[5]; + internal_var___du[6] = internal_var___u[6]; + internal_var___du[7] = internal_var___u[7]; + internal_var___du[8] = internal_var___u[8]; + internal_var___du[9] = internal_var___p[1]; + internal_var___du[10] = internal_var___p[2]; + internal_var___du[11] = internal_var___p[3]; + internal_var___du[12] = internal_var___p[4]; + return internal_var___du; +} diff --git a/test/target_functions/scalar1.c b/test/target_functions/scalar1.c new file mode 100644 index 000000000..238edbc95 --- /dev/null +++ b/test/target_functions/scalar1.c @@ -0,0 +1,4 @@ +#include +void diffeqf(double* du, const double* RHS1, const double* RHS2, const double RHS3) { + du[0] = RHS3 + RHS1[0] + RHS2[0]; +} diff --git a/test/target_functions/scalar1.m b/test/target_functions/scalar1.m new file mode 100644 index 000000000..143de55dc --- /dev/null +++ b/test/target_functions/scalar1.m @@ -0,0 +1,3 @@ +diffeqf = @(t,internal_var___u) [ + internal_var___u(1) + internal_var___u(2) + internal_var___u(3); +]; diff --git a/test/target_functions/scalar1.stan b/test/target_functions/scalar1.stan new file mode 100644 index 000000000..534d34aa9 --- /dev/null +++ b/test/target_functions/scalar1.stan @@ -0,0 +1,5 @@ +vector diffeqf(real t,vector internal_var___u,vector internal_var___p) { + vector[1] internal_var___du; + internal_var___du[1] = internal_var___u[1] + internal_var___u[2] + internal_var___p[1]; + return internal_var___du; +} diff --git a/test/target_functions/scalar2.c b/test/target_functions/scalar2.c new file mode 100644 index 000000000..241d26af3 --- /dev/null +++ b/test/target_functions/scalar2.c @@ -0,0 +1,4 @@ +#include +void diffeqf(double* du, const double* RHS1, const double* RHS2, const double RHS3) { + du[0] = 2 * RHS3 * 1 + pow(RHS1[0], 2) + 1 / RHS1[1] + pow(sin(RHS2[0]), 3.5); +} From aa929f4f838a163d48b8a669892201aa227cef8c Mon Sep 17 00:00:00 2001 From: Yingbo Ma Date: Tue, 21 Sep 2021 10:56:17 -0400 Subject: [PATCH 3/3] Up --- test/latexify.jl | 1 - test/latexify_refs/equation_vec1.txt | 3 +-- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/test/latexify.jl b/test/latexify.jl index 365094d98..ae9998911 100644 --- a/test/latexify.jl +++ b/test/latexify.jl @@ -37,7 +37,6 @@ Dy = Differential(y) @test_reference "latexify_refs/equation_vec1.txt" latexify([ x ~ y + z y ~ x - 3z - z ~ -5x + 4y ]) @test_reference "latexify_refs/equation_vec2.txt" latexify([ Dx(u) ~ z diff --git a/test/latexify_refs/equation_vec1.txt b/test/latexify_refs/equation_vec1.txt index 0ef826e67..81b37e550 100644 --- a/test/latexify_refs/equation_vec1.txt +++ b/test/latexify_refs/equation_vec1.txt @@ -1,5 +1,4 @@ \begin{align} x =& y + z \\ -y =& x - 3 z \\ -z =& - 5 x + 4 y +y =& x - 3 z \end{align}