Skip to content

Commit 4664117

Browse files
authored
Merge pull request #35 from SymbolicML/as-extension
Move SymbolicUtils.jl into extension
2 parents 38ee88b + 42311a6 commit 4664117

File tree

5 files changed

+61
-15
lines changed

5 files changed

+61
-15
lines changed

Project.toml

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ PrecompileTools = "aea7be01-6a6a-4083-8856-8a6e6704d82a"
1212
Printf = "de0858da-6303-5e67-8744-51eddeeeb8d7"
1313
Random = "9a3f8284-a2c9-5f02-9a11-845980a1fd5c"
1414
Reexport = "189a3867-3050-52da-a836-e630ba90ab69"
15-
SymbolicUtils = "d1185830-fcd6-423d-90d6-eec64667417b"
15+
Requires = "ae029012-a4dd-5104-9daa-d747884805df"
1616
TOML = "fa267f1f-6049-4f14-aa54-33bafae1ed76"
1717
Zygote = "e88e6eb3-aa80-5325-afca-941959d7151f"
1818

@@ -22,16 +22,24 @@ LoopVectorization = "0.12"
2222
MacroTools = "0.4, 0.5"
2323
PrecompileTools = "1"
2424
Reexport = "1"
25+
Requires = "1.0, 1.1, 1.2, 1.3"
2526
SymbolicUtils = "0.19, ^1.0.5"
2627
Zygote = "0.6"
2728
julia = "1.6"
2829

30+
[extensions]
31+
DynamicExpressionsSymbolicUtilsExt = "SymbolicUtils"
32+
2933
[extras]
3034
ForwardDiff = "f6369f11-7733-5829-9624-2563aa707210"
3135
SafeTestsets = "1bc83da4-3b8d-516f-aca4-4fe02f6d838f"
3236
SpecialFunctions = "276daf66-3868-5448-9aa4-cd146d93841b"
3337
StaticArrays = "90137ffa-7385-5640-81b9-e52037218182"
38+
SymbolicUtils = "d1185830-fcd6-423d-90d6-eec64667417b"
3439
Test = "8dfed614-e22c-5e08-85e1-65c5234f0b40"
3540

3641
[targets]
37-
test = ["Test", "SafeTestsets", "SpecialFunctions", "ForwardDiff", "StaticArrays"]
42+
test = ["Test", "SafeTestsets", "SpecialFunctions", "ForwardDiff", "StaticArrays", "SymbolicUtils"]
43+
44+
[weakdeps]
45+
SymbolicUtils = "d1185830-fcd6-423d-90d6-eec64667417b"

src/InterfaceSymbolicUtils.jl renamed to ext/DynamicExpressionsSymbolicUtilsExt.jl

Lines changed: 22 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,19 @@
1-
module InterfaceSymbolicUtilsModule
1+
module DynamicExpressionsSymbolicUtilsExt
22

3-
using SymbolicUtils
4-
import ..EquationModule: Node, DEFAULT_NODE_TYPE
5-
import ..OperatorEnumModule: AbstractOperatorEnum
6-
import ..UtilsModule: isgood, isbad, @return_on_false
3+
import Base: convert
4+
if isdefined(Base, :get_extension)
5+
using SymbolicUtils
6+
import DynamicExpressions.EquationModule: Node, DEFAULT_NODE_TYPE
7+
import DynamicExpressions.OperatorEnumModule: AbstractOperatorEnum
8+
import DynamicExpressions.UtilsModule: isgood, isbad, @return_on_false
9+
import DynamicExpressions.ExtensionInterfaceModule: node_to_symbolic, symbolic_to_node
10+
else
11+
using ..SymbolicUtils
12+
import ..DynamicExpressions.EquationModule: Node, DEFAULT_NODE_TYPE
13+
import ..DynamicExpressions.OperatorEnumModule: AbstractOperatorEnum
14+
import ..DynamicExpressions.UtilsModule: isgood, isbad, @return_on_false
15+
import ..DynamicExpressions.ExtensionInterfaceModule: node_to_symbolic, symbolic_to_node
16+
end
717

818
const SYMBOLIC_UTILS_TYPES = Union{<:Number,SymbolicUtils.Symbolic{<:Number}}
919

@@ -91,7 +101,7 @@ function findoperation(op, ops)
91101
throw(error("Operation $(op) in expression not found in operations $(ops)!"))
92102
end
93103

94-
function Base.convert(
104+
function convert(
95105
::typeof(SymbolicUtils.Symbolic),
96106
tree::Node,
97107
operators::AbstractOperatorEnum;
@@ -101,7 +111,7 @@ function Base.convert(
101111
return node_to_symbolic(tree, operators; varMap=varMap, index_functions=index_functions)
102112
end
103113

104-
function Base.convert(
114+
function convert(
105115
::typeof(Node),
106116
x::Number,
107117
operators::AbstractOperatorEnum;
@@ -110,7 +120,7 @@ function Base.convert(
110120
return Node(; val=DEFAULT_NODE_TYPE(x))
111121
end
112122

113-
function Base.convert(
123+
function convert(
114124
::typeof(Node),
115125
expr::SymbolicUtils.Symbolic,
116126
operators::AbstractOperatorEnum;
@@ -181,8 +191,10 @@ function node_to_symbolic(
181191
end
182192

183193
function symbolic_to_node(
184-
eqn::T, operators::AbstractOperatorEnum; varMap::Union{Array{String,1},Nothing}=nothing
185-
)::Node where {T<:SymbolicUtils.Symbolic}
194+
eqn::SymbolicUtils.Symbolic,
195+
operators::AbstractOperatorEnum;
196+
varMap::Union{Array{String,1},Nothing}=nothing,
197+
)::Node
186198
return convert(Node, eqn, operators; varMap=varMap)
187199
end
188200

src/DynamicExpressions.jl

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -7,11 +7,12 @@ include("EquationUtils.jl")
77
include("EvaluateEquation.jl")
88
include("EvaluateEquationDerivative.jl")
99
include("EvaluationHelpers.jl")
10-
include("InterfaceSymbolicUtils.jl")
1110
include("SimplifyEquation.jl")
1211
include("OperatorEnumConstruction.jl")
12+
include("ExtensionInterface.jl")
1313

14-
using Reexport
14+
import Requires: @init, @require
15+
import Reexport: @reexport
1516
@reexport import .EquationModule:
1617
Node, string_tree, print_tree, copy_node, set_node!, tree_mapreduce, filter_map
1718
@reexport import .EquationUtilsModule:
@@ -30,9 +31,15 @@ using Reexport
3031
@reexport import .EvaluateEquationModule: eval_tree_array, differentiable_eval_tree_array
3132
@reexport import .EvaluateEquationDerivativeModule:
3233
eval_diff_tree_array, eval_grad_tree_array
33-
@reexport import .InterfaceSymbolicUtilsModule: node_to_symbolic, symbolic_to_node
3434
@reexport import .SimplifyEquationModule: combine_operators, simplify_tree
3535
@reexport import .EvaluationHelpersModule
36+
@reexport import .ExtensionInterfaceModule: node_to_symbolic, symbolic_to_node
37+
38+
#! format: off
39+
if !isdefined(Base, :get_extension)
40+
@init @require SymbolicUtils = "d1185830-fcd6-423d-90d6-eec64667417b" include("../ext/DynamicExpressionsSymbolicUtilsExt.jl")
41+
end
42+
#! format: on
3643

3744
include("deprecated.jl")
3845

src/ExtensionInterface.jl

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
module ExtensionInterfaceModule
2+
3+
import ..EquationModule: Node, DEFAULT_NODE_TYPE
4+
import ..OperatorEnumModule: AbstractOperatorEnum
5+
import ..UtilsModule: isgood, isbad, @return_on_false
6+
7+
function node_to_symbolic(args...; kws...)
8+
return error(
9+
"Please load the `SymbolicUtils` package to use `node_to_symbolic(::Node, ::AbstractOperatorEnum; kws...)`.",
10+
)
11+
end
12+
function symbolic_to_node(args...; kws...)
13+
return error(
14+
"Please load the `SymbolicUtils` package to use `symbolic_to_node(::Symbolic, ::AbstractOperatorEnum; kws...)`.",
15+
)
16+
end
17+
18+
end

test/test_symbolic_utils.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
using SymbolicUtils
12
using DynamicExpressions
23
using Test
34
include("test_params.jl")

0 commit comments

Comments
 (0)