This release includes mainly fixes to the scikit-learn interface interface and some additional CI and packaging fixes.
Wheels available on PyPI.
Changelog
Scikit-learn interface
- Refactored
SymbolicRegressorto follow scikit-learn conventions:Nonedefaults for mutable parameters, single-underscore private methods for proper subclassing - Replaced
__check_parameters()(which mutatedself) with_resolve_params()that returns a resolved dict without side effects - Added
_validate_params()for comprehensive parameter validation fit()now setsn_features_in_andfeature_names_in_attributes- Fixed
MinimumDescriptionLengthEvaluatorcall to pass the required likelihood argument - Expanded docstrings with type hints and corrected example import paths
C++ bindings
- Fixed dead code in
UserDefinedEvaluator.__call__wheregil_scoped_acquirewas placed after a return statement (source/evaluator.cpp) - Removed duplicate read-only property for
PrimitiveSetthat was shadowing the read-write version (source/problem.cpp) - Fixed typo in dataset error message and removed redundant type cast attempts (
source/dataset.cpp) - Removed unused
InitAutodiffdeclaration from the header (include/pyoperon/pyoperon.hpp)
CI / Build
- Split
build-wheels.ymlinto separatebuild-linux.yml,build-macos.yml, and a sharedtest.yml(reusable workflow) for independent status badges - Added a test gate: wheel builds only proceed after
pytestpasses - Linux wheels now use a matrix strategy (parallel builds per Python version) instead of a sequential loop
- Removed generator from CMake presets — resolves ninja/make conflicts on macOS when scikit-build-core auto-detects the build tool
- Fixed
pip wheelto useSKBUILD_CMAKE_ARGSenvironment variable for passing CMake presets (replaces non-portable-Cflag) - Added
--no-depstopip wheelto prevent building dependency wheels intodist/ - Deleted legacy
setup.py,ci.yml, andbuild-nix.ymlworkflows
Packaging
- Consolidated packaging on
pyproject.tomlwithscikit-build-core - Updated
requires-pythonto>=3.10 - Added
[project.optional-dependencies] test = ["pytest>=7.0"] - Updated
environment.yml:scikit-buildreplaced withscikit-build-core
Tests
- Added
tests/test_sklearn.pywith unit tests (parameter resolution, validation, no mutation), sklearn interface tests (clone, get/set params, repr), and integration tests (fit/predict, cross-validation, multi-objective, warm start, etc.)
Docs
- Updated README build instructions to reflect current Nix and Conda workflows
- Fixed README badges to link to the correct workflows