From 06c9921cee26f2dc471a1b80dc22504c0b4a3319 Mon Sep 17 00:00:00 2001 From: nttg8100 Date: Thu, 9 Apr 2026 23:04:23 +0700 Subject: [PATCH 1/8] feat(spark-slurm): support hail --- spark-on-slurm/.gitignore | 3 +- spark-on-slurm/Makefile | 7 +- spark-on-slurm/Readme.md | 5 +- .../examples/__pycache__/hail.cpython-311.pyc | Bin 0 -> 911 bytes spark-on-slurm/examples/pi_counter.py | 113 + .../examples/simulate_gwas_by_hail.py | 51 + .../validate_spark.py} | 0 spark-on-slurm/pixi.lock | 2222 ++++++++--------- spark-on-slurm/pixi.toml | 11 +- spark-on-slurm/sparkhpc/sparkhpc/sparkjob.py | 57 +- .../templates/sparkjob.slurm.template | 3 +- 11 files changed, 1258 insertions(+), 1214 deletions(-) create mode 100644 spark-on-slurm/examples/__pycache__/hail.cpython-311.pyc create mode 100644 spark-on-slurm/examples/pi_counter.py create mode 100644 spark-on-slurm/examples/simulate_gwas_by_hail.py rename spark-on-slurm/{sparkhpc/run_example.py => examples/validate_spark.py} (100%) diff --git a/spark-on-slurm/.gitignore b/spark-on-slurm/.gitignore index 30f1a83..04dd98e 100644 --- a/spark-on-slurm/.gitignore +++ b/spark-on-slurm/.gitignore @@ -2,4 +2,5 @@ sparkcluster* .spark* .cache spark_master.out -job \ No newline at end of file +job +*.log \ No newline at end of file diff --git a/spark-on-slurm/Makefile b/spark-on-slurm/Makefile index 917c8f1..1e1afcd 100644 --- a/spark-on-slurm/Makefile +++ b/spark-on-slurm/Makefile @@ -1,5 +1,5 @@ SLURM_IMAGE:= nttg8100/river-slurm:1.1.0 -.PHONY: setup example clean +.PHONY: setup example clean install ${HOME}/.pixi/bin/pixi: curl -sSL https://pixi.sh/install.sh | sh @@ -32,11 +32,14 @@ get-slurm: exit 1; \ fi +install: + ${HOME}/.pixi/bin/pixi run install-sparkhpc + # inside user river is the standard user with 1001 mapping id, Github Actions does not have this user test: ${HOME}/.pixi/bin/pixi start-slurm get-slurm docker exec \ -w /tmp/spark \ - slurm-dev /root/.pixi/bin/pixi run sparkhpc-example + slurm-dev /root/.pixi/bin/pixi run sparkhpc-hail test-slurm-local: ${HOME}/.pixi/bin/pixi run sparkhpc-example diff --git a/spark-on-slurm/Readme.md b/spark-on-slurm/Readme.md index c459c4d..82e23f3 100644 --- a/spark-on-slurm/Readme.md +++ b/spark-on-slurm/Readme.md @@ -23,7 +23,7 @@ When you run the example workflow: User entrypoints (`setup`, `example`, `clean`). - `pixi.toml` Environment definition and task `sparkhpc-example`. -- `sparkhpc/run_example.py` +- `example/*.py` End-to-end test runner: submit cluster, wait for master, run Spark actions, cleanup. - `sparkhpc/sparkhpc/sparkjob.py` Core Spark-on-Slurm orchestration logic. @@ -110,6 +110,7 @@ squeue -u $USER This README describes **Spark-on-Slurm only**. HDFS/Hadoop integration is intentionally deferred for a separate step. ## References + This toolkit is adapted from the original [sparkhpc project](https://github.com/rokroskar/sparkhpc), which provides a framework for running Spark on HPC environments. However, the original repository is no longer actively maintained and requires updates to function with modern Spark and SLURM configurations. -Therefore, this implementation integrates and modifies the original toolkit with several adjustments to ensure compatibility and reliable operation in current environments. \ No newline at end of file +Therefore, this implementation integrates and modifies the original toolkit with several adjustments to ensure compatibility and reliable operation in current environments. diff --git a/spark-on-slurm/examples/__pycache__/hail.cpython-311.pyc b/spark-on-slurm/examples/__pycache__/hail.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66c22a69cb2024ca383c7c81c6751f285275ebc9 GIT binary patch literal 911 zcmY*X&1(}u6rcS{(zGimM3CAVNG*mEx3pSP5Q_)VlibgpbYdK&x;jGp;3KPOR0}Rq(v9=*eIx0RbQh-Y zgOBVWGmb0Tke_HlRNF`=T&Oci9ZV$E)!YTJf7u`tb>$%2)u0DHvPza_gUJM4%{03) zmEdtrftmELW->X>QsBN`qvBLQCcWs#Uv$o4PbdF1jrw_jMO~V%-SS#(hJD9#g`9A0 zftxKxh0MD4JIo#I`a(_t3v=HYlInLp{C)Xr_IRzRNRx2K-4u4sTVJQN4l}_9Yeh{e zJ5t$}*_t;T;#1MT1xLkeQg2{~NwvXbu8J9P+`8>LwT8!p-Sh~BqoyxS?7E(heF~Eq z$l}-~cGdHkyvZDwVs3L<=Trz#ZF6r+@c8pPojGZQE@R^C=JqD$~r|5&g0Ng z2N{&goEW(yBNwosy32k%=*^eI`SPKW>lv$|vD#6ibiTvGbUs)L3(HaA?(V~r!pc!$ zrB^72g>qC{+=3.0.0 + - typing ; python_full_version < '3.7' +- pypi: https://files.pythonhosted.org/packages/0f/15/5bf3b99495fb160b63f95972b81750f18f7f4e02ad051373b669d17d44f2/aiohappyeyeballs-2.6.1-py3-none-any.whl + name: aiohappyeyeballs + version: 2.6.1 + sha256: f349ba8f4b75cb25c99c5c2d84e997e485204d2902a9597802b0371f09331fb8 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/7e/a5/0521aa32c1ddf3aa1e71dcc466be0b7db2771907a13f18cddaa45967d97b/aiohttp-3.13.5-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: aiohttp + version: 3.13.5 + sha256: 3a807cabd5115fb55af198b98178997a5e0e57dead43eb74a93d9c07d6d4a7dc + requires_dist: + - aiohappyeyeballs>=2.5.0 + - aiosignal>=1.4.0 + - async-timeout>=4.0,<6.0 ; python_full_version < '3.11' + - attrs>=17.3.0 + - frozenlist>=1.1.1 + - multidict>=4.5,<7.0 + - propcache>=0.2.0 + - yarl>=1.17.0,<2.0 + - aiodns>=3.3.0 ; extra == 'speedups' + - brotli>=1.2 ; platform_python_implementation == 'CPython' and extra == 'speedups' + - brotlicffi>=1.2 ; platform_python_implementation != 'CPython' and extra == 'speedups' + - backports-zstd ; python_full_version < '3.14' and platform_python_implementation == 'CPython' and extra == 'speedups' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/fb/76/641ae371508676492379f16e2fa48f4e2c11741bd63c48be4b12a6b09cba/aiosignal-1.4.0-py3-none-any.whl + name: aiosignal + version: 1.4.0 + sha256: 053243f8b92b990551949e63930a839ff0cf0b0ebbe0597b0f3fb19e1a0fe82e + requires_dist: + - frozenlist>=1.1.0 + - typing-extensions>=4.2 ; python_full_version < '3.13' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/alsa-lib-1.2.15.3-hb03c661_0.conda sha256: d88aa7ae766cf584e180996e92fef2aa7d8e0a0a5ab1d4d49c32390c1b5fff31 md5: dcdc58c15961dbf17a0621312b01f5cb @@ -174,269 +227,115 @@ packages: purls: [] size: 584660 timestamp: 1768327524772 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-auth-0.10.1-h2d2dd48_2.conda - sha256: 292aa18fe6ab5351710e6416fbd683eaef3aa5b1b7396da9350ff08efc660e4f - md5: 675ea6d90900350b1dcfa8231a5ea2dd - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 - - aws-c-cal >=0.9.13,<0.9.14.0a0 - - aws-c-http >=0.10.12,<0.10.13.0a0 - - aws-c-io >=0.26.3,<0.26.4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 134426 - timestamp: 1774274932726 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-cal-0.9.13-h2c9d079_1.conda - sha256: f21d648349a318f4ae457ea5403d542ba6c0e0343b8642038523dd612b2a5064 - md5: 3c3d02681058c3d206b562b2e3bc337f - depends: - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - libgcc >=14 - - openssl >=3.5.4,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 56230 - timestamp: 1764593147526 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-common-0.12.6-hb03c661_0.conda - sha256: 926a5b9de0a586e88669d81de717c8dd3218c51ce55658e8a16af7e7fe87c833 - md5: e36ad70a7e0b48f091ed6902f04c23b8 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 239605 - timestamp: 1763585595898 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-compression-0.3.2-h8b1a151_0.conda - sha256: 1838bdc077b77168416801f4715335b65e9223f83641a2c28644f8acd8f9db0e - md5: f16f498641c9e05b645fe65902df661a - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 22278 - timestamp: 1767790836624 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-event-stream-0.6.0-h9b893ba_1.conda - sha256: 4a1a060ab40cb4fa39d24418758ca9faa1f51df6918f05143118e79bb11b4350 - md5: cd4946050ecfcb3c6fd09106ae6a261e - depends: - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-io >=0.26.3,<0.26.4.0a0 - - aws-checksums >=0.2.10,<0.2.11.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 58989 - timestamp: 1774270004533 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-http-0.10.12-h4bacb7b_1.conda - sha256: c6f910d400ef9034493988e8cd37bd4712e42d85921122bcda4ba68d4614b131 - md5: 7bc920933e5fb225aba86a788164a8f1 - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-io >=0.26.3,<0.26.4.0a0 - - aws-c-cal >=0.9.13,<0.9.14.0a0 - - aws-c-compression >=0.3.2,<0.3.3.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 225868 - timestamp: 1774270031584 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-io-0.26.3-hc87160b_0.conda - sha256: c66ebb7815949db72bab7c86bf477197e4bc6937c381cf32248bdd1ce496db00 - md5: dde6a3e4fe6bb2ecd2a7050dd1e701fb - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - aws-c-cal >=0.9.13,<0.9.14.0a0 - - s2n >=1.7.1,<1.7.2.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 181624 - timestamp: 1773868304737 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-mqtt-0.15.2-he9ea9c5_1.conda - sha256: 3fc68793c0ca2c36524ae67abac696ce6b066a8be6b2b980cbdc40ae1310041a - md5: 8e77514673f5773b40ff8953583938b6 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - aws-c-io >=0.26.3,<0.26.4.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - aws-c-http >=0.10.12,<0.10.13.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 221711 - timestamp: 1774275485771 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-s3-0.11.5-h6d69fc9_5.conda - sha256: c15869656f5fbebe27cc5aa58b23831f75d85502d324fedd7ee7e552c79b495d - md5: 4c5c16bf1133dcfe100f33dd4470998e - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - aws-c-io >=0.26.3,<0.26.4.0a0 - - aws-checksums >=0.2.10,<0.2.11.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - aws-c-http >=0.10.12,<0.10.13.0a0 - - openssl >=3.5.5,<4.0a0 - - aws-c-auth >=0.10.1,<0.10.2.0a0 - - aws-c-cal >=0.9.13,<0.9.14.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 151340 - timestamp: 1774282148690 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-c-sdkutils-0.2.4-h8b1a151_4.conda - sha256: 9d62c5029f6f8219368a8665f0a549da572dc777f52413b7d75609cacdbc02cc - md5: c7e3e08b7b1b285524ab9d74162ce40b - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - aws-c-common >=0.12.6,<0.12.7.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 59383 - timestamp: 1764610113765 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-checksums-0.2.10-h8b1a151_0.conda - sha256: 09472dd5fa4473cffd44741ee4c1112f2c76d7168d1343de53c2ad283dc1efa6 - md5: f8e1bcc5c7d839c5882e94498791be08 - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 101435 - timestamp: 1771063496927 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-crt-cpp-0.37.4-h4c8aef7_3.conda - sha256: b82d0bc6d4b716347e1aefb0acc6e4bff04b3f807537ada9b458a7e467beb2a0 - md5: 798a499cf76e530a992365d557ba5827 - depends: - - libgcc >=14 - - libstdcxx >=14 - - __glibc >=2.17,<3.0.a0 - - aws-c-event-stream >=0.6.0,<0.6.1.0a0 - - aws-c-mqtt >=0.15.2,<0.15.3.0a0 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - aws-c-s3 >=0.11.5,<0.11.6.0a0 - - aws-c-http >=0.10.12,<0.10.13.0a0 - - aws-c-io >=0.26.3,<0.26.4.0a0 - - aws-c-auth >=0.10.1,<0.10.2.0a0 - - aws-c-sdkutils >=0.2.4,<0.2.5.0a0 - - aws-c-cal >=0.9.13,<0.9.14.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 410120 - timestamp: 1774286908570 -- conda: https://conda.anaconda.org/conda-forge/linux-64/aws-sdk-cpp-1.11.747-hc3785e1_3.conda - sha256: 62b7e565852fa061a26281b2890e432853fabefa8ea3dc22d00d39295a030805 - md5: cfffedbfd03d5a6bb74157c14b6f0cdf - depends: - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - libgcc >=14 - - aws-c-common >=0.12.6,<0.12.7.0a0 - - libzlib >=1.3.1,<2.0a0 - - aws-crt-cpp >=0.37.4,<0.37.5.0a0 - - aws-c-event-stream >=0.6.0,<0.6.1.0a0 - - libcurl >=8.19.0,<9.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 3624521 - timestamp: 1773666645246 -- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-core-cpp-1.16.2-h206d751_0.conda - sha256: 321d1070905e467b6bc6f5067b97c1868d7345c272add82b82e08a0224e326f0 - md5: 5492abf806c45298ae642831c670bba0 - depends: - - __glibc >=2.17,<3.0.a0 - - libcurl >=8.18.0,<9.0a0 - - libgcc >=14 - - libstdcxx >=14 - - openssl >=3.5.4,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 348729 - timestamp: 1768837519361 -- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-identity-cpp-1.13.3-hed0cdb0_1.conda - sha256: 2beb6ae8406f946b8963a67e72fe74453e1411c5ae7e992978340de6c512d13c - md5: 68bfb556bdf56d56e9f38da696e752ca - depends: - - __glibc >=2.17,<3.0.a0 - - azure-core-cpp >=1.16.2,<1.16.3.0a0 - - libgcc >=14 - - libstdcxx >=14 - - openssl >=3.5.5,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 250511 - timestamp: 1770344967948 -- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-blobs-cpp-12.16.0-hdd73cc9_1.conda - sha256: cef75b91bdd5a65c560b501df78905437cc2090a64b4c5ecd7da9e08e9e9af7c - md5: 939d9ce324e51961c7c4c0046733dbb7 - depends: - - __glibc >=2.17,<3.0.a0 - - azure-core-cpp >=1.16.2,<1.16.3.0a0 - - azure-storage-common-cpp >=12.12.0,<12.12.1.0a0 - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - purls: [] - size: 579825 - timestamp: 1770321459546 -- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-common-cpp-12.12.0-ha7a2c86_1.conda - sha256: ef7d1cae36910b21385d0816f8524a84dee1513e0306927e41a6bd32b5b9a0d0 - md5: 6400f73fe5ebe19fe7aca3616f1f1de7 - depends: - - __glibc >=2.17,<3.0.a0 - - azure-core-cpp >=1.16.2,<1.16.3.0a0 - - libgcc >=14 - - libstdcxx >=14 - - libxml2 - - libxml2-16 >=2.14.6 - - openssl >=3.5.5,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 150405 - timestamp: 1770240307002 -- conda: https://conda.anaconda.org/conda-forge/linux-64/azure-storage-files-datalake-cpp-12.14.0-h52c5a47_1.conda - sha256: 55aa8ad5217d358e0ccf4a715bd1f9bafef3cd1c2ea4021f0e916f174c20f8e3 - md5: 6d10339800840562b7dad7775f5d2c16 - depends: - - __glibc >=2.17,<3.0.a0 - - azure-core-cpp >=1.16.2,<1.16.3.0a0 - - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0 - - azure-storage-common-cpp >=12.12.0,<12.12.1.0a0 - - libgcc >=14 - - libstdcxx >=14 - license: MIT - license_family: MIT - purls: [] - size: 302524 - timestamp: 1770384269834 +- pypi: https://files.pythonhosted.org/packages/1e/d3/26bf1008eb3d2daa8ef4cacc7f3bfdc11818d111f7e2d0201bc6e3b49d45/annotated_doc-0.0.4-py3-none-any.whl + name: annotated-doc + version: 0.0.4 + sha256: 571ac1dc6991c450b25a9c2d84a3705e2ae7a53467b5d111c24fa8baabbed320 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/64/b4/17d4b0b2a2dc85a6df63d1157e028ed19f90d4cd97c36717afef2bc2f395/attrs-26.1.0-py3-none-any.whl + name: attrs + version: 26.1.0 + sha256: c647aa4a12dfbad9333ca4e71fe62ddc36f4e63b2d260a37a8b83d2f043ac309 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/50/74/1178ebc9d305a1d2c11fc99cb13a51be8980f35a5dd133e970ab42ce16bf/avro-1.11.5-py2.py3-none-any.whl + name: avro + version: 1.11.5 + sha256: 2ef83e3b2abc79592b77223101aa53d0dad1ba4e549a9c3aff9ff228d49bdc7a + requires_dist: + - typing-extensions ; python_full_version < '3.8' + - python-snappy ; extra == 'snappy' + - zstandard ; extra == 'zstandard' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/62/55/7f118b9c1b23ec15ca05d15a578d8207aa1706bc6f7c87218efffbbf875d/azure_common-1.1.28-py2.py3-none-any.whl + name: azure-common + version: 1.1.28 + sha256: 5c12d3dcf4ec20599ca6b0d3e09e86e146353d443e7fcc050c9a19c1f9df20ad + requires_dist: + - azure-nspkg ; python_full_version < '3' +- pypi: https://files.pythonhosted.org/packages/7e/d6/8ebcd05b01a580f086ac9a97fb9fac65c09a4b012161cc97c21a336e880b/azure_core-1.39.0-py3-none-any.whl + name: azure-core + version: 1.39.0 + sha256: 4ac7b70fab5438c3f68770649a78daf97833caa83827f91df9c14e0e0ea7d34f + requires_dist: + - requests>=2.21.0 + - typing-extensions>=4.6.0 + - aiohttp>=3.0 ; extra == 'aio' + - opentelemetry-api~=1.26 ; extra == 'tracing' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/49/9a/417b3a533e01953a7c618884df2cb05a71e7b68bdbce4fbdb62349d2a2e8/azure_identity-1.25.3-py3-none-any.whl + name: azure-identity + version: 1.25.3 + sha256: f4d0b956a8146f30333e071374171f3cfa7bdb8073adb8c3814b65567aa7447c + requires_dist: + - azure-core>=1.31.0 + - cryptography>=2.5 + - msal>=1.35.1 + - msal-extensions>=1.2.0 + - typing-extensions>=4.0.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a0/26/c79f962fd3172b577b6f38685724de58b6b4337a51d3aad316a43a4558c6/azure_mgmt_core-1.6.0-py3-none-any.whl + name: azure-mgmt-core + version: 1.6.0 + sha256: 0460d11e85c408b71c727ee1981f74432bc641bb25dfcf1bb4e90a49e776dbc4 + requires_dist: + - azure-core>=1.32.0 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/8c/24/33da34950a637df9bca4bac4b99be81e060613edf22a54589d17e2b7b51a/azure_mgmt_storage-20.1.0-py3-none-any.whl + name: azure-mgmt-storage + version: 20.1.0 + sha256: afdc830329c674d96a91c963fa03ac81a4e387dfbf9f5a4e823950dc1fe95659 + requires_dist: + - msrest>=0.6.21 + - azure-common~=1.1 + - azure-mgmt-core>=1.3.1,<2.0.0 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/d8/3a/6ef2047a072e54e1142718d433d50e9514c999a58f51abfff7902f3a72f8/azure_storage_blob-12.28.0-py3-none-any.whl + name: azure-storage-blob + version: 12.28.0 + sha256: 00fb1db28bf6a7b7ecaa48e3b1d5c83bfadacc5a678b77826081304bd87d6461 + requires_dist: + - azure-core>=1.30.0 + - cryptography>=2.1.4 + - typing-extensions>=4.6.0 + - isodate>=0.6.1 + - azure-core[aio]>=1.30.0 ; extra == 'aio' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/65/5d/e96520996607c9b894a4716ddedc447a68351b0a8729f26ac012c8e7041b/bokeh-3.4.3-py3-none-any.whl + name: bokeh + version: 3.4.3 + sha256: c6f33817f866fc67fbeb5df79cd13a8bb592c05c591f3fd7f4f22b824f7afa01 + requires_dist: + - jinja2>=2.9 + - contourpy>=1.2 + - numpy>=1.16 + - packaging>=16.8 + - pandas>=1.2 + - pillow>=7.1.0 + - pyyaml>=3.10 + - tornado>=6.2 + - xyzservices>=2021.9.1 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/78/ab/3167b8ec3cf1d87ad08d2ad5f15823a22945cae7870798274c283c3a18f1/boto3-1.42.85-py3-none-any.whl + name: boto3 + version: 1.42.85 + sha256: 4f6ac066e41d18ec33f532253fac0f35e0fdca373724458f983ce3d531340b7a + requires_dist: + - botocore>=1.42.85,<1.43.0 + - jmespath>=0.7.1,<2.0.0 + - s3transfer>=0.16.0,<0.17.0 + - botocore[crt]>=1.21.0,<2.0a0 ; extra == 'crt' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/16/f3/c1fbaff4c509c616fd01f44357283a8992f10b3a05d932b22e602aa3a221/botocore-1.42.85-py3-none-any.whl + name: botocore + version: 1.42.85 + sha256: 828b67722caeb7e240eefedee74050e803d1fa102958ead9c4009101eefd5381 + requires_dist: + - jmespath>=0.7.1,<2.0.0 + - python-dateutil>=2.1,<3.0.0 + - urllib3>=1.25.4,<1.27 ; python_full_version < '3.10' + - urllib3>=1.25.4,!=2.2.0,<3 ; python_full_version >= '3.10' + - awscrt==0.31.2 ; extra == 'crt' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/bzip2-1.0.8-hda65f42_9.conda sha256: 0b75d45f0bba3e95dc693336fa51f40ea28c980131fec438afb7ce6118ed05f6 md5: d2ffd7602c02f2b316fd921d39876885 @@ -448,17 +347,6 @@ packages: purls: [] size: 260182 timestamp: 1771350215188 -- conda: https://conda.anaconda.org/conda-forge/linux-64/c-ares-1.34.6-hb03c661_0.conda - sha256: cc9accf72fa028d31c2a038460787751127317dcfa991f8d1f1babf216bb454e - md5: 920bb03579f15389b9e512095ad995b7 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 207882 - timestamp: 1765214722852 - conda: https://conda.anaconda.org/conda-forge/noarch/ca-certificates-2026.2.25-hbd8a1cb_0.conda sha256: 67cc7101b36421c5913a1687ef1b99f85b5d6868da3abbf6ec1a4181e79782fc md5: 4492fd26db29495f0ba23f146cd5638d @@ -495,6 +383,118 @@ packages: purls: [] size: 989514 timestamp: 1766415934926 +- pypi: https://files.pythonhosted.org/packages/9a/3c/c17fb3ca2d9c3acff52e30b309f538586f9f5b9c9cf454f3845fc9af4881/certifi-2026.2.25-py3-none-any.whl + name: certifi + version: 2026.2.25 + sha256: 027692e4402ad994f1c42e52a4997a9763c646b73e4096e4d5d6db8af1d6f0fa + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/d7/91/500d892b2bf36529a75b77958edfcd5ad8e2ce4064ce2ecfeab2125d72d1/cffi-2.0.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.whl + name: cffi + version: 2.0.0 + sha256: 8941aaadaf67246224cee8c3803777eed332a19d909b47e29c9842ef1e79ac26 + requires_dist: + - pycparser ; implementation_name != 'PyPy' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a1/fa/f74eb381a7d94ded44739e9d94de18dc5edc9c17fb8c11f0a6890696c0a9/charset_normalizer-3.4.7-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: charset-normalizer + version: 3.4.7 + sha256: 2fe249cb4651fd12605b7288b24751d8bfd46d35f12a20b1ba33dea122e690df + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/e4/20/71885d8b97d4f3dde17b1fdb92dbd4908b00541c5a3379787137285f602e/click-8.3.2-py3-none-any.whl + name: click + version: 8.3.2 + sha256: 1924d2c27c5653561cd2cae4548d1406039cb79b858b747cfea24924bbc1616d + requires_dist: + - colorama ; sys_platform == 'win32' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b1/92/dfd892312d822f36c55366118b95d914e5f16de11044a27cf10a7d71bbbf/commonmark-0.9.1-py2.py3-none-any.whl + name: commonmark + version: 0.9.1 + sha256: da2f38c92590f83de410ba1a3cbceafbc74fee9def35f9251ba9a971d6d66fd9 + requires_dist: + - future>=0.14.0 ; python_full_version < '3' + - flake8==3.7.8 ; extra == 'test' + - hypothesis==3.55.3 ; extra == 'test' +- pypi: https://files.pythonhosted.org/packages/5f/4b/6157f24ca425b89fe2eb7e7be642375711ab671135be21e6faa100f7448c/contourpy-1.3.3-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: contourpy + version: 1.3.3 + sha256: 51e79c1f7470158e838808d4a996fa9bac72c498e93d8ebe5119bc1e6becb0db + requires_dist: + - numpy>=1.25 + - furo ; extra == 'docs' + - sphinx>=7.2 ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - bokeh ; extra == 'bokeh' + - selenium ; extra == 'bokeh' + - contourpy[bokeh,docs] ; extra == 'mypy' + - bokeh ; extra == 'mypy' + - docutils-stubs ; extra == 'mypy' + - mypy==1.17.0 ; extra == 'mypy' + - types-pillow ; extra == 'mypy' + - contourpy[test-no-images] ; extra == 'test' + - matplotlib ; extra == 'test' + - pillow ; extra == 'test' + - pytest ; extra == 'test-no-images' + - pytest-cov ; extra == 'test-no-images' + - pytest-rerunfailures ; extra == 'test-no-images' + - pytest-xdist ; extra == 'test-no-images' + - wurlitzer ; extra == 'test-no-images' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/34/71/1ea5a7352ae516d5512d17babe7e1b87d9db5150b21f794b1377eac1edc0/cryptography-46.0.6-cp311-abi3-manylinux_2_28_x86_64.whl + name: cryptography + version: 46.0.6 + sha256: 22259338084d6ae497a19bae5d4c66b7ca1387d3264d1c2c0e72d9e9b6a77b97 + requires_dist: + - cffi>=1.14 ; python_full_version == '3.8.*' and platform_python_implementation != 'PyPy' + - cffi>=2.0.0 ; python_full_version >= '3.9' and platform_python_implementation != 'PyPy' + - typing-extensions>=4.13.2 ; python_full_version < '3.11' + - bcrypt>=3.1.5 ; extra == 'ssh' + - nox[uv]>=2024.4.15 ; extra == 'nox' + - cryptography-vectors==46.0.6 ; extra == 'test' + - pytest>=7.4.0 ; extra == 'test' + - pytest-benchmark>=4.0 ; extra == 'test' + - pytest-cov>=2.10.1 ; extra == 'test' + - pytest-xdist>=3.5.0 ; extra == 'test' + - pretend>=0.7 ; extra == 'test' + - certifi>=2024 ; extra == 'test' + - pytest-randomly ; extra == 'test-randomorder' + - sphinx>=5.3.0 ; extra == 'docs' + - sphinx-rtd-theme>=3.0.0 ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - pyenchant>=3 ; extra == 'docstest' + - readme-renderer>=30.0 ; extra == 'docstest' + - sphinxcontrib-spelling>=7.3.1 ; extra == 'docstest' + - build>=1.0.0 ; extra == 'sdist' + - ruff>=0.11.11 ; extra == 'pep8test' + - mypy>=1.14 ; extra == 'pep8test' + - check-sdist ; extra == 'pep8test' + - click>=8.0.1 ; extra == 'pep8test' + requires_python: '>=3.8,!=3.9.0,!=3.9.1' +- pypi: https://files.pythonhosted.org/packages/ed/1b/72a1821152d07cf1d8b6fce298aeb06a7eb90f4d6d41acec9861e7cc6df0/decorator-4.4.2-py2.py3-none-any.whl + name: decorator + version: 4.4.2 + sha256: 41fa54c2a0cc4ba648be4fd43cff00aedf5b9465c9bf18d64325bc225f08f760 + requires_python: '>=2.6,!=3.0.*,!=3.1.*' +- pypi: https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl + name: deprecated + version: 1.2.18 + sha256: bd5011788200372a32418f888e326a09ff80d0214bd961147cfed01b5c018eec + requires_dist: + - wrapt>=1.10,<2 + - tox ; extra == 'dev' + - pytest ; extra == 'dev' + - pytest-cov ; extra == 'dev' + - bump2version<1 ; extra == 'dev' + - setuptools ; python_full_version >= '3.12' and extra == 'dev' + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*' +- pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl + name: dill + version: 0.4.1 + sha256: 1e1ce33e978ae97fcfcff5638477032b801c46c7c65cf717f95fbc2248f79a9d + requires_dist: + - objgraph>=1.7.2 ; extra == 'graph' + - gprof2dot>=2022.7.29 ; extra == 'profile' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b md5: 0c96522c6bdaed4b1566d11387caaf45 @@ -566,18 +566,11 @@ packages: purls: [] size: 4059 timestamp: 1762351264405 -- conda: https://conda.anaconda.org/conda-forge/linux-64/gflags-2.2.2-h5888daf_1005.conda - sha256: 6c33bf0c4d8f418546ba9c250db4e4221040936aef8956353bc764d4877bc39a - md5: d411fc29e338efb48c5fd4576d71d881 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 119654 - timestamp: 1726600001928 +- pypi: https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: frozenlist + version: 1.8.0 + sha256: 2552f44204b744fba866e573be4c1f9048d6a324dfe14475103fd51613eb1d1f + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/giflib-5.2.2-hd590300_0.conda sha256: aac402a8298f0c0cc528664249170372ef6b37ac39fdc92b40601a6aed1e32ff md5: 3bf7b9fd5a7136126e0234db4b87c8b6 @@ -588,18 +581,52 @@ packages: purls: [] size: 77248 timestamp: 1712692454246 -- conda: https://conda.anaconda.org/conda-forge/linux-64/glog-0.7.1-hbabe93e_0.conda - sha256: dc824dc1d0aa358e28da2ecbbb9f03d932d976c8dca11214aa1dcdfcbd054ba2 - md5: ff862eebdfeb2fd048ae9dc92510baca - depends: - - gflags >=2.2.2,<2.3.0a0 - - libgcc-ng >=12 - - libstdcxx-ng >=12 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 143452 - timestamp: 1718284177264 +- pypi: https://files.pythonhosted.org/packages/e9/eb/c6c2478d8a8d633460be40e2a8a6f8f429171997a35a96f81d3b680dec83/google_auth-2.49.1-py3-none-any.whl + name: google-auth + version: 2.49.1 + sha256: 195ebe3dca18eddd1b3db5edc5189b76c13e96f29e73043b923ebcf3f1a860f7 + requires_dist: + - pyasn1-modules>=0.2.1 + - cryptography>=38.0.3 + - cryptography>=38.0.3 ; extra == 'cryptography' + - aiohttp>=3.6.2,<4.0.0 ; extra == 'aiohttp' + - requests>=2.20.0,<3.0.0 ; extra == 'aiohttp' + - pyopenssl ; extra == 'enterprise-cert' + - pyopenssl>=20.0.0 ; extra == 'pyopenssl' + - pyjwt>=2.0 ; extra == 'pyjwt' + - pyu2f>=0.1.5 ; extra == 'reauth' + - requests>=2.20.0,<3.0.0 ; extra == 'requests' + - grpcio ; extra == 'testing' + - flask ; extra == 'testing' + - freezegun ; extra == 'testing' + - pyjwt>=2.0 ; extra == 'testing' + - pytest ; extra == 'testing' + - pytest-cov ; extra == 'testing' + - pytest-localserver ; extra == 'testing' + - pyopenssl>=20.0.0 ; extra == 'testing' + - pyu2f>=0.1.5 ; extra == 'testing' + - responses ; extra == 'testing' + - urllib3 ; extra == 'testing' + - packaging ; extra == 'testing' + - aiohttp>=3.6.2,<4.0.0 ; extra == 'testing' + - requests>=2.20.0,<3.0.0 ; extra == 'testing' + - aioresponses ; extra == 'testing' + - pytest-asyncio ; extra == 'testing' + - pyopenssl<24.3.0 ; extra == 'testing' + - aiohttp<3.10.0 ; extra == 'testing' + - urllib3 ; extra == 'urllib3' + - packaging ; extra == 'urllib3' + - rsa>=3.1.4,<5 ; extra == 'rsa' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/98/0e/bfc3d7de5d1788871d1be3e6862fe3e56d92b446909b7b032c373fc4ecab/google_auth_oauthlib-0.8.0-py2.py3-none-any.whl + name: google-auth-oauthlib + version: 0.8.0 + sha256: 40cc612a13c3336d5433e94e2adb42a0c88f6feb6c55769e44500fc70043a576 + requires_dist: + - google-auth>=2.15.0 + - requests-oauthlib>=0.7.0 + - click>=6.0.0 ; extra == 'tool' + requires_python: '>=3.6' - conda: https://conda.anaconda.org/conda-forge/linux-64/graphite2-1.3.14-hecca717_2.conda sha256: 25ba37da5c39697a77fce2c9a15e48cf0a84f1464ad2aafbe53d8357a9f6cc8c md5: 2cd94587f3a401ae05e03a6caf09539d @@ -612,17 +639,57 @@ packages: purls: [] size: 99596 timestamp: 1755102025473 -- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-13.2.1-h6083320_0.conda - sha256: 477f2c553f72165020d3c56740ba354be916c2f0b76fd9f535e83d698277d5ec - md5: 14470902326beee192e33719a2e8bb7f +- pypi: https://files.pythonhosted.org/packages/53/8a/5b1a62458e862c86a66bafaa63f5e27268bbf47a726b9161be16c25605c0/hail-0.2.137-py3-none-any.whl + name: hail + version: 0.2.137 + sha256: b93b8bc2ef9280258d5e4782fea61f7a1c7eea8977fb88a20ad534b5d5611868 + requires_dist: + - aiodns>=2.0.0,<3 + - aiohttp>=3.11.16,<4 + - azure-identity>=1.23.0,<2 + - azure-mgmt-storage==20.1.0 + - azure-storage-blob>=12.11.0,<13 + - boto3>=1.17,<2.0 + - botocore>=1.20,<2.0 + - dill>=0.4.0,<0.5 + - frozenlist>=1.3.1,<2 + - google-auth>=2.14.1,<3 + - google-auth-oauthlib>=0.5.2,<1 + - humanize>=4.0,<5 + - janus>=0.6,<1.1 + - nest-asyncio>=1.5.8,<2 + - orjson>=3.9.15,<4 + - rich>=12.6.0,<13 + - typer>=0.9.0,<1 + - python-json-logger>=2.0.2,<3 + - pyyaml>=6.0,<7.0 + - sortedcontainers>=2.4.0,<3 + - tabulate>=0.8.9,<1 + - uvloop>=0.19.0,<0.22.0 ; sys_platform != 'win32' + - jproperties>=2.1.1,<3 + - avro>=1.10,<1.12 + - bokeh>=3,<3.5 + - decorator<5 + - deprecated>=1.2.10,<1.3 + - numpy>=2,<3 + - pandas>=2,<3 + - parsimonious<1 + - plotly>=5.18.0,<6 + - pyspark>=3.5.0,<3.6 + - requests>=2.32.4,<3 + - scipy>1.13,<2 + requires_python: '>=3.10' +- conda: https://conda.anaconda.org/conda-forge/linux-64/harfbuzz-14.1.0-h6083320_0.conda + sha256: 22c4f6df7eb4684a4b60e62de84211e7d80a0df2d7cfdbbd093a73650e3f2d45 + md5: ca8a94b613db5d805c3d2498a7c30997 depends: - __glibc >=2.17,<3.0.a0 - cairo >=1.18.4,<2.0a0 - graphite2 >=1.3.14,<2.0a0 - icu >=78.3,<79.0a0 - - libexpat >=2.7.4,<3.0a0 - - libfreetype >=2.14.2 - - libfreetype6 >=2.14.2 + - libexpat >=2.7.5,<3.0a0 + - libfreetype >=2.14.3 + - libfreetype6 >=2.14.3 - libgcc >=14 - libglib >=2.86.4,<3.0a0 - libstdcxx >=14 @@ -630,8 +697,17 @@ packages: license: MIT license_family: MIT purls: [] - size: 2384060 - timestamp: 1774276284520 + size: 2338203 + timestamp: 1775569314754 +- pypi: https://files.pythonhosted.org/packages/c5/7b/bca5613a0c3b542420cf92bd5e5fb8ebd5435ce1011a091f66bb7693285e/humanize-4.15.0-py3-none-any.whl + name: humanize + version: 4.15.0 + sha256: b1186eb9f5a9749cd9cb8565aee77919dd7c8d076161cf44d70e59e3301e1769 + requires_dist: + - freezegun ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/linux-64/icu-78.3-h33c6efd_0.conda sha256: fbf86c4a59c2ed05bbffb2ba25c7ed94f6185ec30ecb691615d42342baa1a16a md5: c80d8a3b84358cb967fa81e7075fbc8a @@ -644,6 +720,48 @@ packages: purls: [] size: 12723451 timestamp: 1773822285671 +- pypi: https://files.pythonhosted.org/packages/0e/61/66938bbb5fc52dbdf84594873d5b51fb1f7c7794e9c0f5bd885f30bc507b/idna-3.11-py3-none-any.whl + name: idna + version: '3.11' + sha256: 771a87f49d9defaf64091e6e6fe9c18d4833f140bd19464795bc32d966ca37ea + requires_dist: + - ruff>=0.6.2 ; extra == 'all' + - mypy>=1.11.2 ; extra == 'all' + - pytest>=8.3.2 ; extra == 'all' + - flake8>=7.1.1 ; extra == 'all' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/15/aa/0aca39a37d3c7eb941ba736ede56d689e7be91cab5d9ca846bde3999eba6/isodate-0.7.2-py3-none-any.whl + name: isodate + version: 0.7.2 + sha256: 28009937d8031054830160fce6d409ed342816b543597cece116d966c6d99e15 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/c1/84/7bfe436fa6a4943eecb17c2cca9c84215299684575376d664ea6bf294439/janus-1.0.0-py3-none-any.whl + name: janus + version: 1.0.0 + sha256: 2596ea5482711c1ee3ef2df6c290aaf370a13c55a007826e8f7c32d696d1d00a + requires_dist: + - typing-extensions>=3.7.4.3 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/62/a1/3d680cbfd5f4b8f15abc1d571870c5fc3e594bb582bc3b64ea099db13e56/jinja2-3.1.6-py3-none-any.whl + name: jinja2 + version: 3.1.6 + sha256: 85ece4451f492d0c13c5dd7c13a64681a86afae63a5f347908daf103ce6d2f67 + requires_dist: + - markupsafe>=2.0 + - babel>=2.7 ; extra == 'i18n' + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/14/2f/967ba146e6d58cf6a652da73885f52fc68001525b4197effc174321d70b4/jmespath-1.1.0-py3-none-any.whl + name: jmespath + version: 1.1.0 + sha256: a5663118de4908c91729bea0acadca56526eb2698e83de10cd116ae0f4e97c64 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/75/6f/55bc5837e9fe7a86a5acb553adec901257d709062bfaef7debd4d8cfee12/jproperties-2.1.2-py2.py3-none-any.whl + name: jproperties + version: 2.1.2 + sha256: 4108e868353a9f4a12bb86a92df5462d0e18d00119169533972ce473029be79a + requires_dist: + - six~=1.13 + requires_python: '>=2.7' - conda: https://conda.anaconda.org/conda-forge/linux-64/keyutils-1.6.3-hb9d3cd8_0.conda sha256: 0960d06048a7185d3542d850986d807c6e37ca2e644342dd0c72feefcf26c2a4 md5: b38117a3c920364aff79f870c984b4a3 @@ -708,206 +826,6 @@ packages: purls: [] size: 261513 timestamp: 1773113328888 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libabseil-20260107.1-cxx17_h7b12aa8_0.conda - sha256: a7a4481a4d217a3eadea0ec489826a69070fcc3153f00443aa491ed21527d239 - md5: 6f7b4302263347698fd24565fbf11310 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libstdcxx >=14 - constrains: - - libabseil-static =20260107.1=cxx17* - - abseil-cpp =20260107.1 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 1384817 - timestamp: 1770863194876 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-23.0.1-ha7f89c6_9_cpu.conda - build_number: 9 - sha256: 227150d746680ddb0c1e8c346647d62f3e6b6fc43c22f87a330c616c9ef68d9d - md5: b94c6431eadc98b61f4b9c62a338b3c6 - depends: - - __glibc >=2.17,<3.0.a0 - - aws-crt-cpp >=0.37.4,<0.37.5.0a0 - - aws-sdk-cpp >=1.11.747,<1.11.748.0a0 - - azure-core-cpp >=1.16.2,<1.16.3.0a0 - - azure-identity-cpp >=1.13.3,<1.13.4.0a0 - - azure-storage-blobs-cpp >=12.16.0,<12.16.1.0a0 - - azure-storage-files-datalake-cpp >=12.14.0,<12.14.1.0a0 - - bzip2 >=1.0.8,<2.0a0 - - glog >=0.7.1,<0.8.0a0 - - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 - - libbrotlidec >=1.2.0,<1.3.0a0 - - libbrotlienc >=1.2.0,<1.3.0a0 - - libgcc >=14 - - libgoogle-cloud >=3.3.0,<3.4.0a0 - - libgoogle-cloud-storage >=3.3.0,<3.4.0a0 - - libopentelemetry-cpp >=1.26.0,<1.27.0a0 - - libprotobuf >=6.33.5,<6.33.6.0a0 - - libstdcxx >=14 - - libzlib >=1.3.2,<2.0a0 - - lz4-c >=1.10.0,<1.11.0a0 - - orc >=2.3.0,<2.3.1.0a0 - - snappy >=1.2.2,<1.3.0a0 - - zstd >=1.5.7,<1.6.0a0 - constrains: - - arrow-cpp <0.0a0 - - parquet-cpp <0.0a0 - - apache-arrow-proc =*=cpu - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 6492912 - timestamp: 1774232411616 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-acero-23.0.1-h635bf11_9_cpu.conda - build_number: 9 - sha256: 42fb618f2402d14e96987d82f36453793ee7bae07c8dfa7fee54491bf1d163d9 - md5: 84cdfd12ec9a363b400f7d3850838ea3 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 23.0.1 ha7f89c6_9_cpu - - libarrow-compute 23.0.1 h53684a4_9_cpu - - libgcc >=14 - - libstdcxx >=14 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 609325 - timestamp: 1774232640179 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-compute-23.0.1-h53684a4_9_cpu.conda - build_number: 9 - sha256: 6ce44b5992a855e2412d904181729272b4732e8ebd8283a20b5b0b93f91f48f3 - md5: b3ba3597c481a636fc161185819cf6b1 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 23.0.1 ha7f89c6_9_cpu - - libgcc >=14 - - libre2-11 >=2025.11.5 - - libstdcxx >=14 - - libutf8proc >=2.11.3,<2.12.0a0 - - re2 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 3003173 - timestamp: 1774232490011 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-dataset-23.0.1-h635bf11_9_cpu.conda - build_number: 9 - sha256: cc3fb77d53f7e2db2cd35ffc1371d677d9e13682b7964e196cab533b319a85ea - md5: 9c5282b7aaf2261d3dbe5a61d24d5337 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 23.0.1 ha7f89c6_9_cpu - - libarrow-acero 23.0.1 h635bf11_9_cpu - - libarrow-compute 23.0.1 h53684a4_9_cpu - - libgcc >=14 - - libparquet 23.0.1 h7376487_9_cpu - - libstdcxx >=14 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 607738 - timestamp: 1774232745741 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libarrow-substrait-23.0.1-hb4dd7c2_9_cpu.conda - build_number: 9 - sha256: 037f4befc2df64d9c7903eb7508c1495772f17b7a318b5a888aaddb6307b48a0 - md5: d5338f154126253750e8ccc539386b92 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 - - libarrow 23.0.1 ha7f89c6_9_cpu - - libarrow-acero 23.0.1 h635bf11_9_cpu - - libarrow-dataset 23.0.1 h635bf11_9_cpu - - libgcc >=14 - - libprotobuf >=6.33.5,<6.33.6.0a0 - - libstdcxx >=14 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 518730 - timestamp: 1774232781245 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libblas-3.11.0-6_h4a7cf45_openblas.conda - build_number: 6 - sha256: 7bfe936dbb5db04820cf300a9cc1f5ee8d5302fc896c2d66e30f1ee2f20fbfd6 - md5: 6d6d225559bfa6e2f3c90ee9c03d4e2e - depends: - - libopenblas >=0.3.32,<0.3.33.0a0 - - libopenblas >=0.3.32,<1.0a0 - constrains: - - blas 2.306 openblas - - liblapack 3.11.0 6*_openblas - - liblapacke 3.11.0 6*_openblas - - libcblas 3.11.0 6*_openblas - - mkl <2026 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 18621 - timestamp: 1774503034895 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlicommon-1.2.0-hb03c661_1.conda - sha256: 318f36bd49ca8ad85e6478bd8506c88d82454cc008c1ac1c6bf00a3c42fa610e - md5: 72c8fd1af66bd67bf580645b426513ed - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 79965 - timestamp: 1764017188531 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlidec-1.2.0-hb03c661_1.conda - sha256: 12fff21d38f98bc446d82baa890e01fd82e3b750378fedc720ff93522ffb752b - md5: 366b40a69f0ad6072561c1d09301c886 - depends: - - __glibc >=2.17,<3.0.a0 - - libbrotlicommon 1.2.0 hb03c661_1 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 34632 - timestamp: 1764017199083 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libbrotlienc-1.2.0-hb03c661_1.conda - sha256: a0c15c79997820bbd3fbc8ecf146f4fe0eca36cc60b62b63ac6cf78857f1dd0d - md5: 4ffbb341c8b616aa2494b6afb26a0c5f - depends: - - __glibc >=2.17,<3.0.a0 - - libbrotlicommon 1.2.0 hb03c661_1 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 298378 - timestamp: 1764017210931 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcblas-3.11.0-6_h0358290_openblas.conda - build_number: 6 - sha256: 57edafa7796f6fa3ebbd5367692dd4c7f552be42109c2dd1a7c89b55089bf374 - md5: 36ae340a916635b97ac8a0655ace2a35 - depends: - - libblas 3.11.0 6_h4a7cf45_openblas - constrains: - - blas 2.306 openblas - - liblapack 3.11.0 6*_openblas - - liblapacke 3.11.0 6*_openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 18622 - timestamp: 1774503050205 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcrc32c-1.1.2-h9c3ff4c_0.tar.bz2 - sha256: fd1d153962764433fe6233f34a72cdeed5dcf8a883a85769e8295ce940b5b0c5 - md5: c965a5aa0d5c1c37ffc62dff36e28400 - depends: - - libgcc-ng >=9.4.0 - - libstdcxx-ng >=9.4.0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 20440 - timestamp: 1633683576494 - conda: https://conda.anaconda.org/conda-forge/linux-64/libcups-2.3.3-h7a8fb5f_6.conda sha256: 205c4f19550f3647832ec44e35e6d93c8c206782bdd620c1d7cf66237580ff9c md5: 49c553b47ff679a6a1e9fc80b9c5a2d4 @@ -922,23 +840,6 @@ packages: purls: [] size: 4518030 timestamp: 1770902209173 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libcurl-8.19.0-hcf29cc6_0.conda - sha256: a0390fd0536ebcd2244e243f5f00ab8e76ab62ed9aa214cd54470fe7496620f4 - md5: d50608c443a30c341c24277d28290f76 - depends: - - __glibc >=2.17,<3.0.a0 - - krb5 >=1.22.2,<1.23.0a0 - - libgcc >=14 - - libnghttp2 >=1.67.0,<2.0a0 - - libssh2 >=1.11.1,<2.0a0 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 - - zstd >=1.5.7,<1.6.0a0 - license: curl - license_family: MIT - purls: [] - size: 466704 - timestamp: 1773218522665 - conda: https://conda.anaconda.org/conda-forge/linux-64/libdeflate-1.25-h17f619e_0.conda sha256: aa8e8c4be9a2e81610ddf574e05b64ee131fab5e0e3693210c9d6d2fba32c680 md5: 6c77a605a7a689d17d4819c0f8ac9a00 @@ -963,27 +864,6 @@ packages: purls: [] size: 134676 timestamp: 1738479519902 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libev-4.33-hd590300_2.conda - sha256: 1cd6048169fa0395af74ed5d8f1716e22c19a81a8a36f934c110ca3ad4dd27b4 - md5: 172bf1cd1ff8629f2b1179945ed45055 - depends: - - libgcc-ng >=12 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 112766 - timestamp: 1702146165126 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libevent-2.1.12-hf998b51_1.conda - sha256: 2e14399d81fb348e9d231a82ca4d816bf855206923759b69ad006ba482764131 - md5: a1cfcc585f0c42bf8d5546bb1dfb668d - depends: - - libgcc-ng >=12 - - openssl >=3.1.1,<4.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 427426 - timestamp: 1685725977222 - conda: https://conda.anaconda.org/conda-forge/linux-64/libexpat-2.7.5-hecca717_0.conda sha256: e8c2b57f6aacabdf2f1b0924bd4831ce5071ba080baa4a9e8c0d720588b6794c md5: 49f570f3bc4c874a06ea69b7225753af @@ -1055,31 +935,6 @@ packages: purls: [] size: 27526 timestamp: 1771378224552 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran-15.2.0-h69a702a_18.conda - sha256: d2c9fad338fd85e4487424865da8e74006ab2e2475bd788f624d7a39b2a72aee - md5: 9063115da5bc35fdc3e1002e69b9ef6e - depends: - - libgfortran5 15.2.0 h68bc16d_18 - constrains: - - libgfortran-ng ==15.2.0=*_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27523 - timestamp: 1771378269450 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgfortran5-15.2.0-h68bc16d_18.conda - sha256: 539b57cf50ec85509a94ba9949b7e30717839e4d694bc94f30d41c9d34de2d12 - md5: 646855f357199a12f02a87382d429b75 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=15.2.0 - constrains: - - libgfortran 15.2.0 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 2482475 - timestamp: 1771378241063 - conda: https://conda.anaconda.org/conda-forge/linux-64/libglib-2.86.4-h6548e54_1.conda sha256: a27e44168a1240b15659888ce0d9b938ed4bdb49e9ea68a7c1ff27bcea8b55ce md5: bb26456332b07f68bf3b7622ed71c0da @@ -1106,67 +961,6 @@ packages: purls: [] size: 603262 timestamp: 1771378117851 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-3.3.0-h25dbb67_1.conda - sha256: 17ea802cef3942b0a850b8e33b03fc575f79734f3c829cdd6a4e56e2dae60791 - md5: b2baa4ce6a9d9472aaa602b88f8d40ac - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 - - libcurl >=8.19.0,<9.0a0 - - libgcc >=14 - - libgrpc >=1.78.1,<1.79.0a0 - - libopentelemetry-cpp >=1.26.0,<1.27.0a0 - - libprotobuf >=6.33.5,<6.33.6.0a0 - - libstdcxx >=14 - - openssl >=3.5.5,<4.0a0 - constrains: - - libgoogle-cloud 3.3.0 *_1 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 2558266 - timestamp: 1774212240265 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgoogle-cloud-storage-3.3.0-hdbdcf42_1.conda - sha256: 838b6798962039e7f1ed97be85c3a36ceacfd4611bdf76e7cc0b6cd8741edf57 - md5: da94b149c8eea6ceef10d9e408dcfeb3 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil - - libcrc32c >=1.1.2,<1.2.0a0 - - libcurl - - libgcc >=14 - - libgoogle-cloud 3.3.0 h25dbb67_1 - - libstdcxx >=14 - - libzlib >=1.3.2,<2.0a0 - - openssl - license: Apache-2.0 - license_family: Apache - purls: [] - size: 779217 - timestamp: 1774212426084 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libgrpc-1.78.1-h1d1128b_0.conda - sha256: 5bb935188999fd70f67996746fd2dca85ec6204289e11695c316772e19451eb8 - md5: b5fb6d6c83f63d83ef2721dca6ff7091 - depends: - - __glibc >=2.17,<3.0.a0 - - c-ares >=1.34.6,<2.0a0 - - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 - - libgcc >=14 - - libprotobuf >=6.33.5,<6.33.6.0a0 - - libre2-11 >=2025.11.5 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 - - re2 - constrains: - - grpc-cpp =1.78.1 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 7021360 - timestamp: 1774020290672 - conda: https://conda.anaconda.org/conda-forge/linux-64/libiconv-1.18-h3b78370_2.conda sha256: c467851a7312765447155e071752d7bf9bf44d610a5687e32706f480aad2833f md5: 915f5995e94f60e9a4826e0b0920ee88 @@ -1189,21 +983,6 @@ packages: purls: [] size: 633710 timestamp: 1762094827865 -- conda: https://conda.anaconda.org/conda-forge/linux-64/liblapack-3.11.0-6_h47877c9_openblas.conda - build_number: 6 - sha256: 371f517eb7010b21c6cc882c7606daccebb943307cb9a3bf2c70456a5c024f7d - md5: 881d801569b201c2e753f03c84b85e15 - depends: - - libblas 3.11.0 6_h4a7cf45_openblas - constrains: - - blas 2.306 openblas - - liblapacke 3.11.0 6*_openblas - - libcblas 3.11.0 6*_openblas - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 18624 - timestamp: 1774503065378 - conda: https://conda.anaconda.org/conda-forge/linux-64/liblzma-5.8.2-hb03c661_0.conda sha256: 755c55ebab181d678c12e49cced893598f2bab22d582fbbf4d8b83c18be207eb md5: c7c83eecbb72d88b940c249af56c8b17 @@ -1216,23 +995,6 @@ packages: purls: [] size: 113207 timestamp: 1768752626120 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libnghttp2-1.68.1-h877daf1_0.conda - sha256: 663444d77a42f2265f54fb8b48c5450bfff4388d9c0f8253dd7855f0d993153f - md5: 2a45e7f8af083626f009645a6481f12d - depends: - - __glibc >=2.17,<3.0.a0 - - c-ares >=1.34.6,<2.0a0 - - libev >=4.33,<4.34.0a0 - - libev >=4.33,<5.0a0 - - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.5,<4.0a0 - license: MIT - license_family: MIT - purls: [] - size: 663344 - timestamp: 1773854035739 - conda: https://conda.anaconda.org/conda-forge/linux-64/libnsl-2.0.1-hb9d3cd8_1.conda sha256: 927fe72b054277cde6cb82597d0fcf6baf127dcbce2e0a9d8925a68f1265eef5 md5: d864d34357c3b65a4b731f78c0801dc4 @@ -1244,65 +1006,6 @@ packages: purls: [] size: 33731 timestamp: 1750274110928 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopenblas-0.3.32-pthreads_h94d23a6_0.conda - sha256: 6dc30b28f32737a1c52dada10c8f3a41bc9e021854215efca04a7f00487d09d9 - md5: 89d61bc91d3f39fda0ca10fcd3c68594 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - libgfortran - - libgfortran5 >=14.3.0 - constrains: - - openblas >=0.3.32,<0.3.33.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 5928890 - timestamp: 1774471724897 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-1.26.0-h9692893_0.conda - sha256: 5126b75e7733de31e261aa275c0a1fd38b25fdfff23e7d7056ebd6ca76d11532 - md5: c360be6f9e0947b64427603e91f9651f - depends: - - libabseil * cxx17* - - libabseil >=20260107.1,<20260108.0a0 - - libcurl >=8.19.0,<9.0a0 - - libgrpc >=1.78.0,<1.79.0a0 - - libopentelemetry-cpp-headers 1.26.0 ha770c72_0 - - libprotobuf >=6.33.5,<6.33.6.0a0 - - libzlib >=1.3.1,<2.0a0 - - nlohmann_json - - prometheus-cpp >=1.3.0,<1.4.0a0 - constrains: - - cpp-opentelemetry-sdk =1.26.0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 934274 - timestamp: 1774001192674 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libopentelemetry-cpp-headers-1.26.0-ha770c72_0.conda - sha256: fec2ba047f7000c213ca7ace5452435197c79fbcb1690da7ce85e99312245984 - md5: cb93c6e226a7bed5557601846555153d - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 396403 - timestamp: 1774001149705 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libparquet-23.0.1-h7376487_9_cpu.conda - build_number: 9 - sha256: 2ab9ac48c43b9800777c05b504337ef93597bf310ac8cff957796cc6776992a2 - md5: 2dccf1b6cf9dba8857050740dbc0497e - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 23.0.1 ha7f89c6_9_cpu - - libgcc >=14 - - libstdcxx >=14 - - libthrift >=0.22.0,<0.22.1.0a0 - - openssl >=3.5.5,<4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 1390169 - timestamp: 1774232604005 - conda: https://conda.anaconda.org/conda-forge/linux-64/libpng-1.6.56-h421ea60_0.conda sha256: 4f9fca3bc21e485ec0b3eb88db108b6cf9ab9a481cdf7d2ac6f9d30350b45ead md5: 97169784f0775c85683c3d8badcea2c3 @@ -1314,37 +1017,6 @@ packages: purls: [] size: 317540 timestamp: 1774513272700 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libprotobuf-6.33.5-h2b00c02_0.conda - sha256: afbf195443269ae10a940372c1d37cda749355d2bd96ef9587a962abd87f2429 - md5: 11ac478fa72cf12c214199b8a96523f4 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20260107.0,<20260108.0a0 - - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 3638698 - timestamp: 1769749419271 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libre2-11-2025.11.05-h0dc7533_1.conda - sha256: 138fc85321a8c0731c1715688b38e2be4fb71db349c9ab25f685315095ae70ff - md5: ced7f10b6cfb4389385556f47c0ad949 - depends: - - __glibc >=2.17,<3.0.a0 - - libabseil * cxx17* - - libabseil >=20260107.0,<20260108.0a0 - - libgcc >=14 - - libstdcxx >=14 - constrains: - - re2 2025.11.05.* - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 213122 - timestamp: 1768190028309 - conda: https://conda.anaconda.org/conda-forge/linux-64/libsqlite-3.52.0-hf4e2dac_0.conda sha256: d716847b7deca293d2e49ed1c8ab9e4b9e04b9d780aea49a97c26925b28a7993 md5: fd893f6a3002a635b5e50ceb9dd2c0f4 @@ -1357,19 +1029,6 @@ packages: purls: [] size: 951405 timestamp: 1772818874251 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libssh2-1.11.1-hcf80075_0.conda - sha256: fa39bfd69228a13e553bd24601332b7cfeb30ca11a3ca50bb028108fe90a7661 - md5: eecce068c7e4eddeb169591baac20ac4 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.0,<4.0a0 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 304790 - timestamp: 1745608545575 - conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-15.2.0-h934c35e_18.conda sha256: 78668020064fdaa27e9ab65cd2997e2c837b564ab26ce3bf0e58a2ce1a525c6e md5: 1b08cd684f34175e4514474793d44bcb @@ -1383,31 +1042,6 @@ packages: purls: [] size: 5852330 timestamp: 1771378262446 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libstdcxx-ng-15.2.0-hdf11a46_18.conda - sha256: 3c902ffd673cb3c6ddde624cdb80f870b6c835f8bf28384b0016e7d444dd0145 - md5: 6235adb93d064ecdf3d44faee6f468de - depends: - - libstdcxx 15.2.0 h934c35e_18 - license: GPL-3.0-only WITH GCC-exception-3.1 - license_family: GPL - purls: [] - size: 27575 - timestamp: 1771378314494 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libthrift-0.22.0-h454ac66_1.conda - sha256: 4888b9ea2593c36ca587a5ebe38d0a56a0e6d6a9e4bb7da7d9a326aaaca7c336 - md5: 8ed82d90e6b1686f5e98f8b7825a15ef - depends: - - __glibc >=2.17,<3.0.a0 - - libevent >=2.1.12,<2.1.13.0a0 - - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - - openssl >=3.5.1,<4.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 424208 - timestamp: 1753277183984 - conda: https://conda.anaconda.org/conda-forge/linux-64/libtiff-4.7.1-h9d88235_1.conda sha256: e5f8c38625aa6d567809733ae04bb71c161a42e44a9fa8227abe61fa5c60ebe0 md5: cd5a90476766d53e901500df9215e927 @@ -1426,28 +1060,17 @@ packages: purls: [] size: 435273 timestamp: 1762022005702 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libutf8proc-2.11.3-hfe17d71_0.conda - sha256: ecbf4b7520296ed580498dc66a72508b8a79da5126e1d6dc650a7087171288f9 - md5: 1247168fe4a0b8912e3336bccdbf98a5 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - license: MIT - license_family: MIT - purls: [] - size: 85969 - timestamp: 1768735071295 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.41.3-h5347b49_0.conda - sha256: 1a7539cfa7df00714e8943e18de0b06cceef6778e420a5ee3a2a145773758aee - md5: db409b7c1720428638e7c0d509d3e1b5 +- conda: https://conda.anaconda.org/conda-forge/linux-64/libuuid-2.42-h5347b49_0.conda + sha256: bc1b08c92626c91500fd9f26f2c797f3eb153b627d53e9c13cd167f1e12b2829 + md5: 38ffe67b78c9d4de527be8315e5ada2c depends: - __glibc >=2.17,<3.0.a0 - libgcc >=14 license: BSD-3-Clause license_family: BSD purls: [] - size: 40311 - timestamp: 1766271528534 + size: 40297 + timestamp: 1775052476770 - conda: https://conda.anaconda.org/conda-forge/linux-64/libwebp-base-1.6.0-hd42ef1d_0.conda sha256: 3aed21ab28eddffdaf7f804f49be7a7d701e8f0e46c856d801270b470820a37b md5: aea31d2e5b1091feca96fcfe945c3cf9 @@ -1484,39 +1107,6 @@ packages: purls: [] size: 100393 timestamp: 1702724383534 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-2.15.2-he237659_0.conda - sha256: 275c324f87bda1a3b67d2f4fcc3555eeff9e228a37655aa001284a7ceb6b0392 - md5: e49238a1609f9a4a844b09d9926f2c3d - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.2,<79.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libxml2-16 2.15.2 hca6bf5a_0 - - libzlib >=1.3.1,<2.0a0 - license: MIT - license_family: MIT - purls: [] - size: 45968 - timestamp: 1772704614539 -- conda: https://conda.anaconda.org/conda-forge/linux-64/libxml2-16-2.15.2-hca6bf5a_0.conda - sha256: 08d2b34b49bec9613784f868209bb7c3bb8840d6cf835ff692e036b09745188c - md5: f3bc152cb4f86babe30f3a4bf0dbef69 - depends: - - __glibc >=2.17,<3.0.a0 - - icu >=78.2,<79.0a0 - - libgcc >=14 - - libiconv >=1.18,<2.0a0 - - liblzma >=5.8.2,<6.0a0 - - libzlib >=1.3.1,<2.0a0 - constrains: - - libxml2 2.15.2 - license: MIT - license_family: MIT - purls: [] - size: 557492 - timestamp: 1772704601644 - conda: https://conda.anaconda.org/conda-forge/linux-64/libzlib-1.3.2-h25fd6f3_2.conda sha256: 55044c403570f0dc26e6364de4dc5368e5f3fc7ff103e867c487e2b5ab2bcda9 md5: d87ff7921124eccd67248aa483c23fec @@ -1529,18 +1119,51 @@ packages: purls: [] size: 63629 timestamp: 1774072609062 -- conda: https://conda.anaconda.org/conda-forge/linux-64/lz4-c-1.10.0-h5888daf_1.conda - sha256: 47326f811392a5fd3055f0f773036c392d26fdb32e4d8e7a8197eed951489346 - md5: 9de5350a85c4a20c685259b889aa6393 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=13 - - libstdcxx >=13 - license: BSD-2-Clause - license_family: BSD - purls: [] - size: 167055 - timestamp: 1733741040117 +- pypi: https://files.pythonhosted.org/packages/30/ac/0273f6fcb5f42e314c6d8cd99effae6a5354604d461b8d392b5ec9530a54/markupsafe-3.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: markupsafe + version: 3.0.3 + sha256: 0bf2a864d67e76e5c9a34dc26ec616a66b9888e25e7b9460e1c76d3293bd9dbf + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/96/86/16815fddf056ca998853c6dc525397edf0b43559bb4073a80d2bc7fe8009/msal-1.35.1-py3-none-any.whl + name: msal + version: 1.35.1 + sha256: 8f4e82f34b10c19e326ec69f44dc6b30171f2f7098f3720ea8a9f0c11832caa3 + requires_dist: + - requests>=2.0.0,<3 + - pyjwt[crypto]>=1.0.0,<3 + - cryptography>=2.5,<49 + - pymsalruntime>=0.14,<0.21 ; python_full_version >= '3.8' and sys_platform == 'win32' and extra == 'broker' + - pymsalruntime>=0.17,<0.21 ; python_full_version >= '3.8' and sys_platform == 'darwin' and extra == 'broker' + - pymsalruntime>=0.18,<0.21 ; python_full_version >= '3.8' and sys_platform == 'linux' and extra == 'broker' + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/5e/75/bd9b7bb966668920f06b200e84454c8f3566b102183bc55c5473d96cb2b9/msal_extensions-1.3.1-py3-none-any.whl + name: msal-extensions + version: 1.3.1 + sha256: 96d3de4d034504e969ac5e85bae8106c8373b5c6568e4c8fa7af2eca9dbe6bca + requires_dist: + - msal>=1.29,<2 + - portalocker>=1.4,<4 ; extra == 'portalocker' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/15/cf/f2966a2638144491f8696c27320d5219f48a072715075d168b31d3237720/msrest-0.7.1-py3-none-any.whl + name: msrest + version: 0.7.1 + sha256: 21120a810e1233e5e6cc7fe40b474eeb4ec6f757a15d7cf86702c369f9567c32 + requires_dist: + - azure-core>=1.24.0 + - certifi>=2017.4.17 + - isodate>=0.6.0 + - requests-oauthlib>=0.5.0 + - requests~=2.16 + - aiodns ; python_full_version >= '3.5' and extra == 'async' + - aiohttp>=3.0 ; python_full_version >= '3.5' and extra == 'async' + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/5a/56/21b27c560c13822ed93133f08aa6372c53a8e067f11fbed37b4adcdac922/multidict-6.7.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: multidict + version: 6.7.1 + sha256: 439cbebd499f92e9aa6793016a8acaa161dfa749ae86d20960189f5398a19144 + requires_dist: + - typing-extensions>=4.1.0 ; python_full_version < '3.11' + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda sha256: 3fde293232fa3fca98635e1167de6b7c7fda83caf24b9d6c91ec9eefb4f4d586 md5: 47e340acb35de30501a76c7c799c41d7 @@ -1551,36 +1174,26 @@ packages: purls: [] size: 891641 timestamp: 1738195959188 -- conda: https://conda.anaconda.org/conda-forge/linux-64/nlohmann_json-3.12.0-h54a6638_1.conda - sha256: fd2cbd8dfc006c72f45843672664a8e4b99b2f8137654eaae8c3d46dca776f63 - md5: 16c2a0e9c4a166e53632cfca4f68d020 - constrains: - - nlohmann_json-abi ==3.12.0 - license: MIT - license_family: MIT - purls: [] - size: 136216 - timestamp: 1758194284857 -- conda: https://conda.anaconda.org/conda-forge/linux-64/numpy-2.4.3-py311h2e04523_0.conda - sha256: ea4e92bb68b58ce92c0d4152c308eecfee94f131d5ef247395fbe70b7697074d - md5: cfc8f864dea571677095ebae8e6f0c07 - depends: - - python - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - libcblas >=3.9.0,<4.0a0 - - liblapack >=3.9.0,<4.0a0 - - python_abi 3.11.* *_cp311 - - libblas >=3.9.0,<4.0a0 - constrains: - - numpy-base <0a0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/numpy?source=compressed-mapping - size: 9384747 - timestamp: 1773839224422 +- pypi: https://files.pythonhosted.org/packages/a0/c4/c2971a3ba4c6103a3d10c4b0f24f461ddc027f0f09763220cf35ca1401b3/nest_asyncio-1.6.0-py3-none-any.whl + name: nest-asyncio + version: 1.6.0 + sha256: 87af6efd6b5e897c81050477ef65c62e2b2f35d51703cae01aff2905b1852e1c + requires_python: '>=3.5' +- pypi: https://files.pythonhosted.org/packages/cf/c5/9fcb7e0e69cef59cf10c746b84f7d58b08bc66a6b7d459783c5a4f6101a6/numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: numpy + version: 2.4.4 + sha256: df3775294accfdd75f32c74ae39fcba920c9a378a2fc18a12b6820aa8c1fb502 + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl + name: oauthlib + version: 3.3.1 + sha256: 88119c938d2b8fb88561af5f6ee0eec8cc8d552b7bb1f712743136eb7523b7a1 + requires_dist: + - cryptography>=3.0.0 ; extra == 'rsa' + - cryptography>=3.0.0 ; extra == 'signedtoken' + - pyjwt>=2.0.0,<3 ; extra == 'signedtoken' + - blinker>=1.4.0 ; extra == 'signals' + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/linux-64/openjdk-17.0.18-ha668962_0.conda sha256: 0462c2a4ada21b2428410d8a27cb125b0bbeb29cccc07e69f66ba41587f88ee9 md5: 98c0955fbe4b6bcb67a43817e57552bc @@ -1617,9 +1230,9 @@ packages: purls: [] size: 174029080 timestamp: 1771452451048 -- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.1-h35e630c_1.conda - sha256: 44c877f8af015332a5d12f5ff0fb20ca32f896526a7d0cdb30c769df1144fb5c - md5: f61eb8cd60ff9057122a3d338b99c00f +- conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda + sha256: c0ef482280e38c71a08ad6d71448194b719630345b0c9c60744a2010e8a8e0cb + md5: da1b85b6a87e141f5140bb9924cecab0 depends: - __glibc >=2.17,<3.0.a0 - ca-certificates @@ -1627,85 +1240,116 @@ packages: license: Apache-2.0 license_family: Apache purls: [] - size: 3164551 - timestamp: 1769555830639 -- conda: https://conda.anaconda.org/conda-forge/linux-64/orc-2.3.0-h21090e2_0.conda - sha256: a60c2578c8422e0c67206d269767feb4d3e627511558b6866e5daf2231d5214d - md5: 8027fce94fdfdf2e54f9d18cbae496df - depends: - - tzdata - - libstdcxx >=14 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - lz4-c >=1.10.0,<1.11.0a0 - - snappy >=1.2.2,<1.3.0a0 - - libabseil >=20260107.1,<20260108.0a0 - - libabseil * cxx17* - - libprotobuf >=6.33.5,<6.33.6.0a0 - - zstd >=1.5.7,<1.6.0a0 - - libzlib >=1.3.1,<2.0a0 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 1468651 - timestamp: 1773230208923 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pandas-3.0.1-py311h8032f78_0.conda - sha256: 3e58067de2e0b8220cf1323c1fc736028b2a117b7a7173bfe67f7da11094271f - md5: 3ac73c673df24589b5b84d43a4afd235 - depends: - - python - - numpy >=1.26.0 - - python-dateutil >=2.8.2 - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - python_abi 3.11.* *_cp311 - - numpy >=1.23,<3 - constrains: - - adbc-driver-postgresql >=1.2.0 - - adbc-driver-sqlite >=1.2.0 - - beautifulsoup4 >=4.12.3 - - blosc >=1.21.3 - - bottleneck >=1.4.2 - - fastparquet >=2024.11.0 - - fsspec >=2024.10.0 - - gcsfs >=2024.10.0 - - html5lib >=1.1 - - hypothesis >=6.116.0 - - jinja2 >=3.1.5 - - lxml >=5.3.0 - - matplotlib >=3.9.3 - - numba >=0.60.0 - - numexpr >=2.10.2 - - odfpy >=1.4.1 - - openpyxl >=3.1.5 - - psycopg2 >=2.9.10 - - pyarrow >=13.0.0 - - pyiceberg >=0.8.1 - - pymysql >=1.1.1 - - pyqt5 >=5.15.9 - - pyreadstat >=1.2.8 - - pytables >=3.10.1 - - pytest >=8.3.4 - - pytest-xdist >=3.6.1 - - python-calamine >=0.3.0 - - pytz >=2024.2 - - pyxlsb >=1.0.10 - - qtpy >=2.4.2 - - scipy >=1.14.1 - - s3fs >=2024.10.0 - - sqlalchemy >=2.0.36 - - tabulate >=0.9.0 - - xarray >=2024.10.0 - - xlrd >=2.0.1 - - xlsxwriter >=3.2.0 - - zstandard >=0.23.0 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/pandas?source=hash-mapping - size: 15143263 - timestamp: 1771408984246 + size: 3167099 + timestamp: 1775587756857 +- pypi: https://files.pythonhosted.org/packages/f8/fc/55e667ec9c85694038fcff00573d221b085d50777368ee3d77f38668bf3c/orjson-3.11.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: orjson + version: 3.11.8 + sha256: 5f8952d6d2505c003e8f0224ff7858d341fa4e33fef82b91c4ff0ef070f2393c + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + name: packaging + version: '26.0' + sha256: b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl + name: pandas + version: 2.3.3 + sha256: b98560e98cb334799c0b07ca7967ac361a47326e9b4e5a7dfb5ab2b1c9d35a1b + requires_dist: + - numpy>=1.22.4 ; python_full_version < '3.11' + - numpy>=1.23.2 ; python_full_version == '3.11.*' + - numpy>=1.26.0 ; python_full_version >= '3.12' + - python-dateutil>=2.8.2 + - pytz>=2020.1 + - tzdata>=2022.7 + - hypothesis>=6.46.1 ; extra == 'test' + - pytest>=7.3.2 ; extra == 'test' + - pytest-xdist>=2.2.0 ; extra == 'test' + - pyarrow>=10.0.1 ; extra == 'pyarrow' + - bottleneck>=1.3.6 ; extra == 'performance' + - numba>=0.56.4 ; extra == 'performance' + - numexpr>=2.8.4 ; extra == 'performance' + - scipy>=1.10.0 ; extra == 'computation' + - xarray>=2022.12.0 ; extra == 'computation' + - fsspec>=2022.11.0 ; extra == 'fss' + - s3fs>=2022.11.0 ; extra == 'aws' + - gcsfs>=2022.11.0 ; extra == 'gcp' + - pandas-gbq>=0.19.0 ; extra == 'gcp' + - odfpy>=1.4.1 ; extra == 'excel' + - openpyxl>=3.1.0 ; extra == 'excel' + - python-calamine>=0.1.7 ; extra == 'excel' + - pyxlsb>=1.0.10 ; extra == 'excel' + - xlrd>=2.0.1 ; extra == 'excel' + - xlsxwriter>=3.0.5 ; extra == 'excel' + - pyarrow>=10.0.1 ; extra == 'parquet' + - pyarrow>=10.0.1 ; extra == 'feather' + - tables>=3.8.0 ; extra == 'hdf5' + - pyreadstat>=1.2.0 ; extra == 'spss' + - sqlalchemy>=2.0.0 ; extra == 'postgresql' + - psycopg2>=2.9.6 ; extra == 'postgresql' + - adbc-driver-postgresql>=0.8.0 ; extra == 'postgresql' + - sqlalchemy>=2.0.0 ; extra == 'mysql' + - pymysql>=1.0.2 ; extra == 'mysql' + - sqlalchemy>=2.0.0 ; extra == 'sql-other' + - adbc-driver-postgresql>=0.8.0 ; extra == 'sql-other' + - adbc-driver-sqlite>=0.8.0 ; extra == 'sql-other' + - beautifulsoup4>=4.11.2 ; extra == 'html' + - html5lib>=1.1 ; extra == 'html' + - lxml>=4.9.2 ; extra == 'html' + - lxml>=4.9.2 ; extra == 'xml' + - matplotlib>=3.6.3 ; extra == 'plot' + - jinja2>=3.1.2 ; extra == 'output-formatting' + - tabulate>=0.9.0 ; extra == 'output-formatting' + - pyqt5>=5.15.9 ; extra == 'clipboard' + - qtpy>=2.3.0 ; extra == 'clipboard' + - zstandard>=0.19.0 ; extra == 'compression' + - dataframe-api-compat>=0.1.7 ; extra == 'consortium-standard' + - adbc-driver-postgresql>=0.8.0 ; extra == 'all' + - adbc-driver-sqlite>=0.8.0 ; extra == 'all' + - beautifulsoup4>=4.11.2 ; extra == 'all' + - bottleneck>=1.3.6 ; extra == 'all' + - dataframe-api-compat>=0.1.7 ; extra == 'all' + - fastparquet>=2022.12.0 ; extra == 'all' + - fsspec>=2022.11.0 ; extra == 'all' + - gcsfs>=2022.11.0 ; extra == 'all' + - html5lib>=1.1 ; extra == 'all' + - hypothesis>=6.46.1 ; extra == 'all' + - jinja2>=3.1.2 ; extra == 'all' + - lxml>=4.9.2 ; extra == 'all' + - matplotlib>=3.6.3 ; extra == 'all' + - numba>=0.56.4 ; extra == 'all' + - numexpr>=2.8.4 ; extra == 'all' + - odfpy>=1.4.1 ; extra == 'all' + - openpyxl>=3.1.0 ; extra == 'all' + - pandas-gbq>=0.19.0 ; extra == 'all' + - psycopg2>=2.9.6 ; extra == 'all' + - pyarrow>=10.0.1 ; extra == 'all' + - pymysql>=1.0.2 ; extra == 'all' + - pyqt5>=5.15.9 ; extra == 'all' + - pyreadstat>=1.2.0 ; extra == 'all' + - pytest>=7.3.2 ; extra == 'all' + - pytest-xdist>=2.2.0 ; extra == 'all' + - python-calamine>=0.1.7 ; extra == 'all' + - pyxlsb>=1.0.10 ; extra == 'all' + - qtpy>=2.3.0 ; extra == 'all' + - scipy>=1.10.0 ; extra == 'all' + - s3fs>=2022.11.0 ; extra == 'all' + - sqlalchemy>=2.0.0 ; extra == 'all' + - tables>=3.8.0 ; extra == 'all' + - tabulate>=0.9.0 ; extra == 'all' + - xarray>=2022.12.0 ; extra == 'all' + - xlrd>=2.0.1 ; extra == 'all' + - xlsxwriter>=3.0.5 ; extra == 'all' + - zstandard>=0.19.0 ; extra == 'all' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/f1/a9/a10a10f12e50993b5a3568a1a90fd70b85f83edc451875d312bf60cd39b8/parsimonious-0.11.0-py3-none-any.whl + name: parsimonious + version: 0.11.0 + sha256: 32e3818abf9f05b3b9f3b6d87d128645e30177e91f614d2277d88a0aea98fae2 + requires_dist: + - regex>=2022.3.15 + - pytest ; extra == 'testing' - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda sha256: 5e6f7d161356fefd981948bea5139c5aa0436767751a6930cb1ca801ebb113ff md5: 7a3bff861a6583f1889021facefc08b1 @@ -1719,6 +1363,43 @@ packages: purls: [] size: 1222481 timestamp: 1763655398280 +- pypi: https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: pillow + version: 12.2.0 + sha256: e74473c875d78b8e9d5da2a70f7099549f9eb37ded4e2f6a463e60125bccd176 + requires_dist: + - furo ; extra == 'docs' + - olefile ; extra == 'docs' + - sphinx>=8.2 ; extra == 'docs' + - sphinx-autobuild ; extra == 'docs' + - sphinx-copybutton ; extra == 'docs' + - sphinx-inline-tabs ; extra == 'docs' + - sphinxext-opengraph ; extra == 'docs' + - olefile ; extra == 'fpx' + - olefile ; extra == 'mic' + - arro3-compute ; extra == 'test-arrow' + - arro3-core ; extra == 'test-arrow' + - nanoarrow ; extra == 'test-arrow' + - pyarrow ; extra == 'test-arrow' + - check-manifest ; extra == 'tests' + - coverage>=7.4.2 ; extra == 'tests' + - defusedxml ; extra == 'tests' + - markdown2 ; extra == 'tests' + - olefile ; extra == 'tests' + - packaging ; extra == 'tests' + - pyroma>=5 ; extra == 'tests' + - pytest ; extra == 'tests' + - pytest-cov ; extra == 'tests' + - pytest-timeout ; extra == 'tests' + - pytest-xdist ; extra == 'tests' + - trove-classifiers>=2024.10.12 ; extra == 'tests' + - defusedxml ; extra == 'xmp' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/de/f0/c81e05b613866b76d2d1066490adf1a3dbc4ee9d9c839961c3fc8a6997af/pip-26.0.1-py3-none-any.whl + name: pip + version: 26.0.1 + sha256: bdb1b08f4274833d62c1aa29e20907365a2ceb950410df15fc9521bad440122b + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda sha256: 43d37bc9ca3b257c5dd7bf76a8426addbdec381f6786ff441dc90b1a49143b6a md5: c01af13bdc553d1a8fbfff6e8db075f0 @@ -1732,21 +1413,19 @@ packages: purls: [] size: 450960 timestamp: 1754665235234 -- conda: https://conda.anaconda.org/conda-forge/linux-64/prometheus-cpp-1.3.0-ha5d0236_0.conda - sha256: 013669433eb447548f21c3c6b16b2ed64356f726b5f77c1b39d5ba17a8a4b8bc - md5: a83f6a2fdc079e643237887a37460668 - depends: - - __glibc >=2.17,<3.0.a0 - - libcurl >=8.10.1,<9.0a0 - - libgcc >=13 - - libstdcxx >=13 - - libzlib >=1.3.1,<2.0a0 - - zlib - license: MIT - license_family: MIT - purls: [] - size: 199544 - timestamp: 1730769112346 +- pypi: https://files.pythonhosted.org/packages/e5/ae/580600f441f6fc05218bd6c9d5794f4aef072a7d9093b291f1c50a9db8bc/plotly-5.24.1-py3-none-any.whl + name: plotly + version: 5.24.1 + sha256: f67073a1e637eb0dc3e46324d9d51e2fe76e9727c892dde64ddf1e1b51f29089 + requires_dist: + - tenacity>=6.2.0 + - packaging + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: propcache + version: 0.4.1 + sha256: fd6f30fdcf9ae2a70abd34da54f18da086160e4d7d9251f81f3da0ff84fc5a48 + requires_python: '>=3.9' - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda sha256: 9c88f8c64590e9567c6c80823f0328e58d3b1efb0e1c539c0315ceca764e0973 md5: b3c17d95b5a10c6e64a21fa17573e70e @@ -1758,69 +1437,84 @@ packages: purls: [] size: 8252 timestamp: 1726802366959 -- conda: https://conda.anaconda.org/conda-forge/noarch/py4j-0.10.9.9-pyhd8ed1ab_0.conda - sha256: b20d57020eaec2ed004f48d886fd6b5d3f413c019e9ac74c45efca7748a86f9f - md5: 9c12bcccde15a83c99dd84b1ab445084 - depends: - - python >=3.9 - license: BSD-3-Clause - license_family: BSD - purls: - - pkg:pypi/py4j?source=hash-mapping - size: 184044 - timestamp: 1736977852308 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-23.0.1-py311h38be061_0.conda - sha256: 6f30e576af058d1e502042e16dbd9e6d3681ed587385dafa164441a89fdf601a - md5: 082290c246ad8418c71c596ee11603b4 - depends: - - libarrow-acero 23.0.1.* - - libarrow-dataset 23.0.1.* - - libarrow-substrait 23.0.1.* - - libparquet 23.0.1.* - - pyarrow-core 23.0.1 *_0_* - - python >=3.11,<3.12.0a0 - - python_abi 3.11.* *_cp311 - license: Apache-2.0 - license_family: APACHE - purls: [] - size: 28633 - timestamp: 1771307314012 -- conda: https://conda.anaconda.org/conda-forge/linux-64/pyarrow-core-23.0.1-py311h66caee6_0_cpu.conda - sha256: 37f14252f86e422a78a1c4453df43f261a910df0731f96beec00ac81ec012cf6 - md5: e20759a1f0049b4fef5d9863ed39ee85 - depends: - - __glibc >=2.17,<3.0.a0 - - libarrow 23.0.1.* *cpu - - libarrow-compute 23.0.1.* *cpu - - libgcc >=14 - - libstdcxx >=14 - - libzlib >=1.3.1,<2.0a0 - - python >=3.11,<3.12.0a0 - - python_abi 3.11.* *_cp311 - constrains: - - numpy >=1.23,<3 - - apache-arrow-proc * cpu - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/pyarrow?source=hash-mapping - size: 5311766 - timestamp: 1771307258484 -- conda: https://conda.anaconda.org/conda-forge/noarch/pyspark-4.1.1-pyhd8ed1ab_0.conda - sha256: 3f4a6bdee541344c378418bd143a527037b08332ecc80995ef547dcf746e5a2d - md5: a83e3b0622977111e91bc34f8f585202 - depends: - - numpy >=1.21 - - pandas >=2.0.0 - - py4j 0.10.9.9 - - pyarrow >=11.0.0 - - python >=3.10 - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/pyspark?source=hash-mapping - size: 446440875 - timestamp: 1767980240100 +- pypi: https://files.pythonhosted.org/packages/bd/db/ea0203e495be491c85af87b66e37acfd3bf756fd985f87e46fc5e3bf022c/py4j-0.10.9.9-py2.py3-none-any.whl + name: py4j + version: 0.10.9.9 + sha256: c7c26e4158defb37b0bb124933163641a2ff6e3a3913f7811b0ddbe07ed61533 +- pypi: https://files.pythonhosted.org/packages/5d/a0/7d793dce3fa811fe047d6ae2431c672364b462850c6235ae306c0efd025f/pyasn1-0.6.3-py3-none-any.whl + name: pyasn1 + version: 0.6.3 + sha256: a80184d120f0864a52a073acc6fc642847d0be408e7c7252f31390c0f4eadcde + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/47/8d/d529b5d697919ba8c11ad626e835d4039be708a35b0d22de83a269a6682c/pyasn1_modules-0.4.2-py3-none-any.whl + name: pyasn1-modules + version: 0.4.2 + sha256: 29253a9207ce32b64c3ac6600edc75368f98473906e8fd1043bd6b5b1de2c14a + requires_dist: + - pyasn1>=0.6.1,<0.7.0 + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/26/ad/e59f173933f0e696a6afbbd63935114d1400524a72da4f2cbafc6002a398/pycares-5.0.1-cp311-cp311-manylinux_2_26_x86_64.manylinux_2_28_x86_64.whl + name: pycares + version: 5.0.1 + sha256: 5c63fb2498b05e9f5670a1bf3b900c5d09343b3b6d5001a9714d593f9eb54de1 + requires_dist: + - cffi>=1.5.0 ; python_full_version < '3.14' + - cffi>=2.0.0b1 ; python_full_version >= '3.14' + - idna>=2.1 ; extra == 'idna' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/0c/c3/44f3fbbfa403ea2a7c779186dc20772604442dde72947e7d01069cbe98e3/pycparser-3.0-py3-none-any.whl + name: pycparser + version: '3.0' + sha256: b727414169a36b7d524c1c3e31839a521725078d7b2ff038656844266160a992 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/f4/7e/a72dd26f3b0f4f2bf1dd8923c85f7ceb43172af56d63c7383eb62b332364/pygments-2.20.0-py3-none-any.whl + name: pygments + version: 2.20.0 + sha256: 81a9e26dd42fd28a23a2d169d86d7ac03b46e2f8b59ed4698fb4785f946d0176 + requires_dist: + - colorama>=0.4.6 ; extra == 'windows-terminal' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/e5/7a/8dd906bd22e79e47397a61742927f6747fe93242ef86645ee9092e610244/pyjwt-2.12.1-py3-none-any.whl + name: pyjwt + version: 2.12.1 + sha256: 28ca37c070cad8ba8cd9790cd940535d40274d22f80ab87f3ac6a713e6e8454c + requires_dist: + - typing-extensions>=4.0 ; python_full_version < '3.11' + - cryptography>=3.4.0 ; extra == 'crypto' + - coverage[toml]==7.10.7 ; extra == 'dev' + - cryptography>=3.4.0 ; extra == 'dev' + - pre-commit ; extra == 'dev' + - pytest>=8.4.2,<9.0.0 ; extra == 'dev' + - sphinx ; extra == 'dev' + - sphinx-rtd-theme ; extra == 'dev' + - zope-interface ; extra == 'dev' + - sphinx ; extra == 'docs' + - sphinx-rtd-theme ; extra == 'docs' + - zope-interface ; extra == 'docs' + - coverage[toml]==7.10.7 ; extra == 'tests' + - pytest>=8.4.2,<9.0.0 ; extra == 'tests' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/80/5a/3806f44eb47387e8af803508cdd6bbc0df784febf4dc010700be04a1ff89/pyspark-3.5.8.tar.gz + name: pyspark + version: 3.5.8 + sha256: 54cca0767b21b40e3953ad1d30f8601c53abf9cbda763653289cdcfcac52313c + requires_dist: + - py4j>=0.10.9.7,<0.10.9.10 + - numpy>=1.15,<2 ; extra == 'ml' + - numpy>=1.15,<2 ; extra == 'mllib' + - pandas>=1.0.5 ; extra == 'sql' + - pyarrow>=4.0.0 ; extra == 'sql' + - numpy>=1.15,<2 ; extra == 'sql' + - pandas>=1.0.5 ; extra == 'pandas-on-spark' + - pyarrow>=4.0.0 ; extra == 'pandas-on-spark' + - numpy>=1.15,<2 ; extra == 'pandas-on-spark' + - pandas>=1.0.5 ; extra == 'connect' + - pyarrow>=4.0.0 ; extra == 'connect' + - grpcio>=1.56.0 ; extra == 'connect' + - grpcio-status>=1.56.0 ; extra == 'connect' + - googleapis-common-protos>=1.56.4 ; extra == 'connect' + - numpy>=1.15,<2 ; extra == 'connect' + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.15-hd63d673_0_cpython.conda sha256: bf6a32c69889d38482436a786bea32276756cedf0e9805cc856ffd088e8d00f0 md5: a5ebcefec0c12a333bcd6d7bf3bddc1f @@ -1848,40 +1542,27 @@ packages: purls: [] size: 30949404 timestamp: 1772730362552 -- conda: https://conda.anaconda.org/conda-forge/noarch/python-dateutil-2.9.0.post0-pyhe01879c_2.conda - sha256: d6a17ece93bbd5139e02d2bd7dbfa80bee1a4261dced63f65f679121686bf664 - md5: 5b8d21249ff20967101ffa321cab24e8 - depends: - - python >=3.9 - - six >=1.5 - - python - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/python-dateutil?source=hash-mapping - size: 233310 - timestamp: 1751104122689 -- conda: https://conda.anaconda.org/conda-forge/noarch/python_abi-3.11-8_cp311.conda - build_number: 8 - sha256: fddf123692aa4b1fc48f0471e346400d9852d96eeed77dbfdd746fa50a8ff894 - md5: 8fcb6b0e2161850556231336dae58358 - constrains: - - python 3.11.* *_cpython - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 7003 - timestamp: 1752805919375 -- conda: https://conda.anaconda.org/conda-forge/linux-64/re2-2025.11.05-h5301d42_1.conda - sha256: 3fc684b81631348540e9a42f6768b871dfeab532d3f47d5c341f1f83e2a2b2b2 - md5: 66a715bc01c77d43aca1f9fcb13dde3c - depends: - - libre2-11 2025.11.05 h0dc7533_1 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 27469 - timestamp: 1768190052132 +- pypi: https://files.pythonhosted.org/packages/ec/57/56b9bcc3c9c6a792fcbaf139543cee77261f3651ca9da0c93f5c1221264b/python_dateutil-2.9.0.post0-py2.py3-none-any.whl + name: python-dateutil + version: 2.9.0.post0 + sha256: a8b2bc7bffae282281c8140a97d3aa9c14da0b136dfe83f850eea9a5f7470427 + requires_dist: + - six>=1.5 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/35/a6/145655273568ee78a581e734cf35beb9e33a370b29c5d3c8fee3744de29f/python_json_logger-2.0.7-py3-none-any.whl + name: python-json-logger + version: 2.0.7 + sha256: f380b826a991ebbe3de4d897aeec42760035ac760345e57b812938dc8b35e2bd + requires_python: '>=3.6' +- pypi: https://files.pythonhosted.org/packages/10/99/781fe0c827be2742bcc775efefccb3b048a3a9c6ce9aec0cbf4a101677e5/pytz-2026.1.post1-py2.py3-none-any.whl + name: pytz + version: 2026.1.post1 + sha256: f2fd16142fda348286a75e1a524be810bb05d444e5a081f37f7affc635035f7a +- pypi: https://files.pythonhosted.org/packages/71/60/917329f640924b18ff085ab889a11c763e0b573da888e8404ff486657602/pyyaml-6.0.3-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: pyyaml + version: 6.0.3 + sha256: b8bb0864c5a28024fac8a632c443c87c5aa6f215c0b126c449ae1a150412f31d + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda sha256: 12ffde5a6f958e285aa22c191ca01bbd3d6e710aa852e00618fa6ddc59149002 md5: d7d95fc8287ea7bf33e0e7116d2b95ec @@ -1894,43 +1575,127 @@ packages: purls: [] size: 345073 timestamp: 1765813471974 -- conda: https://conda.anaconda.org/conda-forge/linux-64/s2n-1.7.1-h1cbb8d7_1.conda - sha256: dbbe4ab36b90427f12d69fc14a8b601b6bca4185c6c4dd67b8046a8da9daec03 - md5: 9d978822b57bafe72ebd3f8b527bba71 - depends: - - __glibc >=2.17,<3.0.a0 - - libgcc >=14 - - openssl >=3.5.5,<4.0a0 - license: Apache-2.0 - license_family: Apache - purls: [] - size: 395083 - timestamp: 1773251675551 -- conda: https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda - sha256: 458227f759d5e3fcec5d9b7acce54e10c9e1f4f4b7ec978f3bfd54ce4ee9853d - md5: 3339e3b65d58accf4ca4fb8748ab16b3 - depends: - - python >=3.9 - - python - license: MIT - license_family: MIT - purls: - - pkg:pypi/six?source=hash-mapping - size: 18455 - timestamp: 1753199211006 -- conda: https://conda.anaconda.org/conda-forge/linux-64/snappy-1.2.2-h03e3b7b_1.conda - sha256: 48f3f6a76c34b2cfe80de9ce7f2283ecb55d5ed47367ba91e8bb8104e12b8f11 - md5: 98b6c9dc80eb87b2519b97bcf7e578dd - depends: - - libgcc >=14 - - __glibc >=2.17,<3.0.a0 - - libstdcxx >=14 - - libgcc >=14 - license: BSD-3-Clause - license_family: BSD - purls: [] - size: 45829 - timestamp: 1762948049098 +- pypi: https://files.pythonhosted.org/packages/01/ea/4c8d306e9c36ac22417336b1e02e7b358152c34dc379673f2d331143725f/regex-2026.4.4-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: regex + version: 2026.4.4 + sha256: 21e5eb86179b4c67b5759d452ea7c48eb135cd93308e7a260aa489ed2eb423a4 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d7/8e/7540e8a2036f79a125c1d2ebadf69ed7901608859186c856fa0388ef4197/requests-2.33.1-py3-none-any.whl + name: requests + version: 2.33.1 + sha256: 4e6d1ef462f3626a1f0a0a9c42dd93c63bad33f9f1c1937509b8c5c8718ab56a + requires_dist: + - charset-normalizer>=2,<4 + - idna>=2.5,<4 + - urllib3>=1.26,<3 + - certifi>=2023.5.7 + - pysocks>=1.5.6,!=1.5.7 ; extra == 'socks' + - chardet>=3.0.2,<8 ; extra == 'use-chardet-on-py3' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/3b/5d/63d4ae3b9daea098d5d6f5da83984853c1bbacd5dc826764b249fe119d24/requests_oauthlib-2.0.0-py2.py3-none-any.whl + name: requests-oauthlib + version: 2.0.0 + sha256: 7dd8a5c40426b779b0868c404bdef9768deccf22749cde15852df527e6269b36 + requires_dist: + - oauthlib>=3.0.0 + - requests>=2.0.0 + - oauthlib[signedtoken]>=3.0.0 ; extra == 'rsa' + requires_python: '>=3.4' +- pypi: https://files.pythonhosted.org/packages/32/60/81ac2e7d1e3b861ab478a72e3b20fc91c4302acd2274822e493758941829/rich-12.6.0-py3-none-any.whl + name: rich + version: 12.6.0 + sha256: a4eb26484f2c82589bd9a17c73d32a010b1e29d89f1604cd9bf3a2097b81bb5e + requires_dist: + - commonmark>=0.9.0,<0.10.0 + - dataclasses>=0.7,<0.9 ; python_full_version < '3.7' + - ipywidgets>=7.5.1,<8.0.0 ; extra == 'jupyter' + - pygments>=2.6.0,<3.0.0 + - typing-extensions>=4.0.0,<5.0 ; python_full_version < '3.9' + requires_python: '>=3.6.3,<4.0.0' +- pypi: https://files.pythonhosted.org/packages/fc/51/727abb13f44c1fcf6d145979e1535a35794db0f6e450a0cb46aa24732fe2/s3transfer-0.16.0-py3-none-any.whl + name: s3transfer + version: 0.16.0 + sha256: 18e25d66fed509e3868dc1572b3f427ff947dd2c56f844a5bf09481ad3f3b2fe + requires_dist: + - botocore>=1.37.4,<2.0a0 + - botocore[crt]>=1.37.4,<2.0a0 ; extra == 'crt' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/09/7d/af933f0f6e0767995b4e2d705a0665e454d1c19402aa7e895de3951ebb04/scipy-1.17.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl + name: scipy + version: 1.17.1 + sha256: 43af8d1f3bea642559019edfe64e9b11192a8978efbd1539d7bc2aaa23d92de4 + requires_dist: + - numpy>=1.26.4,<2.7 + - pytest>=8.0.0 ; extra == 'test' + - pytest-cov ; extra == 'test' + - pytest-timeout ; extra == 'test' + - pytest-xdist ; extra == 'test' + - asv ; extra == 'test' + - mpmath ; extra == 'test' + - gmpy2 ; extra == 'test' + - threadpoolctl ; extra == 'test' + - scikit-umfpack ; extra == 'test' + - pooch ; extra == 'test' + - hypothesis>=6.30 ; extra == 'test' + - array-api-strict>=2.3.1 ; extra == 'test' + - cython ; extra == 'test' + - meson ; extra == 'test' + - ninja ; sys_platform != 'emscripten' and extra == 'test' + - sphinx>=5.0.0,<8.2.0 ; extra == 'doc' + - intersphinx-registry ; extra == 'doc' + - pydata-sphinx-theme>=0.15.2 ; extra == 'doc' + - sphinx-copybutton ; extra == 'doc' + - sphinx-design>=0.4.0 ; extra == 'doc' + - matplotlib>=3.5 ; extra == 'doc' + - numpydoc ; extra == 'doc' + - jupytext ; extra == 'doc' + - myst-nb>=1.2.0 ; extra == 'doc' + - pooch ; extra == 'doc' + - jupyterlite-sphinx>=0.19.1 ; extra == 'doc' + - jupyterlite-pyodide-kernel ; extra == 'doc' + - linkify-it-py ; extra == 'doc' + - tabulate ; extra == 'doc' + - click<8.3.0 ; extra == 'dev' + - spin ; extra == 'dev' + - mypy==1.10.0 ; extra == 'dev' + - typing-extensions ; extra == 'dev' + - types-psutil ; extra == 'dev' + - pycodestyle ; extra == 'dev' + - ruff>=0.12.0 ; extra == 'dev' + - cython-lint>=0.12.2 ; extra == 'dev' + requires_python: '>=3.11' +- pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl + name: shellingham + version: 1.5.4 + sha256: 7ecfff8f2fd72616f7481040475a65b2bf8af90a56c89140852d1120324e8686 + requires_python: '>=3.7' +- pypi: https://files.pythonhosted.org/packages/b7/ce/149a00dd41f10bc29e5921b496af8b574d8413afcd5e30dfa0ed46c2cc5e/six-1.17.0-py2.py3-none-any.whl + name: six + version: 1.17.0 + sha256: 4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274 + requires_python: '>=2.7,!=3.0.*,!=3.1.*,!=3.2.*' +- pypi: https://files.pythonhosted.org/packages/32/46/9cb0e58b2deb7f82b84065f37f3bffeb12413f947f9388e4cac22c4621ce/sortedcontainers-2.4.0-py2.py3-none-any.whl + name: sortedcontainers + version: 2.4.0 + sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl + name: tabulate + version: 0.10.0 + sha256: f0b0622e567335c8fabaaa659f1b33bcb6ddfe2e496071b743aa113f8774f2d3 + requires_dist: + - wcwidth ; extra == 'widechars' + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/d7/c1/eb8f9debc45d3b7918a32ab756658a0904732f75e555402972246b0b8e71/tenacity-9.1.4-py3-none-any.whl + name: tenacity + version: 9.1.4 + sha256: 6095a360c919085f28c6527de529e76a06ad89b23659fa881ae0649b867a9d55 + requires_dist: + - reno ; extra == 'doc' + - sphinx ; extra == 'doc' + - pytest ; extra == 'test' + - tornado>=4.5 ; extra == 'test' + - typeguard ; extra == 'test' + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda sha256: cafeec44494f842ffeca27e9c8b0c27ed714f93ac77ddadc6aaf726b5554ebac md5: cffd3bdd58090148f4cfcd831f4b26ab @@ -1945,6 +1710,31 @@ packages: purls: [] size: 3301196 timestamp: 1769460227866 +- pypi: https://files.pythonhosted.org/packages/b2/04/7b5705d5b3c0fab088f434f9c83edac1573830ca49ccf29fb83bf7178eec/tornado-6.5.5-cp39-abi3-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: tornado + version: 6.5.5 + sha256: e74c92e8e65086b338fd56333fb9a68b9f6f2fe7ad532645a290a464bcf46be5 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/4a/91/48db081e7a63bb37284f9fbcefda7c44c277b18b0e13fbc36ea2335b71e6/typer-0.24.1-py3-none-any.whl + name: typer + version: 0.24.1 + sha256: 112c1f0ce578bfb4cab9ffdabc68f031416ebcc216536611ba21f04e9aa84c9e + requires_dist: + - click>=8.2.1 + - shellingham>=1.3.0 + - rich>=12.3.0 + - annotated-doc>=0.0.2 + requires_python: '>=3.10' +- pypi: https://files.pythonhosted.org/packages/18/67/36e9267722cc04a6b9f15c7f3441c2363321a3ea07da7ae0c0707beb2a9c/typing_extensions-4.15.0-py3-none-any.whl + name: typing-extensions + version: 4.15.0 + sha256: f0fa19c6845758ab08074a0cfa8b7aecb71c999ca73d62883bc25cc018c4e548 + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/b0/70/d460bd685a170790ec89317e9bd33047988e4bce507b831f5db771e142de/tzdata-2026.1-py2.py3-none-any.whl + name: tzdata + version: '2026.1' + sha256: 4b1d2be7ac37ceafd7327b961aa3a54e467efbdb563a23655fbfe0d39cfc42a9 + requires_python: '>=2' - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda sha256: 1d30098909076af33a35017eed6f2953af1c769e273a0626a04722ac4acaba3c md5: ad659d0a2b3e47e38d829aa8cad2d610 @@ -1952,6 +1742,39 @@ packages: purls: [] size: 119135 timestamp: 1767016325805 +- pypi: https://files.pythonhosted.org/packages/39/08/aaaad47bc4e9dc8c725e68f9d04865dbcb2052843ff09c97b08904852d84/urllib3-2.6.3-py3-none-any.whl + name: urllib3 + version: 2.6.3 + sha256: bf272323e553dfb2e87d9bfd225ca7b0f467b919d7bbd355436d3fd37cb0acd4 + requires_dist: + - brotli>=1.2.0 ; platform_python_implementation == 'CPython' and extra == 'brotli' + - brotlicffi>=1.2.0.0 ; platform_python_implementation != 'CPython' and extra == 'brotli' + - h2>=4,<5 ; extra == 'h2' + - pysocks>=1.5.6,!=1.5.7,<2.0 ; extra == 'socks' + - backports-zstd>=1.0.0 ; python_full_version < '3.14' and extra == 'zstd' + requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/8a/ca/0864176a649838b838f36d44bf31c451597ab363b60dc9e09c9630619d41/uvloop-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + name: uvloop + version: 0.21.0 + sha256: 8a375441696e2eda1c43c44ccb66e04d61ceeffcd76e4929e527b7fa401b90fb + requires_dist: + - setuptools>=60 ; extra == 'dev' + - cython~=3.0 ; extra == 'dev' + - sphinx~=4.1.2 ; extra == 'docs' + - sphinxcontrib-asyncio~=0.3.0 ; extra == 'docs' + - sphinx-rtd-theme~=0.5.2 ; extra == 'docs' + - aiohttp>=3.10.5 ; extra == 'test' + - flake8~=5.0 ; extra == 'test' + - psutil ; extra == 'test' + - pycodestyle~=2.9.0 ; extra == 'test' + - pyopenssl~=23.0.0 ; extra == 'test' + - mypy>=0.800 ; extra == 'test' + requires_python: '>=3.8.0' +- pypi: https://files.pythonhosted.org/packages/5d/8f/a32a99fc03e4b37e31b57cb9cefc65050ea08147a8ce12f288616b05ef54/wrapt-1.17.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl + name: wrapt + version: 1.17.3 + sha256: b32888aad8b6e68f83a8fdccbf3165f5469702a7544472bdf41f582970ed3311 + requires_python: '>=3.8' - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda sha256: c12396aabb21244c212e488bbdc4abcdef0b7404b15761d9329f5a4a39113c4b md5: fb901ff28063514abb6046c9ec2c4a45 @@ -2102,17 +1925,20 @@ packages: purls: [] size: 32808 timestamp: 1727964811275 -- conda: https://conda.anaconda.org/conda-forge/linux-64/zlib-1.3.2-h25fd6f3_2.conda - sha256: 245c9ee8d688e23661b95e3c6dd7272ca936fabc03d423cdb3cdee1bbcf9f2f2 - md5: c2a01a08fc991620a74b32420e97868a - depends: - - __glibc >=2.17,<3.0.a0 - - libzlib 1.3.2 h25fd6f3_2 - license: Zlib - license_family: Other - purls: [] - size: 95931 - timestamp: 1774072620848 +- pypi: https://files.pythonhosted.org/packages/a8/a9/d23012099dc88ec69a29c6407b41d89681cb674c2043cd5b467c7e299c08/xyzservices-2026.3.0-py3-none-any.whl + name: xyzservices + version: 2026.3.0 + sha256: 503183d4b322bfebc3c50cdd21192aa3e81e36c5efbf9133d54ae82143e0576b + requires_python: '>=3.8' +- pypi: https://files.pythonhosted.org/packages/9a/64/c53487d9f4968045b8afa51aed7ca44f58b2589e772f32745f3744476c82/yarl-1.23.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + name: yarl + version: 1.23.0 + sha256: 99c8a9ed30f4164bc4c14b37a90208836cbf50d4ce2a57c71d0f52c7fb4f7598 + requires_dist: + - idna>=2.0 + - multidict>=4.0 + - propcache>=0.2.1 + requires_python: '>=3.10' - conda: https://conda.anaconda.org/conda-forge/linux-64/zstd-1.5.7-hb78ec9c_6.conda sha256: 68f0206ca6e98fea941e5717cec780ed2873ffabc0e1ed34428c061e2c6268c7 md5: 4a13eeac0b5c8e5b8ab496e6c4ddd829 diff --git a/spark-on-slurm/pixi.toml b/spark-on-slurm/pixi.toml index d313f55..8806973 100644 --- a/spark-on-slurm/pixi.toml +++ b/spark-on-slurm/pixi.toml @@ -6,9 +6,16 @@ platforms = ["linux-64"] version = "0.1.0" [tasks] -sparkhpc-example = "python sparkhpc/run_example.py" +install-sparkhpc= "pip install -e sparkhpc" +sparkhpc-validate = "python examples/validate_spark.py" +sparkhpc-pi = "sparkcluster start 2 && python examples/pi_counter.py" +sparkhpc-hail = "sparkcluster start 2 && sleep 10 && python examples/simulate_gwas_by_hail.py" [dependencies] python = "3.11.*" openjdk = "==17.0.18" -pyspark = ">=4.1.1,<5" + +[pypi-dependencies] +pip = ">=26.0.1, <27" +hail = "==0.2.137" +pyspark = ">=3.5.8, <4" diff --git a/spark-on-slurm/sparkhpc/sparkhpc/sparkjob.py b/spark-on-slurm/sparkhpc/sparkhpc/sparkjob.py index 246376b..ce44f72 100644 --- a/spark-on-slurm/sparkhpc/sparkhpc/sparkjob.py +++ b/spark-on-slurm/sparkhpc/sparkhpc/sparkjob.py @@ -81,10 +81,33 @@ def _resolve_spark_home(explicit_spark_home=None): try: import pyspark - pyspark_home = os.path.dirname(pyspark.__file__) - if os.path.exists(pyspark_home): - return pyspark_home - except Exception: + pyspark_module = os.path.dirname(pyspark.__file__) + + # Check if pyspark has jars directory (typical for pip/conda/pixi installations) + if os.path.exists(os.path.join(pyspark_module, 'jars')): + return pyspark_module + + # For traditional Spark distributions, try to find the root + # pyspark is at /path/to/spark/python/pyspark or /path/to/spark/lib/python/pyspark + # Try going up to find a directory with bin/spark-submit and jars/ + site_packages = os.path.dirname(pyspark_module) + python_lib = os.path.dirname(site_packages) + lib_dir = os.path.dirname(python_lib) + conda_env_root = os.path.dirname(lib_dir) + + # Check if environment root has spark binaries + if os.path.exists(os.path.join(conda_env_root, 'bin', 'spark-submit')): + if os.path.exists(os.path.join(conda_env_root, 'jars')): + return conda_env_root + if os.path.exists(os.path.join(conda_env_root, 'bin', 'spark-class')): + return conda_env_root + + # Fallback: check parent directory (for non-standard layouts) + parent = os.path.dirname(conda_env_root) + if os.path.exists(os.path.join(parent, 'bin', 'spark-submit')): + return parent + + except Exception as e: pass return os.path.join(os.path.expanduser('~'), 'spark') @@ -148,7 +171,8 @@ def __init__(self, spark_home=None, master_log_dir=None, master_log_filename='spark_master.out', - scheduler=None): + scheduler=None, + partition=None): """ Creates a SparkJob @@ -187,6 +211,8 @@ def __init__(self, scheduler: string specify manually which scheduler you want to use; usually the automatic determination will work fine so this should not be used + partition: string + SLURM partition to submit the job to (e.g., 'gpu', 'cpu', 'long', etc.) Example usage: @@ -243,7 +269,8 @@ def __init__(self, 'master_log_filename': master_log_filename, 'scheduler': scheduler, 'workdir': os.getcwd(), - 'extra_scheduler_options': extra_scheduler_options + 'extra_scheduler_options': extra_scheduler_options, + 'partition': partition } signal.signal(signal.SIGINT, self._sigint_handler) @@ -357,11 +384,24 @@ def submit(self): if self.template is None: template_file = templates[self.__class__] - template_str = resources.files('sparkhpc').joinpath('templates', template_file).read_text() + # Try to get template from package resources first (for installed packages) + try: + template_str = resources.files('sparkhpc').joinpath('templates').joinpath(template_file).read_text() + except (FileNotFoundError, TypeError, AttributeError): + # Fallback for development versions: use file path relative to this module + template_dir = os.path.join(os.path.dirname(__file__), 'templates') + template_path = os.path.join(template_dir, template_file) + with open(template_path) as f: + template_str = f.read() else : with open(self.template) as template_file: template_str = template_file.read() + # Construct partition directive + partition_directive = "" + if self.partition: + partition_directive = "#SBATCH -p {partition}".format(partition=self.partition) + job = template_str.format(walltime=self.walltime, ncores=self.ncores, cores_per_executor=self.cores_per_executor, @@ -372,7 +412,8 @@ def submit(self): spark_home=self.spark_home, master_log_dir=self.master_log_dir, master_log_filename=self.master_log_filename, - extra_scheduler_options=self.extra_scheduler_options) + extra_scheduler_options=self.extra_scheduler_options, + partition=partition_directive) with open('job', 'w') as jobfile: jobfile.write(job) diff --git a/spark-on-slurm/sparkhpc/sparkhpc/templates/sparkjob.slurm.template b/spark-on-slurm/sparkhpc/sparkhpc/templates/sparkjob.slurm.template index ebe34e9..7a640b2 100755 --- a/spark-on-slurm/sparkhpc/sparkhpc/templates/sparkjob.slurm.template +++ b/spark-on-slurm/sparkhpc/sparkhpc/templates/sparkjob.slurm.template @@ -5,8 +5,9 @@ #SBATCH -n {number_of_executors:d} # requesting n tasks #SBATCH -c {cores_per_executor:d} #SBATCH --mem-per-cpu={memory_per_core:d} -#SBATCH -N {number_of_executors:d} +#SBATCH -N 1 # number of nodes #SBATCH --ntasks-per-core=1 +{partition} # setup the spark paths import os From 49c6f9d4ee961f6cc6d841af3f3d5d866de3f5ed Mon Sep 17 00:00:00 2001 From: nttg8100 Date: Thu, 9 Apr 2026 23:06:09 +0700 Subject: [PATCH 2/8] chore: add spark slurm to readme --- Readme.md | 1 + 1 file changed, 1 insertion(+) diff --git a/Readme.md b/Readme.md index 6e235c3..1ce4921 100644 --- a/Readme.md +++ b/Readme.md @@ -3,3 +3,4 @@ Genomics Kit integrates the utilities for bioinformatics analysis 1. [igv-report](./igv-report): Generate the IGV report html format +2. [spark-on-slurm](./spark-on-slurm/): Spark on SLURM cluster configuration From f5e26518a947c7c7714e00eaba70c48800ac59cf Mon Sep 17 00:00:00 2001 From: nttg8100 Date: Thu, 9 Apr 2026 23:21:37 +0700 Subject: [PATCH 3/8] fix: install sparkhpc --- spark-on-slurm/Makefile | 2 +- spark-on-slurm/pixi.toml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/spark-on-slurm/Makefile b/spark-on-slurm/Makefile index 1e1afcd..2051f83 100644 --- a/spark-on-slurm/Makefile +++ b/spark-on-slurm/Makefile @@ -39,7 +39,7 @@ install: test: ${HOME}/.pixi/bin/pixi start-slurm get-slurm docker exec \ -w /tmp/spark \ - slurm-dev /root/.pixi/bin/pixi run sparkhpc-hail + slurm-dev bash -c "/root/.pixi/bin/pixi run install && /root/.pixi/bin/pixi run sparkhpc-hail" test-slurm-local: ${HOME}/.pixi/bin/pixi run sparkhpc-example diff --git a/spark-on-slurm/pixi.toml b/spark-on-slurm/pixi.toml index 8806973..46986bc 100644 --- a/spark-on-slurm/pixi.toml +++ b/spark-on-slurm/pixi.toml @@ -6,7 +6,7 @@ platforms = ["linux-64"] version = "0.1.0" [tasks] -install-sparkhpc= "pip install -e sparkhpc" +install = "pip install -e sparkhpc" sparkhpc-validate = "python examples/validate_spark.py" sparkhpc-pi = "sparkcluster start 2 && python examples/pi_counter.py" sparkhpc-hail = "sparkcluster start 2 && sleep 10 && python examples/simulate_gwas_by_hail.py" From 2df7ddbbea4bf94dfac7e7257a6744735901a5f7 Mon Sep 17 00:00:00 2001 From: nttg8100 Date: Thu, 9 Apr 2026 23:35:11 +0700 Subject: [PATCH 4/8] chore: add bash history to gitignore --- spark-on-slurm/.bash_history | 6 ------ spark-on-slurm/.gitignore | 3 ++- 2 files changed, 2 insertions(+), 7 deletions(-) delete mode 100644 spark-on-slurm/.bash_history diff --git a/spark-on-slurm/.bash_history b/spark-on-slurm/.bash_history deleted file mode 100644 index 5bc9a2a..0000000 --- a/spark-on-slurm/.bash_history +++ /dev/null @@ -1,6 +0,0 @@ -squeue -sinfo -ls -cd -ls -make example diff --git a/spark-on-slurm/.gitignore b/spark-on-slurm/.gitignore index 04dd98e..bb5a52a 100644 --- a/spark-on-slurm/.gitignore +++ b/spark-on-slurm/.gitignore @@ -3,4 +3,5 @@ sparkcluster* .cache spark_master.out job -*.log \ No newline at end of file +*.log +.bash_history \ No newline at end of file From b5c619b5827a1dc61f2258248573061a8ae1bea6 Mon Sep 17 00:00:00 2001 From: nttg8100 Date: Thu, 9 Apr 2026 23:38:48 +0700 Subject: [PATCH 5/8] fix: install editable sparkhpc --- spark-on-slurm/pixi.lock | 64 ++++++++++++++++++++++++++++++++-------- spark-on-slurm/pixi.toml | 5 ++-- 2 files changed, 55 insertions(+), 14 deletions(-) diff --git a/spark-on-slurm/pixi.lock b/spark-on-slurm/pixi.lock index 77bd0d3..565541d 100644 --- a/spark-on-slurm/pixi.lock +++ b/spark-on-slurm/pixi.lock @@ -58,13 +58,17 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjdk-17.0.18-ha668962_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.15-hd63d673_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda + - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda @@ -124,11 +128,9 @@ environments: - pypi: https://files.pythonhosted.org/packages/cf/c5/9fcb7e0e69cef59cf10c746b84f7d58b08bc66a6b7d459783c5a4f6101a6/numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f8/fc/55e667ec9c85694038fcff00573d221b085d50777368ee3d77f38668bf3c/orjson-3.11.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f1/a9/a10a10f12e50993b5a3568a1a90fd70b85f83edc451875d312bf60cd39b8/parsimonious-0.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - - pypi: https://files.pythonhosted.org/packages/de/f0/c81e05b613866b76d2d1066490adf1a3dbc4ee9d9c839961c3fc8a6997af/pip-26.0.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e5/ae/580600f441f6fc05218bd6c9d5794f4aef072a7d9093b291f1c50a9db8bc/plotly-5.24.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/52/6a/57f43e054fb3d3a56ac9fc532bc684fc6169a26c75c353e65425b3e56eef/propcache-0.4.1-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/bd/db/ea0203e495be491c85af87b66e37acfd3bf756fd985f87e46fc5e3bf022c/py4j-0.10.9.9-py2.py3-none-any.whl @@ -1247,11 +1249,18 @@ packages: version: 3.11.8 sha256: 5f8952d6d2505c003e8f0224ff7858d341fa4e33fef82b91c4ff0ef070f2393c requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - name: packaging - version: '26.0' - sha256: b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 - requires_python: '>=3.8' +- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda + sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 + md5: b76541e68fea4d511b1ac46a28dcd2c6 + depends: + - python >=3.8 + - python + license: Apache-2.0 + license_family: APACHE + purls: + - pkg:pypi/packaging?source=compressed-mapping + size: 72010 + timestamp: 1769093650580 - pypi: https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl name: pandas version: 2.3.3 @@ -1395,11 +1404,19 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' -- pypi: https://files.pythonhosted.org/packages/de/f0/c81e05b613866b76d2d1066490adf1a3dbc4ee9d9c839961c3fc8a6997af/pip-26.0.1-py3-none-any.whl - name: pip - version: 26.0.1 - sha256: bdb1b08f4274833d62c1aa29e20907365a2ceb950410df15fc9521bad440122b - requires_python: '>=3.9' +- conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda + sha256: 8e1497814a9997654ed7990a79c054ea5a42545679407acbc6f7e809c73c9120 + md5: 67bdec43082fd8a9cffb9484420b39a2 + depends: + - python >=3.10,<3.13.0a0 + - setuptools + - wheel + license: MIT + license_family: MIT + purls: + - pkg:pypi/pip?source=compressed-mapping + size: 1181790 + timestamp: 1770270305795 - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda sha256: 43d37bc9ca3b257c5dd7bf76a8426addbdec381f6786ff441dc90b1a49143b6a md5: c01af13bdc553d1a8fbfff6e8db075f0 @@ -1664,6 +1681,17 @@ packages: - ruff>=0.12.0 ; extra == 'dev' - cython-lint>=0.12.2 ; extra == 'dev' requires_python: '>=3.11' +- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda + sha256: 82088a6e4daa33329a30bc26dc19a98c7c1d3f05c0f73ce9845d4eab4924e9e1 + md5: 8e194e7b992f99a5015edbd4ebd38efd + depends: + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/setuptools?source=compressed-mapping + size: 639697 + timestamp: 1773074868565 - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl name: shellingham version: 1.5.4 @@ -1770,6 +1798,18 @@ packages: - pyopenssl~=23.0.0 ; extra == 'test' - mypy>=0.800 ; extra == 'test' requires_python: '>=3.8.0' +- conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda + sha256: d6cf2f0ebd5e09120c28ecba450556ce553752652d91795442f0e70f837126ae + md5: bdbd7385b4a67025ac2dba4ef8cb6a8f + depends: + - packaging >=24.0 + - python >=3.10 + license: MIT + license_family: MIT + purls: + - pkg:pypi/wheel?source=hash-mapping + size: 31858 + timestamp: 1769139207397 - pypi: https://files.pythonhosted.org/packages/5d/8f/a32a99fc03e4b37e31b57cb9cefc65050ea08147a8ce12f288616b05ef54/wrapt-1.17.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl name: wrapt version: 1.17.3 diff --git a/spark-on-slurm/pixi.toml b/spark-on-slurm/pixi.toml index 46986bc..1fafd93 100644 --- a/spark-on-slurm/pixi.toml +++ b/spark-on-slurm/pixi.toml @@ -6,7 +6,8 @@ platforms = ["linux-64"] version = "0.1.0" [tasks] -install = "pip install -e sparkhpc" +install = "python -m pip install -e sparkhpc" +install-sparkhpc = "python -m pip install -e sparkhpc" sparkhpc-validate = "python examples/validate_spark.py" sparkhpc-pi = "sparkcluster start 2 && python examples/pi_counter.py" sparkhpc-hail = "sparkcluster start 2 && sleep 10 && python examples/simulate_gwas_by_hail.py" @@ -14,8 +15,8 @@ sparkhpc-hail = "sparkcluster start 2 && sleep 10 && python examples/simulate_gw [dependencies] python = "3.11.*" openjdk = "==17.0.18" +pip = ">=26.0.1" [pypi-dependencies] -pip = ">=26.0.1, <27" hail = "==0.2.137" pyspark = ">=3.5.8, <4" From d08a95012d03c03255419240c7f055ec77ceaed2 Mon Sep 17 00:00:00 2001 From: nttg8100 Date: Thu, 9 Apr 2026 23:52:02 +0700 Subject: [PATCH 6/8] fix: install editable sparkhpc --- spark-on-slurm/Makefile | 2 +- spark-on-slurm/pixi.toml | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/spark-on-slurm/Makefile b/spark-on-slurm/Makefile index 2051f83..1e1afcd 100644 --- a/spark-on-slurm/Makefile +++ b/spark-on-slurm/Makefile @@ -39,7 +39,7 @@ install: test: ${HOME}/.pixi/bin/pixi start-slurm get-slurm docker exec \ -w /tmp/spark \ - slurm-dev bash -c "/root/.pixi/bin/pixi run install && /root/.pixi/bin/pixi run sparkhpc-hail" + slurm-dev /root/.pixi/bin/pixi run sparkhpc-hail test-slurm-local: ${HOME}/.pixi/bin/pixi run sparkhpc-example diff --git a/spark-on-slurm/pixi.toml b/spark-on-slurm/pixi.toml index 1fafd93..ebb9233 100644 --- a/spark-on-slurm/pixi.toml +++ b/spark-on-slurm/pixi.toml @@ -7,10 +7,9 @@ version = "0.1.0" [tasks] install = "python -m pip install -e sparkhpc" -install-sparkhpc = "python -m pip install -e sparkhpc" sparkhpc-validate = "python examples/validate_spark.py" -sparkhpc-pi = "sparkcluster start 2 && python examples/pi_counter.py" -sparkhpc-hail = "sparkcluster start 2 && sleep 10 && python examples/simulate_gwas_by_hail.py" +sparkhpc-pi = "python sparkhpc/scripts/sparkcluster start 2 && python examples/pi_counter.py" +sparkhpc-hail = "python sparkhpc/scripts/sparkcluster start 2 && sleep 10 && python examples/simulate_gwas_by_hail.py" [dependencies] python = "3.11.*" From 0eb0ef3ecfacaf61007fe203de0be5448455c7d1 Mon Sep 17 00:00:00 2001 From: nttg8100 Date: Thu, 9 Apr 2026 23:58:24 +0700 Subject: [PATCH 7/8] fix: add local sparkhpc to pixi --- spark-on-slurm/pixi.lock | 71 +++++++++++----------------------------- spark-on-slurm/pixi.toml | 7 ++-- 2 files changed, 22 insertions(+), 56 deletions(-) diff --git a/spark-on-slurm/pixi.lock b/spark-on-slurm/pixi.lock index 565541d..420dad1 100644 --- a/spark-on-slurm/pixi.lock +++ b/spark-on-slurm/pixi.lock @@ -58,17 +58,13 @@ environments: - conda: https://conda.anaconda.org/conda-forge/linux-64/ncurses-6.5-h2d0b736_3.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openjdk-17.0.18-ha668962_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/openssl-3.6.2-h35e630c_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pcre2-10.47-haa7fec5_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/pthread-stubs-0.4-hb9d3cd8_1002.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/python-3.11.15-hd63d673_0_cpython.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/readline-8.3-h853b02a_0.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/tk-8.6.13-noxft_h366c992_103.conda - conda: https://conda.anaconda.org/conda-forge/noarch/tzdata-2025c-hc9c84f9_1.conda - - conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libice-1.1.2-hb9d3cd8_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libsm-1.2.6-he73a12e_0.conda - conda: https://conda.anaconda.org/conda-forge/linux-64/xorg-libx11-1.8.13-he1eb515_0.conda @@ -108,6 +104,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/ed/1b/72a1821152d07cf1d8b6fce298aeb06a7eb90f4d6d41acec9861e7cc6df0/decorator-4.4.2-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/6e/c6/ac0b6c1e2d138f1002bcf799d330bd6d85084fece321e662a14223794041/Deprecated-1.2.18-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/1e/77/dc8c558f7593132cf8fefec57c4f60c83b16941c574ac5f619abb3ae7933/dill-0.4.1-py3-none-any.whl + - pypi: https://files.pythonhosted.org/packages/a4/cb/7d2bb508f4ca00a043fd53e8156c11767799d3f534bf451a0942211d5def/findspark-2.0.1-py2.py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/11/b1/71a477adc7c36e5fb628245dfbdea2166feae310757dea848d02bd0689fd/frozenlist-1.8.0-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/e9/eb/c6c2478d8a8d633460be40e2a8a6f8f429171997a35a96f81d3b680dec83/google_auth-2.49.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/98/0e/bfc3d7de5d1788871d1be3e6862fe3e56d92b446909b7b032c373fc4ecab/google_auth_oauthlib-0.8.0-py2.py3-none-any.whl @@ -128,6 +125,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/cf/c5/9fcb7e0e69cef59cf10c746b84f7d58b08bc66a6b7d459783c5a4f6101a6/numpy-2.4.4-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/be/9c/92789c596b8df838baa98fa71844d84283302f7604ed565dafe5a6b5041a/oauthlib-3.3.1-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/f8/fc/55e667ec9c85694038fcff00573d221b085d50777368ee3d77f38668bf3c/orjson-3.11.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl + - pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl - pypi: https://files.pythonhosted.org/packages/f1/a9/a10a10f12e50993b5a3568a1a90fd70b85f83edc451875d312bf60cd39b8/parsimonious-0.11.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/e9/bd/e51a61b1054f09437acfbc2ff9106c30d1eb76bc1453d428399946781253/pillow-12.2.0-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl @@ -165,6 +163,7 @@ environments: - pypi: https://files.pythonhosted.org/packages/5d/8f/a32a99fc03e4b37e31b57cb9cefc65050ea08147a8ce12f288616b05ef54/wrapt-1.17.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl - pypi: https://files.pythonhosted.org/packages/a8/a9/d23012099dc88ec69a29c6407b41d89681cb674c2043cd5b467c7e299c08/xyzservices-2026.3.0-py3-none-any.whl - pypi: https://files.pythonhosted.org/packages/9a/64/c53487d9f4968045b8afa51aed7ca44f58b2589e772f32745f3744476c82/yarl-1.23.0-cp311-cp311-manylinux2014_x86_64.manylinux_2_17_x86_64.manylinux_2_28_x86_64.whl + - pypi: ./sparkhpc packages: - conda: https://conda.anaconda.org/conda-forge/linux-64/_openmp_mutex-4.5-20_gnu.conda build_number: 20 @@ -497,6 +496,10 @@ packages: - objgraph>=1.7.2 ; extra == 'graph' - gprof2dot>=2022.7.29 ; extra == 'profile' requires_python: '>=3.9' +- pypi: https://files.pythonhosted.org/packages/a4/cb/7d2bb508f4ca00a043fd53e8156c11767799d3f534bf451a0942211d5def/findspark-2.0.1-py2.py3-none-any.whl + name: findspark + version: 2.0.1 + sha256: e5d5415ff8ced6b173b801e12fc90c1eefca1fb6bf9c19c4fc1f235d4222e753 - conda: https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2 sha256: 58d7f40d2940dd0a8aa28651239adbf5613254df0f75789919c4e6762054403b md5: 0c96522c6bdaed4b1566d11387caaf45 @@ -1249,18 +1252,11 @@ packages: version: 3.11.8 sha256: 5f8952d6d2505c003e8f0224ff7858d341fa4e33fef82b91c4ff0ef070f2393c requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/noarch/packaging-26.0-pyhcf101f3_0.conda - sha256: c1fc0f953048f743385d31c468b4a678b3ad20caffdeaa94bed85ba63049fd58 - md5: b76541e68fea4d511b1ac46a28dcd2c6 - depends: - - python >=3.8 - - python - license: Apache-2.0 - license_family: APACHE - purls: - - pkg:pypi/packaging?source=compressed-mapping - size: 72010 - timestamp: 1769093650580 +- pypi: https://files.pythonhosted.org/packages/b7/b9/c538f279a4e237a006a2c98387d081e9eb060d203d8ed34467cc0f0b9b53/packaging-26.0-py3-none-any.whl + name: packaging + version: '26.0' + sha256: b36f1fef9334a5588b4166f8bcd26a14e521f2b55e6b9de3aaa80d3ff7a37529 + requires_python: '>=3.8' - pypi: https://files.pythonhosted.org/packages/bf/c9/63f8d545568d9ab91476b1818b4741f521646cbdd151c6efebf40d6de6f7/pandas-2.3.3-cp311-cp311-manylinux_2_24_x86_64.manylinux_2_28_x86_64.whl name: pandas version: 2.3.3 @@ -1404,19 +1400,6 @@ packages: - trove-classifiers>=2024.10.12 ; extra == 'tests' - defusedxml ; extra == 'xmp' requires_python: '>=3.10' -- conda: https://conda.anaconda.org/conda-forge/noarch/pip-26.0.1-pyh8b19718_0.conda - sha256: 8e1497814a9997654ed7990a79c054ea5a42545679407acbc6f7e809c73c9120 - md5: 67bdec43082fd8a9cffb9484420b39a2 - depends: - - python >=3.10,<3.13.0a0 - - setuptools - - wheel - license: MIT - license_family: MIT - purls: - - pkg:pypi/pip?source=compressed-mapping - size: 1181790 - timestamp: 1770270305795 - conda: https://conda.anaconda.org/conda-forge/linux-64/pixman-0.46.4-h54a6638_1.conda sha256: 43d37bc9ca3b257c5dd7bf76a8426addbdec381f6786ff441dc90b1a49143b6a md5: c01af13bdc553d1a8fbfff6e8db075f0 @@ -1681,17 +1664,6 @@ packages: - ruff>=0.12.0 ; extra == 'dev' - cython-lint>=0.12.2 ; extra == 'dev' requires_python: '>=3.11' -- conda: https://conda.anaconda.org/conda-forge/noarch/setuptools-82.0.1-pyh332efcf_0.conda - sha256: 82088a6e4daa33329a30bc26dc19a98c7c1d3f05c0f73ce9845d4eab4924e9e1 - md5: 8e194e7b992f99a5015edbd4ebd38efd - depends: - - python >=3.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/setuptools?source=compressed-mapping - size: 639697 - timestamp: 1773074868565 - pypi: https://files.pythonhosted.org/packages/e0/f9/0595336914c5619e5f28a1fb793285925a8cd4b432c9da0a987836c7f822/shellingham-1.5.4-py2.py3-none-any.whl name: shellingham version: 1.5.4 @@ -1706,6 +1678,13 @@ packages: name: sortedcontainers version: 2.4.0 sha256: a163dcaede0f1c021485e957a39245190e74249897e2ae4b2aa38595db237ee0 +- pypi: ./sparkhpc + name: sparkhpc + version: 0.3.post4 + sha256: e04b7a91a93671f75bd1ce0cb032d4e8d5911a8a97acaea1ec8f77bbbf55d49b + requires_dist: + - click + - findspark - pypi: https://files.pythonhosted.org/packages/99/55/db07de81b5c630da5cbf5c7df646580ca26dfaefa593667fc6f2fe016d2e/tabulate-0.10.0-py3-none-any.whl name: tabulate version: 0.10.0 @@ -1798,18 +1777,6 @@ packages: - pyopenssl~=23.0.0 ; extra == 'test' - mypy>=0.800 ; extra == 'test' requires_python: '>=3.8.0' -- conda: https://conda.anaconda.org/conda-forge/noarch/wheel-0.46.3-pyhd8ed1ab_0.conda - sha256: d6cf2f0ebd5e09120c28ecba450556ce553752652d91795442f0e70f837126ae - md5: bdbd7385b4a67025ac2dba4ef8cb6a8f - depends: - - packaging >=24.0 - - python >=3.10 - license: MIT - license_family: MIT - purls: - - pkg:pypi/wheel?source=hash-mapping - size: 31858 - timestamp: 1769139207397 - pypi: https://files.pythonhosted.org/packages/5d/8f/a32a99fc03e4b37e31b57cb9cefc65050ea08147a8ce12f288616b05ef54/wrapt-1.17.3-cp311-cp311-manylinux1_x86_64.manylinux_2_28_x86_64.manylinux_2_5_x86_64.whl name: wrapt version: 1.17.3 diff --git a/spark-on-slurm/pixi.toml b/spark-on-slurm/pixi.toml index ebb9233..be438ea 100644 --- a/spark-on-slurm/pixi.toml +++ b/spark-on-slurm/pixi.toml @@ -6,16 +6,15 @@ platforms = ["linux-64"] version = "0.1.0" [tasks] -install = "python -m pip install -e sparkhpc" sparkhpc-validate = "python examples/validate_spark.py" -sparkhpc-pi = "python sparkhpc/scripts/sparkcluster start 2 && python examples/pi_counter.py" -sparkhpc-hail = "python sparkhpc/scripts/sparkcluster start 2 && sleep 10 && python examples/simulate_gwas_by_hail.py" +sparkhpc-pi = "sparkcluster start 2 && python examples/pi_counter.py" +sparkhpc-hail = "sparkcluster start 2 && sleep 10 && python examples/simulate_gwas_by_hail.py" [dependencies] python = "3.11.*" openjdk = "==17.0.18" -pip = ">=26.0.1" [pypi-dependencies] hail = "==0.2.137" pyspark = ">=3.5.8, <4" +sparkhpc = { path = "./sparkhpc", editable = true } \ No newline at end of file From 4416e7b19df47e74b8161653576e32d1726ceb77 Mon Sep 17 00:00:00 2001 From: nttg8100 Date: Fri, 10 Apr 2026 00:04:03 +0700 Subject: [PATCH 8/8] fix: spark cluster --- spark-on-slurm/.gitignore | 2 +- spark-on-slurm/sparkhpc/scripts/sparkcluster | 104 +++++++++++++++++++ 2 files changed, 105 insertions(+), 1 deletion(-) create mode 100755 spark-on-slurm/sparkhpc/scripts/sparkcluster diff --git a/spark-on-slurm/.gitignore b/spark-on-slurm/.gitignore index bb5a52a..6246335 100644 --- a/spark-on-slurm/.gitignore +++ b/spark-on-slurm/.gitignore @@ -1,4 +1,4 @@ -sparkcluster* +sparkcluster-.*log .spark* .cache spark_master.out diff --git a/spark-on-slurm/sparkhpc/scripts/sparkcluster b/spark-on-slurm/sparkhpc/scripts/sparkcluster new file mode 100755 index 0000000..9a3e676 --- /dev/null +++ b/spark-on-slurm/sparkhpc/scripts/sparkcluster @@ -0,0 +1,104 @@ +#!/bin/env python +# +# +# CLI for starting and running Spark standalone clusters on HPC resources +# +# + +from __future__ import print_function +import click +import sparkhpc +from sparkhpc import sparkjob +import subprocess +import os +import logging + +logging.basicConfig(level=logging.INFO) +logger = logging.getLogger('sparkhpc') + +home = os.path.expanduser('~') + +SCHEDULER = sparkjob.get_scheduler() + +@click.group() +def cli(): + pass + +@cli.command() +@click.argument('ncores', type=int) +@click.option('--walltime', default="00:30", help="Walltime in HH:MM format") +@click.option('--jobname', default='sparkcluster', help='Name to use for the job') +@click.option('--template', default=None, help='Job template path') +@click.option('--memory-per-executor', default=2000, envvar='SPARK_EXECUTOR_MEMORY', + help='Memory to reserve for each executor (i.e. the JVM) in MB') +@click.option('--memory-per-core', default=2000, + help='Memory per core to request from scheduler in MB') +@click.option('--cores-per-executor', default=1, + help='Cores per executor') +@click.option('--spark-home', default=None, envvar='SPARK_HOME', + help='Location of the Spark distribution') +@click.option('--partition', default=None, + help='SLURM partition to submit job to') +@click.option('--wait', default=False, is_flag=True, help='Wait until the job starts') +def start(ncores, + walltime, + jobname, + template, + memory_per_executor, + memory_per_core, + cores_per_executor, + spark_home, + partition, + wait): + """Start the spark cluster as a batch job""" + + sj = sparkjob.sparkjob(ncores=ncores, + walltime=walltime, + jobname=jobname, + template=template, + memory_per_core=memory_per_core, + memory_per_executor=memory_per_executor, + cores_per_executor=cores_per_executor, + spark_home=spark_home, + partition=partition) + + if wait: + logger.info(' Waiting for job to start - ctrl-c to stop') + sj.wait_to_start() + else: + sj.submit() + + +@cli.command() +def info(): + """Get info about currently running clusters""" + sparkhpc.show_clusters() + + +@cli.command() +@click.argument('clusterid') +def stop(clusterid): + """Kill a currently running cluster ('all' to kill all clusters)""" + sjs = sparkjob.sparkjob().current_clusters() + + if clusterid == 'all': + if len(sjs) == 0: + logger.info(' No clusters running') + for sj in sjs: + sj.stop() + elif int(clusterid) < len(sjs): + sjs[int(clusterid)].stop() + else: + raise RuntimeError('Cluster %s does not exist'%clusterid) + + +@cli.command() +@click.option('--memory', default='2000M', help='Memory for each executor using a Java memory string') +@click.option('--timeout', default=30, help='Timeout for starting spark master') +@click.option('--cores-per-executor', default=1, help='Number of cores per executor') +def launch(memory, timeout, cores_per_executor): + """Launch the Spark master and workers within a current job context""" + sparkjob.start_cluster(memory, timeout=timeout, cores_per_executor=cores_per_executor) + +if __name__ == "__main__": + cli()