Metadata-Version: 2.4
Name: earth2studio
Version: 0.13.0
Summary: Open-source deep-learning framework for exploring, building and deploying AI weather/climate workflows.
Project-URL: Homepage, https://github.com/NVIDIA/earth2studio
Project-URL: Documentation, https://nvidia.github.io/earth2studio
Project-URL: Issues, https://github.com/NVIDIA/earth2studio/issues
Project-URL: Changelog, https://github.com/NVIDIA/earth2studio/blob/main/CHANGELOG.md
Author: NVIDIA PhysicsNeMo Team
License-Expression: Apache-2.0
License-File: LICENSE
Classifier: Environment :: GPU
Classifier: Intended Audience :: Science/Research
Classifier: License :: OSI Approved :: Apache Software License
Classifier: Operating System :: OS Independent
Classifier: Programming Language :: Python
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Programming Language :: Python :: 3.13
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
Classifier: Typing :: Typed
Requires-Python: >=3.11
Requires-Dist: cftime
Requires-Dist: fsspec>=2024.2.0
Requires-Dist: gcsfs
Requires-Dist: h5netcdf>=1.0.0
Requires-Dist: h5py>=3.2.0
Requires-Dist: huggingface-hub>=0.27.0
Requires-Dist: loguru
Requires-Dist: nest-asyncio
Requires-Dist: netcdf4<1.7.3,>=1.6.4
Requires-Dist: pandas<3.0
Requires-Dist: pyarrow>=14.0.0
Requires-Dist: pygrib
Requires-Dist: python-dotenv
Requires-Dist: rich
Requires-Dist: s3fs>=2023.5.0
Requires-Dist: torch>=2.5.0
Requires-Dist: tqdm>=4.65.0
Requires-Dist: xarray[parallel]>=2023.1.0
Requires-Dist: zarr>=3.1.0
Provides-Extra: ace2
Requires-Dist: fme; extra == 'ace2'
Requires-Dist: pandas>=2.3.2; extra == 'ace2'
Requires-Dist: scipy>=1.15.2; extra == 'ace2'
Provides-Extra: aifs
Requires-Dist: anemoi-models==0.5.1; extra == 'aifs'
Requires-Dist: earthkit-regrid==0.4.0; extra == 'aifs'
Requires-Dist: ecmwf-opendata>=0.3.3; extra == 'aifs'
Requires-Dist: flash-attn; extra == 'aifs'
Provides-Extra: aifsens
Requires-Dist: anemoi-models==0.5.1; extra == 'aifsens'
Requires-Dist: earthkit-regrid==0.4.0; extra == 'aifsens'
Requires-Dist: ecmwf-opendata>=0.3.3; extra == 'aifsens'
Requires-Dist: flash-attn; extra == 'aifsens'
Provides-Extra: all
Requires-Dist: aiofiles>=23.0.0; extra == 'all'
Requires-Dist: anemoi-models==0.5.1; extra == 'all'
Requires-Dist: cbottle; (python_full_version >= '3.12') and extra == 'all'
Requires-Dist: cdsapi>=0.7.5; extra == 'all'
Requires-Dist: cfgrib>=0.9.10.3; extra == 'all'
Requires-Dist: cucim-cu12>=25.4.0; extra == 'all'
Requires-Dist: cudf-cu12==26.2.*; extra == 'all'
Requires-Dist: cupy-cuda12x<14.0.0; extra == 'all'
Requires-Dist: dm-haiku>=0.0.14; extra == 'all'
Requires-Dist: dm-tree>=0.1.9; extra == 'all'
Requires-Dist: earth2grid; extra == 'all'
Requires-Dist: earthkit-regrid==0.4.0; extra == 'all'
Requires-Dist: eccodes>=2.39.2; extra == 'all'
Requires-Dist: eccodeslib>=2.39.2; extra == 'all'
Requires-Dist: ecmwf-opendata>=0.3.3; extra == 'all'
Requires-Dist: einops; extra == 'all'
Requires-Dist: einops>=0.8.1; extra == 'all'
Requires-Dist: fastapi>=0.104.0; extra == 'all'
Requires-Dist: flash-attn; extra == 'all'
Requires-Dist: flax>=0.10.6; extra == 'all'
Requires-Dist: globus-sdk<4.0.0; extra == 'all'
Requires-Dist: graphcast; extra == 'all'
Requires-Dist: hiredis>=2.0.0; extra == 'all'
Requires-Dist: httpx==0.28.1; extra == 'all'
Requires-Dist: httpx>=0.25.0; extra == 'all'
Requires-Dist: hydra-core>=1.3.0; extra == 'all'
Requires-Dist: hydra-core>=1.3.2; extra == 'all'
Requires-Dist: importlib-metadata; extra == 'all'
Requires-Dist: intake-esgf>=2025.9.26; extra == 'all'
Requires-Dist: jax[cuda12]>=0.4.26; extra == 'all'
Requires-Dist: makani; extra == 'all'
Requires-Dist: microsoft-aurora>=1.6.0; extra == 'all'
Requires-Dist: moviepy; extra == 'all'
Requires-Dist: multi-storage-client[boto3,fsspec,google-cloud-storage]>=0.33.0; extra == 'all'
Requires-Dist: natten; extra == 'all'
Requires-Dist: nvidia-physicsnemo>=1.0.1; extra == 'all'
Requires-Dist: nvidia-physicsnemo>=1.3.0; extra == 'all'
Requires-Dist: nvidia-physicsnemo>=2.0; extra == 'all'
Requires-Dist: nvtx>=0.2.11; extra == 'all'
Requires-Dist: omegaconf>=2.3.0; extra == 'all'
Requires-Dist: onnx; extra == 'all'
Requires-Dist: onnxruntime-gpu>=1.21.0; extra == 'all'
Requires-Dist: onnxscript; extra == 'all'
Requires-Dist: pandas<3.0; extra == 'all'
Requires-Dist: planetary-computer>=0.5.0; extra == 'all'
Requires-Dist: prometheus-client>=0.17.0; extra == 'all'
Requires-Dist: pydantic>=2.0.0; extra == 'all'
Requires-Dist: pynvml>=12.0.0; extra == 'all'
Requires-Dist: pyproj>=3.7.1; extra == 'all'
Requires-Dist: pystac-client>=0.9.0; extra == 'all'
Requires-Dist: python-dotenv>=1.0.0; extra == 'all'
Requires-Dist: python-multipart>=0.0.6; extra == 'all'
Requires-Dist: rasterio>=1.3.9; extra == 'all'
Requires-Dist: redis>=5.0.0; extra == 'all'
Requires-Dist: requests>=2.25.0; extra == 'all'
Requires-Dist: rioxarray>=0.15.5; extra == 'all'
Requires-Dist: rq>=1.15.0; extra == 'all'
Requires-Dist: ruamel-yaml>=0.18.10; extra == 'all'
Requires-Dist: ruamel-yaml>=0.18.14; extra == 'all'
Requires-Dist: scikit-image>=0.25.2; extra == 'all'
Requires-Dist: scipy>=1.10.0; extra == 'all'
Requires-Dist: scipy>=1.15.2; extra == 'all'
Requires-Dist: timm; extra == 'all'
Requires-Dist: torch-harmonics; extra == 'all'
Requires-Dist: torch-harmonics>=0.7.4; extra == 'all'
Requires-Dist: torch-harmonics>=0.8.0; extra == 'all'
Requires-Dist: types-redis; extra == 'all'
Requires-Dist: urllib3>=1.26.0; extra == 'all'
Requires-Dist: uvicorn[standard]>=0.24.0; extra == 'all'
Provides-Extra: atlas
Requires-Dist: einops; extra == 'atlas'
Requires-Dist: natten; extra == 'atlas'
Requires-Dist: nvidia-physicsnemo>=1.3.0; extra == 'atlas'
Requires-Dist: timm; extra == 'atlas'
Requires-Dist: torch-harmonics; extra == 'atlas'
Provides-Extra: aurora
Requires-Dist: microsoft-aurora>=1.6.0; extra == 'aurora'
Provides-Extra: cbottle
Requires-Dist: cbottle; (python_full_version >= '3.12') and extra == 'cbottle'
Requires-Dist: earth2grid; extra == 'cbottle'
Provides-Extra: climatenet
Provides-Extra: corrdiff
Requires-Dist: einops>=0.8.1; extra == 'corrdiff'
Requires-Dist: nvidia-physicsnemo>=2.0; extra == 'corrdiff'
Requires-Dist: nvtx>=0.2.11; extra == 'corrdiff'
Requires-Dist: scipy>=1.15.2; extra == 'corrdiff'
Provides-Extra: cyclone
Requires-Dist: cucim-cu12>=25.4.0; extra == 'cyclone'
Requires-Dist: cupy-cuda12x<14.0.0; extra == 'cyclone'
Requires-Dist: scikit-image>=0.25.2; extra == 'cyclone'
Provides-Extra: da-healda
Requires-Dist: cudf-cu12==26.2.*; extra == 'da-healda'
Requires-Dist: cupy-cuda12x<14.0.0; extra == 'da-healda'
Requires-Dist: earth2grid; extra == 'da-healda'
Requires-Dist: nvidia-physicsnemo>=2.0; extra == 'da-healda'
Provides-Extra: da-interp
Requires-Dist: cudf-cu12==26.2.*; extra == 'da-interp'
Requires-Dist: cupy-cuda12x<14.0.0; extra == 'da-interp'
Provides-Extra: da-stormcast
Requires-Dist: cudf-cu12==26.2.*; extra == 'da-stormcast'
Requires-Dist: cupy-cuda12x<14.0.0; extra == 'da-stormcast'
Requires-Dist: einops>=0.8.1; extra == 'da-stormcast'
Requires-Dist: nvidia-physicsnemo>=2.0; extra == 'da-stormcast'
Requires-Dist: nvtx>=0.2.11; extra == 'da-stormcast'
Requires-Dist: omegaconf>=2.3.0; extra == 'da-stormcast'
Requires-Dist: pyproj>=3.7.1; extra == 'da-stormcast'
Requires-Dist: scipy>=1.15.2; extra == 'da-stormcast'
Provides-Extra: data
Requires-Dist: cdsapi>=0.7.5; extra == 'data'
Requires-Dist: cfgrib>=0.9.10.3; extra == 'data'
Requires-Dist: eccodes>=2.39.2; extra == 'data'
Requires-Dist: eccodeslib>=2.39.2; extra == 'data'
Requires-Dist: ecmwf-opendata>=0.3.3; extra == 'data'
Requires-Dist: globus-sdk<4.0.0; extra == 'data'
Requires-Dist: httpx==0.28.1; extra == 'data'
Requires-Dist: intake-esgf>=2025.9.26; extra == 'data'
Requires-Dist: multi-storage-client[boto3,fsspec,google-cloud-storage]>=0.33.0; extra == 'data'
Requires-Dist: pandas<3.0; extra == 'data'
Requires-Dist: planetary-computer>=0.5.0; extra == 'data'
Requires-Dist: pyproj>=3.7.1; extra == 'data'
Requires-Dist: pystac-client>=0.9.0; extra == 'data'
Requires-Dist: rasterio>=1.3.9; extra == 'data'
Requires-Dist: rioxarray>=0.15.5; extra == 'data'
Requires-Dist: scipy>=1.15.2; extra == 'data'
Provides-Extra: derived
Provides-Extra: dlesym
Requires-Dist: earth2grid; extra == 'dlesym'
Requires-Dist: hydra-core>=1.3.2; extra == 'dlesym'
Requires-Dist: nvidia-physicsnemo>=1.0.1; extra == 'dlesym'
Requires-Dist: omegaconf>=2.3.0; extra == 'dlesym'
Provides-Extra: dlwp
Requires-Dist: importlib-metadata; extra == 'dlwp'
Requires-Dist: nvidia-physicsnemo>=1.0.1; extra == 'dlwp'
Provides-Extra: fcn
Requires-Dist: nvidia-physicsnemo>=1.0.1; extra == 'fcn'
Provides-Extra: fcn3
Requires-Dist: makani; extra == 'fcn3'
Requires-Dist: moviepy; extra == 'fcn3'
Requires-Dist: ruamel-yaml>=0.18.14; extra == 'fcn3'
Requires-Dist: scipy>=1.10.0; extra == 'fcn3'
Requires-Dist: torch-harmonics>=0.8.0; extra == 'fcn3'
Provides-Extra: fengwu
Requires-Dist: onnx; extra == 'fengwu'
Requires-Dist: onnxruntime-gpu>=1.21.0; extra == 'fengwu'
Requires-Dist: onnxscript; extra == 'fengwu'
Provides-Extra: fuxi
Requires-Dist: onnx; extra == 'fuxi'
Requires-Dist: onnxruntime-gpu>=1.21.0; extra == 'fuxi'
Requires-Dist: onnxscript; extra == 'fuxi'
Provides-Extra: graphcast
Requires-Dist: dm-haiku>=0.0.14; extra == 'graphcast'
Requires-Dist: dm-tree>=0.1.9; extra == 'graphcast'
Requires-Dist: flax>=0.10.6; extra == 'graphcast'
Requires-Dist: graphcast; extra == 'graphcast'
Requires-Dist: jax[cuda12]>=0.4.26; extra == 'graphcast'
Provides-Extra: interp-modafno
Requires-Dist: nvidia-physicsnemo>=2.0; extra == 'interp-modafno'
Provides-Extra: pangu
Requires-Dist: onnx; extra == 'pangu'
Requires-Dist: onnxruntime-gpu>=1.21.0; extra == 'pangu'
Requires-Dist: onnxscript; extra == 'pangu'
Provides-Extra: perturbation
Requires-Dist: scipy>=1.15.2; extra == 'perturbation'
Requires-Dist: torch-harmonics>=0.7.4; extra == 'perturbation'
Provides-Extra: precip-afno
Requires-Dist: nvidia-physicsnemo>=1.0.1; extra == 'precip-afno'
Provides-Extra: precip-afno-v2
Requires-Dist: nvidia-physicsnemo>=1.0.1; extra == 'precip-afno-v2'
Provides-Extra: serve
Requires-Dist: aiofiles>=23.0.0; extra == 'serve'
Requires-Dist: fastapi>=0.104.0; extra == 'serve'
Requires-Dist: hiredis>=2.0.0; extra == 'serve'
Requires-Dist: httpx>=0.25.0; extra == 'serve'
Requires-Dist: hydra-core>=1.3.0; extra == 'serve'
Requires-Dist: prometheus-client>=0.17.0; extra == 'serve'
Requires-Dist: pydantic>=2.0.0; extra == 'serve'
Requires-Dist: python-dotenv>=1.0.0; extra == 'serve'
Requires-Dist: python-multipart>=0.0.6; extra == 'serve'
Requires-Dist: redis>=5.0.0; extra == 'serve'
Requires-Dist: requests>=2.25.0; extra == 'serve'
Requires-Dist: rq>=1.15.0; extra == 'serve'
Requires-Dist: types-redis; extra == 'serve'
Requires-Dist: urllib3>=1.26.0; extra == 'serve'
Requires-Dist: uvicorn[standard]>=0.24.0; extra == 'serve'
Provides-Extra: sfno
Requires-Dist: makani; extra == 'sfno'
Requires-Dist: moviepy; extra == 'sfno'
Requires-Dist: pynvml>=12.0.0; extra == 'sfno'
Requires-Dist: ruamel-yaml>=0.18.10; extra == 'sfno'
Requires-Dist: scipy>=1.10.0; extra == 'sfno'
Requires-Dist: torch-harmonics>=0.8.0; extra == 'sfno'
Provides-Extra: solarradiation-afno
Requires-Dist: nvidia-physicsnemo>=1.0.1; extra == 'solarradiation-afno'
Provides-Extra: statistics
Requires-Dist: nvidia-physicsnemo>=1.0.1; extra == 'statistics'
Provides-Extra: stormcast
Requires-Dist: einops>=0.8.1; extra == 'stormcast'
Requires-Dist: nvidia-physicsnemo>=2.0; extra == 'stormcast'
Requires-Dist: nvtx>=0.2.11; extra == 'stormcast'
Requires-Dist: omegaconf>=2.3.0; extra == 'stormcast'
Requires-Dist: pyproj>=3.7.1; extra == 'stormcast'
Requires-Dist: scipy>=1.15.2; extra == 'stormcast'
Provides-Extra: stormscope
Requires-Dist: earth2grid; extra == 'stormscope'
Requires-Dist: natten; extra == 'stormscope'
Requires-Dist: nvidia-physicsnemo>=2.0; extra == 'stormscope'
Requires-Dist: nvtx>=0.2.11; extra == 'stormscope'
Requires-Dist: scipy>=1.15.2; extra == 'stormscope'
Provides-Extra: utils
Requires-Dist: earth2grid; extra == 'utils'
Requires-Dist: scipy>=1.15.2; extra == 'utils'
Provides-Extra: windgust-afno
Requires-Dist: nvidia-physicsnemo>=1.0.1; extra == 'windgust-afno'
Description-Content-Type: text/markdown

<!-- markdownlint-disable MD002 MD033 MD041 MD053 -->
<div align="center">

# NVIDIA Earth2Studio

[![python version][e2studio_python_img]][e2studio_python_url]
[![license][e2studio_license_img]][e2studio_license_url]
[![coverage][e2studio_cov_img]][e2studio_cov_url]
[![mypy][e2studio_mypy_img]][e2studio_mypy_url]
[![format][e2studio_format_img]][e2studio_format_url]
[![ruff][e2studio_ruff_img]][e2studio_ruff_url]
[![uv][e2studio_uv_img]][e2studio_uv_url]

Earth2Studio is a Python-based package designed to get users up and running
with AI Earth system models *fast*.
Our mission is to enable everyone to build, research and explore AI driven weather and
climate science.

<!-- markdownlint-disable MD036 -->
**- Earth2Studio Documentation -**
<!-- markdownlint-enable MD036 -->

[Install][e2studio_install_url] | [User-Guide][e2studio_userguide_url] |
[Examples][e2studio_examples_url] | [API][e2studio_api_url]

![Earth2Studio Banner](https://huggingface.co/datasets/nvidia/earth2studio-assets/resolve/0.1.0/readme/earth2studio_feature_banner.png?id=1)

</div>

## Quick start

Running AI weather prediction can be done with just a few lines of code.

- For detailed installation steps, including model-specific installations, see the
    [install guide][e2studio_install_url].
- See the [examples][e2studio_examples_url] gallery providing different inference
    workflow samples.
- Swap out [data sources][e2studio_data_api] or [models][e2studio_px_api] depending on
    your use case!

### NVIDIA FourCastNet3

```python
from earth2studio.models.px import FCN3
from earth2studio.data import GFS
from earth2studio.io import ZarrBackend
from earth2studio.run import deterministic as run

model = FCN3.load_model(FCN3.load_default_package())
data = GFS()
io = ZarrBackend("outputs/fcn3_forecast.zarr")
run(["2025-01-01T00:00:00"], 10, model, data, io)
```

### ECMWF AIFS

```python
from earth2studio.models.px import AIFS
from earth2studio.data import IFS
from earth2studio.io import ZarrBackend
from earth2studio.run import deterministic as run

model = AIFS.load_model(AIFS.load_default_package())
data = IFS()
io = ZarrBackend("outputs/aifs_forecast.zarr")
run(["2025-01-01T00:00:00"], 10, model, data, io)
```

### Google Graphcast

```python
from earth2studio.models.px import GraphCastOperational
from earth2studio.data import GFS
from earth2studio.io import ZarrBackend
from earth2studio.run import deterministic as run

package = GraphCastOperational.load_default_package()
model = GraphCastOperational.load_model(package)
data = GFS()
io = ZarrBackend("outputs/graphcast_operational_forecast.zarr")
run(["2025-01-01T00:00:00"], 4, model, data, io)
```

> [!IMPORTANT]
> Earth2Studio is an interface to third‑party models, checkpoints, and datasets.
> Licenses for these assets are owned by their providers.
> Ensure you have the rights to download, use, and (if applicable) redistribute each
> model and dataset.
> Links to the original license and source are often provided in the API docs for each
> model/data source.

[![Watch the video](https://img.youtube.com/vi/Sog6aCapZeA/hqdefault.jpg)](https://www.youtube.com/watch?v=Sog6aCapZeA)

## Latest News

- [**StormScope**](https://nvidia.github.io/earth2studio/modules/generated/models/px/earth2studio.models.px.StormScopeGOES.html),
    NVIDIA's latest regional nowcasting model, is now available in
    Earth2Studio with a dedicated [inference example](https://nvidia.github.io/earth2studio/examples/20_stormscope_goes_example.html)
    to demonstrate its use for predicting CONUS satellite and radar data.
- [**Atlas**](https://nvidia.github.io/earth2studio/modules/generated/models/px/earth2studio.models.px.Atlas.html),
    NVIDIA's latest medium range model, is now available in Earth2Studio
    providing *state-of-the-art* accuracy for medium range global forecasts.
- [**CorrDiff for CMIP6 to ERA5**](https://nvidia.github.io/earth2studio/modules/generated/models/dx/earth2studio.models.dx.CorrDiffCMIP6.html)
    is a novel generative downscaling model to generate ERA5 fields from CMIP
    data enabling users to run ERA5 based prognostic and diagnostic models on future
    climate simulations.
- **ECMWF AIFSENS** model wrapper added, an ensemble-based probablistic data driven
    forecast model developed by the European Centre for Medium-Range Weather Forecasts
    (ECMWF).

For a complete list of latest features and improvements see the [changelog](./CHANGELOG.md).

## Overview

Earth2Studio is an *AI inference pipeline toolkit* focused on weather and climate
applications that is designed to ride on top of different AI frameworks, model
architectures, data sources and SciML tooling while providing a unified API.

<div align="center">

![Earth2Studio Overview 1](https://huggingface.co/datasets/nvidia/earth2studio-assets/resolve/0.1.0/readme/earth2studio-readme-overview-1.png?id=1)

</div>

The composability of the different core components in Earth2Studio easily allows the
development and deployment of increasingly complex pipelines that may chain multiple
data sources, AI models and other modules together.

<div align="center">

![Earth2Studio Overview 1](https://huggingface.co/datasets/nvidia/earth2studio-assets/resolve/0.1.0/readme/earth2studio-readme-overview-2.png?id=1)

</div>

The unified ecosystem of Earth2Studio provides users the opportunity to rapidly
swap out components for alternatives.
In addition to the largest model zoo of weather/climate AI models, Earth2Studio is
packed with useful functionality such as optimized data access to cloud data stores,
statistical operations and more to accelerate your pipelines.

<div align="center">

![Earth2Studio Overview 1](https://huggingface.co/datasets/nvidia/earth2studio-assets/resolve/0.1.0/readme/earth2studio-readme-overview-3.webp?id=1)

</div>

### Earth-2 Open Models

Access state of the art Nvidia open models for climate and weather: [Earth-2 Open Models](https://huggingface.co/collections/nvidia/earth-2).
For training recipes for these models, see the [PhysicsNeMo repository][physicsnemo_repo_url].

## Features

Earth2Studio package focuses on supplying you the tools to build your own
workflows, pipelines, APIs, or packages using modular components including:

<details>
<summary>Prognostic Models</summary>

[Prognostic models][e2studio_px_url]
    in Earth2Studio perform time integration, taking atmospheric fields at a specific
    time and auto-regressively predicting the same fields into the future (typically 6
    hours per step), enabling both single time-step predictions and extended time-series
    forecasting.

Earth2Studio maintains the largest collection of pre-trained state-of-the-art AI
    weather/climate models ranging from global forecast models to regional specialized
    models, covering various resolutions, architectures, and forecasting capabilities to
    suit different computational and accuracy requirements.

Available models include but are not limited to:

| Model | Resolution | Architecture | Time Step | Coverage |
|-------|------------|--------------|-----------|----------|
| GraphCast Small | 1.0° | Graph Neural Network | 6h | Global |
| GraphCast Operational | 0.25° | Graph Neural Network | 6h | Global |
| Pangu 3hr | 0.25° | Transformer | 3h | Global |
| Pangu 6hr | 0.25° | Transformer | 6h | Global |
| Pangu 24hr | 0.25° | Transformer | 24h | Global |
| Aurora | 0.25° | Transformer | 6h | Global |
| FuXi | 0.25° | Transformer | 6h | Global |
| AIFS | 0.25° | Transformer | 6h | Global |
| AIFS Ensemble | 0.25° | Transformer Ensemble | 6h | Global |
| StormCast | 3km | Diffusion + Regression | 1h | Regional (US) |
| SFNO | 0.25° | Neural Operator | 6h | Global |
| DLESyM | 0.25° | Convolutional | 6h | Global |

For a complete list, see the [prognostic model API docs][e2studio_px_api].

</details>

<details>
<summary>Diagnostic Models</summary>

[Diagnostic models][e2studio_dx_url] in Earth2Studio perform time-independent
    transformations, typically taking geospatial fields at a specific time and
    predicting new derived quantities without performing time integration enabling users
    to build pipelines to predict specific quantities of interest that may not be
    provided by forecasting models.

Earth2Studio contains a growing collection of specialized diagnostic models for
    various phenomena including precipitation prediction, tropical cyclone tracking,
    solar radiation estimation, wind gust forecasting, and more.

Available diagnostics include but are not limited to:

| Model | Resolution | Architecture | Coverage | Output |
|-------|------------|--------------|----------|--------|
| PrecipitationAFNO | 0.25° | Neural Operator  | Global | Total precipitation |
| SolarRadiationAFNO1H | 0.25° | Neural Operator  | Global | Surface solar radiation |
| WindgustAFNO | 0.25° | AFNO | Global | Maximum wind gust |
| TCTrackerVitart | 0.25° | Algorithmic | Global | TC tracks & properties |
| CBottleInfill | 100km | Diffusion | Global | Global climate sample |
| CBottleSR | 5km | Diffusion | Regional / Global | High-res climate |
| CorrDiff | Variable | Diffusion | Regional | Fine-scale weather |
| CorrDiffTaiwan | 2km | Diffusion | Regional (Taiwan) | Taiwan fine-scale weather |

For a complete list, see the [diagnostic model API docs][e2studio_dx_api].

</details>

<details>
<summary>Datasources</summary>

[Data sources][e2studio_data_url]
    in Earth2Studio provide a standardized API for accessing weather and climate
    datasets from various providers (numerical models, data assimilation results, and
    AI-generated data), enabling seamless integration of initial conditions for model
    inference and validation data for scoring across different data formats and storage
    systems.

Earth2Studio includes data sources ranging from operational weather models (GFS, HRRR,
    IFS) and reanalysis datasets (ERA5 via ARCO, CDS) to AI-generated climate data
    (cBottle) and local file systems. Fetching data is just plain easy, Earth2Studio
    handles the complicated parts giving you an easy to use Xarray data array of
    requested data under a shared package wide [vocabulary][e2studio_lex_url] and
    coordinate system.

Available data sources include but are not limited to:

| Data Source | Type | Resolution | Coverage | Data Format |
|-------------|------|------------|----------|-------------|
| GFS | Operational | 0.25° | Global | GRIB2 |
| GFS_FX | Forecast | 0.25° | Global | GRIB2 |
| HRRR | Operational | 3km | Regional (US) | GRIB2 |
| HRRR_FX | Forecast | 3km | Regional (US) | GRIB2 |
| ARCO ERA5 | Reanalysis | 0.25° | Global | Zarr |
| CDS | Reanalysis | 0.25° | Global | NetCDF |
| IFS | Operational | 0.25° | Global | GRIB2 |
| NCAR_ERA5 | Reanalysis | 0.25° | Global | NetCDF |
| WeatherBench2 | Reanalysis | 0.25° | Global | Zarr |
| GEFS_FX | Ensemble Forecast | 0.25° | Global | GRIB2 |
| ISD | Observational | Point | Regional (US) | CSV |
| MRMS | Reanalysis | 1km | Regional (US) | GRIB2 |

For a complete list, see the [data source API docs][e2studio_data_api].

</details>

<details>
<summary>IO Backends</summary>

[IO backends][e2studio_io_url] in
    Earth2Studio provides a standardized interface for writing and storing
    pipeline outputs across different file formats and storage systems enabling users
    to store inference outputs for later processing.

Earth2Studio includes IO backends ranging from traditional scientific formats (NetCDF)
    and modern cloud-optimized formats (Zarr) to in-memory storage backends.

Available IO backends include:

| IO Backend | Format | Features | Location |
|------------|--------|----------|----------|
| ZarrBackend | Zarr | Compression, Chunking | In-Memory/Local |
| AsyncZarrBackend | Zarr | Async writes, Parallel I/O | In-Memory/Local/Remote |
| NetCDF4Backend | NetCDF4 | CF-compliant, Metadata | In-Memory/Local |
| XarrayBackend | Xarray Dataset | Rich metadata, Analysis-ready | In-Memory |
| KVBackend | Key-Value| Fast Temporary Access | In-Memory |

For a complete list, see the [IO API docs][e2studio_io_api].

</details>

<details>
<summary>Perturbation Methods</summary>

[Perturbation methods][e2studio_pb_url]
    in Earth2Studio provide a standardized interface for adding noise
    to data arrays, typically enabling the creation of ensembling forecast pipelines
    that capture uncertainty in weather and climate predictions.

Available perturbations include but are not limited to:

| Perturbation Method | Type | Spatial Correlation | Temporal Correlation |
|---------------------|------|-------------------|---------------------|
| Gaussian | Noise | None | None |
| Correlated SphericalGaussian | Noise | Spherical | AR(1) process |
| Spherical Gaussian | Noise | Spherical (Matern) | None |
| Brown | Noise | 2D Fourier | None |
| Bred Vector | Dynamical | Model-dependent | Model-dependent |
| Hemispheric Centred Bred Vector | Dynamical | Hemispheric | Model-dependent |

For a complete list, see the [perturbations API docs][e2studio_pb_url].

</details>

<details>
<summary>Statistics / Metrics</summary>

[Statistics and metrics][e2studio_stat_url]
    in Earth2Studio provide operations typically useful for in-pipeline evaluation of
    forecast performance across different dimensions (spatial, temporal, ensemble)
    through various statistical measures including error metrics, correlation
    coefficients, and ensemble verification statistics.

Available operations include but are not limited to:

| Statistic | Type | Application |
|-----------|------|-------------|
| RMSE | Error Metric | Forecast accuracy |
| ACC | Correlation | Pattern correlation |
| CRPS | Ensemble Metric | Probabilistic skill |
| Rank Histogram | Ensemble Metric | Ensemble reliability |
| Standard Deviation | Moment | Spread measure |
| Spread-Skill Ratio | Ensemble Metric | Ensemble calibration |

For a complete list, see the [statistics API docs][e2studio_stat_api].

</details>

For a more complete list of features, be sure to view the [documentation][e2studio_docs_url].
Don't see what you need?
Great news, extension and customization are at the heart of our [design][e2studio_customization_url].

## Contributors

Check out the [contributing](CONTRIBUTING.md) document for details about the technical
requirements and the user guide for higher level philosophy, structure, and design.

## License

Earth2Studio is provided under the Apache License 2.0, refer to the
[LICENSE file][e2studio_license_url] for full license text.

<!-- Badge links -->

[e2studio_python_img]: https://img.shields.io/badge/Python-3.11%20|%203.12%20|%203.13-blue?style=flat-square&logo=python
[e2studio_license_img]: https://img.shields.io/badge/License-Apache%202.0-green?style=flat-square
[e2studio_format_img]: https://img.shields.io/badge/Code%20Style-Black-black?style=flat-square
[e2studio_mypy_img]: https://img.shields.io/badge/mypy-Checked-blue?style=flat-square&labelColor=grey
[e2studio_cov_img]: https://img.shields.io/codecov/c/github/nvidia/earth2studio?style=flat-square&logo=codecov
[e2studio_ruff_img]: https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/astral-sh/ruff/main/assets/badge/v2.json&style=flat-square
[e2studio_uv_img]: https://img.shields.io/endpoint?url=https%3A%2F%2Fraw.githubusercontent.com%2Fastral-sh%2Fuv%2Fmain%2Fassets%2Fbadge%2Fv0.json&style=flat-square

[e2studio_python_url]: https://www.python.org/downloads/
[e2studio_license_url]: ./LICENSE
[e2studio_format_url]: https://github.com/psf/black
[e2studio_cov_url]: ./test/
[e2studio_mypy_url]: https://mypy-lang.org/
[e2studio_ruff_url]: https://github.com/astral-sh/ruff
[e2studio_uv_url]: https://github.com/astral-sh/uv

<!-- Doc links -->
[e2studio_docs_url]: https://nvidia.github.io/earth2studio/
[e2studio_install_url]: https://nvidia.github.io/earth2studio/userguide/about/install.html
[e2studio_userguide_url]: https://nvidia.github.io/earth2studio/userguide/
[e2studio_examples_url]: https://nvidia.github.io/earth2studio/examples/
[e2studio_api_url]: https://nvidia.github.io/earth2studio/modules/
[e2studio_customization_url]: https://nvidia.github.io/earth2studio/examples/extend/index.html
[e2studio_px_url]: https://nvidia.github.io/earth2studio/userguide/components/prognostic.html
[e2studio_px_api]: https://nvidia.github.io/earth2studio/modules/models.html#earth2studio-models-px-prognostic
[e2studio_dx_url]: https://nvidia.github.io/earth2studio/userguide/components/diagnostic.html
[e2studio_dx_api]: https://nvidia.github.io/earth2studio/modules/models.html#earth2studio-models-dx-diagnostic
[e2studio_data_url]: https://nvidia.github.io/earth2studio/userguide/components/datasources.html
[e2studio_data_api]: https://nvidia.github.io/earth2studio/modules/datasources.html
[e2studio_io_url]: https://nvidia.github.io/earth2studio/userguide/components/io.html
[e2studio_io_api]: https://nvidia.github.io/earth2studio/modules/io.html
[e2studio_pb_url]: https://nvidia.github.io/earth2studio/userguide/components/perturbation.html
[e2studio_pb_api]: https://nvidia.github.io/earth2studio/modules/perturbation.html
[e2studio_stat_url]: https://nvidia.github.io/earth2studio/userguide/components/statistics.html
[e2studio_stat_api]: https://nvidia.github.io/earth2studio/modules/statistics.html
[e2studio_lex_url]: https://nvidia.github.io/earth2studio/userguide/advanced/lexicon.html

<!-- Misc links -->
[physicsnemo_repo_url]: https://github.com/NVIDIA/physicsnemo
