Skip to content

Fix non-constant numbers in Boolean context - #583

Open
dweindl wants to merge 1 commit into
PEtab-dev:mainfrom
dweindl:fix-num2bool
Open

dweindl wants to merge 1 commit into
PEtab-dev:mainfrom
dweindl:fix-num2bool

Conversation

@dweindl

@dweindl dweindl commented Nov 12, 2026

Copy link
Copy Markdown
Member

Fix non-constant numeric expressions used as Booleans (operands of &&, ||, !, piecewise conditions) being treated as always true. Per the PEtab v2 spec, 0.0 is false and any other value is true.

num2bool now returns Ne(x, 0) instead of Piecewise((True, x != 0.0), (False, True)), where x != 0.0 was Python's structural inequality. It also converts bare symbols (previously passed through, since sp.Symbol is a sympy Boolean) and Boolean-valued piecewise operands.

For example, !(x + 1) was parsed to 0.0 and is now parsed to x + 1 == 0.

Fixes #581. The reverse direction (non-constant Booleans in numeric context) is #582 and not addressed here.

🤖 Generated with Claude Code

`num2bool` fell back to `Piecewise((True, x != 0.0), (False, True))`,
where `x != 0.0` is Python's structural inequality, so any non-constant
operand of `&&`, `||`, `!` or a `piecewise` condition was treated as
`true`. Return `Ne(x, 0)` instead.

Also convert symbols (which are sympy `Boolean`s as well) and
Boolean-valued `Piecewise` operands.

Fixes PEtab-dev#581.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@codecov-commenter

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.
✅ Project coverage is 79.51%. Comparing base (09c1998) to head (fefdc35).

Additional details and impacted files
@@            Coverage Diff             @@
##             main     #583      +/-   ##
==========================================
+ Coverage   79.48%   79.51%   +0.02%     
==========================================
  Files          70       70              
  Lines        8278     8278              
  Branches     1498     1498              
==========================================
+ Hits         6580     6582       +2     
+ Misses       1207     1206       -1     
+ Partials      491      490       -1     

☔ View full report in Codecov by Harness.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@dweindl
dweindl marked this pull request as ready for review November 12, 2026 13:32
@dweindl
dweindl requested a review from a team as a code owner November 12, 2026 13:32
@dweindl dweindl self-assigned this Nov 12, 2026
Comment on lines 338 to 341
if x.is_zero is True:
return sp.false
if x.is_zero is False:
return sp.true

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Can this be deleted? Since we now have return sp.Ne(x, 0)?

This branch has not been deployed

No deployments
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Non-constant numbers in Boolean context are parsed to constants

3 participants