Skip to content
Open
Show file tree
Hide file tree
Changes from 66 commits
Commits
Show all changes
100 commits
Select commit Hold shift + click to select a range
406c047
Move xarray badge to top
VeckoTheGecko Sep 12, 2025
f16d02c
DOC: Add Pixi badge
VeckoTheGecko Sep 12, 2025
c4573df
Add pixi environment
VeckoTheGecko Sep 12, 2025
577cf18
Split dependencies into features and define environments
VeckoTheGecko Sep 12, 2025
33d4a14
Copy requriements file to new folder for requirement linting
VeckoTheGecko Sep 12, 2025
2bd8605
Remove testing, 'pip', and 'packaging' dependencies from requirements…
VeckoTheGecko Sep 12, 2025
40f78bc
Remove numpy from environment files
VeckoTheGecko Sep 12, 2025
e59d27d
Add typing task and environment
VeckoTheGecko Sep 12, 2025
618870b
Remove pandas from environment files
VeckoTheGecko Sep 12, 2025
1d8a93c
Remove pre-commit from environment files
VeckoTheGecko Sep 12, 2025
1bbfbe0
Remove typing related packages from environment files
VeckoTheGecko Sep 12, 2025
71f1ce9
Remove 'pacakaging' package from environment files
VeckoTheGecko Sep 12, 2025
b3c3a2a
Remove backend related packages from environment files
VeckoTheGecko Sep 12, 2025
e3781e6
Remove performance related packages from environment files
VeckoTheGecko Sep 12, 2025
47cc4d8
Remove s3 related package from environment files
VeckoTheGecko Sep 12, 2025
c3df274
Remove various packages from environment files and migrate to pixi
VeckoTheGecko Sep 12, 2025
5b20177
Remove 'typing_extensions' package from environment files
VeckoTheGecko Sep 12, 2025
fdaa381
Remove 'rasterio' package from environment files
VeckoTheGecko Sep 12, 2025
1062701
Remove 'distributed' and 'lxml' package from environment files
VeckoTheGecko Sep 12, 2025
72b65da
Remove plotting related packages from environment files
VeckoTheGecko Sep 12, 2025
56f84f1
Remove 'iris' and 'pooch' package from environment files
VeckoTheGecko Sep 12, 2025
e3eaaa8
Remove 'jax' package from environment files
VeckoTheGecko Sep 12, 2025
3d75cbe
Delete bodies of empty environment files
VeckoTheGecko Sep 12, 2025
9f39ee6
Port doc dependencies to pixi.toml
VeckoTheGecko Sep 12, 2025
833c647
Add xarray as source dependency to pixi
VeckoTheGecko Sep 12, 2025
baee394
Add new environments and tasks
VeckoTheGecko Sep 12, 2025
04e667a
Move `test` task to `test` feature
VeckoTheGecko Sep 16, 2025
4a0e692
Move pydap-server to linux dependency
VeckoTheGecko Sep 16, 2025
5048c40
Move cfgrib to pypi dep
VeckoTheGecko Sep 17, 2025
fccd392
Add workflow for caching-pixi-lock
VeckoTheGecko Sep 19, 2025
677c114
Add pixi task: doc
VeckoTheGecko Sep 24, 2025
868f573
Update RTD to use Pixi
VeckoTheGecko Sep 24, 2025
a8d067b
Remove 'run --all-files' from pre-commit task
VeckoTheGecko Sep 24, 2025
10ea078
Add all-but-dask and all-but-numba envs
VeckoTheGecko Sep 24, 2025
066219a
Update cache-pixi-lock
VeckoTheGecko Oct 31, 2025
73875c6
ci.yaml : update set env vars to remove windows section
VeckoTheGecko Oct 31, 2025
33f5eb0
ci.yaml : update set env vars to remove py314 section
VeckoTheGecko Oct 31, 2025
a9c85fc
Update environment name
VeckoTheGecko Oct 31, 2025
5ba5637
Remove solve groups for now
VeckoTheGecko Oct 31, 2025
8141da4
Add testing environments with mypy
VeckoTheGecko Oct 31, 2025
2cb81b9
ci.yaml : Rename strategy 'env' var to 'pixi-env'
VeckoTheGecko Oct 31, 2025
60be388
Add pixi environment for bare-min-and-scipy
VeckoTheGecko Oct 31, 2025
d049e33
Fix pixi environment names in CI
VeckoTheGecko Oct 31, 2025
38379dd
Create `test-all-deps-py313` and `test-all-deps-py311` pixi envs
VeckoTheGecko Oct 31, 2025
04899d7
Fix CI pixi env names
VeckoTheGecko Oct 31, 2025
428c33c
Remove python-version matrix var
VeckoTheGecko Oct 31, 2025
b5b5ab4
Move pixi package section
VeckoTheGecko Oct 31, 2025
4c75594
Add packages to run-dependencies section
VeckoTheGecko Oct 31, 2025
b753cfa
Fix install of pytest-github-actions-annotate-failures
VeckoTheGecko Oct 31, 2025
93215f0
Update pixi-build-python==0.4.0
VeckoTheGecko Oct 31, 2025
31f9537
Enable cross os pixi lockfile fetch
VeckoTheGecko Oct 31, 2025
57dedbe
Remove setup micromamba workflow
VeckoTheGecko Oct 31, 2025
27c4dbb
Remove CONDA_ENV_FILE variable
VeckoTheGecko Oct 31, 2025
388fd1d
Enter pixi shell
VeckoTheGecko Oct 31, 2025
334a9df
setup pixi with needed env
VeckoTheGecko Oct 31, 2025
c93faf6
Update workflow name
VeckoTheGecko Oct 31, 2025
86bcd41
project -> workspace
VeckoTheGecko Oct 31, 2025
ba012ba
Remove annotate pixi feature
VeckoTheGecko Oct 31, 2025
f6b5464
Use "pixi run" instead of "pixi shell"
VeckoTheGecko Oct 31, 2025
28daf62
Add pip to typing feature
VeckoTheGecko Oct 31, 2025
ebdc125
Pin pixi versions
VeckoTheGecko Oct 31, 2025
b07bcae
Update RTD for pixi
VeckoTheGecko Oct 31, 2025
0f3a618
Specify pixi env explicitly
VeckoTheGecko Oct 31, 2025
4764b3d
Add pixi version in cache-pixi-lock cache id
VeckoTheGecko Oct 31, 2025
5f74f12
Fix artifact name
VeckoTheGecko Oct 31, 2025
5c14760
Review - fix pixi env name in CI
VeckoTheGecko Nov 3, 2025
7ef5ace
Add cftime as test dep
VeckoTheGecko Nov 3, 2025
ee72978
Review feedback
VeckoTheGecko Nov 3, 2025
257d77c
Migrate CI additional to use Pixi
VeckoTheGecko Nov 3, 2025
c4e1c0d
review feedback
VeckoTheGecko Nov 7, 2025
98e7499
Add pyright to typing feature
VeckoTheGecko Nov 7, 2025
d93b2a4
Add typing to unit_registry
VeckoTheGecko Nov 7, 2025
8634699
Fix command
VeckoTheGecko Nov 10, 2025
acc528e
Rename plotting feature to viz
VeckoTheGecko Nov 10, 2025
52cec4d
Update confusing env name
VeckoTheGecko Nov 10, 2025
4d0f952
Disable test environment
VeckoTheGecko Nov 10, 2025
ad02e6a
Add doc-clean task
VeckoTheGecko Nov 10, 2025
8d52c20
Remove bare-minimum.yml
VeckoTheGecko Nov 10, 2025
7df8676
Make pixi env for min versions
VeckoTheGecko Nov 10, 2025
a50cf33
Relax pydap min version
VeckoTheGecko Nov 10, 2025
f79f5e6
Enable test-min-versions CI testing
VeckoTheGecko Nov 10, 2025
435e9bc
Delete `min-all-deps.yml`
VeckoTheGecko Nov 10, 2025
b05765a
Disable `min-version-policy` workflow in CI
VeckoTheGecko Nov 10, 2025
f038fde
Revert regression - save PYTHON_VERSION to codecov
VeckoTheGecko Nov 10, 2025
81454f4
Migrate Hypothesis testing CI to Pixi
VeckoTheGecko Nov 10, 2025
cbd0bd0
Revert changes to `benchmarks.yml`
VeckoTheGecko Nov 10, 2025
3146b8b
Self review
VeckoTheGecko Nov 10, 2025
f19ca43
Fix RTD for pixi
VeckoTheGecko Nov 10, 2025
435b124
Update contributing instructions for Pixi
VeckoTheGecko Nov 10, 2025
8516595
Migrate nightly testing to pixi
VeckoTheGecko Nov 11, 2025
5127e11
Ignore mypy errors found during nightly testing
VeckoTheGecko Nov 11, 2025
f41cf0f
Remove conda call in Sphinx build process
VeckoTheGecko Nov 11, 2025
38456e3
Fix build dir
VeckoTheGecko Nov 11, 2025
2f28dfd
Update links
VeckoTheGecko Nov 11, 2025
7b1ce83
Fix rtd attempt x
VeckoTheGecko Nov 11, 2025
1cef1b6
Add back `environment.yml` - needed for benchmarks
VeckoTheGecko Nov 11, 2025
af0f85b
Fix environments for pyright CI
VeckoTheGecko Nov 11, 2025
1b2869c
Merge pyright jobs into matrix
VeckoTheGecko Nov 11, 2025
f779b8a
Merge branch 'main' into pixi-dust
VeckoTheGecko Nov 11, 2025
8abc993
Override dask version in nightly
VeckoTheGecko Nov 11, 2025
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
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
doc/whats-new.rst merge=union
# allow installing from git archives
.git_archival.txt export-subst
# SCM syntax highlighting & preventing 3-way merges
pixi.lock merge=binary linguist-language=YAML linguist-generated=true
15 changes: 15 additions & 0 deletions .github/workflows/benchmarks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,10 @@ env:
PR_HEAD_LABEL: ${{ github.event.pull_request.head.label }}

jobs:
cache-pixi-lock:
uses: ./.github/workflows/cache-pixi-lock.yml
benchmark:
needs: cache-pixi-lock
if: ${{ contains( github.event.pull_request.labels.*.name, 'run-benchmark') && github.event_name == 'pull_request' || contains( github.event.pull_request.labels.*.name, 'topic-performance') && github.event_name == 'pull_request' || github.event_name == 'workflow_dispatch' }}
name: Linux
runs-on: ubuntu-latest
Expand All @@ -24,6 +27,18 @@ jobs:
with:
fetch-depth: 0

- name: Restore cached pixi lockfile
uses: actions/cache/restore@v4
id: restore-pixi-lock
with:
path: |
pixi.lock
key: ${{ needs.cache-pixi-lock.outputs.cache-id }}
- uses: prefix-dev/[email protected]
with:
cache: true
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }}

- name: Set up conda environment
uses: mamba-org/setup-micromamba@v2
with:
Expand Down
52 changes: 52 additions & 0 deletions .github/workflows/cache-pixi-lock.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
name: Generate and cache Pixi lockfile

on:
workflow_call:
inputs:
pixi-version:
type: string
outputs:
cache-id:
description: "The lock file contents"
value: ${{ jobs.cache-pixi-lock.outputs.cache-id }}

jobs:
cache-pixi-lock:
name: Generate output
runs-on: ubuntu-latest
outputs:
cache-id: ${{ steps.restore.outputs.cache-primary-key }}
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0
submodules: recursive
- name: Get current date
id: date
run: echo "date=$(date +'%Y-%m-%d')" >> "$GITHUB_OUTPUT"
- uses: actions/cache/restore@v4
id: restore
with:
path: |
pixi.lock
key: ${{ steps.date.outputs.date }}_${{ inputs.pixi-version }}_${{hashFiles('pixi.toml')}}
- uses: prefix-dev/[email protected]
if: ${{ !steps.restore.outputs.cache-hit }}
with:
pixi-version: ${{ inputs.pixi-version }}
run-install: false
- name: Run pixi lock
if: ${{ !steps.restore.outputs.cache-hit }}
run: pixi lock
- uses: actions/cache/save@v4
if: ${{ !steps.restore.outputs.cache-hit }}
id: cache
with:
path: |
pixi.lock
key: ${{ steps.restore.outputs.cache-primary-key }}
- name: Upload pixi.lock
uses: actions/upload-artifact@v4
with:
name: pixi-lock
path: pixi.lock
4 changes: 2 additions & 2 deletions .github/workflows/ci-additional.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -319,10 +319,10 @@ jobs:
uses: xarray-contrib/minimum-dependency-versions@e2ac8ff0a76e8603d8536ef5d64743a375961ce9 # v0.1.1
with:
policy: ci/policy.yaml
environment-paths: ci/requirements/min-all-deps.yml
environment-paths: ci/requirement-linting/min-all-deps.yml

- name: Bare minimum versions policy
uses: xarray-contrib/minimum-dependency-versions@e2ac8ff0a76e8603d8536ef5d64743a375961ce9 # v0.1.1
with:
policy: ci/policy.yaml
environment-paths: ci/requirements/bare-minimum.yml
environment-paths: ci/requirement-linting/bare-minimum.yml
113 changes: 48 additions & 65 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -32,10 +32,15 @@ jobs:
id: detect-trigger
with:
keyword: "[skip-ci]"

cache-pixi-lock:
uses: ./.github/workflows/cache-pixi-lock.yml
with:
pixi-version: "v0.58.0" # keep in sync with jobs
test:
name: ${{ matrix.os }} py${{ matrix.python-version }} ${{ matrix.env }}
name: "${{ matrix.os }} | pixi shell -e ${{ matrix.pixi-env }}"
runs-on: ${{ matrix.os }}
needs: detect-ci-trigger
needs: [detect-ci-trigger, cache-pixi-lock]
if: needs.detect-ci-trigger.outputs.triggered == 'false'
defaults:
run:
Expand All @@ -45,110 +50,87 @@ jobs:
matrix:
os: ["ubuntu-latest", "macos-latest", "windows-latest"]
# Bookend python versions
python-version: ["3.11", "3.13"]
env: [""]
pixi-env: ["test-all-deps-py311", "test-all-deps-py313"]
pytest-adopts: [""]
include:
# Minimum python version:
- env: "bare-minimum"
python-version: "3.11"
os: ubuntu-latest
- env: "bare-min-and-scipy"
python-version: "3.11"
- pixi-env: "test-bare-minimum"
os: ubuntu-latest
- env: "min-all-deps"
python-version: "3.11"
- pixi-env: "test-bare-min-and-scipy"
os: ubuntu-latest
# - pixi-env: "min-all-deps" # TODO: include later by duplicating old workflow and using conda. Not using Pixi for now.
# python-version: "3.11"
# os: ubuntu-latest
# Latest python version:
- env: "all-but-numba"
python-version: "3.13"
- pixi-env: "test-all-but-numba"
os: ubuntu-latest
- env: "all-but-dask"
python-version: "3.12"
- pixi-env: "test-all-but-dask"
os: ubuntu-latest
- env: "flaky"
python-version: "3.13"
- pixi-env: "test-all-deps-py313"
pytest-adopts: "flaky"
os: ubuntu-latest
# The mypy tests must be executed using only 1 process in order to guarantee
# predictable mypy output messages for comparison to expectations.
- env: "mypy"
python-version: "3.11"
- pixi-env: "test-all-mypy-py311"
pytest-adopts: "mypy"
numprocesses: 1
os: ubuntu-latest
- env: "mypy"
python-version: "3.13"
- pixi-env: "test-all-mypy-py313"
numprocesses: 1
os: ubuntu-latest
steps:
- uses: actions/checkout@v5
with:
fetch-depth: 0 # Fetch all history for all branches and tags.
- name: Restore cached pixi lockfile
uses: actions/cache/restore@v4
id: restore-pixi-lock
with:
enableCrossOsArchive: true
path: |
pixi.lock
key: ${{ needs.cache-pixi-lock.outputs.cache-id }}
- uses: prefix-dev/[email protected]
with:
pixi-version: "v0.58.0" # keep in sync with cache-pixi-lock
cache: true
environments: ${{ matrix.pixi-env }}
cache-write: ${{ github.event_name == 'push' && github.ref_name == 'main' }}

- name: Set environment variables
run: |
echo "TODAY=$(date +'%Y-%m-%d')" >> $GITHUB_ENV

if [[ ${{ matrix.os }} == windows* ]] ;
then
if [[ ${{ matrix.python-version }} != "3.14" ]]; then
echo "CONDA_ENV_FILE=ci/requirements/environment-windows.yml" >> $GITHUB_ENV
else
echo "CONDA_ENV_FILE=ci/requirements/environment-windows-3.14.yml" >> $GITHUB_ENV
fi
elif [[ "${{ matrix.env }}" != "" ]] ;
if [[ "${{ matrix.pytest-adopts }}" != "" ]] ;
then
if [[ "${{ matrix.env }}" == "flaky" ]] ;
if [[ "${{ matrix.pytest-adopts }}" == "flaky" ]] ;
then
echo "CONDA_ENV_FILE=ci/requirements/environment.yml" >> $GITHUB_ENV
echo "PYTEST_ADDOPTS=-m 'flaky or network' --run-flaky --run-network-tests -W default" >> $GITHUB_ENV
elif [[ "${{ matrix.env }}" == "mypy" ]] ;
elif [[ "${{ matrix.pytest-adopts }}" == "mypy" ]] ;
then
echo "CONDA_ENV_FILE=ci/requirements/environment.yml" >> $GITHUB_ENV
echo "PYTEST_ADDOPTS=-n 1 -m 'mypy' --run-mypy -W default" >> $GITHUB_ENV
else
echo "CONDA_ENV_FILE=ci/requirements/${{ matrix.env }}.yml" >> $GITHUB_ENV
fi
if [[ "${{ matrix.env }}" == "min-all-deps" ]] ;
if [[ "${{ matrix.pixi-env }}" == "min-all-deps" ]] ;
then
# Don't raise on warnings
echo "PYTEST_ADDOPTS=-W default" >> $GITHUB_ENV
fi
else
if [[ ${{ matrix.python-version }} != "3.14" ]]; then
echo "CONDA_ENV_FILE=ci/requirements/environment.yml" >> $GITHUB_ENV
else
echo "CONDA_ENV_FILE=ci/requirements/environment-3.14.yml" >> $GITHUB_ENV
fi
fi

echo "PYTHON_VERSION=${{ matrix.python-version }}" >> $GITHUB_ENV

- name: Setup micromamba
uses: mamba-org/setup-micromamba@v2
with:
environment-file: ${{ env.CONDA_ENV_FILE }}
environment-name: xarray-tests
cache-environment: true
cache-environment-key: "${{runner.os}}-${{runner.arch}}-py${{matrix.python-version}}-${{env.TODAY}}-${{hashFiles(env.CONDA_ENV_FILE)}}"
create-args: >-
python=${{matrix.python-version}}

# We only want to install this on one run, because otherwise we'll have
# duplicate annotations.
- name: Install error reporter
if: ${{ matrix.os }} == 'ubuntu-latest' and ${{ matrix.python-version }} == '3.12'
run: |
python -m pip install pytest-github-actions-annotate-failures

- name: Install xarray
if: ${{ matrix.os }} == 'ubuntu-latest' and ${{ matrix.pixi-env}} == 'test-all-deps-py313'
run: |
python -m pip install --no-deps -e .
pixi add --pypi pytest-github-actions-annotate-failures

- name: Version info
run: |
python xarray/util/print_versions.py
pixi run -e ${{ matrix.pixi-env }} python xarray/util/print_versions.py

- name: Import xarray
run: |
python -c "import xarray"
pixi run -e ${{ matrix.pixi-env }} python -c "import xarray"

- name: Restore cached hypothesis directory
uses: actions/cache@v4
Expand All @@ -159,7 +141,8 @@ jobs:
save-always: true

- name: Run tests
run: python -m pytest -n ${{ matrix.numprocesses || 4 }}
run:
pixi run -e ${{ matrix.pixi-env }} python -m pytest -n ${{ matrix.numprocesses || 4 }}
--timeout 180
--cov=xarray
--cov-report=xml
Expand All @@ -169,7 +152,7 @@ jobs:
if: always()
uses: actions/upload-artifact@v5
with:
name: Test results for ${{ runner.os }}-${{ matrix.python-version }} ${{ matrix.env }}
name: Test results for OS ${{ runner.os }} pixi-env -${{ matrix.pixi-env }}
path: pytest.xml

- name: Upload code coverage to Codecov
Expand All @@ -179,7 +162,7 @@ jobs:
with:
file: ./coverage.xml
flags: unittests
env_vars: RUNNER_OS,PYTHON_VERSION
env_vars: RUNNER_OS
name: codecov-umbrella
fail_ci_if_error: false

Expand Down
4 changes: 4 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -91,3 +91,7 @@ doc/videos-gallery.txt
uv.lock
mypy_report/
xarray-docs/

# pixi environments
.pixi
pixi.lock
17 changes: 12 additions & 5 deletions .readthedocs.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,23 @@ sphinx:
build:
os: ubuntu-lts-latest
tools:
python: mambaforge-latest
# just so RTD stops complaining
python: "latest"
jobs:
create_environment:
- asdf plugin add pixi
- asdf install pixi latest
- asdf global pixi latest
post_checkout:
- (git --no-pager log --pretty="tformat:%s" -1 | grep -vqF "[skip-rtd]") || exit 183
- git fetch --unshallow || true
pre_install:
- git update-index --assume-unchanged doc/conf.py ci/requirements/doc.yml

conda:
environment: ci/requirements/doc.yml
- git update-index --assume-unchanged doc/conf.py
install:
- pixi install -e doc
build:
html:
- BUILDDIR=$READTHEDOCS_OUTPUT pixi run -e doc make html

formats:
- htmlzip
3 changes: 2 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,7 @@
# xarray: N-D labeled arrays and datasets

[![Xarray](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydata/xarray/refs/heads/main/doc/badge.json)](https://xarray.dev)
[![Powered by Pixi](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/prefix-dev/pixi/main/assets/badge/v0.json)](https://pixi.sh)
[![CI](https://github.com/pydata/xarray/actions/workflows/ci.yaml/badge.svg?branch=main)](https://github.com/pydata/xarray/actions/workflows/ci.yaml?query=branch%3Amain)
[![Code coverage](https://codecov.io/gh/pydata/xarray/branch/main/graph/badge.svg?flag=unittests)](https://codecov.io/gh/pydata/xarray)
[![Docs](https://readthedocs.org/projects/xray/badge/?version=latest)](https://docs.xarray.dev/)
Expand All @@ -12,7 +14,6 @@
[![DOI](https://zenodo.org/badge/DOI/10.5281/zenodo.598201.svg)](https://doi.org/10.5281/zenodo.598201)
[![Examples on binder](https://img.shields.io/badge/launch-binder-579ACA.svg?logo=data:image/png;base64,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)](https://mybinder.org/v2/gh/pydata/xarray/main?urlpath=lab/tree/doc/examples/weather-data.ipynb)
[![Twitter](https://img.shields.io/twitter/follow/xarray_dev?style=social)](https://x.com/xarray_dev)
[![image](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydata/xarray/refs/heads/main/doc/badge.json)](https://xarray.dev)

**xarray** (pronounced "ex-array", formerly known as **xray**) is an open source project and Python
package that makes working with labelled multi-dimensional arrays
Expand Down
18 changes: 18 additions & 0 deletions ci/requirement-linting/bare-minimum.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
name: xarray-tests #! keep this file in sync with pixi.toml
channels:
- conda-forge
- nodefaults
dependencies:
- python=3.11
- coveralls
- pip
- pytest
- pytest-asyncio
- pytest-cov
- pytest-env
- pytest-mypy-plugins
- pytest-timeout
- pytest-xdist
- numpy=1.26
- packaging=24.1
- pandas=2.2
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
name: xarray-tests
name: xarray-tests #! keep this file in sync with pixi.toml
channels:
- conda-forge
- nodefaults
Expand Down
Loading
Loading