Skip to content

CI add codecov to GitHub Action workflow #31941

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Open
wants to merge 8 commits into
base: main
Choose a base branch
from
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions .codecov.yml
Original file line number Diff line number Diff line change
Expand Up @@ -19,11 +19,9 @@ coverage:

codecov:
notify:
# Prevent coverage status to upload multiple times for parallel and long
# running CI pipelines. This configuration is particularly useful on PRs
# to avoid confusion. Note that this value is set to the number of Azure
# Pipeline jobs uploading coverage reports.
after_n_builds: 6
# Prevent codecov from calculating the coverage results before all expected uploads
# are in. This value is set to the total number of jobs uploading coverage reports.
after_n_builds: 7

ignore:
- "sklearn/externals"
Expand Down
17 changes: 17 additions & 0 deletions .github/workflows/unit-tests.yml
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ env:
VIRTUALENV: testvenv
TEST_DIR: ${{ github.workspace }}/tmp_folder
CCACHE_DIR: ${{ github.workspace }}/ccache
COVERAGE: 'true'

jobs:
lint:
Expand Down Expand Up @@ -80,3 +81,19 @@ jobs:

- name: Run tests
run: bash -l build_tools/azure/test_script.sh

- name: Combine coverage reports from parallel test runners
run: bash -l build_tools/azure/combine_coverage_reports.sh
if: ${{ env.COVERAGE == 'true' }}

- name: Upload coverage report to Codecov
uses: codecov/codecov-action@v5
Copy link
Member

@lesteve lesteve Aug 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I guess one thing to think about for potential reviewers is whether we are OK with using an external GitHub action. Full disclosure: a few years ago the Codecov uploader was compromised see this.

The only secret being exposed would be the Codecov token. I am not sure how much harm can be done with this token (upload fake coverage reports to Codecov sure but something else?).

An alternative would be to use our Azure script build_tools/azure/upload_coverage.shbuild_tools/azure/upload_codecov.sh but it would need to be adapted for GitHub, it uses Azure-specific BUILD_ environment variables.

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is the build_tools/azure/upload_codecov.sh file.

# TODO: should depend on whether we run the whole test suite (could be by adding
# && env.SELECTED_TESTS == '' as in build_tools/azure/posix.yml, or setting
# env.COVERAGE == 'false' before the "Run tests" step, so reports are not
# generated at all)
if: ${{ env.COVERAGE == 'true' }}
with:
files: ./coverage.xml
token: ${{ secrets.CODECOV_TOKEN }}
disable_search: true
4 changes: 2 additions & 2 deletions build_tools/azure/combine_coverage_reports.sh
Original file line number Diff line number Diff line change
Expand Up @@ -8,11 +8,11 @@ source build_tools/shared.sh
activate_environment

# Combine all coverage files generated by subprocesses workers such
# such as pytest-xdist and joblib/loky:
# as pytest-xdist and joblib/loky:
pushd $TEST_DIR
coverage combine --append
coverage xml
popd

# Copy the combined coverage file to the root of the repository:
cp $TEST_DIR/coverage.xml $BUILD_REPOSITORY_LOCALPATH
cp $TEST_DIR/coverage.xml .
Copy link
Member

@lesteve lesteve Aug 14, 2025

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Comment for potential other reviewers: BUILD_REPOSITORY_LOCALPATH is a Azure-specific environment variable that points where the scikit-learn root folder is located.

Maybe GitHub has an equivalent environment variable, but it feels slightly simpler to rely on the assumption that the current working directory is the same as the scikit-learn repo root folder.

7 changes: 4 additions & 3 deletions build_tools/azure/test_script.sh
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ if [[ "$COMMIT_MESSAGE" =~ \[float32\] ]]; then
export SKLEARN_RUN_FLOAT32_TESTS=1
fi

CHECKOUT_FOLDER=$PWD
mkdir -p $TEST_DIR
cp pyproject.toml $TEST_DIR
cd $TEST_DIR
Expand All @@ -42,19 +43,19 @@ show_installed_libraries
TEST_CMD="python -m pytest --showlocals --durations=20 --junitxml=$JUNITXML -o junit_family=legacy"

if [[ "$COVERAGE" == "true" ]]; then
# Note: --cov-report= is used to disable to long text output report in the
# Note: --cov-report= is used to disable too long text output report in the
# CI logs. The coverage data is consolidated by codecov to get an online
# web report across all the platforms so there is no need for this text
# report that otherwise hides the test failures and forces long scrolls in
# the CI logs.
export COVERAGE_PROCESS_START="$BUILD_SOURCESDIRECTORY/.coveragerc"
export COVERAGE_PROCESS_START="$CHECKOUT_FOLDER/.coveragerc"
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Similar comment as https://github.com/scikit-learn/scikit-learn/pull/31941/files#r2276870682. It feels slightly preferable to rely on the assumption that the current working directory is the scikit-learn repo root folder.


# Use sys.monitoring to make coverage faster for Python >= 3.12
HAS_SYSMON=$(python -c 'import sys; print(sys.version_info >= (3, 12))')
if [[ "$HAS_SYSMON" == "True" ]]; then
export COVERAGE_CORE=sysmon
fi
TEST_CMD="$TEST_CMD --cov-config='$COVERAGE_PROCESS_START' --cov sklearn --cov-report="
TEST_CMD="$TEST_CMD --cov-config='$COVERAGE_PROCESS_START' --cov=sklearn --cov-report="
Comment on lines -57 to +58
Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This diff was necessary to fix the order of the cli arguments.

For some reason, this was evaluated as TEST_CMD="$TEST_CMD --cov-config='$COVERAGE_PROCESS_START' --cov --cov-report= sklearn" when eval "$TEST_CMD" ran and thus not understood. With the = it works on azure and github actions.

fi

if [[ "$PYTEST_XDIST_VERSION" != "none" ]]; then
Expand Down
2 changes: 2 additions & 0 deletions build_tools/github/pymin_conda_forge_arm_environment.yml
Original file line number Diff line number Diff line change
Expand Up @@ -18,5 +18,7 @@ dependencies:
- pip
- ninja
- meson-python
- pytest-cov
- coverage
- pip
- ccache
41 changes: 22 additions & 19 deletions build_tools/github/pymin_conda_forge_arm_linux-aarch64_conda.lock
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
# Generated by conda-lock.
# platform: linux-aarch64
# input_hash: 65ab63a02fe14f8c9dbeef2b6146a37e4e618056639c3016b3ab926ce39c9994
# input_hash: 8eb842b860f2b03822d6d35414070c39f2efbb0f464d44310dc4696eec777227
@EXPLICIT
https://conda.anaconda.org/conda-forge/noarch/font-ttf-dejavu-sans-mono-2.37-hab24e00_0.tar.bz2#0c96522c6bdaed4b1566d11387caaf45
https://conda.anaconda.org/conda-forge/noarch/font-ttf-inconsolata-3.000-h77eed37_0.tar.bz2#34893075a5c9e55cdafac56607368fc6
Expand All @@ -19,13 +19,14 @@ https://conda.anaconda.org/conda-forge/linux-aarch64/libopengl-1.7.0-hd24410f_2.
https://conda.anaconda.org/conda-forge/noarch/fonts-conda-ecosystem-1-0.tar.bz2#fee5683a3f04bd15cbd8318b096a27ab
https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-15.1.0-he277a41_4.conda#56f856e779238c93320d265cc20d0191
https://conda.anaconda.org/conda-forge/linux-aarch64/alsa-lib-1.2.14-h86ecc28_0.conda#a696b24c1b473ecc4774bcb5a6ac6337
https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.3-h86ecc28_0.conda#e7df0aab10b9cbb73ab2a467ebfaf8c7
https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlicommon-1.1.0-h86ecc28_3.conda#76295055ce278970227759bdf3490827
https://conda.anaconda.org/conda-forge/linux-aarch64/libdeflate-1.24-he377734_0.conda#f0b3d6494663b3385bf87fc206d7451a
https://conda.anaconda.org/conda-forge/linux-aarch64/libexpat-2.7.1-hfae3067_0.conda#f75d19f3755461db2eb69401f5514f4c
https://conda.anaconda.org/conda-forge/linux-aarch64/libffi-3.4.6-he21f813_1.conda#15a131f30cae36e9a655ca81fee9a285
https://conda.anaconda.org/conda-forge/linux-aarch64/libgcc-ng-15.1.0-he9431aa_4.conda#fddaeda6653bf30779a821819152d567
https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran5-15.1.0-hbc25352_4.conda#15de59a896a538af7fafcd3d1f8c10c6
https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-hc99b53d_1.conda#81541d85a45fbf4d0a29346176f1f21c
https://conda.anaconda.org/conda-forge/linux-aarch64/libiconv-1.18-h90929bb_2.conda#5a86bf847b9b926f3a4f203339748d78
https://conda.anaconda.org/conda-forge/linux-aarch64/libjpeg-turbo-3.1.0-h86ecc28_0.conda#a689388210d502364b79e8b19e7fa2cb
https://conda.anaconda.org/conda-forge/linux-aarch64/liblzma-5.8.1-h86ecc28_2.conda#7d362346a479256857ab338588190da0
https://conda.anaconda.org/conda-forge/linux-aarch64/libnsl-2.0.1-h86ecc28_1.conda#d5d58b2dc3e57073fe22303f5fed4db7
Expand All @@ -34,15 +35,14 @@ https://conda.anaconda.org/conda-forge/linux-aarch64/libstdcxx-15.1.0-h3f4de04_4
https://conda.anaconda.org/conda-forge/linux-aarch64/libwebp-base-1.6.0-ha2e29f5_0.conda#24e92d0942c799db387f5c9d7b81f1af
https://conda.anaconda.org/conda-forge/linux-aarch64/libzlib-1.3.1-h86ecc28_2.conda#08aad7cbe9f5a6b460d0976076b6ae64
https://conda.anaconda.org/conda-forge/linux-aarch64/ncurses-6.5-ha32ae93_3.conda#182afabe009dc78d8b73100255ee6868
https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.5.1-hd08dc88_0.conda#cf2dfe9c774c20e65d42d87147903bdb
https://conda.anaconda.org/conda-forge/linux-aarch64/openssl-3.5.2-h8e36d6e_0.conda#ed060dc5bd1dc09e8df358fbba05d27c
https://conda.anaconda.org/conda-forge/linux-aarch64/pthread-stubs-0.4-h86ecc28_1002.conda#bb5a90c93e3bac3d5690acf76b4a6386
https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libice-1.1.2-h86ecc28_0.conda#c8d8ec3e00cd0fd8a231789b91a7c5b7
https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxau-1.0.12-h86ecc28_0.conda#d5397424399a66d33c80b1f2345a36a6
https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxdmcp-1.1.5-h57736b2_0.conda#25a5a7b797fe6e084e04ffe2db02fc62
https://conda.anaconda.org/conda-forge/linux-aarch64/bzip2-1.0.8-h68df207_7.conda#56398c28220513b9ea13d7b450acfb20
https://conda.anaconda.org/conda-forge/linux-aarch64/double-conversion-3.3.1-h5ad3122_0.conda#399959d889e1a73fc99f12ce480e77e1
https://conda.anaconda.org/conda-forge/linux-aarch64/graphite2-1.3.14-hfae3067_1.conda#bdbc97a9b24523ebe475d18c7d255c84
https://conda.anaconda.org/conda-forge/linux-aarch64/keyutils-1.6.1-h4e544f5_0.tar.bz2#1f24853e59c68892452ef94ddd8afd4b
https://conda.anaconda.org/conda-forge/linux-aarch64/lerc-4.0.0-hfdc4d58_1.conda#60dceb7e876f4d74a9cbd42bbbc6b9cf
https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlidec-1.1.0-h86ecc28_3.conda#3a4b4fc0864a4dc0f4012ac1abe069a9
https://conda.anaconda.org/conda-forge/linux-aarch64/libbrotlienc-1.1.0-h86ecc28_3.conda#2b8199de1016a56c49bfced37c7f0882
Expand All @@ -57,7 +57,7 @@ https://conda.anaconda.org/conda-forge/linux-aarch64/libuuid-2.38.1-hb4cce97_0.c
https://conda.anaconda.org/conda-forge/linux-aarch64/libxcb-1.17.0-h262b8f6_0.conda#cd14ee5cca2464a425b1dbfc24d90db2
https://conda.anaconda.org/conda-forge/linux-aarch64/libxcrypt-4.4.36-h31becfc_1.conda#b4df5d7d4b63579d081fd3a4cf99740e
https://conda.anaconda.org/conda-forge/linux-aarch64/ninja-1.13.1-hdc560ac_0.conda#eff201e0dd7462df1f2a497cd0f1aa11
https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h3945e86_0.conda#3354d454f5d8c7c57cd2025d34824ad1
https://conda.anaconda.org/conda-forge/linux-aarch64/pixman-0.46.4-h7ac5ae9_1.conda#1587081d537bd4ae77d1c0635d465ba5
https://conda.anaconda.org/conda-forge/linux-aarch64/readline-8.2-h8382b9d_2.conda#c0f08fc2737967edde1a272d4bf41ed9
https://conda.anaconda.org/conda-forge/linux-aarch64/tk-8.6.13-noxft_h5688188_102.conda#2562c9bfd1de3f9c590f0fe53858d85c
https://conda.anaconda.org/conda-forge/linux-aarch64/wayland-1.24.0-h698ed42_0.conda#2a57237cee70cb13c402af1ef6f8e5f6
Expand All @@ -68,7 +68,7 @@ https://conda.anaconda.org/conda-forge/linux-aarch64/krb5-1.21.3-h50a48e9_0.cond
https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype6-2.13.3-he93130f_1.conda#51eae9012d75b8f7e4b0adfe61a83330
https://conda.anaconda.org/conda-forge/linux-aarch64/libgfortran-ng-15.1.0-he9431aa_4.conda#17d5f1baebcff0faba79a0ae3a18c4a9
https://conda.anaconda.org/conda-forge/linux-aarch64/libopenblas-0.3.30-pthreads_h9d3fd7e_1.conda#3c9373eae4610a24c1eca14554a6425b
https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-h7c15681_5.conda#264a9aac20276b1784dac8c5f8d3704a
https://conda.anaconda.org/conda-forge/linux-aarch64/libtiff-4.7.0-h7a57436_6.conda#360b68f57756b64922d5d3af5e986fa9
https://conda.anaconda.org/conda-forge/linux-aarch64/pcre2-10.45-hf4ec17f_0.conda#ad22a9a9497f7aedce73e0da53cd215f
https://conda.anaconda.org/conda-forge/linux-aarch64/python-3.10.18-h256493d_0_cpython.conda#766640fd0208e1d277a26d3497cc4b63
https://conda.anaconda.org/conda-forge/linux-aarch64/qhull-2020.2-h70be974_5.conda#bb138086d938e2b64f5f364945793ebf
Expand All @@ -82,31 +82,32 @@ https://conda.anaconda.org/conda-forge/linux-aarch64/brotli-1.1.0-h86ecc28_3.con
https://conda.anaconda.org/conda-forge/noarch/colorama-0.4.6-pyhd8ed1ab_1.conda#962b9857ee8e7018c22f2776ffa0b2d7
https://conda.anaconda.org/conda-forge/noarch/cycler-0.12.1-pyhd8ed1ab_1.conda#44600c4667a319d67dbe0681fc0bc833
https://conda.anaconda.org/conda-forge/linux-aarch64/cyrus-sasl-2.1.28-h6c5dea3_0.conda#b6d06b46e791add99cc39fbbc34530d5
https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.1.2-py310hc86cfe9_2.conda#86a3ab2db622c5cb32d015c1645854a1
https://conda.anaconda.org/conda-forge/linux-aarch64/cython-3.1.3-py310h2fea770_2.conda#559c4f0872cacea580720f03c090c5f4
https://conda.anaconda.org/conda-forge/noarch/execnet-2.1.1-pyhd8ed1ab_1.conda#a71efeae2c160f6789900ba2631a2c90
https://conda.anaconda.org/conda-forge/noarch/iniconfig-2.0.0-pyhd8ed1ab_1.conda#6837f3eff7dcea42ecd714ce1ac2b108
https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.4.8-py310h5d7f10c_1.conda#7ff3753addbf5b590a51d01b238786bc
https://conda.anaconda.org/conda-forge/linux-aarch64/kiwisolver-1.4.9-py310h65c7496_0.conda#fa271987989366d53d78100bc15b570e
https://conda.anaconda.org/conda-forge/linux-aarch64/lcms2-2.17-hc88f144_0.conda#b87b1abd2542cf65a00ad2e2461a3083
https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.9.0-32_h1a9f1db_openblas.conda#833718ed1c0b597ce17e5f410bd9b017
https://conda.anaconda.org/conda-forge/linux-aarch64/libblas-3.9.0-34_h1a9f1db_openblas.conda#fa386090d063f7d763d9e74d33202279
https://conda.anaconda.org/conda-forge/linux-aarch64/libcups-2.3.3-h5cdc715_5.conda#ac0333d338076ef19170938bbaf97582
https://conda.anaconda.org/conda-forge/linux-aarch64/libfreetype-2.13.3-h8af1aa0_1.conda#2d4a1c3dcabb80b4a56d5c34bdacea08
https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.84.2-hc022ef1_0.conda#51323eab8e9f049d001424828c4c25a4
https://conda.anaconda.org/conda-forge/linux-aarch64/libglib-2.84.3-h75d4a95_0.conda#cf67d7e3b0a89dd3240c7793310facc3
https://conda.anaconda.org/conda-forge/linux-aarch64/libglx-1.7.0-hd24410f_2.conda#1d4269e233636148696a67e2d30dad2a
https://conda.anaconda.org/conda-forge/linux-aarch64/libhiredis-1.0.2-h05efe27_0.tar.bz2#a87f068744fd20334cd41489eb163bee
https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.13.8-he060846_0.conda#c73dfe6886cc8d39a09c357a36f91fb2
https://conda.anaconda.org/conda-forge/linux-aarch64/libxml2-2.13.8-he58860d_1.conda#20d0cae4f8f49a79892d7e397310d81f
https://conda.anaconda.org/conda-forge/noarch/meson-1.8.3-pyhe01879c_0.conda#ed40b34242ec6d216605db54d19c6df5
https://conda.anaconda.org/conda-forge/noarch/munkres-1.1.4-pyhd8ed1ab_1.conda#37293a85a0f4f77bbd9cf7aaefc62609
https://conda.anaconda.org/conda-forge/linux-aarch64/openblas-0.3.30-pthreads_h3a8cbd8_1.conda#164fc79edde42da3600caf11d09e39bd
https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.3-h3f56577_0.conda#04231368e4af50d11184b50e14250993
https://conda.anaconda.org/conda-forge/linux-aarch64/openjpeg-2.5.3-h5da879a_1.conda#af94f7f26d2aa7881299bf6430863f55
https://conda.anaconda.org/conda-forge/noarch/packaging-25.0-pyh29332c3_1.conda#58335b26c38bf4a20f399384c33cbcf9
https://conda.anaconda.org/conda-forge/noarch/pluggy-1.6.0-pyhd8ed1ab_0.conda#7da7ccd349dbf6487a7778579d2bb971
https://conda.anaconda.org/conda-forge/noarch/pygments-2.19.2-pyhd8ed1ab_0.conda#6b6ece66ebcae2d5f326c77ef2c5a066
https://conda.anaconda.org/conda-forge/noarch/pyparsing-3.2.3-pyhe01879c_2.conda#aa0028616c0750c773698fdc254b2b8d
https://conda.anaconda.org/conda-forge/noarch/setuptools-80.9.0-pyhff2d567_0.conda#4de79c071274a53dcaf2a8c749d1499e
https://conda.anaconda.org/conda-forge/noarch/six-1.17.0-pyhe01879c_1.conda#3339e3b65d58accf4ca4fb8748ab16b3
https://conda.anaconda.org/conda-forge/noarch/threadpoolctl-3.6.0-pyhecae5ae_0.conda#9d64911b31d57ca443e9f1e36b04385f
https://conda.anaconda.org/conda-forge/noarch/toml-0.10.2-pyhd8ed1ab_1.conda#b0dd904de08b7db706167240bf37b164
https://conda.anaconda.org/conda-forge/noarch/tomli-2.2.1-pyhe01879c_2.conda#30a0a26c8abccf4b7991d590fe17c699
https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.1-py310h78583b1_0.conda#e1e576b66cca7642b0a66310b675ea36
https://conda.anaconda.org/conda-forge/linux-aarch64/tornado-6.5.2-py310ha7967c6_0.conda#443b9fabfa1a26f93551ba75797b658a
https://conda.anaconda.org/conda-forge/noarch/typing_extensions-4.14.1-pyhe01879c_0.conda#e523f4f1e980ed7a4240d7e27e9ec81f
https://conda.anaconda.org/conda-forge/linux-aarch64/unicodedata2-16.0.0-py310ha766c32_0.conda#2936ce19a675e162962f396c7b40b905
https://conda.anaconda.org/conda-forge/noarch/wheel-0.45.1-pyhd8ed1ab_1.conda#75cb7132eb58d97896e173ef12ac9986
Expand All @@ -116,16 +117,17 @@ https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxext-1.3.6-h57736b2
https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxfixes-6.0.1-h57736b2_0.conda#78f8715c002cc66991d7c11e3cf66039
https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxrender-0.9.12-h86ecc28_0.conda#ae2c2dd0e2d38d249887727db2af960e
https://conda.anaconda.org/conda-forge/linux-aarch64/ccache-4.11.3-h4889ad1_0.conda#e0b9e519da2bf0fb8c48381daf87a194
https://conda.anaconda.org/conda-forge/linux-aarch64/coverage-7.10.3-py310h3b5aacf_0.conda#96ed3a77612455abc6c7eae53f1efa78
https://conda.anaconda.org/conda-forge/linux-aarch64/dbus-1.16.2-heda779d_0.conda#9203b74bb1f3fa0d6f308094b3b44c1e
https://conda.anaconda.org/conda-forge/noarch/exceptiongroup-1.3.0-pyhd8ed1ab_0.conda#72e42d28960d875c7654614f8b50939a
https://conda.anaconda.org/conda-forge/linux-aarch64/fonttools-4.59.0-py310h2d8da20_0.conda#5f93264842d77827a0dac712d0fd188e
https://conda.anaconda.org/conda-forge/linux-aarch64/freetype-2.13.3-h8af1aa0_1.conda#71c4cbe1b384a8e7b56993394a435343
https://conda.anaconda.org/conda-forge/noarch/joblib-1.5.1-pyhd8ed1ab_0.conda#fb1c14694de51a476ce8636d92b6f42c
https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.9.0-32_hab92f65_openblas.conda#2f02a3ea0960118a0a8d45cdd348b039
https://conda.anaconda.org/conda-forge/linux-aarch64/libcblas-3.9.0-34_hab92f65_openblas.conda#1abb083ef60123a9f952d6c3ee94f05b
https://conda.anaconda.org/conda-forge/linux-aarch64/libgl-1.7.0-hd24410f_2.conda#0d00176464ebb25af83d40736a2cd3bb
https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.9.0-32_h411afd4_openblas.conda#8d143759d5a22e9975a996bd13eeb8f0
https://conda.anaconda.org/conda-forge/linux-aarch64/liblapack-3.9.0-34_h411afd4_openblas.conda#69ba75c281b54b7849ae3e1b3c326383
https://conda.anaconda.org/conda-forge/linux-aarch64/libllvm20-20.1.8-h2b567e5_0.conda#b2ae284ba64d978316177c9ab68e3da5
https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.10.0-hbab7b08_0.conda#36cd1db31e923c6068b7e0e6fce2cd7b
https://conda.anaconda.org/conda-forge/linux-aarch64/libxkbcommon-1.11.0-h95ca766_0.conda#21efa5fee8795bc04bd79bfc02f05c65
https://conda.anaconda.org/conda-forge/linux-aarch64/libxslt-1.1.43-h4552c8e_0.conda#fcf40dcbe5841e9b125ca98858e24205
https://conda.anaconda.org/conda-forge/linux-aarch64/openldap-2.6.10-h30c48ee_0.conda#48f31a61be512ec1929f4b4a9cedf4bd
https://conda.anaconda.org/conda-forge/linux-aarch64/pillow-11.3.0-py310h34c99de_0.conda#91ea2cb93e2ac055f30b5a8e14cd6270
Expand All @@ -142,18 +144,19 @@ https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxxf86vm-1.1.6-h86ec
https://conda.anaconda.org/conda-forge/linux-aarch64/fontconfig-2.15.0-h8dda3cd_1.conda#112b71b6af28b47c624bcbeefeea685b
https://conda.anaconda.org/conda-forge/linux-aarch64/libclang-cpp20.1-20.1.8-default_hf07bfb7_0.conda#c7a64cd7dd2bf72956d2f3b1b1aa13a7
https://conda.anaconda.org/conda-forge/linux-aarch64/libclang13-20.1.8-default_h173080d_0.conda#c9a9e8c0477f9c915f106fd6254b2a9c
https://conda.anaconda.org/conda-forge/linux-aarch64/liblapacke-3.9.0-32_hc659ca5_openblas.conda#1cd2cbdb80386aae8c584ab9f1175ca6
https://conda.anaconda.org/conda-forge/linux-aarch64/liblapacke-3.9.0-34_hc659ca5_openblas.conda#8a29435cbae5ab65968d7688c3141379
https://conda.anaconda.org/conda-forge/linux-aarch64/libpq-17.5-hf590da8_0.conda#b5a01e5aa04651ccf5865c2d029affa3
https://conda.anaconda.org/conda-forge/noarch/meson-python-0.18.0-pyh70fd9c4_0.conda#576c04b9d9f8e45285fb4d9452c26133
https://conda.anaconda.org/conda-forge/linux-aarch64/numpy-2.2.6-py310h6e5608f_0.conda#9e9f1f279eb02c41bda162a42861adc0
https://conda.anaconda.org/conda-forge/noarch/pytest-8.4.1-pyhd8ed1ab_0.conda#a49c2283f24696a7b30367b7346a0144
https://conda.anaconda.org/conda-forge/linux-aarch64/xorg-libxtst-1.2.5-h57736b2_3.conda#c05698071b5c8e0da82a282085845860
https://conda.anaconda.org/conda-forge/linux-aarch64/blas-devel-3.9.0-32_h9678261_openblas.conda#9c18808e64a8557732e664eac92df74d
https://conda.anaconda.org/conda-forge/linux-aarch64/blas-devel-3.9.0-34_h9678261_openblas.conda#ca55bf55f4dd0b3eb5965a0646d038ce
https://conda.anaconda.org/conda-forge/linux-aarch64/cairo-1.18.4-h83712da_0.conda#cd55953a67ec727db5dc32b167201aa6
https://conda.anaconda.org/conda-forge/linux-aarch64/contourpy-1.3.2-py310hf54e67a_0.conda#779694434d1f0a67c5260db76b7b7907
https://conda.anaconda.org/conda-forge/noarch/pytest-cov-6.2.1-pyhd8ed1ab_0.conda#ce978e1b9ed8b8d49164e90a5cdc94cd
https://conda.anaconda.org/conda-forge/noarch/pytest-xdist-3.8.0-pyhd8ed1ab_0.conda#8375cfbda7c57fbceeda18229be10417
https://conda.anaconda.org/conda-forge/linux-aarch64/scipy-1.15.2-py310hf37559f_0.conda#5c9b72f10d2118d943a5eaaf2f396891
https://conda.anaconda.org/conda-forge/linux-aarch64/blas-2.132-openblas.conda#2c1e3662c8c5e7b92a49fd6372bb659f
https://conda.anaconda.org/conda-forge/linux-aarch64/blas-2.134-openblas.conda#20a3b428eeca10be2baee7b1a27a80ee
https://conda.anaconda.org/conda-forge/linux-aarch64/harfbuzz-11.3.3-h81c6d19_0.conda#68c8991c65d01f682819950d969f266a
https://conda.anaconda.org/conda-forge/linux-aarch64/matplotlib-base-3.10.5-py310hc06f52e_0.conda#6b7cfe985a25928b86a127453ffec2e2
https://conda.anaconda.org/conda-forge/linux-aarch64/qt6-main-6.9.1-haa40e84_2.conda#b388e58798370884d5226b2ae9209edc
Expand Down
Loading
Loading