8000 Use ArrayLike where appropriate. by ttung · Pull Request #1650 · spacetx/starfish · GitHub
[go: up one dir, main page]
More Web Proxy on the site http://driver.im/
Skip to content

Use ArrayLike where appropriate. #1650

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 1 commit into from
Nov 18, 2019
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions starfish/core/image/Filter/reduce.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,13 @@
from typing import (
cast,
Iterable,
MutableMapping,
Sequence,
Union
)

import numpy as np

from starfish.core.imagestack.imagestack import ImageStack
from starfish.core.types import Axes, Clip, Coordinates, FunctionSource, Number
from starfish.core.types import ArrayLike, Axes, Clip, Coordinates, FunctionSource, Number
from starfish.core.util.dtype import preserve_float_range
from ._base import FilterAlgorithm

Expand Down Expand Up @@ -125,7 +123,7 @@ def run(
reduced = preserve_float_range(reduced, rescale=True)

# Update the physical coordinates
physical_coords: MutableMapping[Coordinates, Sequence[Number]] = {}
physical_coords: MutableMapping[Coordinates, ArrayLike[Number]] = {}
for axis, coord in (
(Axes.X, Coordinates.X),
(Axes.Y, Coordinates.Y),
Expand All @@ -135,7 +133,7 @@ def run(
assert coord.value not in reduced.coords
physical_coords[coord] = [np.average(stack._data.coords[coord.value])]
else:
physical_coords[coord] = cast(Sequence[Number], reduced.coords[coord.value])
physical_coords[coord] = reduced.coords[coord.value]
reduced_stack = ImageStack.from_numpy(reduced.values, coordinates=physical_coords)

return reduced_stack
6 changes: 3 additions & 3 deletions starfish/core/image/Segment/watershed.py
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
from typing import Mapping, Optional, Sequence, Tuple
from typing import Mapping, Optional, Tuple

import numpy as np
import scipy.ndimage.measurements as spm
Expand All @@ -12,7 +12,7 @@
from starfish.core.imagestack.imagestack import ImageStack
from starfish.core.morphology.binary_mask import BinaryMaskCollection
from starfish.core.morphology.label_image import LabelImage
from starfish.core.types import Axes, Clip, Coordinates, Number
from starfish.core.types import ArrayLike, Axes, Clip, Coordinates, Number
from ._base import SegmentAlgorithm


Expand Down Expand Up @@ -99,7 +99,7 @@ def run(
)

# we max-projected and squeezed the Z-plane so label_image.ndim == 2
physical_ticks: Mapping[Coordinates, Sequence[Number]] = {
physical_ticks: Mapping[Coordinates, ArrayLike[Number]] = {
coord: nuclei.xarray.coords[coord.value].data
for coord in (Coordinates.Y, Coordinates.X)
}
Expand Down
5 changes: 3 additions & 2 deletions starfish/core/imagestack/imagestack.py
Original file line number Diff line number Diff line change
Expand Up @@ -47,6 +47,7 @@
from starfish.core.imagestack.parser.numpy import NumpyData
from starfish.core.imagestack.parser.tileset import TileSetData
from starfish.core.types import (
ArrayLike,
Axes,
Clip,
Coordinates,
Expand Down Expand Up @@ -319,7 +320,7 @@ def from_numpy(
cls,
array: np.ndarray,
index_labels: Optional[Mapping[Axes, Sequence[int]]]=None,
coordinates: Optional[Mapping[Coordinates, Sequence[Number]]]=None,
coordinates: Optional[Mapping[Coordinates, ArrayLike[Number]]]=None,
) -> "ImageStack":
"""Create an ImageStack from a 5d numpy array with shape (n_round, n_ch, n_z, y, x)

Expand All @@ -330,7 +331,7 @@ def from_numpy(
index_labels : Optional[Mapping[Axes, Sequence[int]]]
Mapping from axes (r, ch, z) to their labels. If this is not provided, then the axes
will be labeled from 0..(n-1), where n=the size of the axes.
coordinates : Optional[Mapping[Coordinates, Sequence[Number]]]
coordinates : Optional[Mapping[Coordinates, ArrayLike[Number]]]
Map from Coordinates to a sequence of coordinate values. If this is not provided, then
the ImageStack gets fake coordinates.

Expand Down
6 changes: 3 additions & 3 deletions starfish/core/imagestack/parser/_tiledata.py
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
from typing import Collection, Mapping, Sequence
from typing import Collection, Mapping

import numpy as np

from starfish.core.types import Axes, Coordinates, Number
from starfish.core.types import ArrayLike, Axes, Coordinates, Number
from ._key import TileKey


Expand All @@ -26,7 +26,7 @@ def numpy_array(self) -> np.ndarray:
raise NotImplementedError()

@property
def coordinates(self) -> Mapping[Coordinates, Sequence[Number]]:
def coordinates(self) -> Mapping[Coordinates, ArrayLike[Number]]:
raise NotImplementedError()

@property
Expand Down
10 changes: 5 additions & 5 deletions starfish/core/imagestack/parser/crop.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from collections import OrderedDict
from typing import Collection, List, Mapping, MutableSequence, Optional, Sequence, Tuple, Union
from typing import Collection, List, Mapping, MutableSequence, Optional, Tuple, Union

import numpy as np
from slicedimage import Tile, TileSet

from starfish.core.imagestack.parser import TileCollectionData, TileData, TileKey
from starfish.core.types import Axes, Coordinates, Number
from starfish.core.types import ArrayLike, Axes, Coordinates, Number


class CropParameters:
Expand Down Expand Up @@ -221,8 +221,8 @@ def crop_image(self, image: np.ndarray) -> np.ndarray:
return image[output_y_shape[0]:output_y_shape[1], output_x_shape[0]:output_x_shape[1]]

def crop_coordinates(
self, coordinates: Mapping[Coordinates, Sequence[Number]],
) -> Mapping[Coordinates, Sequence[Number]]:
self, coordinates: Mapping[Coordinates, ArrayLike[Number]],
) -> Mapping[Coordinates, ArrayLike[Number]]:
"""
Given a mapping of coordinate to coordinate values, return a mapping of the coordinate to
cropped coordinate values.
Expand Down Expand Up @@ -256,7 +256,7 @@ def numpy_array(self) -> np.ndarray:
return self.cropping_parameters.crop_image(self.backing_tile_data.numpy_array)

@property
def coordinates(self) -> Mapping[Coordinates, Sequence[Number]]:
def coordinates(self) -> Mapping[Coordinates, ArrayLike[Number]]:
return self.cropping_parameters.crop_coordinates(self.backing_tile_data.coordinates)

@property
Expand Down
14 changes: 5 additions & 9 deletions starfish/core/imagestack/parser/numpy/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,26 +3,22 @@
"""
from itertools import product
from typing import (
Any,
Collection,
Mapping,
MutableMapping,
MutableSequence,
Optional,
Sequence,
Tuple,
)

import numpy as np
import xarray as xr

from starfish.core.imagestack.parser import TileCollectionData, TileData, TileKey
from starfish.core.types import (
ArrayLike,
Axes,
Coordinates,
Number,
PHYSICAL_COORDINATE_DIMENSION,
PhysicalCoordinateTypes,
)


Expand All @@ -34,7 +30,7 @@ class NumpyImageTile(TileData):
def __init__(
self,
data: np.ndarray,
coordinates: Mapping[Coordinates, Sequence[Number]],
coordinates: Mapping[Coordinates, ArrayLike[Number]],
selector: Mapping[Axes, int],
) -> None:
self._data = data
Expand All @@ -53,7 +49,7 @@ def numpy_array(self):
return self._data

@property
def coordinates(self) -> Mapping[Coordinates, Sequence[Number]]:
def coordinates(self) -> Mapping[Coordinates, ArrayLike[Number]]:
return self._coordinates

@property
Expand All @@ -70,7 +66,7 @@ def __init__(
self,
data: np.ndarray,
index_labels: Mapping[Axes, Sequence[int]],
coordinates: Optional[Mapping[Coordinates, Sequence[Number]]],
coordinates: Optional[Mapping[Coordinates, ArrayLike[Number]]],
) -> None:
self.data = data
self.index_labels = index_labels
Expand Down Expand Up @@ -122,7 +118,7 @@ def get_tile(self, r: int, ch: int, z: int) -> TileData:
pos_ch = self.index_labels[Axes.CH].index(ch)
pos_z = self.index_labels[Axes.ZPLANE].index(z)

coordinates: MutableMapping[Coordinates, Sequence[Number]] = dict()
coordinates: MutableMapping[Coordinates, ArrayLike[Number]] = dict()

if self.coordinates is not None:
coordinates[Coordinates.X] = self.coordinates[Coordinates.X]
Expand Down
6 changes: 3 additions & 3 deletions starfish/core/imagestack/parser/tileset/_parser.py
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@
"""
This module parses and retains the extras metadata attached to TileSet extras.
"""
from typing import Collection, Mapping, MutableMapping, Sequence, Tuple
from typing import Collection, Mapping, MutableMapping, Tuple

import numpy as np
from slicedimage import Tile, TileSet

from starfish.core.imagestack.dataorder import AXES_DATA
from starfish.core.imagestack.parser import TileCollectionData, TileData, TileKey
from starfish.core.imagestack.physical_coordinates import _get_physical_coordinates_of_z_plane
from starfish.core.types import Axes, Coordinates, Number
from starfish.core.types import ArrayLike, Axes, Coordinates, Number


class SlicedImageTile(TileData):
Expand Down Expand Up @@ -51,7 +51,7 @@ def numpy_array(self) -> np.ndarray:
return self._numpy_array

@property
def coordinates(self) -> Mapping[Coordinates, Sequence[Number]]:
def coordinates(self) -> Mapping[Coordinates, ArrayLike[Number]]:
xrange = self._wrapped_tile.coordinates[Coordinates.X]
yrange = self._wrapped_tile.coordinates[Coordinates.Y]
return_coords = {
Expand Down
8 changes: 4 additions & 4 deletions starfish/core/morphology/binary_mask/_io.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,13 +4,13 @@
import tarfile
import warnings
from dataclasses import dataclass
from typing import BinaryIO, List, Mapping, MutableSequence, Optional, Sequence, Tuple, Type
from typing import BinaryIO, List, Mapping, MutableSequence, Optional, Tuple, Type

import numpy as np
from packaging.version import Version

from starfish.core.errors import DataFormatWarning
from starfish.core.types import Axes, Coordinates, Number, STARFISH_EXTRAS_KEY
from starfish.core.types import ArrayLike, Axes, Coordinates, Number, STARFISH_EXTRAS_KEY
from starfish.core.util.logging import Log
from . import binary_mask as bm

Expand Down Expand Up @@ -94,8 +94,8 @@ class MaskOnDisk:
def read_binary_mask(self, tf: tarfile.TarFile) -> bm.BinaryMaskCollection:
log: Optional[Log] = None
masks: MutableSequence[bm.MaskData] = []
pixel_ticks: Optional[Mapping[Axes, Sequence[int]]] = None
physical_ticks: Optional[Mapping[Coordinates, Sequence[Number]]] = None
pixel_ticks: Optional[Mapping[Axes, ArrayLike[int]]] = None
physical_ticks: Optional[Mapping[Coordinates, ArrayLike[Number]]] = None

while True:
tarinfo: Optional[tarfile.TarInfo] = tf.next()
Expand Down
18 changes: 9 additions & 9 deletions starfish/core/morphology/binary_mask/binary_mask.py
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@

from starfish.core.morphology.label_image import LabelImage
from starfish.core.morphology.util import _get_axes_names
from starfish.core.types import Axes, Coordinates, Number
from starfish.core.types import ArrayLike, Axes, Coordinates, Number
from starfish.core.util.logging import Log
from .expand import fill_from_mask

Expand All @@ -39,10 +39,10 @@ class BinaryMaskCollection:

Parameters
----------
pixel_ticks : Union[Mapping[Axes, Sequence[int]], Mapping[str, Sequence[int]]]
pixel_ticks : Union[Mapping[Axes, ArrayLike[int]], Mapping[str, ArrayLike[int]]]
A map from the axis to the values for that axis.
physical_ticks : Union[Mapping[Coordinates, Sequence[Number]],
Mapping[str, Sequence[Number]]
physical_ticks : Union[Mapping[Coordinates, ArrayLike[Number]],
Mapping[str, ArrayLike[Number]]
A map from the physical coordinate type to the values for axis. For 2D label images,
X and Y physical coordinates must be provided. For 3D label images, Z physical
coordinates must also be provided.
Expand All @@ -56,17 +56,17 @@ class BinaryMaskCollection:
"""
def __init__(
self,
pixel_ticks: Union[Mapping[Axes, Sequence[int]], Mapping[str, Sequence[int]]],
physical_ticks: Union[Mapping[Coordinates, Sequence[Number]],
Mapping[str, Sequence[Number]]],
pixel_ticks: Union[Mapping[Axes, ArrayLike[int]], Mapping[str, ArrayLike[int]]],
physical_ticks: Union[Mapping[Coordinates, ArrayLike[Number]],
Mapping[str, ArrayLike[Number]]],
masks: Sequence[MaskData],
log: Optional[Log],
):
self._pixel_ticks: Mapping[Axes, Sequence[int]] = {
self._pixel_ticks: Mapping[Axes, ArrayLike[int]] = {
Axes(axis): axis_data
for axis, axis_data in pixel_ticks.items()
}
self._physical_ticks: Mapping[Coordinates, Sequence[Number]] = {
self._physical_ticks: Mapping[Coordinates, ArrayLike[Number]] = {
Coordinates(coord): coord_data
for coord, coord_data in physical_ticks.items()
}
Expand Down
22 changes: 12 additions & 10 deletions starfish/core/morphology/label_image/label_image.py
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
from pathlib import Path
from typing import Any, Hashable, Mapping, MutableMapping, Optional, Sequence, Tuple, Union
from typing import Any, Hashable, Mapping, MutableMapping, Optional, Tuple, Union

import numpy as np
import xarray as xr
from semantic_version import Version

from starfish.core.morphology.util import _get_axes_names
from starfish.core.types import Axes, Coordinates, LOG, Number, STARFISH_EXTRAS_KEY
from starfish.core.types import ArrayLike, Axes, Coordinates, LOG, Number, STARFISH_EXTRAS_KEY
from starfish.core.util.logging import Log


Expand Down Expand Up @@ -53,11 +53,11 @@ def from_array_and_coords(
cls,
array: np.ndarray,
pixel_coordinates: Optional[Union[
Mapping[Axes, Sequence[int]],
Mapping[str, Sequence[int]]]],
Mapping[Axes, ArrayLike[int]],
Mapping[str, ArrayLike[int]]]],
physical_coordinates: Union[
Mapping[Coordinates, Sequence[Number]],
Mapping[str, Sequence[Number]]],
Mapping[Coordinates, ArrayLike[Number]],
Mapping[str, ArrayLike[Number]]],
log: Optional[Log],
) -> "LabelImage":
"""Constructs a LabelImage from an array containing the labels, a set of physical
Expand All @@ -68,23 +68,25 @@ def from_array_and_coords(
array : np.ndarray
A 2D or 3D array containing the labels. The ordering of the axes must be Y, X for 2D
images and ZPLANE, Y, X for 3D images.
pixel_coordinates : Optional[Mapping[Union[Axes, str], Sequence[int]]]
pixel_coordinates : Optional[Union[Mapping[Axes, ArrayLike[int]],
Mapping[str, ArrayLike[int]]]]
A map from the axis to the values for that axis. For any axis that exist in the array
but not in pixel_coordinates, the pixel coordinates are assigned from 0..N-1, where N is
the size along that axis.
physical_coordinates : Mapping[Union[Coordinates, str], Sequence[Number]]
physical_coordinates : Union[Mapping[Coordinates, ArrayLike[Number]],
Mapping[str, ArrayLike[Number]]]
A map from the physical coordinate type to the values for axis. For 2D label images,
X and Y physical coordinates must be provided. For 3D label images, Z physical
coordinates must also be provided.
log : Optional[Log]
A log of how this label image came to be.
"""
# normalize the pixel coordinates to Mapping[Axes, Sequence[int]]
# normalize the pixel coordinates to Mapping[Axes, ArrayLike[int]]
pixel_coordinates = {
axis if isinstance(axis, Axes) else Axes(axis): axis_values
for axis, axis_values in (pixel_coordinates or {}).items()
}
# normalize the physical coordinates to Mapping[Coordinates, Sequence[Number]]
# normalize the physical coordinates to Mapping[Coordinates, ArrayLike[Number]]
physical_coordinates = {
coord if isinstance(coord, Coordinates) else Coordinates(coord): coord_values
for coord, coord_values in physical_coordinates.items()
Expand Down
6 changes: 3 additions & 3 deletions starfish/core/morphology/label_image/test/test_label_image.py
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
from typing import Mapping, Optional, Sequence, Type
from typing import Mapping, Optional, Type

import numpy as np
import pytest

from starfish import Log
from starfish.image import Filter
from starfish.types import Axes, Coordinates, Number
from starfish.types import ArrayLike, Axes, Coordinates, Number
from ..label_image import AttrKeys, CURRENT_VERSION, DOCTYPE_STRING, LabelImage


Expand Down Expand Up @@ -56,7 +56,7 @@
)
def test_from_array_and_coords(
array: np.ndarray,
physical_coordinates: Mapping[Coordinates, Sequence[Number]],
physical_coordinates: Mapping[Coordinates, ArrayLike[Number]],
log: Optional[Log],
expected_error: Optional[Type[Exception]],
):
Expand Down
Loading
0