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 673981be3e05e..b407d35dbf6e6 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 @@ -1,6 +1,6 @@ # Generated by conda-lock. # platform: linux-64 -# input_hash: 56e8dae95dcae13cac7ca1898bda12f1408bcea8a1aeb587ced409672f398a4b +# input_hash: 1f4dabbcad86dac83f485c02b9e47f75a93c9c39d9868537f57acbce3bd19fc8 @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.5.7-hbcca054_0.conda#f5c65075fc34438d5b456c7f3f5ab695 @@ -20,27 +20,34 @@ https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-2_kmp_llvm.tar https://conda.anaconda.org/conda-forge/linux-64/libgcc-ng-13.1.0-he5830b7_0.conda#cd93f779ff018dd85c7544c015c9db3c https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.8-h166bdaf_0.tar.bz2#be733e69048951df1e4b4b7bb8c7666f 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/aws-c-common-0.8.20-hd590300_0.conda#8717fccceb6a9394d86f37f3b663b4e9 https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-h7f98852_4.tar.bz2#a1fd65c7ccbf10880423d82bca54eb54 -https://conda.anaconda.org/conda-forge/linux-64/cudatoolkit-11.8.0-h37601d7_11.conda#9d166760c8cfa83e2fc989928312da3d +https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.19.1-hd590300_0.conda#e8c18d865be43e2fb3f7a145b6adf1f5 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/gflags-2.2.2-he1b5a44_1004.tar.bz2#cddaf2c63ea4a5901cf09524c490ecdc 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-72.1-hcb278e6_0.conda#7c8d20d847bb45f56bd941578fcfa146 https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.1-h166bdaf_0.tar.bz2#30186d27e2c9fa62b45fb1476b7200e3 https://conda.anaconda.org/conda-forge/linux-64/lame-3.100-h166bdaf_1003.tar.bz2#a8832b479f93521a9e7b5b743803be51 https://conda.anaconda.org/conda-forge/linux-64/lerc-4.0.0-h27087fc_0.tar.bz2#76bbff344f0134279f225174e9064c8f +https://conda.anaconda.org/conda-forge/linux-64/libabseil-20230125.2-cxx17_h59595ed_2.conda#f67106643beadfc737b94ca0bfd6d8e3 https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.0.9-h166bdaf_8.tar.bz2#9194c9bf9428035a05352d031462eae4 +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.18-h0b41bf4_0.conda#6aa9c9de5542ecb07fdda9ca626252d8 +https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-h516909a_1.tar.bz2#6f8720dff19e17ce5d48cfe7f3d2f0a3 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/libhiredis-1.0.2-h2cc385e_0.tar.bz2#b34907d3a81a3cd8095ee83d174c074a https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.17-h166bdaf_0.tar.bz2#b62b52da46c39ee2bc3c162ac7f1804d https://conda.anaconda.org/conda-forge/linux-64/libjpeg-turbo-2.1.5.1-h0b41bf4_0.conda#1edd9e67bdb90d78cea97733ff6b54e6 https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.0-h7f98852_0.tar.bz2#39b1328babf85c7c3a61636d9cd50206 +https://conda.anaconda.org/conda-forge/linux-64/libnuma-2.0.16-h0b41bf4_1.conda#28bfe2cb11357ccc5be21101a6b7ce86 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/libutf8proc-2.8.0-h166bdaf_0.tar.bz2#ede4266dc02e875fe1ea77b25dd43747 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.0-h0b41bf4_0.conda#0d4a7508d8c6c65314f2b9c1f56ad408 -https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-h166bdaf_4.tar.bz2#f3f9de449d32ca9b9c66a22863c96f41 +https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.2.13-hd590300_5.conda#f36c115f1ee199da648e0597ec2047ad https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.9.4-hcb278e6_0.conda#318b08df404f9c9be5712aaa5a6f0bb0 https://conda.anaconda.org/conda-forge/linux-64/mpg123-1.31.3-hcb278e6_0.conda#141a126675b6d1a4eabb111a4a353898 https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.4-hcb278e6_0.conda#681105bccc2a3f7f1a837d47d39c9179 @@ -48,8 +55,10 @@ 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.1.1-hd590300_1.conda#2e1d7b458ac8f1e3ca4e18b77add6277 https://conda.anaconda.org/conda-forge/linux-64/pixman-0.40.0-h36c2ea0_0.tar.bz2#660e72c82f2e75a6b3fe6a6e75c79f19 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/rdma-core-28.9-h59595ed_1.conda#aeffb7c06b5f65e55e6c637408dc4100 +https://conda.anaconda.org/conda-forge/linux-64/re2-2023.03.02-h8c504da_0.conda#206f8fa808748f6e90599c3368a1114e https://conda.anaconda.org/conda-forge/linux-64/sleef-3.5.1-h9b69904_2.tar.bz2#6e016cf4c525d04a7bd038cee53ad3fd -https://conda.anaconda.org/conda-forge/linux-64/xkeyboard-config-2.38-h0b41bf4_0.conda#9ac34337e5101a87e5d91da05d84aa48 +https://conda.anaconda.org/conda-forge/linux-64/snappy-1.1.10-h9fff704_0.conda#e6d228cd0bb74a51dd18f5bfce0b4115 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 @@ -59,7 +68,12 @@ https://conda.anaconda.org/conda-forge/linux-64/xorg-xextproto-7.3.0-h0b41bf4_10 https://conda.anaconda.org/conda-forge/linux-64/xorg-xf86vidmodeproto-2.3.1-h7f98852_1002.tar.bz2#3ceea9668625c18f19530de98b15d5b0 https://conda.anaconda.org/conda-forge/linux-64/xorg-xproto-7.0.31-h7f98852_1007.tar.bz2#b4a4381d54784606820704f7b5f05a15 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/aws-c-cal-0.5.27-hf85dbcb_0.conda#d067fbf673901a6e0fd323da1eeafe10 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.2.17-h4b87b72_0.conda#183be3df566bc1c143d5d7e0fc60ed8b +https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.1.10-h4b87b72_0.conda#613b0910286d4feba563ad657ac93372 +https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.1.16-h4b87b72_0.conda#c2a56432ce6009419442dd78e4d63829 https://conda.anaconda.org/conda-forge/linux-64/expat-2.5.0-hcb278e6_1.conda#8b9b5aca60558d02ddaa09d599e55920 +https://conda.anaconda.org/conda-forge/linux-64/glog-0.6.0-h6f12383_0.tar.bz2#b31f3565cb84435407594e548a2fb7b2 https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.0.9-h166bdaf_8.tar.bz2#4ae4d7795d33e02bd20f6b23d91caf82 https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.0.9-h166bdaf_8.tar.bz2#04bac51ba35ea023dc48af73c1c88c25 https://conda.anaconda.org/conda-forge/linux-64/libcap-2.67-he9d0100_0.conda#d05556c80caffff164d17bdea0105a1a @@ -67,40 +81,49 @@ https://conda.anaconda.org/conda-forge/linux-64/libedit-3.1.20191231-he28a2e2_2. 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.2-h27087fc_0.tar.bz2#7daf72d8e2a8e848e11d63ed6d1026e0 https://conda.anaconda.org/conda-forge/linux-64/libgpg-error-1.46-h620e276_0.conda#27e745f6f2e4b757e95dd7225fbe6bdb +https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.52.0-h61bc06f_0.conda#613955a50485812985c059e7b269f42e 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-h3eb15da_0.conda#4b36c68184c6c85d88c6e595a32a1ede https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.42.0-h2797004_0.conda#fdaae20a1cf7cd62130a0973190a31b7 +https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.0-h0841786_0.conda#1f5a58e686b13bcfde88b93f547d23fe 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.4-h0d562d8_0.conda#e46fad17d5fb57316b956f88dca765e4 https://conda.anaconda.org/conda-forge/linux-64/mysql-common-8.0.32-hf1915f5_2.conda#cf4a8f520fdad3a63bb2bce74576cd2d https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.40-hc3806b6_0.tar.bz2#69e2c796349cd9b273890bee0febfe1b https://conda.anaconda.org/conda-forge/linux-64/readline-8.2-h8228510_1.conda#47d31b792659ce70f470b5c82fdfb7a4 +https://conda.anaconda.org/conda-forge/linux-64/s2n-1.3.45-h06160fa_0.conda#5b78d77397d75049c433eb7b17a9bca8 https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.12-h27826a3_0.tar.bz2#5b8c42eb62e9fc961af70bdd6a26e168 +https://conda.anaconda.org/conda-forge/linux-64/ucx-1.14.1-hf587318_2.conda#37b27851c8d5a9a98e61ecd36aa990a7 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-h166bdaf_4.tar.bz2#4b11e365c0275b808be78b30f904e295 +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.2-h3eb15da_6.conda#6b63daed8feeca47be78f323e793d555 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.13.26-h0d05201_0.conda#2b8feff4f71c70e9ca0f7ac66b464e8a https://conda.anaconda.org/conda-forge/linux-64/brotli-bin-1.0.9-h166bdaf_8.tar.bz2#e5613f2bc717e9945840ff474419b8e4 https://conda.anaconda.org/conda-forge/linux-64/ccache-4.8.1-h1fcd64f_0.conda#fd37a0c47d8b3667b73af0549037ce83 https://conda.anaconda.org/conda-forge/linux-64/freetype-2.12.1-hca18f0e_1.conda#e1232042de76d24539a436d37597eb06 https://conda.anaconda.org/conda-forge/linux-64/krb5-1.20.1-h81ceb04_0.conda#89a41adce7106749573d883b2f657d78 https://conda.anaconda.org/conda-forge/linux-64/libgcrypt-1.10.1-h166bdaf_0.tar.bz2#f967fc95089cd247ceed56eda31de3a9 https://conda.anaconda.org/conda-forge/linux-64/libglib-2.76.3-hebfc3b9_0.conda#a64f11b244b2c112cd3fa1cbe9493999 -https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.1-cuda112_haf10fcf_5.conda#b8996ffa972161676ba6972af4c41384 +https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.54.2-hb20ce57_2.conda#2d6c2c90dd7805816bd78d80977b61d6 +https://conda.anaconda.org/conda-forge/linux-64/libhwloc-2.9.1-nocuda_h7313eea_6.conda#cd72a08ef4e84dea4c67edde33eb3191 https://conda.anaconda.org/conda-forge/linux-64/libllvm15-15.0.7-h5cf9203_2.conda#5c0a511fa7d223d8661fefcf77b2a877 https://conda.anaconda.org/conda-forge/linux-64/libsndfile-1.2.0-hb75c966_0.conda#c648d19cd9c8625898d5d370414de7c7 +https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.18.1-h8fd135c_2.conda#bbf65f7688512872f063810623b755dc https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.5.0-ha587672_6.conda#4e5ee4b062c21519efbee7e2ae608748 -https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b https://conda.anaconda.org/conda-forge/linux-64/llvm-openmp-16.0.5-h4dfa4b3_0.conda#9441a97b74c692d969ff465ac6c0ccea https://conda.anaconda.org/conda-forge/linux-64/mysql-libs-8.0.32-hca2cd23_2.conda#20b4708cd04bdc8138d03314ddd97885 https://conda.anaconda.org/conda-forge/linux-64/nss-3.89-he45b914_0.conda#2745719a58eeaab6657256a3f142f099 -https://conda.anaconda.org/conda-forge/linux-64/python-3.11.3-h2755cc3_0_cpython.conda#37005ea5f68df6a8a381b70cf4d4a160 +https://conda.anaconda.org/conda-forge/linux-64/orc-1.8.3-h2f23424_1.conda#bf63c66993744a1d4b59a6cfdb59524e +https://conda.anaconda.org/conda-forge/linux-64/python-3.11.4-hab00c5b_0_cpython.conda#1c628861a2a126b9fc9363ca1b7d014e 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.4-h8ee46fc_1.conda#52d09ea80a42c0466214609ef0a2d62d +https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.5-h8ee46fc_0.conda#742d9cd4a7da3ac6345f986e5da3b18d https://conda.anaconda.org/conda-forge/noarch/array-api-compat-1.2-pyhd8ed1ab_0.conda#3d34f2f6987f8d098ab00198c170a77e +https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.3.0-hc5de78f_6.conda#11a833cfa28e5132331443fd2e4e4b30 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.7.8-h412fb1b_4.conda#ab2cf24045e164be40b4f50f8045f31d https://conda.anaconda.org/conda-forge/linux-64/brotli-1.0.9-h166bdaf_8.tar.bz2#2ff08978892a3e8b954397c461f18418 https://conda.anaconda.org/conda-forge/noarch/certifi-2023.5.7-pyhd8ed1ab_0.conda#5d1b71c942b8421285934dad1d891ebc https://conda.anaconda.org/conda-forge/noarch/charset-normalizer-3.1.0-pyhd8ed1ab_0.conda#7fcff9f6f123696e940bda77bd4d6551 @@ -118,6 +141,7 @@ https://conda.anaconda.org/conda-forge/linux-64/kiwisolver-1.4.4-py311h4dd048b_1 https://conda.anaconda.org/conda-forge/linux-64/lcms2-2.15-haa2dc70_1.conda#980d8aca0bc23ca73fa8caa3e7c84c28 https://conda.anaconda.org/conda-forge/linux-64/libclang13-15.0.7-default_h9986a30_2.conda#907344cee64101d44d806bbe0fccb01d https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h36d4200_3.conda#c9f4416a34bc91e0eb029f912c68f81f +https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.1.2-h409715c_0.conda#50c873c9660ed116707ae15b663928d8 https://conda.anaconda.org/conda-forge/linux-64/libpq-15.3-hbcd7760_1.conda#8afb2a97d256ffde95b91a6283bc598c https://conda.anaconda.org/conda-forge/linux-64/libsystemd0-253-h8c4010b_1.conda#9176b1e2cb8beca37a7510b0e801e38f https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyh9f0ad1d_0.tar.bz2#2ba8498c1018c1e9c61eb99b973dfe19 @@ -139,46 +163,55 @@ https://conda.anaconda.org/conda-forge/noarch/tomli-2.0.1-pyhd8ed1ab_0.tar.bz2#5 https://conda.anaconda.org/conda-forge/linux-64/tornado-6.3.2-py311h459d7ec_0.conda#12b1c374ee90a1aa11ea921858394dc8 https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.6.3-pyha770c72_0.conda#4a3014a4d107d15475d106b751c4e352 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.39-hd590300_0.conda#d88c7fc8a11858fb14761832e4da1954 https://conda.anaconda.org/conda-forge/linux-64/xorg-libxext-1.3.4-h0b41bf4_2.conda#82b6df12252e6f32402b96dacc656fec https://conda.anaconda.org/conda-forge/linux-64/xorg-libxrender-0.9.10-h7f98852_1003.tar.bz2#f59c1242cc1dd93e72c2ee2b360979eb -https://conda.anaconda.org/conda-forge/noarch/zipp-3.15.0-pyhd8ed1ab_0.conda#13018819ca8f5b7cc675a8faf1f5fedf +https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.6.28-hccec9ca_5.conda#6823948414b0fad4b07af9ead54f7cb5 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.8.13-ha5d9b87_2.conda#f9ce1f48f4f220f0da4e292c4c95bb61 https://conda.anaconda.org/conda-forge/linux-64/cairo-1.16.0-hbbf8b49_1016.conda#c1dd96500b9b1a75e9e511931f415cbc https://conda.anaconda.org/conda-forge/linux-64/coverage-7.2.7-py311h459d7ec_0.conda#3c2c65575c28b23afc5e4ff721a2fc9f -https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.39.4-py311h459d7ec_0.conda#ddd2cd004e10bc7a1e042283326cbf91 +https://conda.anaconda.org/conda-forge/linux-64/fonttools-4.40.0-py311h459d7ec_0.conda#b19f671a6b221f922cf871d71a71c0fa https://conda.anaconda.org/conda-forge/linux-64/glib-2.76.3-hfc55251_0.conda#950e02f5665f5f4ff0437a6acba58798 -https://conda.anaconda.org/conda-forge/noarch/importlib-metadata-6.6.0-pyha770c72_0.conda#f91a5d5175fb7ff2a91952ec7da59cb9 https://conda.anaconda.org/conda-forge/noarch/joblib-1.2.0-pyhd8ed1ab_0.tar.bz2#7583652522d71ad78ba536bba06940eb https://conda.anaconda.org/conda-forge/linux-64/libclang-15.0.7-default_h7634d5b_2.conda#1a4fe5162abe4a19b5a9dedf158a0ff9 +https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-2.11.0-hac9eb74_1.conda#f463669862853ddbb192c810aac4390e +https://conda.anaconda.org/conda-forge/linux-64/libxkbcommon-1.5.0-h5d7e998_3.conda#c91ea308d7bf70b62ddda568478aa03b https://conda.anaconda.org/conda-forge/linux-64/mkl-2022.2.1-h84fe81f_16997.conda#a7ce56d5757f5b57e7daabe703ade5bb https://conda.anaconda.org/conda-forge/linux-64/pillow-9.5.0-py311h0b84326_1.conda#6be2190fdbf26a6c1d3356a54d955237 https://conda.anaconda.org/conda-forge/linux-64/pulseaudio-client-16.1-hb77b528_4.conda#8f349ca16d30950aa00870484d9d30c4 +https://conda.anaconda.org/conda-forge/noarch/pytest-7.3.2-pyhd8ed1ab_0.conda#8907018dd1302aada2632ca679e25ccd 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.9-py311hb755f60_0.conda#2b5430f2f1651f460c852e1fdd549184 https://conda.anaconda.org/conda-forge/noarch/typing-extensions-4.6.3-hd8ed1ab_0.conda#3876f650ed7d0f95d70fa4b647621909 -https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.2-pyhd8ed1ab_0.conda#81a763f3c64fe6d5f32e033b0325265d +https://conda.anaconda.org/conda-forge/noarch/urllib3-2.0.3-pyhd8ed1ab_0.conda#ae465d0fbf9f1979cb2d8d4043d885e2 +https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.3.4-h95e21fb_5.conda#94bb6ed517ae8fdaf9ec78ec4e099e6a 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.3-h977cf35_1.conda#410ed3b168e5a139d12ebaf4143072cd https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-7.3.0-hdb3a94d_0.conda#765bc76c0dfaf24ff9d8a2935b2510df https://conda.anaconda.org/conda-forge/linux-64/libblas-3.9.0-16_linux64_mkl.tar.bz2#85f61af03fd291dae33150ffe89dc09a -https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.1-pyhd8ed1ab_0.conda#e2be672aece1f060adf7154f76531a35 +https://conda.anaconda.org/conda-forge/noarch/platformdirs-3.5.3-pyhd8ed1ab_0.conda#c085a16ba3d0c9ee282c438308b57724 https://conda.anaconda.org/conda-forge/linux-64/pyqt5-sip-12.11.0-py311hcafe171_3.conda#0d79df2a96f6572fed2883374400b235 -https://conda.anaconda.org/conda-forge/noarch/pytest-7.3.1-pyhd8ed1ab_0.conda#547c7de697ec99b494a28ddde185b5a4 +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/requests-2.31.0-pyhd8ed1ab_0.conda#a30144e4156cdbb236f99ebb49828f8b +https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.20.2-h5289e1f_9.conda#ee251396cd9694d3b03f86adb3220d74 https://conda.anaconda.org/conda-forge/linux-64/gst-plugins-base-1.22.3-h938bd60_1.conda#1f317eb7f00db75f4112a07476345376 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/pooch-1.7.0-pyha770c72_3.conda#5936894aade8240c867d292aa0d980c6 -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/numpy-1.24.3-py311h64a7726_0.conda#f1d507e1a5f1151845f7818ceb02ba9f 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/aws-sdk-cpp-1.10.57-h8101662_14.conda#80fa7254dbb5f012c135b8ecd0f878ad +https://conda.anaconda.org/conda-forge/linux-64/numpy-1.24.3-py311h64a7726_0.conda#f1d507e1a5f1151845f7818ceb02ba9f https://conda.anaconda.org/conda-forge/linux-64/qt-main-5.15.8-h01ceb2d_13.conda#99ca83a166224f46a62c9545b8d66401 -https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.0.7-py311ha3edf6b_0.conda#e7548e7f58965a2fe97a95950a5fedc6 +https://conda.anaconda.org/conda-forge/linux-64/contourpy-1.1.0-py311h9547e67_0.conda#daf3f23397ab2265d0cdfa339f3627ba +https://conda.anaconda.org/conda-forge/linux-64/libarrow-12.0.0-hed73b3e_7_cpu.conda#b7751e77fef9bec5135f4a6cb3ceb7b3 https://conda.anaconda.org/conda-forge/linux-64/pandas-2.0.2-py311h320fe9a_0.conda#509769b430266dc5c2f6a3eab0f23164 +https://conda.anaconda.org/conda-forge/linux-64/polars-0.18.2-py311h46250e7_0.conda#f5e9bcfcaf29f67e8611fd165364d969 https://conda.anaconda.org/conda-forge/linux-64/pyqt-5.15.7-py311ha74522f_3.conda#ad6dd0bed0cdf5f2d4eb2b989d6253b3 https://conda.anaconda.org/conda-forge/linux-64/pytorch-1.13.1-cpu_py311h410fd25_1.conda#ddd2fadddf89e3dc3d541a2537fce010 https://conda.anaconda.org/conda-forge/linux-64/scipy-1.10.1-py311h64a7726_3.conda#a01a3a7428e770db5a0c8c7ab5fce7f7 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-base-3.7.1-py311h8597a09_0.conda#70c3b734ffe82c16b6d121aaa11929a8 https://conda.anaconda.org/conda-forge/linux-64/pyamg-5.0.0-py311hcb41070_0.conda#af2d6818c526791fb81686c554ab262b +https://conda.anaconda.org/conda-forge/linux-64/pyarrow-12.0.0-py311hdf9aeb4_7_cpu.conda#280733071f7aadc4d6c8c77c22e2816d https://conda.anaconda.org/conda-forge/linux-64/pytorch-cpu-1.13.1-cpu_py311hdb170b5_1.conda#a805d5f103e493f207613283d8acbbe1 https://conda.anaconda.org/conda-forge/linux-64/matplotlib-3.7.1-py311h38be061_0.conda#8fd462c8bcbba5a3affcb2d04e387476 diff --git a/build_tools/azure/pylatest_conda_forge_mkl_linux-64_environment.yml b/build_tools/azure/pylatest_conda_forge_mkl_linux-64_environment.yml index 2eb5ebde3445e..07ec7bb7ff206 100644 --- a/build_tools/azure/pylatest_conda_forge_mkl_linux-64_environment.yml +++ b/build_tools/azure/pylatest_conda_forge_mkl_linux-64_environment.yml @@ -23,4 +23,6 @@ dependencies: - ccache - pytorch=1.13 - pytorch-cpu + - polars + - pyarrow - array-api-compat diff --git a/build_tools/update_environments_and_lock_files.py b/build_tools/update_environments_and_lock_files.py index 960c01d4383b8..2da91b72f071a 100644 --- a/build_tools/update_environments_and_lock_files.py +++ b/build_tools/update_environments_and_lock_files.py @@ -93,6 +93,8 @@ def remove_from(alist, to_remove): "ccache", "pytorch", "pytorch-cpu", + "polars", + "pyarrow", "array-api-compat", ], "package_constraints": { diff --git a/doc/whats_new/v1.4.rst b/doc/whats_new/v1.4.rst index 94046c25c6e38..4946576d83056 100644 --- a/doc/whats_new/v1.4.rst +++ b/doc/whats_new/v1.4.rst @@ -33,6 +33,16 @@ Changelog :pr:`123456` by :user:`Joe Bloggs `. where 123456 is the *pull request* number, not the issue number. +Changes impacting all modules +----------------------------- + +- |Enhancement| All estimators now recognizes the column names from any dataframe + that adopts the + `DataFrame Interchange Protocol `__. + Dataframes that return a correct representation through `np.asarray(df)` is expected + to work with our estimators and functions. + :pr:`26464` by `Thomas Fan`_. + Code and Documentation Contributors ----------------------------------- diff --git a/sklearn/_min_dependencies.py b/sklearn/_min_dependencies.py index e12720dbd5b94..c2e21047763ef 100644 --- a/sklearn/_min_dependencies.py +++ b/sklearn/_min_dependencies.py @@ -40,6 +40,8 @@ "black": ("23.3.0", "tests"), "mypy": ("1.3", "tests"), "pyamg": ("4.0.0", "tests"), + "polars": ("0.18.2", "tests"), + "pyarrow": ("12.0.0", "tests"), "sphinx": ("4.0.1", "docs"), "sphinx-gallery": ("0.7.0", "docs"), "numpydoc": ("1.2.0", "docs, tests"), diff --git a/sklearn/conftest.py b/sklearn/conftest.py index 3d2c73b99a801..c3db0453918f8 100644 --- a/sklearn/conftest.py +++ b/sklearn/conftest.py @@ -1,3 +1,4 @@ +import builtins import platform import sys from contextlib import suppress @@ -252,3 +253,16 @@ def pytest_configure(config): # Register global_random_seed plugin if it is not already registered if not config.pluginmanager.hasplugin("sklearn.tests.random_seed"): config.pluginmanager.register(random_seed) + + +@pytest.fixture +def hide_available_pandas(monkeypatch): + """Pretend pandas was not installed.""" + import_orig = builtins.__import__ + + def mocked_import(name, *args, **kwargs): + if name == "pandas": + raise ImportError() + return import_orig(name, *args, **kwargs) + + monkeypatch.setattr(builtins, "__import__", mocked_import) diff --git a/sklearn/datasets/tests/conftest.py b/sklearn/datasets/tests/conftest.py deleted file mode 100644 index c8ab1cd04ee6e..0000000000000 --- a/sklearn/datasets/tests/conftest.py +++ /dev/null @@ -1,18 +0,0 @@ -""" Network tests are only run, if data is already locally available, -or if download is specifically requested by environment variable.""" -import builtins - -import pytest - - -@pytest.fixture -def hide_available_pandas(monkeypatch): - """Pretend pandas was not installed.""" - import_orig = builtins.__import__ - - def mocked_import(name, *args, **kwargs): - if name == "pandas": - raise ImportError() - return import_orig(name, *args, **kwargs) - - monkeypatch.setattr(builtins, "__import__", mocked_import) diff --git a/sklearn/tests/test_base.py b/sklearn/tests/test_base.py index 21e166428f21f..4cf50a2d1509b 100644 --- a/sklearn/tests/test_base.py +++ b/sklearn/tests/test_base.py @@ -23,6 +23,7 @@ from sklearn.utils._mocking import MockDataFrame from sklearn.utils._set_output import _get_output_config from sklearn.utils._testing import ( + _convert_container, assert_array_equal, assert_no_warnings, ignore_warnings, @@ -813,3 +814,43 @@ class Estimator(BaseEstimator, WithSlots): with pytest.raises(TypeError, match=msg): pickle.dumps(Estimator()) + + +@pytest.mark.parametrize( + "constructor_name, minversion", + [ + ("dataframe", "1.5.0"), + ("pyarrow", "12.0.0"), + ("polars", "0.18.2"), + ], +) +def test_dataframe_protocol(constructor_name, minversion): + """Uses the dataframe exchange protocol to get feature names.""" + data = [[1, 4, 2], [3, 3, 6]] + columns = ["col_0", "col_1", "col_2"] + df = _convert_container( + data, constructor_name, columns_name=columns, minversion=minversion + ) + + class NoOpTransformer(TransformerMixin, BaseEstimator): + def fit(self, X, y=None): + self._validate_data(X) + return self + + def transform(self, X): + return self._validate_data(X, reset=False) + + no_op = NoOpTransformer() + no_op.fit(df) + assert_array_equal(no_op.feature_names_in_, columns) + X_out = no_op.transform(df) + + if constructor_name != "pyarrow": + # pyarrow does not work with `np.asarray` + # https://github.com/apache/arrow/issues/34886 + assert_allclose(df, X_out) + + bad_names = ["a", "b", "c"] + df_bad = _convert_container(data, constructor_name, columns_name=bad_names) + with pytest.raises(ValueError, match="The feature names should match"): + no_op.transform(df_bad) diff --git a/sklearn/utils/_testing.py b/sklearn/utils/_testing.py index c37e7dac858e3..8b54df9f25b72 100644 --- a/sklearn/utils/_testing.py +++ b/sklearn/utils/_testing.py @@ -797,7 +797,9 @@ def assert_run_python_script(source_code, timeout=60): os.unlink(source_file) -def _convert_container(container, constructor_name, columns_name=None, dtype=None): +def _convert_container( + container, constructor_name, columns_name=None, dtype=None, minversion=None +): """Convert a given container to a specific array-like with a dtype. Parameters @@ -813,6 +815,8 @@ def _convert_container(container, constructor_name, columns_name=None, dtype=Non dtype : dtype, default=None Force the dtype of the container. Does not apply to `"slice"` container. + minversion : str, default=None + Minimum version for package to install. Returns ------- @@ -833,13 +837,23 @@ def _convert_container(container, constructor_name, columns_name=None, dtype=Non elif constructor_name == "sparse": return sp.sparse.csr_matrix(container, dtype=dtype) elif constructor_name == "dataframe": - pd = pytest.importorskip("pandas") + pd = pytest.importorskip("pandas", minversion=minversion) return pd.DataFrame(container, columns=columns_name, dtype=dtype, copy=False) + elif constructor_name == "pyarrow": + pa = pytest.importorskip("pyarrow", minversion=minversion) + array = np.asarray(container) + if columns_name is None: + columns_name = [f"col{i}" for i in range(array.shape[1])] + data = {name: array[:, i] for i, name in enumerate(columns_name)} + return pa.Table.from_pydict(data) + elif constructor_name == "polars": + pl = pytest.importorskip("polars", minversion=minversion) + return pl.DataFrame(container, schema=columns_name) elif constructor_name == "series": - pd = pytest.importorskip("pandas") + pd = pytest.importorskip("pandas", minversion=minversion) return pd.Series(container, dtype=dtype) elif constructor_name == "index": - pd = pytest.importorskip("pandas") + pd = pytest.importorskip("pandas", minversion=minversion) return pd.Index(container, dtype=dtype) elif constructor_name == "slice": return slice(container[0], container[1]) diff --git a/sklearn/utils/tests/test_validation.py b/sklearn/utils/tests/test_validation.py index 6e5848612fb97..b080028bbe8d0 100644 --- a/sklearn/utils/tests/test_validation.py +++ b/sklearn/utils/tests/test_validation.py @@ -62,6 +62,7 @@ _deprecate_positional_args, _get_feature_names, _is_fitted, + _is_pandas_df, _num_features, _num_samples, assert_all_finite, @@ -1697,6 +1698,54 @@ def test_get_feature_names_pandas(): assert_array_equal(feature_names, columns) +@pytest.mark.parametrize( + "constructor_name, minversion", + [("pyarrow", "12.0.0"), ("dataframe", "1.5.0"), ("polars", "0.18.2")], +) +def test_get_feature_names_dataframe_protocol(constructor_name, minversion): + """Uses the dataframe exchange protocol to get feature names.""" + data = [[1, 4, 2], [3, 3, 6]] + columns = ["col_0", "col_1", "col_2"] + df = _convert_container( + data, constructor_name, columns_name=columns, minversion=minversion + ) + feature_names = _get_feature_names(df) + + assert_array_equal(feature_names, columns) + + +@pytest.mark.parametrize( + "constructor_name, minversion", + [("pyarrow", "12.0.0"), ("dataframe", "1.5.0"), ("polars", "0.18.2")], +) +def test_is_pandas_df_other_libraries(constructor_name, minversion): + df = _convert_container( + [[1, 4, 2], [3, 3, 6]], + constructor_name, + minversion=minversion, + ) + if constructor_name in ("pyarrow", "polars"): + assert not _is_pandas_df(df) + else: + assert _is_pandas_df(df) + + +def test_is_pandas_df(): + """Check behavior of is_pandas_df when pandas is installed.""" + pd = pytest.importorskip("pandas") + df = pd.DataFrame([[1, 2, 3]]) + assert _is_pandas_df(df) + assert not _is_pandas_df(np.asarray([1, 2, 3])) + assert not _is_pandas_df(1) + + +def test_is_pandas_df_pandas_not_installed(hide_available_pandas): + """Check _is_pandas_df when pandas is not installed.""" + + assert not _is_pandas_df(np.asarray([1, 2, 3])) + assert not _is_pandas_df(1) + + def test_get_feature_names_numpy(): """Get feature names return None for numpy arrays.""" X = np.array([[1, 2, 3], [4, 5, 6]]) diff --git a/sklearn/utils/validation.py b/sklearn/utils/validation.py index 77c342dc31130..6bbc02b24b561 100644 --- a/sklearn/utils/validation.py +++ b/sklearn/utils/validation.py @@ -11,6 +11,7 @@ import numbers import operator +import sys import warnings from contextlib import suppress from functools import reduce, wraps @@ -1985,6 +1986,18 @@ def _check_fit_params(X, fit_params, indices=None): return fit_params_validated +def _is_pandas_df(X): + """Return True if the X is a pandas dataframe.""" + if hasattr(X, "columns") and hasattr(X, "iloc"): + # Likely a pandas DataFrame, we explicitly check the type to confirm. + try: + pd = sys.modules["pandas"] + except KeyError: + return False + return isinstance(X, pd.DataFrame) + return False + + def _get_feature_names(X): """Get feature names from X. @@ -2008,8 +2021,16 @@ def _get_feature_names(X): feature_names = None # extract feature names for support array containers - if hasattr(X, "columns"): + if _is_pandas_df(X): + # Make sure we can inspect columns names from pandas, even with + # versions too old to expose a working implementation of + # __dataframe__.column_names(). + # TODO: remove once the minimum supported version of pandas has + # a working implementation of __dataframe__.column_names(). feature_names = np.asarray(X.columns, dtype=object) + elif hasattr(X, "__dataframe__"): + df_protocol = X.__dataframe__() + feature_names = np.asarray(list(df_protocol.column_names()), dtype=object) if feature_names is None or len(feature_names) == 0: return