Xarrayspecs
Xarray specifications via type hints
Installation
pip install xarrayspecs
Basic Usage
Xarray DataArray Specifications
import numpy as np
import xarrayspecs as xs
from dataclasses import dataclass
from numpy.typing import NDArray
from typing import Annotated, Any
@dataclass
class Temp(xs.AsDataArray):
temp: Annotated[
NDArray[Any],
xs.use("data"),
xs.dims("lon", "lat"),
xs.dtype(np.float64),
xs.attrs(long_name="Temperature", units="K"),
]
lat: Annotated[
NDArray[Any],
xs.use("coord"),
xs.dims("lat"),
xs.dtype(np.float64),
xs.attrs(long_name="Latitude", units="deg"),
]
lon: Annotated[
NDArray[Any],
xs.use("coord"),
xs.dims("lon"),
xs.dtype(np.float64),
xs.attrs(long_name="Longitude", units="deg"),
]
date: Annotated[str, xs.use("attr")]
Temp.new(
np.random.uniform(273, 293, size=(2, 2)),
np.array([0, 1]),
np.array([2, 3]),
"2026-03-01",
)
<xarray.DataArray 'temp' (lon: 2, lat: 2)> Size: 32B
array([[283.97627008, 287.30378733],
[285.05526752, 283.89766366]])
Coordinates:
* lon (lon) float64 16B 2.0 3.0
* lat (lat) float64 16B 0.0 1.0
Attributes:
long_name: Temperature
units: K
date: 2026-03-01
Xarray Dataset Specifications
@dataclass
class Weather(xs.AsDataset):
temp: Annotated[
NDArray[Any],
xs.use("data"),
xs.dims("lon", "lat"),
xs.dtype(np.float64),
xs.attrs(long_name="Temperature", units="K"),
]
humid: Annotated[
NDArray[Any],
xs.use("data"),
xs.dims("lon", "lat"),
xs.dtype(np.float64),
xs.attrs(long_name="Humidity", units="%"),
]
lat: Annotated[
NDArray[Any],
xs.use("coord"),
xs.dims("lat"),
xs.dtype(np.float64),
xs.attrs(long_name="Latitude", units="deg"),
]
lon: Annotated[
NDArray[Any],
xs.use("coord"),
xs.dims("lon"),
xs.dtype(np.float64),
xs.attrs(long_name="Longitude", units="deg"),
]
date: Annotated[str, xs.use("attr")]
Weather.new(
np.random.uniform(273, 293, size=(2, 2)),
np.random.uniform(0, 100, size=(2, 2)),
np.array([0, 1]),
np.array([2, 3]),
"2026-03-01",
)
<xarray.Dataset> Size: 96B
Dimensions: (lat: 2, lon: 2)
Coordinates:
* lat (lat) float64 16B 0.0 1.0
* lon (lon) float64 16B 2.0 3.0
Data variables:
temp (lon, lat) float64 32B 284.0 287.3 285.1 283.9
humid (lon, lat) float64 32B 42.37 64.59 43.76 89.18
Attributes:
date: 2026-03-01
Xarray DataTree Specifications
Temp = Annotated[
NDArray[Any],
xs.use("data"),
xs.name("temp"),
xs.dims("lon", "lat"),
xs.dtype(np.float64),
xs.attrs(long_name="Temperature", units="K"),
]
Humid = Annotated[
NDArray[Any],
xs.use("data"),
xs.name("humid"),
xs.dims("lon", "lat"),
xs.dtype(np.float64),
xs.attrs(long_name="Humidity", units="%"),
]
Lat = Annotated[
NDArray[Any],
xs.use("coord"),
xs.name("lat"),
xs.dims("lat"),
xs.dtype(np.float64),
xs.attrs(long_name="Latitude", units="deg"),
]
Lon = Annotated[
NDArray[Any],
xs.use("coord"),
xs.name("lon"),
xs.dims("lon"),
xs.dtype(np.float64),
xs.attrs(long_name="Longitude", units="deg"),
]
Date = Annotated[str, xs.use("attr"), xs.name("date")]
@dataclass
class Weathers(xs.AsDataTree):
temp_0: Annotated[Temp, xs.node("/0")]
temp_1: Annotated[Temp, xs.node("/1")]
humid_0: Annotated[Humid, xs.node("/0")]
humid_1: Annotated[Humid, xs.node("/1")]
lat_0: Annotated[Lat, xs.node("/0")]
lat_1: Annotated[Lat, xs.node("/1")]
lon_0: Annotated[Lon, xs.node("/0")]
lon_1: Annotated[Lon, xs.node("/1")]
date_0: Annotated[Date, xs.node("/0")]
date_1: Annotated[Date, xs.node("/1")]
Weathers.new(
np.random.uniform(273, 293, size=(2, 2)),
np.random.uniform(273, 293, size=(2, 2)),
np.random.uniform(0, 100, size=(2, 2)),
np.random.uniform(0, 100, size=(2, 2)),
np.array([0, 1]),
np.array([0, 1]),
np.array([2, 3]),
np.array([2, 3]),
"2026-03-01",
"2026-03-01",
)
<xarray.DataTree>
Group: /
├── Group: /0
│ Dimensions: (lat: 2, lon: 2)
│ Coordinates:
│ * lat (lat) float64 16B 0.0 1.0
│ * lon (lon) float64 16B 2.0 3.0
│ Data variables:
│ temp (lon, lat) float64 32B 284.0 287.3 285.1 283.9
│ humid (lon, lat) float64 32B 96.37 38.34 79.17 52.89
│ Attributes:
│ date: 2026-03-01
└── Group: /1
Dimensions: (lat: 2, lon: 2)
Coordinates:
* lat (lat) float64 16B 0.0 1.0
* lon (lon) float64 16B 2.0 3.0
Data variables:
temp (lon, lat) float64 32B 281.5 285.9 281.8 290.8
humid (lon, lat) float64 32B 56.8 92.56 7.104 8.713
Attributes:
date: 2026-03-01
Metadata
Release files for xarrayspecs 0.10.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| xarrayspecs-0.10.1.tar.gz | 101.9 kB | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| xarrayspecs-0.10.1-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 110.1 kB
Release files / xarrayspecs-0.10.1.tar.gz
| Download URL | xarrayspecs-0.10.1.tar.gz |
|---|---|
| Size | 101.9 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
c9820100e958baaa8ecf68fc99e66318137507280bb90493a2b50bbde5503859
|
|
BLAKE2b-256 checksum How to use checksums |
1e49ecf81d0ce119e860cf44e783c3bd770bf9ae9e6c32f527673df5dd560a4d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / xarrayspecs-0.10.1-py3-none-any.whl
| Download URL | xarrayspecs-0.10.1-py3-none-any.whl |
|---|---|
| Size | 8.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
2dfbc7c08856a256a004e0620c735c845dc4cd4ea0d8cb8a2194da88435bd778
|
|
BLAKE2b-256 checksum How to use checksums |
36caa836e706fdcd0e8d08e70b727d3a78912cf5abac025b1349003cdc100c03
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.9.30 {"installer":{"name":"uv","version":"0.9.30","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Debian GNU/Linux","version":"12","id":"bookworm","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|