Skip to content

rslearn.dataset.window_data_storage.per_item_group

per_item_group

Default WindowDataStorage that writes one directory per item group.

  • Raster: layers/{layer_name}.{group_idx}/{bandset_dir}/...
  • Vector: layers/{layer_name}.{group_idx}/...

PerItemGroupStorage

Bases: WindowDataStorage

Default storage that writes one directory per item group.

On-disk layout:

  • Raster: layers/{layer_name}.{group_idx}/{bandset_dir}/...
  • Vector: layers/{layer_name}.{group_idx}/...
Source code in rslearn/dataset/window_data_storage/per_item_group.py
class PerItemGroupStorage(WindowDataStorage):
    """Default storage that writes one directory per item group.

    On-disk layout:

    - Raster: ``layers/{layer_name}.{group_idx}/{bandset_dir}/...``
    - Vector: ``layers/{layer_name}.{group_idx}/...``
    """

    @override
    def open_layer_writer(
        self,
        layer_name: str,
    ) -> LayerWriter:
        """Return a writer that writes each raster individually upon ``write_raster`` call."""
        return _PerItemGroupLayerWriter(self.window, layer_name)

    @override
    def read_raster(
        self,
        layer_name: str,
        bands: list[str],
        raster_format: RasterFormat,
        projection: Projection | None = None,
        bounds: PixelBounds | None = None,
        group_idx: int = 0,
        resampling: Resampling = Resampling.bilinear,
    ) -> RasterArray:
        """Decode the raster from the per-group directory."""
        proj = projection if projection is not None else self.window.projection
        bnds = bounds if bounds is not None else self.window.bounds
        raster_dir = per_item_group_raster_dir(
            self.window.window_root, layer_name, bands, group_idx
        )
        return raster_format.decode_raster(raster_dir, proj, bnds, resampling)

    @override
    def read_vector(
        self,
        layer_name: str,
        vector_format: VectorFormat,
        projection: Projection | None = None,
        bounds: PixelBounds | None = None,
        group_idx: int = 0,
    ) -> list[Feature]:
        """Decode the vector features from the per-group directory."""
        proj = projection if projection is not None else self.window.projection
        bnds = bounds if bounds is not None else self.window.bounds
        layer_dir = per_item_group_layer_dir(
            self.window.window_root, layer_name, group_idx
        )
        return vector_format.decode_vector(layer_dir, proj, bnds)

open_layer_writer

open_layer_writer(layer_name: str) -> LayerWriter

Return a writer that writes each raster individually upon write_raster call.

Source code in rslearn/dataset/window_data_storage/per_item_group.py
@override
def open_layer_writer(
    self,
    layer_name: str,
) -> LayerWriter:
    """Return a writer that writes each raster individually upon ``write_raster`` call."""
    return _PerItemGroupLayerWriter(self.window, layer_name)

read_raster

read_raster(layer_name: str, bands: list[str], raster_format: RasterFormat, projection: Projection | None = None, bounds: PixelBounds | None = None, group_idx: int = 0, resampling: Resampling = bilinear) -> RasterArray

Decode the raster from the per-group directory.

Source code in rslearn/dataset/window_data_storage/per_item_group.py
@override
def read_raster(
    self,
    layer_name: str,
    bands: list[str],
    raster_format: RasterFormat,
    projection: Projection | None = None,
    bounds: PixelBounds | None = None,
    group_idx: int = 0,
    resampling: Resampling = Resampling.bilinear,
) -> RasterArray:
    """Decode the raster from the per-group directory."""
    proj = projection if projection is not None else self.window.projection
    bnds = bounds if bounds is not None else self.window.bounds
    raster_dir = per_item_group_raster_dir(
        self.window.window_root, layer_name, bands, group_idx
    )
    return raster_format.decode_raster(raster_dir, proj, bnds, resampling)

read_vector

read_vector(layer_name: str, vector_format: VectorFormat, projection: Projection | None = None, bounds: PixelBounds | None = None, group_idx: int = 0) -> list[Feature]

Decode the vector features from the per-group directory.

Source code in rslearn/dataset/window_data_storage/per_item_group.py
@override
def read_vector(
    self,
    layer_name: str,
    vector_format: VectorFormat,
    projection: Projection | None = None,
    bounds: PixelBounds | None = None,
    group_idx: int = 0,
) -> list[Feature]:
    """Decode the vector features from the per-group directory."""
    proj = projection if projection is not None else self.window.projection
    bnds = bounds if bounds is not None else self.window.bounds
    layer_dir = per_item_group_layer_dir(
        self.window.window_root, layer_name, group_idx
    )
    return vector_format.decode_vector(layer_dir, proj, bnds)

PerItemGroupStorageFactory

Bases: WindowDataStorageFactory

Factory that creates :class:PerItemGroupStorage instances.

Source code in rslearn/dataset/window_data_storage/per_item_group.py
class PerItemGroupStorageFactory(WindowDataStorageFactory):
    """Factory that creates :class:`PerItemGroupStorage` instances."""

    @override
    def create(self, window: Window) -> PerItemGroupStorage:
        """Create a PerItemGroupStorage bound to the given window."""
        return PerItemGroupStorage(window)

create

create(window: Window) -> PerItemGroupStorage

Create a PerItemGroupStorage bound to the given window.

Source code in rslearn/dataset/window_data_storage/per_item_group.py
@override
def create(self, window: Window) -> PerItemGroupStorage:
    """Create a PerItemGroupStorage bound to the given window."""
    return PerItemGroupStorage(window)

per_item_group_layer_dir

per_item_group_layer_dir(window_root: UPath, layer_name: str, group_idx: int = 0) -> UPath

Per-item-group layer directory: layers/{layer_name} or layers/{layer_name}.{group_idx}.

Source code in rslearn/dataset/window_data_storage/per_item_group.py
def per_item_group_layer_dir(
    window_root: UPath, layer_name: str, group_idx: int = 0
) -> UPath:
    """Per-item-group layer directory: ``layers/{layer_name}`` or ``layers/{layer_name}.{group_idx}``."""
    folder_name = layer_name if group_idx == 0 else f"{layer_name}.{group_idx}"
    return window_root / LAYERS_SUBDIR / folder_name

per_item_group_raster_dir

per_item_group_raster_dir(window_root: UPath, layer_name: str, bands: list[str], group_idx: int) -> UPath

Per-item-group raster directory: layers/{layer_name}.{group_idx}/{bandset}/.

Source code in rslearn/dataset/window_data_storage/per_item_group.py
def per_item_group_raster_dir(
    window_root: UPath, layer_name: str, bands: list[str], group_idx: int
) -> UPath:
    """Per-item-group raster directory: ``layers/{layer_name}.{group_idx}/{bandset}/``."""
    dirname = get_bandset_dirname(bands)
    return per_item_group_layer_dir(window_root, layer_name, group_idx) / dirname