Source code for gunpowder.array_spec

import copy

from .coordinate import Coordinate
from .freezable import Freezable


[docs] class ArraySpec(Freezable): """Contains meta-information about an array. This is used by :class:`BatchProviders<BatchProvider>` to communicate the arrays they offer, as well as by :class:`Arrays<Array>` to describe the data they contain. Attributes: roi (:class:`Roi`): The region of interested represented by this array spec. Can be ``None`` for nonspatial arrays or to indicate the true value is unknown. voxel_size (:class:`Coordinate`): The size of the spatial axises in world units. Can be ``None`` for nonspatial arrays or to indicate the true value is unknown. interpolatable (``bool``): Whether the values of this array can be interpolated. nonspatial (``bool``, optional): If set, this array does not represent spatial data (e.g., a list of labels for samples in a batch). ``roi`` and ``voxel_size`` have to be ``None``. No consistency checks will be performed. dtype (``np.dtype``): The data type of the array. """ def __init__( self, roi=None, voxel_size=None, interpolatable=None, nonspatial=False, dtype=None, placeholder=False, ): self.roi = roi self.voxel_size = None if voxel_size is None else Coordinate(voxel_size) self.interpolatable = interpolatable self.nonspatial = nonspatial self.dtype = dtype self.placeholder = placeholder if nonspatial: assert roi is None, "Non-spatial arrays can not have a ROI" assert voxel_size is None, "Non-spatial arrays can not have a voxel size" self.freeze() def update_with(self, spec): if self.roi is not None and spec.roi is not None: self.roi = self.roi.union(spec.roi) elif spec.roi is not None: self.roi = spec.roi if spec.voxel_size is not None: self.voxel_size = spec.voxel_size if spec.interpolatable is not None: self.interpolatable = spec.interpolatable if spec.nonspatial is not None: self.nonspatial = spec.nonspatial if spec.dtype is not None: self.dtype = spec.dtype if spec.placeholder is not None: self.placeholder = spec.placeholder
[docs] def copy(self): """Create a copy of this spec.""" return copy.deepcopy(self)
def __eq__(self, other): if isinstance(other, self.__class__): return self.__dict__ == other.__dict__ return NotImplemented def __ne__(self, other): if isinstance(other, self.__class__): return not self.__eq__(other) return NotImplemented def __repr__(self): r = "" r += "ROI: " + str(self.roi) + ", " r += "voxel size: " + str(self.voxel_size) + ", " r += "interpolatable: " + str(self.interpolatable) + ", " r += "non-spatial: " + str(self.nonspatial) + ", " r += "dtype: " + str(self.dtype) + ", " r += "placeholder: " + str(self.placeholder) return r