diff --git a/.github/workflows/checks.yaml b/.github/workflows/checks.yaml
index 6d4971e..a1d2302 100644
--- a/.github/workflows/checks.yaml
+++ b/.github/workflows/checks.yaml
@@ -15,7 +15,7 @@ jobs:
- uses: actions/checkout@v4
- name: Install uv
uses: astral-sh/setup-uv@v6
- - name: Setup Just
- uses: extractions/setup-just@v3
+ with:
+ enable-cache: true
- name: Run pre-commit
- run: just pre-commit
+ run: uvx pre-commit run --all-files --verbose
diff --git a/.github/workflows/docs.yaml b/.github/workflows/docs.yaml
index 1988923..53a4da8 100644
--- a/.github/workflows/docs.yaml
+++ b/.github/workflows/docs.yaml
@@ -20,17 +20,16 @@ jobs:
- uses: actions/checkout@v4
- name: Setup uv
uses: astral-sh/setup-uv@v6
- - name: Setup Python
- run: uv python install
+ with:
+ python-version: '3.14'
+ enable-cache: true
- name: Setup just
uses: extractions/setup-just@v3
- name: Setup Khiops
run: |
sudo apt-get update -y && sudo apt-get install wget lsb-release -y
- CODENAME=$(lsb_release -cs)
- TEMP_DEB="$(mktemp)"
- wget -O "$TEMP_DEB" "https://github.com/KhiopsML/khiops/releases/download/11.0.0-b.0/khiops-core-openmpi_11.0.0-b.0-1-${CODENAME}.amd64.deb"
- sudo dpkg -i "$TEMP_DEB" || sudo apt-get -f -y install
+ wget -O "./khiops.deb" "https://github.com/KhiopsML/khiops/releases/download/11.0.0/khiops-core-openmpi_11.0.0-1-$(lsb_release -cs).amd64.deb"
+ sudo dpkg -i "./khiops.deb" || sudo apt-get -f -y install
- name: Build docs
run: |
mkdir docs/_static
diff --git a/.github/workflows/package.yaml b/.github/workflows/package.yaml
new file mode 100644
index 0000000..f1ceb1d
--- /dev/null
+++ b/.github/workflows/package.yaml
@@ -0,0 +1,71 @@
+name: Package
+on:
+ workflow_dispatch:
+ inputs:
+ pypi-target:
+ type: choice
+ default: no-op
+ options: [no-op, testpypi, pypi]
+ description: PyPI Target
+ pull_request:
+
+# Cancel any ongoing run of this workflow on the same PR or ref
+concurrency:
+ group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
+ cancel-in-progress: true
+
+jobs:
+ build:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout sources
+ uses: actions/checkout@v4
+ - name: Setup uv
+ uses: astral-sh/setup-uv@v6
+ with:
+ python-version: '3.14'
+ enable-cache: true
+ - name: Build Package
+ run: |
+ uv build --sdist
+ - name: Upload package artifact
+ uses: actions/upload-artifact@v6
+ with:
+ name: pip-package
+ path: dist/
+ publish-pypi:
+ if: inputs.pypi-target == 'pypi' && github.ref_type == 'tag' && github.repository_owner == 'KhiopsLab'
+ needs: [build]
+ runs-on: ubuntu-latest
+ environment:
+ name: pypi
+ url: https://pypi.org/p/khalib
+ permissions:
+ id-token: write
+ steps:
+ - name: Download package artifact
+ uses: actions/download-artifact@v6
+ with:
+ name: pip-package
+ path: dist/
+ - name: Publish to PyPI
+ uses: pypa/gh-action-pypi-publish@release/v1
+ publish-testpypi:
+ if: inputs.pypi-target == 'testpypi' && github.ref_type == 'tag' && github.repository_owner == 'KhiopsLab'
+ needs: [build]
+ runs-on: ubuntu-latest
+ environment:
+ name: testpypi
+ url: https://test.pypi.org/p/khalib
+ permissions:
+ id-token: write
+ steps:
+ - name: Download package artifact
+ uses: actions/download-artifact@v6
+ with:
+ name: pip-package
+ path: dist/
+ - name: Publish to TestPyPI
+ uses: pypa/gh-action-pypi-publish@release/v1
+ with:
+ repository-url: https://test.pypi.org/legacy/
diff --git a/.github/workflows/tests.yaml b/.github/workflows/tests.yaml
index 8b0767d..eae7f76 100644
--- a/.github/workflows/tests.yaml
+++ b/.github/workflows/tests.yaml
@@ -4,6 +4,7 @@ on:
pull_request:
paths:
- 'src/**'
+ - .github/workflows/tests.yaml
# Cancel any ongoing run of this workflow on the same PR or ref
concurrency:
@@ -24,15 +25,17 @@ jobs:
uses: astral-sh/setup-uv@v6
with:
python-version: ${{ matrix.python-version }}
- - name: Set up Python
- run: uv python install
+ enable-cache: true
+ - name: Setup just
+ uses: extractions/setup-just@v3
- name: Install Miniforge
uses: conda-incubator/setup-miniconda@v3
with:
auto-update-conda: true
miniforge-version: latest
conda-remove-defaults: true
- - name: Install khiops
- run: conda install --quiet --yes --name test khiops-core=11.0.0b.0
+ - name: Install Khiops
+ run: conda install --quiet --yes --name test khiops-core>=11.0.0
- name: Run tests
- run: conda run --name test uv run pytest src/tests
+ # We run with `conda` so we find the khiops executables installed in the conda env
+ run: conda run --name test just test
diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml
index 199c922..cca4b26 100644
--- a/.pre-commit-config.yaml
+++ b/.pre-commit-config.yaml
@@ -1,18 +1,18 @@
repos:
- repo: https://github.com/astral-sh/ruff-pre-commit
- rev: v0.12.4
+ rev: v0.14.10
hooks:
- id: ruff-check
args: [ --fix ]
- id: ruff-format
- repo: https://github.com/mwouts/jupytext
- rev: v1.17.3
+ rev: v1.19.0.dev0
hooks:
- id: jupytext
args: [--update, --from, py:percent, --to, notebook]
files: docs/quickstart.py
- repo: https://github.com/rhysd/actionlint
- rev: v1.7.8
+ rev: v1.7.9
hooks:
- id: actionlint
name: actionlint
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 467c46c..c178923 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,10 +1,17 @@
# Changelog
+## [0.2] - 2025-12-26
+
+### Changed
+- Update Khiops dependency to version 11.
+
## [0.1] - 2025-10-17
+
### Added
- `KhalibClassifier` class
- `calibration_error` function
- `build_reliability_diagram` function
-[Unreleased]: https://github.com/yourusername/yourproject/compare/0.1...HEAD
-[1.0.0]: https://github.com/yourusername/yourproject/releases/tag/0.1
+[Unreleased]: https://github.com/yourusername/yourproject/compare/0.2...HEAD
+[0.2]: https://github.com/yourusername/yourproject/compare/0.1...0.2
+[0.1]: https://github.com/yourusername/yourproject/releases/tag/0.1
diff --git a/README.md b/README.md
index c059400..bfc7f2f 100644
--- a/README.md
+++ b/README.md
@@ -6,13 +6,16 @@ suite.
## Features
- `KhalibClassifier`: A scikit-learn estimator to calibrate classifiers with a similar interface
- fashion as [CalibratedClassifierCV][sk-calclf].
+ as [CalibratedClassifierCV][sk-calclf].
- `calibration_error` : A function to estimate the Estimated Calibration Error (ECE).
-- `build_reliability_diagram` : A function that builds a reliability diagram.
+- `build_reliability_diagram` : A function to build a reliability diagram.
These features are based on Khiops's non-parametric supervised histograms, so there is no need to
specify the number and width of the bins, as they are automatically estimated from data.
+[khiops-org]: https://khiops.org
+[sk-calclf]: https://scikit-learn.org/stable/modules/generated/sklearn.calibration.CalibratedClassifierCV.html
+
See the [documentation][khalib-docs] for more information.
@@ -20,14 +23,13 @@ See the [documentation][khalib-docs] for more information.
## Installation
-*Note: We'll improve this installation procedure soon!*
-
-- Make sure you have installed [Khiops 11 Beta][khiops11-setup]
-- Execute
+- [Install Khiops][khiops-setup]
+- Install the `khalib` python library:
-```bash
-pip install https://github.com/KhiopsLab/khalib/archive/refs/tags/0.1.zip
+```sh
+pip install khalib
```
+[khiops-setup]: https://khiops.org/setup/
@@ -37,8 +39,4 @@ pip install https://github.com/KhiopsLab/khalib/archive/refs/tags/0.1.zip
See https://khiopslab.github.io/khalib/
-[khiops-org]: https://khiops.org
-[khiops11-setup]: https://khiops.org/11.0.0-b.0/setup/
-[sk-calclf]: https://scikit-learn.org/stable/modules/generated/sklearn.calibration.CalibratedClassifierCV.html
[khalib-docs]: https://khiopslab.github.io/khalib
-
diff --git a/docs/conf.py b/docs/conf.py
index f44651a..7c3760c 100644
--- a/docs/conf.py
+++ b/docs/conf.py
@@ -1,7 +1,17 @@
+# This script must be executed in its directory
+import importlib
+import sys
+
+# Obtain the project's version
+sys.path.append("../")
+khalib_version = importlib.metadata.version("khalib")
+
+# Basic Information
project = "khalib"
author = "Felipe Olmos"
-release = "0.1"
+release = khalib_version
+# Sphinx extensions
extensions = [
"myst_nb", # activates myst_parser as well
"numpydoc",
@@ -11,13 +21,13 @@
"sphinx.ext.intersphinx",
]
+# Basic Sphinx config
+default_role = "obj"
templates_path = ["_templates"]
exclude_patterns = []
-
html_theme = "furo"
html_static_path = ["_static"]
html_title = f"
{project} {release}
"
-default_role = "obj"
# Extensions configs
diff --git a/docs/index.md b/docs/index.md
index 4e6cd9c..7d9bb43 100644
--- a/docs/index.md
+++ b/docs/index.md
@@ -11,17 +11,14 @@
## How does it work
`khalib` proposes histogram-based calibration and its error estimation. Its differentiating factor
-is that uses [Khiops][khiops-org] to construct the histogram in which {math}`P(Y = 1 | S)` is
-estimated. These histograms have the following properties:
+is that uses Khiops to construct the histogram in which {math}`P(Y = 1 | S)` is estimated. These
+histograms have the following properties:
- They balance class purity, model complexity and data fitness.
- They are non-parametric: The optimal histogram is searched without constraint in number of bins or
bin width. This implies that the user doesn't need to set a number of bins nor their widths.
-[khiops-org]: https://khiops.org
-[khiops11-setup]: https://khiops.org/11.0.0-b.0/setup/
-[sk-calclf]: https://scikit-learn.org/stable/modules/generated/sklearn.calibration.CalibratedClassifierCV.html
-[khalib-docs]: https://khiopsml.github.io/khalib
+
See the [Quickstart](quickstart) and [API reference](api) to learn how to use the library.
@@ -40,5 +37,6 @@ API Reference
:hidden:
Khiops
+Github
```
diff --git a/docs/quickstart.ipynb b/docs/quickstart.ipynb
index 8316f2d..9742b72 100644
--- a/docs/quickstart.ipynb
+++ b/docs/quickstart.ipynb
@@ -178,6 +178,22 @@
"print(\"Reduction :\", (ece_test - calib_ece_test) / ece_test)\n",
"_ = khalib.build_reliability_diagram(calib_hist_y_test_scores, y_test)"
]
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "0370a02f",
+ "metadata": {},
+ "outputs": [],
+ "source": []
+ },
+ {
+ "cell_type": "code",
+ "execution_count": null,
+ "id": "edf18fbe",
+ "metadata": {},
+ "outputs": [],
+ "source": []
}
],
"metadata": {
diff --git a/docs/quickstart.py b/docs/quickstart.py
index f5e6c23..06c3fc7 100644
--- a/docs/quickstart.py
+++ b/docs/quickstart.py
@@ -112,3 +112,7 @@
print("CALIB HIST ECE:", calib_hist_ece_test)
print("Reduction :", (ece_test - calib_ece_test) / ece_test)
_ = khalib.build_reliability_diagram(calib_hist_y_test_scores, y_test)
+
+# %%
+
+# %%
diff --git a/justfile b/justfile
index f26187f..ebc0f91 100644
--- a/justfile
+++ b/justfile
@@ -1,6 +1,6 @@
alias pc := pre-commit
pre-commit:
- uv run pre-commit run --all-files
+ uvx pre-commit run --all-files
alias d := docs
docs:
diff --git a/pyproject.toml b/pyproject.toml
index d516eae..5144e57 100644
--- a/pyproject.toml
+++ b/pyproject.toml
@@ -4,22 +4,45 @@ build-backend = "setuptools.build_meta"
[project]
name = "khalib"
-version = "0.1"
+version = "0.2"
description = "Classifier Calibration with Khiops"
authors = [{ name = "Felipe Olmos", email = "luisfelipe.olmosmarchant@orange.com" }]
requires-python = ">=3.11"
dependencies = [
- "khiops>=11.0.0.0b0",
+ "khiops>=11.0.0.0",
"numpy>=2.0.0",
"scikit-learn>=1.5.0",
"matplotlib>=3.9.0",
]
+readme = "README.md"
license = "BSD-3-Clause"
license-files = ["LICENSE.md"]
+classifiers=[
+ "Intended Audience :: Science/Research",
+ "Intended Audience :: Developers",
+ "Programming Language :: Python",
+ "Topic :: Software Development",
+ "Topic :: Scientific/Engineering",
+ "Development Status :: 5 - Production/Stable",
+ "Operating System :: Microsoft :: Windows",
+ "Operating System :: POSIX",
+ "Operating System :: Unix",
+ "Operating System :: MacOS",
+ "Programming Language :: Python :: 3",
+ "Programming Language :: Python :: 3.11",
+ "Programming Language :: Python :: 3.12",
+ "Programming Language :: Python :: 3.13",
+ "Programming Language :: Python :: 3.14",
+]
+[project.urls]
+homepage = "https://khiopslab.github.io/khalib"
+source = "https://github.com/KhiopsLab/khalib"
+tracker = "https://github.com/KhiopsLab/khalib/issues"
+changelog = "https://github.com/KhiopsLab/khalib/blob/main/CHANGELOG.md"
-[tools.setuptools]
-packages = ["khcalib"]
+[tool.setuptools.packages.find]
+where = ["src"]
[tool.pytest.ini_options]
markers = [
@@ -56,13 +79,11 @@ ignore = [
"PLW0120", # useless-else-on-loop
"PLW0406", # import-self
"PLW0603", # global-statement
+ "PD901", # Avoid 'df' name for dataframes
]
# To fix by default isort fixes
extend-safe-fixes = ["I"]
-[tool.uv.sources]
-khiops = { url = "https://github.com/KhiopsML/khiops-python/releases/download/11.0.0.0-b.0/khiops-11.0.0.0b0.tar.gz" }
-
[dependency-groups]
dev = [
"furo>=2025.7.19",
@@ -74,7 +95,6 @@ dev = [
"myst-nb>=1.3.0",
"myst-parser>=4.0.1",
"numpydoc>=1.9.0",
- "pre-commit>=4.3.0",
"pytest>=8.4.1",
"sphinx>=8.2.3",
"sphinx-copybutton>=0.5.2",
diff --git a/uv.lock b/uv.lock
index 10028df..f2d3110 100644
--- a/uv.lock
+++ b/uv.lock
@@ -252,15 +252,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ae/3a/dbeec9d1ee0844c679f6bb5d6ad4e9f198b1224f4e7a32825f47f6192b0c/cffi-2.0.0-cp314-cp314t-win_arm64.whl", hash = "sha256:0a1527a803f0a659de1af2e1fd700213caba79377e27e4693648c2923da066f9", size = 184195, upload-time = "2025-09-08T23:23:43.004Z" },
]
-[[package]]
-name = "cfgv"
-version = "3.4.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/11/74/539e56497d9bd1d484fd863dd69cbbfa653cd2aa27abfe35653494d85e94/cfgv-3.4.0.tar.gz", hash = "sha256:e52591d4c5f5dead8e0f673fb16db7949d2cfb3f7da4582893288f0ded8fe560", size = 7114, upload-time = "2023-08-12T20:38:17.776Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/c5/55/51844dd50c4fc7a33b653bfaba4c2456f06955289ca770a5dbd5fd267374/cfgv-3.4.0-py2.py3-none-any.whl", hash = "sha256:b7265b1f29fd3316bfcd2b330d63d024f2bfd8bcb8b0272f8e19a504856c48f9", size = 7249, upload-time = "2023-08-12T20:38:16.269Z" },
-]
-
[[package]]
name = "charset-normalizer"
version = "3.4.4"
@@ -498,15 +489,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/07/6c/aa3f2f849e01cb6a001cd8554a88d4c77c5c1a31c95bdf1cf9301e6d9ef4/defusedxml-0.7.1-py2.py3-none-any.whl", hash = "sha256:a352e7e428770286cc899e2542b6cdaedb2b4953ff269a210103ec58f6198a61", size = 25604, upload-time = "2021-03-08T10:59:24.45Z" },
]
-[[package]]
-name = "distlib"
-version = "0.4.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/96/8e/709914eb2b5749865801041647dc7f4e6d00b549cfe88b65ca192995f07c/distlib-0.4.0.tar.gz", hash = "sha256:feec40075be03a04501a973d81f633735b4b69f98b05450592310c0f401a4e0d", size = 614605, upload-time = "2025-07-17T16:52:00.465Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/33/6b/e0547afaf41bf2c42e52430072fa5658766e3d65bd4b03a563d1b6336f57/distlib-0.4.0-py2.py3-none-any.whl", hash = "sha256:9659f7d87e46584a30b5780e43ac7a2143098441670ff0a49d5f9034c54a6c16", size = 469047, upload-time = "2025-07-17T16:51:58.613Z" },
-]
-
[[package]]
name = "docutils"
version = "0.21.2"
@@ -534,15 +516,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/cb/a8/20d0723294217e47de6d9e2e40fd4a9d2f7c4b6ef974babd482a59743694/fastjsonschema-2.21.2-py3-none-any.whl", hash = "sha256:1c797122d0a86c5cace2e54bf4e819c36223b552017172f32c5c024a6b77e463", size = 24024, upload-time = "2025-08-14T18:49:34.776Z" },
]
-[[package]]
-name = "filelock"
-version = "3.20.0"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/58/46/0028a82567109b5ef6e4d2a1f04a583fb513e6cf9527fcdd09afd817deeb/filelock-3.20.0.tar.gz", hash = "sha256:711e943b4ec6be42e1d4e6690b48dc175c822967466bb31c0c293f34334c13f4", size = 18922, upload-time = "2025-10-08T18:03:50.056Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/76/91/7216b27286936c16f5b4d0c530087e4a54eead683e6b0b73dd0c64844af6/filelock-3.20.0-py3-none-any.whl", hash = "sha256:339b4732ffda5cd79b13f4e2711a31b0365ce445d95d243bb996273d072546a2", size = 16054, upload-time = "2025-10-08T18:03:48.35Z" },
-]
-
[[package]]
name = "fonttools"
version = "4.60.1"
@@ -631,6 +604,8 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/1f/8e/abdd3f14d735b2929290a018ecf133c901be4874b858dd1c604b9319f064/greenlet-3.2.4-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:2523e5246274f54fdadbce8494458a2ebdcdbc7b802318466ac5606d3cded1f8", size = 587684, upload-time = "2025-08-07T13:18:25.164Z" },
{ url = "https://files.pythonhosted.org/packages/5d/65/deb2a69c3e5996439b0176f6651e0052542bb6c8f8ec2e3fba97c9768805/greenlet-3.2.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:1987de92fec508535687fb807a5cea1560f6196285a4cde35c100b8cd632cc52", size = 1116647, upload-time = "2025-08-07T13:42:38.655Z" },
{ url = "https://files.pythonhosted.org/packages/3f/cc/b07000438a29ac5cfb2194bfc128151d52f333cee74dd7dfe3fb733fc16c/greenlet-3.2.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:55e9c5affaa6775e2c6b67659f3a71684de4c549b3dd9afca3bc773533d284fa", size = 1142073, upload-time = "2025-08-07T13:18:21.737Z" },
+ { url = "https://files.pythonhosted.org/packages/67/24/28a5b2fa42d12b3d7e5614145f0bd89714c34c08be6aabe39c14dd52db34/greenlet-3.2.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c9c6de1940a7d828635fbd254d69db79e54619f165ee7ce32fda763a9cb6a58c", size = 1548385, upload-time = "2025-11-04T12:42:11.067Z" },
+ { url = "https://files.pythonhosted.org/packages/6a/05/03f2f0bdd0b0ff9a4f7b99333d57b53a7709c27723ec8123056b084e69cd/greenlet-3.2.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:03c5136e7be905045160b1b9fdca93dd6727b180feeafda6818e6496434ed8c5", size = 1613329, upload-time = "2025-11-04T12:42:12.928Z" },
{ url = "https://files.pythonhosted.org/packages/d8/0f/30aef242fcab550b0b3520b8e3561156857c94288f0332a79928c31a52cf/greenlet-3.2.4-cp311-cp311-win_amd64.whl", hash = "sha256:9c40adce87eaa9ddb593ccb0fa6a07caf34015a29bf8d344811665b573138db9", size = 299100, upload-time = "2025-08-07T13:44:12.287Z" },
{ url = "https://files.pythonhosted.org/packages/44/69/9b804adb5fd0671f367781560eb5eb586c4d495277c93bde4307b9e28068/greenlet-3.2.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:3b67ca49f54cede0186854a008109d6ee71f66bd57bb36abd6d0a0267b540cdd", size = 274079, upload-time = "2025-08-07T13:15:45.033Z" },
{ url = "https://files.pythonhosted.org/packages/46/e9/d2a80c99f19a153eff70bc451ab78615583b8dac0754cfb942223d2c1a0d/greenlet-3.2.4-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ddf9164e7a5b08e9d22511526865780a576f19ddd00d62f8a665949327fde8bb", size = 640997, upload-time = "2025-08-07T13:42:56.234Z" },
@@ -640,6 +615,8 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/19/0d/6660d55f7373b2ff8152401a83e02084956da23ae58cddbfb0b330978fe9/greenlet-3.2.4-cp312-cp312-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:3b3812d8d0c9579967815af437d96623f45c0f2ae5f04e366de62a12d83a8fb0", size = 607586, upload-time = "2025-08-07T13:18:28.544Z" },
{ url = "https://files.pythonhosted.org/packages/8e/1a/c953fdedd22d81ee4629afbb38d2f9d71e37d23caace44775a3a969147d4/greenlet-3.2.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:abbf57b5a870d30c4675928c37278493044d7c14378350b3aa5d484fa65575f0", size = 1123281, upload-time = "2025-08-07T13:42:39.858Z" },
{ url = "https://files.pythonhosted.org/packages/3f/c7/12381b18e21aef2c6bd3a636da1088b888b97b7a0362fac2e4de92405f97/greenlet-3.2.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:20fb936b4652b6e307b8f347665e2c615540d4b42b3b4c8a321d8286da7e520f", size = 1151142, upload-time = "2025-08-07T13:18:22.981Z" },
+ { url = "https://files.pythonhosted.org/packages/27/45/80935968b53cfd3f33cf99ea5f08227f2646e044568c9b1555b58ffd61c2/greenlet-3.2.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ee7a6ec486883397d70eec05059353b8e83eca9168b9f3f9a361971e77e0bcd0", size = 1564846, upload-time = "2025-11-04T12:42:15.191Z" },
+ { url = "https://files.pythonhosted.org/packages/69/02/b7c30e5e04752cb4db6202a3858b149c0710e5453b71a3b2aec5d78a1aab/greenlet-3.2.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:326d234cbf337c9c3def0676412eb7040a35a768efc92504b947b3e9cfc7543d", size = 1633814, upload-time = "2025-11-04T12:42:17.175Z" },
{ url = "https://files.pythonhosted.org/packages/e9/08/b0814846b79399e585f974bbeebf5580fbe59e258ea7be64d9dfb253c84f/greenlet-3.2.4-cp312-cp312-win_amd64.whl", hash = "sha256:a7d4e128405eea3814a12cc2605e0e6aedb4035bf32697f72deca74de4105e02", size = 299899, upload-time = "2025-08-07T13:38:53.448Z" },
{ url = "https://files.pythonhosted.org/packages/49/e8/58c7f85958bda41dafea50497cbd59738c5c43dbbea5ee83d651234398f4/greenlet-3.2.4-cp313-cp313-macosx_11_0_universal2.whl", hash = "sha256:1a921e542453fe531144e91e1feedf12e07351b1cf6c9e8a3325ea600a715a31", size = 272814, upload-time = "2025-08-07T13:15:50.011Z" },
{ url = "https://files.pythonhosted.org/packages/62/dd/b9f59862e9e257a16e4e610480cfffd29e3fae018a68c2332090b53aac3d/greenlet-3.2.4-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd3c8e693bff0fff6ba55f140bf390fa92c994083f838fece0f63be121334945", size = 641073, upload-time = "2025-08-07T13:42:57.23Z" },
@@ -649,6 +626,8 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/ee/43/3cecdc0349359e1a527cbf2e3e28e5f8f06d3343aaf82ca13437a9aa290f/greenlet-3.2.4-cp313-cp313-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:23768528f2911bcd7e475210822ffb5254ed10d71f4028387e5a99b4c6699671", size = 610497, upload-time = "2025-08-07T13:18:31.636Z" },
{ url = "https://files.pythonhosted.org/packages/b8/19/06b6cf5d604e2c382a6f31cafafd6f33d5dea706f4db7bdab184bad2b21d/greenlet-3.2.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:00fadb3fedccc447f517ee0d3fd8fe49eae949e1cd0f6a611818f4f6fb7dc83b", size = 1121662, upload-time = "2025-08-07T13:42:41.117Z" },
{ url = "https://files.pythonhosted.org/packages/a2/15/0d5e4e1a66fab130d98168fe984c509249c833c1a3c16806b90f253ce7b9/greenlet-3.2.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:d25c5091190f2dc0eaa3f950252122edbbadbb682aa7b1ef2f8af0f8c0afefae", size = 1149210, upload-time = "2025-08-07T13:18:24.072Z" },
+ { url = "https://files.pythonhosted.org/packages/1c/53/f9c440463b3057485b8594d7a638bed53ba531165ef0ca0e6c364b5cc807/greenlet-3.2.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:6e343822feb58ac4d0a1211bd9399de2b3a04963ddeec21530fc426cc121f19b", size = 1564759, upload-time = "2025-11-04T12:42:19.395Z" },
+ { url = "https://files.pythonhosted.org/packages/47/e4/3bb4240abdd0a8d23f4f88adec746a3099f0d86bfedb623f063b2e3b4df0/greenlet-3.2.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ca7f6f1f2649b89ce02f6f229d7c19f680a6238af656f61e0115b24857917929", size = 1634288, upload-time = "2025-11-04T12:42:21.174Z" },
{ url = "https://files.pythonhosted.org/packages/0b/55/2321e43595e6801e105fcfdee02b34c0f996eb71e6ddffca6b10b7e1d771/greenlet-3.2.4-cp313-cp313-win_amd64.whl", hash = "sha256:554b03b6e73aaabec3745364d6239e9e012d64c68ccd0b8430c64ccc14939a8b", size = 299685, upload-time = "2025-08-07T13:24:38.824Z" },
{ url = "https://files.pythonhosted.org/packages/22/5c/85273fd7cc388285632b0498dbbab97596e04b154933dfe0f3e68156c68c/greenlet-3.2.4-cp314-cp314-macosx_11_0_universal2.whl", hash = "sha256:49a30d5fda2507ae77be16479bdb62a660fa51b1eb4928b524975b3bde77b3c0", size = 273586, upload-time = "2025-08-07T13:16:08.004Z" },
{ url = "https://files.pythonhosted.org/packages/d1/75/10aeeaa3da9332c2e761e4c50d4c3556c21113ee3f0afa2cf5769946f7a3/greenlet-3.2.4-cp314-cp314-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:299fd615cd8fc86267b47597123e3f43ad79c9d8a22bebdce535e53550763e2f", size = 686346, upload-time = "2025-08-07T13:42:59.944Z" },
@@ -656,6 +635,8 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/dc/8b/29aae55436521f1d6f8ff4e12fb676f3400de7fcf27fccd1d4d17fd8fecd/greenlet-3.2.4-cp314-cp314-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:b4a1870c51720687af7fa3e7cda6d08d801dae660f75a76f3845b642b4da6ee1", size = 694659, upload-time = "2025-08-07T13:53:17.759Z" },
{ url = "https://files.pythonhosted.org/packages/92/2e/ea25914b1ebfde93b6fc4ff46d6864564fba59024e928bdc7de475affc25/greenlet-3.2.4-cp314-cp314-manylinux2014_x86_64.manylinux_2_17_x86_64.whl", hash = "sha256:061dc4cf2c34852b052a8620d40f36324554bc192be474b9e9770e8c042fd735", size = 695355, upload-time = "2025-08-07T13:18:34.517Z" },
{ url = "https://files.pythonhosted.org/packages/72/60/fc56c62046ec17f6b0d3060564562c64c862948c9d4bc8aa807cf5bd74f4/greenlet-3.2.4-cp314-cp314-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:44358b9bf66c8576a9f57a590d5f5d6e72fa4228b763d0e43fee6d3b06d3a337", size = 657512, upload-time = "2025-08-07T13:18:33.969Z" },
+ { url = "https://files.pythonhosted.org/packages/23/6e/74407aed965a4ab6ddd93a7ded3180b730d281c77b765788419484cdfeef/greenlet-3.2.4-cp314-cp314-musllinux_1_2_aarch64.whl", hash = "sha256:2917bdf657f5859fbf3386b12d68ede4cf1f04c90c3a6bc1f013dd68a22e2269", size = 1612508, upload-time = "2025-11-04T12:42:23.427Z" },
+ { url = "https://files.pythonhosted.org/packages/0d/da/343cd760ab2f92bac1845ca07ee3faea9fe52bee65f7bcb19f16ad7de08b/greenlet-3.2.4-cp314-cp314-musllinux_1_2_x86_64.whl", hash = "sha256:015d48959d4add5d6c9f6c5210ee3803a830dce46356e3bc326d6776bde54681", size = 1680760, upload-time = "2025-11-04T12:42:25.341Z" },
{ url = "https://files.pythonhosted.org/packages/e3/a5/6ddab2b4c112be95601c13428db1d8b6608a8b6039816f2ba09c346c08fc/greenlet-3.2.4-cp314-cp314-win_amd64.whl", hash = "sha256:e37ab26028f12dbb0ff65f29a8d3d44a765c61e729647bf2ddfbbed621726f01", size = 303425, upload-time = "2025-08-07T13:32:27.59Z" },
]
@@ -696,15 +677,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/2a/39/e50c7c3a983047577ee07d2a9e53faf5a69493943ec3f6a384bdc792deb2/httpx-0.28.1-py3-none-any.whl", hash = "sha256:d909fcccc110f8c7faf814ca82a9a4d816bc5a6dbfea25d6591d6985b8ba59ad", size = 73517, upload-time = "2024-12-06T15:37:21.509Z" },
]
-[[package]]
-name = "identify"
-version = "2.6.15"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/ff/e7/685de97986c916a6d93b3876139e00eef26ad5bbbd61925d670ae8013449/identify-2.6.15.tar.gz", hash = "sha256:e4f4864b96c6557ef2a1e1c951771838f4edc9df3a72ec7118b338801b11c7bf", size = 99311, upload-time = "2025-10-02T17:43:40.631Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/0f/1c/e5fd8f973d4f375adb21565739498e2e9a1e54c858a97b9a8ccfdc81da9b/identify-2.6.15-py2.py3-none-any.whl", hash = "sha256:1181ef7608e00704db228516541eb83a88a9f94433a8c80bb9b5bd54b1d81757", size = 99183, upload-time = "2025-10-02T17:43:39.137Z" },
-]
-
[[package]]
name = "idna"
version = "3.11"
@@ -1108,7 +1080,7 @@ wheels = [
[[package]]
name = "khalib"
-version = "0.1b0"
+version = "0.2"
source = { editable = "." }
dependencies = [
{ name = "khiops" },
@@ -1128,7 +1100,6 @@ dev = [
{ name = "myst-nb" },
{ name = "myst-parser" },
{ name = "numpydoc" },
- { name = "pre-commit" },
{ name = "pytest" },
{ name = "sphinx" },
{ name = "sphinx-copybutton" },
@@ -1137,7 +1108,7 @@ dev = [
[package.metadata]
requires-dist = [
- { name = "khiops", url = "https://github.com/KhiopsML/khiops-python/releases/download/11.0.0.0-b.0/khiops-11.0.0.0b0.tar.gz" },
+ { name = "khiops", specifier = ">=11.0.0.0" },
{ name = "matplotlib", specifier = ">=3.9.0" },
{ name = "numpy", specifier = ">=2.0.0" },
{ name = "scikit-learn", specifier = ">=1.5.0" },
@@ -1154,7 +1125,6 @@ dev = [
{ name = "myst-nb", specifier = ">=1.3.0" },
{ name = "myst-parser", specifier = ">=4.0.1" },
{ name = "numpydoc", specifier = ">=1.9.0" },
- { name = "pre-commit", specifier = ">=4.3.0" },
{ name = "pytest", specifier = ">=8.4.1" },
{ name = "sphinx", specifier = ">=8.2.3" },
{ name = "sphinx-copybutton", specifier = ">=0.5.2" },
@@ -1163,23 +1133,13 @@ dev = [
[[package]]
name = "khiops"
-version = "11.0.0.0b0"
-source = { url = "https://github.com/KhiopsML/khiops-python/releases/download/11.0.0.0-b.0/khiops-11.0.0.0b0.tar.gz" }
+version = "11.0.0.0"
+source = { registry = "https://pypi.org/simple" }
dependencies = [
{ name = "pandas" },
{ name = "scikit-learn" },
]
-sdist = { hash = "sha256:db8380d4eeec4341f52459d4d2533b48c95e79e6faea020a19fcbdc8ff33fe92" }
-
-[package.metadata]
-requires-dist = [
- { name = "boto3", marker = "extra == 's3'", specifier = ">=1.17.39,<=1.35.69" },
- { name = "google-cloud-storage", marker = "extra == 'gcs'", specifier = ">=1.37.0" },
- { name = "pandas", specifier = ">=0.25.3" },
- { name = "pyopenssl", marker = "extra == 's3'", specifier = ">=24.0.0,<25.0.0" },
- { name = "scikit-learn", specifier = ">=0.22.2" },
-]
-provides-extras = ["s3", "gcs"]
+sdist = { url = "https://files.pythonhosted.org/packages/1f/bd/5e1d1a6f1bc5ef3746a905346b3f5990120c01a1396beec04181e2a9b342/khiops-11.0.0.0.tar.gz", hash = "sha256:35b03439b515e528a87bf0d42c93f047a1bf7e3fe95f9fb1aa8d0e8f360337de", size = 179523, upload-time = "2025-12-19T14:18:41.255Z" }
[[package]]
name = "kiwisolver"
@@ -1574,15 +1534,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl", hash = "sha256:87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c", size = 5195, upload-time = "2024-01-21T14:25:17.223Z" },
]
-[[package]]
-name = "nodeenv"
-version = "1.9.1"
-source = { registry = "https://pypi.org/simple" }
-sdist = { url = "https://files.pythonhosted.org/packages/43/16/fc88b08840de0e0a72a2f9d8c6bae36be573e475a6326ae854bcc549fc45/nodeenv-1.9.1.tar.gz", hash = "sha256:6ec12890a2dab7946721edbfbcd91f3319c6ccc9aec47be7c7e6b7011ee6645f", size = 47437, upload-time = "2024-06-04T18:44:11.171Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/d2/1d/1b658dbd2b9fa9c4c9f32accbfc0205d532c8c6194dc0f2a4c0428e7128a/nodeenv-1.9.1-py2.py3-none-any.whl", hash = "sha256:ba11c9782d29c27c70ffbdda2d7415098754709be8a7056d79a737cd901155c9", size = 22314, upload-time = "2024-06-04T18:44:08.352Z" },
-]
-
[[package]]
name = "notebook-shim"
version = "0.2.4"
@@ -1895,22 +1846,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/54/20/4d324d65cc6d9205fabedc306948156824eb9f0ee1633355a8f7ec5c66bf/pluggy-1.6.0-py3-none-any.whl", hash = "sha256:e920276dd6813095e9377c0bc5566d94c932c33b27a3e3945d8389c374dd4746", size = 20538, upload-time = "2025-05-15T12:30:06.134Z" },
]
-[[package]]
-name = "pre-commit"
-version = "4.3.0"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "cfgv" },
- { name = "identify" },
- { name = "nodeenv" },
- { name = "pyyaml" },
- { name = "virtualenv" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/ff/29/7cf5bbc236333876e4b41f56e06857a87937ce4bf91e117a6991a2dbb02a/pre_commit-4.3.0.tar.gz", hash = "sha256:499fe450cc9d42e9d58e606262795ecb64dd05438943c62b66f6a8673da30b16", size = 193792, upload-time = "2025-08-09T18:56:14.651Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/5b/a5/987a405322d78a73b66e39e4a90e4ef156fd7141bf71df987e50717c321b/pre_commit-4.3.0-py2.py3-none-any.whl", hash = "sha256:2b0747ad7e6e967169136edffee14c16e148a778a54e4f967921aa1ebf2308d8", size = 220965, upload-time = "2025-08-09T18:56:13.192Z" },
-]
-
[[package]]
name = "prometheus-client"
version = "0.23.1"
@@ -2793,20 +2728,6 @@ wheels = [
{ url = "https://files.pythonhosted.org/packages/a7/c2/fe1e52489ae3122415c51f387e221dd0773709bad6c6cdaa599e8a2c5185/urllib3-2.5.0-py3-none-any.whl", hash = "sha256:e6b01673c0fa6a13e374b50871808eb3bf7046c4b125b216f6bf1cc604cff0dc", size = 129795, upload-time = "2025-06-18T14:07:40.39Z" },
]
-[[package]]
-name = "virtualenv"
-version = "20.35.3"
-source = { registry = "https://pypi.org/simple" }
-dependencies = [
- { name = "distlib" },
- { name = "filelock" },
- { name = "platformdirs" },
-]
-sdist = { url = "https://files.pythonhosted.org/packages/a4/d5/b0ccd381d55c8f45d46f77df6ae59fbc23d19e901e2d523395598e5f4c93/virtualenv-20.35.3.tar.gz", hash = "sha256:4f1a845d131133bdff10590489610c98c168ff99dc75d6c96853801f7f67af44", size = 6002907, upload-time = "2025-10-10T21:23:33.178Z" }
-wheels = [
- { url = "https://files.pythonhosted.org/packages/27/73/d9a94da0e9d470a543c1b9d3ccbceb0f59455983088e727b8a1824ed90fb/virtualenv-20.35.3-py3-none-any.whl", hash = "sha256:63d106565078d8c8d0b206d48080f938a8b25361e19432d2c9db40d2899c810a", size = 5981061, upload-time = "2025-10-10T21:23:30.433Z" },
-]
-
[[package]]
name = "wcwidth"
version = "0.2.14"