Skip to content

Warn (don't abort) on a compile-time-constant WHEN - #327

Merged
g5t merged 1 commit into
mainfrom
318-compile-time-constant-when
Aug 28, 2026
Merged

Warn (don't abort) on a compile-time-constant WHEN#327
g5t merged 1 commit into
mainfrom
318-compile-time-constant-when

Conversation

@g5t

@g5t g5t commented Aug 28, 2026

Copy link
Copy Markdown
Collaborator

A constant WHEN condition used to raise RuntimeError from Instance.WHEN, aborting the whole parse/translate. Per #318, "turning off" a component while keeping its position/orientation/DISPLAY is a legitimate thing to want, so this is now a logger.warning that keeps the instance and points at the alternatives (remove/comment the component, or gate it on an instrument parameter).

Three related fixes:

  • Expr.is_constant (and .value) recognise a folded boolean literal (0 == 1 -> False, 2 > 1 -> True); SymPy's BooleanAtom reports is_number == False, so these previously slipped past every constant check even though Discrepancy between Expr parsing of 1==0 vs 0==1 #317 folds them.
  • Instance.WHEN / Instance.SPLIT coerce a non-str/non-Expr argument (e.g. an int) via Expr.best instead of raising.
  • Assembler.component routes its when=/split= kwargs through Instance.WHEN/SPLIT rather than the raw struct constructor, so a string is parsed to an Expr (was stored verbatim, which broke parameter_used and the {when:p} translation format).

Fixes #318

A constant WHEN condition used to raise RuntimeError from Instance.WHEN,
aborting the whole parse/translate. Per #318, "turning off" a component
while keeping its position/orientation/DISPLAY is a legitimate thing to
want, so this is now a logger.warning that keeps the instance and points
at the alternatives (remove/comment the component, or gate it on an
instrument parameter).

Three related fixes:
- Expr.is_constant (and .value) recognise a folded boolean literal
  (0 == 1 -> False, 2 > 1 -> True); SymPy's BooleanAtom reports
  is_number == False, so these previously slipped past every constant
  check even though #317 folds them.
- Instance.WHEN / Instance.SPLIT coerce a non-str/non-Expr argument
  (e.g. an int) via Expr.best instead of raising.
- Assembler.component routes its when=/split= kwargs through
  Instance.WHEN/SPLIT rather than the raw struct constructor, so a
  string is parsed to an Expr (was stored verbatim, which broke
  parameter_used and the {when:p} translation format).
@g5t
g5t merged commit 21f197f into main Aug 28, 2026
14 checks passed
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.

Compile-time constant WHEN handling

1 participant