Skip to content

Commit d762662

Browse files
committed
feat: use dispatch version instead of immutable list
1 parent 181f962 commit d762662

File tree

4 files changed

+14
-12
lines changed

4 files changed

+14
-12
lines changed

src/DynamicExpressions.jl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ import .NodeModule:
6767
get_scalar_constants,
6868
set_scalar_constants!
6969
@reexport import .StringsModule: string_tree, print_tree
70+
import .StringsModule: get_op_name
7071
@reexport import .OperatorEnumModule: AbstractOperatorEnum
7172
@reexport import .OperatorEnumConstructionModule:
7273
OperatorEnum, GenericOperatorEnum, @extend_operators, set_default_variable_names!

src/Strings.jl

Lines changed: 0 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,6 @@ using ..UtilsModule: deprecate_varmap
44
using ..OperatorEnumModule: AbstractOperatorEnum
55
using ..NodeModule: AbstractExpressionNode, tree_mapreduce
66

7-
const OP_NAMES = Base.ImmutableDict(
8-
"safe_log" => "log",
9-
"safe_log2" => "log2",
10-
"safe_log10" => "log10",
11-
"safe_log1p" => "log1p",
12-
"safe_acosh" => "acosh",
13-
"safe_sqrt" => "sqrt",
14-
"safe_pow" => "^",
15-
)
16-
177
function dispatch_op_name(::Val{deg}, ::Nothing, idx)::Vector{Char} where {deg}
188
if deg == 1
199
return vcat(collect("unary_operator["), collect(string(idx)), [']'])

test/test_params.jl

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using DynamicExpressions
2+
import DynamicExpressions as DE
23

34
maximum_residual = 1e-2
45

@@ -26,6 +27,13 @@ maximum_residual = 1e-2
2627
greater(x, y) = (x > y)
2728

2829
custom_cos(x) = cos(x)^2
30+
31+
DE.get_op_name(::typeof(safe_log)) = ['l', 'o', 'g']
32+
DE.get_op_name(::typeof(safe_log2)) = ['l', 'o', 'g', '2']
33+
DE.get_op_name(::typeof(safe_log10)) = ['l', 'o', 'g', '1', '0']
34+
DE.get_op_name(::typeof(safe_log1p)) = ['l', 'o', 'g', '1', 'p']
35+
DE.get_op_name(::typeof(safe_acosh)) = ['a', 'c', 'o', 's', 'h']
36+
DE.get_op_name(::typeof(safe_sqrt)) = ['s', 'q', 'r', 't']
2937
end
3038

3139
HEADER_GUARD_TEST_PARAMS = true

test/test_print.jl

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using Test
22
using DynamicExpressions
3+
import DynamicExpressions as DE
34
import Compat: Returns
45

56
include("test_params.jl")
@@ -32,8 +33,10 @@ for unaop in [safe_log, safe_log2, safe_log10, safe_log1p, safe_sqrt, safe_acosh
3233
@test string_tree(minitree, opts) == replace(string(unaop), "safe_" => "") * "(x1)"
3334
end
3435

35-
!(@isdefined safe_pow) &&
36-
@eval safe_pow(x::T, y::T) where {T<:Number} = (x < 0 && y != round(y)) ? T(NaN) : x^y
36+
@isdefined(safe_pow) || @eval begin
37+
safe_pow(x::T, y::T) where {T<:Number} = (x < 0 && y != round(y)) ? T(NaN) : x^y
38+
DE.get_op_name(::typeof(safe_pow)) = ['^']
39+
end
3740
for binop in [safe_pow, ^]
3841
opts = OperatorEnum(;
3942
default_params..., binary_operators=(+, *, /, -, binop), unary_operators=(cos,)

0 commit comments

Comments
 (0)