melite 0.2.2__tar.gz → 0.2.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- melite-0.2.4/.gitignore +28 -0
- {melite-0.2.2 → melite-0.2.4}/CHANGELOG.md +128 -4
- melite-0.2.4/CITATION.cff +39 -0
- melite-0.2.4/CODE_OF_CONDUCT.md +46 -0
- melite-0.2.4/CONTRIBUTING.md +157 -0
- melite-0.2.4/PKG-INFO +430 -0
- melite-0.2.4/README.md +389 -0
- {melite-0.2.2 → melite-0.2.4}/melite/__init__.py +5 -5
- melite-0.2.4/melite/_example_assets/config.toml +31 -0
- melite-0.2.4/melite/_example_assets/data/sample_tabular.npz +0 -0
- melite-0.2.4/melite/_example_assets/raw/labels.npy +0 -0
- {melite-0.2.2 → melite-0.2.4}/melite/cli.py +69 -10
- {melite-0.2.2 → melite-0.2.4}/melite/config.py +93 -91
- {melite-0.2.2 → melite-0.2.4}/melite/config_default.toml +6 -4
- {melite-0.2.2 → melite-0.2.4}/melite/export_best_model.py +135 -55
- {melite-0.2.2 → melite-0.2.4}/melite/load_dataset.py +98 -39
- melite-0.2.4/melite/main.py +292 -0
- melite-0.2.4/melite/model_training.py +382 -0
- melite-0.2.4/melite/plot_metrics.py +195 -0
- {melite-0.2.2 → melite-0.2.4}/melite/predict.py +28 -31
- melite-0.2.4/melite/result_manager.py +243 -0
- melite-0.2.4/melite/version.py +12 -0
- {melite-0.2.2 → melite-0.2.4}/pyproject.toml +15 -2
- {melite-0.2.2 → melite-0.2.4}/scripts/smoke_install_wheel.py +76 -91
- {melite-0.2.2 → melite-0.2.4}/tests/conftest.py +37 -13
- melite-0.2.4/tests/test_cli.py +247 -0
- melite-0.2.4/tests/test_config.py +345 -0
- {melite-0.2.2 → melite-0.2.4}/tests/test_export.py +171 -76
- {melite-0.2.2 → melite-0.2.4}/tests/test_load_dataset.py +256 -40
- melite-0.2.4/tests/test_main.py +368 -0
- melite-0.2.4/tests/test_model_training.py +478 -0
- melite-0.2.4/tests/test_plot_metrics.py +266 -0
- {melite-0.2.2 → melite-0.2.4}/tests/test_predict.py +59 -5
- {melite-0.2.2 → melite-0.2.4}/tests/test_public_api.py +9 -4
- melite-0.2.4/tests/test_readme.py +122 -0
- melite-0.2.4/tests/test_result_manager.py +359 -0
- melite-0.2.4/tests/test_version.py +13 -0
- melite-0.2.2/.gitignore +0 -21
- melite-0.2.2/CITATION.cff +0 -37
- melite-0.2.2/PKG-INFO +0 -285
- melite-0.2.2/README.md +0 -246
- melite-0.2.2/environment.yml +0 -0
- melite-0.2.2/examples/example_config.toml +0 -33
- melite-0.2.2/examples/generate_sample_data.py +0 -50
- melite-0.2.2/melite/main.py +0 -207
- melite-0.2.2/melite/model_training.py +0 -255
- melite-0.2.2/melite/plot_metrics.py +0 -111
- melite-0.2.2/melite/result_manager.py +0 -127
- melite-0.2.2/melite/version.py +0 -21
- melite-0.2.2/tests/test_cli.py +0 -129
- melite-0.2.2/tests/test_config.py +0 -202
- melite-0.2.2/tests/test_examples.py +0 -93
- melite-0.2.2/tests/test_main.py +0 -187
- melite-0.2.2/tests/test_model_training.py +0 -128
- melite-0.2.2/tests/test_plot_metrics.py +0 -47
- melite-0.2.2/tests/test_result_manager.py +0 -94
- melite-0.2.2/tests/test_version.py +0 -37
- {melite-0.2.2 → melite-0.2.4}/COPYING +0 -0
- {melite-0.2.2 → melite-0.2.4}/COPYING.LESSER +0 -0
- {melite-0.2.2 → melite-0.2.4}/LICENSE +0 -0
- {melite-0.2.2 → melite-0.2.4}/tests/__init__.py +0 -0
melite-0.2.4/.gitignore
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
__pycache__/
|
|
2
|
+
.venv/
|
|
3
|
+
.vscode/
|
|
4
|
+
.tmp_stack_smoke/
|
|
5
|
+
.env
|
|
6
|
+
.pytest_tmp
|
|
7
|
+
site/
|
|
8
|
+
dist/
|
|
9
|
+
output/
|
|
10
|
+
|
|
11
|
+
data/
|
|
12
|
+
!melite/_example_assets/data/
|
|
13
|
+
|
|
14
|
+
raw/
|
|
15
|
+
!melite/_example_assets/raw/
|
|
16
|
+
|
|
17
|
+
*.npz
|
|
18
|
+
!melite/_example_assets/data/sample_tabular.npz
|
|
19
|
+
|
|
20
|
+
*.npy
|
|
21
|
+
!melite/_example_assets/raw/labels.npy
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
*.py[cod]
|
|
25
|
+
*.pkl
|
|
26
|
+
*.joblib
|
|
27
|
+
|
|
28
|
+
tests_output.txt
|
|
@@ -1,13 +1,117 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
-
All notable changes to
|
|
3
|
+
All notable changes to this project will be documented in this file.
|
|
4
4
|
|
|
5
5
|
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/),
|
|
6
6
|
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
7
7
|
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
## [
|
|
10
|
+
## [0.2.4] - 2026-08-25
|
|
11
|
+
|
|
12
|
+
### Added
|
|
13
|
+
- Added the packaged `melite example` Quick Start with deterministic synthetic
|
|
14
|
+
numeric tabular data, available directly from an installed distribution and
|
|
15
|
+
verified through installed-wheel smoke testing.
|
|
16
|
+
- Added Ruff linting and formatting plus Mypy type checking as permanent CI
|
|
17
|
+
quality gates.
|
|
18
|
+
- Added README contract tests covering canonical CLI commands, configuration
|
|
19
|
+
terminology, local links, and version synchronization.
|
|
20
|
+
- Added persistent classifier evaluation evidence through `evaluations.csv`,
|
|
21
|
+
with one aggregate row per dataset and active classifier.
|
|
22
|
+
- Added `evaluation_folds.csv` with one row per dataset, classifier, and
|
|
23
|
+
outer-CV split, preserving the raw evidence used for classifier selection.
|
|
24
|
+
- Added one dataset-level F1-macro evidence figure under `output/figures/`,
|
|
25
|
+
showing the existing outer-CV scores for every evaluated classifier and
|
|
26
|
+
marking the selected classifier without running additional cross-validation.
|
|
27
|
+
|
|
28
|
+
### Changed
|
|
29
|
+
- Stabilized the public Python API around `Config`, `load_datasets`,
|
|
30
|
+
`plot_f1_macro_evidence`, `predict`, and `__version__`; complete evaluation
|
|
31
|
+
remains available through the `melite run` CLI workflow.
|
|
32
|
+
- Consolidated the public Quick Start around the packaged example and removed
|
|
33
|
+
the redundant repository-level `examples/` workflow and `environment.yml`;
|
|
34
|
+
`pyproject.toml` is now the dependency source of truth.
|
|
35
|
+
- Adopted the public product identity
|
|
36
|
+
**MELITE — Multi-Model Classifier Evaluator**.
|
|
37
|
+
- Classifier selection is now based on mean outer-CV F1-macro from the
|
|
38
|
+
evaluation evidence retained for every active classifier.
|
|
39
|
+
- Stacking graduated from experimental status to a stable opt-in classifier;
|
|
40
|
+
it remains disabled by default.
|
|
41
|
+
- Standalone SVC evaluation now avoids probability fitting, while exported SVC
|
|
42
|
+
artifacts and the SVC base estimator inside stacking retain probability
|
|
43
|
+
support where required.
|
|
44
|
+
- Evaluation parallelism now avoids nested estimator parallelism: inner grid
|
|
45
|
+
search or stacking owns parallel execution while contained estimators run
|
|
46
|
+
single-threaded.
|
|
47
|
+
- Evaluation and smoke-mode terminology was aligned throughout the package,
|
|
48
|
+
documentation, CLI, and generated reports.
|
|
49
|
+
- Renamed `[models]` / `ACTIVE_MODELS` to `[classifiers]` /
|
|
50
|
+
`ACTIVE_CLASSIFIERS`; existing configuration users must rename the
|
|
51
|
+
`[models]` section to `[classifiers]`.
|
|
52
|
+
- Renamed the evaluation CSV field `model_name` to `classifier_name` in
|
|
53
|
+
`results.csv`, `evaluations.csv`, and `evaluation_folds.csv`; external CSV
|
|
54
|
+
consumers must update that column name.
|
|
55
|
+
- Narrowed the public `Config` surface: legacy-reduction state, hyperparameter-
|
|
56
|
+
grid internals, redundant accessors, and runtime setup are no longer public
|
|
57
|
+
API. `RANDOM_STATE` is now the single public random-seed value, and
|
|
58
|
+
`CV_CONFIG` contains only `n_splits`, `n_repeats`, and `inner_n_splits`.
|
|
59
|
+
- Explicit `[cv].random_state` and `[cv_smoke].random_state` settings are now
|
|
60
|
+
rejected with a clear configuration error; the canonical location is
|
|
61
|
+
`[benchmark].random_state`.
|
|
62
|
+
- Replaced the former three-metric CV distribution plot API with
|
|
63
|
+
`plot_f1_macro_evidence()`, focused on the outer-CV F1-macro evidence used
|
|
64
|
+
for classifier selection.
|
|
65
|
+
|
|
66
|
+
### Fixed
|
|
67
|
+
- Result and evaluation persistence failures now propagate to callers instead
|
|
68
|
+
of being silently printed and ignored.
|
|
69
|
+
- Corrected tunable-classifier evaluation so hyperparameter search occurs
|
|
70
|
+
inside each outer cross-validation split, separating hyperparameter tuning
|
|
71
|
+
from classifier evaluation.
|
|
72
|
+
- Aligned stacking export reconstruction with the configured internal
|
|
73
|
+
stratified CV strategy used during training.
|
|
74
|
+
- Removed the post-selection cross-validation step from `melite export`.
|
|
75
|
+
Export now reconstructs the selected model, fits it on all available data,
|
|
76
|
+
and saves the final `.pkl` artifact without producing a second evaluation.
|
|
77
|
+
- Preserved the role of `results.csv` as the selected-classifier summary while
|
|
78
|
+
separating full evaluation evidence into dedicated output files.
|
|
79
|
+
|
|
80
|
+
### Notes
|
|
81
|
+
- The legacy `[benchmark]` configuration section remains supported for backward
|
|
82
|
+
compatibility.
|
|
83
|
+
- Stacking remains opt-in; the default active classifiers are SVC, Random Forest,
|
|
84
|
+
and XGBoost.
|
|
85
|
+
- Optuna and MLflow remain outside the scope of v0.2.4.
|
|
86
|
+
|
|
87
|
+
---
|
|
88
|
+
|
|
89
|
+
## [0.2.3] - 2026-06-01
|
|
90
|
+
|
|
91
|
+
### Added
|
|
92
|
+
- Added opt-in experimental stacking via the `stack` model key in
|
|
93
|
+
`[models].active`.
|
|
94
|
+
- Added sklearn `StackingClassifier` support using `stack_method="predict_proba"`,
|
|
95
|
+
`passthrough=False`, and `LogisticRegression` as the final estimator.
|
|
96
|
+
- Added export and prediction coverage for saved stacking `.pkl` artifacts.
|
|
97
|
+
|
|
98
|
+
### Changed
|
|
99
|
+
- Standalone SVC remains a `StandardScaler` -> `SVC` pipeline.
|
|
100
|
+
- The SVC base estimator inside stacking is also scaled and uses
|
|
101
|
+
`SVC(probability=True)` so stacking combines probability outputs.
|
|
102
|
+
- Random Forest and XGBoost remain unscaled direct estimators because they are
|
|
103
|
+
tree-based models and do not require feature scaling by default.
|
|
104
|
+
- Stacking-internal CV uses the configured split count and random state with
|
|
105
|
+
one repeat to satisfy sklearn's out-of-fold prediction requirements.
|
|
106
|
+
|
|
107
|
+
### Notes
|
|
108
|
+
- Stacking is experimental and disabled by default.
|
|
109
|
+
- Export remains `.pkl` via `joblib`.
|
|
110
|
+
- Optuna and MLflow are intentionally out of scope for v0.2.3.
|
|
111
|
+
|
|
112
|
+
---
|
|
113
|
+
|
|
114
|
+
## [0.2.2] - 2026-05-28
|
|
11
115
|
|
|
12
116
|
### Changed
|
|
13
117
|
- SVC is now trained as a `StandardScaler` -> `SVC` sklearn `Pipeline`.
|
|
@@ -25,7 +129,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
25
129
|
|
|
26
130
|
---
|
|
27
131
|
|
|
28
|
-
## [
|
|
132
|
+
## [0.2.1] - 2026-05-27
|
|
29
133
|
|
|
30
134
|
### Changed
|
|
31
135
|
- `[models].active` / `ACTIVE_MODELS` now controls which model families are
|
|
@@ -45,7 +149,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
45
149
|
|
|
46
150
|
---
|
|
47
151
|
|
|
48
|
-
## [
|
|
152
|
+
## [0.2.0] - 2026-05-26
|
|
49
153
|
|
|
50
154
|
### Added
|
|
51
155
|
- Added canonical `[datasets.<dataset_id>]` TOML registry entries for
|
|
@@ -404,3 +508,23 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|
|
404
508
|
- TXT/CSV result export.
|
|
405
509
|
- Final model export as `.pkl`.
|
|
406
510
|
- Three-panel metric plotting for F1, Accuracy and AUC-ROC.
|
|
511
|
+
|
|
512
|
+
---
|
|
513
|
+
|
|
514
|
+
[0.2.4]: https://github.com/NanoBiostructuresRG/melite/compare/v0.2.3...v0.2.4
|
|
515
|
+
[0.2.3]: https://github.com/NanoBiostructuresRG/melite/compare/v0.2.2...v0.2.3
|
|
516
|
+
[0.2.2]: https://github.com/NanoBiostructuresRG/melite/compare/v0.2.1...v0.2.2
|
|
517
|
+
[0.2.1]: https://github.com/NanoBiostructuresRG/melite/compare/v0.2.0...v0.2.1
|
|
518
|
+
[0.2.0]: https://github.com/NanoBiostructuresRG/melite/compare/v0.1.11...v0.2.0
|
|
519
|
+
[0.1.11]: https://github.com/NanoBiostructuresRG/melite/compare/v0.1.10...v0.1.11
|
|
520
|
+
[0.1.10]: https://github.com/NanoBiostructuresRG/melite/compare/v0.1.9...v0.1.10
|
|
521
|
+
[0.1.9]: https://github.com/NanoBiostructuresRG/melite/compare/v0.1.8...v0.1.9
|
|
522
|
+
[0.1.8]: https://github.com/NanoBiostructuresRG/melite/compare/v0.1.7...v0.1.8
|
|
523
|
+
[0.1.7]: https://github.com/NanoBiostructuresRG/melite/compare/v0.1.6...v0.1.7
|
|
524
|
+
[0.1.6]: https://github.com/NanoBiostructuresRG/melite/compare/v0.1.5...v0.1.6
|
|
525
|
+
[0.1.5]: https://github.com/NanoBiostructuresRG/melite/compare/v0.1.4...v0.1.5
|
|
526
|
+
[0.1.4]: https://github.com/NanoBiostructuresRG/melite/compare/v0.1.3...v0.1.4
|
|
527
|
+
[0.1.3]: https://github.com/NanoBiostructuresRG/melite/compare/v0.1.2...v0.1.3
|
|
528
|
+
[0.1.2]: https://github.com/NanoBiostructuresRG/melite/compare/v0.1.1...v0.1.2
|
|
529
|
+
[0.1.1]: https://github.com/NanoBiostructuresRG/melite/releases/tag/v0.1.1
|
|
530
|
+
[0.1.0]: https://github.com/NanoBiostructuresRG/melite/releases/tag/v0.1.0
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
cff-version: 1.2.0
|
|
2
|
+
message: "If you use this software, please cite it as below."
|
|
3
|
+
type: software
|
|
4
|
+
title: "MELITE — Multi-Model Classifier Evaluator"
|
|
5
|
+
version: "0.2.4"
|
|
6
|
+
date-released: "2026-08-25"
|
|
7
|
+
authors:
|
|
8
|
+
- family-names: "Contreras-Torres"
|
|
9
|
+
given-names: "Flavio F."
|
|
10
|
+
orcid: "https://orcid.org/0000-0003-2375-131X"
|
|
11
|
+
affiliation: "Tecnologico de Monterrey"
|
|
12
|
+
- family-names: "Murrieta"
|
|
13
|
+
given-names: "Ana C."
|
|
14
|
+
orcid: "https://orcid.org/0000-0002-7619-8880"
|
|
15
|
+
affiliation: "Tecnologico de Monterrey"
|
|
16
|
+
repository-code: "https://github.com/NanoBiostructuresRG/melite"
|
|
17
|
+
license: "LGPL-3.0-or-later"
|
|
18
|
+
abstract: >-
|
|
19
|
+
MELITE is a pre-stable multi-model classifier evaluator for tabular
|
|
20
|
+
classification, classifier selection with nested cross-validation, final model
|
|
21
|
+
export, and artifact-based inference.
|
|
22
|
+
|
|
23
|
+
It operates at the tabular modeling level by consuming numeric feature
|
|
24
|
+
matrices and labels. MELITE evaluates SVC, Random Forest, XGBoost, and
|
|
25
|
+
opt-in Stacking classifiers under an outer repeated-stratified
|
|
26
|
+
cross-validation framework, with inner hyperparameter search for tunable
|
|
27
|
+
classifiers. It selects the best active classifier by mean outer-CV F1-macro,
|
|
28
|
+
persists aggregate and per-fold evaluation evidence, and supports final
|
|
29
|
+
model retraining, export, and artifact-based inference.
|
|
30
|
+
keywords:
|
|
31
|
+
- machine learning
|
|
32
|
+
- tabular classification
|
|
33
|
+
- classifier evaluation
|
|
34
|
+
- classifier selection
|
|
35
|
+
- nested cross-validation
|
|
36
|
+
- SVC
|
|
37
|
+
- random forest
|
|
38
|
+
- XGBoost
|
|
39
|
+
- stacking
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
We as contributors and maintainers pledge to make participation in MELITE
|
|
6
|
+
and our community a harassment-free experience for everyone, regardless of age,
|
|
7
|
+
body size, disability, ethnicity, gender identity and expression, level of experience,
|
|
8
|
+
nationality, personal appearance, race, religion, or sexual identity and orientation.
|
|
9
|
+
|
|
10
|
+
## Our Standards
|
|
11
|
+
|
|
12
|
+
Examples of behavior that contributes to a positive environment:
|
|
13
|
+
|
|
14
|
+
- Using welcoming and inclusive language
|
|
15
|
+
- Being respectful of differing viewpoints and experiences
|
|
16
|
+
- Gracefully accepting constructive criticism
|
|
17
|
+
- Focusing on what is best for the community
|
|
18
|
+
- Showing empathy towards other community members
|
|
19
|
+
|
|
20
|
+
Examples of unacceptable behavior:
|
|
21
|
+
|
|
22
|
+
- The use of sexualized language or imagery
|
|
23
|
+
- Trolling, insulting or derogatory comments, and personal or political attacks
|
|
24
|
+
- Public or private harassment
|
|
25
|
+
- Publishing others' private information without explicit permission
|
|
26
|
+
- Other conduct which could reasonably be considered inappropriate in a professional setting
|
|
27
|
+
|
|
28
|
+
## Our Responsibilities
|
|
29
|
+
|
|
30
|
+
Project maintainers are responsible for clarifying the standards of acceptable
|
|
31
|
+
behavior and are expected to take appropriate and fair corrective action in
|
|
32
|
+
response to any instances of unacceptable behavior.
|
|
33
|
+
|
|
34
|
+
## Enforcement
|
|
35
|
+
|
|
36
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
37
|
+
reported privately by email to Flavio F. Contreras-Torres, the project
|
|
38
|
+
maintainer, at <contreras.flavio@tec.mx>. Please do not use public GitHub
|
|
39
|
+
issues for sensitive conduct reports.
|
|
40
|
+
|
|
41
|
+
Conduct reports are received by the project maintainer and will be reviewed and
|
|
42
|
+
investigated promptly, fairly, and with appropriate confidentiality.
|
|
43
|
+
|
|
44
|
+
## Attribution
|
|
45
|
+
|
|
46
|
+
This Code of Conduct is adapted from the [Contributor Covenant](https://www.contributor-covenant.org), version 2.1. For the full text, see [https://www.contributor-covenant.org/version/2/1/code_of_conduct.html](https://www.contributor-covenant.org/version/2/1/code_of_conduct.html).
|
|
@@ -0,0 +1,157 @@
|
|
|
1
|
+
# Contributing to MELITE
|
|
2
|
+
|
|
3
|
+
Thank you for your interest in contributing to MELITE.
|
|
4
|
+
|
|
5
|
+
MELITE is maintained by the
|
|
6
|
+
[NanoBiostructures Research Group](https://nanobiostructuresrg.github.io)
|
|
7
|
+
at Tecnológico de Monterrey. Contributions that improve correctness,
|
|
8
|
+
reproducibility, usability, documentation, testing, or supported workflows are
|
|
9
|
+
welcome.
|
|
10
|
+
|
|
11
|
+
## How to Contribute
|
|
12
|
+
|
|
13
|
+
### Reporting Bugs
|
|
14
|
+
|
|
15
|
+
Open an issue on
|
|
16
|
+
[GitHub Issues](https://github.com/NanoBiostructuresRG/melite/issues)
|
|
17
|
+
and include, when relevant:
|
|
18
|
+
|
|
19
|
+
- a clear description of the problem;
|
|
20
|
+
- the expected and observed behavior;
|
|
21
|
+
- a minimal reproducible example;
|
|
22
|
+
- the MELITE and Python versions;
|
|
23
|
+
- the operating system and installation method;
|
|
24
|
+
- the command, API call, or configuration involved;
|
|
25
|
+
- the relevant traceback or error output.
|
|
26
|
+
|
|
27
|
+
Do not include confidential, proprietary, or sensitive datasets in public
|
|
28
|
+
issues.
|
|
29
|
+
|
|
30
|
+
### Suggesting Features
|
|
31
|
+
|
|
32
|
+
Open an issue describing:
|
|
33
|
+
|
|
34
|
+
- the problem or use case;
|
|
35
|
+
- the proposed behavior;
|
|
36
|
+
- why it would be useful beyond a single workflow;
|
|
37
|
+
- any expected effect on the public API, CLI, configuration, outputs, or
|
|
38
|
+
evaluation contract.
|
|
39
|
+
|
|
40
|
+
### Submitting a Pull Request
|
|
41
|
+
|
|
42
|
+
1. Fork the repository.
|
|
43
|
+
2. Create a descriptive branch from `main`.
|
|
44
|
+
3. Make a focused set of changes.
|
|
45
|
+
4. Add or update tests when behavior changes.
|
|
46
|
+
5. Run the relevant validation locally.
|
|
47
|
+
6. Push your branch and open a pull request against `main`.
|
|
48
|
+
|
|
49
|
+
Pull requests should pass CI before merge. User-facing changes should include
|
|
50
|
+
appropriate documentation and changelog updates.
|
|
51
|
+
|
|
52
|
+
## Development Setup
|
|
53
|
+
|
|
54
|
+
Create an environment with a supported Python version using the environment
|
|
55
|
+
manager you prefer, then install MELITE in editable mode with its development
|
|
56
|
+
dependencies:
|
|
57
|
+
|
|
58
|
+
```bash
|
|
59
|
+
git clone https://github.com/NanoBiostructuresRG/melite.git
|
|
60
|
+
cd melite
|
|
61
|
+
python -m pip install -e ".[dev]"
|
|
62
|
+
```
|
|
63
|
+
|
|
64
|
+
To work on the documentation:
|
|
65
|
+
|
|
66
|
+
```bash
|
|
67
|
+
python -m pip install -e ".[dev,docs]"
|
|
68
|
+
mkdocs serve
|
|
69
|
+
```
|
|
70
|
+
|
|
71
|
+
## Testing
|
|
72
|
+
|
|
73
|
+
Run the complete test suite before opening a pull request:
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
python -m pytest tests -q
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Changes should include tests when they modify behavior, fix a bug, add or
|
|
80
|
+
modify a classifier, change configuration handling, alter generated outputs,
|
|
81
|
+
or affect a public interface.
|
|
82
|
+
|
|
83
|
+
For documentation changes, also run:
|
|
84
|
+
|
|
85
|
+
```bash
|
|
86
|
+
mkdocs build --strict
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Code Style
|
|
90
|
+
|
|
91
|
+
Keep changes focused and consistent with the existing codebase. Use clear
|
|
92
|
+
names, type hints where appropriate, and NumPy-style docstrings consistent with
|
|
93
|
+
the surrounding modules.
|
|
94
|
+
|
|
95
|
+
Avoid unrelated refactoring or formatting changes in the same pull request.
|
|
96
|
+
|
|
97
|
+
## Scientific and Evaluation Changes
|
|
98
|
+
|
|
99
|
+
Changes that affect classifier tuning, cross-validation, scoring, classifier
|
|
100
|
+
construction, classifier selection, evaluation evidence, or final model fitting
|
|
101
|
+
require particular care.
|
|
102
|
+
|
|
103
|
+
Such contributions should:
|
|
104
|
+
|
|
105
|
+
- explain the scientific or methodological rationale;
|
|
106
|
+
- preserve the separation between hyperparameter tuning and outer evaluation;
|
|
107
|
+
- avoid information leakage between tuning and evaluation;
|
|
108
|
+
- identify any change to the classifier-selection criterion or evaluation contract;
|
|
109
|
+
- add or update tests that exercise the changed behavior;
|
|
110
|
+
- preserve reproducibility through explicit configuration and random-state
|
|
111
|
+
handling where applicable;
|
|
112
|
+
- update documentation and the changelog when user-visible behavior changes.
|
|
113
|
+
|
|
114
|
+
## Documentation and Changelog
|
|
115
|
+
|
|
116
|
+
Update the relevant documentation when a change affects:
|
|
117
|
+
|
|
118
|
+
- public behavior;
|
|
119
|
+
- the CLI or Python API;
|
|
120
|
+
- configuration;
|
|
121
|
+
- supported classifiers;
|
|
122
|
+
- input requirements;
|
|
123
|
+
- generated outputs;
|
|
124
|
+
- examples or documented workflows.
|
|
125
|
+
|
|
126
|
+
Add an entry to `CHANGELOG.md` for user-visible changes. Purely internal
|
|
127
|
+
refactoring normally does not require a changelog entry unless it changes
|
|
128
|
+
observable behavior.
|
|
129
|
+
|
|
130
|
+
## Compatibility
|
|
131
|
+
|
|
132
|
+
MELITE is pre-stable, so public interfaces may evolve before version 1.0.
|
|
133
|
+
Compatibility changes should nevertheless be intentional, documented, tested,
|
|
134
|
+
and explained in the pull request.
|
|
135
|
+
|
|
136
|
+
Avoid changing public API symbols, CLI behavior, configuration keys, output
|
|
137
|
+
schemas, or serialized-artifact behavior without explicit justification.
|
|
138
|
+
|
|
139
|
+
## Pull Request Scope
|
|
140
|
+
|
|
141
|
+
Keep pull requests focused on one coherent change. Avoid combining feature
|
|
142
|
+
work, broad refactoring, formatting changes, and unrelated cleanup in the same
|
|
143
|
+
pull request.
|
|
144
|
+
|
|
145
|
+
Small, reviewable changes are easier to validate scientifically and
|
|
146
|
+
technically.
|
|
147
|
+
|
|
148
|
+
## Code of Conduct
|
|
149
|
+
|
|
150
|
+
Participation in MELITE is governed by the
|
|
151
|
+
[Code of Conduct](CODE_OF_CONDUCT.md).
|
|
152
|
+
|
|
153
|
+
## Questions
|
|
154
|
+
|
|
155
|
+
For questions about contributing, open a GitHub issue. Sensitive
|
|
156
|
+
conduct-related matters should follow the private reporting process described
|
|
157
|
+
in the [Code of Conduct](CODE_OF_CONDUCT.md).
|