impy-array 2.4.9__tar.gz → 2.4.10__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (72) hide show
  1. {impy_array-2.4.9 → impy_array-2.4.10}/PKG-INFO +1 -1
  2. {impy_array-2.4.9 → impy_array-2.4.10}/impy/__init__.py +1 -1
  3. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_filters.py +2 -1
  4. {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/__init__.py +2 -2
  5. impy_array-2.4.10/impy/io/_czi.py +52 -0
  6. {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_mrc.py +10 -2
  7. {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_utils.py +4 -2
  8. {impy_array-2.4.9 → impy_array-2.4.10}/.gitignore +0 -0
  9. {impy_array-2.4.9 → impy_array-2.4.10}/LICENSE +0 -0
  10. {impy_array-2.4.9 → impy_array-2.4.10}/README.md +0 -0
  11. {impy_array-2.4.9 → impy_array-2.4.10}/impy/__main__.py +0 -0
  12. {impy_array-2.4.9 → impy_array-2.4.10}/impy/_const.py +0 -0
  13. {impy_array-2.4.9 → impy_array-2.4.10}/impy/_types.py +0 -0
  14. {impy_array-2.4.9 → impy_array-2.4.10}/impy/array_api.py +0 -0
  15. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/__init__.py +0 -0
  16. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_imshow.py +0 -0
  17. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/__init__.py +0 -0
  18. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_corr.py +0 -0
  19. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_deconv.py +0 -0
  20. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_docs.py +0 -0
  21. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_glcm.py +0 -0
  22. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_linalg.py +0 -0
  23. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_misc.py +0 -0
  24. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_plot.py +0 -0
  25. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_process_numba.py +0 -0
  26. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_skimage.py +0 -0
  27. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_structures.py +0 -0
  28. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/_utils/_transform.py +0 -0
  29. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/axesmixin.py +0 -0
  30. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/bases/__init__.py +0 -0
  31. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/bases/metaarray.py +0 -0
  32. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/bases/overload.py +0 -0
  33. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/big.py +0 -0
  34. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/imgarray.py +0 -0
  35. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/label.py +0 -0
  36. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/labeledarray.py +0 -0
  37. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/lazy.py +0 -0
  38. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/phasearray.py +0 -0
  39. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/specials.py +0 -0
  40. {impy_array-2.4.9 → impy_array-2.4.10}/impy/arrays/tiled.py +0 -0
  41. {impy_array-2.4.9 → impy_array-2.4.10}/impy/axes/__init__.py +0 -0
  42. {impy_array-2.4.9 → impy_array-2.4.10}/impy/axes/_axes.py +0 -0
  43. {impy_array-2.4.9 → impy_array-2.4.10}/impy/axes/_axes_tuple.py +0 -0
  44. {impy_array-2.4.9 → impy_array-2.4.10}/impy/axes/_axis.py +0 -0
  45. {impy_array-2.4.9 → impy_array-2.4.10}/impy/axes/_slicer.py +0 -0
  46. {impy_array-2.4.9 → impy_array-2.4.10}/impy/binder.py +0 -0
  47. {impy_array-2.4.9 → impy_array-2.4.10}/impy/collections.py +0 -0
  48. {impy_array-2.4.9 → impy_array-2.4.10}/impy/core.py +0 -0
  49. {impy_array-2.4.9 → impy_array-2.4.10}/impy/correlation.py +0 -0
  50. {impy_array-2.4.9 → impy_array-2.4.10}/impy/frame/__init__.py +0 -0
  51. {impy_array-2.4.9 → impy_array-2.4.10}/impy/frame/frames.py +0 -0
  52. {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_nd2.py +0 -0
  53. {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_npy.py +0 -0
  54. {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_registry.py +0 -0
  55. {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_tiff.py +0 -0
  56. {impy_array-2.4.9 → impy_array-2.4.10}/impy/io/_zarr.py +0 -0
  57. {impy_array-2.4.9 → impy_array-2.4.10}/impy/lazy/__init__.py +0 -0
  58. {impy_array-2.4.9 → impy_array-2.4.10}/impy/lazy/core.py +0 -0
  59. {impy_array-2.4.9 → impy_array-2.4.10}/impy/lazy/random.py +0 -0
  60. {impy_array-2.4.9 → impy_array-2.4.10}/impy/random.py +0 -0
  61. {impy_array-2.4.9 → impy_array-2.4.10}/impy/roi.py +0 -0
  62. {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/__init__.py +0 -0
  63. {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/axesop.py +0 -0
  64. {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/deco.py +0 -0
  65. {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/gauss.py +0 -0
  66. {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/misc.py +0 -0
  67. {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/slicer.py +0 -0
  68. {impy_array-2.4.9 → impy_array-2.4.10}/impy/utils/utilcls.py +0 -0
  69. {impy_array-2.4.9 → impy_array-2.4.10}/impy/viewer/__init__.py +0 -0
  70. {impy_array-2.4.9 → impy_array-2.4.10}/impy/viewer/utils.py +0 -0
  71. {impy_array-2.4.9 → impy_array-2.4.10}/impy/viewer/viewer.py +0 -0
  72. {impy_array-2.4.9 → impy_array-2.4.10}/pyproject.toml +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: impy-array
3
- Version: 2.4.9
3
+ Version: 2.4.10
4
4
  Summary: Speed up coding/extending image analysis in Python.
5
5
  Project-URL: Download, https://github.com/hanjinliu/impy
6
6
  Author-email: Hanjin Liu <liuhanjin-sc@g.ecc.u-tokyo.ac.jp>
@@ -1,4 +1,4 @@
1
- __version__ = "2.4.9"
1
+ __version__ = "2.4.10"
2
2
  __author__ = "Hanjin Liu"
3
3
  __email__ = "liuhanjin-sc@g.ecc.u-tokyo.ac.jp"
4
4
 
@@ -155,7 +155,8 @@ def gabor_filter(img: np.ndarray, ker: np.ndarray, mode="reflect", cval=0.0):
155
155
 
156
156
  def skeletonize(img, selem):
157
157
  from skimage import morphology
158
- skl = morphology.skeletonize_3d(img)
158
+
159
+ skl = morphology.skeletonize(img)
159
160
  if selem is not None:
160
161
  skl = morphology.binary_dilation(skl, selem)
161
162
  return skl
@@ -1,7 +1,7 @@
1
1
  from ._registry import imread, imread_dask, imsave, mark_reader, mark_writer, read_header
2
- from . import _tiff, _mrc, _npy, _zarr, _nd2
2
+ from . import _tiff, _mrc, _npy, _zarr, _nd2, _czi
3
3
 
4
- del _tiff, _mrc, _npy, _zarr, _nd2
4
+ del _tiff, _mrc, _npy, _zarr, _nd2, _czi
5
5
 
6
6
  __all__ = [
7
7
  "imread",
@@ -0,0 +1,52 @@
1
+ from __future__ import annotations
2
+
3
+ from typing import TYPE_CHECKING
4
+ import numpy as np
5
+ from impy.io._registry import IO
6
+ from impy.io._utils import ImageData, ImageMetadata
7
+
8
+ if TYPE_CHECKING:
9
+ from czifile import CziFile
10
+
11
+ @IO.mark_reader(".czi")
12
+ def _(path: str, memmap: bool = False) -> ImageData:
13
+ """The CZI format reader"""
14
+ import czifile
15
+
16
+ if memmap:
17
+ raise NotImplementedError("CZI reader does not support memmap mode yet.")
18
+ else:
19
+ out = None
20
+ with czifile.CziFile(path) as czi:
21
+ data = np.squeeze(czi.asarray(out=out))
22
+ meta = _parse_czi_meta(czi)
23
+
24
+ return ImageData.from_metadata(data, meta)
25
+
26
+ def _parse_czi_meta(czi: CziFile) -> ImageMetadata:
27
+ """Parse metadata from a CZI file."""
28
+ axes_all: str = czi.axes
29
+ shape = czi.shape
30
+ axes = "".join(a.lower() for s, a in zip(shape, axes_all) if s > 1)
31
+ try:
32
+ img_meta = czi.metadata(raw=False)["ImageDocument"]["Metadata"]
33
+ scale = {}
34
+ for item in img_meta["Scaling"]["Items"]["Distance"]:
35
+ a = item["Id"].lower()
36
+ if a in axes:
37
+ scale[a] = item.get("Value", 1e-6) * 1e6 # as micron
38
+ try:
39
+ labels = [item["ImageChannelName"] for item in img_meta["Experiment"]["ExperimentBlocks"]["AcquisitionBlock"]["MultiTrackSetup"]["TrackSetup"]["Detectors"]["Detector"]]
40
+ except Exception:
41
+ labels = None
42
+ except KeyError:
43
+ scale = None
44
+ labels = None
45
+
46
+ return ImageMetadata(
47
+ axes=axes,
48
+ scale=scale,
49
+ unit="μm",
50
+ metadata=img_meta,
51
+ labels=labels,
52
+ )
@@ -3,7 +3,6 @@ from __future__ import annotations
3
3
  from pathlib import Path
4
4
  from typing import TYPE_CHECKING
5
5
  import warnings
6
- import os
7
6
  import numpy as np
8
7
  from impy.io._registry import IO
9
8
  from impy.io._utils import rechunk_to_ones, MemmapArrayWriter, ImpyArray, ImageData, ImageMetadata
@@ -113,14 +112,23 @@ def _parse_mrcfile(mrc: MrcObject) -> ImageMetadata:
113
112
  else:
114
113
  axes = "zyx"
115
114
 
115
+ metadata = {}
116
116
  scale = dict.fromkeys(axes, 1.0)
117
117
  for a in axes:
118
118
  scale[a] = mrc.voxel_size[a] / 10
119
+ try:
120
+ orig_x, orig_y, orig_z = mrc.header["origin"].item()
121
+ except Exception:
122
+ pass
123
+ else:
124
+ metadata["origin_nm"] = np.array([orig_z, orig_y, orig_x], dtype=np.float32) / 10
125
+
126
+ metadata["labels"] = mrc.get_labels()
119
127
 
120
128
  return ImageMetadata(
121
129
  axes=axes,
122
130
  scale=scale,
123
131
  unit={a: "nm" for a in axes},
124
- metadata={},
132
+ metadata=metadata,
125
133
  labels=None,
126
134
  )
@@ -40,7 +40,7 @@ class MemmapArrayWriter:
40
40
  chunksize: tuple[int, ...],
41
41
  ):
42
42
  self._path = path
43
- self._offset = offset
43
+ self._offset = int(offset)
44
44
  self._shape = shape # original shape
45
45
  self._chunksize = chunksize # chunk size
46
46
  # shape = (33, 160, 1000, 1000)
@@ -56,7 +56,9 @@ class MemmapArrayWriter:
56
56
  # efficient: shape = (10, 100, 150) and sl = (3:5, 0:100, 0:150)
57
57
  # sl = (0:1, 16:32, 0:1000, 0:1000)
58
58
 
59
- offset = np.sum([sl[i].start * arr.strides[i] for i in range(self._border + 1)])
59
+ # if input array is e.g. flipped, we need to make it contiguous
60
+ arr = np.ascontiguousarray(arr)
61
+ offset = sum(int(sl[i].start * arr.strides[i]) for i in range(self._border + 1))
60
62
  arr_ravel = arr.ravel()
61
63
  mmap = np.memmap(
62
64
  self._path,
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes