Skip to content

Preserve signal names in scalar LTI operations#1228

Open
marko1olo wants to merge 1 commit into
python-control:mainfrom
marko1olo:fix-preserve-signal-names-scalar-ops
Open

Preserve signal names in scalar LTI operations#1228
marko1olo wants to merge 1 commit into
python-control:mainfrom
marko1olo:fix-preserve-signal-names-scalar-ops

Conversation

@marko1olo

Copy link
Copy Markdown
Contributor

Related to #902.

This preserves named input/output metadata when linear systems go through interface-preserving scalar operations:

  • unary negation (-sys, control.negate(sys))
  • right scalar gain (sys * k, control.series(k, sys))
  • left scalar gain (k * sys, control.series(sys, k))

The change covers both StateSpace and TransferFunction. For StateSpace, state labels are preserved as well because the state vector is unchanged by these operations.

I intentionally kept this PR narrow and did not change matrix multiplication or general system-to-system interconnections, since those cases can alter the external interface and need a separate naming policy.

Local validation:

  • python -m pytest -p no:cacheprovider control\tests\namedio_test.py::test_named_scalar_operations_preserve_signal_names -q -> 12 passed
  • python -m pytest -p no:cacheprovider control\tests\namedio_test.py -q -> 22 passed, 10 skipped
  • python -m pytest -p no:cacheprovider control\tests\statesp_test.py -q -> 828 passed, 112 skipped, 1 xfailed
  • python -m pytest -p no:cacheprovider control\tests\xferfcn_test.py -q -> 145 passed, 4 skipped
  • python -m pytest -p no:cacheprovider control\tests\bdalg_test.py -q -> 48 passed
  • python -m ruff check control\statesp.py control\xferfcn.py control\tests\namedio_test.py -> passed
  • python -m compileall -q control -> 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.

1 participant