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

Aperta
#510 1 commento 0 reazioni 0 assegnatari Vedi su GitHub

Nessuno ha ancora preso questa issue.

Valutazione

Difficoltà
4/5
Tempo stimato
3-5 giorni
Idoneità per principianti
28/100
Tipo di issue
Bug
Chiarezza
Abbastanza chiara
Stato di attività
Ferma
Stack tecnologico
julia
Ambito
tooling

Direzione di ricerca

Inizia riproducendo l'esempio Julia e ispeziona lambdify.jl di SymPy.jl, in particolare la voce POW mostrata nel traceback. Confronta le espressioni originale e semplificata per input reali negativi; il lavoro è completato quando lambdify conserva il comportamento osservato senza errori oppure documenta chiaramente la semantica supportata, con una copertura di regressione per questo caso.

Scritto dal modello di indicizzazione a partire dal testo della issue.

Descrizione

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.

Lingua principale
Julia
Stelle
282
Fork
59
Merge medio
32m
PR unite (30g)
1

Preparare l'ambiente

Questo progetto non fornisce container di sviluppo, Dockerfile né guida per i contributori, quindi l'ambiente è a tuo carico: parti dal suo README e consulta la nostra guida al primo contributo per i passaggi generali.

Come iniziare

  1. Leggi tutta la issue e poi la guida ai contributi del progetto.
  2. Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
  3. Fai un fork del repository e lavora su un branch.
  4. Apri una pull request che faccia riferimento al numero della issue.

Altre issue di JuliaPy/SymPy.jl

Tutte le issue di JuliaPy/SymPy.jl

Issue simili

Altre issue su Julia

Ricevi le nuove issue nella tua casella

Un breve riepilogo di issue GitHub adatte ai principianti.