@@ -354,10 +354,93 @@ for prop in [SYS_PROPS; [:continuous_events, :discrete_events]]
354354end
355355
356356PrecompileTools. @compile_workload begin
357- using ModelingToolkit
357+ fold1 = Val {false} ()
358+ using SymbolicUtils
359+ using SymbolicUtils: shape
360+ using Symbolics
361+ @syms x y f (t) q[1 : 5 ]
362+ SymbolicUtils. Sym {SymReal} (:a ; type = Real, shape = SymbolicUtils. ShapeVecT ())
363+ x + y
364+ x * y
365+ x / y
366+ x ^ y
367+ x ^ 5
368+ 6 ^ x
369+ x - y
370+ - y
371+ 2 y
372+ z = 2
373+ dict = SymbolicUtils. ACDict {VartypeT} ()
374+ dict[x] = 1
375+ dict[y] = 1
376+ type:: typeof (DataType) = rand () < 0.5 ? Real : Float64
377+ nt = (; type, shape, unsafe = true )
378+ Base. pairs (nt)
379+ BSImpl. AddMul {VartypeT} (1 , dict, SymbolicUtils. AddMulVariant. MUL; type, shape = SymbolicUtils. ShapeVecT (), unsafe = true )
380+ * (y, z)
381+ * (z, y)
382+ SymbolicUtils. symtype (y)
383+ f (x)
384+ (5 x / 5 )
385+ expand ((x + y) ^ 2 )
386+ simplify (x ^ (1 // 2 ) + (sin (x) ^ 2 + cos (x) ^ 2 ) + 2 (x + y) - x - y)
387+ ex = x + 2 y + sin (x)
388+ rules1 = Dict (x => y)
389+ rules2 = Dict (x => 1 )
390+ Dx = Differential (x)
391+ Differential (y)(ex)
392+ uex = unwrap (ex)
393+ Symbolics. executediff (Dx, uex)
394+ # Running `fold = Val(true)` invalidates the precompiled statements
395+ # for `fold = Val(false)` and itself doesn't precompile anyway.
396+ # substitute(ex, rules1)
397+ substitute (ex, rules1; fold = fold1)
398+ substitute (ex, rules2; fold = fold1)
399+ @variables foo
400+ f (foo)
401+ @variables x y f (:: Real ) q[1 : 5 ]
402+ x + y
403+ x * y
404+ x / y
405+ x ^ y
406+ x ^ 5
407+ # 6 ^ x
408+ x - y
409+ - y
410+ 2 y
411+ symtype (y)
412+ z = 2
413+ * (y, z)
414+ * (z, y)
415+ f (x)
416+ (5 x / 5 )
417+ [x, y]
418+ [x, f, f]
419+ promote_type (Int, Num)
420+ promote_type (Real, Num)
421+ promote_type (Float64, Num)
422+ # expand((x + y) ^ 2)
423+ # simplify(x ^ (1//2) + (sin(x) ^ 2 + cos(x) ^ 2) + 2(x + y) - x - y)
424+ ex = x + 2 y + sin (x)
425+ rules1 = Dict (x => y)
426+ # rules2 = Dict(x => 1)
427+ # Running `fold = Val(true)` invalidates the precompiled statements
428+ # for `fold = Val(false)` and itself doesn't precompile anyway.
429+ # substitute(ex, rules1)
430+ substitute (ex, rules1; fold = fold1)
431+ Symbolics. linear_expansion (ex, y)
432+ # substitute(ex, rules2; fold = fold1)
433+ # substitute(ex, rules2)
434+ # substitute(ex, rules1; fold = fold2)
435+ # substitute(ex, rules2; fold = fold2)
436+ q[1 ]
437+ q' q
438+ using ModelingToolkit
358439 @variables x (ModelingToolkit. t_nounits)
359- @named sys = System ([ModelingToolkit. D_nounits (x) ~ - x], ModelingToolkit. t_nounits)
360- prob = ODEProblem (mtkcompile (sys), [x => 30.0 ], (0 , 100 ), jac = true )
440+ isequal (ModelingToolkit. D_nounits. x, ModelingToolkit. t_nounits)
441+ sys = System ([ModelingToolkit. D_nounits (x) ~ x], ModelingToolkit. t_nounits, [x], Num[]; name = :sys )
442+ sys = System ([ModelingToolkit. D_nounits (x) ~ x], ModelingToolkit. t_nounits, [x], Num[]; name = :sys )
443+ # mtkcompile(sys)
361444 @mtkmodel __testmod__ begin
362445 @constants begin
363446 c = 1.0
@@ -388,4 +471,16 @@ PrecompileTools.@compile_workload begin
388471 end
389472end
390473
474+ precompile (Tuple{typeof (Base. merge), NamedTuple{(:f , :args , :metadata , :hash , :hash2 , :shape , :type , :id ), Tuple{SymbolicUtils. BasicSymbolicImpl. var"typeof(BasicSymbolicImpl)" {SymbolicUtils. SymReal}, SymbolicUtils. SmallVec{SymbolicUtils. BasicSymbolicImpl. var"typeof(BasicSymbolicImpl)" {SymbolicUtils. SymReal}, Array{SymbolicUtils. BasicSymbolicImpl. var"typeof(BasicSymbolicImpl)" {SymbolicUtils. SymReal}, 1 }}, Nothing, UInt64, UInt64, SymbolicUtils. SmallVec{Base. UnitRange{Int64}, Array{Base. UnitRange{Int64}, 1 }}, DataType, SymbolicUtils. IDType}}, NamedTuple{(:metadata ,), Tuple{Base. ImmutableDict{DataType, Any}}}})
475+ precompile (Tuple{typeof (Base. merge), NamedTuple{(:f , :args , :metadata , :hash , :hash2 , :shape , :type , :id ), Tuple{SymbolicUtils. BasicSymbolicImpl. var"typeof(BasicSymbolicImpl)" {SymbolicUtils. SymReal}, SymbolicUtils. SmallVec{SymbolicUtils. BasicSymbolicImpl. var"typeof(BasicSymbolicImpl)" {SymbolicUtils. SymReal}, Array{SymbolicUtils. BasicSymbolicImpl. var"typeof(BasicSymbolicImpl)" {SymbolicUtils. SymReal}, 1 }}, Base. ImmutableDict{DataType, Any}, UInt64, UInt64, SymbolicUtils. SmallVec{Base. UnitRange{Int64}, Array{Base. UnitRange{Int64}, 1 }}, DataType, SymbolicUtils. IDType}}, NamedTuple{(:id , :hash , :hash2 ), Tuple{Nothing, Int64, Int64}}})
476+ precompile (Tuple{typeof (Core. kwcall), NamedTuple{(:f , :args , :metadata , :hash , :hash2 , :shape , :type , :id ), Tuple{SymbolicUtils. BasicSymbolicImpl. var"typeof(BasicSymbolicImpl)" {SymbolicUtils. SymReal}, SymbolicUtils. SmallVec{SymbolicUtils. BasicSymbolicImpl. var"typeof(BasicSymbolicImpl)" {SymbolicUtils. SymReal}, Array{SymbolicUtils. BasicSymbolicImpl. var"typeof(BasicSymbolicImpl)" {SymbolicUtils. SymReal}, 1 }}, Base. ImmutableDict{DataType, Any}, Int64, Int64, SymbolicUtils. SmallVec{Base. UnitRange{Int64}, Array{Base. UnitRange{Int64}, 1 }}, DataType, Nothing}}, Type{SymbolicUtils. BasicSymbolicImpl. Term{SymbolicUtils. SymReal}}})
477+ precompile (Tuple{typeof (Symbolics. parse_vars), Symbol, Type, Tuple{Symbol, Symbol}, Function})
478+ precompile (Tuple{typeof (Base. merge), NamedTuple{(:name , :metadata , :hash , :hash2 , :shape , :type , :id ), Tuple{Symbol, Base. ImmutableDict{DataType, Any}, UInt64, UInt64, SymbolicUtils. SmallVec{Base. UnitRange{Int64}, Array{Base. UnitRange{Int64}, 1 }}, DataType, SymbolicUtils. IDType}}, NamedTuple{(:metadata ,), Tuple{Base. ImmutableDict{DataType, Any}}}})
479+ precompile (Tuple{typeof (Base. vect), Symbolics. Equation, Vararg{Symbolics. Equation}})
480+ precompile (Tuple{typeof (Core. kwcall), NamedTuple{(:name , :defaults ), Tuple{Symbol, Base. Dict{Symbolics. Num, Float64}}}, Type{ModelingToolkit. System}, Array{Symbolics. Equation, 1 }, Symbolics. Num, Array{Symbolics. Num, 1 }, Array{Symbolics. Num, 1 }})
481+ precompile (Tuple{Type{NamedTuple{(:name , :defaults ), T} where T<: Tuple }, Tuple{Symbol, Base. Dict{Symbolics. Num, Float64}}})
482+ precompile (Tuple{typeof (SymbolicUtils. isequal_somescalar), Float64, Float64})
483+ precompile (Tuple{Type{NamedTuple{(:name , :defaults , :guesses ), T} where T<: Tuple }, Tuple{Symbol, Base. Dict{Symbolics. Num, Float64}, Base. Dict{Symbolics. Num, Float64}}})
484+ precompile (Tuple{typeof (Core. kwcall), NamedTuple{(:name , :defaults , :guesses ), Tuple{Symbol, Base. Dict{Symbolics. Num, Float64}, Base. Dict{Symbolics. Num, Float64}}}, Type{ModelingToolkit. System}, Array{Symbolics. Equation, 1 }, Symbolics. Num, Array{Symbolics. Num, 1 }, Array{Symbolics. Num, 1 }})
485+
391486end # module
0 commit comments