Skip to content

Cloud Sources

CubeDynamics is designed to operate on cloud-hosted environmental data without turning cloud access into the central abstraction.

The goal is not to make users think in terms of provider-specific plumbing.

The goal is to make this stable:

cube = load_data(...)
result = pipe(cube) | some_verb()

Why Cloud Matters

Cloud-hosted archives make it possible to:

  • avoid managing massive local datasets
  • move from notebook experiments to larger workflows
  • orchestrate the same computation in automated systems

Role In CubeDynamics

Cloud access is part of the streaming interface, not the whole product.

CubeDynamics sits above the storage and retrieval layer and focuses on consistent environmental computation once data enters the cube interface.

Global Climate Cubes

For global climate archives, the preferred generic path is to open the remote dataset with xarray and pass the lazy object to stream_global_climate_cube.

import xarray as xr
import cubedynamics as cd

source = xr.open_zarr("s3://example-bucket/terraclimate.zarr", chunks={"time": 12})

cube = cd.stream_global_climate_cube(
    source,
    variables=["tmax", "tmin"],
    bbox=[-105.5, 39.8, -105.0, 40.2],
    source_name="terraclimate_zarr",
)

The adapter does not download, cache, or authenticate on behalf of the caller. It normalizes dimensions to (time, y, x), applies an optional AOI slice, and keeps the original lazy chunks intact for downstream verbs.