diff --git a/.github/workflows/check-urls.yml b/.github/workflows/check-urls.yml index e3fc14d..b348ab2 100644 --- a/.github/workflows/check-urls.yml +++ b/.github/workflows/check-urls.yml @@ -23,7 +23,7 @@ jobs: - uses: actions/checkout@v3 - name: urls-checker-code - uses: urlstechie/urlchecker-action@master + uses: urlstechie/urlchecker-action@main with: subfolder: mlinsights file_types: .md,.py,.rst,.ipynb @@ -35,7 +35,7 @@ jobs: # force_pass : true - name: urls-checker-docs - uses: urlstechie/urlchecker-action@master + uses: urlstechie/urlchecker-action@main with: subfolder: _doc file_types: .md,.py,.rst,.ipynb diff --git a/.github/workflows/wheels-mac.yml b/.github/workflows/wheels-mac.yml index 403f5a1..5c06eb0 100644 --- a/.github/workflows/wheels-mac.yml +++ b/.github/workflows/wheels-mac.yml @@ -26,7 +26,7 @@ jobs: # Used to host cibuildwheel - uses: actions/setup-python@v4 with: - python-version: '3.10' + python-version: '3.11' - name: Install cibuildwheel run: python -m pip install cibuildwheel diff --git a/CHANGELOGS.rst b/CHANGELOGS.rst index 2f98249..6afd296 100644 --- a/CHANGELOGS.rst +++ b/CHANGELOGS.rst @@ -5,6 +5,7 @@ Change Logs 0.5.1 ===== +* :pr:`130` numpy 2.0 * :pr:`132` builds against scikit-learn==1.5.0, python 3.12 0.5.0 diff --git a/_doc/index.rst b/_doc/index.rst index 61b856f..e0881fb 100644 --- a/_doc/index.rst +++ b/_doc/index.rst @@ -98,4 +98,5 @@ Source are available at `sdpython/mlinsights `_ * `0.5.0 <../v0.5.0/index.html>`_ diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 73d8d4b..3e54602 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -5,7 +5,7 @@ jobs: strategy: matrix: Python311-Linux: - python.version: '3.11' + python.version: '3.12' maxParallel: 3 steps: diff --git a/mlinsights/ext_test_case.py b/mlinsights/ext_test_case.py index b5fdf4b..32dc71d 100644 --- a/mlinsights/ext_test_case.py +++ b/mlinsights/ext_test_case.py @@ -45,6 +45,39 @@ def call_f(self): return wrapper +def is_azure() -> bool: + "Tells if the job is running on Azure DevOps." + return os.environ.get("AZURE_HTTP_USER_AGENT", "undefined") != "undefined" + + +def is_windows() -> bool: + return sys.platform == "win32" + + +def is_apple() -> bool: + return sys.platform == "darwin" + + +def skipif_ci_windows(msg) -> Callable: + """ + Skips a unit test if it runs on :epkg:`azure pipeline` on :epkg:`Windows`. + """ + if is_windows() and is_azure(): + msg = f"Test does not work on azure pipeline (Windows). {msg}" + return unittest.skip(msg) + return lambda x: x + + +def skipif_ci_apple(msg) -> Callable: + """ + Skips a unit test if it runs on :epkg:`azure pipeline` on :epkg:`Windows`. + """ + if is_apple() and is_azure(): + msg = f"Test does not work on azure pipeline (Apple). {msg}" + return unittest.skip(msg) + return lambda x: x + + def measure_time( stmt: Union[str, Callable], context: Optional[Dict[str, Any]] = None, @@ -547,36 +580,3 @@ def unzip_files( elif not info.filename.endswith("/"): files.append(tos) return files - - -def is_azure() -> bool: - "Tells if the job is running on Azure DevOps." - return os.environ.get("AZURE_HTTP_USER_AGENT", "undefined") != "undefined" - - -def is_windows() -> bool: - return sys.platform == "win32" - - -def is_apple() -> bool: - return sys.platform == "darwin" - - -def skipif_ci_windows(msg) -> Callable: - """ - Skips a unit test if it runs on :epkg:`azure pipeline` on :epkg:`Windows`. - """ - if is_windows() and is_azure(): - msg = f"Test does not work on azure pipeline (Windows). {msg}" - return unittest.skip(msg) - return lambda x: x - - -def skipif_ci_apple(msg) -> Callable: - """ - Skips a unit test if it runs on :epkg:`azure pipeline` on :epkg:`Windows`. - """ - if is_apple() and is_azure(): - msg = f"Test does not work on azure pipeline (Apple). {msg}" - return unittest.skip(msg) - return lambda x: x diff --git a/pyproject.toml b/pyproject.toml index 0ee0257..abe94ef 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ license = {file = "LICENSE.txt"} name = "mlinsights" readme = "README.rst" requires-python = ">=3.9" -version = "0.5.0" +version = "0.5.1" [project.urls] homepage = "https://sdpython.github.io/doc/mlinsights/dev/" @@ -39,17 +39,19 @@ dev = [ "clang-format", "cmakelang", "coverage", - "cython", + "cython>=3.0.10", "cython-lint", "furo", "isort", "joblib", "lightgbm", "matplotlib", + "numpy>=2.0", "onnx-array-api", "onnxruntime", "pandas", "psutil", + "pybind11>=2.12.0", "pytest", "pytest-cov", "ruff", @@ -67,10 +69,10 @@ dev = [ requires = [ "abi3audit; sys_platform == 'linux'", "auditwheel-symbols; sys_platform == 'linux'", - "Cython", + "Cython>=3.0.10", "cmake", - "numpy", - "pybind11", + "numpy>=2.0", + "pybind11>=2.12.0", "scikit-learn>=1.3.0", "scipy", "setuptools", @@ -106,7 +108,7 @@ manylinux-x86_64-image = "manylinux2014" [tool.cibuildwheel.linux] archs = ["x86_64"] build = "cp*" -skip = "cp36-* cp37-* cp38-* cp39-* cp313-* pypy* *musllinux*" +skip = "cp36-* cp37-* cp38-* cp39-* cp313-* cp314-* pypy* *musllinux*" manylinux-x86_64-image = "manylinux2014" before-build = "pip install auditwheel-symbols abi3audit" build-verbosity = 1 @@ -114,15 +116,15 @@ repair-wheel-command = "auditwheel-symbols --manylinux 2014 {wheel} ; abi3audit # repair-wheel-command = "auditwheel-symbols --manylinux 2014 {wheel} || exit 0" [tool.cibuildwheel.macos] -archs = ["x86_64"] +archs = ["arm64", "universal2"] build = "cp*" -skip = "cp36-* cp37-* cp38-* cp39-* cp313-* pypy* pp*" +skip = "cp36-* cp37-* cp38-* cp39-* cp313-* cp314-* pypy* pp*" before-build = "brew install libomp llvm&&echo 'export PATH=\"/opt/homebrew/opt/llvm/bin:$PATH\"' >> /Users/runner/.bash_profile" [tool.cibuildwheel.windows] archs = ["AMD64"] build = "cp*" -skip = "cp36-* cp37-* cp38-* cp39-* cp313-* pypy*" +skip = "cp36-* cp37-* cp38-* cp39-* cp313-* cp314-* pypy*" [tool.cython-lint] max-line-length = 88 diff --git a/requirements-dev.txt b/requirements-dev.txt index d77508d..d8a8ef7 100644 --- a/requirements-dev.txt +++ b/requirements-dev.txt @@ -4,7 +4,7 @@ chardet clang-format cmakelang coverage -cython>=3.0.5 +cython>=3.0.10 cython-lint furo; sys_platform == 'linux' ijson @@ -14,14 +14,16 @@ matplotlib memory_profiler>=0.55 notebook numba +numpy>=2.0 onnxruntime pandas_streaming -pybind11 +pybind11>=2.12.0 pytest pytest-cov pytest-subtests rstcheck[sphinx,toml] ruff +scikit-learn>=1.5.0 seaborn skl2onnx>=1.14.1 sphinx<7.2; sys_platform == 'linux' # furo still fails with sphinx==7.2.0 (issue unused furo.css) diff --git a/requirements.txt b/requirements.txt index 9822557..b389725 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,4 @@ -cython>=3.0.5 -pybind11 +cython>=3.0.10 +numpy +pybind11>=2.12.0 scikit-learn>=1.3.0 diff --git a/setup.py b/setup.py index 6bb630d..983267e 100644 --- a/setup.py +++ b/setup.py @@ -670,7 +670,7 @@ def get_package_data(): setup( name="mlinsights", - version=get_version_str(here, "0.5.0"), + version=get_version_str(here, "0.5.1"), description=get_description(), long_description=get_long_description(here), author="Xavier Dupré",