Open
Conversation
…c' will automatically install Python if not present).
…c' will automatically install Python if not present).
… readability and consistency across workflow files.
…act', for better readability and consistency across workflow files.
…rtifact', for better readability and consistency across workflow files.
…mly specify 'dist' as (file)name for the artifact uploaded (or downloaded, respectively), for consistency across workflow files.
…tep names, to better reflect the purpose of the step.
…tribution and wheels' (plural) in workflow step names.
…', for better readability and consistency across workflow files.
…tch:' in selected workflows to allow manual trigger of the workflow.
…hanged the "requires-python" field from ">= 3.11, < 3.15" to ">= 3.11". <br>
Detailed background and reasoning in this good yet long post by Henry Schreiner:
https://iscinumpy.dev/post/bound-version-constraints/#pinning-the-python-version-is-special <br>
TLDR: Placing an upper Python version constraint on a Python package causes more harm than it provides benefits.
The upper version constraint unnecessarily manifests incompatibility with future Python releases.
Removing the upper version constraint ensures the package remains installable as Python evolves.
In the majority of cases, the newer Python version will anyhow be backward-compatible. And in the rare case where your package would really not work with a newer Python version,
users can at least find a solution manually to resolve the conflict, e.g. by pinning your package to the last version compatible with the environment they install it in.
That way, we ensure it remains _possible_ for users to find a solution, instead of rendering it impossible forever.
…, as TimeTableFMU.fmu requires scipy to be installed in the calling environment.
…to "session", because "session" scoped fixtures gets called before "package" scoped fixtures.
…in `__init__.py` on package root level. This to make sure the libcosimc dll gets loaded only once. This resolves a runtime error observed with libcosimpy. (Although the root bug is likely in libcosimpy; should be reviewed by the libcosimpy team).
…, as the test workflows will need these additional dependencies to run the FMUs in /tests/data/..
…ess.run() to 'cp437' to avoid decoding errors in GitHub workflows running on Windows (the Windows runners on GitHub have a non-UTF-8 locale).
… GitHub workflows on Windows.
… GitHub workflows on Windows.
There was a problem hiding this comment.
Pull request overview
This is a comprehensive maintenance update PR preparing for version 0.3.0 release. The PR includes significant refactoring to improve code reliability, extensive test repairs after updating FMU test fixtures, dependency updates to support Python 3.11-3.14, and removal of the upper Python version constraint to follow best practices for library compatibility.
Changes:
- Added new
codegen.pyutility module withget_callable_function()to safely execute compiled code without relying on mutablelocals(), improving reliability - Updated all test data from SimpleTable to TimeTableFMU, requiring comprehensive test updates across the codebase
- Bumped all dependencies to latest versions (numpy>=2.3, libcosimpy>=0.0.5, pytest>=9.0, etc.) and updated Python support to 3.11-3.14
Reviewed changes
Copilot reviewed 62 out of 69 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| src/sim_explorer/utils/codegen.py | New utility module for safe execution of compiled code with explicit namespace management |
| src/sim_explorer/init.py | Added libcosimpy.CosimLibrary import at package root to prevent DLL loading issues |
| src/sim_explorer/assertion.py | Refactored to use new codegen helper, updated API signatures for eval_single/_eval methods |
| src/sim_explorer/case.py | Updated imports (UTC from datetime), improved documentation, modernized code patterns |
| src/sim_explorer/system_interface.py | Changed step action generation from np.arange to np.linspace, added SupportsFloat type hints |
| src/sim_explorer/system_interface_osp.py | Minor docstring improvements and unused variable prefixing |
| src/sim_explorer/utils/osp.py | Removed noqa comment for algorithm parameter, fixed code quality issues |
| src/sim_explorer/json5.py | Minor code quality improvements |
| src/sim_explorer/cli/main.py | Removed sys.path manipulation (no longer needed) |
| tests/*.py | Extensive updates for SimpleTable->TimeTable rename, API signature changes, improved CLI testing |
| tests/data/TimeTable/* | Renamed and updated test fixtures from SimpleTable to TimeTableFMU |
| tests/data/*/OspSystemStructure.xml | Added Algorithm field, formatting improvements |
| tests/conftest.py | Changed fixture scope from "package" to "session", improved file cleanup logic |
| pyproject.toml | Version bump to 0.3.0, removed upper Python constraint, updated all dependencies |
| .github/workflows/* | Updated actions versions, improved naming, removed redundant Python setup steps |
| docs/source/conf.py | Updated copyright year to 2026, version to 0.3.0 |
| README.rst | Improved formatting with proper code blocks, updated instructions |
| CHANGELOG.md | Comprehensive changelog entry for 0.3.0 release |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
…--show` from an input option (requesting the user to write `--show True` ) to a simple switch. This eases the usage of this additional commandline option. The user-defined option `show` can now be enabled by simply adding the switch `--show` on the commandline. No need anylonger to amend `--show` with the additional string literal `True`. Setting the switch `--show` sets `show` to `True`; omitting it sets `show` to `False`.
…LLY` to `Temporal.EVENTUALLY`, and adapted a related docstring in src/sim_explorer/assertion.py, to make clearer the meaning of the STL `EVENTUALLY` operator.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Maintenance update, repaired tests, bumped version number to 0.3.0 (as preparation for release)
Resolved
import libcosimpy.CosimLibraryin__init__.pyon package root level. This to make sure the libcosimc dll gets loaded only once. This resolves a runtime error observed with libcosimpy. (Although the root bug is likely in libcosimpy; should be reviewed by the libcosimpy team).Added
codegen.pyin sub-packageutils, defining a helper functionget_callable_function():get_callable_function()executes compiled code in explicit namespaces, retrieves a named function, validates it is callable, and eventually returns the created function.Assertionin moduleassertion.pyto use the new helper functionget_callable_function(). That way, the code inAssertionno longer relies on mutatinglocals(), which is known to be unreliable and can cause hard-to-track side effects.tests/test_assertion.py.Removed
Changed
--extra testto the workflows running tests, as the test workflows will need these additional dependencies to run the FMUs in /tests/data/..Detailed background and reasoning in this good yet long post by Henry Schreiner:
https://iscinumpy.dev/post/bound-version-constraints/#pinning-the-python-version-is-special
TLDR: Placing an upper Python version constraint on a Python package causes more harm than it provides benefits.
The upper version constraint unnecessarily manifests incompatibility with future Python releases.
Removing the upper version constraint ensures the package remains installable as Python evolves.
In the majority of cases, the newer Python version will anyhow be backward-compatible. And in the rare case where your package would really not work with a newer Python version,
users can at least find a solution manually to resolve the conflict, e.g. by pinning your package to the last version compatible with the environment they install it in.
That way, we ensure it remains possible for users to find a solution, instead of rendering it impossible forever.
Tests
BouncingBall3D.fmuand related tests.MobileCrane.fmuand related tests.HarmonicOscillator.fmutests/data/SimpleTabletotests/data/TimeTableSimpleTable.fmuwithTimeTableFMU.fmu(in foldertests/data/TimeTable)pytestcommand line option--showfrom an input option (requesting the user to pass a literal value, e.g. write--show Trueor--show False) to a command line switch. This eases the usage of this additional command line option. The pytest fixtureshownow gets set toTrueby simply adding the switch--showon the commandline. No need anylonger to amend--showwith an additional string literalTrueorFalse. Passing the switch--showsets fixtureshowtoTrue; omitting it sets fixtureshowtoFalse.Dependencies