Skip to content

Commit 28ff6da

Browse files
author
Alessandro Cheli
committed
Merge remote-tracking branch 'origin' into ale/terminterface1
2 parents 478598e + 7a057d6 commit 28ff6da

File tree

3 files changed

+35
-9
lines changed

3 files changed

+35
-9
lines changed

src/SymbolicUtils.jl

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,8 +19,7 @@ using TermInterface
1919
import TermInterface: iscall, isexpr, head, children,
2020
operation, arguments, metadata, maketerm, sorted_arguments
2121

22-
const istree = iscall
23-
Base.@deprecate_binding istree iscall
22+
Base.@deprecate istree iscall
2423
export istree, operation, arguments, sorted_arguments, similarterm, iscall
2524
# Sym, Term,
2625
# Add, Mul and Pow

src/types.jl

Lines changed: 30 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -582,14 +582,38 @@ function basicsymbolic(f, args, stype, metadata)
582582
T = _promote_symtype(f, args)
583583
end
584584
if T <: LiteralReal
585-
Term{T}(f, args, metadata=metadata)
586-
elseif T <: Number && (f in (+, *) || (f in (/, ^) && length(args) == 2)) && all(x->symtype(x) <: Number, args)
587-
res = f(args...)
588-
if res isa Symbolic
589-
@set! res.metadata = metadata
585+
@goto FALLBACK
586+
elseif all(x->symtype(x) <: Number, args)
587+
if f === (+)
588+
res = +(args...)
589+
if isadd(res)
590+
@set! res.metadata = metadata
591+
end
592+
res
593+
elseif f == (*)
594+
res = *(args...)
595+
if ismul(res)
596+
@set! res.metadata = metadata
597+
end
598+
res
599+
elseif f == (/)
600+
@assert length(args) == 2
601+
res = args[1] / args[2]
602+
if isdiv(res)
603+
@set! res.metadata = metadata
604+
end
605+
res
606+
elseif f == (^) && length(args) == 2
607+
res = args[1] ^ args[2]
608+
if ispow(res)
609+
@set! res.metadata = metadata
610+
end
611+
res
612+
else
613+
@goto FALLBACK
590614
end
591-
return res
592615
else
616+
@label FALLBACK
593617
Term{T}(f, args, metadata=metadata)
594618
end
595619
end

test/basics.jl

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,10 @@ end
227227

228228
# test that maketerm sets metadata correctly
229229
metadata = Base.ImmutableDict{DataType, Any}(Ctx1, "meta_1")
230-
s = SymbolicUtils.maketerm(typeof(a^b), ^, [a * b, 3], metadata)
230+
s = SymbolicUtils.maketerm(typeof(a^b), ^, [a * b, 3], metadata)
231+
@test !hasmetadata(s, Ctx1)
232+
233+
s = SymbolicUtils.maketerm(typeof(a^b), *, [a * b, 3], metadata)
231234
@test hasmetadata(s, Ctx1)
232235
@test getmetadata(s, Ctx1) == "meta_1"
233236
end

0 commit comments

Comments
 (0)