JuliaPy / JuliaPy/SymPy.jl

Incorrect `lambdify`? (exponentiation of negative `real`)

Open
#510 1 comment 0 reactions 0 assignees View on GitHub
Dominant language
Julia
Stars
282
Forks
59
PR merge metrics
No merged PRs in 30d

Description

`simplify()` moves exponentiation into the modulo operation,
but that apparently changes semantics as per externally-observable side-effects:

```
using SymPy
@syms x::real
@show f_sym = 0.17*x/(abs(x))^(0.6)
@show f_sym(-1)
f = lambdify(f_sym)
@show f(-1)
@show f_sym_simplified = simplify(f_sym)
@show f_sym_simplified(-1)
f_simplified = lambdify(f_sym_simplified)
@show f_simplified(-1)
```
```
f_sym = (0.17x) / abs(x) ^ 0.6 = 0.17*x/Abs(x)^0.6
f_sym(-1) = -0.170000000000000
f(-1) = -0.17
f_sym_simplified = simplify(f_sym) = 0.17*x/Abs(x^0.6)
f_sym_simplified(-1) = -0.170000000000000
DomainError with -1.0:
Exponentiation yielding a complex result requires a complex argument.
Replace x^y with (x+0im)^y, Complex(x)^y, or similar.

Stacktrace:
[1] throw_exp_domainerror(x::Float64)
@ Base.Math ./math.jl:37
[2] ^(x::Float64, y::Float64)
@ Base.Math ./math.jl:1123
[3] ^
@ ./promotion.jl:444 [inlined]
[4] __POW__
@ ~/.julia/packages/SymPy/mpN0u/src/lambdify.jl:45 [inlined]
[5] var"##294"(x::Int64)
@ SymPy ./none:0
[6] #invokelatest#2
@ ./essentials.jl:816 [inlined]
[7] invokelatest
@ ./essentials.jl:813 [inlined]
[8] (::SymPy.var"#120#121"{SymPy.var"###294"})(args::Int64)
@ SymPy ~/.julia/packages/SymPy/mpN0u/src/lambdify.jl:248
[9] top-level scope
@ show.jl:1128
```

This is Julia Version 1.9.1, SymPy v1.1.9, on debian amd64 sid.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.