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.
Files changed (61) hide show
  1. melite-0.2.4/.gitignore +28 -0
  2. {melite-0.2.2 → melite-0.2.4}/CHANGELOG.md +128 -4
  3. melite-0.2.4/CITATION.cff +39 -0
  4. melite-0.2.4/CODE_OF_CONDUCT.md +46 -0
  5. melite-0.2.4/CONTRIBUTING.md +157 -0
  6. melite-0.2.4/PKG-INFO +430 -0
  7. melite-0.2.4/README.md +389 -0
  8. {melite-0.2.2 → melite-0.2.4}/melite/__init__.py +5 -5
  9. melite-0.2.4/melite/_example_assets/config.toml +31 -0
  10. melite-0.2.4/melite/_example_assets/data/sample_tabular.npz +0 -0
  11. melite-0.2.4/melite/_example_assets/raw/labels.npy +0 -0
  12. {melite-0.2.2 → melite-0.2.4}/melite/cli.py +69 -10
  13. {melite-0.2.2 → melite-0.2.4}/melite/config.py +93 -91
  14. {melite-0.2.2 → melite-0.2.4}/melite/config_default.toml +6 -4
  15. {melite-0.2.2 → melite-0.2.4}/melite/export_best_model.py +135 -55
  16. {melite-0.2.2 → melite-0.2.4}/melite/load_dataset.py +98 -39
  17. melite-0.2.4/melite/main.py +292 -0
  18. melite-0.2.4/melite/model_training.py +382 -0
  19. melite-0.2.4/melite/plot_metrics.py +195 -0
  20. {melite-0.2.2 → melite-0.2.4}/melite/predict.py +28 -31
  21. melite-0.2.4/melite/result_manager.py +243 -0
  22. melite-0.2.4/melite/version.py +12 -0
  23. {melite-0.2.2 → melite-0.2.4}/pyproject.toml +15 -2
  24. {melite-0.2.2 → melite-0.2.4}/scripts/smoke_install_wheel.py +76 -91
  25. {melite-0.2.2 → melite-0.2.4}/tests/conftest.py +37 -13
  26. melite-0.2.4/tests/test_cli.py +247 -0
  27. melite-0.2.4/tests/test_config.py +345 -0
  28. {melite-0.2.2 → melite-0.2.4}/tests/test_export.py +171 -76
  29. {melite-0.2.2 → melite-0.2.4}/tests/test_load_dataset.py +256 -40
  30. melite-0.2.4/tests/test_main.py +368 -0
  31. melite-0.2.4/tests/test_model_training.py +478 -0
  32. melite-0.2.4/tests/test_plot_metrics.py +266 -0
  33. {melite-0.2.2 → melite-0.2.4}/tests/test_predict.py +59 -5
  34. {melite-0.2.2 → melite-0.2.4}/tests/test_public_api.py +9 -4
  35. melite-0.2.4/tests/test_readme.py +122 -0
  36. melite-0.2.4/tests/test_result_manager.py +359 -0
  37. melite-0.2.4/tests/test_version.py +13 -0
  38. melite-0.2.2/.gitignore +0 -21
  39. melite-0.2.2/CITATION.cff +0 -37
  40. melite-0.2.2/PKG-INFO +0 -285
  41. melite-0.2.2/README.md +0 -246
  42. melite-0.2.2/environment.yml +0 -0
  43. melite-0.2.2/examples/example_config.toml +0 -33
  44. melite-0.2.2/examples/generate_sample_data.py +0 -50
  45. melite-0.2.2/melite/main.py +0 -207
  46. melite-0.2.2/melite/model_training.py +0 -255
  47. melite-0.2.2/melite/plot_metrics.py +0 -111
  48. melite-0.2.2/melite/result_manager.py +0 -127
  49. melite-0.2.2/melite/version.py +0 -21
  50. melite-0.2.2/tests/test_cli.py +0 -129
  51. melite-0.2.2/tests/test_config.py +0 -202
  52. melite-0.2.2/tests/test_examples.py +0 -93
  53. melite-0.2.2/tests/test_main.py +0 -187
  54. melite-0.2.2/tests/test_model_training.py +0 -128
  55. melite-0.2.2/tests/test_plot_metrics.py +0 -47
  56. melite-0.2.2/tests/test_result_manager.py +0 -94
  57. melite-0.2.2/tests/test_version.py +0 -37
  58. {melite-0.2.2 → melite-0.2.4}/COPYING +0 -0
  59. {melite-0.2.2 → melite-0.2.4}/COPYING.LESSER +0 -0
  60. {melite-0.2.2 → melite-0.2.4}/LICENSE +0 -0
  61. {melite-0.2.2 → melite-0.2.4}/tests/__init__.py +0 -0
@@ -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 MELITE will be documented in this file.
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
- ## [v0.2.2] - 2026-05-28
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
- ## [v0.2.1] - 2026-05-27
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
- ## [v0.2.0] - 2026-05-26
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).