Skip to content

Commit 4267c02

Browse files
fix: handle Const in ^
1 parent 8de38b2 commit 4267c02

File tree

1 file changed

+5
-4
lines changed

1 file changed

+5
-4
lines changed

src/types.jl

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1941,16 +1941,17 @@ function ^(a::SN, b)
19411941
a = unwrap_const(a)
19421942
b = unwrap_const(unwrap(b))
19431943
T = promote_symtype(^, symtype(a), symtype(b))
1944-
!issafecanon(^, a, b) && return Term{T}(^, ArgsT((a, b)))
1944+
!issafecanon(^, a, b) && return Term{T}(^, ArgsT((a, maybe_const(b))))
19451945
if b isa Number
19461946
iszero(b) && return 1
19471947
isone(b) && return a
19481948
end
19491949
if b isa Real && b < 0
19501950
return Div{T}(1, a ^ (-b), false)
19511951
end
1952-
if b isa Number && iscall(a) && operation(a) === (^) && arguments(a)[2] isa Number
1952+
if b isa Number && iscall(a) && operation(a) === (^) && isconst(arguments(a)[2]) && unwrap_const(arguments(a)[2]) isa Number
19531953
base, exp = arguments(a)
1954+
exp = unwrap_const(exp)
19541955
return base ^ (exp * b)
19551956
end
19561957
@match a begin
@@ -1966,7 +1967,7 @@ function ^(a::SN, b)
19661967
_ => return Polyform{T}(MP.polynomial(basicsymbolic_to_polyvar(a) ^ Int(b), T))
19671968
end
19681969
end
1969-
return BSImpl.Term{T}(^, ArgsT((a, b)))
1970+
return BSImpl.Term{T}(^, ArgsT((a, maybe_const(b))))
19701971
end
19711972

1972-
^(a::Number, b::SN) = Term{promote_symtype(^, symtype(a), symtype(b))}(^, ArgsT((a, b)))
1973+
^(a::Number, b::SN) = Term{promote_symtype(^, symtype(a), symtype(b))}(^, ArgsT((closest_const(a), b)))

0 commit comments

Comments
 (0)