def from_json_value(cls, data: JsonValue) -> "Annotation": data_dict = ensureJsonObject(data) raw_voxels = ensureJsonArray(data_dict.get("voxels")) voxels: Sequence[Point5D] = [ Point5D.from_json_value(raw_voxel) for raw_voxel in raw_voxels ] color = Color.from_json_data(data_dict.get("color")) raw_data = DataSource.from_json_value(data_dict.get("raw_data")) start = Point5D.min_coords(voxels) stop = Point5D.max_coords( voxels ) + 1 # +1 because slice.stop is exclusive, but max_point isinclusive scribbling_roi = Interval5D.create_from_start_stop(start=start, stop=stop) if scribbling_roi.shape.c != 1: raise ValueError( f"Annotations must not span multiple channels: {voxels}") scribblings = Array5D.allocate(scribbling_roi, dtype=np.dtype(bool), value=False) for voxel in voxels: scribblings.paint_point(point=voxel, value=True) return cls(scribblings._data, axiskeys=scribblings.axiskeys, color=color, raw_data=raw_data, location=start)
def from_json_value(cls, value: JsonValue) -> "N5DataSource": value_obj = ensureJsonObject(value) raw_location = value_obj.get("location") return N5DataSource( path=Path(ensureJsonString(value_obj.get("path"))), filesystem=JsonableFilesystem.from_json_value(value_obj.get("filesystem")), location=raw_location if raw_location is None else Point5D.from_json_value(raw_location), )
def from_json_value(cls, value: JsonValue) -> "SkimageDataSource": value_obj = ensureJsonObject(value) raw_location = value_obj.get("location") raw_tile_shape = value_obj.get("tile_shape") return SkimageDataSource( path=Path(ensureJsonString(value_obj.get("path"))), location=Point5D.zero() if raw_location is None else Point5D.from_json_value(raw_location), filesystem=JsonableFilesystem.from_json_value( value_obj.get("filesystem")), tile_shape=None if raw_tile_shape is None else Shape5D.from_json_value(raw_tile_shape))
def from_json_value(cls, value: JsonValue) -> "H5DataSource": value_obj = ensureJsonObject(value) raw_location = value_obj.get("location") return H5DataSource( outer_path=Path(ensureJsonString(value_obj.get("outer_path"))), inner_path=PurePosixPath( ensureJsonString(value_obj.get("inner_path"))), filesystem=JsonableFilesystem.from_json_value( value_obj.get("filesystem")), location=Point5D.zero() if raw_location is None else Point5D.from_json_value(raw_location), )
def from_json_value(cls, value: JsonValue) -> "PrecomputedChunksDataSource": value_obj = ensureJsonObject(value) raw_location = value_obj.get("location") raw_chunk_size = value_obj.get("chunk_size") return PrecomputedChunksDataSource( path=Path(ensureJsonString(value_obj.get("path"))), resolution=ensureJsonIntTripplet( value_obj.get("spatial_resolution") ), # FIXME? change to just resolution? location=None if raw_location is None else Point5D.from_json_value(raw_location), chunk_size=None if raw_chunk_size is None else Shape5D.from_json_value(raw_chunk_size), filesystem=JsonableFilesystem.from_json_value( value_obj.get("filesystem")), )