careamics 0.1.0rc5__py3-none-any.whl → 0.1.0rc7__py3-none-any.whl

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.

Potentially problematic release.


This version of careamics might be problematic. Click here for more details.

Files changed (118) hide show
  1. careamics/callbacks/hyperparameters_callback.py +10 -3
  2. careamics/callbacks/progress_bar_callback.py +37 -4
  3. careamics/careamist.py +164 -231
  4. careamics/config/algorithm_model.py +5 -18
  5. careamics/config/architectures/architecture_model.py +7 -0
  6. careamics/config/architectures/custom_model.py +11 -4
  7. careamics/config/architectures/register_model.py +3 -1
  8. careamics/config/architectures/unet_model.py +2 -0
  9. careamics/config/architectures/vae_model.py +2 -0
  10. careamics/config/callback_model.py +3 -15
  11. careamics/config/configuration_example.py +4 -5
  12. careamics/config/configuration_factory.py +27 -41
  13. careamics/config/configuration_model.py +11 -11
  14. careamics/config/data_model.py +89 -63
  15. careamics/config/inference_model.py +28 -81
  16. careamics/config/optimizer_models.py +11 -11
  17. careamics/config/support/__init__.py +0 -2
  18. careamics/config/support/supported_activations.py +2 -0
  19. careamics/config/support/supported_algorithms.py +3 -1
  20. careamics/config/support/supported_architectures.py +2 -0
  21. careamics/config/support/supported_data.py +2 -0
  22. careamics/config/support/supported_loggers.py +2 -0
  23. careamics/config/support/supported_losses.py +2 -0
  24. careamics/config/support/supported_optimizers.py +2 -0
  25. careamics/config/support/supported_pixel_manipulations.py +3 -3
  26. careamics/config/support/supported_struct_axis.py +2 -0
  27. careamics/config/support/supported_transforms.py +4 -16
  28. careamics/config/tile_information.py +28 -58
  29. careamics/config/transformations/__init__.py +3 -2
  30. careamics/config/transformations/normalize_model.py +32 -4
  31. careamics/config/transformations/xy_flip_model.py +43 -0
  32. careamics/config/transformations/xy_random_rotate90_model.py +11 -3
  33. careamics/config/validators/validator_utils.py +1 -1
  34. careamics/conftest.py +12 -0
  35. careamics/dataset/__init__.py +12 -1
  36. careamics/dataset/dataset_utils/__init__.py +8 -1
  37. careamics/dataset/dataset_utils/dataset_utils.py +4 -4
  38. careamics/dataset/dataset_utils/file_utils.py +4 -3
  39. careamics/dataset/dataset_utils/iterate_over_files.py +83 -0
  40. careamics/dataset/dataset_utils/read_tiff.py +6 -11
  41. careamics/dataset/dataset_utils/read_utils.py +2 -0
  42. careamics/dataset/dataset_utils/read_zarr.py +11 -7
  43. careamics/dataset/dataset_utils/running_stats.py +186 -0
  44. careamics/dataset/in_memory_dataset.py +88 -154
  45. careamics/dataset/in_memory_pred_dataset.py +88 -0
  46. careamics/dataset/in_memory_tiled_pred_dataset.py +129 -0
  47. careamics/dataset/iterable_dataset.py +121 -191
  48. careamics/dataset/iterable_pred_dataset.py +121 -0
  49. careamics/dataset/iterable_tiled_pred_dataset.py +139 -0
  50. careamics/dataset/patching/patching.py +109 -39
  51. careamics/dataset/patching/random_patching.py +17 -6
  52. careamics/dataset/patching/sequential_patching.py +14 -8
  53. careamics/dataset/patching/validate_patch_dimension.py +7 -3
  54. careamics/dataset/tiling/__init__.py +10 -0
  55. careamics/dataset/tiling/collate_tiles.py +33 -0
  56. careamics/dataset/{patching → tiling}/tiled_patching.py +7 -5
  57. careamics/dataset/zarr_dataset.py +2 -0
  58. careamics/lightning_datamodule.py +46 -25
  59. careamics/lightning_module.py +19 -9
  60. careamics/lightning_prediction_datamodule.py +54 -84
  61. careamics/losses/__init__.py +2 -3
  62. careamics/losses/loss_factory.py +1 -1
  63. careamics/losses/losses.py +11 -7
  64. careamics/lvae_training/__init__.py +0 -0
  65. careamics/lvae_training/data_modules.py +1220 -0
  66. careamics/lvae_training/data_utils.py +618 -0
  67. careamics/lvae_training/eval_utils.py +905 -0
  68. careamics/lvae_training/get_config.py +84 -0
  69. careamics/lvae_training/lightning_module.py +701 -0
  70. careamics/lvae_training/metrics.py +214 -0
  71. careamics/lvae_training/train_lvae.py +339 -0
  72. careamics/lvae_training/train_utils.py +121 -0
  73. careamics/model_io/bioimage/model_description.py +40 -32
  74. careamics/model_io/bmz_io.py +3 -3
  75. careamics/model_io/model_io_utils.py +5 -2
  76. careamics/models/activation.py +2 -0
  77. careamics/models/layers.py +121 -25
  78. careamics/models/lvae/__init__.py +0 -0
  79. careamics/models/lvae/layers.py +1998 -0
  80. careamics/models/lvae/likelihoods.py +312 -0
  81. careamics/models/lvae/lvae.py +985 -0
  82. careamics/models/lvae/noise_models.py +409 -0
  83. careamics/models/lvae/utils.py +395 -0
  84. careamics/models/model_factory.py +1 -1
  85. careamics/models/unet.py +35 -14
  86. careamics/prediction_utils/__init__.py +12 -0
  87. careamics/prediction_utils/create_pred_datamodule.py +185 -0
  88. careamics/prediction_utils/prediction_outputs.py +165 -0
  89. careamics/prediction_utils/stitch_prediction.py +100 -0
  90. careamics/transforms/__init__.py +2 -2
  91. careamics/transforms/compose.py +33 -7
  92. careamics/transforms/n2v_manipulate.py +52 -14
  93. careamics/transforms/normalize.py +171 -48
  94. careamics/transforms/pixel_manipulation.py +35 -11
  95. careamics/transforms/struct_mask_parameters.py +3 -1
  96. careamics/transforms/transform.py +10 -19
  97. careamics/transforms/tta.py +43 -29
  98. careamics/transforms/xy_flip.py +123 -0
  99. careamics/transforms/xy_random_rotate90.py +38 -5
  100. careamics/utils/base_enum.py +28 -0
  101. careamics/utils/path_utils.py +2 -0
  102. careamics/utils/ram.py +4 -2
  103. careamics/utils/receptive_field.py +93 -87
  104. {careamics-0.1.0rc5.dist-info → careamics-0.1.0rc7.dist-info}/METADATA +8 -6
  105. careamics-0.1.0rc7.dist-info/RECORD +130 -0
  106. {careamics-0.1.0rc5.dist-info → careamics-0.1.0rc7.dist-info}/WHEEL +1 -1
  107. careamics/config/noise_models.py +0 -162
  108. careamics/config/support/supported_extraction_strategies.py +0 -25
  109. careamics/config/transformations/nd_flip_model.py +0 -27
  110. careamics/lightning_prediction_loop.py +0 -116
  111. careamics/losses/noise_model_factory.py +0 -40
  112. careamics/losses/noise_models.py +0 -524
  113. careamics/prediction/__init__.py +0 -7
  114. careamics/prediction/stitch_prediction.py +0 -74
  115. careamics/transforms/nd_flip.py +0 -67
  116. careamics/utils/running_stats.py +0 -43
  117. careamics-0.1.0rc5.dist-info/RECORD +0 -111
  118. {careamics-0.1.0rc5.dist-info → careamics-0.1.0rc7.dist-info}/licenses/LICENSE +0 -0
@@ -0,0 +1,123 @@
1
+ """XY flip transform."""
2
+
3
+ from typing import Optional, Tuple
4
+
5
+ import numpy as np
6
+
7
+ from careamics.transforms.transform import Transform
8
+
9
+
10
+ class XYFlip(Transform):
11
+ """Flip image along X and Y axis, one at a time.
12
+
13
+ This transform randomly flips one of the last two axes.
14
+
15
+ This transform expects C(Z)YX dimensions.
16
+
17
+ Attributes
18
+ ----------
19
+ axis_indices : List[int]
20
+ Indices of the axes that can be flipped.
21
+ rng : np.random.Generator
22
+ Random number generator.
23
+ p : float
24
+ Probability of applying the transform.
25
+ seed : Optional[int]
26
+ Random seed.
27
+
28
+ Parameters
29
+ ----------
30
+ flip_x : bool, optional
31
+ Whether to flip along the X axis, by default True.
32
+ flip_y : bool, optional
33
+ Whether to flip along the Y axis, by default True.
34
+ p : float, optional
35
+ Probability of applying the transform, by default 0.5.
36
+ seed : Optional[int], optional
37
+ Random seed, by default None.
38
+ """
39
+
40
+ def __init__(
41
+ self,
42
+ flip_x: bool = True,
43
+ flip_y: bool = True,
44
+ p: float = 0.5,
45
+ seed: Optional[int] = None,
46
+ ) -> None:
47
+ """Constructor.
48
+
49
+ Parameters
50
+ ----------
51
+ flip_x : bool, optional
52
+ Whether to flip along the X axis, by default True.
53
+ flip_y : bool, optional
54
+ Whether to flip along the Y axis, by default True.
55
+ p : float
56
+ Probability of applying the transform, by default 0.5.
57
+ seed : Optional[int], optional
58
+ Random seed, by default None.
59
+ """
60
+ if p < 0 or p > 1:
61
+ raise ValueError("Probability must be in [0, 1].")
62
+
63
+ if not flip_x and not flip_y:
64
+ raise ValueError("At least one axis must be flippable.")
65
+
66
+ # probability to apply the transform
67
+ self.p = p
68
+
69
+ # "flippable" axes
70
+ self.axis_indices = []
71
+
72
+ if flip_y:
73
+ self.axis_indices.append(-2)
74
+ if flip_x:
75
+ self.axis_indices.append(-1)
76
+
77
+ # numpy random generator
78
+ self.rng = np.random.default_rng(seed=seed)
79
+
80
+ def __call__(
81
+ self, patch: np.ndarray, target: Optional[np.ndarray] = None
82
+ ) -> Tuple[np.ndarray, Optional[np.ndarray]]:
83
+ """Apply the transform to the source patch and the target (optional).
84
+
85
+ Parameters
86
+ ----------
87
+ patch : np.ndarray
88
+ Patch, 2D or 3D, shape C(Z)YX.
89
+ target : Optional[np.ndarray], optional
90
+ Target for the patch, by default None.
91
+
92
+ Returns
93
+ -------
94
+ Tuple[np.ndarray, Optional[np.ndarray]]
95
+ Transformed patch and target.
96
+ """
97
+ if self.rng.random() > self.p:
98
+ return patch, target
99
+
100
+ # choose an axis to flip
101
+ axis = self.rng.choice(self.axis_indices)
102
+
103
+ patch_transformed = self._apply(patch, axis)
104
+ target_transformed = self._apply(target, axis) if target is not None else None
105
+
106
+ return patch_transformed, target_transformed
107
+
108
+ def _apply(self, patch: np.ndarray, axis: int) -> np.ndarray:
109
+ """Apply the transform to the image.
110
+
111
+ Parameters
112
+ ----------
113
+ patch : np.ndarray
114
+ Image patch, 2D or 3D, shape C(Z)YX.
115
+ axis : int
116
+ Axis to flip.
117
+
118
+ Returns
119
+ -------
120
+ np.ndarray
121
+ Flipped image patch.
122
+ """
123
+ return np.ascontiguousarray(np.flip(patch, axis=axis))
@@ -1,3 +1,5 @@
1
+ """Patch transform applying XY random 90 degrees rotations."""
2
+
1
3
  from typing import Optional, Tuple
2
4
 
3
5
  import numpy as np
@@ -9,16 +11,40 @@ class XYRandomRotate90(Transform):
9
11
  """Applies random 90 degree rotations to the YX axis.
10
12
 
11
13
  This transform expects C(Z)YX dimensions.
14
+
15
+ Attributes
16
+ ----------
17
+ rng : np.random.Generator
18
+ Random number generator.
19
+ p : float
20
+ Probability of applying the transform.
21
+ seed : Optional[int]
22
+ Random seed.
23
+
24
+ Parameters
25
+ ----------
26
+ p : float
27
+ Probability of applying the transform, by default 0.5.
28
+ seed : Optional[int]
29
+ Random seed, by default None.
12
30
  """
13
31
 
14
- def __init__(self, seed: Optional[int] = None):
32
+ def __init__(self, p: float = 0.5, seed: Optional[int] = None):
15
33
  """Constructor.
16
34
 
17
35
  Parameters
18
36
  ----------
19
- seed : Optional[int], optional
20
- Random seed, by default None
37
+ p : float
38
+ Probability of applying the transform, by default 0.5.
39
+ seed : Optional[int]
40
+ Random seed, by default None.
21
41
  """
42
+ if p < 0 or p > 1:
43
+ raise ValueError("Probability must be in [0, 1].")
44
+
45
+ # probability to apply the transform
46
+ self.p = p
47
+
22
48
  # numpy random generator
23
49
  self.rng = np.random.default_rng(seed=seed)
24
50
 
@@ -32,13 +58,16 @@ class XYRandomRotate90(Transform):
32
58
  patch : np.ndarray
33
59
  Patch, 2D or 3D, shape C(Z)YX.
34
60
  target : Optional[np.ndarray], optional
35
- Target for the patch, by default None
61
+ Target for the patch, by default None.
36
62
 
37
63
  Returns
38
64
  -------
39
65
  Tuple[np.ndarray, Optional[np.ndarray]]
40
66
  Transformed patch and target.
41
67
  """
68
+ if self.rng.random() > self.p:
69
+ return patch, target
70
+
42
71
  # number of rotations
43
72
  n_rot = self.rng.integers(1, 4)
44
73
 
@@ -63,6 +92,10 @@ class XYRandomRotate90(Transform):
63
92
  Number of 90 degree rotations.
64
93
  axes : Tuple[int, int]
65
94
  Axes along which to rotate the patch.
95
+
96
+ Returns
97
+ -------
98
+ np.ndarray
99
+ Transformed patch.
66
100
  """
67
- # TODO why ascontiguousarray?
68
101
  return np.ascontiguousarray(np.rot90(patch, k=n_rot, axes=axes))
@@ -1,9 +1,25 @@
1
+ """A base class for Enum that allows checking if a value is in the Enum."""
2
+
1
3
  from enum import Enum, EnumMeta
2
4
  from typing import Any
3
5
 
4
6
 
5
7
  class _ContainerEnum(EnumMeta):
8
+ """Metaclass for Enum with __contains__ method."""
9
+
6
10
  def __contains__(cls, item: Any) -> bool:
11
+ """Check if an item is in the Enum.
12
+
13
+ Parameters
14
+ ----------
15
+ item : Any
16
+ Item to check.
17
+
18
+ Returns
19
+ -------
20
+ bool
21
+ True if the item is in the Enum, False otherwise.
22
+ """
7
23
  try:
8
24
  cls(item)
9
25
  except ValueError:
@@ -12,6 +28,18 @@ class _ContainerEnum(EnumMeta):
12
28
 
13
29
  @classmethod
14
30
  def has_value(cls, value: Any) -> bool:
31
+ """Check if a value is in the Enum.
32
+
33
+ Parameters
34
+ ----------
35
+ value : Any
36
+ Value to check.
37
+
38
+ Returns
39
+ -------
40
+ bool
41
+ True if the value is in the Enum, False otherwise.
42
+ """
15
43
  return value in cls._value2member_map_
16
44
 
17
45
 
@@ -1,3 +1,5 @@
1
+ """Utility functions for paths."""
2
+
1
3
  from pathlib import Path
2
4
  from typing import Union
3
5
 
careamics/utils/ram.py CHANGED
@@ -1,13 +1,15 @@
1
+ """Utility function to get RAM size."""
2
+
1
3
  import psutil
2
4
 
3
5
 
4
6
  def get_ram_size() -> int:
5
7
  """
6
- Get RAM size in bytes.
8
+ Get RAM size in mbytes.
7
9
 
8
10
  Returns
9
11
  -------
10
12
  int
11
13
  RAM size in mbytes.
12
14
  """
13
- return psutil.virtual_memory().total / 1024**2
15
+ return psutil.virtual_memory().available / 1024**2
@@ -1,102 +1,108 @@
1
1
  """Receptive field calculation for computing the tile overlap."""
2
2
 
3
+ # TODO better docstring and function names
3
4
  # Adapted from: https://github.com/frgfm/torch-scan
4
5
 
5
- import math
6
- import warnings
7
- from typing import Tuple, Union
6
+ # import math
7
+ # import warnings
8
+ # from typing import Tuple, Union
8
9
 
9
- from torch import Tensor, nn
10
- from torch.nn import Module
11
- from torch.nn.modules.batchnorm import _BatchNorm
12
- from torch.nn.modules.conv import _ConvNd, _ConvTransposeNd
13
- from torch.nn.modules.pooling import (
14
- _AdaptiveAvgPoolNd,
15
- _AdaptiveMaxPoolNd,
16
- _AvgPoolNd,
17
- _MaxPoolNd,
18
- )
10
+ # from torch import Tensor, nn
11
+ # from torch.nn import Module
12
+ # from torch.nn.modules.batchnorm import _BatchNorm
13
+ # from torch.nn.modules.conv import _ConvNd, _ConvTransposeNd
14
+ # from torch.nn.modules.pooling import (
15
+ # _AdaptiveAvgPoolNd,
16
+ # _AdaptiveMaxPoolNd,
17
+ # _AvgPoolNd,
18
+ # _MaxPoolNd,
19
+ # )
19
20
 
20
21
 
21
- def module_rf(module: Module, inp: Tensor, out: Tensor) -> Tuple[float, float, float]:
22
- """Estimate the spatial receptive field of the module.
22
+ # def module_rf(module: Module, inp: Tensor, out: Tensor) -> Tuple[float, float, float]:
23
+ # """Estimate the spatial receptive field of the module.
23
24
 
24
- Args:
25
- module (torch.nn.Module): PyTorch module
26
- inp (torch.Tensor): input to the module
27
- out (torch.Tensor): output of the module
28
- Returns:
29
- receptive field
30
- effective stride
31
- effective padding
32
- """
33
- if isinstance(
34
- module,
35
- (
36
- nn.Identity,
37
- nn.Flatten,
38
- nn.ReLU,
39
- nn.ELU,
40
- nn.LeakyReLU,
41
- nn.ReLU6,
42
- nn.Tanh,
43
- nn.Sigmoid,
44
- _BatchNorm,
45
- nn.Dropout,
46
- nn.Linear,
47
- ),
48
- ):
49
- return 1.0, 1.0, 0.0
50
- elif isinstance(module, _ConvTransposeNd):
51
- return rf_convtransposend(module, inp, out)
52
- elif isinstance(module, (_ConvNd, _MaxPoolNd, _AvgPoolNd)):
53
- return rf_aggregnd(module, inp, out)
54
- elif isinstance(module, (_AdaptiveMaxPoolNd, _AdaptiveAvgPoolNd)):
55
- return rf_adaptive_poolnd(module, inp, out)
56
- else:
57
- warnings.warn(
58
- f"Module type not supported: {module.__class__.__name__}", stacklevel=1
59
- )
60
- return 1.0, 1.0, 0.0
25
+ # Parameters
26
+ # ----------
27
+ # module : Module
28
+ # Module to estimate the receptive field.
29
+ # inp : Tensor
30
+ # Input tensor.
31
+ # out : Tensor
32
+ # Output tensor.
61
33
 
34
+ # Returns
35
+ # -------
36
+ # Tuple[float, float, float]
37
+ # Receptive field, effective stride and padding.
38
+ # """
39
+ # if isinstance(
40
+ # module,
41
+ # (
42
+ # nn.Identity,
43
+ # nn.Flatten,
44
+ # nn.ReLU,
45
+ # nn.ELU,
46
+ # nn.LeakyReLU,
47
+ # nn.ReLU6,
48
+ # nn.Tanh,
49
+ # nn.Sigmoid,
50
+ # _BatchNorm,
51
+ # nn.Dropout,
52
+ # nn.Linear,
53
+ # ),
54
+ # ):
55
+ # return 1.0, 1.0, 0.0
56
+ # elif isinstance(module, _ConvTransposeNd):
57
+ # return rf_convtransposend(module, inp, out)
58
+ # elif isinstance(module, (_ConvNd, _MaxPoolNd, _AvgPoolNd)):
59
+ # return rf_aggregnd(module, inp, out)
60
+ # elif isinstance(module, (_AdaptiveMaxPoolNd, _AdaptiveAvgPoolNd)):
61
+ # return rf_adaptive_poolnd(module, inp, out)
62
+ # else:
63
+ # warnings.warn(
64
+ # f"Module type not supported: {module.__class__.__name__}", stacklevel=1
65
+ # )
66
+ # return 1.0, 1.0, 0.0
62
67
 
63
- def rf_convtransposend(
64
- module: _ConvTransposeNd, _: Tensor, __: Tensor
65
- ) -> Tuple[float, float, float]:
66
- k = (
67
- module.kernel_size[0]
68
- if isinstance(module.kernel_size, tuple)
69
- else module.kernel_size
70
- )
71
- s = module.stride[0] if isinstance(module.stride, tuple) else module.stride
72
- return -k, 1.0 / s, 0.0
73
68
 
69
+ # def rf_convtransposend(
70
+ # module: _ConvTransposeNd, _: Tensor, __: Tensor
71
+ # ) -> Tuple[float, float, float]:
72
+ # k = (
73
+ # module.kernel_size[0]
74
+ # if isinstance(module.kernel_size, tuple)
75
+ # else module.kernel_size
76
+ # )
77
+ # s = module.stride[0] if isinstance(module.stride, tuple) else module.stride
78
+ # return -k, 1.0 / s, 0.0
74
79
 
75
- def rf_aggregnd(
76
- module: Union[_ConvNd, _MaxPoolNd, _AvgPoolNd], _: Tensor, __: Tensor
77
- ) -> Tuple[float, float, float]:
78
- k = (
79
- module.kernel_size[0]
80
- if isinstance(module.kernel_size, tuple)
81
- else module.kernel_size
82
- )
83
- if hasattr(module, "dilation"):
84
- d = (
85
- module.dilation[0]
86
- if isinstance(module.dilation, tuple)
87
- else module.dilation
88
- )
89
- k = d * (k - 1) + 1
90
- s = module.stride[0] if isinstance(module.stride, tuple) else module.stride
91
- p = module.padding[0] if isinstance(module.padding, tuple) else module.padding
92
- return k, s, p # type: ignore[return-value]
93
80
 
81
+ # def rf_aggregnd(
82
+ # module: Union[_ConvNd, _MaxPoolNd, _AvgPoolNd], _: Tensor, __: Tensor
83
+ # ) -> Tuple[float, float, float]:
84
+ # k = (
85
+ # module.kernel_size[0]
86
+ # if isinstance(module.kernel_size, tuple)
87
+ # else module.kernel_size
88
+ # )
89
+ # if hasattr(module, "dilation"):
90
+ # d = (
91
+ # module.dilation[0]
92
+ # if isinstance(module.dilation, tuple)
93
+ # else module.dilation
94
+ # )
95
+ # k = d * (k - 1) + 1
96
+ # s = module.stride[0] if isinstance(module.stride, tuple) else module.stride
97
+ # p = module.padding[0] if isinstance(module.padding, tuple) else module.padding
98
+ # return k, s, p # type: ignore[return-value]
94
99
 
95
- def rf_adaptive_poolnd(
96
- _: Union[_AdaptiveMaxPoolNd, _AdaptiveAvgPoolNd], inp: Tensor, out: Tensor
97
- ) -> Tuple[int, int, float]:
98
- stride = math.ceil(inp.shape[-1] / out.shape[-1])
99
- kernel_size = stride
100
- padding = (inp.shape[-1] - kernel_size * stride) / 2
101
100
 
102
- return kernel_size, stride, padding
101
+ # def rf_adaptive_poolnd(
102
+ # _: Union[_AdaptiveMaxPoolNd, _AdaptiveAvgPoolNd], inp: Tensor, out: Tensor
103
+ # ) -> Tuple[int, int, float]:
104
+ # stride = math.ceil(inp.shape[-1] / out.shape[-1])
105
+ # kernel_size = stride
106
+ # padding = (inp.shape[-1] - kernel_size * stride) / 2
107
+
108
+ # return kernel_size, stride, padding
@@ -1,30 +1,32 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: careamics
3
- Version: 0.1.0rc5
3
+ Version: 0.1.0rc7
4
4
  Summary: Toolbox for running N2V and friends.
5
5
  Project-URL: homepage, https://careamics.github.io/
6
6
  Project-URL: repository, https://github.com/CAREamics/careamics
7
- Author-email: Igor Zubarev <igor.zubarev@fht.org>, Joran Deschamps <joran.deschamps@fht.org>
7
+ Author-email: Melisande Croft <melisande.croft@fht.org>, Joran Deschamps <joran.deschamps@fht.org>, Igor Zubarev <igor.zubarev@fht.org>
8
8
  License: BSD-3-Clause
9
9
  License-File: LICENSE
10
10
  Classifier: Development Status :: 3 - Alpha
11
11
  Classifier: License :: OSI Approved :: BSD License
12
12
  Classifier: Programming Language :: Python :: 3
13
- Classifier: Programming Language :: Python :: 3.8
14
13
  Classifier: Programming Language :: Python :: 3.9
15
14
  Classifier: Programming Language :: Python :: 3.10
16
15
  Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
17
  Classifier: Typing :: Typed
18
- Requires-Python: >=3.8
18
+ Requires-Python: >=3.9
19
19
  Requires-Dist: bioimageio-core>=0.6.0
20
+ Requires-Dist: numpy<2.0.0
20
21
  Requires-Dist: psutil
21
22
  Requires-Dist: pydantic>=2.5
22
23
  Requires-Dist: pytorch-lightning>=2.2.0
23
24
  Requires-Dist: pyyaml
24
- Requires-Dist: scikit-image
25
+ Requires-Dist: scikit-image<=0.23.2
25
26
  Requires-Dist: tifffile
26
27
  Requires-Dist: torch>=2.0.0
27
- Requires-Dist: zarr
28
+ Requires-Dist: torchvision
29
+ Requires-Dist: zarr<3.0.0
28
30
  Provides-Extra: dev
29
31
  Requires-Dist: pre-commit; extra == 'dev'
30
32
  Requires-Dist: pytest; extra == 'dev'
@@ -0,0 +1,130 @@
1
+ careamics/__init__.py,sha256=DkMGt4t9ua0gCgvZFEtb6eydvoxG976T0KUro8KnDNA,760
2
+ careamics/careamist.py,sha256=BtCJWXD4zlKAo05acHj-k-r7wdBcH9eHMQQ6x0wERjo,25911
3
+ careamics/conftest.py,sha256=Od4WcaaP0UP-XUMrFr_oo4e6c2hi_RvNbuaRTopwlmI,911
4
+ careamics/lightning_datamodule.py,sha256=NoMJIaJU0BizBNTSC-dzR1mWED1urHMXdH6hIFi-QfE,32536
5
+ careamics/lightning_module.py,sha256=T1G_QmBAMHfZyynD6nywT9F6bFdjDDdXqJQnjqiODek,10483
6
+ careamics/lightning_prediction_datamodule.py,sha256=cZuiwImD-e4Fuy493PWfwhR0fWm_uqor8itjgsQCWos,14595
7
+ careamics/py.typed,sha256=esB4cHc6c07uVkGtqf8at7ttEnprwRxwk8obY8Qumq4,187
8
+ careamics/callbacks/__init__.py,sha256=spxJlDByD-6QtMl9vcIty8Wb0tyHaSTKTItozHenI44,204
9
+ careamics/callbacks/hyperparameters_callback.py,sha256=ODJpwwdgc1-Py8yEUpXLar8_IOAcfR7lF3--6LfSiGc,1496
10
+ careamics/callbacks/progress_bar_callback.py,sha256=8HvNSWZldixd6pjz0dLDo0apIbzTovv5smKmZ6tZQ8U,2444
11
+ careamics/config/__init__.py,sha256=SP1oJKhK3VDN9ABwnpfR3H02qRprzymjRfNYeC7kHEo,1019
12
+ careamics/config/algorithm_model.py,sha256=Lu7eYyLql5bEeTDLnJ4ms-kqSQ-EufNbt9SNa91K_Ec,5109
13
+ careamics/config/callback_model.py,sha256=CcamVhgRsVdskCe_9EtyWi1YbrNX5vKEplc97AYz1h8,3118
14
+ careamics/config/configuration_example.py,sha256=fhV02Y3wm9anwWFx4Yi5y-OoP31wEYBJYggbyGONQuk,2486
15
+ careamics/config/configuration_factory.py,sha256=viTuBK8bUD266OG9w7B9XZDXlH39D-FaxMq6mai3k6E,21323
16
+ careamics/config/configuration_model.py,sha256=mmHNnWDK7BklCwd3JV6EcHU57EJ6JKBK0mK11G6Cvxo,18472
17
+ careamics/config/data_model.py,sha256=JANDySUFo2iU74RYPhHgjQjfzn1x2mUZlFJFLiW42TA,14257
18
+ careamics/config/inference_model.py,sha256=3n3jy922lTD9NhnSNA876Rmrr2MavFk2pmOE967itLQ,6447
19
+ careamics/config/optimizer_models.py,sha256=-XVzi7CsxfcThTUjlyn4btJa6oHbFOf-q3h9qLM9t0k,5346
20
+ careamics/config/tile_information.py,sha256=TAqfAthPSnIqerq72qP4KlTXPqci9XE9pCVN7J3bMJ4,2246
21
+ careamics/config/training_model.py,sha256=oghv91J7xIdI69wpNJGmLUAwgM9l3VhMsbsOo4USqkU,1559
22
+ careamics/config/architectures/__init__.py,sha256=CdnViydyTdQixus3uWHBIgbgxmu9t1_ADehqpjN_57U,444
23
+ careamics/config/architectures/architecture_model.py,sha256=545hlbOZU9EJNGTcSpy7eXpfzCtvIm28dDJGMo36AfQ,886
24
+ careamics/config/architectures/custom_model.py,sha256=K2RXK2YINm3SCzTxhxzUzFbFV-FYvWQVEDQ-i5bOIoQ,4592
25
+ careamics/config/architectures/register_model.py,sha256=lHH0aUPmXtI3Bq_76zkhg07_Yb_nOJZkZJLCC_G-rZM,2434
26
+ careamics/config/architectures/unet_model.py,sha256=sQjfqTjh1kTNi369U3_94jroU6LyLlflaIe8FwdHQvo,2892
27
+ careamics/config/architectures/vae_model.py,sha256=Z0satmte4udManh_bxtl93ZmQlmo6JFE1NQIuZkTsQk,926
28
+ careamics/config/references/__init__.py,sha256=rZAQzmrciX5cNICcXaBH6sbE6N6L7_qYQUkasNy9y-c,763
29
+ careamics/config/references/algorithm_descriptions.py,sha256=wR3hIoeg5eiUEPbwTxMpQYLTKQyRl_5naSDbBZOZESU,3541
30
+ careamics/config/references/references.py,sha256=AXx08FJQxHb7SYOluCr_eQn_mbOris5dXqhKrCnhBTE,1573
31
+ careamics/config/support/__init__.py,sha256=pKqk76kyBraiSC1SQos-cyiQwsfOLLkLuWj6Hw60LZ4,1041
32
+ careamics/config/support/supported_activations.py,sha256=O27_dGDgw2P-DslKJsXGVAyS2NUQM6Ta4jeo2uTQlW0,519
33
+ careamics/config/support/supported_algorithms.py,sha256=GCkauFDlmb2hJwFSdoIpGmpLjPeYFHOGy2NweKdw8T4,358
34
+ careamics/config/support/supported_architectures.py,sha256=LLD6hyje9Q0BcvA7p2E8WW_cY5yEgMI_NAP4HBi27UU,540
35
+ careamics/config/support/supported_data.py,sha256=C0VcP1DkZqJ4MPn6UZcCZX8ZfVNdz0ZJk6y89fiim2I,2084
36
+ careamics/config/support/supported_loggers.py,sha256=ubSOkGoYabGbm_jmyc1R3eFcvcP-sHmuyiBi_d3_wLg,197
37
+ careamics/config/support/supported_losses.py,sha256=TPsMCuDdgb64TRyDwonnwHb1R-rkn3OzhtHimyVtrOY,540
38
+ careamics/config/support/supported_optimizers.py,sha256=xxbJsyohJTlHeUz2I4eRwcE3BeACs-6PH8cpX6w2wX8,1394
39
+ careamics/config/support/supported_pixel_manipulations.py,sha256=rFiktUlvoFU7s1NAKEMqsXOzLw5eaw9GtCKUznvq6xc,432
40
+ careamics/config/support/supported_struct_axis.py,sha256=alZMA5Y-BpDymLPUEd1zqVY0xMkgl9Rv1d4ujED6sco,424
41
+ careamics/config/support/supported_transforms.py,sha256=4uob-bnZ5aqpN5aEI67-aa7bsmVCrKxEknzf2BAZ3W4,283
42
+ careamics/config/transformations/__init__.py,sha256=oqwBAL2XXbPRZZ5iOzNqalX6SyJ1M-S0lkfbDGZOzyE,378
43
+ careamics/config/transformations/n2v_manipulate_model.py,sha256=UTyfpm1mmMvYg_HoMzXilZhJGx_muiV-lLQ4UThCFJ0,1854
44
+ careamics/config/transformations/normalize_model.py,sha256=1Rkk6IkF-7ytGU6HSzP-TpOi4RRWiQJ6fOd8zammXcg,1936
45
+ careamics/config/transformations/transform_model.py,sha256=i7KAtSv4nah2H7uyJFKqg7RdKF68OHIPMNNvDo0HxGY,1000
46
+ careamics/config/transformations/xy_flip_model.py,sha256=zU-uZ1b1zNZWckbho3onN-B7BHKhN7jbgbNZyRQhv2s,1025
47
+ careamics/config/transformations/xy_random_rotate90_model.py,sha256=6sYKmtCLvz0SV1qZgBSHUTH-CUjwvHnohq1HyPntbyE,894
48
+ careamics/config/validators/__init__.py,sha256=iv0nVI0W7j9DxFPwh0DjRCzM9P8oLQn4Gwi5rfuFrrI,180
49
+ careamics/config/validators/validator_utils.py,sha256=aNFzpBVbef3BZIt6MiNMVc2kW6MJDWqQgdYkFM8Gjig,2621
50
+ careamics/dataset/__init__.py,sha256=NQSWdpQu6BhqGGHUYuOt1hXJrGUN1LPNCP1A8duMY84,547
51
+ careamics/dataset/in_memory_dataset.py,sha256=DfFpSdsYM4aNw6FWn_yDHA6seQDSozGyt-Q57pDpJDA,9457
52
+ careamics/dataset/in_memory_pred_dataset.py,sha256=VvwW5D8TjgO_kR8eZinP-9qepSiI6ZsUN7FZ0Rvc8Bs,2161
53
+ careamics/dataset/in_memory_tiled_pred_dataset.py,sha256=DANmlnlV1ysXKdwGvmJoOYKcjlgoMhnSGSDRpeK79ZA,3552
54
+ careamics/dataset/iterable_dataset.py,sha256=uEmiO8n2qirJv5XkMU5lKmPMBL7rw06GRQQL6BQpfus,9694
55
+ careamics/dataset/iterable_pred_dataset.py,sha256=AtsNRKOEkfDG8y3wa0bi5ImEqEaU2E5LM_iXcuK4Ehw,3706
56
+ careamics/dataset/iterable_tiled_pred_dataset.py,sha256=Q0OkAtYWlsClRSNdl74sPIvbq5rLGZvORzywOJ_YrUw,4499
57
+ careamics/dataset/zarr_dataset.py,sha256=lojnK5bhiF1vyjuPtWXBrZ9sy5fT_rBvZJbbbnE-H_I,5665
58
+ careamics/dataset/dataset_utils/__init__.py,sha256=DuPIjndTs0VhZsUIk2IcSk6H9N0d0ARyA5U3v3Qz-hw,666
59
+ careamics/dataset/dataset_utils/dataset_utils.py,sha256=zYNglet5lYKxIhTeOGG2K24oujC-m5zyYlwJcQcleVA,2662
60
+ careamics/dataset/dataset_utils/file_utils.py,sha256=s7RmmnHa7ojl4kauXfuj7hn0dAx0HB1d2ES7sUSS7IQ,4062
61
+ careamics/dataset/dataset_utils/iterate_over_files.py,sha256=ACiltjAH2aKR0UOEvWPuuxv68NWEd2aDMFE07caxhWo,2859
62
+ careamics/dataset/dataset_utils/read_tiff.py,sha256=emzQgodEaBsLB0ULH4lUUbsDd9PylR8DQ3rb7g0l2b8,1336
63
+ careamics/dataset/dataset_utils/read_utils.py,sha256=0nsfzHq3zr9kjm2qZZrMRKI5LC5MiRSH35xPBCYyBrQ,579
64
+ careamics/dataset/dataset_utils/read_zarr.py,sha256=2jzREAnJDQSv0qmsL-v00BxmiZ_sp0ijq667LZSQ_hY,1685
65
+ careamics/dataset/dataset_utils/running_stats.py,sha256=0uOLaXpNwmY4lIElsHg4Ezf1YRbHy9An8GHXGYOaYmg,5565
66
+ careamics/dataset/patching/__init__.py,sha256=7-s12oUAZNlMOwSkxSwbD7vojQINWYFzn_4qIJ87WBg,37
67
+ careamics/dataset/patching/patching.py,sha256=XoJMfOwYItNQNJOJmRN9swtFiFu0G2L6qvUhP7jhYes,8432
68
+ careamics/dataset/patching/random_patching.py,sha256=61sLxA4eJN5TIWBVIDZdJahS_CkclpM7Kc_VdPj91dU,6486
69
+ careamics/dataset/patching/sequential_patching.py,sha256=_l3Q2uYIhjMJMaxDdSbHC9_2kRF9eLz-Xs3r9i7j3Nc,5903
70
+ careamics/dataset/patching/validate_patch_dimension.py,sha256=sQQ0-4b4uu60MNKkoWv95KxQ80J7Ku0CEk0-kAXlKeI,2134
71
+ careamics/dataset/tiling/__init__.py,sha256=XynyAz85hVfkLtrG0lrMr_aBQm_YEwfu5uFcXMGHlOA,190
72
+ careamics/dataset/tiling/collate_tiles.py,sha256=OrPZ-n-V3uGOc_7CcPnyEJqdbEVDlTfJfWmZnyBZ-HA,978
73
+ careamics/dataset/tiling/tiled_patching.py,sha256=Zhhc0TwXVy4P_tZxS3B5tQZK6SRhGiQwnzVr-1BC4ww,5952
74
+ careamics/losses/__init__.py,sha256=kVEwfZ2xXfd8x0n-VHGKm6qvzbto5pIIJYP_jN-bCtw,89
75
+ careamics/losses/loss_factory.py,sha256=vaMlxH5oescWTKlK1adWwbeD9tW4Ti-p7qKmc1iHCi0,1005
76
+ careamics/losses/losses.py,sha256=DKwHZ9ifVe6wMd3tBOiswLC-saU1bj1RCcXGOkREmKU,2328
77
+ careamics/lvae_training/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
78
+ careamics/lvae_training/data_modules.py,sha256=A5Uoo4qtPdX99QSi-Zl22LzO0I1DszJbQuXMGUXGQEE,46665
79
+ careamics/lvae_training/data_utils.py,sha256=tRk0k0TkBLPocqlUlkwQN_dm5jzw5z74YNs2DsCuy9Y,21670
80
+ careamics/lvae_training/eval_utils.py,sha256=_AlXNXk4uGS2AGsF4PHJZpJoWBgq32kvQLEh7awOIvc,32405
81
+ careamics/lvae_training/get_config.py,sha256=-CWVxlPo71_huUSmXnmYvOmgvcvrZiv0wIpXnR32l6E,3054
82
+ careamics/lvae_training/lightning_module.py,sha256=ryr7iHqCMzCl5esi6_gEcnKFDQkMrw0EXK9Zfgv1Nek,27186
83
+ careamics/lvae_training/metrics.py,sha256=KTDAKhe3vh-YxzGibjtkIG2nnUyujbnwqX4xGwaRXwE,6718
84
+ careamics/lvae_training/train_lvae.py,sha256=Eu--3-RHSfhQVsJ-CTDXhUeoM1fzf_H9IGtBaNPOsHI,11044
85
+ careamics/lvae_training/train_utils.py,sha256=e-d4QsF-li8MmAPkAmB1daHpkuU16nBTnQFZYqpTjn4,3567
86
+ careamics/model_io/__init__.py,sha256=HITzjiuZQwo-rQ2_Ma3bz9l7PDANv1_S489E-tffV9s,155
87
+ careamics/model_io/bmz_io.py,sha256=Gc6uN0aO_kEDzQnJTSTNDS7PiYC684FfDNI0X9rZm8g,7031
88
+ careamics/model_io/model_io_utils.py,sha256=Pxm_9uYRBDOMa8dC4ENk-Vre9CXsTIORGvMwn8mLzXY,2347
89
+ careamics/model_io/bioimage/__init__.py,sha256=r94nu8WDAvj0Fbu4C-iJXdOhfSQXeZBvN3UKsLG0RNI,298
90
+ careamics/model_io/bioimage/_readme_factory.py,sha256=LZAuEiWNBTPaD8KrLPMq16yJuOPKDZiGQuTMHKLvoT4,3514
91
+ careamics/model_io/bioimage/bioimage_utils.py,sha256=nlW0J1daYyLbL6yVN3QSn3HhA2joMjIG-thK64lpVTY,1085
92
+ careamics/model_io/bioimage/model_description.py,sha256=3jw4wkJDefLEW-2BbEfAml3AwyteZszL-v8JYpJRcOo,9635
93
+ careamics/models/__init__.py,sha256=Wty5hwQb_As33pQOZqY5j-DpDOdh5ArBH4BhQDSuXTQ,133
94
+ careamics/models/activation.py,sha256=xdqz4-yKV7oElG_dDrYuibS8HOiYvKdV_r9FwWPvaDE,977
95
+ careamics/models/layers.py,sha256=oWzpq8OdHFEJqPWC9X8IRPNe0XqAnesSqwoT6V3t1Mw,13712
96
+ careamics/models/model_factory.py,sha256=5YRwRRUemxb-pTRL3VWn8N61tCGyhrurqPgcFaNETb0,1360
97
+ careamics/models/unet.py,sha256=3pXpiCIw7WUaDV0Jmczkxi99C5-Zu3NpQpWxgRkeGL8,14321
98
+ careamics/models/lvae/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
99
+ careamics/models/lvae/layers.py,sha256=wFuQgmtJtB7YNuNi2dVoOEWq1ndR6ku4iGvC2u0TJlM,84991
100
+ careamics/models/lvae/likelihoods.py,sha256=FRFTh34FaBLGxn9OXFzqFyHhhJMSKYhgqxwG65VbGh8,10489
101
+ careamics/models/lvae/lvae.py,sha256=5RlK4-h55dGz9UMCh8JCbLsaaIQ5S2IKGeI9d4nD5dA,40167
102
+ careamics/models/lvae/noise_models.py,sha256=yotY5gkPAowbI7esOmHlzBWcSsZlH2G3U7uYIWghGwY,15703
103
+ careamics/models/lvae/utils.py,sha256=muy4nLHmnB3BPAI0tQbJK_vVtBZOLBvhrJigHIOx5V4,11542
104
+ careamics/prediction_utils/__init__.py,sha256=0rtfNXeH5RvJ9ieeCbBV9i9eyLXxo_IMpqVH1-H2N8E,359
105
+ careamics/prediction_utils/create_pred_datamodule.py,sha256=rv_Q0v4Es-NE1IU_nUkJYUsYo3Gh3whvOj43WlTw2hc,5846
106
+ careamics/prediction_utils/prediction_outputs.py,sha256=1BHJF_dpw3QwH8uF_uE1u4tVui01mm899O2VcGvWYvM,4730
107
+ careamics/prediction_utils/stitch_prediction.py,sha256=VRJc51KHg_3gWTCNdvQpHfrGaNqDHd9hHhnvqxg2cjE,3081
108
+ careamics/transforms/__init__.py,sha256=VIHIsC8sMAh1TCm67ifB816Zp-LRo6rAONPuT2Qs3bs,483
109
+ careamics/transforms/compose.py,sha256=mTkhoxvgvsBqNoz9RWpJ_tqsDl1CDp0-UARTjUuBRf4,3477
110
+ careamics/transforms/n2v_manipulate.py,sha256=Gty7Jtu-RiFb1EnlrOi652qAOGKU5ZHvidRvykWqJxg,5438
111
+ careamics/transforms/normalize.py,sha256=dfGWCGPyNwyEqg5wUCAA8cGdT1MvNkpKUEpw8Cw8DfA,7274
112
+ careamics/transforms/pixel_manipulation.py,sha256=lNA19Vlo_3GHzRnT_4AFuv6eWQaxbie2PTYGalCY4YQ,13346
113
+ careamics/transforms/struct_mask_parameters.py,sha256=jE29Li9sx3olaRnqYfJsSlKi2t0WQzJmCm9aCbIQEsA,421
114
+ careamics/transforms/transform.py,sha256=cEqc4ci8na70i-HIGYC7udRfVa8D_8OjdRVrr3txLvQ,464
115
+ careamics/transforms/tta.py,sha256=78S7Df9rLHmEVSQSI1qDcRrRJGauyG3oaIrXkckCkmw,2335
116
+ careamics/transforms/xy_flip.py,sha256=Q1kKTa2kE3W1P3dlpT4GAVSSHM3TebnrvIyWh75Fnko,3443
117
+ careamics/transforms/xy_random_rotate90.py,sha256=zWdBROLLjgxTMSQEQesJr17j84BmZhKWCMVVONHU8mw,2781
118
+ careamics/utils/__init__.py,sha256=tO1X5QTfnthepuW0uYagz5fWehtLtwK2gPmkUeqhdOw,334
119
+ careamics/utils/base_enum.py,sha256=bz1D8mDx5V5hdnJ3WAzJXWHJTbgwAky5FprUt9F5cMA,1387
120
+ careamics/utils/context.py,sha256=Ljf70OR1FcYpsVpxb5Sr2fzmPVIZgDS1uZob_3BcELg,1409
121
+ careamics/utils/logging.py,sha256=coIscjkDYpqcsGnsONuYOdIYd6_gHxdnYIZ-e9Y2Ybg,10322
122
+ careamics/utils/metrics.py,sha256=9YQe5Aj2Pv2h9jnRFeRbDQ_3qXAW0QHpucSqiUtwDcA,2382
123
+ careamics/utils/path_utils.py,sha256=8AugiG5DOmzgSnTCJI8vypXaPE0XhnR-9pzeiFUZ-0I,554
124
+ careamics/utils/ram.py,sha256=tksyn8dVX_iJXmrDZDGub32hFZWIaNxnMheO5G1p43I,244
125
+ careamics/utils/receptive_field.py,sha256=Y2h4c8S6glX3qcx5KHDmO17Kkuyey9voxfoXyqcAfiM,3296
126
+ careamics/utils/torch_utils.py,sha256=g1zxdlM7_BA7mMLcCzmrxZX4LmH__KXlJibC95muVaA,3014
127
+ careamics-0.1.0rc7.dist-info/METADATA,sha256=ZIJHL8fCiF2MDXpkvtegSSA889deeY9USh0emDYJncM,3525
128
+ careamics-0.1.0rc7.dist-info/WHEEL,sha256=1yFddiXMmvYK7QYTqtRNtX66WJ0Mz8PYEiEUoOUUxRY,87
129
+ careamics-0.1.0rc7.dist-info/licenses/LICENSE,sha256=6zdNW-k_xHRKYWUf9tDI_ZplUciFHyj0g16DYuZ2udw,1509
130
+ careamics-0.1.0rc7.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: hatchling 1.24.2
2
+ Generator: hatchling 1.25.0
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any