Thanks for your interest. Here's how to contribute effectively.
git clone https://github.com/pro-grammer-SD/sciwizard.git
cd sciwizard
python -m venv .venv && source .venv/bin/activate
pip install -e ".[dev]"- Python 3.10+, type hints on every function signature
- Google-style docstrings on all public methods and classes
- Line length β€ 100 characters (
ruffenforces this) - No global mutable state
- All heavy work runs in a
Worker/LongWorkerβ never block the Qt event loop - Log with
logging.getLogger(__name__), notprint()
Run linting before committing:
ruff check sciwizard/| Layer | Allowed dependencies |
|---|---|
core/ |
stdlib, numpy, pandas, sklearn, joblib |
ui/ |
core/, PySide6, matplotlib |
tests/ |
core/, pytest |
core/ must never import from ui/. Keep business logic and presentation fully separated.
- Create
sciwizard/ui/panels/my_panel.pysubclassingQWidget - Add it to
MainWindow._build_ui()and the_NAV_ITEMSlist - Connect cross-panel signals via
MainWindow._connect_signals()
Add it to CLASSIFICATION_MODELS or REGRESSION_MODELS in core/model_trainer.py.
Alternatively, use the plugin system for external contributions.
- Fork and create a feature branch:
git checkout -b feat/my-feature - Write or update tests for your change
- Run
pytestβ all tests must pass - Open a PR against
mainusing the PR template - At least one approval is required to merge
Follow Conventional Commits:
feat: add k-fold stratified split option
fix: handle empty dataframe in profiler
docs: update plugin guide
refactor: extract metric rendering into MetricCard widget