feat: solve bug reported in the alpha feedback and added some features like the cumulative arg. #10
feat: solve bug reported in the alpha feedback and added some features like the cumulative arg. #10ElouenGinat merged 10 commits intomainfrom
Conversation
ElouenGinat
commented
Apr 9, 2026
- Implemented functions to generate Gaussian and Pareto distributed data.
- Created visualizations for both distributions using adaptive histograms.
- Saved generated figures to the 'docs/images' directory.
- Included sample statistics in the console output for verification.
…n examples - Implemented functions to generate Gaussian and Pareto distributed data. - Created visualizations for both distributions using adaptive histograms. - Saved generated figures to the 'docs/images' directory. - Included sample statistics in the console output for verification.
There was a problem hiding this comment.
Pull request overview
This PR expands Khisto’s histogram APIs and documentation, adding a cumulative histogram API (cumfreq) plus Matplotlib cumulative support, alongside improved CLI error reporting and updated example assets for the README/docs.
Changes:
- Added
khisto.cumfreq(array-level cumulative histogram) and exposed it via package exports. - Added
cumulativesupport (incl. reverse cumulative) tokhisto.matplotlib.hist, plus new tests. - Improved CLI adapter behavior: richer error messages on CLI failures and better “best histogram” selection logic.
Reviewed changes
Copilot reviewed 13 out of 16 changed files in this pull request and generated 6 comments.
Show a summary per file
| File | Description |
|---|---|
| tests/plot/test_matplotlib_histogram.py | Updates default density expectations; adds cumulative + sequence-input tests for Matplotlib wrapper. |
| tests/core/test_cli_adapter.py | Adds tests for CLI failure reporting and best-histogram file authority. |
| tests/array/test_histogram.py | Adds cumfreq tests; strengthens density vs count assertion. |
| src/khisto/matplotlib/hist.py | Adds cumulative parameter, unsupported-kwargs checks, and cumulative application logic. |
| src/khisto/core/cli_adapter.py | Improves CSV parsing types, best-histogram selection, and wraps subprocess failures as RuntimeError. |
| src/khisto/array/histogram/api.py | Adds _apply_cumulative, changes density default, and introduces cumfreq. |
| src/khisto/array/histogram/init.py | Re-exports cumfreq. |
| src/khisto/array/init.py | Re-exports cumfreq. |
| src/khisto/init.py | Exposes cumfreq at top-level. |
| scripts/generate_distribution_examples.py | New script to generate Gaussian/Pareto examples and save plots to docs. |
| README.md | Adds example images and updates quick start / cumulative docs and dev commands. |
| docs/images/pareto-quick-start.png | Adds generated Pareto example image for README. |
| docs/images/gaussian-quick-start.png | Adds generated Gaussian example image for README. |
| docs/API.md | Documents cumfreq, cumulative plotting changes, and “How it works” section. |
| docs/API_COMPARISON.md | Adds SciPy cumfreq comparison; updates Matplotlib comparison to include cumulative + sequence concatenation. |
💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.
remove the dimension check on array for histogram api Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
marcboulle
left a comment
There was a problem hiding this comment.
Quelques petits détails ou réponse à tes questions dans les notes de review de copilot.
Sinon, j'ai vérifié un à un les points de l'issue: l'essentiel me semble OK.
Cumulative
Pour la cumulative, je pense que c'est très bien de prendre en compte cette option de matplotlib.hist, pur être le plus possible compatible avec cette méthode.
Par contre, je pense qu'il ne faut pas ajouter la nouvelle méthode cumfreq:
- cela augmente de 50% le nombre des méthode de l'API ;)
- autant améliorer à peu de frais la compatibilité avec
matplotlib.histest pertinent, autant cette nouvelle méthode est de faible intérêt, puisque l'on peut exploiter les résultats d'un appel àkhisto.histogramen une ligne de code pour avoir l'équivalent - cela pose de nouveau problème de compatibilité avec
scipy.stats. cumfreq, qui a des paramètre spécifique commedefaultreallimitsouweights
Bugs
Je n'ai testé si les bugs sont corrigés: as-tu pu reproduire ces bugs et les corriger?
Format binaire
Enfin, je pense que c'est le moment de prendre en compte le format binaire, maintenant géré par khisto dans khiops (disponible dans la release https://github.com/KhiopsML/khiops/releases/tag/11.0.1-a.3).
Cf nouvelle version du readme, avec la nouvelle option -b
Usage: `khisto [OPTIONS] INPUT_FILE HISTOGRAM`
The output HISTOGRAM contains bin details: lower bound, upper bound, bin width, frequency, probability, and density.
Options:
- -b: Read input as binary (8-byte doubles) instead of text
- -e: Generate a series of histograms with increasing accuracy for exploratory analysis
- -j: Save all outputs in a single JSON file
- -h: Display help message and exit
- -v: Show version information and exit
Pour cela, la méthode tofilede numpy devrait faire l'affaire:
data = np.random.normal(0, 1, size)
data.tofile(f"Gaussian{size}.bin")
Test finaux
Dès que tout cela sera prêt, je retesterais le tout en mode béta.
Co-authored-by: Copilot <175728472+Copilot@users.noreply.github.com>
…ogram CLI input to binary
…ython into alpha-feedback
marcboulle
left a comment
There was a problem hiding this comment.
Il reste des référence à cumfreq.
Sinon, pourrais-tu répondre aux remarques de review que tu as prises en compte (par exemple, par "Done"): cela me permettrait de les mettre en "Resolved" après vérification.
Tu n'as pas non plus répondu à ma question sur les bugs (reproduction et résolution).
|
Bonjour, Je n’ai pas réussi à reproduire les deux bugs que tu as décrits. On peut en discuter ensemble si tu veux. J’ai supprimé cumfreq. J’ai également implémenté le format binaire et mis à jour la version de khisto. |
marcboulle
left a comment
There was a problem hiding this comment.
LGTM
Pour les bugs, je verrai cela lors du béta-test.