diff --git a/.circleci/config.yml b/.circleci/config.yml index eedc286a5a5f2..db4c40a06536e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -3,7 +3,7 @@ version: 2.1 jobs: lint: docker: - - image: cimg/python:3.8.12 + - image: cimg/python:3.9.18 steps: - checkout - run: @@ -18,12 +18,14 @@ jobs: doc-min-dependencies: docker: - - image: cimg/python:3.8.12 + - image: cimg/python:3.9.18 environment: - MKL_NUM_THREADS: 2 - OPENBLAS_NUM_THREADS: 2 - CONDA_ENV_NAME: testenv - LOCK_FILE: build_tools/circle/doc_min_dependencies_linux-64_conda.lock + # Do not fail if the documentation build generates warnings + - SKLEARN_DOC_BUILD_WARNINGS_AS_ERRORS: 'false' steps: - checkout - run: ./build_tools/circle/checkout_merge_commit.sh @@ -52,12 +54,14 @@ jobs: doc: docker: - - image: cimg/python:3.8.12 + - image: cimg/python:3.9.18 environment: - MKL_NUM_THREADS: 2 - OPENBLAS_NUM_THREADS: 2 - CONDA_ENV_NAME: testenv - LOCK_FILE: build_tools/circle/doc_linux-64_conda.lock + # Make sure that we fail if the documentation build generates warnings + - SKLEARN_DOC_BUILD_WARNINGS_AS_ERRORS: 'true' steps: - checkout - run: ./build_tools/circle/checkout_merge_commit.sh @@ -91,7 +95,7 @@ jobs: deploy: docker: - - image: cimg/python:3.8.12 + - image: cimg/python:3.9.18 steps: - checkout - run: ./build_tools/circle/checkout_merge_commit.sh diff --git a/.github/workflows/update-lock-files.yml b/.github/workflows/update-lock-files.yml index ecf6ada399e96..4d8e98c01442e 100644 --- a/.github/workflows/update-lock-files.yml +++ b/.github/workflows/update-lock-files.yml @@ -17,13 +17,13 @@ jobs: matrix: include: - name: main - update_script_args: "--skip-build 'scipy-dev|^py39_conda_forge$|pypy'" + update_script_args: "--skip-build 'scipy-dev|^pymin_conda_forge$|pypy'" additional_commit_message: "[doc build]" - name: scipy-dev update_script_args: "--select-build scipy_dev" additional_commit_message: "[scipy-dev]" - name: cirrus-arm - update_script_args: "--select-build '^py39_conda_forge$'" + update_script_args: "--select-build '^pymin_conda_forge$'" additional_commit_message: "[cirrus arm]" - name: pypy update_script_args: "--select-build pypy" diff --git a/.github/workflows/wheels.yml b/.github/workflows/wheels.yml index b82a114bff1af..e205564c087f3 100644 --- a/.github/workflows/wheels.yml +++ b/.github/workflows/wheels.yml @@ -40,7 +40,7 @@ jobs: name: Check build trigger run: bash build_tools/github/check_build_trigger.sh - # Build the wheels for Linux, Windows and macOS for Python 3.8 and newer + # Build the wheels for Linux, Windows and macOS for Python 3.9 and newer build_wheels: name: Build wheel for cp${{ matrix.python }}-${{ matrix.platform_id }}-${{ matrix.manylinux_image }} runs-on: ${{ matrix.os }} @@ -55,9 +55,6 @@ jobs: # Window 64 bit # Note: windows-2019 is needed for older Python versions: # https://github.com/scikit-learn/scikit-learn/issues/22530 - - os: windows-2019 - python: 38 - platform_id: win_amd64 - os: windows-latest python: 39 platform_id: win_amd64 @@ -72,10 +69,6 @@ jobs: platform_id: win_amd64 # Linux 64 bit manylinux2014 - - os: ubuntu-latest - python: 38 - platform_id: manylinux_x86_64 - manylinux_image: manylinux2014 - os: ubuntu-latest python: 39 platform_id: manylinux_x86_64 @@ -97,9 +90,6 @@ jobs: manylinux_image: manylinux2014 # MacOS x86_64 - - os: macos-latest - python: 38 - platform_id: macosx_x86_64 - os: macos-latest python: 39 platform_id: macosx_x86_64 @@ -118,9 +108,6 @@ jobs: # Cirrus CI but due to limited build time for free accounts on Cirrus # CI, we build the macOS arm64 wheels for the other Python versions on # Github Actions via cross-compilation (without running the tests). - - os: macos-latest - python: 38 - platform_id: macosx_arm64 - os: macos-latest python: 39 platform_id: macosx_arm64 @@ -142,8 +129,6 @@ jobs: - name: Build and test wheels env: - CONFTEST_PATH: ${{ github.workspace }}/conftest.py - CONFTEST_NAME: conftest.py CIBW_PRERELEASE_PYTHONS: ${{ matrix.prerelease }} CIBW_ENVIRONMENT: SKLEARN_SKIP_NETWORK_TESTS=1 SKLEARN_BUILD_PARALLEL=3 diff --git a/README.rst b/README.rst index ea3e088e5f180..d5f5702808955 100644 --- a/README.rst +++ b/README.rst @@ -32,14 +32,14 @@ .. |Benchmark| image:: https://img.shields.io/badge/Benchmarked%20by-asv-blue .. _`Benchmark`: https://scikit-learn.org/scikit-learn-benchmarks/ -.. |PythonMinVersion| replace:: 3.8 -.. |NumPyMinVersion| replace:: 1.17.3 -.. |SciPyMinVersion| replace:: 1.5.0 +.. |PythonMinVersion| replace:: 3.9 +.. |NumPyMinVersion| replace:: 1.19.5 +.. |SciPyMinVersion| replace:: 1.6.0 .. |JoblibMinVersion| replace:: 1.2.0 .. |ThreadpoolctlMinVersion| replace:: 2.0.0 .. |MatplotlibMinVersion| replace:: 3.3.4 -.. |Scikit-ImageMinVersion| replace:: 0.16.2 -.. |PandasMinVersion| replace:: 1.0.5 +.. |Scikit-ImageMinVersion| replace:: 0.17.2 +.. |PandasMinVersion| replace:: 1.1.5 .. |SeabornMinVersion| replace:: 0.9.0 .. |PytestMinVersion| replace:: 7.1.2 .. |PlotlyMinVersion| replace:: 5.14.0 diff --git a/azure-pipelines.yml b/azure-pipelines.yml index 5793432e9d720..458e3ee395f62 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -191,9 +191,9 @@ jobs: ) commitMessage: dependencies['git_commit']['outputs']['commit.message'] matrix: - py38_conda_forge_openblas_ubuntu_2204: + pymin_conda_forge_openblas_ubuntu_2204: DISTRIB: 'conda' - LOCK_FILE: './build_tools/azure/py38_conda_forge_openblas_ubuntu_2204_linux-64_conda.lock' + LOCK_FILE: './build_tools/azure/pymin_conda_forge_openblas_ubuntu_2204_linux-64_conda.lock' CHECK_WARNINGS: 'true' COVERAGE: 'false' SKLEARN_TESTS_GLOBAL_RANDOM_SEED: '0' # non-default seed @@ -231,10 +231,10 @@ jobs: not(contains(dependencies['git_commit']['outputs']['commit.message'], '[ci skip]')) ) matrix: - # Linux + Python 3.8 build with OpenBLAS - py38_conda_defaults_openblas: + # Linux + Python 3.9 build with OpenBLAS + pymin_conda_defaults_openblas: DISTRIB: 'conda' - LOCK_FILE: './build_tools/azure/py38_conda_defaults_openblas_linux-64_conda.lock' + LOCK_FILE: './build_tools/azure/pymin_conda_defaults_openblas_linux-64_conda.lock' # Enable debug Cython directives to capture IndexError exceptions in # combination with the -Werror::pytest.PytestUnraisableExceptionWarning # flag for pytest. @@ -311,9 +311,9 @@ jobs: not(contains(dependencies['git_commit']['outputs']['commit.message'], '[ci skip]')) ) matrix: - py38_conda_forge_mkl: + pymin_conda_forge_mkl: DISTRIB: 'conda' - LOCK_FILE: ./build_tools/azure/py38_conda_forge_mkl_win-64_conda.lock + LOCK_FILE: ./build_tools/azure/pymin_conda_forge_mkl_win-64_conda.lock CHECK_WARNINGS: 'true' # The Azure Windows runner is typically much slower than other CI # runners due to the lack of compiler cache. Running the tests with diff --git a/build_tools/azure/pylatest_conda_forge_mkl_linux-64_conda.lock b/build_tools/azure/pylatest_conda_forge_mkl_linux-64_conda.lock index 356ba6400c41e..01448879fd3d9 100644 --- a/build_tools/azure/pylatest_conda_forge_mkl_linux-64_conda.lock +++ b/build_tools/azure/pylatest_conda_forge_mkl_linux-64_conda.lock @@ -32,11 +32,11 @@ https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.3-cxx17_h5959 https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_9.conda#61641e239f96eae2b8492dc7e755828c https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2#c965a5aa0d5c1c37ffc62dff36e28400 https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda#1635570038840ee3f9c71d22aa5b8b6d -https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 +https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda#172bf1cd1ff8629f2b1179945ed45055 https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3 https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_3.conda#c714d905cdfa0e70200f68b80cc04764 -https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2#b62b52da46c39ee2bc3c162ac7f1804d +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_1.conda#4b06b43d0eca61db2899e4d7a289c302 https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda#ea25936bb4080d843790b586850f82b8 https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda#30fd6e37fe21f86f4bd26d6ee73eeec7 https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.16-h0b41bf4_1.conda#28bfe2cb11357ccc5be21101a6b7ce86 @@ -80,7 +80,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_3.conda#73031c79546ad06f1fe62e57fdd021bc https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a -https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_0.conda#9b13d5ee90fc9f09d54fd403247342b4 +https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.58.0-h47da74e_1.conda#700ac6ea6d53d5510591c4344d5c989a https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda#e1c890aebdebbfbf87e2c917187b4416 https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-3.21.12-hfc55251_2.conda#e3a7d4ba09b8dc939b98fef55f539220 https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda#3b6a9f225c3dbe0d24f4fedd4625c5bf @@ -102,7 +102,7 @@ https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_9.cond https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda#9ae35c3d96db2c94ce0cef86efdfa2cb https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda#32d16ad533c59bb0a3c5ffaf16110829 -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.1-h783c2da_1.conda#70052d6c1e84643e30ffefb21ab6950f +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.3-h783c2da_0.conda#9bd06b12bbfa6fd1740fd23af4b0f0c7 https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.54.3-hb20ce57_0.conda#7af7c59ab24db007dfd82e0a3a343f66 https://conda.anaconda.org/conda-forge/linux-64/libhiredis-1.0.2-h2cc385e_0.tar.bz2#b34907d3a81a3cd8095ee83d174c074a https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.3-default_h554bfaf_1009.conda#f36ddc11ca46958197a45effdd286e45 @@ -133,15 +133,15 @@ https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#e https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_0.conda#f6c211fee3c98229652b60a9a42ef363 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.1-hfc55251_1.conda#a50918d10114a0bf80fb46c7cc692058 +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.3-hfc55251_0.conda#41d2f46e0ac8372eeb959860713d9b21 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py311h9547e67_1.conda#2c65bdf442b0d37aad080c8a4e0d452f https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda#51bb7010fc86f70eee639b4bb7a894f5 https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_ha2b6cf4_4.conda#898e0dd993afbed0d871b60c2eb33b83 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 -https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.4.0-hca28451_0.conda#1158ac1d2613b28685644931f11ee807 -https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-hfc447b1_2.conda#3cfa1ceef6936e656677ba59480106ce -https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.5.0-hca28451_0.conda#7144d5a828e2cae218e0e3c98d8a0aeb +https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-h33b98f1_7.conda#675317e46167caea24542d85c72f19a3 +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_0.conda#24e2649ebd432e652aa72cfd05f23a8e https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-h488ebb8_3.conda#128c25b7fe6a25286a48f3a6a9b5b6f3 https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 @@ -153,12 +153,12 @@ https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0. https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97 https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709 https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 -https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.10.0-h00ab1b0_2.conda#eb0d5c122f42714f86a7058d1ce7b2e6 +https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.11.0-h00ab1b0_0.conda#fde515afbbe6e36eb4564965c20b1058 https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.2.0-pyha21a80b_0.conda#978d03388b62173b8e6f79162cf52b86 https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py311h459d7ec_1.conda#a700fcb5cedd3e72d0c75d095c7a6eda -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.9.0-pyha770c72_0.conda#a92a6440c3fe7052d63244f3aba2a4a7 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.40-hd590300_0.conda#07c15d846a2e4d673da22cbd85fdb6d2 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda#82b6df12252e6f32402b96dacc656fec @@ -168,7 +168,7 @@ https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.9.3-hb447be9_1.cond https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-h3faef2a_0.conda#f907bb958910dc404647326ca80c263e https://conda.anaconda.org/conda-forge/linux-64/coverage-7.3.2-py311h459d7ec_0.conda#7b3145fed7adc7c63a0e08f6f29f5480 https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.46.0-py311h459d7ec_0.conda#a14114f70e23f7fd5ab9941fec45b095 -https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.1-hfc55251_1.conda#8d7242302bb3d03b9a690b6dda872603 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.3-hfc55251_0.conda#e08e51acc7d1ae8dbe13255e7b4c64ac https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4da50d410f553db77e62ab62ffaa1abc https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_hb11cfb5_4.conda#c90f4cbb57839c98fef8f830e4b9972f https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.12.0-hac9eb74_1.conda#0dee716254497604762957076ac76540 @@ -181,14 +181,14 @@ https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py311hb755f60_0.conda#02336abab4cb5dd794010ef53c54bd09 https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.14-hf3aad02_1.conda#a968ffa7e9fe0c257628033d393e512f https://conda.anaconda.org/conda-forge/linux-64/blas-1.0-mkl.tar.bz2#349aef876b1d8c9dccae01de20d5b385 -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.7-h98fc4e7_0.conda#6c919bafe5e03428a8e2ef319d7ef990 +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.7-h98fc4e7_1.conda#a8d71f6705ed1f70d7099a6bd1c078ac https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-16_linux64_mkl.tar.bz2#85f61af03fd291dae33150ffe89dc09a https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py311hb755f60_5.conda#e4d262cc3600e70b505a6761d29f6207 https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da https://conda.anaconda.org/conda-forge/noarch/pytest-forked-1.6.0-pyhd8ed1ab_0.conda#a46947638b6e005b63d2d6271da529b0 https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.21.0-hb942446_5.conda#07d92ed5403ad7b5c66ffd7d5b8f7e57 -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.7-h8e1006c_0.conda#065e2c1d49afa3fdc1a01f1dacd6ab09 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.7-h8e1006c_1.conda#89cd9374d5fc7371db238e4ef5c5f258 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-16_linux64_mkl.tar.bz2#361bf757b95488de76c4f123805742d3 https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-16_linux64_mkl.tar.bz2#a2f166748917d6d6e4707841ca1f519e https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-2.5.0-pyhd8ed1ab_0.tar.bz2#1fdd1f3baccf0deb647385c677a1a48e @@ -197,7 +197,7 @@ https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.2-py311h64a7726_0.con https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h82b777d_17.conda#4f01e33dbb406085a16a2813ab067e95 https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py311h9547e67_0.conda#40828c5b36ef52433e21f89943e09f33 https://conda.anaconda.org/conda-forge/linux-64/libarrow-12.0.1-hb87d912_8_cpu.conda#3f3b11398fe79b578e3c44dd00a44e4a -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.3-py311h320fe9a_0.conda#3ea3486e16d559dfcb539070ed330a1e +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py311h320fe9a_0.conda#e44ccb61b6621bf3f8053ae66eba7397 https://conda.anaconda.org/conda-forge/linux-64/polars-0.19.19-py311hf926cbc_0.conda#877bb336395d1c8bd3e8fc736dd27e7a https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py311hf0fb5b6_5.conda#ec7e45bc76d9d0b69a74a2075932b8e8 https://conda.anaconda.org/conda-forge/linux-64/pytorch-1.13.1-cpu_py311h410fd25_1.conda#ddd2fadddf89e3dc3d541a2537fce010 diff --git a/build_tools/azure/pylatest_conda_forge_mkl_no_coverage_linux-64_conda.lock b/build_tools/azure/pylatest_conda_forge_mkl_no_coverage_linux-64_conda.lock index 6eb2d284f4725..23ab9fe212c16 100644 --- a/build_tools/azure/pylatest_conda_forge_mkl_no_coverage_linux-64_conda.lock +++ b/build_tools/azure/pylatest_conda_forge_mkl_no_coverage_linux-64_conda.lock @@ -31,7 +31,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3 https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_3.conda#c714d905cdfa0e70200f68b80cc04764 -https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2#b62b52da46c39ee2bc3c162ac7f1804d +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_1.conda#4b06b43d0eca61db2899e4d7a289c302 https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda#ea25936bb4080d843790b586850f82b8 https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda#30fd6e37fe21f86f4bd26d6ee73eeec7 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 @@ -46,6 +46,7 @@ https://conda.anaconda.org/conda-forge/linux-64/nspr-4.35-h27087fc_0.conda#da0ec https://conda.anaconda.org/conda-forge/linux-64/openssl-3.2.0-hd590300_1.conda#603827b39ea2b835268adb8c821b8570 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda#700edd63ccd5fc66b70b1c028cea9a68 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 +https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.7.0-h924138e_0.tar.bz2#819421f81b127a5547bf96ad57eccdd9 https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2#4b230e8381279d76131116660f5a241a https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda#b462a33c0be1421532f28bfe8f4a7514 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda#2c80dc38fface310c9bd81b17037fee5 @@ -68,7 +69,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda#e https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda#3b6a9f225c3dbe0d24f4fedd4625c5bf https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.6-h232c23b_0.conda#427a3e59d66cb5d145020bd9c6493334 +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.2-h232c23b_0.conda#1917ed337979482731e8ac8c1bedf9dd https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_6.conda#80bf3b277c120dd294b51d404b931a75 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.42-hcad00b1_0.conda#679c8961826aa4b50653bce17ee52abe https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 @@ -80,10 +81,9 @@ https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.cond https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda#9ae35c3d96db2c94ce0cef86efdfa2cb https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda#32d16ad533c59bb0a3c5ffaf16110829 -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.1-h783c2da_1.conda#70052d6c1e84643e30ffefb21ab6950f +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.3-h783c2da_0.conda#9bd06b12bbfa6fd1740fd23af4b0f0c7 https://conda.anaconda.org/conda-forge/linux-64/libhiredis-1.0.2-h2cc385e_0.tar.bz2#b34907d3a81a3cd8095ee83d174c074a -https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.3-default_h554bfaf_1009.conda#f36ddc11ca46958197a45effdd286e45 -https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda#8a35df3cbc0c8b12cc8af9473ae75eef https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda#55ed21669b2015f77c180feb1dd41930 https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-17.0.6-h4dfa4b3_0.conda#c1665f9c1c9f6c93d8b4e492a6a39056 @@ -105,14 +105,15 @@ https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#e https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_0.conda#f6c211fee3c98229652b60a9a42ef363 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.1-hfc55251_1.conda#a50918d10114a0bf80fb46c7cc692058 +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.3-hfc55251_0.conda#41d2f46e0ac8372eeb959860713d9b21 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py312h8572e83_1.conda#c1e71f2bc05d8e8e033aefac2c490d05 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda#51bb7010fc86f70eee639b4bb7a894f5 https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_ha2b6cf4_4.conda#898e0dd993afbed0d871b60c2eb33b83 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 -https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-hfc447b1_2.conda#3cfa1ceef6936e656677ba59480106ce -https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc +https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-h33b98f1_7.conda#675317e46167caea24542d85c72f19a3 +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_0.conda#24e2649ebd432e652aa72cfd05f23a8e +https://conda.anaconda.org/conda-forge/linux-64/mkl-2023.2.0-h84fe81f_50496.conda#81d4a1a57d618adf0152db973d93b2ad https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-h488ebb8_3.conda#128c25b7fe6a25286a48f3a6a9b5b6f3 https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 @@ -124,7 +125,6 @@ https://conda.anaconda.org/conda-forge/noarch/python-tzdata-2023.3-pyhd8ed1ab_0. https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97 https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709 https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 -https://conda.anaconda.org/conda-forge/linux-64/tbb-2021.10.0-h00ab1b0_2.conda#eb0d5c122f42714f86a7058d1ce7b2e6 https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.2.0-pyha21a80b_0.conda#978d03388b62173b8e6f79162cf52b86 https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 @@ -135,35 +135,34 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.co https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_0.conda#ed67c36f215b310412b2af935bf3e530 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-h3faef2a_0.conda#f907bb958910dc404647326ca80c263e https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.46.0-py312h98912ed_0.conda#2b76aa1ec66928a4295235c29ae9d978 -https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.1-hfc55251_1.conda#8d7242302bb3d03b9a690b6dda872603 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.3-hfc55251_0.conda#e08e51acc7d1ae8dbe13255e7b4c64ac https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4da50d410f553db77e62ab62ffaa1abc +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_mkl.conda#8bf521f6007b0b0eb91515a1165b5d85 https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_hb11cfb5_4.conda#c90f4cbb57839c98fef8f830e4b9972f -https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-h5d7e998_0.conda#d8edd0e29db6fb6b6988e1a28d35d994 -https://conda.anaconda.org/conda-forge/linux-64/mkl-2023.2.0-h84fe81f_50496.conda#81d4a1a57d618adf0152db973d93b2ad +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-hd429924_1.conda#1dbcc04604fdf1e526e6d1b0b6938396 +https://conda.anaconda.org/conda-forge/linux-64/mkl-devel-2023.2.0-ha770c72_50496.conda#3b4c50e31ff098b18a450e4f5f860adf https://conda.anaconda.org/conda-forge/linux-64/pillow-10.1.0-py312hf3581a9_0.conda#c04d3de9d831a69a5fdfab1413ec2fb6 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.3-pyhd8ed1ab_0.conda#5bdca0aca30b0ee62bb84854e027eae0 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py312h30efb56_0.conda#32633871002ee9902f747d2236e0d122 -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.7-h98fc4e7_0.conda#6c919bafe5e03428a8e2ef319d7ef990 +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.7-h98fc4e7_1.conda#a8d71f6705ed1f70d7099a6bd1c078ac https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_mkl.conda#8bf521f6007b0b0eb91515a1165b5d85 -https://conda.anaconda.org/conda-forge/linux-64/mkl-devel-2023.2.0-ha770c72_50496.conda#3b4c50e31ff098b18a450e4f5f860adf -https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py312h30efb56_5.conda#8a2a122dc4fe14d8cff38f1cf426381f -https://conda.anaconda.org/conda-forge/noarch/pytest-forked-1.6.0-pyhd8ed1ab_0.conda#a46947638b6e005b63d2d6271da529b0 -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.7-h8e1006c_0.conda#065e2c1d49afa3fdc1a01f1dacd6ab09 https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_mkl.conda#7a2972758a03adc92d856072c71c9170 https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_mkl.conda#4db0cd03efcdab535f6f066aca4cddbb -https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-2.5.0-pyhd8ed1ab_0.tar.bz2#1fdd1f3baccf0deb647385c677a1a48e +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py312h30efb56_5.conda#8a2a122dc4fe14d8cff38f1cf426381f +https://conda.anaconda.org/conda-forge/noarch/pytest-forked-1.6.0-pyhd8ed1ab_0.conda#a46947638b6e005b63d2d6271da529b0 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.7-h8e1006c_1.conda#89cd9374d5fc7371db238e4ef5c5f258 https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-20_linux64_mkl.conda#3dea5e9be386b963d7f4368966e238b3 https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.2-py312heda63a1_0.conda#6d7b0ae4472449b7893345c015f486d3 -https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h82b777d_17.conda#4f01e33dbb406085a16a2813ab067e95 +https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-2.5.0-pyhd8ed1ab_0.tar.bz2#1fdd1f3baccf0deb647385c677a1a48e https://conda.anaconda.org/conda-forge/linux-64/blas-devel-3.9.0-20_linux64_mkl.conda#079d50df2338a3d47522d7e84c3dfbf6 https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py312h8572e83_0.conda#b6249daaaf4577e6f72d95fc4ab767c6 -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.3-py312hfb8ada1_0.conda#ef74af58f348d62a35c58e82aef5f868 -https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py312h949fe66_5.conda#f6548a564e2d01b2a42020259503945b +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py312hfb8ada1_0.conda#d0745ae74c2b26571b692ddde112eebb +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h450f30e_18.conda#ef0430f8df5dcdedcaaab340b228f30c https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.4-py312heda63a1_0.conda#e1fac3255958529700de75951f060710 https://conda.anaconda.org/conda-forge/linux-64/blas-2.120-mkl.conda#9444330235a4828878cbe9c897ba0aa3 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.2-py312he5832f3_0.conda#1bf345f8df6896b5a8016f16188946ba https://conda.anaconda.org/conda-forge/linux-64/pyamg-5.0.1-py312hfb10629_1.conda#79ec33a3b3e9e6858e40e6f253b174ab +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py312h949fe66_5.conda#f6548a564e2d01b2a42020259503945b https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.2-py312h7900ff3_0.conda#b409beb1dc6ebb34b767b7fb8fc70b9d diff --git a/build_tools/azure/pylatest_conda_forge_mkl_osx-64_conda.lock b/build_tools/azure/pylatest_conda_forge_mkl_osx-64_conda.lock index f6a91b63679d3..10bb23b3c31ee 100644 --- a/build_tools/azure/pylatest_conda_forge_mkl_osx-64_conda.lock +++ b/build_tools/azure/pylatest_conda_forge_mkl_osx-64_conda.lock @@ -11,7 +11,7 @@ https://conda.anaconda.org/conda-forge/osx-64/libdeflate-1.19-ha4e1b8e_0.conda#6 https://conda.anaconda.org/conda-forge/osx-64/libexpat-2.5.0-hf0c8a7f_1.conda#6c81cb022780ee33435cca0127dd43c9 https://conda.anaconda.org/conda-forge/osx-64/libffi-3.4.2-h0d85af4_5.tar.bz2#ccb34fb14960ad8b125962d3d79b31a9 https://conda.anaconda.org/conda-forge/noarch/libgfortran-devel_osx-64-12.3.0-h0b6f5ec_1.conda#ecc03a145b87ed6b8806fb02dc0e13c4 -https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.17-hac89ed1_0.tar.bz2#691d103d11180486154af49c037b7ed9 +https://conda.anaconda.org/conda-forge/osx-64/libiconv-1.17-hd75f5a5_1.conda#c4069fa5c051d41093d3fd52caffa285 https://conda.anaconda.org/conda-forge/osx-64/libjpeg-turbo-3.0.0-h0dc2134_1.conda#72507f8e3961bc968af17435060b6dd6 https://conda.anaconda.org/conda-forge/osx-64/libwebp-base-1.3.2-h0dc2134_0.conda#4e7e9d244e87d66c18d36894fd6a8ae5 https://conda.anaconda.org/conda-forge/osx-64/libzlib-1.2.13-h8a1eda9_5.conda#4a3ad23f6e16f99c04e166767193d700 @@ -33,7 +33,7 @@ https://conda.anaconda.org/conda-forge/osx-64/libgfortran5-13.2.0-h2873a65_1.con https://conda.anaconda.org/conda-forge/osx-64/libpng-1.6.39-ha978bb4_0.conda#35e4928794c5391aec14ffdf1deaaee5 https://conda.anaconda.org/conda-forge/osx-64/libsqlite-3.44.2-h92b6c6a_0.conda#d4419f90019e6a2b152cd4d32f73a82f https://conda.anaconda.org/conda-forge/osx-64/libxcb-1.15-hb7f2c08_0.conda#5513f57e0238c87c12dffedbcc9c1a4a -https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.1-hc0ae0f7_0.conda#79db8a83a64946db9422f220472898e9 +https://conda.anaconda.org/conda-forge/osx-64/libxml2-2.12.2-hc0ae0f7_0.conda#1e003cb7bfa0ebe3418b22f5a8a23024 https://conda.anaconda.org/conda-forge/osx-64/mkl-2023.2.0-h54c2260_50500.conda#0a342ccdc79e4fcd359245ac51941e7b https://conda.anaconda.org/conda-forge/osx-64/ncurses-6.4-h93d8f39_2.conda#e58f366bd4d767e9ab97ab8b272e7670 https://conda.anaconda.org/conda-forge/osx-64/openssl-3.2.0-hd75f5a5_1.conda#06cb561619487c88891839b9beb5244c @@ -104,7 +104,7 @@ https://conda.anaconda.org/conda-forge/osx-64/scipy-1.11.4-py312heccc6a5_0.conda https://conda.anaconda.org/conda-forge/osx-64/blas-2.120-mkl.conda#b041a7677a412f3d925d8208936cb1e2 https://conda.anaconda.org/conda-forge/osx-64/clangxx-16.0.6-default_h6b1ee41_3.conda#0cd1aaa751aa374141fa4c802b88674a https://conda.anaconda.org/conda-forge/osx-64/matplotlib-base-3.8.2-py312h302682c_0.conda#6a3b7c29d663a9cda13afb8f2638cc46 -https://conda.anaconda.org/conda-forge/osx-64/pandas-2.1.3-py312haf8ecfc_0.conda#d96a4b2b3dc4ae11f7fc8b736a12c3fb +https://conda.anaconda.org/conda-forge/osx-64/pandas-2.1.4-py312haf8ecfc_0.conda#cb889a75192ef98a17c3f431f6518dd2 https://conda.anaconda.org/conda-forge/osx-64/pyamg-5.0.1-py312h674694f_1.conda#e5b9c0f8b5c367467425ff34353ef761 https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da https://conda.anaconda.org/conda-forge/noarch/pytest-forked-1.6.0-pyhd8ed1ab_0.conda#a46947638b6e005b63d2d6271da529b0 diff --git a/build_tools/azure/pylatest_conda_mkl_no_openmp_osx-64_conda.lock b/build_tools/azure/pylatest_conda_mkl_no_openmp_osx-64_conda.lock index 3bdeefdf8dafe..0eb965b9bd634 100644 --- a/build_tools/azure/pylatest_conda_mkl_no_openmp_osx-64_conda.lock +++ b/build_tools/azure/pylatest_conda_mkl_no_openmp_osx-64_conda.lock @@ -15,7 +15,7 @@ https://repo.anaconda.com/pkgs/main/osx-64/libwebp-base-1.3.2-h6c40b1e_0.conda#d https://repo.anaconda.com/pkgs/main/osx-64/llvm-openmp-14.0.6-h0dcd299_0.conda#b5804d32b87dc61ca94561ade33d5f2d https://repo.anaconda.com/pkgs/main/osx-64/ncurses-6.4-hcec6c5f_0.conda#0214d1ee980e217fabc695f1e40662aa https://repo.anaconda.com/pkgs/main/noarch/tzdata-2023c-h04d1e81_0.conda#29db02adf8808f7c64642cead3e28acd -https://repo.anaconda.com/pkgs/main/osx-64/xz-5.4.2-h6c40b1e_0.conda#5e546d3c9765b4441e511804d58f6e3f +https://repo.anaconda.com/pkgs/main/osx-64/xz-5.4.5-h6c40b1e_0.conda#351c5d33fe551018a2068e7a2ca8a6c1 https://repo.anaconda.com/pkgs/main/osx-64/zlib-1.2.13-h4dc903c_0.conda#d0202dd912bfb45d3422786531717882 https://repo.anaconda.com/pkgs/main/osx-64/ccache-3.7.9-hf120daa_0.conda#a01515a32e721c51d631283f991bc8ea https://repo.anaconda.com/pkgs/main/osx-64/intel-openmp-2023.1.0-ha357a0b_43548.conda#ba8a89ffe593eb88e4c01334753c40c3 @@ -78,5 +78,5 @@ https://repo.anaconda.com/pkgs/main/osx-64/mkl_random-1.2.4-py311ha357a0b_0.cond https://repo.anaconda.com/pkgs/main/osx-64/numpy-1.24.3-py311h728a8a3_1.conda#68069c79ebb0cdd2561026a909a57183 https://repo.anaconda.com/pkgs/main/osx-64/numexpr-2.8.7-py311h728a8a3_0.conda#21a483a6825576049b1abda53076ef3e https://repo.anaconda.com/pkgs/main/osx-64/scipy-1.11.4-py311h224febf_0.conda#c1db23a0c898869d0f4f02831f9e31e3 -https://repo.anaconda.com/pkgs/main/osx-64/pandas-2.1.1-py311hdb55bb0_0.conda#cb028f3ed9d530507a0b9e83b96a6e2c +https://repo.anaconda.com/pkgs/main/osx-64/pandas-2.1.4-py311hdb55bb0_0.conda#b118594fae66a7cd93c088f75de7faca https://repo.anaconda.com/pkgs/main/osx-64/pyamg-4.2.3-py311h37a6a59_0.conda#5fca7d043dc68c1d7acc22aa03a24918 diff --git a/build_tools/azure/pylatest_pip_openblas_pandas_linux-64_conda.lock b/build_tools/azure/pylatest_pip_openblas_pandas_linux-64_conda.lock index 6e47be4dd450d..ff6980c051d83 100644 --- a/build_tools/azure/pylatest_pip_openblas_pandas_linux-64_conda.lock +++ b/build_tools/azure/pylatest_pip_openblas_pandas_linux-64_conda.lock @@ -13,7 +13,7 @@ https://repo.anaconda.com/pkgs/main/linux-64/libgcc-ng-11.2.0-h1234567_1.conda#a https://repo.anaconda.com/pkgs/main/linux-64/libffi-3.4.4-h6a678d5_0.conda#06e288f9250abef59b9a367d151fc339 https://repo.anaconda.com/pkgs/main/linux-64/ncurses-6.4-h6a678d5_0.conda#5558eec6e2191741a92f832ea826251c https://repo.anaconda.com/pkgs/main/linux-64/openssl-3.0.12-h7f8727e_0.conda#48caaebab690276acf1bc1f3b56febf4 -https://repo.anaconda.com/pkgs/main/linux-64/xz-5.4.2-h5eee18b_0.conda#bcd31de48a0dcb44bc5b99675800c5cc +https://repo.anaconda.com/pkgs/main/linux-64/xz-5.4.5-h5eee18b_0.conda#fb0f709ab3eb6ad3538677c327646581 https://repo.anaconda.com/pkgs/main/linux-64/zlib-1.2.13-h5eee18b_0.conda#333e31fbfbb5057c92fa845ad6adef93 https://repo.anaconda.com/pkgs/main/linux-64/ccache-3.7.9-hfe4627d_0.conda#bef6fc681c273bb7bd0c67d1a591365e https://repo.anaconda.com/pkgs/main/linux-64/readline-8.2-h5eee18b_0.conda#be42180685cce6e6b0329201d9f48efb @@ -24,7 +24,7 @@ https://repo.anaconda.com/pkgs/main/linux-64/setuptools-68.0.0-py39h06a4308_0.co https://repo.anaconda.com/pkgs/main/linux-64/wheel-0.41.2-py39h06a4308_0.conda#ec1b8213c3585defaa6042ed2f95861d https://repo.anaconda.com/pkgs/main/linux-64/pip-23.3.1-py39h06a4308_0.conda#685007e3dae59d211620f19926577bd6 # pip alabaster @ https://files.pythonhosted.org/packages/64/88/c7083fc61120ab661c5d0b82cb77079fc1429d3f913a456c1c82cf4658f7/alabaster-0.7.13-py3-none-any.whl#sha256=1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 -# pip babel @ https://files.pythonhosted.org/packages/86/14/5dc2eb02b7cc87b2f95930310a2cc5229198414919a116b564832c747bc1/Babel-2.13.1-py3-none-any.whl#sha256=7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed +# pip babel @ https://files.pythonhosted.org/packages/0d/35/4196b21041e29a42dc4f05866d0c94fa26c9da88ce12c38c2265e42c82fb/Babel-2.14.0-py3-none-any.whl#sha256=efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287 # pip certifi @ https://files.pythonhosted.org/packages/64/62/428ef076be88fa93716b576e4a01f919d25968913e817077a386fcbe4f42/certifi-2023.11.17-py3-none-any.whl#sha256=e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474 # pip charset-normalizer @ https://files.pythonhosted.org/packages/98/69/5d8751b4b670d623aa7a47bef061d69c279e9f922f6705147983aa76c3ce/charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796 # pip cycler @ https://files.pythonhosted.org/packages/e7/05/c19819d5e3d95294a6f5947fb9b9629efb316b96de511b418c53d245aae6/cycler-0.12.1-py3-none-any.whl#sha256=85cef7cff222d8644161529808465972e51340599459b8ac3ccbac5a854e0d30 @@ -60,7 +60,7 @@ https://repo.anaconda.com/pkgs/main/linux-64/pip-23.3.1-py39h06a4308_0.conda#685 # pip zipp @ https://files.pythonhosted.org/packages/d9/66/48866fc6b158c81cc2bfecc04c480f105c6040e8b077bc54c634b4a67926/zipp-3.17.0-py3-none-any.whl#sha256=0e923e726174922dce09c53c59ad483ff7bbb8e572e00c7f7c46b88556409f31 # pip contourpy @ https://files.pythonhosted.org/packages/a9/ba/d8fd1380876f1e9114157606302e3644c85f6d116aeba354c212ee13edc7/contourpy-1.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=11f8d2554e52f459918f7b8e6aa20ec2a3bce35ce95c1f0ef4ba36fbda306df5 # pip coverage @ https://files.pythonhosted.org/packages/f1/e7/6d778d717d178c8c73103e2c467f3c8d8ebc9cacb825ebe3f3cf05e7c6df/coverage-7.3.2-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=149de1d2401ae4655c436a3dced6dd153f4c3309f599c3d4bd97ab172eaf02d9 -# pip imageio @ https://files.pythonhosted.org/packages/fa/04/9abe71dfe8c77f5ee58e8c50df3b562884f7494b56c318b867bd2dcb6ec8/imageio-2.33.0-py3-none-any.whl#sha256=d580d6576d0ae39c459a444a23f6f61fe72123a3df2264f5fce8c87784a4be2e +# pip imageio @ https://files.pythonhosted.org/packages/c0/69/3aaa69cb0748e33e644fda114c9abd3186ce369edd4fca11107e9f39c6a7/imageio-2.33.1-py3-none-any.whl#sha256=c5094c48ccf6b2e6da8b4061cd95e1209380afafcbeae4a4e280938cce227e1d # pip importlib-metadata @ https://files.pythonhosted.org/packages/73/26/9777cfe0cdc8181a32eaf542f4a2a435e5aba5dd38f41cfc0a532dc51027/importlib_metadata-7.0.0-py3-none-any.whl#sha256=d97503976bb81f40a193d41ee6570868479c69d5068651eb039c40d850c59d67 # pip importlib-resources @ https://files.pythonhosted.org/packages/93/e8/facde510585869b5ec694e8e0363ffe4eba067cb357a8398a55f6a1f8023/importlib_resources-6.1.1-py3-none-any.whl#sha256=e8bf90d8213b486f428c9c39714b920041cb02c184686a3dee24905aaa8105d6 # pip jinja2 @ https://files.pythonhosted.org/packages/bc/c3/f068337a370801f372f2f8f6bad74a5c140f6fda3d9de154052708dd3c65/Jinja2-3.1.2-py3-none-any.whl#sha256=6088930bfe239f0e6710546ab9c19c9ef35e29792895fed6e6e31a023a182a61 @@ -68,10 +68,10 @@ https://repo.anaconda.com/pkgs/main/linux-64/pip-23.3.1-py39h06a4308_0.conda#685 # pip python-dateutil @ https://files.pythonhosted.org/packages/36/7a/87837f39d0296e723bb9b62bbb257d0355c7f6128853c78955f57342a56d/python_dateutil-2.8.2-py2.py3-none-any.whl#sha256=961d03dc3453ebbc59dbdea9e4e11c5651520a876d0f4db161e8674aae935da9 # pip requests @ https://files.pythonhosted.org/packages/70/8e/0e2d847013cb52cd35b38c009bb167a1a26b2ce6cd6965bf26b47bc0bf44/requests-2.31.0-py3-none-any.whl#sha256=58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f # pip scipy @ https://files.pythonhosted.org/packages/db/86/bf3f01f003224c00dd94d9443d676023ed65d63ea2e34356888dc7fa8f48/scipy-1.11.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=91af76a68eeae0064887a48e25c4e616fa519fa0d38602eda7e0f97d65d57937 -# pip tifffile @ https://files.pythonhosted.org/packages/f5/72/68ea763b5f3e3d9871492683059ed4724fd700dbe54aa03cdda7a9692129/tifffile-2023.9.26-py3-none-any.whl#sha256=1de47fa945fddaade256e25ad4f375ae65547f3c1354063aded881c32a64cf89 +# pip tifffile @ https://files.pythonhosted.org/packages/54/a4/569fc717831969cf48bced350bdaf070cdeab06918d179429899e144358d/tifffile-2023.12.9-py3-none-any.whl#sha256=9b066e4b1a900891ea42ffd33dab8ba34c537935618b9893ddef42d7d422692f # pip lightgbm @ https://files.pythonhosted.org/packages/b8/9d/1ce80cee7c5ef60f2fcc7e9fa97f29f7a8de3dc5a08922b3b2f1e9106481/lightgbm-4.1.0-py3-none-manylinux_2_28_x86_64.whl#sha256=47578cff4bc8116b62adc02437bf2b49dcc7ad4e8e3dd8dad3fe88e694d74d93 # pip matplotlib @ https://files.pythonhosted.org/packages/53/1f/653d60d2ec81a6095fa3e571cf2de57742bab8a51a5c01de26730ce3dc53/matplotlib-3.8.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=5864bdd7da445e4e5e011b199bb67168cdad10b501750367c496420f2ad00843 -# pip pandas @ https://files.pythonhosted.org/packages/4e/7b/6c251522fd21ad2a51f26df677582ed917650cb8dff286e17625e7a6531b/pandas-2.1.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=1329dbe93a880a3d7893149979caa82d6ba64a25e471682637f846d9dbc10dd2 +# pip pandas @ https://files.pythonhosted.org/packages/bc/f8/2aa75ae200bdb9dc6967712f26628a06bf45d3ad94cbbf6fb4962ada15a3/pandas-2.1.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=1ebfd771110b50055712b3b711b51bee5d50135429364d0498e1213a7adc2be8 # pip pyamg @ https://files.pythonhosted.org/packages/35/1c/8b2aa6fbb2bae258ab6cdb35b09635bf50865ac2bcdaf220db3d972cc0d8/pyamg-5.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=1332acec6d5ede9440c8ced0ef20952f5b766387116f254b79880ce29fdecee7 # pip pytest-cov @ https://files.pythonhosted.org/packages/a7/4b/8b78d126e275efa2379b1c2e09dc52cf70df16fc3b90613ef82531499d73/pytest_cov-4.1.0-py3-none-any.whl#sha256=6ba70b9e97e69fcc3fb45bfeab2d0a138fb65c4d0d6a41ef33983ad114be8c3a # pip pytest-forked @ https://files.pythonhosted.org/packages/f4/af/9c0bda43e486a3c9bf1e0f876d0f241bc3f229d7d65d09331a0868db9629/pytest_forked-1.6.0-py3-none-any.whl#sha256=810958f66a91afb1a1e2ae83089d8dc1cd2437ac96b12963042fbb9fb4d16af0 diff --git a/build_tools/azure/pylatest_pip_scipy_dev_linux-64_conda.lock b/build_tools/azure/pylatest_pip_scipy_dev_linux-64_conda.lock index 7e358b3434725..0f98f987d6851 100644 --- a/build_tools/azure/pylatest_pip_scipy_dev_linux-64_conda.lock +++ b/build_tools/azure/pylatest_pip_scipy_dev_linux-64_conda.lock @@ -15,7 +15,7 @@ https://repo.anaconda.com/pkgs/main/linux-64/libffi-3.4.4-h6a678d5_0.conda#06e28 https://repo.anaconda.com/pkgs/main/linux-64/libuuid-1.41.5-h5eee18b_0.conda#4a6a2354414c9080327274aa514e5299 https://repo.anaconda.com/pkgs/main/linux-64/ncurses-6.4-h6a678d5_0.conda#5558eec6e2191741a92f832ea826251c https://repo.anaconda.com/pkgs/main/linux-64/openssl-3.0.12-h7f8727e_0.conda#48caaebab690276acf1bc1f3b56febf4 -https://repo.anaconda.com/pkgs/main/linux-64/xz-5.4.2-h5eee18b_0.conda#bcd31de48a0dcb44bc5b99675800c5cc +https://repo.anaconda.com/pkgs/main/linux-64/xz-5.4.5-h5eee18b_0.conda#fb0f709ab3eb6ad3538677c327646581 https://repo.anaconda.com/pkgs/main/linux-64/zlib-1.2.13-h5eee18b_0.conda#333e31fbfbb5057c92fa845ad6adef93 https://repo.anaconda.com/pkgs/main/linux-64/ccache-3.7.9-hfe4627d_0.conda#bef6fc681c273bb7bd0c67d1a591365e https://repo.anaconda.com/pkgs/main/linux-64/readline-8.2-h5eee18b_0.conda#be42180685cce6e6b0329201d9f48efb @@ -26,7 +26,7 @@ https://repo.anaconda.com/pkgs/main/linux-64/setuptools-68.0.0-py311h06a4308_0.c https://repo.anaconda.com/pkgs/main/linux-64/wheel-0.41.2-py311h06a4308_0.conda#2d4ff85d3dfb7749ae0485ee148d4ea5 https://repo.anaconda.com/pkgs/main/linux-64/pip-23.3.1-py311h06a4308_0.conda#6fdb2a3c731f093b0014450a071c7f7f # pip alabaster @ https://files.pythonhosted.org/packages/64/88/c7083fc61120ab661c5d0b82cb77079fc1429d3f913a456c1c82cf4658f7/alabaster-0.7.13-py3-none-any.whl#sha256=1ee19aca801bbabb5ba3f5f258e4422dfa86f82f3e9cefb0859b283cdd7f62a3 -# pip babel @ https://files.pythonhosted.org/packages/86/14/5dc2eb02b7cc87b2f95930310a2cc5229198414919a116b564832c747bc1/Babel-2.13.1-py3-none-any.whl#sha256=7077a4984b02b6727ac10f1f7294484f737443d7e2e66c5e4380e41a3ae0b4ed +# pip babel @ https://files.pythonhosted.org/packages/0d/35/4196b21041e29a42dc4f05866d0c94fa26c9da88ce12c38c2265e42c82fb/Babel-2.14.0-py3-none-any.whl#sha256=efb1a25b7118e67ce3a259bed20545c29cb68be8ad2c784c83689981b7a57287 # pip certifi @ https://files.pythonhosted.org/packages/64/62/428ef076be88fa93716b576e4a01f919d25968913e817077a386fcbe4f42/certifi-2023.11.17-py3-none-any.whl#sha256=e036ab49d5b79556f99cfc2d9320b34cfbe5be05c5871b51de9329f0603b0474 # pip charset-normalizer @ https://files.pythonhosted.org/packages/40/26/f35951c45070edc957ba40a5b1db3cf60a9dbb1b350c2d5bef03e01e61de/charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8 # pip coverage @ https://files.pythonhosted.org/packages/bc/01/bf243cf5c926681b35d0c6aa9a3b33da35ab65323c4a593d386b08a0249e/coverage-7.3.2-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=4175e10cc8dda0265653e8714b3174430b07c1dca8957f4966cbd6c2b1b8065a @@ -37,7 +37,7 @@ https://repo.anaconda.com/pkgs/main/linux-64/pip-23.3.1-py311h06a4308_0.conda#6f # pip iniconfig @ https://files.pythonhosted.org/packages/ef/a6/62565a6e1cf69e10f5727360368e451d4b7f58beeac6173dc9db836a5b46/iniconfig-2.0.0-py3-none-any.whl#sha256=b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374 # pip markupsafe @ https://files.pythonhosted.org/packages/fe/21/2eff1de472ca6c99ec3993eab11308787b9879af9ca8bbceb4868cf4f2ca/MarkupSafe-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=bfce63a9e7834b12b87c64d6b155fdd9b3b96191b6bd334bf37db7ff1fe457f2 # pip packaging @ https://files.pythonhosted.org/packages/ec/1a/610693ac4ee14fcdf2d9bf3c493370e4f2ef7ae2e19217d7a237ff42367d/packaging-23.2-py3-none-any.whl#sha256=8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7 -# pip platformdirs @ https://files.pythonhosted.org/packages/31/16/70be3b725073035aa5fc3229321d06e22e73e3e09f6af78dcfdf16c7636c/platformdirs-4.0.0-py3-none-any.whl#sha256=118c954d7e949b35437270383a3f2531e99dd93cf7ce4dc8340d3356d30f173b +# pip platformdirs @ https://files.pythonhosted.org/packages/be/53/42fe5eab4a09d251a76d0043e018172db324a23fcdac70f77a551c11f618/platformdirs-4.1.0-py3-none-any.whl#sha256=11c8f37bcca40db96d8144522d925583bdb7a31f7b0e37e3ed4318400a8e2380 # pip pluggy @ https://files.pythonhosted.org/packages/05/b8/42ed91898d4784546c5f06c60506400548db3f7a4b3fb441cba4e5c17952/pluggy-1.3.0-py3-none-any.whl#sha256=d89c696a773f8bd377d18e5ecda92b7a3793cbe66c87060a6fb58c7b6e1061f7 # pip py @ https://files.pythonhosted.org/packages/f6/f0/10642828a8dfb741e5f3fbaac830550a518a775c7fff6f04a007259b0548/py-1.11.0-py2.py3-none-any.whl#sha256=607c53218732647dff4acdfcd50cb62615cedf612e72d1724fb1a0cc6405b378 # pip pygments @ https://files.pythonhosted.org/packages/97/9c/372fef8377a6e340b1704768d20daaded98bf13282b5327beb2e2fe2c7ef/pygments-2.17.2-py3-none-any.whl#sha256=b27c2826c47d0f3219f29554824c30c5e8945175d888647acd804ddd04af846c diff --git a/build_tools/azure/py38_conda_defaults_openblas_environment.yml b/build_tools/azure/pymin_conda_defaults_openblas_environment.yml similarity index 88% rename from build_tools/azure/py38_conda_defaults_openblas_environment.yml rename to build_tools/azure/pymin_conda_defaults_openblas_environment.yml index f0e5c653cb2de..9f6a649249cbe 100644 --- a/build_tools/azure/py38_conda_defaults_openblas_environment.yml +++ b/build_tools/azure/pymin_conda_defaults_openblas_environment.yml @@ -4,10 +4,10 @@ channels: - defaults dependencies: - - python=3.8 - - numpy=1.17.3 # min + - python=3.9 + - numpy=1.21 - blas[build=openblas] - - scipy=1.5.0 # min + - scipy=1.7 - cython=0.29.33 # min - joblib - threadpoolctl=2.2.0 diff --git a/build_tools/azure/py38_conda_defaults_openblas_linux-64_conda.lock b/build_tools/azure/pymin_conda_defaults_openblas_linux-64_conda.lock similarity index 67% rename from build_tools/azure/py38_conda_defaults_openblas_linux-64_conda.lock rename to build_tools/azure/pymin_conda_defaults_openblas_linux-64_conda.lock index 473faec3bdf2b..32eeb4b9c9118 100644 --- a/build_tools/azure/py38_conda_defaults_openblas_linux-64_conda.lock +++ b/build_tools/azure/pymin_conda_defaults_openblas_linux-64_conda.lock @@ -1,25 +1,27 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 59b748d4b41a3e69462c0c657961aebaa5b15bc3caad670dff038296fa151c6e +# input_hash: 9e735ba6c65ff977fbfdb3bade1b172aca761f7e774bf4b2814dc2efb8b9fa3b @EXPLICIT https://repo.anaconda.com/pkgs/main/linux-64/_libgcc_mutex-0.1-main.conda#c3473ff8bdb3d124ed5ff11ec380d6f9 https://repo.anaconda.com/pkgs/main/linux-64/blas-1.0-openblas.conda#9ddfcaef10d79366c90128f5dc444be8 https://repo.anaconda.com/pkgs/main/linux-64/ca-certificates-2023.08.22-h06a4308_0.conda#243d5065a09a3e85ab888c05f5b6445a https://repo.anaconda.com/pkgs/main/linux-64/ld_impl_linux-64-2.38-h1181459_1.conda#68eedfd9c06f2b0e6888d8db345b7f5b -https://repo.anaconda.com/pkgs/main/linux-64/libgfortran4-7.5.0-ha8ba4b0_17.conda#e3883581cbf0a98672250c3e80d292bf -https://repo.anaconda.com/pkgs/main/linux-64/libgfortran-ng-7.5.0-ha8ba4b0_17.conda#ecb35c8952579d5c8dc56c6e076ba948 +https://repo.anaconda.com/pkgs/main/linux-64/libgfortran5-11.2.0-h1234567_1.conda#36a01a8c30e0cadf0d3e842c50b73f3b +https://repo.anaconda.com/pkgs/main/noarch/tzdata-2023c-h04d1e81_0.conda#29db02adf8808f7c64642cead3e28acd +https://repo.anaconda.com/pkgs/main/linux-64/libgfortran-ng-11.2.0-h00389a5_1.conda#7429b67ab7b1d7cb99b9d1f3ddaec6e3 https://repo.anaconda.com/pkgs/main/linux-64/libgomp-11.2.0-h1234567_1.conda#b372c0eea9b60732fdae4b817a63c8cd https://repo.anaconda.com/pkgs/main/linux-64/libstdcxx-ng-11.2.0-h1234567_1.conda#57623d10a70e09e1d048c2b2b6f4e2dd https://repo.anaconda.com/pkgs/main/linux-64/_openmp_mutex-5.1-1_gnu.conda#71d281e9c2192cb3fa425655a8defb85 https://repo.anaconda.com/pkgs/main/linux-64/libgcc-ng-11.2.0-h1234567_1.conda#a87728dabf3151fb9cfa990bd2eb0464 https://repo.anaconda.com/pkgs/main/linux-64/expat-2.5.0-h6a678d5_0.conda#9a21d99d49a0a556cf9590430dec8ec0 +https://repo.anaconda.com/pkgs/main/linux-64/fftw-3.3.9-h27cfd23_1.conda#d266674fbd3345d45a69896e1bdef8be https://repo.anaconda.com/pkgs/main/linux-64/giflib-5.2.1-h5eee18b_3.conda#aa7d64adb3cd8a75d398167f8c29afc3 https://repo.anaconda.com/pkgs/main/linux-64/icu-73.1-h6a678d5_0.conda#6d09df641fc23f7d277a04dc7ea32dd4 https://repo.anaconda.com/pkgs/main/linux-64/jpeg-9e-h5eee18b_1.conda#ac373800fda872108412d1ccfe3fa572 https://repo.anaconda.com/pkgs/main/linux-64/lerc-3.0-h295c915_0.conda#b97309770412f10bed8d9448f6f98f87 https://repo.anaconda.com/pkgs/main/linux-64/libdeflate-1.17-h5eee18b_1.conda#82831ef0b6c9595382d74e0c281f6742 https://repo.anaconda.com/pkgs/main/linux-64/libffi-3.4.4-h6a678d5_0.conda#06e288f9250abef59b9a367d151fc339 -https://repo.anaconda.com/pkgs/main/linux-64/libopenblas-0.3.18-hf726d26_0.conda#10422bb3b9b022e27798fc368cda69ba +https://repo.anaconda.com/pkgs/main/linux-64/libopenblas-0.3.21-h043d6bf_0.conda#7f7324dcc3c4761a14f3e4ac443235a7 https://repo.anaconda.com/pkgs/main/linux-64/libuuid-1.41.5-h5eee18b_0.conda#4a6a2354414c9080327274aa514e5299 https://repo.anaconda.com/pkgs/main/linux-64/libwebp-base-1.3.2-h5eee18b_0.conda#9179fc7baefa1e027f572edbc519d805 https://repo.anaconda.com/pkgs/main/linux-64/libxcb-1.15-h7f8727e_0.conda#ada518dcadd6aaee9aae47ba9a671553 @@ -27,7 +29,7 @@ https://repo.anaconda.com/pkgs/main/linux-64/lz4-c-1.9.4-h6a678d5_0.conda#53915e https://repo.anaconda.com/pkgs/main/linux-64/ncurses-6.4-h6a678d5_0.conda#5558eec6e2191741a92f832ea826251c https://repo.anaconda.com/pkgs/main/linux-64/openssl-3.0.12-h7f8727e_0.conda#48caaebab690276acf1bc1f3b56febf4 https://repo.anaconda.com/pkgs/main/linux-64/pcre-8.45-h295c915_0.conda#b32ccc24d1d9808618c1e898da60f68d -https://repo.anaconda.com/pkgs/main/linux-64/xz-5.4.2-h5eee18b_0.conda#bcd31de48a0dcb44bc5b99675800c5cc +https://repo.anaconda.com/pkgs/main/linux-64/xz-5.4.5-h5eee18b_0.conda#fb0f709ab3eb6ad3538677c327646581 https://repo.anaconda.com/pkgs/main/linux-64/zlib-1.2.13-h5eee18b_0.conda#333e31fbfbb5057c92fa845ad6adef93 https://repo.anaconda.com/pkgs/main/linux-64/ccache-3.7.9-hfe4627d_0.conda#bef6fc681c273bb7bd0c67d1a591365e https://repo.anaconda.com/pkgs/main/linux-64/glib-2.69.1-he621ea3_2.conda#51cf1899782b3f3744aedd143fbc07f3 @@ -55,43 +57,45 @@ https://repo.anaconda.com/pkgs/main/linux-64/libclang-14.0.6-default_hc6dbbc7_1. https://repo.anaconda.com/pkgs/main/linux-64/libpq-12.15-hdbd6064_1.conda#218227d255f6056b6f49f52dd0d1731f https://repo.anaconda.com/pkgs/main/linux-64/libwebp-1.3.2-h11a3e52_0.conda#9e0d6c9abdd97b076c66d4cf488589ee https://repo.anaconda.com/pkgs/main/linux-64/openjpeg-2.4.0-h3ad879b_0.conda#86baecb47ecaa7f7ff2657a1f03b90c9 -https://repo.anaconda.com/pkgs/main/linux-64/python-3.8.18-h955ad1f_0.conda#fa35c1028f48db26df051ee75dd9422f -https://repo.anaconda.com/pkgs/main/linux-64/certifi-2023.11.17-py38h06a4308_0.conda#3c4c381d8521859fcfde56ef2e3e5c40 +https://repo.anaconda.com/pkgs/main/linux-64/python-3.9.18-h955ad1f_0.conda#65fb745edecf85675ed0487fc54316b5 +https://repo.anaconda.com/pkgs/main/linux-64/certifi-2023.11.17-py39h06a4308_0.conda#0c9e433ce0339763a520ae5663ba352d https://repo.anaconda.com/pkgs/main/noarch/cycler-0.11.0-pyhd3eb1b0_0.conda#f5e365d2cdb66d547eb8c3ab93843aab -https://repo.anaconda.com/pkgs/main/linux-64/cython-0.29.33-py38h6a678d5_0.conda#eb105388ba8bcf5ce82cf4cd5deeb5f9 -https://repo.anaconda.com/pkgs/main/linux-64/exceptiongroup-1.0.4-py38h06a4308_0.conda#db954e73dca6076c64a1004d71b45784 +https://repo.anaconda.com/pkgs/main/linux-64/cython-0.29.33-py39h6a678d5_0.conda#95eb1c0bbb563cf6238978ffc1c01d90 +https://repo.anaconda.com/pkgs/main/linux-64/exceptiongroup-1.0.4-py39h06a4308_0.conda#24efdd890b4d7e3e5b99784a87077709 https://repo.anaconda.com/pkgs/main/noarch/execnet-1.9.0-pyhd3eb1b0_0.conda#f895937671af67cebb8af617494b3513 https://repo.anaconda.com/pkgs/main/noarch/iniconfig-1.1.1-pyhd3eb1b0_0.tar.bz2#e40edff2c5708f342cef43c7f280c507 -https://repo.anaconda.com/pkgs/main/linux-64/joblib-1.2.0-py38h06a4308_0.conda#ee7f1f50ae15650057e5d5301900ae34 -https://repo.anaconda.com/pkgs/main/linux-64/kiwisolver-1.4.4-py38h6a678d5_0.conda#7424aa335d22974192800ec19a68486e +https://repo.anaconda.com/pkgs/main/linux-64/joblib-1.2.0-py39h06a4308_0.conda#ac1f5687d70aa1128cbecb26bc9e559d +https://repo.anaconda.com/pkgs/main/linux-64/kiwisolver-1.4.4-py39h6a678d5_0.conda#3d57aedbfbd054ce57fb3c1e4448828c https://repo.anaconda.com/pkgs/main/linux-64/mysql-5.7.24-h721c034_2.conda#dfc19ca2466d275c4c1f73b62c57f37b -https://repo.anaconda.com/pkgs/main/linux-64/numpy-base-1.17.3-py38h2f8d375_0.conda#40edbb76ecacefb1e6ab639b514822b1 -https://repo.anaconda.com/pkgs/main/linux-64/packaging-23.1-py38h06a4308_0.conda#9ec9b6ee22dad7f49806c51218befd5b -https://repo.anaconda.com/pkgs/main/linux-64/pillow-10.0.1-py38ha6cbd5a_0.conda#a27702df8dc6874ab9baeef7ffb565f3 -https://repo.anaconda.com/pkgs/main/linux-64/pluggy-1.0.0-py38h06a4308_1.conda#87bb1d3f6cf3e409a1dac38cee99918e -https://repo.anaconda.com/pkgs/main/linux-64/ply-3.11-py38_0.conda#d6a69c576c6e4d19e3074eaae3d149f2 +https://repo.anaconda.com/pkgs/main/linux-64/numpy-base-1.21.5-py39h1e6e340_3.conda#8e39e800797e1f967d10a778c129a4f2 +https://repo.anaconda.com/pkgs/main/linux-64/packaging-23.1-py39h06a4308_0.conda#b8179f352917de28dd6bdbbb79e1db3f +https://repo.anaconda.com/pkgs/main/linux-64/pillow-10.0.1-py39ha6cbd5a_0.conda#a16f050efc583049a46accd497525967 +https://repo.anaconda.com/pkgs/main/linux-64/pluggy-1.0.0-py39h06a4308_1.conda#fb4fed11ed43cf727dbd51883cc1d9fa +https://repo.anaconda.com/pkgs/main/linux-64/ply-3.11-py39h06a4308_0.conda#6c89bf6d2fdf6d24126e34cb83fd10f1 https://repo.anaconda.com/pkgs/main/noarch/py-1.11.0-pyhd3eb1b0_0.conda#7205a898ed2abbf6e9b903dff6abe08e -https://repo.anaconda.com/pkgs/main/linux-64/pyparsing-3.0.9-py38h06a4308_0.conda#becbbf51d2b05de228eed968e20f963d -https://repo.anaconda.com/pkgs/main/linux-64/pyqt5-sip-12.13.0-py38h5eee18b_0.conda#0ebb310c44968880835aefbf9fbbfa2c -https://repo.anaconda.com/pkgs/main/linux-64/pytz-2023.3.post1-py38h06a4308_0.conda#351d59ddfed216ab9b05481d3bb63106 -https://repo.anaconda.com/pkgs/main/linux-64/setuptools-68.0.0-py38h06a4308_0.conda#24f9c895455f3992d6b04957fd0e7546 +https://repo.anaconda.com/pkgs/main/linux-64/pyparsing-3.0.9-py39h06a4308_0.conda#3a0537468e59760404f63b4f04369828 +https://repo.anaconda.com/pkgs/main/linux-64/pyqt5-sip-12.13.0-py39h5eee18b_0.conda#256840c3841b52346ea5743be8490ede +https://repo.anaconda.com/pkgs/main/linux-64/pytz-2023.3.post1-py39h06a4308_0.conda#0089cedc881d263480200b4e26377352 +https://repo.anaconda.com/pkgs/main/linux-64/setuptools-68.0.0-py39h06a4308_0.conda#0af0f107fd4cfe0b3b46ce9fe0471873 https://repo.anaconda.com/pkgs/main/noarch/six-1.16.0-pyhd3eb1b0_1.conda#34586824d411d36af2fa40e799c172d0 https://repo.anaconda.com/pkgs/main/noarch/threadpoolctl-2.2.0-pyh0d69192_0.conda#bbfdbae4934150b902f97daaf287efe2 https://repo.anaconda.com/pkgs/main/noarch/toml-0.10.2-pyhd3eb1b0_0.conda#cda05f5f6d8509529d1a2743288d197a -https://repo.anaconda.com/pkgs/main/linux-64/tomli-2.0.1-py38h06a4308_0.conda#791cce9de9913e9587b0a85cd8419123 -https://repo.anaconda.com/pkgs/main/linux-64/tornado-6.3.3-py38h5eee18b_0.conda#8030fb73590f8370a558f783b4f9f030 -https://repo.anaconda.com/pkgs/main/linux-64/coverage-7.2.2-py38h5eee18b_0.conda#a05c1732d4e67102d2aa8d7e56de778b -https://repo.anaconda.com/pkgs/main/linux-64/numpy-1.17.3-py38h7e8d029_0.conda#5f2b196b515f8fe6b37e3d224650577d -https://repo.anaconda.com/pkgs/main/linux-64/pytest-7.4.0-py38h06a4308_0.conda#ba6c58ef1c6ba5247ccc17d41fdd71e5 +https://repo.anaconda.com/pkgs/main/linux-64/tomli-2.0.1-py39h06a4308_0.conda#b06dffe7ddca2645ed72f5116f0a087d +https://repo.anaconda.com/pkgs/main/linux-64/tornado-6.3.3-py39h5eee18b_0.conda#9c4bd985bb8adcd12f47e790e95a9333 +https://repo.anaconda.com/pkgs/main/linux-64/coverage-7.2.2-py39h5eee18b_0.conda#e9da151b7e1f56be2cb569c65949a1d2 +https://repo.anaconda.com/pkgs/main/linux-64/numpy-1.21.5-py39hf838250_3.conda#417289c32cff118816482ae5f17d6c02 +https://repo.anaconda.com/pkgs/main/linux-64/pytest-7.4.0-py39h06a4308_0.conda#99d92a7a39f7e615de84f8cc5606c49a https://repo.anaconda.com/pkgs/main/noarch/python-dateutil-2.8.2-pyhd3eb1b0_0.conda#211ee00320b08a1ac9fea6677649f6c9 https://repo.anaconda.com/pkgs/main/linux-64/qt-main-5.15.2-h53bd1ea_10.conda#bd0c79e82df6323f638bdcb871891b61 -https://repo.anaconda.com/pkgs/main/linux-64/sip-6.7.12-py38h6a678d5_0.conda#3a940732bb7fcf43ec398ce06be29eb4 -https://repo.anaconda.com/pkgs/main/linux-64/matplotlib-base-3.3.4-py38h62a2d02_0.conda#7156fafe3362d0b6a2de43e0002febb3 -https://repo.anaconda.com/pkgs/main/linux-64/pandas-1.2.4-py38ha9443f7_0.conda#5bd3fd807a294f387feabc65821b75d0 -https://repo.anaconda.com/pkgs/main/linux-64/pyqt-5.15.10-py38h6a678d5_0.conda#5251f84010c75d82f672974e69c67cd6 -https://repo.anaconda.com/pkgs/main/linux-64/pytest-cov-4.1.0-py38h06a4308_1.conda#6b5a671f724b1520b19f48988ad99083 -https://repo.anaconda.com/pkgs/main/linux-64/pytest-forked-1.6.0-py38h06a4308_0.conda#aff806e2ad3b684150eeaceaf9be72c4 -https://repo.anaconda.com/pkgs/main/linux-64/scipy-1.5.0-py38habc2bb6_0.conda#a27a97fc2377ab74cbd33ce22d3c3353 -https://repo.anaconda.com/pkgs/main/linux-64/matplotlib-3.3.4-py38h06a4308_0.conda#96033fd3465abc467ae394c6852930de -https://repo.anaconda.com/pkgs/main/linux-64/pyamg-4.2.3-py38h79cecc1_0.conda#6e7f4f94000b244396de8bf4e6ae8dc4 +https://repo.anaconda.com/pkgs/main/linux-64/sip-6.7.12-py39h6a678d5_0.conda#6988a3e12fcacfedcac523c1e4c3167c +https://repo.anaconda.com/pkgs/main/linux-64/bottleneck-1.3.5-py39h7deecbd_0.conda#c07c855de7bcef6b409ef1460dea7438 +https://repo.anaconda.com/pkgs/main/linux-64/matplotlib-base-3.3.4-py39h62a2d02_0.conda#dbab28222c740af8e21a3e5e2882c178 +https://repo.anaconda.com/pkgs/main/linux-64/numexpr-2.8.7-py39h286c3b5_0.conda#de217418aa5b86ad59ecace62c11494e +https://repo.anaconda.com/pkgs/main/linux-64/pyqt-5.15.10-py39h6a678d5_0.conda#52da5ff9b1144b078d2f41bab0b213f2 +https://repo.anaconda.com/pkgs/main/linux-64/pytest-cov-4.1.0-py39h06a4308_1.conda#8f41fce21670b120bf7fa8a7883380d9 +https://repo.anaconda.com/pkgs/main/linux-64/pytest-forked-1.6.0-py39h06a4308_0.conda#f0a6e858c06dc4d2ae5c9644630a6a83 +https://repo.anaconda.com/pkgs/main/linux-64/scipy-1.7.3-py39hf838250_2.conda#0667ea5ac14d35e26da19a0f068739da +https://repo.anaconda.com/pkgs/main/linux-64/matplotlib-3.3.4-py39h06a4308_0.conda#384fc5e01ebfcf30e7161119d3029b5a +https://repo.anaconda.com/pkgs/main/linux-64/pandas-1.5.3-py39h417a72b_0.conda#d4d4678ada21d96c49ee4583de1a7b3a +https://repo.anaconda.com/pkgs/main/linux-64/pyamg-4.2.3-py39h79cecc1_0.conda#afc634da8b81dc504179d53d334e6e55 https://repo.anaconda.com/pkgs/main/noarch/pytest-xdist-2.5.0-pyhd3eb1b0_0.conda#d15cdc4207bcf8ca920822597f1d138d diff --git a/build_tools/azure/py38_conda_forge_mkl_environment.yml b/build_tools/azure/pymin_conda_forge_mkl_environment.yml similarity index 96% rename from build_tools/azure/py38_conda_forge_mkl_environment.yml rename to build_tools/azure/pymin_conda_forge_mkl_environment.yml index 2a2955d523a97..125c169ddc95f 100644 --- a/build_tools/azure/py38_conda_forge_mkl_environment.yml +++ b/build_tools/azure/pymin_conda_forge_mkl_environment.yml @@ -4,7 +4,7 @@ channels: - conda-forge dependencies: - - python=3.8 + - python=3.9 - numpy - blas[build=mkl] - scipy diff --git a/build_tools/azure/py38_conda_forge_mkl_win-64_conda.lock b/build_tools/azure/pymin_conda_forge_mkl_win-64_conda.lock similarity index 74% rename from build_tools/azure/py38_conda_forge_mkl_win-64_conda.lock rename to build_tools/azure/pymin_conda_forge_mkl_win-64_conda.lock index a974a6fb7b965..73dee95cc4ab7 100644 --- a/build_tools/azure/py38_conda_forge_mkl_win-64_conda.lock +++ b/build_tools/azure/pymin_conda_forge_mkl_win-64_conda.lock @@ -1,12 +1,13 @@ # Generated by conda-lock. # platform: win-64 -# input_hash: 4ac1abe3eccdd48c0d50af8de11dd3c144459b84f500eae8f575232e0be3a07d +# input_hash: af544b6135127d0b6abf1eedcc8ba32a4d5e2e1d2904d4592abc7f3dba338569 @EXPLICIT https://conda.anaconda.org/conda-forge/win-64/ca-certificates-2023.11.17-h56e8100_0.conda#1163114b483f26761f993c709e65271f https://conda.anaconda.org/conda-forge/win-64/intel-openmp-2023.2.0-h57928b3_50497.conda#a401f3cae152deb75bbed766a90a6312 https://conda.anaconda.org/conda-forge/win-64/mkl-include-2023.2.0-h6a75c08_50497.conda#02fd1f15c56cc902aeaf3df3497cf266 https://conda.anaconda.org/conda-forge/win-64/msys2-conda-epoch-20160418-1.tar.bz2#b0309b72560df66f71a9d5e34a5efdfa -https://conda.anaconda.org/conda-forge/win-64/python_abi-3.8-4_cp38.conda#b1059de1664cef9a785dda079a50f1ed +https://conda.anaconda.org/conda-forge/win-64/python_abi-3.9-4_cp39.conda#948b0d93d4ab1372d8fd45e1560afd47 +https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a https://conda.anaconda.org/conda-forge/win-64/ucrt-10.0.22621.0-h57928b3_0.tar.bz2#72608f6cd3e5898229c3ea16deb1ac43 https://conda.anaconda.org/conda-forge/win-64/m2w64-gmp-6.1.0-2.tar.bz2#53a1c73e1e3d185516d7e3af177596d9 https://conda.anaconda.org/conda-forge/win-64/m2w64-libwinpthread-git-5.0.0.4634.697f757-2.tar.bz2#774130a326dee16f1ceb05cc687ee4f0 @@ -20,7 +21,7 @@ https://conda.anaconda.org/conda-forge/win-64/lerc-4.0.0-h63175ca_0.tar.bz2#1900 https://conda.anaconda.org/conda-forge/win-64/libbrotlicommon-1.1.0-hcfcfb64_1.conda#f77f319fb82980166569e1280d5b2864 https://conda.anaconda.org/conda-forge/win-64/libdeflate-1.19-hcfcfb64_0.conda#002b1b723b44dbd286b9e3708762433c https://conda.anaconda.org/conda-forge/win-64/libffi-3.4.2-h8ffe710_5.tar.bz2#2c96d1b6915b408893f9472569dee135 -https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-h8ffe710_0.tar.bz2#050119977a86e4856f0416e2edcf81bb +https://conda.anaconda.org/conda-forge/win-64/libiconv-1.17-hcfcfb64_1.conda#38d2d9078f2d6d3366fe7db635bf9de6 https://conda.anaconda.org/conda-forge/win-64/libjpeg-turbo-3.0.0-hcfcfb64_1.conda#3f1b948619c45b1ca714d60c7389092c https://conda.anaconda.org/conda-forge/win-64/libogg-1.3.4-h8ffe710_1.tar.bz2#04286d905a0dcb7f7d4a12bdfe02516d https://conda.anaconda.org/conda-forge/win-64/libsqlite-3.44.2-hcfcfb64_0.conda#4a5f5ab56cbf3ccd08d71a1168061213 @@ -41,23 +42,20 @@ https://conda.anaconda.org/conda-forge/win-64/libvorbis-1.3.7-h0e60522_0.tar.bz2 https://conda.anaconda.org/conda-forge/win-64/libxml2-2.11.6-hc3477c8_0.conda#08ffbb4c22dd3622e122058368f8b708 https://conda.anaconda.org/conda-forge/win-64/m2w64-gcc-libs-5.3.0-7.tar.bz2#fe759119b8b3bfa720b8762c6fdc35de https://conda.anaconda.org/conda-forge/win-64/pcre2-10.42-h17e33f8_0.conda#59610c61da3af020289a806ec9c6a7fd -https://conda.anaconda.org/conda-forge/win-64/python-3.8.18-h4de0772_0_cpython.conda#d261509b6d608edf6027143f205cf19b +https://conda.anaconda.org/conda-forge/win-64/python-3.9.18-h4de0772_0_cpython.conda#ab83d6883a06de9c783c9aba765226c9 https://conda.anaconda.org/conda-forge/win-64/zstd-1.5.5-h12be248_0.conda#792bb5da68bf0a6cac6a6072ecb8dbeb https://conda.anaconda.org/conda-forge/win-64/brotli-bin-1.1.0-hcfcfb64_1.conda#0105229d7c5fabaa840043a86c10ec64 -https://conda.anaconda.org/conda-forge/win-64/brotli-python-1.1.0-py38hd3f51b4_1.conda#72708ea626a2530148ea49eb743576f4 https://conda.anaconda.org/conda-forge/noarch/certifi-2023.11.17-pyhd8ed1ab_0.conda#2011bcf45376341dd1d690263fdbc789 -https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda#7f4a9e3fcff3f6356ae99244a014da6a https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda#5cd86562580f274031ede6aa6aa24441 -https://conda.anaconda.org/conda-forge/win-64/cython-3.0.6-py38hd3f51b4_0.conda#3b9e23471edf6af81b58f5d6f566c803 +https://conda.anaconda.org/conda-forge/win-64/cython-3.0.6-py39h99910a6_0.conda#eff4ff92d5839706ca82770ffdd12c36 https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_0.conda#f6c211fee3c98229652b60a9a42ef363 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/win-64/freetype-2.12.1-hdaf720e_2.conda#3761b23693f768dc75a8fd0a73ca053f -https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 -https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.4.5-py38hb1fd069_1.conda#19a5ecd89c16b22db1d1830e93392aab +https://conda.anaconda.org/conda-forge/win-64/kiwisolver-1.4.5-py39h1f6ef14_1.conda#4fc5bd0a7b535252028c647cc27d6c87 https://conda.anaconda.org/conda-forge/win-64/libclang-15.0.7-default_h77d9078_3.conda#71c8b6249c9e9e18b3aec705e95c1040 -https://conda.anaconda.org/conda-forge/win-64/libglib-2.78.1-h16e383f_1.conda#092b567b75f9f699e8d1fbaf37064b8e +https://conda.anaconda.org/conda-forge/win-64/libglib-2.78.3-h16e383f_0.conda#c295badd19494ac8476b36e9e9e47ace https://conda.anaconda.org/conda-forge/win-64/libhwloc-2.9.3-default_haede6df_1009.conda#87da045f6d26ce9fe20ad76a18f6a18a https://conda.anaconda.org/conda-forge/win-64/libtiff-4.6.0-h6e2ebb7_2.conda#08d653b74ee2dec0131ad4259ffbb126 https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 @@ -72,54 +70,47 @@ https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5 https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.2.0-pyha21a80b_0.conda#978d03388b62173b8e6f79162cf52b86 https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 -https://conda.anaconda.org/conda-forge/win-64/tornado-6.3.3-py38h91455d4_1.conda#1daea9d484de0ed524b80c9772484102 -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 -https://conda.anaconda.org/conda-forge/win-64/unicodedata2-15.1.0-py38h91455d4_0.conda#556fb89abee3970c76556144bdab3263 +https://conda.anaconda.org/conda-forge/win-64/tornado-6.3.3-py39ha55989b_1.conda#f00d59c26ab0fc20b1923270397cbba5 +https://conda.anaconda.org/conda-forge/win-64/unicodedata2-15.1.0-py39ha55989b_0.conda#20ec896e8d97f2ff8be1124e624dc8f2 https://conda.anaconda.org/conda-forge/noarch/wheel-0.42.0-pyhd8ed1ab_0.conda#1cdea58981c5cbc17b51973bcaddcea7 -https://conda.anaconda.org/conda-forge/noarch/win_inet_pton-1.1.0-pyhd8ed1ab_6.tar.bz2#30878ecc4bd36e8deeea1e3c151b2e0b https://conda.anaconda.org/conda-forge/win-64/xorg-libxau-1.0.11-hcd874cb_0.conda#c46ba8712093cb0114404ae8a7582e1a https://conda.anaconda.org/conda-forge/win-64/xorg-libxdmcp-1.1.3-hcd874cb_0.tar.bz2#46878ebb6b9cbd8afcf8088d7ef00ece https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a https://conda.anaconda.org/conda-forge/win-64/brotli-1.1.0-hcfcfb64_1.conda#f47f6db2528e38321fb00ae31674c133 -https://conda.anaconda.org/conda-forge/win-64/coverage-7.3.2-py38h91455d4_0.conda#6d4fd016918358448d9055caa59cb616 -https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.78.1-h12be248_1.conda#8a3af479aa812a2a2cb0a4ab2be52dc9 +https://conda.anaconda.org/conda-forge/win-64/coverage-7.3.2-py39ha55989b_0.conda#c1fc093d65ac2cedefa2e1e8e45b891e +https://conda.anaconda.org/conda-forge/win-64/glib-tools-2.78.3-h12be248_0.conda#03c45e65dbac2ba6c247dfd4896b664c https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.1-pyhd8ed1ab_0.conda#3d5fa25cf42f3f32a12b2d874ace8574 https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4da50d410f553db77e62ab62ffaa1abc https://conda.anaconda.org/conda-forge/win-64/lcms2-2.16-h67d730c_0.conda#d3592435917b62a8becff3a60db674f6 https://conda.anaconda.org/conda-forge/win-64/libxcb-1.15-hcd874cb_0.conda#090d91b69396f14afef450c285f9758c https://conda.anaconda.org/conda-forge/win-64/openjpeg-2.5.0-h3d672ee_3.conda#45a9628a04efb6fc326fff0a8f47b799 https://conda.anaconda.org/conda-forge/noarch/pip-23.3.1-pyhd8ed1ab_0.conda#2400c0b86889f43aa52067161e1fb108 -https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.0.0-pyhd8ed1ab_0.conda#6bb4ee32cd435deaeac72776c001e7ac -https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyh0701188_6.tar.bz2#56cd9fe388baac0e90c7149cfac95b60 https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.3-pyhd8ed1ab_0.conda#5bdca0aca30b0ee62bb84854e027eae0 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 -https://conda.anaconda.org/conda-forge/win-64/sip-6.7.12-py38hd3f51b4_0.conda#8234c36685a08c47f11865ffc7ed36a9 -https://conda.anaconda.org/conda-forge/win-64/tbb-2021.10.0-h91493d7_2.conda#5b8c97cf8f0e81d6c22c0bda9978790d -https://conda.anaconda.org/conda-forge/win-64/fonttools-4.46.0-py38h91455d4_0.conda#b0731d500c713de3ee3721c72cb74bb8 -https://conda.anaconda.org/conda-forge/win-64/glib-2.78.1-h12be248_1.conda#247e1bc91e6698e1b9846c4d4df509fa +https://conda.anaconda.org/conda-forge/win-64/sip-6.7.12-py39h99910a6_0.conda#0cc5774390ada632ed7975203057c91c +https://conda.anaconda.org/conda-forge/win-64/tbb-2021.11.0-h91493d7_0.conda#517c08eba817fb0e56cfd411ed198261 +https://conda.anaconda.org/conda-forge/win-64/fonttools-4.46.0-py39ha55989b_0.conda#af11b744b5913ff4ea2c500c2990c4f2 +https://conda.anaconda.org/conda-forge/win-64/glib-2.78.3-h12be248_0.conda#a14440f1d004a2ddccd9c1354dbeffdf https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.1.1-pyhd8ed1ab_0.conda#d04bd1b5bed9177dd7c3cef15e2b6710 https://conda.anaconda.org/conda-forge/win-64/mkl-2023.2.0-h6a75c08_50497.conda#064cea9f45531e7b53584acf4bd8b044 -https://conda.anaconda.org/conda-forge/win-64/pillow-10.1.0-py38hc375fad_0.conda#d671ae9247896e544d8b2df9feaf1f89 -https://conda.anaconda.org/conda-forge/win-64/pyqt5-sip-12.12.2-py38hd3f51b4_5.conda#32974507018705cbe32a392473cd6ec1 +https://conda.anaconda.org/conda-forge/win-64/pillow-10.1.0-py39h368b509_0.conda#131540ebb3d6b88d9a190ce39aeecc50 +https://conda.anaconda.org/conda-forge/win-64/pyqt5-sip-12.12.2-py39h99910a6_5.conda#dffbcea794c524c471772a5f697c2aea https://conda.anaconda.org/conda-forge/noarch/pytest-cov-4.1.0-pyhd8ed1ab_0.conda#06eb685a3a0b146347a58dda979485da https://conda.anaconda.org/conda-forge/noarch/pytest-forked-1.6.0-pyhd8ed1ab_0.conda#a46947638b6e005b63d2d6271da529b0 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.1.0-pyhd8ed1ab_0.conda#f8ced8ee63830dec7ecc1be048d1470a -https://conda.anaconda.org/conda-forge/win-64/gstreamer-1.22.7-hb4038d2_0.conda#9b2f6622276ed34d20eb36e6a4ce2f50 +https://conda.anaconda.org/conda-forge/win-64/gstreamer-1.22.7-hb4038d2_1.conda#ae1bffda04b64c19f0cf3ac66473f3ab https://conda.anaconda.org/conda-forge/win-64/libblas-3.9.0-20_win64_mkl.conda#6cad6cd2fbdeef4d651b8f752a4da960 https://conda.anaconda.org/conda-forge/win-64/mkl-devel-2023.2.0-h57928b3_50497.conda#0d52cfab24361c77268b54920c11903c https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-2.5.0-pyhd8ed1ab_0.tar.bz2#1fdd1f3baccf0deb647385c677a1a48e -https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b -https://conda.anaconda.org/conda-forge/win-64/gst-plugins-base-1.22.7-h001b923_0.conda#e4b56ad6c21e861456f32bfc79b43c4b +https://conda.anaconda.org/conda-forge/win-64/gst-plugins-base-1.22.7-h001b923_1.conda#9f180ad66d7cec7a626c8283412a51cb https://conda.anaconda.org/conda-forge/win-64/libcblas-3.9.0-20_win64_mkl.conda#e6d36cfcb2f2dff0f659d2aa0813eb2d https://conda.anaconda.org/conda-forge/win-64/liblapack-3.9.0-20_win64_mkl.conda#9510d07424d70fcac553d86b3e4a7c14 -https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.0-pyhd8ed1ab_0.conda#134b2b57b7865d2316a7cce1915a51ed https://conda.anaconda.org/conda-forge/win-64/liblapacke-3.9.0-20_win64_mkl.conda#960008cd6e9827a5c9b68e77fdf3d29f -https://conda.anaconda.org/conda-forge/win-64/numpy-1.24.4-py38h1d91fd2_0.conda#bb13551a7913ff4de74df687f03ba14e -https://conda.anaconda.org/conda-forge/win-64/qt-main-5.15.8-h9e85ed6_17.conda#568b134e26f3e2a44ff24028c27b8c0e +https://conda.anaconda.org/conda-forge/win-64/numpy-1.26.2-py39hddb5d58_0.conda#59f29cc03dd8a2768749cf73e8b1ce58 +https://conda.anaconda.org/conda-forge/win-64/qt-main-5.15.8-h9e85ed6_18.conda#8427460072b90560c0675c37c30386ef https://conda.anaconda.org/conda-forge/win-64/blas-devel-3.9.0-20_win64_mkl.conda#40f21d1e894795983dec1036847e7460 -https://conda.anaconda.org/conda-forge/win-64/contourpy-1.1.1-py38hb1fd069_1.conda#13df3a01683e407c2745cc0b6aa6beca -https://conda.anaconda.org/conda-forge/win-64/pyqt-5.15.9-py38hd6c051e_5.conda#7d7f5b99c3929f02566314f252f9ef53 -https://conda.anaconda.org/conda-forge/win-64/scipy-1.10.1-py38h1aea9ed_3.conda#1ed766b46170f86ead2ae6b9b8151191 +https://conda.anaconda.org/conda-forge/win-64/contourpy-1.2.0-py39h1f6ef14_0.conda#9eeea323eacb6549cbb3df3d81181cb2 +https://conda.anaconda.org/conda-forge/win-64/pyqt-5.15.9-py39hb77abff_5.conda#5ed899124a51958336371ff01482b8fd +https://conda.anaconda.org/conda-forge/win-64/scipy-1.11.4-py39hddb5d58_0.conda#5bfa75180cc7592b7f89a9760e2a5726 https://conda.anaconda.org/conda-forge/win-64/blas-2.120-mkl.conda#169d630727008b4356a138a3a0f595d4 -https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.7.3-py38h2724991_0.conda#80ee24705fa140b2febf66a1f9fb9b39 -https://conda.anaconda.org/conda-forge/win-64/matplotlib-3.7.3-py38haa244fe_0.conda#30c703c4b30df6b261308086e5171a9d +https://conda.anaconda.org/conda-forge/win-64/matplotlib-base-3.8.2-py39hf19769e_0.conda#90a864bf689259d6a08a0c55037fd69c +https://conda.anaconda.org/conda-forge/win-64/matplotlib-3.8.2-py39hcbf5309_0.conda#92625f78e662841feb70511ff466207c diff --git a/build_tools/azure/py38_conda_forge_openblas_ubuntu_2204_environment.yml b/build_tools/azure/pymin_conda_forge_openblas_ubuntu_2204_environment.yml similarity index 96% rename from build_tools/azure/py38_conda_forge_openblas_ubuntu_2204_environment.yml rename to build_tools/azure/pymin_conda_forge_openblas_ubuntu_2204_environment.yml index 33e3dd2e449b7..de366a19e740d 100644 --- a/build_tools/azure/py38_conda_forge_openblas_ubuntu_2204_environment.yml +++ b/build_tools/azure/pymin_conda_forge_openblas_ubuntu_2204_environment.yml @@ -4,7 +4,7 @@ channels: - conda-forge dependencies: - - python=3.8 + - python=3.9 - numpy - blas[build=openblas] - scipy diff --git a/build_tools/azure/py38_conda_forge_openblas_ubuntu_2204_linux-64_conda.lock b/build_tools/azure/pymin_conda_forge_openblas_ubuntu_2204_linux-64_conda.lock similarity index 83% rename from build_tools/azure/py38_conda_forge_openblas_ubuntu_2204_linux-64_conda.lock rename to build_tools/azure/pymin_conda_forge_openblas_ubuntu_2204_linux-64_conda.lock index cda316626d017..1a77242a74fc3 100644 --- a/build_tools/azure/py38_conda_forge_openblas_ubuntu_2204_linux-64_conda.lock +++ b/build_tools/azure/pymin_conda_forge_openblas_ubuntu_2204_linux-64_conda.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: d5c73010fc8d957036c4effb267c1f6b4ba48f0fc16bbf59b4b67dfe4aa39d54 +# input_hash: d70964a380150a9fdd34471eab9c13547ec7744156a6719ec0e4b97fc7d298fa @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.11.17-hbcca054_0.conda#01ffc8d36f9eba0ce0b3c1955fa780ee @@ -10,7 +10,8 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77 https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_1.conda#6185f640c43843e5ad6fd1c5372c3f80 https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_3.conda#937eaed008f6bf2191c5fe76f87755e9 -https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.8-4_cp38.conda#ea6b353536f42246cd130c7fef1285cf +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-4_cp39.conda#bfe4b3259a8ac6cdf0037752904da6a7 +https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2#fee5683a3f04bd15cbd8318b096a27ab https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2#562b26ba2e19059551a811e72ab7f793 @@ -29,7 +30,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3 https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_3.conda#c714d905cdfa0e70200f68b80cc04764 -https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2#b62b52da46c39ee2bc3c162ac7f1804d +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_1.conda#4b06b43d0eca61db2899e4d7a289c302 https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda#ea25936bb4080d843790b586850f82b8 https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda#30fd6e37fe21f86f4bd26d6ee73eeec7 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 @@ -66,7 +67,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda#e https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda#3b6a9f225c3dbe0d24f4fedd4625c5bf https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.6-h232c23b_0.conda#427a3e59d66cb5d145020bd9c6493334 +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.2-h232c23b_0.conda#1917ed337979482731e8ac8c1bedf9dd https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_6.conda#80bf3b277c120dd294b51d404b931a75 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.42-hcad00b1_0.conda#679c8961826aa4b50653bce17ee52abe https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 @@ -78,16 +79,16 @@ https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.1.0-hd590300_1.cond https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda#9ae35c3d96db2c94ce0cef86efdfa2cb https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda#32d16ad533c59bb0a3c5ffaf16110829 -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.1-h783c2da_1.conda#70052d6c1e84643e30ffefb21ab6950f +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.3-h783c2da_0.conda#9bd06b12bbfa6fd1740fd23af4b0f0c7 https://conda.anaconda.org/conda-forge/linux-64/libhiredis-1.0.2-h2cc385e_0.tar.bz2#b34907d3a81a3cd8095ee83d174c074a -https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda#8a35df3cbc0c8b12cc8af9473ae75eef https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413a1c8_0.conda#d172b34a443b95f86089e8229ddc9a17 https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda#55ed21669b2015f77c180feb1dd41930 https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-17.0.6-h4dfa4b3_0.conda#c1665f9c1c9f6c93d8b4e492a6a39056 https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_6.conda#e87530d1b12dd7f4e0f856dc07358d60 https://conda.anaconda.org/conda-forge/linux-64/nss-3.95-h1d7d5a4_0.conda#d3a8067adcc45a923f4b1987c91d69da -https://conda.anaconda.org/conda-forge/linux-64/python-3.8.18-hd12c33a_0_cpython.conda#334cb629e10d209f1c17630f653168b1 +https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_0_cpython.conda#3ede353bc605068d9677e700b1847382 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 @@ -95,30 +96,30 @@ https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.con https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.7-h8ee46fc_0.conda#49e482d882669206653b095f5206c05b https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.13-pyhd8ed1ab_0.conda#06006184e203b61d3525f90de394471e https://conda.anaconda.org/conda-forge/linux-64/brotli-1.1.0-hd590300_1.conda#f27a24d46e3ea7b70a1f98e50c62508f -https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py38h17151c0_1.conda#7a5a699c8992fc51ef25e980f4502c2a +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py39h3d6467e_1.conda#c48418c8b35f1d59ae9ae1174812b40a https://conda.anaconda.org/conda-forge/linux-64/ccache-4.8.1-h1fcd64f_0.conda#fd37a0c47d8b3667b73af0549037ce83 https://conda.anaconda.org/conda-forge/noarch/certifi-2023.11.17-pyhd8ed1ab_0.conda#2011bcf45376341dd1d690263fdbc789 https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda#7f4a9e3fcff3f6356ae99244a014da6a https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda#5cd86562580f274031ede6aa6aa24441 -https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.6-py38h17151c0_0.conda#c1cfbb88363887423f24c14c8897a1a9 +https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.6-py39h3d6467e_0.conda#bfde3cf098e298b81d1c1cbc9c79ab59 https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d -https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py38h578d9bd_2.conda#30fb1ac302b99955cc6548284b17a42e +https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py39hf3d152e_3.conda#09a48956e1c155907fd0d626f3e80f2e https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_0.conda#f6c211fee3c98229652b60a9a42ef363 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.1-hfc55251_1.conda#a50918d10114a0bf80fb46c7cc692058 +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.3-hfc55251_0.conda#41d2f46e0ac8372eeb959860713d9b21 https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 -https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py38h7f3f72f_1.conda#b66dcd4f710628fc5563ad56f02ca89b +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py39h7633fee_1.conda#c9f74d717e5a2847a9f8b779c54130f2 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda#51bb7010fc86f70eee639b4bb7a894f5 https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_openblas.conda#2b7bb4f7562c8cf334fc2e20c2d28abc https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_ha2b6cf4_4.conda#898e0dd993afbed0d871b60c2eb33b83 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 -https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-hfc447b1_2.conda#3cfa1ceef6936e656677ba59480106ce -https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py38h01eb140_1.conda#2dabf287937cd631e292096cc6d0867e +https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-h33b98f1_7.conda#675317e46167caea24542d85c72f19a3 +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_0.conda#24e2649ebd432e652aa72cfd05f23a8e +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py39hd1e30aa_1.conda#ee2b4665b852ec6ff2758f3c1b91233d https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.25-pthreads_h7a3da1a_0.conda#87661673941b5e702275fdf0fc095ad0 https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-h488ebb8_3.conda#128c25b7fe6a25286a48f3a6a9b5b6f3 @@ -134,18 +135,13 @@ https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.con https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.conda#fc2166155db840c634a1291a5c35a709 https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.4-pyhd8ed1ab_0.conda#5a31a7d564f551d0e6dff52fd8cb5b16 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.2-py_0.tar.bz2#68e01cac9d38d0e717cd5c87bc3d2cc9 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.1-pyhd8ed1ab_0.conda#6c8c4d6eb2325e59290ac6dbbeacd5f0 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda#da1d979339e2714c30a8e806a33ec087 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.3-py_0.tar.bz2#d01180388e6d1838c3e1ad029590aa7a -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.5-pyhd8ed1ab_2.tar.bz2#9ff55a0901cf952f05c654394de76bf7 +https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2#4759805cce2d914c38472f70bf4d8bcb https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.2.0-pyha21a80b_0.conda#978d03388b62173b8e6f79162cf52b86 https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 -https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py38h01eb140_1.conda#660cfc2fc5bd9e3b458ad394976652cf -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 -https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py38h01eb140_0.conda#d28c162f670f8dc3a89e246573ae96c9 +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py39hd1e30aa_1.conda#cbe186eefb0bcd91e8f47c3908489874 +https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py39hd1e30aa_0.conda#1da984bbb6e765743e13388ba7b7b2c8 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.40-hd590300_0.conda#07c15d846a2e4d673da22cbd85fdb6d2 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda#82b6df12252e6f32402b96dacc656fec @@ -153,8 +149,8 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_ https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a https://conda.anaconda.org/conda-forge/noarch/babel-2.13.1-pyhd8ed1ab_0.conda#3ccff479c246692468f604df9c85ef26 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-h3faef2a_0.conda#f907bb958910dc404647326ca80c263e -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.46.0-py38h01eb140_0.conda#8fc0131364ec46d8d68edf96a7b58497 -https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.1-hfc55251_1.conda#8d7242302bb3d03b9a690b6dda872603 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.46.0-py39hd1e30aa_0.conda#9b58e5973dd3d786253f4ca9534b1aba +https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.3-hfc55251_0.conda#e08e51acc7d1ae8dbe13255e7b4c64ac https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.0-pyha770c72_0.conda#a941237cd06538837b25cd245fcd25d8 https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.1-pyhd8ed1ab_0.conda#3d5fa25cf42f3f32a12b2d874ace8574 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 @@ -162,34 +158,37 @@ https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4d https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_hb11cfb5_4.conda#c90f4cbb57839c98fef8f830e4b9972f https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda#6fabc51f5e647d09cc010c40061557e0 -https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-h5d7e998_0.conda#d8edd0e29db6fb6b6988e1a28d35d994 -https://conda.anaconda.org/conda-forge/linux-64/pillow-10.1.0-py38ha43c96d_0.conda#67ca17c651f86159a3b8ed1132d97c12 -https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.0.0-pyhd8ed1ab_0.conda#6bb4ee32cd435deaeac72776c001e7ac +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-hd429924_1.conda#1dbcc04604fdf1e526e6d1b0b6938396 +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.1.0-py39had0adad_0.conda#eeaa413fddccecb2ab7f747bdb55b07f https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.3-pyhd8ed1ab_0.conda#5bdca0aca30b0ee62bb84854e027eae0 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 -https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py38h17151c0_0.conda#ae2edf79b63f97071aea203b22a6774a +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py39h3d6467e_0.conda#e667a3ab0df62c54e60e1843d2e6defb https://conda.anaconda.org/conda-forge/noarch/urllib3-2.1.0-pyhd8ed1ab_0.conda#f8ced8ee63830dec7ecc1be048d1470a -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.7-h98fc4e7_0.conda#6c919bafe5e03428a8e2ef319d7ef990 +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.7-h98fc4e7_1.conda#a8d71f6705ed1f70d7099a6bd1c078ac https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.1.1-pyhd8ed1ab_0.conda#d04bd1b5bed9177dd7c3cef15e2b6710 https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-20_linux64_openblas.conda#05c5862c7dc25e65ba6c471d96429dae -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.24.4-py38h59b608b_0.conda#8c3e050afeeb2b32575bdb8955cc67b2 -https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py38h17151c0_5.conda#3d66f5c4a0af2713f60ec11bf1230136 +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.26.2-py39h474f0d3_0.conda#459a58eda3e74dd5e3d596c618e7f20a +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py39h3d6467e_5.conda#93aff412f3e49fdb43361c0215cbd72d https://conda.anaconda.org/conda-forge/noarch/pytest-forked-1.6.0-pyhd8ed1ab_0.conda#a46947638b6e005b63d2d6271da529b0 https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/linux-64/blas-devel-3.9.0-20_linux64_openblas.conda#9932a1d4e9ecf2d35fb19475446e361e -https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.1-py38h7f3f72f_1.conda#18ae206b2d413e5cc8d2bb8ab48aa165 -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.7-h8e1006c_0.conda#065e2c1d49afa3fdc1a01f1dacd6ab09 -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.3-py38h01efb38_1.conda#01a2b6144e65631e2fe24e569d0738ee -https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.0-pyhd8ed1ab_0.conda#134b2b57b7865d2316a7cce1915a51ed +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py39h7633fee_0.conda#ed71ad3e30eb03da363fb797419cce98 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.7-h8e1006c_1.conda#89cd9374d5fc7371db238e4ef5c5f258 +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py39hddac248_0.conda#dcfd2f15c6f8f0bbf234412b18a2a5d0 https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-2.5.0-pyhd8ed1ab_0.tar.bz2#1fdd1f3baccf0deb647385c677a1a48e -https://conda.anaconda.org/conda-forge/noarch/sphinx-7.1.2-pyhd8ed1ab_0.conda#d02bfa35cd4f2cd624289f64911cae9d +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.4-py39h474f0d3_0.conda#4b401c1516417b4b14aa1249d2f7929d https://conda.anaconda.org/conda-forge/linux-64/blas-2.120-openblas.conda#c8f6916a81a340650078171b1d852574 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.3-py38h58ed7fa_0.conda#d8db25d58823182ce93233964f307a47 -https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.5.0-pyhd8ed1ab_0.tar.bz2#3c275d7168a6a135329f4acb364c229a -https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h82b777d_17.conda#4f01e33dbb406085a16a2813ab067e95 -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.10.1-py38h59b608b_3.conda#2f2a57462fcfbc67dfdbb0de6f7484c2 -https://conda.anaconda.org/conda-forge/linux-64/pyamg-5.0.1-py38hae673b5_1.conda#5987693134a52fb49df3f8ce808af1a6 -https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py38hffdaa6c_5.conda#398e774c9eaa5ed4dddf7a7681f6cfb8 -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.3-py38h578d9bd_0.conda#97a5ed8cd42b4276036646869bc94570 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.2-py39he9076e7_0.conda#6085411aa2f0b2b801d3b46e1d3b83c5 +https://conda.anaconda.org/conda-forge/linux-64/pyamg-5.0.1-py39hda80f44_1.conda#6df47699edb4d8d3365de2d189a456bc +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h450f30e_18.conda#ef0430f8df5dcdedcaaab340b228f30c +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py39h52134e7_5.conda#e1f148e57d071b09187719df86f513c1 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.2-py39hf3d152e_0.conda#18d40a5ada9a801cabaf5d47c15c6282 +https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.6.0-pyhd8ed1ab_0.conda#191b8a622191a403700d16a2008e4e29 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.7-pyhd8ed1ab_0.conda#aebfabcb60c33a89c1f9290cab49bc93 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.5-pyhd8ed1ab_0.conda#ebf08f5184d8eaa486697bc060031953 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.4-pyhd8ed1ab_0.conda#a9a89000dfd19656ad004b937eeb6828 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.6-pyhd8ed1ab_0.conda#cf5c9649272c677a964a7313279e3a9b +https://conda.anaconda.org/conda-forge/noarch/sphinx-7.2.6-pyhd8ed1ab_0.conda#bbfd1120d1824d2d073bc65935f0e4c0 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.9-pyhd8ed1ab_0.conda#0612e497d7860728f2cda421ea2aec09 diff --git a/build_tools/azure/test_script.sh b/build_tools/azure/test_script.sh index 5117473ea6366..a45fa3dd49842 100755 --- a/build_tools/azure/test_script.sh +++ b/build_tools/azure/test_script.sh @@ -83,5 +83,5 @@ if [[ -n "$SELECTED_TESTS" ]]; then fi set -x -eval "$TEST_CMD --pyargs sklearn" +eval "$TEST_CMD --maxfail=10 --pyargs sklearn" set +x diff --git a/build_tools/circle/doc_linux-64_conda.lock b/build_tools/circle/doc_linux-64_conda.lock index c422c94873255..57700c0a0835f 100644 --- a/build_tools/circle/doc_linux-64_conda.lock +++ b/build_tools/circle/doc_linux-64_conda.lock @@ -44,7 +44,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3 https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_3.conda#c714d905cdfa0e70200f68b80cc04764 -https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2#b62b52da46c39ee2bc3c162ac7f1804d +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_1.conda#4b06b43d0eca61db2899e4d7a289c302 https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda#ea25936bb4080d843790b586850f82b8 https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda#30fd6e37fe21f86f4bd26d6ee73eeec7 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 @@ -63,7 +63,7 @@ https://conda.anaconda.org/conda-forge/linux-64/pixman-0.42.2-h59595ed_0.conda#7 https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-h36c2ea0_1001.tar.bz2#22dad4df6e8630e8dff2428f6f6a7036 https://conda.anaconda.org/conda-forge/linux-64/rav1e-0.6.6-he8a937b_2.conda#77d9955b4abddb811cb8ab1aa7d743e4 https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 -https://conda.anaconda.org/conda-forge/linux-64/svt-av1-1.7.0-h59595ed_0.conda#b6e0b4f1edc2740d1cf87669195c39d4 +https://conda.anaconda.org/conda-forge/linux-64/svt-av1-1.8.0-h59595ed_0.conda#a9fb862e9d3beb0ebc61c10806056a7d https://conda.anaconda.org/conda-forge/linux-64/xorg-kbproto-1.0.7-h7f98852_1002.tar.bz2#4b230e8381279d76131116660f5a241a https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.1-hd590300_0.conda#b462a33c0be1421532f28bfe8f4a7514 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxau-1.0.11-hd590300_0.conda#2c80dc38fface310c9bd81b17037fee5 @@ -77,7 +77,7 @@ https://conda.anaconda.org/conda-forge/linux-64/zfp-1.0.0-h59595ed_4.conda#9cfba https://conda.anaconda.org/conda-forge/linux-64/zlib-ng-2.0.7-h0b41bf4_0.conda#49e8329110001f04923fe7e864990b0c https://conda.anaconda.org/conda-forge/linux-64/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-12.3.0-he2b93b0_3.conda#71c68ea75afe6ac7a9c62c08f5d67a5a -https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.0.2-hed45d22_0.conda#ad3e851b008cbf5bfb0d229b6a776842 +https://conda.anaconda.org/conda-forge/linux-64/libavif16-1.0.3-hef5bec9_1.conda#11a4e0cd0874e77396e781154a8d672f https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.1.0-hd590300_1.conda#f07002e225d7a60a694d42a7bf5ff53f https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.1.0-hd590300_1.conda#5fc11c6020d421960607d821310fcd4d https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 @@ -90,7 +90,7 @@ https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda#e https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda#3b6a9f225c3dbe0d24f4fedd4625c5bf https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.6-h232c23b_0.conda#427a3e59d66cb5d145020bd9c6493334 +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.2-h232c23b_0.conda#1917ed337979482731e8ac8c1bedf9dd https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_6.conda#80bf3b277c120dd294b51d404b931a75 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.42-hcad00b1_0.conda#679c8961826aa4b50653bce17ee52abe https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 @@ -108,8 +108,8 @@ https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-12.3.0-hf https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-12.3.0-he2b93b0_3.conda#b6ce9868fc6c65a18c22fd983e2d7e6f https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda#32d16ad533c59bb0a3c5ffaf16110829 -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.1-h783c2da_1.conda#70052d6c1e84643e30ffefb21ab6950f -https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.3-h783c2da_0.conda#9bd06b12bbfa6fd1740fd23af4b0f0c7 +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda#8a35df3cbc0c8b12cc8af9473ae75eef https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413a1c8_0.conda#d172b34a443b95f86089e8229ddc9a17 https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda#55ed21669b2015f77c180feb1dd41930 @@ -132,13 +132,13 @@ https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda#5cd86562580f274031ede6aa6aa24441 https://conda.anaconda.org/conda-forge/linux-64/cython-3.0.6-py39h3d6467e_0.conda#bfde3cf098e298b81d1c1cbc9c79ab59 https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d -https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py39hf3d152e_2.conda#8effc3913cfe3a29f2a89cda29bbff04 +https://conda.anaconda.org/conda-forge/linux-64/docutils-0.20.1-py39hf3d152e_3.conda#09a48956e1c155907fd0d626f3e80f2e https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_0.conda#f6c211fee3c98229652b60a9a42ef363 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d https://conda.anaconda.org/conda-forge/linux-64/gfortran-12.3.0-h499e0f7_2.conda#0558a8c44eb7a18e6682bd3a8ae6dcab https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-12.3.0-h7fe76b4_2.conda#3a749210487c0358b6f135a648cbbf60 -https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.1-hfc55251_1.conda#a50918d10114a0bf80fb46c7cc692058 +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.3-hfc55251_0.conda#41d2f46e0ac8372eeb959860713d9b21 https://conda.anaconda.org/conda-forge/linux-64/gxx-12.3.0-h8d2909c_2.conda#673bac341be6b90ef9e8abae7e52ca46 https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-12.3.0-h8a814eb_2.conda#f517b1525e9783849bd56a5dc45a9960 https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 @@ -150,14 +150,15 @@ https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda#51bb https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_openblas.conda#2b7bb4f7562c8cf334fc2e20c2d28abc https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_ha2b6cf4_4.conda#898e0dd993afbed0d871b60c2eb33b83 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 -https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-hfc447b1_2.conda#3cfa1ceef6936e656677ba59480106ce -https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc +https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-h33b98f1_7.conda#675317e46167caea24542d85c72f19a3 +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_0.conda#24e2649ebd432e652aa72cfd05f23a8e https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py39hd1e30aa_1.conda#ee2b4665b852ec6ff2758f3c1b91233d https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 https://conda.anaconda.org/conda-forge/noarch/networkx-3.2.1-pyhd8ed1ab_0.conda#425fce3b531bed6ec3c74fab3e5f0a1c https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.25-pthreads_h7a3da1a_0.conda#87661673941b5e702275fdf0fc095ad0 https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-h488ebb8_3.conda#128c25b7fe6a25286a48f3a6a9b5b6f3 https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.1.0-pyhd8ed1ab_0.conda#45a5065664da0d1dfa8f8cd2eaf05ab9 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py39hd1e30aa_1.conda#c2e412b0f11e5983bcfc35d9beb91ecb @@ -171,12 +172,12 @@ https://conda.anaconda.org/conda-forge/noarch/setuptools-68.2.2-pyhd8ed1ab_0.con https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda#da1d979339e2714c30a8e806a33ec087 +https://conda.anaconda.org/conda-forge/noarch/tabulate-0.9.0-pyhd8ed1ab_1.tar.bz2#4759805cce2d914c38472f70bf4d8bcb https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda#1482e77f87c6a702a7e05ef22c9b197b https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.2.0-pyha21a80b_0.conda#978d03388b62173b8e6f79162cf52b86 https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py39hd1e30aa_1.conda#cbe186eefb0bcd91e8f47c3908489874 -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 https://conda.anaconda.org/conda-forge/linux-64/unicodedata2-15.1.0-py39hd1e30aa_0.conda#1da984bbb6e765743e13388ba7b7b2c8 https://conda.anaconda.org/conda-forge/noarch/wheel-0.42.0-pyhd8ed1ab_0.conda#1cdea58981c5cbc17b51973bcaddcea7 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 @@ -190,7 +191,7 @@ https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-h3faef2a_0.conda#f9 https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.7.0-h00ab1b0_0.conda#b4537c98cb59f8725b0e1e65816b4a28 https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.46.0-py39hd1e30aa_0.conda#9b58e5973dd3d786253f4ca9534b1aba https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.7.0-heb67821_0.conda#7ef7c0f111dad1c8006504a0f1ccd820 -https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.1-hfc55251_1.conda#8d7242302bb3d03b9a690b6dda872603 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.3-hfc55251_0.conda#e08e51acc7d1ae8dbe13255e7b4c64ac https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.0-pyha770c72_0.conda#a941237cd06538837b25cd245fcd25d8 https://conda.anaconda.org/conda-forge/noarch/importlib_resources-6.1.1-pyhd8ed1ab_0.conda#3d5fa25cf42f3f32a12b2d874ace8574 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 @@ -198,11 +199,10 @@ https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4d https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_hb11cfb5_4.conda#c90f4cbb57839c98fef8f830e4b9972f https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda#6fabc51f5e647d09cc010c40061557e0 -https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-h5d7e998_0.conda#d8edd0e29db6fb6b6988e1a28d35d994 +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-hd429924_1.conda#1dbcc04604fdf1e526e6d1b0b6938396 https://conda.anaconda.org/conda-forge/noarch/memory_profiler-0.61.0-pyhd8ed1ab_0.tar.bz2#8b45f9f2b2f7a98b0ec179c8991a4a9b https://conda.anaconda.org/conda-forge/linux-64/pillow-10.1.0-py39had0adad_0.conda#eeaa413fddccecb2ab7f747bdb55b07f https://conda.anaconda.org/conda-forge/noarch/pip-23.3.1-pyhd8ed1ab_0.conda#2400c0b86889f43aa52067161e1fb108 -https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.0.0-pyhd8ed1ab_0.conda#6bb4ee32cd435deaeac72776c001e7ac https://conda.anaconda.org/conda-forge/noarch/plotly-5.18.0-pyhd8ed1ab_0.conda#9f6a8664f1fe752f79473eeb9bf33a60 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.3-pyhd8ed1ab_0.conda#5bdca0aca30b0ee62bb84854e027eae0 @@ -210,7 +210,7 @@ https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0 https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py39h3d6467e_0.conda#e667a3ab0df62c54e60e1843d2e6defb https://conda.anaconda.org/conda-forge/noarch/urllib3-2.1.0-pyhd8ed1ab_0.conda#f8ced8ee63830dec7ecc1be048d1470a https://conda.anaconda.org/conda-forge/linux-64/compilers-1.7.0-ha770c72_0.conda#81458b3aed8ab8711951ec3c0c04e097 -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.7-h98fc4e7_0.conda#6c919bafe5e03428a8e2ef319d7ef990 +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.7-h98fc4e7_1.conda#a8d71f6705ed1f70d7099a6bd1c078ac https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 https://conda.anaconda.org/conda-forge/noarch/importlib-resources-6.1.1-pyhd8ed1ab_0.conda#d04bd1b5bed9177dd7c3cef15e2b6710 https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-20_linux64_openblas.conda#05c5862c7dc25e65ba6c471d96429dae @@ -220,10 +220,10 @@ https://conda.anaconda.org/conda-forge/noarch/pytest-forked-1.6.0-pyhd8ed1ab_0.c https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b https://conda.anaconda.org/conda-forge/linux-64/blas-devel-3.9.0-20_linux64_openblas.conda#9932a1d4e9ecf2d35fb19475446e361e https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.2.0-py39h7633fee_0.conda#ed71ad3e30eb03da363fb797419cce98 -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.7-h8e1006c_0.conda#065e2c1d49afa3fdc1a01f1dacd6ab09 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.7-h8e1006c_1.conda#89cd9374d5fc7371db238e4ef5c5f258 https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-2023.9.18-py39hf9b8f0e_2.conda#38f576a701ea508ed210087c711a06ee https://conda.anaconda.org/conda-forge/noarch/imageio-2.31.5-pyh8c1a49c_0.conda#6820ccf6a3a27df348f18c85dd89014a -https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.3-py39hddac248_0.conda#961b398d8c421a3752e26f01f2dcbdac +https://conda.anaconda.org/conda-forge/linux-64/pandas-2.1.4-py39hddac248_0.conda#dcfd2f15c6f8f0bbf234412b18a2a5d0 https://conda.anaconda.org/conda-forge/noarch/patsy-0.5.4-pyhd8ed1ab_0.conda#1184267eddebb57e47f8e1419c225595 https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.0-pyhd8ed1ab_0.conda#134b2b57b7865d2316a7cce1915a51ed https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-2.5.0-pyhd8ed1ab_0.tar.bz2#1fdd1f3baccf0deb647385c677a1a48e @@ -232,15 +232,15 @@ https://conda.anaconda.org/conda-forge/linux-64/scipy-1.11.4-py39h474f0d3_0.cond https://conda.anaconda.org/conda-forge/linux-64/blas-2.120-openblas.conda#c8f6916a81a340650078171b1d852574 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.8.2-py39he9076e7_0.conda#6085411aa2f0b2b801d3b46e1d3b83c5 https://conda.anaconda.org/conda-forge/linux-64/pyamg-5.0.1-py39hda80f44_1.conda#6df47699edb4d8d3365de2d189a456bc -https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h82b777d_17.conda#4f01e33dbb406085a16a2813ab067e95 -https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.0-py39h44dd56e_2.conda#a00daa168ddb25c6bb30952374c011e8 -https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.9.26-pyhd8ed1ab_0.conda#d133bea7d8ac17552492a0629229eeb1 +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h450f30e_18.conda#ef0430f8df5dcdedcaaab340b228f30c +https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.14.0-py39h44dd56e_3.conda#4715b095e8c253936e4372a1929a545f +https://conda.anaconda.org/conda-forge/noarch/tifffile-2023.12.9-pyhd8ed1ab_0.conda#454bc0aff84f35fa53ba9e0369737a9b https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py39h52134e7_5.conda#e1f148e57d071b09187719df86f513c1 https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.22.0-py39hddac248_2.conda#8d502a4d2cbe5a45ff35ca8af8cbec0a https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.13.0-pyhd8ed1ab_0.conda#082666331726b2438986cfe33ae9a8ee https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.8.2-py39hf3d152e_0.conda#18d40a5ada9a801cabaf5d47c15c6282 https://conda.anaconda.org/conda-forge/noarch/seaborn-0.13.0-hd8ed1ab_0.conda#ebd31a95a7008b7e164dad9dbbb5bb5a -https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.5.0-pyhd8ed1ab_0.tar.bz2#3c275d7168a6a135329f4acb364c229a +https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.6.0-pyhd8ed1ab_0.conda#191b8a622191a403700d16a2008e4e29 https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.15.0-pyhd8ed1ab_0.conda#1a49ca9515ef9a96edff2eea06143dc6 https://conda.anaconda.org/conda-forge/noarch/sphinx-prompt-1.4.0-pyhd8ed1ab_0.tar.bz2#88ee91e8679603f2a5bd036d52919cc2 @@ -286,16 +286,16 @@ https://conda.anaconda.org/conda-forge/noarch/sphinxext-opengraph-0.9.0-pyhd8ed1 # pip cffi @ https://files.pythonhosted.org/packages/ea/ac/e9e77bc385729035143e54cc8c4785bd480eaca9df17565963556b0b7a93/cffi-1.16.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=8f8e709127c6c77446a8c0a8c8bf3c8ee706a06cd44b1e827c3e6a2ee6b8c098 # pip doit @ https://files.pythonhosted.org/packages/44/83/a2960d2c975836daa629a73995134fd86520c101412578c57da3d2aa71ee/doit-0.36.0-py3-none-any.whl#sha256=ebc285f6666871b5300091c26eafdff3de968a6bd60ea35dd1e3fc6f2e32479a # pip jupyter-core @ https://files.pythonhosted.org/packages/ab/ea/af6508f71d2bcbf4db538940120cc3d3f10287f62105e756bd315aa345b5/jupyter_core-5.5.0-py3-none-any.whl#sha256=e11e02cd8ae0a9de5c6c44abf5727df9f2581055afe00b22183f621ba3585805 -# pip referencing @ https://files.pythonhosted.org/packages/ec/d8/e826b3f743d97e45d3ace674a5c6f026069428e608c5fde3d08d072c87f2/referencing-0.31.1-py3-none-any.whl#sha256=c19c4d006f1757e3dd75c4f784d38f8698d87b649c54f9ace14e5e8c9667c01d +# pip referencing @ https://files.pythonhosted.org/packages/b4/11/d121780c173336c9bc3a5b8240ed31f518957cc22f6311c76259cb0fcf32/referencing-0.32.0-py3-none-any.whl#sha256=bdcd3efb936f82ff86f993093f6da7435c7de69a3b3a5a06678a6050184bee99 # pip rfc3339-validator @ https://files.pythonhosted.org/packages/7b/44/4e421b96b67b2daff264473f7465db72fbdf36a07e05494f50300cc7b0c6/rfc3339_validator-0.1.4-py2.py3-none-any.whl#sha256=24f6ec1eda14ef823da9e36ec7113124b39c04d50a4d3d3a3c2859577e7791fa # pip terminado @ https://files.pythonhosted.org/packages/69/df/deebc9fb14a49062a3330f673e80b100e665b54d998163b3f62620b6240c/terminado-0.18.0-py3-none-any.whl#sha256=87b0d96642d0fe5f5abd7783857b9cab167f221a39ff98e3b9619a788a3c0f2e # pip tinycss2 @ https://files.pythonhosted.org/packages/da/99/fd23634d6962c2791fb8cb6ccae1f05dcbfc39bce36bba8b1c9a8d92eae8/tinycss2-1.2.1-py3-none-any.whl#sha256=2b80a96d41e7c3914b8cda8bc7f705a4d9c49275616e886103dd839dfc847847 # pip argon2-cffi-bindings @ https://files.pythonhosted.org/packages/ec/f7/378254e6dd7ae6f31fe40c8649eea7d4832a42243acaf0f1fff9083b2bed/argon2_cffi_bindings-21.2.0-cp36-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl#sha256=b746dba803a79238e925d9046a63aa26bf86ab2a2fe74ce6b009a1c3f5c8f2ae # pip isoduration @ https://files.pythonhosted.org/packages/7b/55/e5326141505c5d5e34c5e0935d2908a74e4561eca44108fbfb9c13d2911a/isoduration-20.11.0-py3-none-any.whl#sha256=b2904c2a4228c3d44f409c8ae8e2370eb21a26f7ac2ec5446df141dde3452042 # pip jsonschema-specifications @ https://files.pythonhosted.org/packages/d7/48/b62ccba8f4ac91817d6a11b340e63806175dafb10234a8cf7140bd389da5/jsonschema_specifications-2023.11.2-py3-none-any.whl#sha256=e74ba7c0a65e8cb49dc26837d6cfe576557084a8b423ed16a420984228104f93 -# pip jupyter-server-terminals @ https://files.pythonhosted.org/packages/ea/7f/36db12bdb90f5237766dcbf59892198daab7260acbcf03fc75e2a2a82672/jupyter_server_terminals-0.4.4-py3-none-any.whl#sha256=75779164661cec02a8758a5311e18bb8eb70c4e86c6b699403100f1585a12a36 +# pip jupyter-server-terminals @ https://files.pythonhosted.org/packages/63/9a/98d252b7977ac3aa0aa4152b87b356e2048d4b193f38840c0e00dd85fadc/jupyter_server_terminals-0.5.0-py3-none-any.whl#sha256=2fc0692c883bfd891f4fba0c4b4a684a37234b0ba472f2e97ed0a3888f46e1e4 # pip jupyterlite-core @ https://files.pythonhosted.org/packages/2f/0b/58eb568cbce3bbaa8702c6ce297870402828b222598a1db10e23e7190f52/jupyterlite_core-0.2.1-py3-none-any.whl#sha256=3f6161c4ad609bca913a42598005ff577611daae8dce448292fbb2c15db6b393 -# pip pyzmq @ https://files.pythonhosted.org/packages/a2/e0/08605421a2ede5d87adbde9685599fa7e6af1df700c657759a1892ced942/pyzmq-25.1.1-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=d457aed310f2670f59cc5b57dcfced452aeeed77f9da2b9763616bd57e4dbaae +# pip pyzmq @ https://files.pythonhosted.org/packages/76/8b/6fca99e22c6316917de32b17be299dea431544209d619da16b6d9ec85c83/pyzmq-25.1.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl#sha256=c0b5ca88a8928147b7b1e2dfa09f3b6c256bc1135a1338536cbc9ea13d3b7add # pip argon2-cffi @ https://files.pythonhosted.org/packages/a4/6a/e8a041599e78b6b3752da48000b14c8d1e8a04ded09c88c714ba047f34f5/argon2_cffi-23.1.0-py3-none-any.whl#sha256=c670642b78ba29641818ab2e68bd4e6a78ba53b7eff7b4c3815ae16abf91c7ea # pip jsonschema @ https://files.pythonhosted.org/packages/0f/ed/0058234d8dd2b1fc6beeea8eab945191a05e9d391a63202f49fe23327586/jsonschema-4.20.0-py3-none-any.whl#sha256=ed6231f0429ecf966f5bc8dfef245998220549cbbcf140f913b7464c52c3b6b3 # pip jupyter-client @ https://files.pythonhosted.org/packages/43/ae/5f4f72980765e2e5e02b260f9c53bcc706cefa7ac9c8d7240225c55788d4/jupyter_client-8.6.0-py3-none-any.whl#sha256=909c474dbe62582ae62b758bca86d6518c85234bdee2d908c778db6d72f39d99 @@ -303,7 +303,7 @@ https://conda.anaconda.org/conda-forge/noarch/sphinxext-opengraph-0.9.0-pyhd8ed1 # pip jupyter-events @ https://files.pythonhosted.org/packages/e3/55/0c1aa72f4317e826a471dc4adc3036acd11d496ded68c4bbac2a88551519/jupyter_events-0.9.0-py3-none-any.whl#sha256=d853b3c10273ff9bc8bb8b30076d65e2c9685579db736873de6c2232dde148bf # pip nbformat @ https://files.pythonhosted.org/packages/f4/e7/ef30a90b70eba39e675689b9eaaa92530a71d7435ab8f9cae520814e0caf/nbformat-5.9.2-py3-none-any.whl#sha256=1c5172d786a41b82bcfd0c23f9e6b6f072e8fb49c39250219e4acfff1efe89e9 # pip nbclient @ https://files.pythonhosted.org/packages/6b/3a/607149974149f847125c38a62b9ea2b8267eb74823bbf8d8c54ae0212a00/nbclient-0.9.0-py3-none-any.whl#sha256=a3a1ddfb34d4a9d17fc744d655962714a866639acd30130e9be84191cd97cd15 -# pip nbconvert @ https://files.pythonhosted.org/packages/84/61/460af4b68b3c681d1f82d48646cf2acb8f6d29edf9a8366dc37ae69e902a/nbconvert-7.11.0-py3-none-any.whl#sha256=d1d417b7f34a4e38887f8da5bdfd12372adf3b80f995d57556cb0972c68909fe -# pip jupyter-server @ https://files.pythonhosted.org/packages/3b/c8/2f997f763abafbed76fdb2534aa150939f2882f0ea88cd084a8b8a8f0e4d/jupyter_server-2.11.1-py3-none-any.whl#sha256=4b3a16e3ed16fd202588890f10b8ca589bd3e29405d128beb95935f059441373 +# pip nbconvert @ https://files.pythonhosted.org/packages/f4/c8/b2b201d67d8fbe6e33865bf32b84104a77e6ace7f1e12614d686a1130033/nbconvert-7.12.0-py3-none-any.whl#sha256=5b6c848194d270cc55fb691169202620d7b52a12fec259508d142ecbe4219310 +# pip jupyter-server @ https://files.pythonhosted.org/packages/ed/20/2437a3865083360103b0218e82a910c4c35f3bf7248c5cdae6934ba4d01c/jupyter_server-2.12.1-py3-none-any.whl#sha256=fd030dd7be1ca572e4598203f718df6630c12bd28a599d7f1791c4d7938e1010 # pip jupyterlab-server @ https://files.pythonhosted.org/packages/a2/97/abbbe35fc67b6f9423309988f2e411f7cb117b08321866d3d8b720f4c0d4/jupyterlab_server-2.25.2-py3-none-any.whl#sha256=5b1798c9cc6a44f65c757de9f97fc06fc3d42535afbf47d2ace5e964ab447aaf # pip jupyterlite-sphinx @ https://files.pythonhosted.org/packages/fa/f9/ad6d7164eca7ab9d523fc9b8c8a4a5508b424ee051f44a01797be224aeaa/jupyterlite_sphinx-0.10.0-py3-none-any.whl#sha256=72f332bf2748902802b719fbce598234e27facfcdc9aec020bf8cf025b12ba62 diff --git a/build_tools/circle/doc_min_dependencies_environment.yml b/build_tools/circle/doc_min_dependencies_environment.yml index 26cda35f6588e..18c52146da5ff 100644 --- a/build_tools/circle/doc_min_dependencies_environment.yml +++ b/build_tools/circle/doc_min_dependencies_environment.yml @@ -4,21 +4,21 @@ channels: - conda-forge dependencies: - - python=3.8 - - numpy=1.17.3 # min + - python=3.9 + - numpy=1.19.5 # min - blas - - scipy=1.5.0 # min + - scipy=1.6.0 # min - cython=0.29.33 # min - joblib - threadpoolctl - matplotlib=3.3.4 # min - - pandas=1.0.5 # min + - pandas=1.1.5 # min - pyamg - pytest - pytest-xdist=2.5.0 - pillow - setuptools - - scikit-image=0.16.2 # min + - scikit-image=0.17.2 # min - seaborn - memory_profiler - compilers diff --git a/build_tools/circle/doc_min_dependencies_linux-64_conda.lock b/build_tools/circle/doc_min_dependencies_linux-64_conda.lock index 5f4cee440dbc9..cd5716a795079 100644 --- a/build_tools/circle/doc_min_dependencies_linux-64_conda.lock +++ b/build_tools/circle/doc_min_dependencies_linux-64_conda.lock @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: aa071bb1fa7968b6df9fd3662b49affc88d4f0648d359f76a96ef677162b92b3 +# input_hash: 35f943b65f19232746bf1ac103664d9fa08c9fce0bcc39d7ee2ecf873d996bff @EXPLICIT https://conda.anaconda.org/conda-forge/linux-64/_libgcc_mutex-0.1-conda_forge.tar.bz2#d7c89558ba9fa0495403155b64376d81 https://conda.anaconda.org/conda-forge/linux-64/ca-certificates-2023.11.17-hbcca054_0.conda#01ffc8d36f9eba0ce0b3c1955fa780ee @@ -9,26 +9,24 @@ https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed3 https://conda.anaconda.org/conda-forge/noarch/font-ttf-source-code-pro-2.038-h77eed37_0.tar.bz2#4d59c254e01d9cde7957100457e2d5fb https://conda.anaconda.org/conda-forge/noarch/font-ttf-ubuntu-0.83-h77eed37_1.conda#6185f640c43843e5ad6fd1c5372c3f80 https://conda.anaconda.org/conda-forge/noarch/kernel-headers_linux-64-2.6.32-he073ed8_16.conda#7ca122655873935e02c91279c5b03c8c -https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.36.1-hea4e1c9_2.tar.bz2#bd4f2e711b39af170e7ff15163fe87ee -https://conda.anaconda.org/conda-forge/linux-64/libgcc-devel_linux-64-7.5.0-hda03d7c_20.tar.bz2#2146b25eb2a762a44fab709338a7b6d9 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran4-7.5.0-h14aa051_20.tar.bz2#a072eab836c3a9578ce72b5640ce592d -https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-devel_linux-64-7.5.0-hb016644_20.tar.bz2#31d5500f621954679ee41d7f5d1089fb +https://conda.anaconda.org/conda-forge/linux-64/ld_impl_linux-64-2.40-h41732ed_0.conda#7aca3059a1729aa76c597603f10b0dd3 +https://conda.anaconda.org/conda-forge/noarch/libgcc-devel_linux-64-12.3.0-h8bca6fd_103.conda#1d7f6d1825bd6bf21ee04336ec87a777 +https://conda.anaconda.org/conda-forge/noarch/libstdcxx-devel_linux-64-12.3.0-h8bca6fd_103.conda#3f784d2c059e960156d1ab3858cbf200 https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-13.2.0-h7e041cc_3.conda#937eaed008f6bf2191c5fe76f87755e9 -https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.8-4_cp38.conda#ea6b353536f42246cd130c7fef1285cf +https://conda.anaconda.org/conda-forge/linux-64/python_abi-3.9-4_cp39.conda#bfe4b3259a8ac6cdf0037752904da6a7 +https://conda.anaconda.org/conda-forge/noarch/tzdata-2023c-h71feb2d_0.conda#939e3e74d8be4dac89ce83b20de2492a https://conda.anaconda.org/conda-forge/noarch/fonts-conda-forge-1-0.tar.bz2#f766549260d6815b0c52253f1fb1bb29 -https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-7.5.0-h14aa051_20.tar.bz2#c3b2ad091c043c08689e64b10741484b https://conda.anaconda.org/conda-forge/linux-64/libgomp-13.2.0-h807b86a_3.conda#7124cbb46b13d395bdde68f2d215c989 https://conda.anaconda.org/conda-forge/noarch/sysroot_linux-64-2.12-he073ed8_16.conda#071ea8dceff4d30ac511f4a2f8437cd1 -https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.36.1-h193b22a_2.tar.bz2#32aae4265554a47ea77f7c09f86aeb3b +https://conda.anaconda.org/conda-forge/linux-64/binutils_impl_linux-64-2.40-hf600244_0.conda#33084421a8c0af6aef1b439707f7662a https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2#fee5683a3f04bd15cbd8318b096a27ab -https://conda.anaconda.org/conda-forge/linux-64/binutils-2.36.1-hdd6e379_2.tar.bz2#3111f86041b5b6863545ca49130cca95 -https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.36-hf3e587d_33.tar.bz2#72b245322c589284f1b92a5c971e5cb6 +https://conda.anaconda.org/conda-forge/linux-64/binutils-2.40-hdd6e379_0.conda#ccc940fddbc3fcd3d79cd4c654c4b5c4 +https://conda.anaconda.org/conda-forge/linux-64/binutils_linux-64-2.40-hbdbef99_2.conda#adfebae9fdc63a598495dfe3b006973a https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar.bz2#562b26ba2e19059551a811e72ab7f793 https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.2.0-h807b86a_3.conda#23fdf1fef05baeb7eadc2aed5fb0011f https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.10-hd590300_0.conda#75dae9a4201732aa78a530b826ee5fe0 https://conda.anaconda.org/conda-forge/linux-64/attr-2.5.1-h166bdaf_1.tar.bz2#d9c69a24ad678ffce24c6543a0176b00 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hd590300_5.conda#69b8b6202a07720f448be700e300ccf4 -https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-7.5.0-habd7529_20.tar.bz2#42140612518a7ce78f571d64b6a50ba3 https://conda.anaconda.org/conda-forge/linux-64/gettext-0.21.1-h27087fc_0.tar.bz2#14947d8770185e5153fdd04d4673ed37 https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.13-h58526e2_1001.tar.bz2#8c54672728e8ec6aa6db90cf2806d220 https://conda.anaconda.org/conda-forge/linux-64/icu-73.2-h59595ed_0.conda#cc47e1facc155f91abd89b11e48e72ff @@ -38,11 +36,13 @@ https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2#76 https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.19-hd590300_0.conda#1635570038840ee3f9c71d22aa5b8b6d https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.5.0-hcb278e6_1.conda#6305a3dd2752c76335295da4e581f2fd https://conda.anaconda.org/conda-forge/linux-64/libffi-3.4.2-h7f98852_5.tar.bz2#d645c6d2ac96843a2bfaccd2d62b3ac3 -https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2#b62b52da46c39ee2bc3c162ac7f1804d +https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-13.2.0-ha4646dd_3.conda#c714d905cdfa0e70200f68b80cc04764 +https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-hd590300_1.conda#4b06b43d0eca61db2899e4d7a289c302 https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-3.0.0-hd590300_1.conda#ea25936bb4080d843790b586850f82b8 https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hd590300_0.conda#30fd6e37fe21f86f4bd26d6ee73eeec7 https://conda.anaconda.org/conda-forge/linux-64/libogg-1.3.4-h7f98852_1.tar.bz2#6e8cc2173440d77708196c5b93771680 https://conda.anaconda.org/conda-forge/linux-64/libopus-1.3.1-h7f98852_1.tar.bz2#15345e56d527b330e1cacbdf58676e8f +https://conda.anaconda.org/conda-forge/linux-64/libsanitizer-12.3.0-h0f45ef3_3.conda#eda05ab0db8f8490945fd99244183e3a https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.38.1-h0b41bf4_0.conda#40b61aab5c7ba9ff276c41cfffe6b80b https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.3.2-hd590300_0.conda#30de3fd9b3b602f7473f30e684eeea8c https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad @@ -64,19 +64,18 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007 https://conda.anaconda.org/conda-forge/linux-64/xz-5.2.6-h166bdaf_0.tar.bz2#2161070d867d1b1204ea749c8eec4ef0 https://conda.anaconda.org/conda-forge/linux-64/yaml-0.2.5-h7f98852_2.tar.bz2#4cb3ad778ec2d5a7acbdf254eb1c42ae https://conda.anaconda.org/conda-forge/linux-64/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 -https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-7.5.0-h47867f9_33.tar.bz2#3a31c3f430a31184a5d07e67d3b24e2c -https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-7.5.0-h56cb351_20.tar.bz2#8f897b30195bd3a2251b4c51c3cc91cf -https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-7.5.0-hd0bb8aa_20.tar.bz2#dbe78fc5fb9c339f8e55426559e12f7b +https://conda.anaconda.org/conda-forge/linux-64/gcc_impl_linux-64-12.3.0-he2b93b0_3.conda#71c68ea75afe6ac7a9c62c08f5d67a5a https://conda.anaconda.org/conda-forge/linux-64/libcap-2.69-h0f662aa_0.conda#25cb5999faa414e5ccb2c1388f62d3d5 https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2.tar.bz2#4d331e44109e3f0e19b4cb8f9b82f3e1 https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda#a1cfcc585f0c42bf8d5546bb1dfb668d https://conda.anaconda.org/conda-forge/linux-64/libflac-1.4.3-h59595ed_0.conda#ee48bf17cc83a00f59ca1494d5646869 +https://conda.anaconda.org/conda-forge/linux-64/libgfortran-ng-13.2.0-h69a702a_3.conda#73031c79546ad06f1fe62e57fdd021bc https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.47-h71f35ed_0.conda#c2097d0b46367996f09b4e8e4920384a https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.39-h753d276_0.conda#e1c890aebdebbfbf87e2c917187b4416 https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.44.2-h2797004_0.conda#3b6a9f225c3dbe0d24f4fedd4625c5bf https://conda.anaconda.org/conda-forge/linux-64/libvorbis-1.3.7-h9c3ff4c_0.tar.bz2#309dec04b70a3cc0f1e84a4013683bc0 https://conda.anaconda.org/conda-forge/linux-64/libxcb-1.15-h0b41bf4_0.conda#33277193f5b92bad9fdd230eb700929c -https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.11.6-h232c23b_0.conda#427a3e59d66cb5d145020bd9c6493334 +https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.12.2-h232c23b_0.conda#1917ed337979482731e8ac8c1bedf9dd https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.33-hf1915f5_6.conda#80bf3b277c120dd294b51d404b931a75 https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.42-hcad00b1_0.conda#679c8961826aa4b50653bce17ee52abe https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 @@ -84,83 +83,85 @@ https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h4845f30_101.con https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.4-h7391055_0.conda#93ee23f12bc2e684548181256edd2cf6 https://conda.anaconda.org/conda-forge/linux-64/zlib-1.2.13-hd590300_5.conda#68c34ec6149623be41a1933ab996a209 https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.5-hfc55251_0.conda#04b88013080254850d6c01ed54810589 -https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.1.1-h516909a_0.tar.bz2#d98aa4948ec35f52907e2d6152e2b255 https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-h267a509_2.conda#9ae35c3d96db2c94ce0cef86efdfa2cb -https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-7.5.0-h78c8a43_33.tar.bz2#b2879010fb369f4012040f7a27657cd8 -https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-7.5.0-h555fc39_33.tar.bz2#5cf979793d2c5130a012cb6480867adc +https://conda.anaconda.org/conda-forge/linux-64/gcc-12.3.0-h8d2909c_2.conda#e2f2f81f367e14ca1f77a870bda2fe59 +https://conda.anaconda.org/conda-forge/linux-64/gcc_linux-64-12.3.0-h76fc315_2.conda#11517e7b5c910c5b5d6985c0c7eb7f50 +https://conda.anaconda.org/conda-forge/linux-64/gfortran_impl_linux-64-12.3.0-hfcedea8_3.conda#929fbb7d28a3727e96170e613253d2f4 +https://conda.anaconda.org/conda-forge/linux-64/gxx_impl_linux-64-12.3.0-he2b93b0_3.conda#b6ce9868fc6c65a18c22fd983e2d7e6f https://conda.anaconda.org/conda-forge/linux-64/krb5-1.21.2-h659d440_0.conda#cd95826dbd331ed1be26bdf401432844 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.3-hd590300_0.conda#32d16ad533c59bb0a3c5ffaf16110829 -https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.1-h783c2da_1.conda#70052d6c1e84643e30ffefb21ab6950f -https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_3.conda#9efe82d44b76a7529a1d702e5a37752e +https://conda.anaconda.org/conda-forge/linux-64/libglib-2.78.3-h783c2da_0.conda#9bd06b12bbfa6fd1740fd23af4b0f0c7 +https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-hb3ce162_4.conda#8a35df3cbc0c8b12cc8af9473ae75eef +https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.25-pthreads_h413a1c8_0.conda#d172b34a443b95f86089e8229ddc9a17 https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.2-hc60ed4a_1.conda#ef1910918dd895516a769ed36b5b3a4e https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.6.0-ha9c0a0a_2.conda#55ed21669b2015f77c180feb1dd41930 https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-17.0.6-h4dfa4b3_0.conda#c1665f9c1c9f6c93d8b4e492a6a39056 https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.33-hca2cd23_6.conda#e87530d1b12dd7f4e0f856dc07358d60 https://conda.anaconda.org/conda-forge/linux-64/nss-3.95-h1d7d5a4_0.conda#d3a8067adcc45a923f4b1987c91d69da -https://conda.anaconda.org/conda-forge/linux-64/python-3.8.18-hd12c33a_0_cpython.conda#334cb629e10d209f1c17630f653168b1 +https://conda.anaconda.org/conda-forge/linux-64/python-3.9.18-h0755675_0_cpython.conda#3ede353bc605068d9677e700b1847382 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-0.4.0-hd590300_1.conda#9bfac7ccd94d54fd21a0501296d60424 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-keysyms-0.4.0-h8ee46fc_1.conda#632413adcd8bc16b515cab87a2932913 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-renderutil-0.3.9-hd590300_1.conda#e995b155d938b6779da6ace6c6b13816 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-wm-0.4.1-h8ee46fc_1.conda#90108a432fb5c6150ccfee3f03388656 https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.7-h8ee46fc_0.conda#49e482d882669206653b095f5206c05b https://conda.anaconda.org/conda-forge/noarch/alabaster-0.7.13-pyhd8ed1ab_0.conda#06006184e203b61d3525f90de394471e -https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py38h17151c0_1.conda#7a5a699c8992fc51ef25e980f4502c2a +https://conda.anaconda.org/conda-forge/linux-64/brotli-python-1.1.0-py39h3d6467e_1.conda#c48418c8b35f1d59ae9ae1174812b40a +https://conda.anaconda.org/conda-forge/linux-64/c-compiler-1.7.0-hd590300_0.conda#fad1d0a651bf929c6c16fbf1f6ccfa7c https://conda.anaconda.org/conda-forge/noarch/certifi-2023.11.17-pyhd8ed1ab_0.conda#2011bcf45376341dd1d690263fdbc789 https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.3.2-pyhd8ed1ab_0.conda#7f4a9e3fcff3f6356ae99244a014da6a https://conda.anaconda.org/conda-forge/noarch/click-8.1.7-unix_pyh707e725_0.conda#f3ad426304898027fc619827ff428eca https://conda.anaconda.org/conda-forge/noarch/cloudpickle-3.0.0-pyhd8ed1ab_0.conda#753d29fe41bb881e4b9c004f0abf973f https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_0.tar.bz2#3faab06a954c2a04039983f2c4a50d99 -https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.1.1-hc9558a2_0.tar.bz2#1eb7c67eb11eab0c98a87f84174fdde1 https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_0.conda#5cd86562580f274031ede6aa6aa24441 -https://conda.anaconda.org/conda-forge/linux-64/cython-0.29.33-py38h8dc9893_0.conda#5d50cd654981f0ccc7c878ac297afaa7 +https://conda.anaconda.org/conda-forge/linux-64/cython-0.29.33-py39h227be39_0.conda#34bab6ef3e8cdf86fe78c46a984d3217 https://conda.anaconda.org/conda-forge/linux-64/dbus-1.13.6-h5008d03_3.tar.bz2#ecfff944ba3960ecb334b9a2663d708d -https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py38h578d9bd_1.tar.bz2#3746b24949251f1a00ae0d616d4cdc1b +https://conda.anaconda.org/conda-forge/linux-64/docutils-0.19-py39hf3d152e_1.tar.bz2#adb733ec2ee669f6d010758d054da60f https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.2.0-pyhd8ed1ab_0.conda#f6c211fee3c98229652b60a9a42ef363 https://conda.anaconda.org/conda-forge/noarch/execnet-2.0.2-pyhd8ed1ab_0.conda#67de0d8241e1060a479e3c37793e26f9 https://conda.anaconda.org/conda-forge/linux-64/fontconfig-2.14.2-h14ed4e7_0.conda#0f69b688f52ff6da70bccb7ff7001d1d -https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.1.1-he991be0_0.tar.bz2#e38ac82cc517b9e245c1ae99f9f140da -https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.12.0-pyhca7485f_0.conda#036539452871d3b0906ff194ad808c9b -https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.1-hfc55251_1.conda#a50918d10114a0bf80fb46c7cc692058 +https://conda.anaconda.org/conda-forge/noarch/fsspec-2023.12.2-pyhca7485f_0.conda#bf40f2a8835b78b1f91083d306b493d2 +https://conda.anaconda.org/conda-forge/linux-64/gfortran-12.3.0-h499e0f7_2.conda#0558a8c44eb7a18e6682bd3a8ae6dcab +https://conda.anaconda.org/conda-forge/linux-64/gfortran_linux-64-12.3.0-h7fe76b4_2.conda#3a749210487c0358b6f135a648cbbf60 +https://conda.anaconda.org/conda-forge/linux-64/glib-tools-2.78.3-hfc55251_0.conda#41d2f46e0ac8372eeb959860713d9b21 +https://conda.anaconda.org/conda-forge/linux-64/gxx-12.3.0-h8d2909c_2.conda#673bac341be6b90ef9e8abae7e52ca46 +https://conda.anaconda.org/conda-forge/linux-64/gxx_linux-64-12.3.0-h8a814eb_2.conda#f517b1525e9783849bd56a5dc45a9960 https://conda.anaconda.org/conda-forge/noarch/idna-3.6-pyhd8ed1ab_0.conda#1a76f09108576397c41c0b0c5bd84134 https://conda.anaconda.org/conda-forge/noarch/imagesize-1.4.1-pyhd8ed1ab_0.tar.bz2#7de5386c8fea29e76b303f37dde4c352 https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_0.conda#f800d2da156d08e289b14e87e43c1ae5 -https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py38h7f3f72f_1.conda#b66dcd4f710628fc5563ad56f02ca89b +https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.5-py39h7633fee_1.conda#c9f74d717e5a2847a9f8b779c54130f2 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.16-hb7c19ff_0.conda#51bb7010fc86f70eee639b4bb7a894f5 +https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-20_linux64_openblas.conda#2b7bb4f7562c8cf334fc2e20c2d28abc https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_ha2b6cf4_4.conda#898e0dd993afbed0d871b60c2eb33b83 https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h4637d8d_4.conda#d4529f4dff3057982a7617c7ac58fde3 -https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-hfc447b1_2.conda#3cfa1ceef6936e656677ba59480106ce -https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-254-h3516f8a_0.conda#df4b1cd0c91b4234fb02b5701a4cdddc +https://conda.anaconda.org/conda-forge/linux-64/libpq-16.1-h33b98f1_7.conda#675317e46167caea24542d85c72f19a3 +https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-255-h3516f8a_0.conda#24e2649ebd432e652aa72cfd05f23a8e https://conda.anaconda.org/conda-forge/noarch/locket-1.0.0-pyhd8ed1ab_0.tar.bz2#91e27ef3d05cc772ce627e51cff111c4 -https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py38h01eb140_1.conda#2dabf287937cd631e292096cc6d0867e -https://conda.anaconda.org/conda-forge/linux-64/mkl-2020.4-h726a3e6_304.tar.bz2#b9b35a50e5377b19da6ec0709ae77fc3 -https://conda.anaconda.org/conda-forge/noarch/networkx-3.1-pyhd8ed1ab_0.conda#254f787d5068bc89f578bf63893ce8b4 +https://conda.anaconda.org/conda-forge/linux-64/markupsafe-2.1.3-py39hd1e30aa_1.conda#ee2b4665b852ec6ff2758f3c1b91233d +https://conda.anaconda.org/conda-forge/noarch/networkx-3.2-pyhd8ed1ab_0.conda#cec8cc498664cc00a070676aa89e69a7 +https://conda.anaconda.org/conda-forge/linux-64/openblas-0.3.25-pthreads_h7a3da1a_0.conda#87661673941b5e702275fdf0fc095ad0 https://conda.anaconda.org/conda-forge/linux-64/openjpeg-2.5.0-h488ebb8_3.conda#128c25b7fe6a25286a48f3a6a9b5b6f3 https://conda.anaconda.org/conda-forge/noarch/packaging-23.2-pyhd8ed1ab_0.conda#79002079284aa895f883c6b7f3f88fd6 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.1.0-pyhd8ed1ab_0.conda#45a5065664da0d1dfa8f8cd2eaf05ab9 https://conda.anaconda.org/conda-forge/noarch/pluggy-1.3.0-pyhd8ed1ab_0.conda#2390bd10bed1f3fdc7a537fb5a447d8d https://conda.anaconda.org/conda-forge/noarch/ply-3.11-py_1.tar.bz2#7205635cd71531943440fbfe3b6b5727 -https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py38h01eb140_1.conda#89cb08bb523adf12fed3829558638d84 +https://conda.anaconda.org/conda-forge/linux-64/psutil-5.9.5-py39hd1e30aa_1.conda#c2e412b0f11e5983bcfc35d9beb91ecb https://conda.anaconda.org/conda-forge/noarch/py-1.11.0-pyh6c4a22f_0.tar.bz2#b4613d7e7a493916d867842a6a148054 https://conda.anaconda.org/conda-forge/noarch/pygments-2.17.2-pyhd8ed1ab_0.conda#140a7f159396547e9799aa98f9f0742e https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.1.1-pyhd8ed1ab_0.conda#176f7d56f0cfe9008bdf1bccd7de02fb https://conda.anaconda.org/conda-forge/noarch/pysocks-1.7.1-pyha2e5f31_6.tar.bz2#2a7de29fb590ca14b5243c4c812c8025 https://conda.anaconda.org/conda-forge/noarch/pytz-2023.3.post1-pyhd8ed1ab_0.conda#c93346b446cd08c169d843ae5fc0da97 -https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py38h01eb140_1.conda#5f05353ae9a6c37e1b4aebc9f7834d23 -https://conda.anaconda.org/conda-forge/linux-64/setuptools-59.8.0-py38h578d9bd_1.tar.bz2#da023e4a9c777abc28434d7a6473dcc2 +https://conda.anaconda.org/conda-forge/linux-64/pyyaml-6.0.1-py39hd1e30aa_1.conda#37218233bcdc310e4fde6453bc1b40d8 +https://conda.anaconda.org/conda-forge/linux-64/setuptools-59.8.0-py39hf3d152e_1.tar.bz2#4252d0c211566a9f65149ba7f6e87aa4 https://conda.anaconda.org/conda-forge/noarch/six-1.16.0-pyh6c4a22f_0.tar.bz2#e5f25f8dbc060e9a8d912e432202afc2 https://conda.anaconda.org/conda-forge/noarch/snowballstemmer-2.2.0-pyhd8ed1ab_0.tar.bz2#4d22a9315e78c6827f806065957d566e -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.4-pyhd8ed1ab_0.conda#5a31a7d564f551d0e6dff52fd8cb5b16 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.2-py_0.tar.bz2#68e01cac9d38d0e717cd5c87bc3d2cc9 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.1-pyhd8ed1ab_0.conda#6c8c4d6eb2325e59290ac6dbbeacd5f0 https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-jsmath-1.0.1-pyhd8ed1ab_0.conda#da1d979339e2714c30a8e806a33ec087 -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.3-py_0.tar.bz2#d01180388e6d1838c3e1ad029590aa7a -https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.5-pyhd8ed1ab_2.tar.bz2#9ff55a0901cf952f05c654394de76bf7 https://conda.anaconda.org/conda-forge/noarch/tenacity-8.2.3-pyhd8ed1ab_0.conda#1482e77f87c6a702a7e05ef22c9b197b https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.2.0-pyha21a80b_0.conda#978d03388b62173b8e6f79162cf52b86 https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_0.tar.bz2#f832c45a477c78bebd107098db465095 https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5844808ffab9ebdb694585b50ba02a96 https://conda.anaconda.org/conda-forge/noarch/toolz-0.12.0-pyhd8ed1ab_0.tar.bz2#92facfec94bc02d6ccf42e7173831a36 -https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py38h01eb140_1.conda#660cfc2fc5bd9e3b458ad394976652cf -https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.8.0-pyha770c72_0.conda#5b1be40a26d10a06f6d4f1f9e19fa0c7 +https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.3-py39hd1e30aa_1.conda#cbe186eefb0bcd91e8f47c3908489874 +https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.9.0-pyha770c72_0.conda#a92a6440c3fe7052d63244f3aba2a4a7 https://conda.anaconda.org/conda-forge/noarch/wheel-0.42.0-pyhd8ed1ab_0.conda#1cdea58981c5cbc17b51973bcaddcea7 https://conda.anaconda.org/conda-forge/linux-64/xcb-util-image-0.4.0-h8ee46fc_1.conda#9d7bcddf49cbf727730af10e71022c73 https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.40-hd590300_0.conda#07c15d846a2e4d673da22cbd85fdb6d2 @@ -169,58 +170,66 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.11-hd590300_ https://conda.anaconda.org/conda-forge/noarch/zipp-3.17.0-pyhd8ed1ab_0.conda#2e4d6bc0b14e10f895fc6791a7d9b26a https://conda.anaconda.org/conda-forge/noarch/babel-2.13.1-pyhd8ed1ab_0.conda#3ccff479c246692468f604df9c85ef26 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.18.0-h3faef2a_0.conda#f907bb958910dc404647326ca80c263e -https://conda.anaconda.org/conda-forge/linux-64/compilers-1.1.1-0.tar.bz2#1ba267e19dbaf3db9dd0404e6fb9cdb9 -https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py38h01eb140_1.conda#56222b99bdd044e52c364c4fbee28a7a -https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.1-hfc55251_1.conda#8d7242302bb3d03b9a690b6dda872603 +https://conda.anaconda.org/conda-forge/linux-64/cxx-compiler-1.7.0-h00ab1b0_0.conda#b4537c98cb59f8725b0e1e65816b4a28 +https://conda.anaconda.org/conda-forge/linux-64/cytoolz-0.12.2-py39hd1e30aa_1.conda#e5b62f0c1f96413116f16d33973f1a44 +https://conda.anaconda.org/conda-forge/linux-64/fortran-compiler-1.7.0-heb67821_0.conda#7ef7c0f111dad1c8006504a0f1ccd820 +https://conda.anaconda.org/conda-forge/linux-64/glib-2.78.3-hfc55251_0.conda#e08e51acc7d1ae8dbe13255e7b4c64ac https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-7.0.0-pyha770c72_0.conda#a941237cd06538837b25cd245fcd25d8 https://conda.anaconda.org/conda-forge/noarch/jinja2-3.1.2-pyhd8ed1ab_1.tar.bz2#c8490ed5c70966d232fdd389d0dbed37 https://conda.anaconda.org/conda-forge/noarch/joblib-1.3.2-pyhd8ed1ab_0.conda#4da50d410f553db77e62ab62ffaa1abc -https://conda.anaconda.org/conda-forge/linux-64/libblas-3.8.0-20_mkl.tar.bz2#8fbce60932c01d0e193a1a814f2002be +https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.9.0-20_linux64_openblas.conda#36d486d72ab64ffea932329a1d3729a3 https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_hb11cfb5_4.conda#c90f4cbb57839c98fef8f830e4b9972f -https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-h5d7e998_0.conda#d8edd0e29db6fb6b6988e1a28d35d994 +https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.9.0-20_linux64_openblas.conda#6fabc51f5e647d09cc010c40061557e0 +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.6.0-hd429924_1.conda#1dbcc04604fdf1e526e6d1b0b6938396 https://conda.anaconda.org/conda-forge/noarch/memory_profiler-0.61.0-pyhd8ed1ab_0.tar.bz2#8b45f9f2b2f7a98b0ec179c8991a4a9b https://conda.anaconda.org/conda-forge/noarch/partd-1.4.1-pyhd8ed1ab_0.conda#acf4b7c0bcd5fa3b0e05801c4d2accd6 -https://conda.anaconda.org/conda-forge/linux-64/pillow-10.1.0-py38ha43c96d_0.conda#67ca17c651f86159a3b8ed1132d97c12 +https://conda.anaconda.org/conda-forge/linux-64/pillow-10.1.0-py39had0adad_0.conda#eeaa413fddccecb2ab7f747bdb55b07f https://conda.anaconda.org/conda-forge/noarch/pip-23.3.1-pyhd8ed1ab_0.conda#2400c0b86889f43aa52067161e1fb108 -https://conda.anaconda.org/conda-forge/noarch/platformdirs-4.0.0-pyhd8ed1ab_0.conda#6bb4ee32cd435deaeac72776c001e7ac https://conda.anaconda.org/conda-forge/noarch/plotly-5.14.0-pyhd8ed1ab_0.conda#6a7bcc42ef58dd6cf3da9333ea102433 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_5.conda#ac902ff3c1c6d750dd0dfc93a974ab74 https://conda.anaconda.org/conda-forge/noarch/pytest-7.4.3-pyhd8ed1ab_0.conda#5bdca0aca30b0ee62bb84854e027eae0 https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.8.2-pyhd8ed1ab_0.tar.bz2#dd999d1cc9f79e67dbb855c8924c7984 -https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py38h17151c0_0.conda#ae2edf79b63f97071aea203b22a6774a +https://conda.anaconda.org/conda-forge/linux-64/sip-6.7.12-py39h3d6467e_0.conda#e667a3ab0df62c54e60e1843d2e6defb https://conda.anaconda.org/conda-forge/noarch/urllib3-2.1.0-pyhd8ed1ab_0.conda#f8ced8ee63830dec7ecc1be048d1470a -https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.7-h98fc4e7_0.conda#6c919bafe5e03428a8e2ef319d7ef990 +https://conda.anaconda.org/conda-forge/linux-64/compilers-1.7.0-ha770c72_0.conda#81458b3aed8ab8711951ec3c0c04e097 +https://conda.anaconda.org/conda-forge/linux-64/gstreamer-1.22.7-h98fc4e7_1.conda#a8d71f6705ed1f70d7099a6bd1c078ac https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-8.3.0-h3d44ed6_0.conda#5a6f6c00ef982a9bc83558d9ac8f64a0 https://conda.anaconda.org/conda-forge/noarch/importlib_metadata-7.0.0-hd8ed1ab_0.conda#12aff14f84c337be5e5636bf612f4140 -https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.8.0-20_mkl.tar.bz2#14b25490fdcc44e879ac6c10fe764f68 -https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.8.0-20_mkl.tar.bz2#52c0ae3606eeae7e1d493f37f336f4f5 -https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py38h17151c0_5.conda#3d66f5c4a0af2713f60ec11bf1230136 +https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.9.0-20_linux64_openblas.conda#05c5862c7dc25e65ba6c471d96429dae +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.19.5-py39hd249d9e_3.tar.bz2#0cf333996ebdeeba8d1c8c1c0ee9eff9 +https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.12.2-py39h3d6467e_5.conda#93aff412f3e49fdb43361c0215cbd72d https://conda.anaconda.org/conda-forge/noarch/pytest-forked-1.6.0-pyhd8ed1ab_0.conda#a46947638b6e005b63d2d6271da529b0 https://conda.anaconda.org/conda-forge/noarch/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b -https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.5.0-pyhd8ed1ab_0.conda#03ed2d040648a5ba1063bf1cb0d87b78 -https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.7-h8e1006c_0.conda#065e2c1d49afa3fdc1a01f1dacd6ab09 -https://conda.anaconda.org/conda-forge/linux-64/liblapacke-3.8.0-20_mkl.tar.bz2#8274dc30518af9df1de47f5d9e73165c -https://conda.anaconda.org/conda-forge/linux-64/numpy-1.17.3-py38h95a1406_0.tar.bz2#bc0cbf611fe2f86eab29b98e51404f5e +https://conda.anaconda.org/conda-forge/linux-64/blas-devel-3.9.0-20_linux64_openblas.conda#9932a1d4e9ecf2d35fb19475446e361e +https://conda.anaconda.org/conda-forge/noarch/dask-core-2023.12.0-pyhd8ed1ab_0.conda#95eae0785aed72998493140dc0115382 +https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.7-h8e1006c_1.conda#89cd9374d5fc7371db238e4ef5c5f258 +https://conda.anaconda.org/conda-forge/linux-64/imagecodecs-lite-2019.12.3-py39hd257fcd_5.tar.bz2#32dba66d6abc2b4b5b019c9e54307312 +https://conda.anaconda.org/conda-forge/noarch/imageio-2.31.5-pyh8c1a49c_0.conda#6820ccf6a3a27df348f18c85dd89014a +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.3.4-py39h2fa2bec_0.tar.bz2#9ec0b2186fab9121c54f4844f93ee5b7 +https://conda.anaconda.org/conda-forge/linux-64/pandas-1.1.5-py39hde0f152_0.tar.bz2#79fc4b5b3a865b90dd3701cecf1ad33c +https://conda.anaconda.org/conda-forge/noarch/patsy-0.5.4-pyhd8ed1ab_0.conda#1184267eddebb57e47f8e1419c225595 https://conda.anaconda.org/conda-forge/noarch/pooch-1.8.0-pyhd8ed1ab_0.conda#134b2b57b7865d2316a7cce1915a51ed https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-2.5.0-pyhd8ed1ab_0.tar.bz2#1fdd1f3baccf0deb647385c677a1a48e -https://conda.anaconda.org/conda-forge/noarch/sphinx-6.0.0-pyhd8ed1ab_2.conda#ac1d3b55da1669ee3a56973054fd7efb -https://conda.anaconda.org/conda-forge/linux-64/blas-2.20-mkl.tar.bz2#e7d09a07f5413e53dca5282b8fa50bed -https://conda.anaconda.org/conda-forge/noarch/imageio-2.31.5-pyh8c1a49c_0.conda#6820ccf6a3a27df348f18c85dd89014a -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.3.4-py38h0efea84_0.tar.bz2#9818b095ff2ddceadb7553b0d56d219f +https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.3.0-py39hd257fcd_1.tar.bz2#c4b698994b2d8d2e659ae02202e6abe4 +https://conda.anaconda.org/conda-forge/linux-64/scipy-1.6.0-py39hee8e79c_0.tar.bz2#3afcb78281836e61351a2924f3230060 +https://conda.anaconda.org/conda-forge/linux-64/blas-2.120-openblas.conda#c8f6916a81a340650078171b1d852574 +https://conda.anaconda.org/conda-forge/linux-64/pyamg-4.2.3-py39hac2352c_1.tar.bz2#6fb0628d6195d8b6caa2422d09296399 +https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h450f30e_18.conda#ef0430f8df5dcdedcaaab340b228f30c +https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.12.2-pyhd8ed1ab_0.conda#cf88f3a1c11536bc3c10c14ad00ccc42 +https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.13.2-py39hd257fcd_0.tar.bz2#bd7cdadf70e34a19333c3aacc40206e8 +https://conda.anaconda.org/conda-forge/noarch/tifffile-2020.6.3-py_0.tar.bz2#1fb771bb25b2eecbc73abf5143fa35bd +https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py39h52134e7_5.conda#e1f148e57d071b09187719df86f513c1 +https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.17.2-py39hde0f152_4.tar.bz2#2a58a7e382317b03f023b2fddf40f8a1 +https://conda.anaconda.org/conda-forge/noarch/seaborn-0.12.2-hd8ed1ab_0.conda#50847a47c07812f88581081c620f5160 +https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.3.4-py39hf3d152e_0.tar.bz2#cbaec993375a908bbe506dc7328d747c https://conda.anaconda.org/conda-forge/noarch/numpydoc-1.2-pyhd8ed1ab_0.tar.bz2#025ad7ca2c7f65007ab6b6f5d93a56eb -https://conda.anaconda.org/conda-forge/linux-64/pandas-1.0.5-py38hcb8c335_0.tar.bz2#1e1b4382170fd26cf722ef008ffb651e -https://conda.anaconda.org/conda-forge/noarch/patsy-0.5.4-pyhd8ed1ab_0.conda#1184267eddebb57e47f8e1419c225595 -https://conda.anaconda.org/conda-forge/linux-64/pywavelets-1.1.1-py38h5c078b8_3.tar.bz2#dafeef887e68bd18ec84681747ca0fd5 -https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h82b777d_17.conda#4f01e33dbb406085a16a2813ab067e95 -https://conda.anaconda.org/conda-forge/linux-64/scipy-1.5.0-py38h18bccfc_0.tar.bz2#b6fda3b4ee494afef756621daa115d4d https://conda.anaconda.org/conda-forge/noarch/sphinx-copybutton-0.5.2-pyhd8ed1ab_0.conda#ac832cc43adc79118cf6e23f1f9b8995 -https://conda.anaconda.org/conda-forge/noarch/sphinx-prompt-1.3.0-py_0.tar.bz2#9363002e2a134a287af4e32ff0f26cdc -https://conda.anaconda.org/conda-forge/linux-64/pyamg-4.0.0-py38hf6732f7_1003.tar.bz2#44e00bf7a4b6a564e9313181aaea2615 -https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.9-py38hffdaa6c_5.conda#398e774c9eaa5ed4dddf7a7681f6cfb8 -https://conda.anaconda.org/conda-forge/linux-64/scikit-image-0.16.2-py38hb3f55d8_0.tar.bz2#468b398fefac8884cd6e6513af66549b -https://conda.anaconda.org/conda-forge/noarch/seaborn-base-0.12.2-pyhd8ed1ab_0.conda#cf88f3a1c11536bc3c10c14ad00ccc42 https://conda.anaconda.org/conda-forge/noarch/sphinx-gallery-0.15.0-pyhd8ed1ab_0.conda#1a49ca9515ef9a96edff2eea06143dc6 -https://conda.anaconda.org/conda-forge/linux-64/statsmodels-0.12.2-py38h5c078b8_0.tar.bz2#33787719ad03d33cffc4e2e3ea82bc9e -https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.3.4-py38h578d9bd_0.tar.bz2#2ad11624aec829f58f86a231bbdf3990 -https://conda.anaconda.org/conda-forge/noarch/seaborn-0.12.2-hd8ed1ab_0.conda#50847a47c07812f88581081c620f5160 +https://conda.anaconda.org/conda-forge/noarch/sphinx-prompt-1.3.0-py_0.tar.bz2#9363002e2a134a287af4e32ff0f26cdc +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-applehelp-1.0.7-pyhd8ed1ab_0.conda#aebfabcb60c33a89c1f9290cab49bc93 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-devhelp-1.0.5-pyhd8ed1ab_0.conda#ebf08f5184d8eaa486697bc060031953 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-htmlhelp-2.0.4-pyhd8ed1ab_0.conda#a9a89000dfd19656ad004b937eeb6828 +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-qthelp-1.0.6-pyhd8ed1ab_0.conda#cf5c9649272c677a964a7313279e3a9b +https://conda.anaconda.org/conda-forge/noarch/sphinx-6.0.0-pyhd8ed1ab_2.conda#ac1d3b55da1669ee3a56973054fd7efb +https://conda.anaconda.org/conda-forge/noarch/sphinxcontrib-serializinghtml-1.1.9-pyhd8ed1ab_0.conda#0612e497d7860728f2cda421ea2aec09 # pip sphinxext-opengraph @ https://files.pythonhosted.org/packages/50/ac/c105ed3e0a00b14b28c0aa630935af858fd8a32affeff19574b16e2c6ae8/sphinxext_opengraph-0.4.2-py3-none-any.whl#sha256=a51f2604f9a5b6c0d25d3a88e694d5c02e20812dc0e482adf96c8628f9109357 diff --git a/build_tools/cirrus/arm_tests.yml b/build_tools/cirrus/arm_tests.yml index 8fe3c7b6153f2..09874e081b460 100644 --- a/build_tools/cirrus/arm_tests.yml +++ b/build_tools/cirrus/arm_tests.yml @@ -8,7 +8,7 @@ linux_aarch64_test_task: memory: 6G env: CONDA_ENV_NAME: testenv - LOCK_FILE: build_tools/cirrus/py39_conda_forge_linux-aarch64_conda.lock + LOCK_FILE: build_tools/cirrus/pymin_conda_forge_linux-aarch64_conda.lock CONDA_PKGS_DIRS: /root/.conda/pkgs HOME: / # $HOME is not defined in image and is required to install mambaforge # Upload tokens have been encrypted via the CirrusCI interface: @@ -19,7 +19,7 @@ linux_aarch64_test_task: folder: /root/.cache/ccache conda_cache: folder: /root/.conda/pkgs - fingerprint_script: cat build_tools/cirrus/py39_conda_forge_linux-aarch64_conda.lock + fingerprint_script: cat build_tools/cirrus/pymin_conda_forge_linux-aarch64_conda.lock install_python_script: | # Install python so that update_tracking_issue has access to a Python diff --git a/build_tools/cirrus/arm_wheel.yml b/build_tools/cirrus/arm_wheel.yml index dcc52fddfd9ff..229b57318eeb3 100644 --- a/build_tools/cirrus/arm_wheel.yml +++ b/build_tools/cirrus/arm_wheel.yml @@ -2,8 +2,6 @@ macos_arm64_wheel_task: macos_instance: image: ghcr.io/cirruslabs/macos-monterey-xcode env: - CONFTEST_PATH: ${CIRRUS_WORKING_DIR}/conftest.py - CONFTEST_NAME: conftest.py CIBW_ENVIRONMENT: SKLEARN_SKIP_NETWORK_TESTS=1 SKLEARN_BUILD_PARALLEL=5 CIBW_TEST_COMMAND: bash {project}/build_tools/wheels/test_wheels.sh @@ -49,8 +47,6 @@ linux_arm64_wheel_task: cpu: 4 memory: 4G env: - CONFTEST_PATH: ${CIRRUS_WORKING_DIR}/conftest.py - CONFTEST_NAME: conftest.py CIBW_ENVIRONMENT: SKLEARN_SKIP_NETWORK_TESTS=1 SKLEARN_BUILD_PARALLEL=5 CIBW_TEST_COMMAND: bash {project}/build_tools/wheels/test_wheels.sh @@ -62,9 +58,6 @@ linux_arm64_wheel_task: BOT_GITHUB_TOKEN: ENCRYPTED[9b50205e2693f9e4ce9a3f0fcb897a259289062fda2f5a3b8aaa6c56d839e0854a15872f894a70fca337dd4787274e0f] matrix: # Only the latest Python version is tested - - env: - CIBW_BUILD: cp38-manylinux_aarch64 - CIBW_TEST_SKIP: "*_aarch64" - env: CIBW_BUILD: cp39-manylinux_aarch64 CIBW_TEST_SKIP: "*_aarch64" diff --git a/build_tools/cirrus/py39_conda_forge_environment.yml b/build_tools/cirrus/pymin_conda_forge_environment.yml similarity index 100% rename from build_tools/cirrus/py39_conda_forge_environment.yml rename to build_tools/cirrus/pymin_conda_forge_environment.yml diff --git a/build_tools/cirrus/py39_conda_forge_linux-aarch64_conda.lock b/build_tools/cirrus/pymin_conda_forge_linux-aarch64_conda.lock similarity index 100% rename from build_tools/cirrus/py39_conda_forge_linux-aarch64_conda.lock rename to build_tools/cirrus/pymin_conda_forge_linux-aarch64_conda.lock diff --git a/build_tools/github/Windows b/build_tools/github/Windows index 5ba35f790ca5e..a9971aa525581 100644 --- a/build_tools/github/Windows +++ b/build_tools/github/Windows @@ -3,12 +3,10 @@ ARG PYTHON_VERSION FROM winamd64/python:$PYTHON_VERSION-windowsservercore ARG WHEEL_NAME -ARG CONFTEST_NAME ARG CIBW_TEST_REQUIRES # Copy and install the Windows wheel COPY $WHEEL_NAME $WHEEL_NAME -COPY $CONFTEST_NAME $CONFTEST_NAME RUN pip install $env:WHEEL_NAME # Install the testing dependencies diff --git a/build_tools/github/build_minimal_windows_image.sh b/build_tools/github/build_minimal_windows_image.sh index aa7bfc3e31f9f..2995b6906c535 100755 --- a/build_tools/github/build_minimal_windows_image.sh +++ b/build_tools/github/build_minimal_windows_image.sh @@ -20,7 +20,6 @@ fi # Build a minimal Windows Docker image for testing the wheels docker build --build-arg PYTHON_VERSION=$PYTHON_VERSION \ --build-arg WHEEL_NAME=$WHEEL_NAME \ - --build-arg CONFTEST_NAME=$CONFTEST_NAME \ --build-arg CIBW_TEST_REQUIRES="$CIBW_TEST_REQUIRES" \ -f build_tools/github/Windows \ -t scikit-learn/minimal-windows . diff --git a/build_tools/github/test_source.sh b/build_tools/github/test_source.sh index 3a65a657addec..c93d22a08e791 100755 --- a/build_tools/github/test_source.sh +++ b/build_tools/github/test_source.sh @@ -13,7 +13,6 @@ python -m pip install pytest pandas # Run the tests on the installed source distribution mkdir tmp_for_test -cp scikit-learn/scikit-learn/conftest.py tmp_for_test cd tmp_for_test pytest --pyargs sklearn diff --git a/build_tools/update_environments_and_lock_files.py b/build_tools/update_environments_and_lock_files.py index df99c69048e19..93c5f45397692 100644 --- a/build_tools/update_environments_and_lock_files.py +++ b/build_tools/update_environments_and_lock_files.py @@ -147,23 +147,23 @@ def remove_from(alist, to_remove): }, }, { - "build_name": "py38_conda_defaults_openblas", + "build_name": "pymin_conda_defaults_openblas", "folder": "build_tools/azure", "platform": "linux-64", "channel": "defaults", "conda_dependencies": common_dependencies + ["ccache"], "package_constraints": { - "python": "3.8", + "python": "3.9", "blas": "[build=openblas]", - "numpy": "min", - "scipy": "min", + "numpy": "1.21", # the min version is not available on the defaults channel + "scipy": "1.7", # the min version has some low level crashes "matplotlib": "min", "threadpoolctl": "2.2.0", "cython": "min", }, }, { - "build_name": "py38_conda_forge_openblas_ubuntu_2204", + "build_name": "pymin_conda_forge_openblas_ubuntu_2204", "folder": "build_tools/azure", "platform": "linux-64", "channel": "conda-forge", @@ -173,7 +173,7 @@ def remove_from(alist, to_remove): + ["ccache"] ), "package_constraints": { - "python": "3.8", + "python": "3.9", "blas": "[build=openblas]", }, }, @@ -247,7 +247,7 @@ def remove_from(alist, to_remove): }, }, { - "build_name": "py38_conda_forge_mkl", + "build_name": "pymin_conda_forge_mkl", "folder": "build_tools/azure", "platform": "win-64", "channel": "conda-forge", @@ -256,7 +256,7 @@ def remove_from(alist, to_remove): "pip", ], "package_constraints": { - "python": "3.8", + "python": "3.9", "blas": "[build=mkl]", }, }, @@ -280,7 +280,7 @@ def remove_from(alist, to_remove): ], "pip_dependencies": ["sphinxext-opengraph"], "package_constraints": { - "python": "3.8", + "python": "3.9", "numpy": "min", "scipy": "min", "matplotlib": "min", @@ -321,7 +321,7 @@ def remove_from(alist, to_remove): }, }, { - "build_name": "py39_conda_forge", + "build_name": "pymin_conda_forge", "folder": "build_tools/cirrus", "platform": "linux-aarch64", "channel": "conda-forge", diff --git a/build_tools/wheels/build_wheels.sh b/build_tools/wheels/build_wheels.sh index 85a94e5feb627..d4283a7058e95 100755 --- a/build_tools/wheels/build_wheels.sh +++ b/build_tools/wheels/build_wheels.sh @@ -35,14 +35,6 @@ if [[ $(uname) == "Darwin" ]]; then export CFLAGS="$CFLAGS -I$PREFIX/include" export CXXFLAGS="$CXXFLAGS -I$PREFIX/include" export LDFLAGS="$LDFLAGS -Wl,-rpath,$PREFIX/lib -L$PREFIX/lib -lomp" - - if [[ $(uname -m) == "arm64" && "$CIBW_BUILD" == "cp38-macosx_arm64" ]]; then - # Enables native building and testing for macosx arm on Python 3.8. For details see: - # https://cibuildwheel.readthedocs.io/en/stable/faq/#macos-building-cpython-38-wheels-on-arm64 - curl -o /tmp/Python38.pkg https://www.python.org/ftp/python/3.8.10/python-3.8.10-macos11.pkg - sudo installer -pkg /tmp/Python38.pkg -target / - sh "/Applications/Python 3.8/Install Certificates.command" - fi fi diff --git a/build_tools/wheels/test_wheels.sh b/build_tools/wheels/test_wheels.sh index bfbe769add657..e8cdf4b3ea8a2 100755 --- a/build_tools/wheels/test_wheels.sh +++ b/build_tools/wheels/test_wheels.sh @@ -3,14 +3,6 @@ set -e set -x -UNAME=$(uname) - -if [[ "$UNAME" != "Linux" ]]; then - # The Linux test environment is run in a Docker container and - # it is not possible to copy the test configuration file (yet) - cp $CONFTEST_PATH $CONFTEST_NAME -fi - python -c "import joblib; print(f'Number of cores (physical): \ {joblib.cpu_count()} ({joblib.cpu_count(only_physical_cores=True)})')" diff --git a/conftest.py b/conftest.py deleted file mode 100644 index e4e478d2d72d7..0000000000000 --- a/conftest.py +++ /dev/null @@ -1,6 +0,0 @@ -# Even if empty this file is useful so that when running from the root folder -# ./sklearn is added to sys.path by pytest. See -# https://docs.pytest.org/en/latest/explanation/pythonpath.html for more -# details. For example, this allows to build extensions in place and run pytest -# doc/modules/clustering.rst and use sklearn from the local folder rather than -# the one from site-packages. diff --git a/doc/computing/parallelism.rst b/doc/computing/parallelism.rst index cc4d0a0fd2d07..0cd02ab5a0449 100644 --- a/doc/computing/parallelism.rst +++ b/doc/computing/parallelism.rst @@ -316,3 +316,12 @@ most machines. Users looking for the best performance might want to tune this variable using powers of 2 so as to get the best parallelism behavior for their hardware, especially with respect to their caches' sizes. + +`SKLEARN_DOC_BUILD_WARNINGS_AS_ERRORS` +~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ + +This environment variable issue errors instead of warnings when building the +documentation. It ensures that we don't introduce new warnings in the example +gallery. By default, the warnings are treated as errors (e.g. `"true"`). This +is different from `SPHINXOPTS="-W"` that catch syntax warnings from the rst +generation. diff --git a/doc/conf.py b/doc/conf.py index 4ef9cb61519ec..c5e87442abe1f 100644 --- a/doc/conf.py +++ b/doc/conf.py @@ -706,18 +706,19 @@ def setup(app): " non-GUI backend, so cannot show the figure." ), ) -# Raise warning as error in example to catch warnings when building the documentation -# Since we are using lock files to build the documentation, we should not have any -# warnings. Before updating the lock files, we need to fix them. -for warning_type in (FutureWarning, DeprecationWarning, VisibleDeprecationWarning): - warnings.filterwarnings("error", category=warning_type) -# TODO: remove when pyamg > 5.0.1 -# Avoid a deprecation warning due pkg_resources deprecation in pyamg. -warnings.filterwarnings( - "ignore", - message="pkg_resources is deprecated as an API", - category=DeprecationWarning, -) +if os.environ.get("SKLEARN_DOC_BUILD_WARNINGS_AS_ERRORS", "true").lower() == "true": + # Raise warning as error in example to catch warnings when building the + # documentation Since we are using lock files to build the documentation, we should + # not have any warnings. Before updating the lock files, we need to fix them. + for warning_type in (FutureWarning, DeprecationWarning, VisibleDeprecationWarning): + warnings.filterwarnings("error", category=warning_type) + # TODO: remove when pyamg > 5.0.1 + # Avoid a deprecation warning due pkg_resources deprecation in pyamg. + warnings.filterwarnings( + "ignore", + message="pkg_resources is deprecated as an API", + category=DeprecationWarning, + ) # maps functions with a class name that is indistinguishable when case is # ignore to another filename diff --git a/doc/whats_new/v1.4.rst b/doc/whats_new/v1.4.rst index 067d5137e1767..953c4906d3fb2 100644 --- a/doc/whats_new/v1.4.rst +++ b/doc/whats_new/v1.4.rst @@ -24,24 +24,21 @@ random sampling procedures. solvers `"lbfgs"` and `"newton-cg"`. Both solvers can now reach much higher precision for the coefficients depending on the specified `tol`. Additionally, lbfgs can make better use of `tol`, i.e., stop sooner or reach higher precision. + Note: The lbfgs is the default solver, so this change might effect many models. + This change also means that with this new version of scikit-learn, the resulting + coefficients `coef_` and `intercept_` of your models will change for these two + solvers (when fit on the same data again). The amount of change depends on the + specified `tol`, for small values you will get more precise results. :pr:`26721` by :user:`Christian Lorentzen `. - .. note:: - - The lbfgs is the default solver, so this change might effect many models. - - This change also means that with this new version of scikit-learn, the resulting - coefficients `coef_` and `intercept_` of your models will change for these two - solvers (when fit on the same data again). The amount of change depends on the - specified `tol`, for small values you will get more precise results. - - |Fix| fixes a memory leak seen in PyPy for estimators using the Cython loss functions. :pr:`27670` by :user:`Guillaume Lemaitre `. Changes impacting all modules ----------------------------- -- |MajorFeature| Transformers now support polars output with `set_output(transform="polars")`. +- |MajorFeature| Transformers now support polars output with + `set_output(transform="polars")`. :pr:`27315` by `Thomas Fan`_. - |Enhancement| All estimators now recognizes the column names from any dataframe @@ -77,12 +74,12 @@ more details. :class:`multiclass.OneVsOneClassifier` and :class:`multiclass.OutputCodeClassifier` now support metadata routing in their ``fit`` and ``partial_fit``, and route metadata to the underlying - estimator's ``fit`` and ``partial_fit``. :pr:`27308` by :user:`Stefanie - Senger `. + estimator's ``fit`` and ``partial_fit``. + :pr:`27308` by :user:`Stefanie Senger `. - |Feature| :class:`pipeline.Pipeline` now supports metadata routing according - to :ref:`metadata routing user guide `. :pr:`26789` by - `Adrin Jalali`_. + to :ref:`metadata routing user guide `. + :pr:`26789` by `Adrin Jalali`_. - |Feature| :func:`~model_selection.cross_validate`, :func:`~model_selection.cross_val_score`, and @@ -91,20 +88,20 @@ more details. splitter's `split`. The metadata is accepted via the new `params` parameter. `fit_params` is deprecated and will be removed in version 1.6. `groups` parameter is also not accepted as a separate argument when metadata routing - is enabled and should be passed via the `params` parameter. :pr:`26896` by - `Adrin Jalali`_. + is enabled and should be passed via the `params` parameter. + :pr:`26896` by `Adrin Jalali`_. - |Feature| :class:`~model_selection.GridSearchCV`, :class:`~model_selection.RandomizedSearchCV`, :class:`~model_selection.HalvingGridSearchCV`, and :class:`~model_selection.HalvingRandomSearchCV` now support metadata routing in their ``fit`` and ``score``, and route metadata to the underlying - estimator's ``fit``, the CV splitter, and the scorer. :pr:`27058` by `Adrin - Jalali`_. + estimator's ``fit``, the CV splitter, and the scorer. + :pr:`27058` by `Adrin Jalali`_. - |Feature| :class:`~compose.ColumnTransformer` now supports metadata routing - according to :ref:`metadata routing user guide `. :pr:`27005` - by `Adrin Jalali`_. + according to :ref:`metadata routing user guide `. + :pr:`27005` by `Adrin Jalali`_. - |Feature| :class:`linear_model.LogisticRegressionCV` now supports metadata routing. :meth:`linear_model.LogisticRegressionCV.fit` now @@ -119,19 +116,20 @@ more details. - |Feature| :class:`linear_model.OrthogonalMatchingPursuitCV` now supports metadata routing. Its `fit` now accepts ``**fit_params``, which are passed to - the underlying splitter. :pr:`27500` by :user:`Stefanie Senger - `. - -- |Fix| All meta-estimators for which metadata routing is not yet implemented - now raise a `NotImplementedError` on `get_metadata_routing` and on `fit` if - metadata routing is enabled and any metadata is passed to them. :pr:`27389` - by `Adrin Jalali`_. + the underlying splitter. + :pr:`27500` by :user:`Stefanie Senger `. - |Feature| :class:`ElasticNetCV`, :class:`LassoCV`, :class:`MultiTaskElasticNetCV` and :class:`MultiTaskLassoCV` now support metadata routing and route metadata to the CV splitter. :pr:`27478` by :user:`Omar Salman `. +- |Fix| All meta-estimators for which metadata routing is not yet implemented + now raise a `NotImplementedError` on `get_metadata_routing` and on `fit` if + metadata routing is enabled and any metadata is passed to them. + :pr:`27389` by `Adrin Jalali`_. + + Support for SciPy sparse arrays ------------------------------- @@ -141,7 +139,8 @@ and classes are impacted: **Functions:** - :func:`cluster.compute_optics_graph` in :pr:`27104` by - :user:`Maren Westermann ` and in :pr:`27250` by :user:`Yao Xiao `; + :user:`Maren Westermann ` and in :pr:`27250` by + :user:`Yao Xiao `; - :func:`cluster.kmeans_plusplus` in :pr:`27179` by :user:`Nurseit Kamchyev `; - :func:`decomposition.non_negative_factorization` in :pr:`27100` by :user:`Isaac Virshup `; @@ -156,7 +155,7 @@ and classes are impacted: :user:`Yao Xiao `; - :func:`metrics.pairwise.pairwise_kernels` in :pr:`27250` by :user:`Yao Xiao `; -- :func:`sklearn.utils.multiclass.type_of_target` in :pr:`27274` by +- :func:`utils.multiclass.type_of_target` in :pr:`27274` by :user:`Yao Xiao `. **Classes:** @@ -165,13 +164,16 @@ and classes are impacted: - :class:`cluster.KMeans` in :pr:`27179` by :user:`Nurseit Kamchyev `; - :class:`cluster.MiniBatchKMeans` in :pr:`27179` by :user:`Nurseit Kamchyev `; - :class:`cluster.OPTICS` in :pr:`27104` by - :user:`Maren Westermann ` and in :pr:`27250` by :user:`Yao Xiao `; -- :class:`decomposition.NMF` in :pr:`27100` by :user:`Isaac Virshup `; + :user:`Maren Westermann ` and in :pr:`27250` by + :user:`Yao Xiao `; +- :class:`cluster.SpectralClustering` in :pr:`27161` by + :user:`Bharat Raghunathan `; - :class:`decomposition.MiniBatchNMF` in :pr:`27100` by :user:`Isaac Virshup `; +- :class:`decomposition.NMF` in :pr:`27100` by :user:`Isaac Virshup `; - :class:`feature_extraction.text.TfidfTransformer` in :pr:`27219` by :user:`Yao Xiao `; -- :class:`cluster.Isomap` in :pr:`27250` by :user:`Yao Xiao `; +- :class:`manifold.Isomap` in :pr:`27250` by :user:`Yao Xiao `; - :class:`manifold.SpectralEmbedding` in :pr:`27240` by :user:`Yao Xiao `; - :class:`manifold.TSNE` in :pr:`27250` by :user:`Yao Xiao `; - :class:`impute.SimpleImputer` in :pr:`27277` by :user:`Yao Xiao `; @@ -182,12 +184,41 @@ and classes are impacted: - :class:`neural_network.BernoulliRBM` in :pr:`27252` by :user:`Yao Xiao `; - :class:`preprocessing.PolynomialFeatures` in :pr:`27166` by - :user:`Mohit Joshi `. -- :class:`cluster.SpectralClustering` in :pr:`27161` by :user:`Bharat Raghunathan `; + :user:`Mohit Joshi `; - :class:`random_projection.GaussianRandomProjection` in :pr:`27314` by + :user:`Stefanie Senger `; +- :class:`random_projection.SparseRandomProjection` in :pr:`27314` by :user:`Stefanie Senger `. -- :class:`random_projection.SparseRandomProjection`in :pr:`27314` by - :user:`Stefanie Senger `. + +Support for Array API +--------------------- + +Several estimators and functions support the +`Array API `_. Such changes allows for using +the estimators and functions with other libraries such as JAX, CuPy, and PyTorch. +This therefore enables some GPU-accelerated computations. + +See :ref:`array_api` for more details. + +**Functions:** + +- :func:`sklearn.metrics.accuracy_score` and :func:`sklearn.metrics.zero_one_loss` in + :pr:`27137` by :user:`Edoardo Abati `; +- :func:`sklearn.model_selection.train_test_split` in :pr:`26855` by `Tim Head`_; +- :func:`~utils.multiclass.is_multilabel` in :pr:`27601` by + :user:`Yaroslav Korobko `. + +**Classes:** + +- :class:`decomposition.PCA` for the `full` and `randomized` solvers (with QR power + iterations) in :pr:`26315`, :pr:`27098` and :pr:`27431` by + :user:`Mateusz Sokół `, :user:`Olivier Grisel ` and + :user:`Edoardo Abati `; +- :class:`preprocessing.KernelCenterer` in :pr:`27556` by + :user:`Edoardo Abati `; +- :class:`preprocessing.MaxAbsScaler` in :pr:`27110` by :user:`Edoardo Abati `; +- :class:`preprocessing.MinMaxScaler` in :pr:`26243` by `Tim Head`_; +- :class:`preprocessing.Normalizer` in :pr:`27558` by :user:`Edoardo Abati `. Changelog --------- @@ -209,29 +240,31 @@ Changelog - |Enhancement| :meth:`base.ClusterMixin.fit_predict` and :meth:`base.OutlierMixin.fit_predict` now accept ``**kwargs`` which are - passed to the ``fit`` method of the estimator. :pr:`26506` by `Adrin - Jalali`_. + passed to the ``fit`` method of the estimator. + :pr:`26506` by `Adrin Jalali`_. - |Enhancement| :meth:`base.TransformerMixin.fit_transform` and :meth:`base.OutlierMixin.fit_predict` now raise a warning if ``transform`` / ``predict`` consume metadata, but no custom ``fit_transform`` / ``fit_predict`` - is defined in the class inheriting from them correspondingly. :pr:`26831` by - `Adrin Jalali`_. + is defined in the class inheriting from them correspondingly. + :pr:`26831` by `Adrin Jalali`_. - |Enhancement| :func:`base.clone` now supports `dict` as input and creates a - copy. :pr:`26786` by `Adrin Jalali`_. + copy. + :pr:`26786` by `Adrin Jalali`_. - |API|:func:`~utils.metadata_routing.process_routing` now has a different signature. The first two (the object and the method) are positional only, - and all metadata are passed as keyword arguments. :pr:`26909` by `Adrin - Jalali`_. + and all metadata are passed as keyword arguments. + :pr:`26909` by `Adrin Jalali`_. :mod:`sklearn.calibration` .......................... - |Enhancement| The internal objective and gradient of the `sigmoid` method of :class:`calibration.CalibratedClassifierCV` have been replaced by the - private loss module. :pr:`27185` by :user:`Omar Salman `. + private loss module. + :pr:`27185` by :user:`Omar Salman `. :mod:`sklearn.cluster` ...................... @@ -239,14 +272,8 @@ Changelog - |Fix| The `degree` parameter in the :class:`cluster.SpectralClustering` constructor now accepts real values instead of only integral values in accordance with the `degree` parameter of the - :class:`sklearn.metrics.pairwise.polynomial_kernel`. :pr:`27668` by - :user:`Nolan McMahon `. - -- |API| `kdtree` and `balltree` values are now deprecated and are renamed as - `kd_tree` and `ball_tree` respectively for the `algorithm` parameter of - :class:`cluster.HDBSCAN` ensuring consistency in naming convention. - `kdtree` and `balltree` values will be removed in 1.6. - :pr:`26744` by :user:`Shreesha Kumar Bhat `. + :class:`sklearn.metrics.pairwise.polynomial_kernel`. + :pr:`27668` by :user:`Nolan McMahon `. - |Fix| Fixes a bug in :class:`cluster.OPTICS` where the cluster correction based on predecessor was not using the right indexing. It would lead to inconsistent results @@ -259,37 +286,52 @@ Changelog :pr:`27678` by :user:`Ganesh Tata `. - |Fix| Create copy of precomputed sparse matrix within the - `fit` method of `cluster.DBSCAN` to avoid in-place modification of + `fit` method of :class:`cluster.DBSCAN` to avoid in-place modification of the sparse matrix. :pr:`27651` by :user:`Ganesh Tata `. +- |Fix| Raises a proper `ValueError` when `metric="precomputed"` and requested storing + centers via the parameter `store_centers`. + :pr:`27898` by :user:`Guillaume Lemaitre `. + +- |API| `kdtree` and `balltree` values are now deprecated and are renamed as + `kd_tree` and `ball_tree` respectively for the `algorithm` parameter of + :class:`cluster.HDBSCAN` ensuring consistency in naming convention. + `kdtree` and `balltree` values will be removed in 1.6. + :pr:`26744` by :user:`Shreesha Kumar Bhat `. + - |API| The option `metric=None` in - :class:`cluster.AggomerativeClustering` and :class:`cluster.FeatureAgglomeration` + :class:`cluster.AgglomerativeClustering` and :class:`cluster.FeatureAgglomeration` is deprecated in version 1.4 and will be removed in version 1.6. Use the default value instead. :pr:`27828` by :user:`Guillaume Lemaitre `. -- |Fix| Raises a proper `ValueError` when `metric="precomputed"` and requested storing - centers via the parameter `store_centers`. - :pr:`27898` by :user:`Guillaume Lemaitre `. - :mod:`sklearn.compose` ...................... - |MajorFeature| Adds `polars `__ input support to :class:`compose.ColumnTransformer` through the `DataFrame Interchange Protocol `__. - The minimum supported version for polars is `0.19.12`. :pr:`26683` by `Thomas Fan`_. - -- |API| |FIX| :class:`~compose.ColumnTransformer` now replaces `"passthrough"` - with a corresponding :class:`~preprocessing.FunctionTransformer` in the - fitted ``transformers_`` attribute. :pr:`27204` by `Adrin Jalali`_. + The minimum supported version for polars is `0.19.12`. + :pr:`26683` by `Thomas Fan`_. - |Fix| :func:`cluster.spectral_clustering` and :class:`cluster.SpectralClustering` now raise an explicit error message indicating that sparse matrices and arrays with `np.int64` indices are not supported. :pr:`27240` by :user:`Yao Xiao `. +:mod:`sklearn.covariance` +......................... + +- |Enhancement| Allow :func:`covariance.shrunk_covariance` to process + multiple covariance matrices at once by handling nd-arrays. + :pr:`25275` by :user:`Quentin Barthélemy `. + +- |API| |FIX| :class:`~compose.ColumnTransformer` now replaces `"passthrough"` + with a corresponding :class:`~preprocessing.FunctionTransformer` in the + fitted ``transformers_`` attribute. + :pr:`27204` by `Adrin Jalali`_. + :mod:`sklearn.datasets` ....................... @@ -306,25 +348,21 @@ Changelog :mod:`sklearn.decomposition` ............................ -- |Enhancement| An "auto" option was added to the `n_components` parameter of - :func:`decomposition.non_negative_factorization`, :class:`decomposition.NMF` and - :class:`decomposition.MiniBatchNMF` to automatically infer the number of components from W or H shapes - when using a custom initialization. The default value of this parameter will change - from `None` to `auto` in version 1.6. - :pr:`26634` by :user:`Alexandre Landeau ` and :user:`Alexandre Vigny `. - -- |Enhancement| :class:`decomposition.PCA` now supports the Array API for the - `full` and `randomized` solvers (with QR power iterations). See - :ref:`array_api` for more details. - :pr:`26315`, :pr:`27098` and :pr:`27431` by :user:`Mateusz Sokół `, - :user:`Olivier Grisel ` and :user:`Edoardo Abati `. - - |Feature| :class:`decomposition.PCA` now supports :class:`scipy.sparse.sparray` and :class:`scipy.sparse.spmatrix` inputs when using the `arpack` solver. When used on sparse data like :func:`datasets.fetch_20newsgroups_vectorized` this can lead to speed-ups of 100x (single threaded) and 70x lower memory usage. - Based on :user:`Alexander Tarashansky `'s implementation in `scanpy `. - :pr:`18689` by :user:`Isaac Virshup ` and :user:`Andrey Portnoy `. + Based on :user:`Alexander Tarashansky `'s implementation in + `scanpy `_. + :pr:`18689` by :user:`Isaac Virshup ` and + :user:`Andrey Portnoy `. + +- |Enhancement| An "auto" option was added to the `n_components` parameter of + :func:`decomposition.non_negative_factorization`, :class:`decomposition.NMF` and + :class:`decomposition.MiniBatchNMF` to automatically infer the number of components + from W or H shapes when using a custom initialization. The default value of this + parameter will change from `None` to `auto` in version 1.6. + :pr:`26634` by :user:`Alexandre Landeau ` and :user:`Alexandre Vigny `. - |Fix| :func:`decomposition.dict_learning_online` does not ignore anymore the parameter `max_iter`. @@ -333,8 +371,8 @@ Changelog - |Fix| The `degree` parameter in the :class:`decomposition.KernelPCA` constructor now accepts real values instead of only integral values in accordance with the `degree` parameter of the - :class:`sklearn.metrics.pairwise.polynomial_kernel`. :pr:`27668` by - :user:`Nolan McMahon `. + :class:`sklearn.metrics.pairwise.polynomial_kernel`. + :pr:`27668` by :user:`Nolan McMahon `. - |API| The option `max_iter=None` in :class:`decomposition.MiniBatchDictionaryLearning`, @@ -350,7 +388,8 @@ Changelog :class:`ensemble.RandomForestRegressor` support missing values when the criterion is `gini`, `entropy`, or `log_loss`, for classification or `squared_error`, `friedman_mse`, or `poisson` - for regression. :pr:`26391` by `Thomas Fan`_. + for regression. + :pr:`26391` by `Thomas Fan`_. - |MajorFeature| :class:`ensemble.HistGradientBoostingClassifier` and :class:`ensemble.HistGradientBoostingRegressor` supports @@ -360,8 +399,8 @@ Changelog Categorical features no longer need to be encoded with numbers. When categorical features are numbers, the maximum value no longer needs to be smaller than `max_bins`; only the number of (unique) categories must be - smaller than `max_bins`. :pr:`26411` by `Thomas Fan`_ and :pr:`27835` by - :user:`Jérôme Dockès `. + smaller than `max_bins`. + :pr:`26411` by `Thomas Fan`_ and :pr:`27835` by :user:`Jérôme Dockès `. - |MajorFeature| :class:`ensemble.HistGradientBoostingClassifier` and :class:`ensemble.HistGradientBoostingRegressor` got the new parameter @@ -396,26 +435,24 @@ Changelog - |Efficiency| :class:`ensemble.HistGradientBoostingClassifier` and :class:`ensemble.HistGradientBoostingRegressor` is now faster when `scoring` is a predefined metric listed in :func:`metrics.get_scorer_names` and - early stopping is enabled. :pr:`26163` by `Thomas Fan`_. + early stopping is enabled. + :pr:`26163` by `Thomas Fan`_. -- |Fix| Fixes :class:`ensemble.IsolationForest` when the input is a sparse matrix and - `contamination` is set to a float value. - :pr:`27645` by :user:`Guillaume Lemaitre `. - -- |API| In :class:`ensemble.AdaBoostClassifier`, the `algorithm` argument `SAMME.R` was - deprecated and will be removed in 1.6. :pr:`26830` by :user:`Stefanie Senger - `. - -- |Enhancement| A fitted property, ``estimators_samples_``, was added to all Forest methods, - including +- |Enhancement| A fitted property, ``estimators_samples_``, was added to all Forest + methods, including :class:`ensemble.RandomForestClassifier`, :class:`ensemble.RandomForestRegressor`, :class:`ensemble.ExtraTreesClassifier` and :class:`ensemble.ExtraTreesRegressor`, which allows to retrieve the training sample indices used for each tree estimator. :pr:`26736` by :user:`Adam Li `. +- |Fix| Fixes :class:`ensemble.IsolationForest` when the input is a sparse matrix and + `contamination` is set to a float value. + :pr:`27645` by :user:`Guillaume Lemaitre `. + - |Fix| Raises a `ValueError` in :class:`ensemble.RandomForestRegressor` and :class:`ensemble.ExtraTreesRegressor` when requesting OOB score with multioutput model - for the targets being all rounded to integer. It was recognized as a multiclass problem. + for the targets being all rounded to integer. It was recognized as a multiclass + problem. :pr:`27817` by :user:`Daniele Ongari ` - |Fix| Changes estimator tags to acknowledge that @@ -424,6 +461,21 @@ Changelog support missing values if all `estimators` support missing values. :pr:`27710` by :user:`Guillaume Lemaitre `. +- |API| In :class:`ensemble.AdaBoostClassifier`, the `algorithm` argument `SAMME.R` was + deprecated and will be removed in 1.6. + :pr:`26830` by :user:`Stefanie Senger `. + +:mod:`sklearn.feature_extraction` +................................. + +- |API| Changed error type from :class:`AttributeError` to + :class:`exceptions.NotFittedError` in unfitted instances of + :class:`feature_extraction.DictVectorizer` for the following methods: + :func:`feature_extraction.DictVectorizer.inverse_transform`, + :func:`feature_extraction.DictVectorizer.restrict`, + :func:`feature_extraction.DictVectorizer.transform`. + :pr:`24838` by :user:`Lorenz Hertel `. + :mod:`sklearn.feature_selection` ................................ @@ -431,17 +483,17 @@ Changelog :class:`feature_selection.SelectPercentile`, and :class:`feature_selection.GenericUnivariateSelect` now support unsupervised feature selection by providing a `score_func` taking `X` and `y=None`. - :pr:`27721` by :user:`Guillaume Lemaitre .` - -- |Fix| :class:`feature_selection.RFE` and :class:`feature_selection.RFECV` do - not check for nans during input validation. - :pr:`21807` by `Thomas Fan`_. + :pr:`27721` by :user:`Guillaume Lemaitre `. - |Enhancement| :class:`feature_selection.SelectKBest` and :class:`feature_selection.GenericUnivariateSelect` with `mode='k_best'` now shows a warning when `k` is greater than the number of features. :pr:`27841` by `Thomas Fan`_. +- |Fix| :class:`feature_selection.RFE` and :class:`feature_selection.RFECV` do + not check for nans during input validation. + :pr:`21807` by `Thomas Fan`_. + :mod:`sklearn.inspection` ......................... @@ -462,9 +514,8 @@ Changelog - |Fix| The `degree` parameter in the :class:`kernel_ridge.KernelRidge` constructor now accepts real values instead of only integral values in accordance with the `degree` parameter of the - :class:`sklearn.metrics.pairwise.polynomial_kernel`. :pr:`27668` by - :user:`Nolan McMahon `. - + :class:`sklearn.metrics.pairwise.polynomial_kernel`. + :pr:`27668` by :user:`Nolan McMahon `. :mod:`sklearn.linear_model` ........................... @@ -478,13 +529,6 @@ Changelog sample losses instead of sum of per sample losses. :pr:`26721` by :user:`Christian Lorentzen `. - .. note:: - - This change also means that with this new version of scikit-learn, the resulting - coefficients `coef_` and `intercept_` of your models will change for these two - solvers (when fit on the same data again). The amount of change depends on the - specified `tol`, for small values you will get more precise results. - - |Efficiency| :class:`linear_model.LogisticRegression` and :class:`linear_model.LogisticRegressionCV` with solver `"newton-cg"` can now be considerably faster for some data and parameter settings. This is accomplished by a @@ -500,25 +544,20 @@ Changelog - |Fix| Ensure that the `sigma_` attribute of :class:`linear_model.ARDRegression` and :class:`linear_model.BayesianRidge` always has a `float32` dtype when fitted on `float32` data, even with the - type promotion rules of numpy 2. + type promotion rules of NumPy 2. :pr:`27899` by :user:`Olivier Grisel `. :mod:`sklearn.metrics` ...................... -- |Fix| computing pairwise distances with :func:`euclidean_distances` no longer - raises an exception when `X` is provided as a `float64` array and - `X_norm_squared` as a `float32` array. :pr:`27624` by - :user:`Jérôme Dockès `. - - |Efficiency| Computing pairwise distances via :class:`metrics.DistanceMetric` - for CSR × CSR, Dense × CSR, and CSR × Dense datasets is now 1.5x faster. - :pr:`26765` by :user:`Meekail Zain ` + for CSR x CSR, Dense x CSR, and CSR x Dense datasets is now 1.5x faster. + :pr:`26765` by :user:`Meekail Zain `. - |Efficiency| Computing distances via :class:`metrics.DistanceMetric` - for CSR × CSR, Dense × CSR, and CSR × Dense now uses ~50% less memory, + for CSR x CSR, Dense x CSR, and CSR x Dense now uses ~50% less memory, and outputs distances in the same dtype as the provided data. - :pr:`27006` by :user:`Meekail Zain ` + :pr:`27006` by :user:`Meekail Zain `. - |Enhancement| Improve the rendering of the plot obtained with the :class:`metrics.PrecisionRecallDisplay` and :class:`metrics.RocCurveDisplay` @@ -529,9 +568,25 @@ Changelog - |Enhancement| Added `neg_root_mean_squared_log_error_scorer` as scorer :pr:`26734` by :user:`Alejandro Martin Gil <101AlexMartin>`. -- |Enhancement| :func:`sklearn.metrics.accuracy_score` and - :func:`sklearn.metrics.zero_one_loss` now support Array API compatible inputs. - :pr:`27137` by :user:`Edoardo Abati `. +- |Enhancement| :func:`metrics.confusion_matrix` now warns when only one label was + found in `y_true` and `y_pred`. + :pr:`27650` by :user:`Lucy Liu `. + +- |Fix| computing pairwise distances with :func:`metrics.pairwise.euclidean_distances` + no longer raises an exception when `X` is provided as a `float64` array and + `X_norm_squared` as a `float32` array. + :pr:`27624` by :user:`Jérôme Dockès `. + +- |Fix| :func:`f1_score` now provides correct values when handling various + cases in which division by zero occurs by using a formulation that does not + depend on the precision and recall values. + :pr:`27577` by :user:`Omar Salman ` and + :user:`Guillaume Lemaitre `. + +- |Fix| :func:`metrics.make_scorer` now raises an error when using a regressor on a + scorer requesting a non-thresholded decision function (from `decision_function` or + `predict_proba`). Such scorer are specific to classification. + :pr:`26840` by :user:`Guillaume Lemaitre `. - |API| Deprecated `needs_threshold` and `needs_proba` from :func:`metrics.make_scorer`. These parameters will be removed in version 1.6. Instead, use `response_method` that @@ -547,20 +602,9 @@ Changelog :func:`metrics.root_mean_squared_log_error` instead. :pr:`26734` by :user:`Alejandro Martin Gil <101AlexMartin>`. -- |Fix| :func:`metrics.make_scorer` now raises an error when using a regressor on a - scorer requesting a non-thresholded decision function (from `decision_function` or - `predict_proba`). Such scorer are specific to classification. - :pr:`26840` by :user:`Guillaume Lemaitre `. - -- |Enhancement| :func:`metrics.confusion_matrix` now warns when only one label was - found in `y_true` and `y_pred`. :pr:`27650` by :user:`Lucy Liu `. - :mod:`sklearn.model_selection` .............................. -- |Enhancement| :func:`sklearn.model_selection.train_test_split` now supports - Array API compatible inputs. :pr:`26855` by `Tim Head`_. - - |Enhancement| :func:`model_selection.learning_curve` raises a warning when every cross validation fold fails. :pr:`26299` by :user:`Rahil Parikh `. @@ -568,8 +612,8 @@ Changelog - |Fix| :class:`model_selection.GridSearchCV`, :class:`model_selection.RandomizedSearchCV`, and :class:`model_selection.HalvingGridSearchCV` now don't change the given - object in the parameter grid if it's an estimator. :pr:`26786` by `Adrin - Jalali`_. + object in the parameter grid if it's an estimator. + :pr:`26786` by `Adrin Jalali`_. :mod:`sklearn.multioutput` .......................... @@ -585,35 +629,24 @@ Changelog pairs of dense and sparse datasets. :pr:`27018` by :user:`Julien Jerphanion `. -- |API| :class:`neighbors.KNeighborsRegressor` now accepts - :class:`metrics.DistanceMetric` objects directly via the `metric` keyword - argument allowing for the use of accelerated third-party - :class:`metrics.DistanceMetric` objects. - :pr:`26267` by :user:`Meekail Zain `. - - |Efficiency| The performance of :meth:`neighbors.RadiusNeighborsClassifier.predict` and of :meth:`neighbors.RadiusNeighborsClassifier.predict_proba` has been improved when `radius` is large and `algorithm="brute"` with non-Euclidean metrics. :pr:`26828` by :user:`Omar Salman `. - |Fix| Improve error message for :class:`neighbors.LocalOutlierFactor` - when it is invoked with `n_samples = n_neighbors`. + when it is invoked with `n_samples=n_neighbors`. :pr:`23317` by :user:`Bharat Raghunathan `. +- |API| :class:`neighbors.KNeighborsRegressor` now accepts + :class:`metrics.DistanceMetric` objects directly via the `metric` keyword + argument allowing for the use of accelerated third-party + :class:`metrics.DistanceMetric` objects. + :pr:`26267` by :user:`Meekail Zain `. + :mod:`sklearn.preprocessing` ............................ -- |MajorFeature| The following classes now support the - `Array API `_. Array API - support is considered experimental and might evolve without being subject to - our usual rolling deprecation cycle policy. See - :ref:`array_api` for more details. - - - :class:`preprocessing.MinMaxScaler` :pr:`26243` by `Tim Head`_ - - :class:`preprocessing.MaxAbsScaler` :pr:`27110` by :user:`Edoardo Abati ` - - :class:`preprocessing.KernelCenterer` :pr:`27556` by :user:`Edoardo Abati ` - - :class:`preprocessing.Normalizer` :pr:`27558` by :user:`Edoardo Abati ` - - |Efficiency| :class:`preprocessing.OrdinalEncoder` avoids calculating missing indices twice to improve efficiency. :pr:`27017` by :user:`Xuefeng Xu `. @@ -627,11 +660,13 @@ Changelog :pr:`26944` by `Thomas Fan`_. - |Enhancement| :class:`preprocessing.TargetEncoder` now supports `target_type` - 'multiclass'. :pr:`26674` by :user:`Lucy Liu `. + 'multiclass'. + :pr:`26674` by :user:`Lucy Liu `. - |Fix| :class:`preprocessing.OneHotEncoder` and :class:`preprocessing.OrdinalEncoder` raise an exception when `nan` is a category and is not the last in the user's - provided categories. :pr:`27309` by :user:`Xuefeng Xu `. + provided categories. + :pr:`27309` by :user:`Xuefeng Xu `. - |Fix| :class:`preprocessing.OneHotEncoder` and :class:`preprocessing.OrdinalEncoder` raise an exception if the user provided categories contain duplicates. @@ -678,20 +713,12 @@ Changelog accept the same sparse input formats for SciPy sparse matrices and arrays. :pr:`27372` by :user:`Guillaume Lemaitre `. -- |Enhancement| :func:`~utils.multiclass.is_multilabel` now supports the Array API - compatible inputs. - :pr:`27601` by :user:`Yaroslav Korobko `. - - |Fix| :func:`sklearn.utils.check_array` should accept both matrix and array from the sparse SciPy module. The previous implementation would fail if `copy=True` by calling specific NumPy `np.may_share_memory` that does not work with SciPy sparse array and does not return the correct result for SciPy sparse matrix. :pr:`27336` by :user:`Guillaume Lemaitre `. -- |API| :func:`sklearn.extmath.log_logistic` is deprecated and will be removed in 1.6. - Use `-np.logaddexp(0, -x)` instead. - :pr:`27544` by :user:`Christian Lorentzen `. - - |Fix| :func:`~utils.estimator_checks.check_estimators_pickle` with `readonly_memmap=True` now relies on joblib's own capability to allocate aligned memory mapped arrays when loading a serialized estimator instead of @@ -701,7 +728,12 @@ Changelog - |Fix| Error message in :func:`~utils.check_array` when a sparse matrix was passed but `accept_sparse` is `False` now suggests to use `.toarray()` and not - `X.toarray()`. :pr:`27757` by :user:`Lucy Liu `. + `X.toarray()`. + :pr:`27757` by :user:`Lucy Liu `. + +- |API| :func:`sklearn.extmath.log_logistic` is deprecated and will be removed in 1.6. + Use `-np.logaddexp(0, -x)` instead. + :pr:`27544` by :user:`Christian Lorentzen `. Code and Documentation Contributors ----------------------------------- diff --git a/examples/ensemble/plot_gradient_boosting_early_stopping.py b/examples/ensemble/plot_gradient_boosting_early_stopping.py index e8514fe2aff87..1eaba2e852f28 100644 --- a/examples/ensemble/plot_gradient_boosting_early_stopping.py +++ b/examples/ensemble/plot_gradient_boosting_early_stopping.py @@ -3,167 +3,179 @@ Early stopping in Gradient Boosting =================================== -Gradient boosting is an ensembling technique where several weak learners -(regression trees) are combined to yield a powerful single model, in an -iterative fashion. - -Early stopping support in Gradient Boosting enables us to find the least number -of iterations which is sufficient to build a model that generalizes well to -unseen data. - -The concept of early stopping is simple. We specify a ``validation_fraction`` -which denotes the fraction of the whole dataset that will be kept aside from -training to assess the validation loss of the model. The gradient boosting -model is trained using the training set and evaluated using the validation set. -When each additional stage of regression tree is added, the validation set is -used to score the model. This is continued until the scores of the model in -the last ``n_iter_no_change`` stages do not improve by at least `tol`. After -that the model is considered to have converged and further addition of stages -is "stopped early". - -The number of stages of the final model is available at the attribute -``n_estimators_``. - -This example illustrates how the early stopping can used in the -:class:`~sklearn.ensemble.GradientBoostingClassifier` model to achieve -almost the same accuracy as compared to a model built without early stopping -using many fewer estimators. This can significantly reduce training time, -memory usage and prediction latency. +Gradient Boosting is an ensemble technique that combines multiple weak +learners, typically decision trees, to create a robust and powerful +predictive model. It does so in an iterative fashion, where each new stage +(tree) corrects the errors of the previous ones. + +Early stopping is a technique in Gradient Boosting that allows us to find +the optimal number of iterations required to build a model that generalizes +well to unseen data and avoids overfitting. The concept is simple: we set +aside a portion of our dataset as a validation set (specified using +`validation_fraction`) to assess the model's performance during training. +As the model is iteratively built with additional stages (trees), its +performance on the validation set is monitored as a function of the +number of steps. + +Early stopping becomes effective when the model's performance on the +validation set plateaus or worsens (within deviations specified by `tol`) +over a certain number of consecutive stages (specified by `n_iter_no_change`). +This signals that the model has reached a point where further iterations may +lead to overfitting, and it's time to stop training. + +The number of estimators (trees) in the final model, when early stopping is +applied, can be accessed using the `n_estimators_` attribute. Overall, early +stopping is a valuable tool to strike a balance between model performance and +efficiency in gradient boosting. + +License: BSD 3 clause """ - -# Authors: Vighnesh Birodkar -# Raghav RV -# License: BSD 3 clause +# %% +# Data Preparation +# ---------------- +# First we load and prepares the California Housing Prices dataset for +# training and evaluation. It subsets the dataset, splits it into training +# and validation sets. import time import matplotlib.pyplot as plt -import numpy as np -from sklearn import datasets, ensemble +from sklearn.datasets import fetch_california_housing +from sklearn.ensemble import GradientBoostingRegressor +from sklearn.metrics import mean_squared_error from sklearn.model_selection import train_test_split -data_list = [ - datasets.load_iris(return_X_y=True), - datasets.make_classification(n_samples=800, random_state=0), - datasets.make_hastie_10_2(n_samples=2000, random_state=0), -] -names = ["Iris Data", "Classification Data", "Hastie Data"] - -n_gb = [] -score_gb = [] -time_gb = [] -n_gbes = [] -score_gbes = [] -time_gbes = [] - -n_estimators = 200 - -for X, y in data_list: - X_train, X_test, y_train, y_test = train_test_split( - X, y, test_size=0.2, random_state=0 - ) - - # We specify that if the scores don't improve by at least 0.01 for the last - # 10 stages, stop fitting additional stages - gbes = ensemble.GradientBoostingClassifier( - n_estimators=n_estimators, - validation_fraction=0.2, - n_iter_no_change=5, - tol=0.01, - random_state=0, - ) - gb = ensemble.GradientBoostingClassifier(n_estimators=n_estimators, random_state=0) - start = time.time() - gb.fit(X_train, y_train) - time_gb.append(time.time() - start) - - start = time.time() - gbes.fit(X_train, y_train) - time_gbes.append(time.time() - start) - - score_gb.append(gb.score(X_test, y_test)) - score_gbes.append(gbes.score(X_test, y_test)) - - n_gb.append(gb.n_estimators_) - n_gbes.append(gbes.n_estimators_) +data = fetch_california_housing() +X, y = data.data[:600], data.target[:600] -bar_width = 0.2 -n = len(data_list) -index = np.arange(0, n * bar_width, bar_width) * 2.5 -index = index[0:n] +X_train, X_val, y_train, y_val = train_test_split(X, y, test_size=0.2, random_state=42) # %% -# Compare scores with and without early stopping -# ---------------------------------------------- - -plt.figure(figsize=(9, 5)) - -bar1 = plt.bar( - index, score_gb, bar_width, label="Without early stopping", color="crimson" +# Model Training and Comparison +# ----------------------------- +# Two :class:`~sklearn.ensemble.GradientBoostingRegressor` models are trained: +# one with and another without early stopping. The purpose is to compare their +# performance. It also calculates the training time and the `n_estimators_` +# used by both models. + +params = dict(n_estimators=1000, max_depth=5, learning_rate=0.1, random_state=42) + +gbm_full = GradientBoostingRegressor(**params) +gbm_early_stopping = GradientBoostingRegressor( + **params, + validation_fraction=0.1, + n_iter_no_change=10, ) -bar2 = plt.bar( - index + bar_width, score_gbes, bar_width, label="With early stopping", color="coral" -) - -plt.xticks(index + bar_width, names) -plt.yticks(np.arange(0, 1.3, 0.1)) +start_time = time.time() +gbm_full.fit(X_train, y_train) +training_time_full = time.time() - start_time +n_estimators_full = gbm_full.n_estimators_ -def autolabel(rects, n_estimators): - """ - Attach a text label above each bar displaying n_estimators of each model - """ - for i, rect in enumerate(rects): - plt.text( - rect.get_x() + rect.get_width() / 2.0, - 1.05 * rect.get_height(), - "n_est=%d" % n_estimators[i], - ha="center", - va="bottom", - ) +start_time = time.time() +gbm_early_stopping.fit(X_train, y_train) +training_time_early_stopping = time.time() - start_time +estimators_early_stopping = gbm_early_stopping.n_estimators_ +# %% +# Error Calculation +# ----------------- +# The code calculates the :func:`~sklearn.metrics.mean_squared_error` for both +# training and validation datasets for the models trained in the previous +# section. It computes the errors for each boosting iteration. The purpose is +# to assess the performance and convergence of the models. + +train_errors_without = [] +val_errors_without = [] + +train_errors_with = [] +val_errors_with = [] + +for i, (train_pred, val_pred) in enumerate( + zip( + gbm_full.staged_predict(X_train), + gbm_full.staged_predict(X_val), + ) +): + train_errors_without.append(mean_squared_error(y_train, train_pred)) + val_errors_without.append(mean_squared_error(y_val, val_pred)) + +for i, (train_pred, val_pred) in enumerate( + zip( + gbm_early_stopping.staged_predict(X_train), + gbm_early_stopping.staged_predict(X_val), + ) +): + train_errors_with.append(mean_squared_error(y_train, train_pred)) + val_errors_with.append(mean_squared_error(y_val, val_pred)) -autolabel(bar1, n_gb) -autolabel(bar2, n_gbes) - -plt.ylim([0, 1.3]) -plt.legend(loc="best") -plt.grid(True) - -plt.xlabel("Datasets") -plt.ylabel("Test score") +# %% +# Visualize Comparison +# -------------------- +# It includes three subplots: +# +# 1. Plotting training errors of both models over boosting iterations. +# 2. Plotting validation errors of both models over boosting iterations. +# 3. Creating a bar chart to compare the training times and the estimator used +# of the models with and without early stopping. +# + +fig, axes = plt.subplots(ncols=3, figsize=(12, 4)) + +axes[0].plot(train_errors_without, label="gbm_full") +axes[0].plot(train_errors_with, label="gbm_early_stopping") +axes[0].set_xlabel("Boosting Iterations") +axes[0].set_ylabel("MSE (Training)") +axes[0].set_yscale("log") +axes[0].legend() +axes[0].set_title("Training Error") + +axes[1].plot(val_errors_without, label="gbm_full") +axes[1].plot(val_errors_with, label="gbm_early_stopping") +axes[1].set_xlabel("Boosting Iterations") +axes[1].set_ylabel("MSE (Validation)") +axes[1].set_yscale("log") +axes[1].legend() +axes[1].set_title("Validation Error") + +training_times = [training_time_full, training_time_early_stopping] +labels = ["gbm_full", "gbm_early_stopping"] +bars = axes[2].bar(labels, training_times) +axes[2].set_ylabel("Training Time (s)") + +for bar, n_estimators in zip(bars, [n_estimators_full, estimators_early_stopping]): + height = bar.get_height() + axes[2].text( + bar.get_x() + bar.get_width() / 2, + height + 0.001, + f"Estimators: {n_estimators}", + ha="center", + va="bottom", + ) +plt.tight_layout() plt.show() - # %% -# Compare fit times with and without early stopping -# ------------------------------------------------- - -plt.figure(figsize=(9, 5)) - -bar1 = plt.bar( - index, time_gb, bar_width, label="Without early stopping", color="crimson" -) -bar2 = plt.bar( - index + bar_width, time_gbes, bar_width, label="With early stopping", color="coral" -) +# The difference in training error between the `gbm_full` and the +# `gbm_early_stopping` stems from the fact that `gbm_early_stopping` sets +# aside `validation_fraction` of the training data as internal validation set. +# Early stopping is decided based on this internal validation score. -max_y = np.amax(np.maximum(time_gb, time_gbes)) - -plt.xticks(index + bar_width, names) -plt.yticks(np.linspace(0, 1.3 * max_y, 13)) - -autolabel(bar1, n_gb) -autolabel(bar2, n_gbes) - -plt.ylim([0, 1.3 * max_y]) -plt.legend(loc="best") -plt.grid(True) - -plt.xlabel("Datasets") -plt.ylabel("Fit Time") - -plt.show() +# %% +# Summary +# ------- +# In our example with the :class:`~sklearn.ensemble.GradientBoostingRegressor` +# model on the California Housing Prices dataset, we have demonstrated the +# practical benefits of early stopping: +# +# - **Preventing Overfitting:** We showed how the validation error stabilizes +# or starts to increase after a certain point, indicating that the model +# generalizes better to unseen data. This is achieved by stopping the training +# process before overfitting occurs. +# - **Improving Training Efficiency:** We compared training times between +# models with and without early stopping. The model with early stopping +# achieved comparable accuracy while requiring significantly fewer +# estimators, resulting in faster training. diff --git a/examples/ensemble/plot_gradient_boosting_quantile.py b/examples/ensemble/plot_gradient_boosting_quantile.py index de12ad4540905..abac25e5691c1 100644 --- a/examples/ensemble/plot_gradient_boosting_quantile.py +++ b/examples/ensemble/plot_gradient_boosting_quantile.py @@ -191,6 +191,7 @@ def highlight_min(x): # outliers and overfits less. # # .. _calibration-section: +# # Calibration of the confidence interval # -------------------------------------- # diff --git a/pyproject.toml b/pyproject.toml index 7d53453c748a3..922f23bd54725 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -4,19 +4,13 @@ requires = [ "setuptools", "wheel", "Cython>=0.29.33", - - # Starting with NumPy 1.25, NumPy is (by default) as far back compatible - # as oldest-support-numpy was (customizable with a NPY_TARGET_VERSION - # define). For older Python versions continue using oldest-support-numpy. - "numpy>=1.25; python_version>='3.9'", - "oldest-supported-numpy; python_version<'3.9'", - - "scipy>=1.5.0", + "numpy>=1.25", + "scipy>=1.6.0", ] [tool.black] line-length = 88 -target_version = ['py38', 'py39', 'py310'] +target_version = ['py39', 'py310', 'py311'] preview = true exclude = ''' /( diff --git a/setup.py b/setup.py index 7c49bfee92184..dbda795831317 100755 --- a/setup.py +++ b/setup.py @@ -581,8 +581,8 @@ def configure_extension_modules(): def setup_package(): - python_requires = ">=3.8" - required_python_version = (3, 8) + python_requires = ">=3.9" + required_python_version = (3, 9) metadata = dict( name=DISTNAME, @@ -609,7 +609,6 @@ def setup_package(): "Operating System :: Unix", "Operating System :: MacOS", "Programming Language :: Python :: 3", - "Programming Language :: Python :: 3.8", "Programming Language :: Python :: 3.9", "Programming Language :: Python :: 3.10", "Programming Language :: Python :: 3.11", diff --git a/sklearn/_min_dependencies.py b/sklearn/_min_dependencies.py index a4c0ebb3b2d71..e52034fa5a1e6 100644 --- a/sklearn/_min_dependencies.py +++ b/sklearn/_min_dependencies.py @@ -1,19 +1,10 @@ """All minimum dependencies for scikit-learn.""" import argparse -import platform from collections import defaultdict # scipy and cython should by in sync with pyproject.toml - -# NumPy version should match oldest-supported-numpy for the minimum supported -# Python version. -# see: https://github.com/scipy/oldest-supported-numpy/blob/main/setup.cfg -if platform.python_implementation() == "PyPy": - NUMPY_MIN_VERSION = "1.19.2" -else: - NUMPY_MIN_VERSION = "1.17.3" - -SCIPY_MIN_VERSION = "1.5.0" +NUMPY_MIN_VERSION = "1.19.5" +SCIPY_MIN_VERSION = "1.6.0" JOBLIB_MIN_VERSION = "1.2.0" THREADPOOLCTL_MIN_VERSION = "2.0.0" PYTEST_MIN_VERSION = "7.1.2" @@ -30,8 +21,8 @@ "threadpoolctl": (THREADPOOLCTL_MIN_VERSION, "install"), "cython": (CYTHON_MIN_VERSION, "build"), "matplotlib": ("3.3.4", "benchmark, docs, examples, tests"), - "scikit-image": ("0.16.2", "docs, examples, tests"), - "pandas": ("1.0.5", "benchmark, docs, examples, tests"), + "scikit-image": ("0.17.2", "docs, examples, tests"), + "pandas": ("1.1.5", "benchmark, docs, examples, tests"), "seaborn": ("0.9.0", "docs, examples"), "memory_profiler": ("0.57.0", "benchmark, docs"), "pytest": (PYTEST_MIN_VERSION, "tests"), diff --git a/sklearn/cluster/tests/test_k_means.py b/sklearn/cluster/tests/test_k_means.py index 8d63d5e80d717..030f35bb748bb 100644 --- a/sklearn/cluster/tests/test_k_means.py +++ b/sklearn/cluster/tests/test_k_means.py @@ -32,13 +32,6 @@ from sklearn.utils.extmath import row_norms from sklearn.utils.fixes import CSR_CONTAINERS, threadpool_limits -# TODO(1.4): Remove -msg = ( - r"The default value of `n_init` will change from \d* to 'auto' in 1.4. Set the" - r" value of `n_init` explicitly to suppress the warning:FutureWarning" -) -pytestmark = pytest.mark.filterwarnings("ignore:" + msg) - # non centered, sparse centers to check the centers = np.array( [ diff --git a/sklearn/conftest.py b/sklearn/conftest.py index d15f9fe2ec142..d2f44f6912b62 100644 --- a/sklearn/conftest.py +++ b/sklearn/conftest.py @@ -12,7 +12,7 @@ from _pytest.doctest import DoctestItem from threadpoolctl import threadpool_limits -from sklearn import config_context +from sklearn import config_context, set_config from sklearn._min_dependencies import PYTEST_MIN_VERSION from sklearn.datasets import ( fetch_20newsgroups, @@ -278,3 +278,11 @@ def mocked_import(name, *args, **kwargs): return import_orig(name, *args, **kwargs) monkeypatch.setattr(builtins, "__import__", mocked_import) + + +@pytest.fixture +def print_changed_only_false(): + """Set `print_changed_only` to False for the duration of the test.""" + set_config(print_changed_only=False) + yield + set_config(print_changed_only=True) # reset to default diff --git a/sklearn/covariance/_shrunk_covariance.py b/sklearn/covariance/_shrunk_covariance.py index 5a568192dd3c3..3a79afa30729f 100644 --- a/sklearn/covariance/_shrunk_covariance.py +++ b/sklearn/covariance/_shrunk_covariance.py @@ -109,14 +109,14 @@ def _oas(X, *, assume_centered=False): prefer_skip_nested_validation=True, ) def shrunk_covariance(emp_cov, shrinkage=0.1): - """Calculate a covariance matrix shrunk on the diagonal. + """Calculate covariance matrices shrunk on the diagonal. Read more in the :ref:`User Guide `. Parameters ---------- - emp_cov : array-like of shape (n_features, n_features) - Covariance matrix to be shrunk. + emp_cov : array-like of shape (..., n_features, n_features) + Covariance matrices to be shrunk, at least 2D ndarray. shrinkage : float, default=0.1 Coefficient in the convex combination used for the computation @@ -124,8 +124,8 @@ def shrunk_covariance(emp_cov, shrinkage=0.1): Returns ------- - shrunk_cov : ndarray of shape (n_features, n_features) - Shrunk covariance. + shrunk_cov : ndarray of shape (..., n_features, n_features) + Shrunk covariance matrices. Notes ----- @@ -135,12 +135,13 @@ def shrunk_covariance(emp_cov, shrinkage=0.1): where `mu = trace(cov) / n_features`. """ - emp_cov = check_array(emp_cov) - n_features = emp_cov.shape[0] + emp_cov = check_array(emp_cov, allow_nd=True) + n_features = emp_cov.shape[-1] - mu = np.trace(emp_cov) / n_features shrunk_cov = (1.0 - shrinkage) * emp_cov - shrunk_cov.flat[:: n_features + 1] += shrinkage * mu + mu = np.trace(emp_cov, axis1=-2, axis2=-1) / n_features + mu = np.expand_dims(mu, axis=tuple(range(mu.ndim, emp_cov.ndim))) + shrunk_cov += shrinkage * mu * np.eye(n_features) return shrunk_cov diff --git a/sklearn/covariance/tests/test_covariance.py b/sklearn/covariance/tests/test_covariance.py index 0866c209a10c3..ef4bd63149d60 100644 --- a/sklearn/covariance/tests/test_covariance.py +++ b/sklearn/covariance/tests/test_covariance.py @@ -81,7 +81,25 @@ def test_covariance(): assert_array_equal(cov.location_, np.zeros(X.shape[1])) +@pytest.mark.parametrize("n_matrices", [1, 3]) +def test_shrunk_covariance_func(n_matrices): + """Check `shrunk_covariance` function.""" + + n_features = 2 + cov = np.ones((n_features, n_features)) + cov_target = np.array([[1, 0.5], [0.5, 1]]) + + if n_matrices > 1: + cov = np.repeat(cov[np.newaxis, ...], n_matrices, axis=0) + cov_target = np.repeat(cov_target[np.newaxis, ...], n_matrices, axis=0) + + cov_shrunk = shrunk_covariance(cov, 0.5) + assert_allclose(cov_shrunk, cov_target) + + def test_shrunk_covariance(): + """Check consistency between `ShrunkCovariance` and `shrunk_covariance`.""" + # Tests ShrunkCovariance module on a simple dataset. # compare shrunk covariance obtained from data and from MLE estimate cov = ShrunkCovariance(shrinkage=0.5) diff --git a/sklearn/datasets/_base.py b/sklearn/datasets/_base.py index 5675798137824..e062bf381b393 100644 --- a/sklearn/datasets/_base.py +++ b/sklearn/datasets/_base.py @@ -12,6 +12,7 @@ import os import shutil from collections import namedtuple +from importlib import resources from numbers import Integral from os import environ, listdir, makedirs from os.path import expanduser, isdir, join, splitext @@ -23,7 +24,6 @@ from ..preprocessing import scale from ..utils import Bunch, check_pandas_support, check_random_state from ..utils._param_validation import Interval, StrOptions, validate_params -from ..utils.fixes import _contents, _open_binary, _open_text, _read_text DATA_MODULE = "sklearn.datasets.data" DESCR_MODULE = "sklearn.datasets.descr" @@ -300,6 +300,7 @@ def load_csv_data( data_module=DATA_MODULE, descr_file_name=None, descr_module=DESCR_MODULE, + encoding="utf-8", ): """Loads `data_file_name` from `data_module with `importlib.resources`. @@ -339,8 +340,14 @@ def load_csv_data( descr : str, optional Description of the dataset (the content of `descr_file_name`). Only returned if `descr_file_name` is not None. + + encoding : str, optional + Text encoding of the CSV file. + + .. versionadded:: 1.4 """ - with _open_text(data_module, data_file_name) as csv_file: + data_path = resources.files(data_module) / data_file_name + with data_path.open("r", encoding="utf-8") as csv_file: data_file = csv.reader(csv_file) temp = next(data_file) n_samples = int(temp[0]) @@ -413,7 +420,8 @@ def load_gzip_compressed_csv_data( Description of the dataset (the content of `descr_file_name`). Only returned if `descr_file_name` is not None. """ - with _open_binary(data_module, data_file_name) as compressed_file: + data_path = resources.files(data_module) / data_file_name + with data_path.open("rb") as compressed_file: compressed_file = gzip.open(compressed_file, mode="rt", encoding=encoding) data = np.loadtxt(compressed_file, **kwargs) @@ -425,7 +433,7 @@ def load_gzip_compressed_csv_data( return data, descr -def load_descr(descr_file_name, *, descr_module=DESCR_MODULE): +def load_descr(descr_file_name, *, descr_module=DESCR_MODULE, encoding="utf-8"): """Load `descr_file_name` from `descr_module` with `importlib.resources`. Parameters @@ -440,14 +448,19 @@ def load_descr(descr_file_name, *, descr_module=DESCR_MODULE): Module where `descr_file_name` lives. See also :func:`load_descr`. The default is `'sklearn.datasets.descr'`. + encoding : str, default="utf-8" + Name of the encoding that `descr_file_name` will be decoded with. + The default is 'utf-8'. + + .. versionadded:: 1.4 + Returns ------- fdescr : str Content of `descr_file_name`. """ - fdescr = _read_text(descr_module, descr_file_name) - - return fdescr + path = resources.files(descr_module) / descr_file_name + return path.read_text(encoding=encoding) @validate_params( @@ -1193,13 +1206,16 @@ def load_linnerud(*, return_X_y=False, as_frame=False): data_filename = "linnerud_exercise.csv" target_filename = "linnerud_physiological.csv" + data_module_path = resources.files(DATA_MODULE) # Read header and data - with _open_text(DATA_MODULE, data_filename) as f: + data_path = data_module_path / data_filename + with data_path.open("r", encoding="utf-8") as f: header_exercise = f.readline().split() f.seek(0) # reset file obj data_exercise = np.loadtxt(f, skiprows=1) - with _open_text(DATA_MODULE, target_filename) as f: + target_path = data_module_path / target_filename + with target_path.open("r", encoding="utf-8") as f: header_physiological = f.readline().split() f.seek(0) # reset file obj data_physiological = np.loadtxt(f, skiprows=1) @@ -1277,13 +1293,19 @@ def load_sample_images(): descr = load_descr("README.txt", descr_module=IMAGES_MODULE) filenames, images = [], [] - for filename in sorted(_contents(IMAGES_MODULE)): - if filename.endswith(".jpg"): - filenames.append(filename) - with _open_binary(IMAGES_MODULE, filename) as image_file: - pil_image = Image.open(image_file) - image = np.asarray(pil_image) - images.append(image) + + jpg_paths = sorted( + resource + for resource in resources.files(IMAGES_MODULE).iterdir() + if resource.is_file() and resource.match("*.jpg") + ) + + for path in jpg_paths: + filenames.append(str(path)) + with path.open("rb") as image_file: + pil_image = Image.open(image_file) + image = np.asarray(pil_image) + images.append(image) return Bunch(images=images, filenames=filenames, DESCR=descr) diff --git a/sklearn/datasets/_openml.py b/sklearn/datasets/_openml.py index 54ac34de64e24..99f78e3116187 100644 --- a/sklearn/datasets/_openml.py +++ b/sklearn/datasets/_openml.py @@ -307,12 +307,19 @@ def _get_data_info_by_name( ) res = json_data["data"]["dataset"] if len(res) > 1: - warn( + first_version = version = res[0]["version"] + warning_msg = ( "Multiple active versions of the dataset matching the name" - " {name} exist. Versions may be fundamentally different, " - "returning version" - " {version}.".format(name=name, version=res[0]["version"]) + f" {name} exist. Versions may be fundamentally different, " + f"returning version {first_version}. " + "Available versions:\n" ) + for r in res: + warning_msg += f"- version {r['version']}, status: {r['status']}\n" + warning_msg += ( + f" url: https://www.openml.org/search?type=data&id={r['did']}\n" + ) + warn(warning_msg) return res[0] # an integer version has been provided diff --git a/sklearn/datasets/tests/test_base.py b/sklearn/datasets/tests/test_base.py index f84c275d67cf9..0a1190060a055 100644 --- a/sklearn/datasets/tests/test_base.py +++ b/sklearn/datasets/tests/test_base.py @@ -3,6 +3,7 @@ import tempfile import warnings from functools import partial +from importlib import resources from pathlib import Path from pickle import dumps, loads @@ -29,7 +30,6 @@ from sklearn.datasets.tests.test_common import check_as_frame from sklearn.preprocessing import scale from sklearn.utils import Bunch -from sklearn.utils.fixes import _is_resource class _DummyPath: @@ -291,7 +291,8 @@ def test_loader(loader_func, data_shape, target_shape, n_target, has_descr, file assert "data_module" in bunch assert all( [ - f in bunch and _is_resource(bunch["data_module"], bunch[f]) + f in bunch + and (resources.files(bunch["data_module"]) / bunch[f]).is_file() for f in filenames ] ) diff --git a/sklearn/datasets/tests/test_openml.py b/sklearn/datasets/tests/test_openml.py index 7047b376d4b57..1a0f12769fcc6 100644 --- a/sklearn/datasets/tests/test_openml.py +++ b/sklearn/datasets/tests/test_openml.py @@ -4,6 +4,7 @@ import os import re from functools import partial +from importlib import resources from io import BytesIO from urllib.error import HTTPError @@ -27,7 +28,6 @@ assert_array_equal, fails_if_pypy, ) -from sklearn.utils.fixes import _open_binary OPENML_TEST_DATA_MODULE = "sklearn.datasets.tests.data.openml" # if True, urlopen will be monkey patched to only use local files @@ -107,8 +107,9 @@ def _mock_urlopen_shared(url, has_gzip_header, expected_prefix, suffix): assert url.startswith(expected_prefix) data_file_name = _file_name(url, suffix) + data_file_path = resources.files(data_module) / data_file_name - with _open_binary(data_module, data_file_name) as f: + with data_file_path.open("rb") as f: if has_gzip_header and gzip_response: fp = BytesIO(f.read()) return _MockHTTPResponse(fp, True) @@ -145,9 +146,10 @@ def _mock_urlopen_data_list(url, has_gzip_header): assert url.startswith(url_prefix_data_list) data_file_name = _file_name(url, ".json") + data_file_path = resources.files(data_module) / data_file_name # load the file itself, to simulate a http error - with _open_binary(data_module, data_file_name) as f: + with data_file_path.open("rb") as f: decompressed_f = read_fn(f, "rb") decoded_s = decompressed_f.read().decode("utf-8") json_data = json.loads(decoded_s) @@ -156,7 +158,7 @@ def _mock_urlopen_data_list(url, has_gzip_header): url=None, code=412, msg="Simulated mock error", hdrs=None, fp=None ) - with _open_binary(data_module, data_file_name) as f: + with data_file_path.open("rb") as f: if has_gzip_header: fp = BytesIO(f.read()) return _MockHTTPResponse(fp, True) @@ -1103,10 +1105,14 @@ def test_fetch_openml_iris_warn_multiple_version(monkeypatch, gzip_response): _monkey_patch_webbased_functions(monkeypatch, data_id, gzip_response) - msg = ( + msg = re.escape( "Multiple active versions of the dataset matching the name" " iris exist. Versions may be fundamentally different, " - "returning version 1." + "returning version 1. Available versions:\n" + "- version 1, status: active\n" + " url: https://www.openml.org/search?type=data&id=61\n" + "- version 3, status: active\n" + " url: https://www.openml.org/search?type=data&id=969\n" ) with pytest.warns(UserWarning, match=msg): fetch_openml( @@ -1503,8 +1509,9 @@ def test_fetch_openml_verify_checksum(monkeypatch, as_frame, cache, tmpdir, pars # create a temporary modified arff file original_data_module = OPENML_TEST_DATA_MODULE + "." + f"id_{data_id}" original_data_file_name = "data-v1-dl-1666876.arff.gz" + original_data_path = resources.files(original_data_module) / original_data_file_name corrupt_copy_path = tmpdir / "test_invalid_checksum.arff" - with _open_binary(original_data_module, original_data_file_name) as orig_file: + with original_data_path.open("rb") as orig_file: orig_gzip = gzip.open(orig_file, "rb") data = bytearray(orig_gzip.read()) data[len(data) - 1] = 37 diff --git a/sklearn/datasets/tests/test_svmlight_format.py b/sklearn/datasets/tests/test_svmlight_format.py index 21614be8dbb04..78a006f8f228b 100644 --- a/sklearn/datasets/tests/test_svmlight_format.py +++ b/sklearn/datasets/tests/test_svmlight_format.py @@ -2,6 +2,7 @@ import os import shutil from bz2 import BZ2File +from importlib import resources from io import BytesIO from tempfile import NamedTemporaryFile @@ -17,7 +18,7 @@ assert_array_equal, fails_if_pypy, ) -from sklearn.utils.fixes import CSR_CONTAINERS, _open_binary, _path +from sklearn.utils.fixes import CSR_CONTAINERS TEST_DATA_MODULE = "sklearn.datasets.tests.data" datafile = "svmlight_classification.txt" @@ -28,11 +29,16 @@ pytestmark = fails_if_pypy +def _svmlight_local_test_file_path(filename): + return resources.files(TEST_DATA_MODULE) / filename + + def _load_svmlight_local_test_file(filename, **kwargs): """ Helper to load resource `filename` with `importlib.resources` """ - with _open_binary(TEST_DATA_MODULE, filename) as f: + data_path = _svmlight_local_test_file_path(filename) + with data_path.open("rb") as f: return load_svmlight_file(f, **kwargs) @@ -76,24 +82,25 @@ def test_load_svmlight_file_fd(): # GH20081: testing equality between path-based and # fd-based load_svmlight_file - with _path(TEST_DATA_MODULE, datafile) as data_path: - data_path = str(data_path) - X1, y1 = load_svmlight_file(data_path) - fd = os.open(data_path, os.O_RDONLY) - try: - X2, y2 = load_svmlight_file(fd) - assert_array_almost_equal(X1.data, X2.data) - assert_array_almost_equal(y1, y2) - finally: - os.close(fd) + data_path = resources.files(TEST_DATA_MODULE) / datafile + data_path = str(data_path) + X1, y1 = load_svmlight_file(data_path) + + fd = os.open(data_path, os.O_RDONLY) + try: + X2, y2 = load_svmlight_file(fd) + assert_array_almost_equal(X1.data, X2.data) + assert_array_almost_equal(y1, y2) + finally: + os.close(fd) def test_load_svmlight_pathlib(): # test loading from file descriptor - with _path(TEST_DATA_MODULE, datafile) as data_path: - X1, y1 = load_svmlight_file(str(data_path)) - X2, y2 = load_svmlight_file(data_path) + data_path = _svmlight_local_test_file_path(datafile) + X1, y1 = load_svmlight_file(str(data_path)) + X2, y2 = load_svmlight_file(data_path) assert_allclose(X1.data, X2.data) assert_allclose(y1, y2) @@ -105,19 +112,16 @@ def test_load_svmlight_file_multilabel(): def test_load_svmlight_files(): - with _path(TEST_DATA_MODULE, datafile) as data_path: - X_train, y_train, X_test, y_test = load_svmlight_files( - [str(data_path)] * 2, dtype=np.float32 - ) + data_path = _svmlight_local_test_file_path(datafile) + X_train, y_train, X_test, y_test = load_svmlight_files( + [str(data_path)] * 2, dtype=np.float32 + ) assert_array_equal(X_train.toarray(), X_test.toarray()) assert_array_almost_equal(y_train, y_test) assert X_train.dtype == np.float32 assert X_test.dtype == np.float32 - with _path(TEST_DATA_MODULE, datafile) as data_path: - X1, y1, X2, y2, X3, y3 = load_svmlight_files( - [str(data_path)] * 3, dtype=np.float64 - ) + X1, y1, X2, y2, X3, y3 = load_svmlight_files([str(data_path)] * 3, dtype=np.float64) assert X1.dtype == X2.dtype assert X2.dtype == X3.dtype assert X3.dtype == np.float64 @@ -145,7 +149,7 @@ def test_load_compressed(): with NamedTemporaryFile(prefix="sklearn-test", suffix=".gz") as tmp: tmp.close() # necessary under windows - with _open_binary(TEST_DATA_MODULE, datafile) as f: + with _svmlight_local_test_file_path(datafile).open("rb") as f: with gzip.open(tmp.name, "wb") as fh_out: shutil.copyfileobj(f, fh_out) Xgz, ygz = load_svmlight_file(tmp.name) @@ -157,7 +161,7 @@ def test_load_compressed(): with NamedTemporaryFile(prefix="sklearn-test", suffix=".bz2") as tmp: tmp.close() # necessary under windows - with _open_binary(TEST_DATA_MODULE, datafile) as f: + with _svmlight_local_test_file_path(datafile).open("rb") as f: with BZ2File(tmp.name, "wb") as fh_out: shutil.copyfileobj(f, fh_out) Xbz, ybz = load_svmlight_file(tmp.name) @@ -236,10 +240,9 @@ def test_load_large_qid(): def test_load_invalid_file2(): with pytest.raises(ValueError): - with _path(TEST_DATA_MODULE, datafile) as data_path, _path( - TEST_DATA_MODULE, invalidfile - ) as invalid_path: - load_svmlight_files([str(data_path), str(invalid_path), str(data_path)]) + data_path = _svmlight_local_test_file_path(datafile) + invalid_path = _svmlight_local_test_file_path(invalidfile) + load_svmlight_files([str(data_path), str(invalid_path), str(data_path)]) def test_not_a_filename(): diff --git a/sklearn/decomposition/tests/test_pca.py b/sklearn/decomposition/tests/test_pca.py index 4df4124d5a765..c0d1060217fa8 100644 --- a/sklearn/decomposition/tests/test_pca.py +++ b/sklearn/decomposition/tests/test_pca.py @@ -818,7 +818,7 @@ def test_variance_correctness(copy): def check_array_api_get_precision(name, estimator, array_namespace, device, dtype): - xp, device, dtype = _array_api_for_tests(array_namespace, device, dtype) + xp = _array_api_for_tests(array_namespace, device) iris_np = iris.data.astype(dtype) iris_xp = xp.asarray(iris_np, device=device) diff --git a/sklearn/decomposition/tests/test_sparse_pca.py b/sklearn/decomposition/tests/test_sparse_pca.py index 1b5e622ffdbd5..3797970e3d6ba 100644 --- a/sklearn/decomposition/tests/test_sparse_pca.py +++ b/sklearn/decomposition/tests/test_sparse_pca.py @@ -268,7 +268,7 @@ def test_spca_feature_names_out(SPCA): assert_array_equal([f"{estimator_name}{i}" for i in range(4)], names) -# TODO (1.6): remove in 1.6 +# TODO(1.6): remove in 1.6 def test_spca_max_iter_None_deprecation(): """Check that we raise a warning for the deprecation of `max_iter=None`.""" rng = np.random.RandomState(0) diff --git a/sklearn/externals/conftest.py b/sklearn/externals/conftest.py index c617107866b92..7f7a4af349878 100644 --- a/sklearn/externals/conftest.py +++ b/sklearn/externals/conftest.py @@ -4,4 +4,3 @@ # using --pyargs def pytest_ignore_collect(path, config): return True - diff --git a/sklearn/feature_extraction/_dict_vectorizer.py b/sklearn/feature_extraction/_dict_vectorizer.py index 110a538d2b5f6..9855684b550c4 100644 --- a/sklearn/feature_extraction/_dict_vectorizer.py +++ b/sklearn/feature_extraction/_dict_vectorizer.py @@ -338,6 +338,8 @@ def inverse_transform(self, X, dict_type=dict): D : list of dict_type objects of shape (n_samples,) Feature mappings for the samples in X. """ + check_is_fitted(self, "feature_names_") + # COO matrix is not subscriptable X = check_array(X, accept_sparse=["csr", "csc"]) n_samples = X.shape[0] @@ -373,6 +375,7 @@ def transform(self, X): Xa : {array, sparse matrix} Feature vectors; always 2-d. """ + check_is_fitted(self, ["feature_names_", "vocabulary_"]) return self._transform(X, fitting=False) def get_feature_names_out(self, input_features=None): @@ -428,6 +431,8 @@ def restrict(self, support, indices=False): >>> v.get_feature_names_out() array(['bar', 'foo'], ...) """ + check_is_fitted(self, "feature_names_") + if not indices: support = np.where(support)[0] diff --git a/sklearn/feature_extraction/tests/test_dict_vectorizer.py b/sklearn/feature_extraction/tests/test_dict_vectorizer.py index 3066d7669546b..e9784d68d7199 100644 --- a/sklearn/feature_extraction/tests/test_dict_vectorizer.py +++ b/sklearn/feature_extraction/tests/test_dict_vectorizer.py @@ -9,6 +9,7 @@ import scipy.sparse as sp from numpy.testing import assert_allclose, assert_array_equal +from sklearn.exceptions import NotFittedError from sklearn.feature_extraction import DictVectorizer from sklearn.feature_selection import SelectKBest, chi2 @@ -239,3 +240,23 @@ def test_dict_vectorizer_get_feature_names_out(): assert isinstance(feature_names, np.ndarray) assert feature_names.dtype == object assert_array_equal(feature_names, ["1", "2", "3"]) + + +@pytest.mark.parametrize( + "method, input", + [ + ("transform", [{1: 2, 3: 4}, {2: 4}]), + ("inverse_transform", [{1: 2, 3: 4}, {2: 4}]), + ("restrict", [True, False, True]), + ], +) +def test_dict_vectorizer_not_fitted_error(method, input): + """Check that unfitted DictVectorizer instance raises NotFittedError. + + This should be part of the common test but currently they test estimator accepting + text input. + """ + dv = DictVectorizer(sparse=False) + + with pytest.raises(NotFittedError): + getattr(dv, method)(input) diff --git a/sklearn/linear_model/_quantile.py b/sklearn/linear_model/_quantile.py index 8bd59485c5062..33451d8640bff 100644 --- a/sklearn/linear_model/_quantile.py +++ b/sklearn/linear_model/_quantile.py @@ -11,7 +11,7 @@ from ..base import BaseEstimator, RegressorMixin, _fit_context from ..exceptions import ConvergenceWarning from ..utils import _safe_indexing -from ..utils._param_validation import Hidden, Interval, StrOptions +from ..utils._param_validation import Interval, StrOptions from ..utils.fixes import parse_version, sp_version from ..utils.validation import _check_sample_weight from ._base import LinearModel @@ -44,7 +44,7 @@ class QuantileRegressor(LinearModel, RegressorMixin, BaseEstimator): Whether or not to fit the intercept. solver : {'highs-ds', 'highs-ipm', 'highs', 'interior-point', \ - 'revised simplex'}, default='interior-point' + 'revised simplex'}, default='highs' Method used by :func:`scipy.optimize.linprog` to solve the linear programming formulation. @@ -55,7 +55,7 @@ class QuantileRegressor(LinearModel, RegressorMixin, BaseEstimator): From `scipy>=1.11.0`, "interior-point" is not available anymore. .. versionchanged:: 1.4 - The default of `solver` will change to `"highs"` in version 1.4. + The default of `solver` changed to `"highs"` in version 1.4. solver_options : dict, default=None Additional parameters passed to :func:`scipy.optimize.linprog` as @@ -121,7 +121,6 @@ class QuantileRegressor(LinearModel, RegressorMixin, BaseEstimator): "revised simplex", } ), - Hidden(StrOptions({"warn"})), ], "solver_options": [dict, None], } @@ -132,7 +131,7 @@ def __init__( quantile=0.5, alpha=1.0, fit_intercept=True, - solver="warn", + solver="highs", solver_options=None, ): self.quantile = quantile @@ -182,17 +181,7 @@ def fit(self, X, y, sample_weight=None): # So we rescale the penalty term, which is equivalent. alpha = np.sum(sample_weight) * self.alpha - if self.solver == "warn": - warnings.warn( - ( - "The default solver will change from 'interior-point' to 'highs' in" - " version 1.4. Set `solver='highs'` or to the desired solver to" - " silence this warning." - ), - FutureWarning, - ) - solver = "interior-point" - elif self.solver in ( + if self.solver in ( "highs-ds", "highs-ipm", "highs", diff --git a/sklearn/linear_model/tests/test_quantile.py b/sklearn/linear_model/tests/test_quantile.py index 58f9d33e32261..53c1e1f071dcb 100644 --- a/sklearn/linear_model/tests/test_quantile.py +++ b/sklearn/linear_model/tests/test_quantile.py @@ -292,19 +292,6 @@ def test_sparse_input(sparse_container, solver, fit_intercept, default_solver): assert 0.45 <= np.mean(y < quant_sparse.predict(X_sparse)) <= 0.57 -# TODO (1.4): remove this test in 1.4 -@pytest.mark.skipif( - parse_version(sp_version.base_version) >= parse_version("1.11"), - reason="interior-point solver is not available in SciPy 1.11", -) -def test_warning_new_default(X_y_data): - """Check that we warn about the new default solver.""" - X, y = X_y_data - model = QuantileRegressor() - with pytest.warns(FutureWarning, match="The default solver will change"): - model.fit(X, y) - - def test_error_interior_point_future(X_y_data, monkeypatch): """Check that we will raise a proper error when requesting `solver='interior-point'` in SciPy >= 1.11. diff --git a/sklearn/metrics/_classification.py b/sklearn/metrics/_classification.py index 1e18c0b3617bb..f0a13f8a04830 100644 --- a/sklearn/metrics/_classification.py +++ b/sklearn/metrics/_classification.py @@ -1434,7 +1434,7 @@ def fbeta_score( >>> y_pred_empty = [0, 0, 0, 0, 0, 0] >>> fbeta_score(y_true, y_pred_empty, ... average="macro", zero_division=np.nan, beta=0.5) - 0.38... + 0.12... """ _, _, f, _ = precision_recall_fscore_support( @@ -1482,20 +1482,8 @@ def _prf_divide( return result # build appropriate warning - # E.g. "Precision and F-score are ill-defined and being set to 0.0 in - # labels with no predicted samples. Use ``zero_division`` parameter to - # control this behavior." - - if metric in warn_for and "f-score" in warn_for: - msg_start = "{0} and F-score are".format(metric.title()) - elif metric in warn_for: - msg_start = "{0} is".format(metric.title()) - elif "f-score" in warn_for: - msg_start = "F-score is" - else: - return result - - _warn_prf(average, modifier, msg_start, len(result)) + if metric in warn_for: + _warn_prf(average, modifier, f"{metric.capitalize()} is", len(result)) return result @@ -1751,7 +1739,7 @@ def precision_recall_fscore_support( array([0., 0., 1.]), array([0. , 0. , 0.8]), array([2, 2, 2])) """ - zero_division_value = _check_zero_division(zero_division) + _check_zero_division(zero_division) labels = _check_set_wise_labels(y_true, y_pred, average, labels, pos_label) # Calculate tp_sum, pred_sum, true_sum ### @@ -1784,12 +1772,6 @@ def precision_recall_fscore_support( tp_sum, true_sum, "recall", "true", average, warn_for, zero_division ) - # warn for f-score only if zero_division is warn, it is in warn_for - # and BOTH prec and rec are ill-defined - if zero_division == "warn" and ("f-score",) == warn_for: - if (pred_sum[true_sum == 0] == 0).any(): - _warn_prf(average, "true nor predicted", "F-score is", len(true_sum)) - if np.isposinf(beta): f_score = recall elif beta == 0: @@ -1797,13 +1779,18 @@ def precision_recall_fscore_support( else: # The score is defined as: # score = (1 + beta**2) * precision * recall / (beta**2 * precision + recall) - # We set to `zero_division_value` if the denominator is 0 **or** if **both** - # precision and recall are ill-defined. - denom = beta2 * precision + recall - mask = np.isclose(denom, 0) | np.isclose(pred_sum + true_sum, 0) - denom[mask] = 1 # avoid division by 0 - f_score = (1 + beta2) * precision * recall / denom - f_score[mask] = zero_division_value + # Therefore, we can express the score in terms of confusion matrix entries as: + # score = (1 + beta**2) * tp / ((1 + beta**2) * tp + beta**2 * fn + fp) + denom = beta2 * true_sum + pred_sum + f_score = _prf_divide( + (1 + beta2) * tp_sum, + denom, + "f-score", + "true nor predicted", + average, + warn_for, + zero_division, + ) # Average the results if average == "weighted": diff --git a/sklearn/metrics/tests/test_classification.py b/sklearn/metrics/tests/test_classification.py index 895e10ca851a6..abf1aae487599 100644 --- a/sklearn/metrics/tests/test_classification.py +++ b/sklearn/metrics/tests/test_classification.py @@ -1809,7 +1809,7 @@ def test_precision_recall_f1_score_with_an_empty_prediction( assert_array_almost_equal(p, [zero_division_expected, 1.0, 1.0, 0.0], 2) assert_array_almost_equal(r, [0.0, 0.5, 1.0, zero_division_expected], 2) - expected_f = 0 if not np.isnan(zero_division_expected) else np.nan + expected_f = 0 assert_array_almost_equal(f, [expected_f, 1 / 1.5, 1, expected_f], 2) assert_array_almost_equal(s, [1, 2, 1, 0], 2) @@ -1826,7 +1826,7 @@ def test_precision_recall_f1_score_with_an_empty_prediction( assert_almost_equal(p, (2 + value_to_sum) / values_to_average) assert_almost_equal(r, (1.5 + value_to_sum) / values_to_average) - expected_f = (2 / 3 + 1) / (4 if not np.isnan(zero_division_expected) else 2) + expected_f = (2 / 3 + 1) / 4 assert_almost_equal(f, expected_f) assert s is None assert_almost_equal( @@ -1859,7 +1859,7 @@ def test_precision_recall_f1_score_with_an_empty_prediction( ) assert_almost_equal(p, 3 / 4 if zero_division_expected == 0 else 1.0) assert_almost_equal(r, 0.5) - values_to_average = 4 if not np.isnan(zero_division_expected) else 3 + values_to_average = 4 assert_almost_equal(f, (2 * 2 / 3 + 1) / values_to_average) assert s is None assert_almost_equal( @@ -1877,12 +1877,12 @@ def test_precision_recall_f1_score_with_an_empty_prediction( assert_almost_equal(r, 1 / 3) assert_almost_equal(f, 1 / 3) assert s is None - expected_result = {1: 0.666, np.nan: 1.0} + expected_result = 0.333 assert_almost_equal( fbeta_score( y_true, y_pred, beta=2, average="samples", zero_division=zero_division ), - expected_result.get(zero_division, 0.333), + expected_result, 2, ) @@ -2012,7 +2012,7 @@ def test_prf_warnings(): f, w = precision_recall_fscore_support, UndefinedMetricWarning for average in [None, "weighted", "macro"]: msg = ( - "Precision and F-score are ill-defined and " + "Precision is ill-defined and " "being set to 0.0 in labels with no predicted samples." " Use `zero_division` parameter to control" " this behavior." @@ -2021,7 +2021,7 @@ def test_prf_warnings(): f([0, 1, 2], [1, 1, 2], average=average) msg = ( - "Recall and F-score are ill-defined and " + "Recall is ill-defined and " "being set to 0.0 in labels with no true samples." " Use `zero_division` parameter to control" " this behavior." @@ -2031,7 +2031,7 @@ def test_prf_warnings(): # average of per-sample scores msg = ( - "Precision and F-score are ill-defined and " + "Precision is ill-defined and " "being set to 0.0 in samples with no predicted labels." " Use `zero_division` parameter to control" " this behavior." @@ -2040,7 +2040,7 @@ def test_prf_warnings(): f(np.array([[1, 0], [1, 0]]), np.array([[1, 0], [0, 0]]), average="samples") msg = ( - "Recall and F-score are ill-defined and " + "Recall is ill-defined and " "being set to 0.0 in samples with no true labels." " Use `zero_division` parameter to control" " this behavior." @@ -2050,7 +2050,7 @@ def test_prf_warnings(): # single score: micro-average msg = ( - "Precision and F-score are ill-defined and " + "Precision is ill-defined and " "being set to 0.0 due to no predicted samples." " Use `zero_division` parameter to control" " this behavior." @@ -2059,7 +2059,7 @@ def test_prf_warnings(): f(np.array([[1, 1], [1, 1]]), np.array([[0, 0], [0, 0]]), average="micro") msg = ( - "Recall and F-score are ill-defined and " + "Recall is ill-defined and " "being set to 0.0 due to no true samples." " Use `zero_division` parameter to control" " this behavior." @@ -2069,7 +2069,7 @@ def test_prf_warnings(): # single positive label msg = ( - "Precision and F-score are ill-defined and " + "Precision is ill-defined and " "being set to 0.0 due to no predicted samples." " Use `zero_division` parameter to control" " this behavior." @@ -2078,7 +2078,7 @@ def test_prf_warnings(): f([1, 1], [-1, -1], average="binary") msg = ( - "Recall and F-score are ill-defined and " + "Recall is ill-defined and " "being set to 0.0 due to no true samples." " Use `zero_division` parameter to control" " this behavior." @@ -2090,14 +2090,20 @@ def test_prf_warnings(): warnings.simplefilter("always") precision_recall_fscore_support([0, 0], [0, 0], average="binary") msg = ( - "Recall and F-score are ill-defined and " + "F-score is ill-defined and being set to 0.0 due to no true nor " + "predicted samples. Use `zero_division` parameter to control this" + " behavior." + ) + assert str(record.pop().message) == msg + msg = ( + "Recall is ill-defined and " "being set to 0.0 due to no true samples." " Use `zero_division` parameter to control" " this behavior." ) assert str(record.pop().message) == msg msg = ( - "Precision and F-score are ill-defined and " + "Precision is ill-defined and " "being set to 0.0 due to no predicted samples." " Use `zero_division` parameter to control" " this behavior." @@ -2818,6 +2824,24 @@ def test_classification_metric_pos_label_types(metric, classes): assert not np.any(np.isnan(result)) +@pytest.mark.parametrize( + "y_true, y_pred, expected_score", + [ + (np.array([0, 1]), np.array([1, 0]), 0.0), + (np.array([0, 1]), np.array([0, 1]), 1.0), + (np.array([0, 1]), np.array([0, 0]), 0.0), + (np.array([0, 0]), np.array([0, 0]), 1.0), + ], +) +def test_f1_for_small_binary_inputs_with_zero_division(y_true, y_pred, expected_score): + """Check the behaviour of `zero_division` for f1-score. + + Non-regression test for: + https://github.com/scikit-learn/scikit-learn/issues/26965 + """ + assert f1_score(y_true, y_pred, zero_division=1.0) == pytest.approx(expected_score) + + @pytest.mark.parametrize( "scoring", [ diff --git a/sklearn/metrics/tests/test_common.py b/sklearn/metrics/tests/test_common.py index af652d1c90b41..4f5b10a51a4ce 100644 --- a/sklearn/metrics/tests/test_common.py +++ b/sklearn/metrics/tests/test_common.py @@ -1735,7 +1735,7 @@ def test_metrics_pos_label_error_str(metric, y_pred_threshold, dtype_y_str): def check_array_api_metric( metric, array_namespace, device, dtype, y_true_np, y_pred_np, sample_weight=None ): - xp, device, dtype = _array_api_for_tests(array_namespace, device, dtype) + xp = _array_api_for_tests(array_namespace, device) y_true_xp = xp.asarray(y_true_np, device=device) y_pred_xp = xp.asarray(y_pred_np, device=device) diff --git a/sklearn/model_selection/tests/test_split.py b/sklearn/model_selection/tests/test_split.py index 4b9d29fb83e98..94a33cf1a814b 100644 --- a/sklearn/model_selection/tests/test_split.py +++ b/sklearn/model_selection/tests/test_split.py @@ -1279,7 +1279,7 @@ def test_train_test_split_default_test_size(train_size, exp_train, exp_test): ), ) def test_array_api_train_test_split(shuffle, stratify, array_namespace, device, dtype): - xp, device, dtype = _array_api_for_tests(array_namespace, device, dtype) + xp = _array_api_for_tests(array_namespace, device) X = np.arange(100).reshape((10, 10)) y = np.arange(10) diff --git a/sklearn/preprocessing/_data.py b/sklearn/preprocessing/_data.py index cadd2737465d2..9120384588ef2 100644 --- a/sklearn/preprocessing/_data.py +++ b/sklearn/preprocessing/_data.py @@ -155,9 +155,10 @@ def scale(X, *, axis=0, with_mean=True, with_std=True, copy=True): unit standard deviation). copy : bool, default=True - Set to False to perform inplace row normalization and avoid a - copy (if the input is already a numpy array or a scipy.sparse - CSC matrix and if axis is 1). + If False, try to avoid a copy and scale in place. + This is not guaranteed to always work in place; e.g. if the data is + a numpy array with an int dtype, a copy will be returned even with + copy=False. Returns ------- @@ -613,8 +614,10 @@ def minmax_scale(X, feature_range=(0, 1), *, axis=0, copy=True): otherwise (if 1) scale each sample. copy : bool, default=True - Set to False to perform inplace scaling and avoid a copy (if the input - is already a numpy array). + If False, try to avoid a copy and scale in place. + This is not guaranteed to always work in place; e.g. if the data is + a numpy array with an int dtype, a copy will be returned even with + copy=False. Returns ------- @@ -1336,8 +1339,10 @@ def maxabs_scale(X, *, axis=0, copy=True): otherwise (if 1) scale each sample. copy : bool, default=True - Set to False to perform inplace scaling and avoid a copy (if the input - is already a numpy array). + If False, try to avoid a copy and scale in place. + This is not guaranteed to always work in place; e.g. if the data is + a numpy array with an int dtype, a copy will be returned even with + copy=False. Returns ------- @@ -1713,9 +1718,10 @@ def robust_scale( .. versionadded:: 0.18 copy : bool, default=True - Set to `False` to perform inplace row normalization and avoid a - copy (if the input is already a numpy array or a scipy.sparse - CSR matrix and if axis is 1). + If False, try to avoid a copy and scale in place. + This is not guaranteed to always work in place; e.g. if the data is + a numpy array with an int dtype, a copy will be returned even with + copy=False. unit_variance : bool, default=False If `True`, scale data so that normally distributed features have a @@ -1826,9 +1832,10 @@ def normalize(X, norm="l2", *, axis=1, copy=True, return_norm=False): normalize each sample, otherwise (if 0) normalize each feature. copy : bool, default=True - Set to False to perform inplace row normalization and avoid a - copy (if the input is already a numpy array or a scipy.sparse - CSR matrix and if axis is 1). + If False, try to avoid a copy and normalize in place. + This is not guaranteed to always work in place; e.g. if the data is + a numpy array with an int dtype, a copy will be returned even with + copy=False. return_norm : bool, default=False Whether to return the computed norms. @@ -2061,9 +2068,10 @@ def binarize(X, *, threshold=0.0, copy=True): Threshold may not be less than 0 for operations on sparse matrices. copy : bool, default=True - Set to False to perform inplace binarization and avoid a copy - (if the input is already a numpy array or a scipy.sparse CSR / CSC - matrix and if axis is 1). + If False, try to avoid a copy and binarize in place. + This is not guaranteed to always work in place; e.g. if the data is + a numpy array with an object dtype, a copy will be returned even with + copy=False. Returns ------- @@ -2947,9 +2955,10 @@ def quantile_transform( See :term:`Glossary `. copy : bool, default=True - Set to False to perform inplace transformation and avoid a copy (if the - input is already a numpy array). If True, a copy of `X` is transformed, - leaving the original `X` unchanged. + If False, try to avoid a copy and transform in place. + This is not guaranteed to always work in place; e.g. if the data is + a numpy array with an int dtype, a copy will be returned even with + copy=False. .. versionchanged:: 0.23 The default value of `copy` changed from False to True in 0.23. @@ -3483,7 +3492,10 @@ def power_transform(X, method="yeo-johnson", *, standardize=True, copy=True): transformed output. copy : bool, default=True - Set to False to perform inplace computation during transformation. + If False, try to avoid a copy and transform in place. + This is not guaranteed to always work in place; e.g. if the data is + a numpy array with an int dtype, a copy will be returned even with + copy=False. Returns ------- diff --git a/sklearn/tree/_classes.py b/sklearn/tree/_classes.py index fae4bcbff8715..a6cd34488d4a6 100644 --- a/sklearn/tree/_classes.py +++ b/sklearn/tree/_classes.py @@ -1404,23 +1404,12 @@ class in a leaf. proba = self.tree_.predict(X) if self.n_outputs_ == 1: - proba = proba[:, : self.n_classes_] - normalizer = proba.sum(axis=1)[:, np.newaxis] - normalizer[normalizer == 0.0] = 1.0 - proba /= normalizer - - return proba - + return proba[:, : self.n_classes_] else: all_proba = [] - for k in range(self.n_outputs_): proba_k = proba[:, k, : self.n_classes_[k]] - normalizer = proba_k.sum(axis=1)[:, np.newaxis] - normalizer[normalizer == 0.0] = 1.0 - proba_k /= normalizer all_proba.append(proba_k) - return all_proba def predict_log_proba(self, X): diff --git a/sklearn/tree/_criterion.pyx b/sklearn/tree/_criterion.pyx index 028267faccd3a..4eb4d868e0abe 100644 --- a/sklearn/tree/_criterion.pyx +++ b/sklearn/tree/_criterion.pyx @@ -647,15 +647,18 @@ cdef class ClassificationCriterion(Criterion): dest : float64_t pointer The memory address which we will save the node value into. """ - cdef intp_t k + cdef intp_t k, c for k in range(self.n_outputs): - memcpy(dest, &self.sum_total[k, 0], self.n_classes[k] * sizeof(float64_t)) + for c in range(self.n_classes[k]): + dest[c] = self.sum_total[k, c] / self.weighted_n_node_samples dest += self.max_n_classes - cdef void clip_node_value(self, float64_t * dest, float64_t lower_bound, float64_t upper_bound) noexcept nogil: - """Clip the value in dest between lower_bound and upper_bound for monotonic constraints. - + cdef inline void clip_node_value( + self, float64_t * dest, float64_t lower_bound, float64_t upper_bound + ) noexcept nogil: + """Clip the values in dest such that predicted probabilities stay between + `lower_bound` and `upper_bound` when monotonic constraints are enforced. Note that monotonicity constraints are only supported for: - single-output trees and - binary classifications. @@ -665,7 +668,7 @@ cdef class ClassificationCriterion(Criterion): elif dest[0] > upper_bound: dest[0] = upper_bound - # Class proportions for binary classification must sum to 1. + # Values for binary classification must sum to 1. dest[1] = 1 - dest[0] cdef inline float64_t middle_value(self) noexcept nogil: diff --git a/sklearn/tree/_export.py b/sklearn/tree/_export.py index 9cd6ad4b71387..7c6b5a7dcd848 100644 --- a/sklearn/tree/_export.py +++ b/sklearn/tree/_export.py @@ -277,14 +277,15 @@ def get_fill_color(self, tree, node_id): # Find max and min values in leaf nodes for regression self.colors["bounds"] = (np.min(tree.value), np.max(tree.value)) if tree.n_outputs == 1: - node_val = tree.value[node_id][0, :] / tree.weighted_n_node_samples[node_id] - if tree.n_classes[0] == 1: - # Regression or degraded classification with single class - node_val = tree.value[node_id][0, :] - if isinstance(node_val, Iterable) and self.colors["bounds"] is not None: - # Only unpack the float only for the regression tree case. - # Classification tree requires an Iterable in `get_color`. - node_val = node_val.item() + node_val = tree.value[node_id][0, :] + if ( + tree.n_classes[0] == 1 + and isinstance(node_val, Iterable) + and self.colors["bounds"] is not None + ): + # Unpack the float only for the regression tree case. + # Classification tree requires an Iterable in `get_color`. + node_val = node_val.item() else: # If multi-output color node by impurity node_val = -tree.impurity[node_id] @@ -353,9 +354,9 @@ def node_to_str(self, tree, node_id, criterion): node_string += str(tree.n_node_samples[node_id]) + characters[4] # Write node class distribution / regression value - if self.proportion and tree.n_classes[0] != 1: + if not self.proportion and tree.n_classes[0] != 1: # For classification this will show the proportion of samples - value = value / tree.weighted_n_node_samples[node_id] + value = value * tree.weighted_n_node_samples[node_id] if labels: node_string += "value = " if tree.n_classes[0] == 1: @@ -1078,14 +1079,20 @@ def export_text( export_text.report = "" - def _add_leaf(value, class_name, indent): + def _add_leaf(value, weighted_n_node_samples, class_name, indent): val = "" - is_classification = isinstance(decision_tree, DecisionTreeClassifier) - if show_weights or not is_classification: + if isinstance(decision_tree, DecisionTreeClassifier): + if show_weights: + val = [ + "{1:.{0}f}, ".format(decimals, v * weighted_n_node_samples) + for v in value + ] + val = "[" + "".join(val)[:-2] + "]" + weighted_n_node_samples + val += " class: " + str(class_name) + else: val = ["{1:.{0}f}, ".format(decimals, v) for v in value] val = "[" + "".join(val)[:-2] + "]" - if is_classification: - val += " class: " + str(class_name) export_text.report += value_fmt.format(indent, "", val) def print_tree_recurse(node, depth): @@ -1102,6 +1109,8 @@ def print_tree_recurse(node, depth): if tree_.n_classes[0] != 1 and tree_.n_outputs == 1: class_name = class_names[class_name] + weighted_n_node_samples = tree_.weighted_n_node_samples[node] + if depth <= max_depth + 1: info_fmt = "" info_fmt_left = info_fmt @@ -1119,11 +1128,11 @@ def print_tree_recurse(node, depth): export_text.report += info_fmt_right print_tree_recurse(tree_.children_right[node], depth + 1) else: # leaf - _add_leaf(value, class_name, indent) + _add_leaf(value, weighted_n_node_samples, class_name, indent) else: subtree_depth = _compute_depth(tree_, node) if subtree_depth == 1: - _add_leaf(value, class_name, indent) + _add_leaf(value, weighted_n_node_samples, class_name, indent) else: trunc_report = "truncated branch of depth %d" % subtree_depth export_text.report += truncation_fmt.format(indent, trunc_report) diff --git a/sklearn/tree/tests/test_monotonic_tree.py b/sklearn/tree/tests/test_monotonic_tree.py index fe2f863d314ed..6478c2e2dfd85 100644 --- a/sklearn/tree/tests/test_monotonic_tree.py +++ b/sklearn/tree/tests/test_monotonic_tree.py @@ -14,6 +14,7 @@ ExtraTreeClassifier, ExtraTreeRegressor, ) +from sklearn.utils._testing import assert_allclose from sklearn.utils.fixes import CSC_CONTAINERS TREE_CLASSIFIER_CLASSES = [DecisionTreeClassifier, ExtraTreeClassifier] @@ -77,15 +78,20 @@ def test_monotonic_constraints_classifications( if sparse_splitter: X_train = csc_container(X_train) est.fit(X_train, y_train) - y = est.predict_proba(X_test)[:, 1] + proba_test = est.predict_proba(X_test) + + assert np.logical_and( + proba_test >= 0.0, proba_test <= 1.0 + ).all(), "Probability should always be in [0, 1] range." + assert_allclose(proba_test.sum(axis=1), 1.0) # Monotonic increase constraint, it applies to the positive class - assert np.all(est.predict_proba(X_test_0incr)[:, 1] >= y) - assert np.all(est.predict_proba(X_test_0decr)[:, 1] <= y) + assert np.all(est.predict_proba(X_test_0incr)[:, 1] >= proba_test[:, 1]) + assert np.all(est.predict_proba(X_test_0decr)[:, 1] <= proba_test[:, 1]) # Monotonic decrease constraint, it applies to the positive class - assert np.all(est.predict_proba(X_test_1incr)[:, 1] <= y) - assert np.all(est.predict_proba(X_test_1decr)[:, 1] >= y) + assert np.all(est.predict_proba(X_test_1incr)[:, 1] <= proba_test[:, 1]) + assert np.all(est.predict_proba(X_test_1decr)[:, 1] >= proba_test[:, 1]) @pytest.mark.parametrize("TreeRegressor", TREE_BASED_REGRESSOR_CLASSES) diff --git a/sklearn/utils/_array_api.py b/sklearn/utils/_array_api.py index 24534faa931e8..6072c0fab8580 100644 --- a/sklearn/utils/_array_api.py +++ b/sklearn/utils/_array_api.py @@ -205,30 +205,6 @@ def __getattr__(self, name): def __eq__(self, other): return self._namespace == other._namespace - def take(self, X, indices, *, axis=0): - # When array_api supports `take` we can use this directly - # https://github.com/data-apis/array-api/issues/177 - if self._namespace.__name__ == "numpy.array_api": - X_np = numpy.take(X, indices, axis=axis) - return self._namespace.asarray(X_np) - - # We only support axis in (0, 1) and ndim in (1, 2) because that is all we need - # in scikit-learn - if axis not in {0, 1}: - raise ValueError(f"Only axis in (0, 1) is supported. Got {axis}") - - if X.ndim not in {1, 2}: - raise ValueError(f"Only X.ndim in (1, 2) is supported. Got {X.ndim}") - - if axis == 0: - if X.ndim == 1: - selected = [X[i] for i in indices] - else: # X.ndim == 2 - selected = [X[i, :] for i in indices] - else: # axis == 1 - selected = [X[:, i] for i in indices] - return self._namespace.stack(selected, axis=axis) - def isdtype(self, dtype, kind): return isdtype(dtype, kind, xp=self._namespace) diff --git a/sklearn/utils/_param_validation.py b/sklearn/utils/_param_validation.py index 8d8fc268b315f..ae2e9648a4ccb 100644 --- a/sklearn/utils/_param_validation.py +++ b/sklearn/utils/_param_validation.py @@ -2,7 +2,6 @@ import math import operator import re -import warnings from abc import ABC, abstractmethod from collections.abc import Iterable from inspect import signature @@ -587,20 +586,9 @@ def __init__(self): self._constraints = [ _InstancesOf(bool), _InstancesOf(np.bool_), - _InstancesOf(Integral), ] def is_satisfied_by(self, val): - # TODO(1.4) remove support for Integral. - if isinstance(val, Integral) and not isinstance(val, bool): - warnings.warn( - ( - "Passing an int for a boolean parameter is deprecated in version" - " 1.2 and won't be supported anymore in version 1.4." - ), - FutureWarning, - ) - return any(c.is_satisfied_by(val) for c in self._constraints) def __str__(self): diff --git a/sklearn/utils/_testing.py b/sklearn/utils/_testing.py index 96e8ee2f48df5..a9ecaa8cd2d9d 100644 --- a/sklearn/utils/_testing.py +++ b/sklearn/utils/_testing.py @@ -1030,7 +1030,7 @@ def fit_transform(self, X, y=None): return self.fit(X, y).transform(X, y) -def _array_api_for_tests(array_namespace, device, dtype): +def _array_api_for_tests(array_namespace, device): try: if array_namespace == "numpy.array_api": # FIXME: once it is not experimental anymore @@ -1079,4 +1079,4 @@ def _array_api_for_tests(array_namespace, device, dtype): if cupy.cuda.runtime.getDeviceCount() == 0: raise SkipTest("CuPy test requires cuda, which is not available") - return xp, device, dtype + return xp diff --git a/sklearn/utils/estimator_checks.py b/sklearn/utils/estimator_checks.py index b548da7396648..28c099441e1ba 100644 --- a/sklearn/utils/estimator_checks.py +++ b/sklearn/utils/estimator_checks.py @@ -875,7 +875,7 @@ def check_array_api_input( When check_values is True, it also checks that calling the estimator on the array_api Array gives the same results as ndarrays. """ - xp, device, dtype = _array_api_for_tests(array_namespace, device, dtype) + xp = _array_api_for_tests(array_namespace, device) X, y = make_classification(random_state=42) X = X.astype(dtype, copy=False) diff --git a/sklearn/utils/extmath.py b/sklearn/utils/extmath.py index c256639997319..c9aa5db2e0359 100644 --- a/sklearn/utils/extmath.py +++ b/sklearn/utils/extmath.py @@ -133,34 +133,19 @@ def fast_logdet(A): return ld -def density(w, **kwargs): +def density(w): """Compute density of a sparse vector. Parameters ---------- w : array-like The sparse vector. - **kwargs : keyword arguments - Ignored. - - .. deprecated:: 1.2 - ``**kwargs`` were deprecated in version 1.2 and will be removed in - 1.4. Returns ------- float The density of w, between 0 and 1. """ - if kwargs: - warnings.warn( - ( - "Additional keyword arguments are deprecated in version 1.2 and will be" - " removed in version 1.4." - ), - FutureWarning, - ) - if hasattr(w, "toarray"): d = float(w.nnz) / (w.shape[0] * w.shape[1]) else: diff --git a/sklearn/utils/fixes.py b/sklearn/utils/fixes.py index 569863b817d55..2769e99b8619c 100644 --- a/sklearn/utils/fixes.py +++ b/sklearn/utils/fixes.py @@ -10,8 +10,6 @@ # # License: BSD 3 clause -import sys -from importlib import resources import numpy as np import scipy @@ -243,57 +241,6 @@ def _sparse_nan_min_max(X, axis): ) -############################################################################### -# Backport of Python 3.9's importlib.resources -# TODO: Remove when Python 3.9 is the minimum supported version - - -def _open_text(data_module, data_file_name): - if sys.version_info >= (3, 9): - return resources.files(data_module).joinpath(data_file_name).open("r") - else: - return resources.open_text(data_module, data_file_name) - - -def _open_binary(data_module, data_file_name): - if sys.version_info >= (3, 9): - return resources.files(data_module).joinpath(data_file_name).open("rb") - else: - return resources.open_binary(data_module, data_file_name) - - -def _read_text(descr_module, descr_file_name): - if sys.version_info >= (3, 9): - return resources.files(descr_module).joinpath(descr_file_name).read_text() - else: - return resources.read_text(descr_module, descr_file_name) - - -def _path(data_module, data_file_name): - if sys.version_info >= (3, 9): - return resources.as_file(resources.files(data_module).joinpath(data_file_name)) - else: - return resources.path(data_module, data_file_name) - - -def _is_resource(data_module, data_file_name): - if sys.version_info >= (3, 9): - return resources.files(data_module).joinpath(data_file_name).is_file() - else: - return resources.is_resource(data_module, data_file_name) - - -def _contents(data_module): - if sys.version_info >= (3, 9): - return ( - resource.name - for resource in resources.files(data_module).iterdir() - if resource.is_file() - ) - else: - return resources.contents(data_module) - - # For +1.25 NumPy versions exceptions and warnings are being moved # to a dedicated submodule. if np_version >= parse_version("1.25.0"): diff --git a/sklearn/utils/tests/conftest.py b/sklearn/utils/tests/conftest.py deleted file mode 100644 index 148225a481f69..0000000000000 --- a/sklearn/utils/tests/conftest.py +++ /dev/null @@ -1,10 +0,0 @@ -import pytest - -import sklearn - - -@pytest.fixture -def print_changed_only_false(): - sklearn.set_config(print_changed_only=False) - yield - sklearn.set_config(print_changed_only=True) # reset to default diff --git a/sklearn/utils/tests/test_array_api.py b/sklearn/utils/tests/test_array_api.py index 866fd0e1d56f3..01b1f2bf1adf8 100644 --- a/sklearn/utils/tests/test_array_api.py +++ b/sklearn/utils/tests/test_array_api.py @@ -2,7 +2,7 @@ import numpy import pytest -from numpy.testing import assert_allclose, assert_array_equal +from numpy.testing import assert_allclose from sklearn._config import config_context from sklearn.base import BaseEstimator @@ -101,48 +101,6 @@ def test_array_api_wrapper_astype(): assert X_converted.dtype == xp.float32 -def test_array_api_wrapper_take_for_numpy_api(): - """Test that fast path is called for numpy.array_api.""" - numpy_array_api = pytest.importorskip("numpy.array_api") - # USe the same name as numpy.array_api - xp_ = _AdjustableNameAPITestWrapper(numpy_array_api, "numpy.array_api") - xp = _ArrayAPIWrapper(xp_) - - X = xp.asarray(([[1, 2, 3], [3, 4, 5]]), dtype=xp.float64) - X_take = xp.take(X, xp.asarray([1]), axis=0) - assert hasattr(X_take, "__array_namespace__") - assert_array_equal(X_take, numpy.take(X, [1], axis=0)) - - -def test_array_api_wrapper_take(): - """Test _ArrayAPIWrapper API for take.""" - numpy_array_api = pytest.importorskip("numpy.array_api") - xp_ = _AdjustableNameAPITestWrapper(numpy_array_api, "wrapped_numpy.array_api") - xp = _ArrayAPIWrapper(xp_) - - # Check take compared to NumPy's with axis=0 - X_1d = xp.asarray([1, 2, 3], dtype=xp.float64) - X_take = xp.take(X_1d, xp.asarray([1]), axis=0) - assert hasattr(X_take, "__array_namespace__") - assert_array_equal(X_take, numpy.take(X_1d, [1], axis=0)) - - X = xp.asarray(([[1, 2, 3], [3, 4, 5]]), dtype=xp.float64) - X_take = xp.take(X, xp.asarray([0]), axis=0) - assert hasattr(X_take, "__array_namespace__") - assert_array_equal(X_take, numpy.take(X, [0], axis=0)) - - # Check take compared to NumPy's with axis=1 - X_take = xp.take(X, xp.asarray([0, 2]), axis=1) - assert hasattr(X_take, "__array_namespace__") - assert_array_equal(X_take, numpy.take(X, [0, 2], axis=1)) - - with pytest.raises(ValueError, match=r"Only axis in \(0, 1\) is supported"): - xp.take(X, xp.asarray([0]), axis=2) - - with pytest.raises(ValueError, match=r"Only X.ndim in \(1, 2\) is supported"): - xp.take(xp.asarray([[[0]]]), xp.asarray([0]), axis=0) - - @pytest.mark.parametrize("array_api", ["numpy", "numpy.array_api"]) def test_asarray_with_order(array_api): """Test _asarray_with_order passes along order for NumPy arrays.""" @@ -187,7 +145,7 @@ def test_asarray_with_order_ignored(): def test_weighted_sum( array_namespace, device, dtype, sample_weight, normalize, expected ): - xp, device, dtype = _array_api_for_tests(array_namespace, device, dtype) + xp = _array_api_for_tests(array_namespace, device) sample_score = numpy.asarray([1, 2, 3, 4], dtype=dtype) sample_score = xp.asarray(sample_score, device=device) if sample_weight is not None: diff --git a/sklearn/utils/tests/test_extmath.py b/sklearn/utils/tests/test_extmath.py index 0e6b122a3e408..fc2eab70f007b 100644 --- a/sklearn/utils/tests/test_extmath.py +++ b/sklearn/utils/tests/test_extmath.py @@ -60,20 +60,6 @@ def test_density(sparse_container): assert density(sparse_container(X)) == density(X) -# TODO(1.4): Remove test -def test_density_deprecated_kwargs(): - """Check that future warning is raised when user enters keyword arguments.""" - test_array = np.array([[1, 2, 3], [4, 5, 6]]) - with pytest.warns( - FutureWarning, - match=( - "Additional keyword arguments are deprecated in version 1.2 and will be" - " removed in version 1.4." - ), - ): - density(test_array, a=1) - - def test_uniform_weights(): # with uniform weights, results should be identical to stats.mode rng = np.random.RandomState(0) diff --git a/sklearn/utils/tests/test_multiclass.py b/sklearn/utils/tests/test_multiclass.py index 3ff477c037043..d7702ba35cf68 100644 --- a/sklearn/utils/tests/test_multiclass.py +++ b/sklearn/utils/tests/test_multiclass.py @@ -383,7 +383,7 @@ def test_is_multilabel(): yield_namespace_device_dtype_combinations(), ) def test_is_multilabel_array_api_compliance(array_namespace, device, dtype): - xp, device, dtype = _array_api_for_tests(array_namespace, device, dtype) + xp = _array_api_for_tests(array_namespace, device) for group, group_examples in ARRAY_API_EXAMPLES.items(): dense_exp = group == "multilabel-indicator" diff --git a/sklearn/utils/tests/test_param_validation.py b/sklearn/utils/tests/test_param_validation.py index 26d8fdf69a5be..795fdecfba2e4 100644 --- a/sklearn/utils/tests/test_param_validation.py +++ b/sklearn/utils/tests/test_param_validation.py @@ -627,12 +627,6 @@ def f(param): f(True) f(np.bool_(False)) - # an int is also valid but deprecated - with pytest.warns( - FutureWarning, match="Passing an int for a boolean parameter is deprecated" - ): - f(1) - def test_no_validation(): """Check that validation can be skipped for a parameter."""