careamics 0.1.0rc5__py3-none-any.whl → 0.1.0rc6__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 (81) hide show
  1. careamics/callbacks/hyperparameters_callback.py +10 -3
  2. careamics/callbacks/progress_bar_callback.py +37 -4
  3. careamics/careamist.py +80 -44
  4. careamics/config/algorithm_model.py +5 -3
  5. careamics/config/architectures/architecture_model.py +7 -0
  6. careamics/config/architectures/custom_model.py +8 -1
  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 -2
  12. careamics/config/configuration_factory.py +4 -16
  13. careamics/config/data_model.py +10 -14
  14. careamics/config/inference_model.py +0 -65
  15. careamics/config/optimizer_models.py +4 -4
  16. careamics/config/support/__init__.py +0 -2
  17. careamics/config/support/supported_activations.py +2 -0
  18. careamics/config/support/supported_algorithms.py +3 -1
  19. careamics/config/support/supported_architectures.py +2 -0
  20. careamics/config/support/supported_data.py +2 -0
  21. careamics/config/support/supported_loggers.py +2 -0
  22. careamics/config/support/supported_losses.py +2 -0
  23. careamics/config/support/supported_optimizers.py +2 -0
  24. careamics/config/support/supported_pixel_manipulations.py +3 -3
  25. careamics/config/support/supported_struct_axis.py +2 -0
  26. careamics/config/support/supported_transforms.py +4 -15
  27. careamics/config/tile_information.py +2 -0
  28. careamics/config/transformations/__init__.py +3 -2
  29. careamics/config/transformations/xy_flip_model.py +43 -0
  30. careamics/config/transformations/xy_random_rotate90_model.py +11 -3
  31. careamics/conftest.py +12 -0
  32. careamics/dataset/dataset_utils/dataset_utils.py +4 -4
  33. careamics/dataset/dataset_utils/file_utils.py +4 -3
  34. careamics/dataset/dataset_utils/read_tiff.py +6 -2
  35. careamics/dataset/dataset_utils/read_utils.py +2 -0
  36. careamics/dataset/dataset_utils/read_zarr.py +11 -7
  37. careamics/dataset/in_memory_dataset.py +71 -32
  38. careamics/dataset/iterable_dataset.py +155 -68
  39. careamics/dataset/patching/patching.py +56 -15
  40. careamics/dataset/patching/random_patching.py +8 -2
  41. careamics/dataset/patching/sequential_patching.py +14 -8
  42. careamics/dataset/patching/tiled_patching.py +3 -1
  43. careamics/dataset/patching/validate_patch_dimension.py +2 -0
  44. careamics/dataset/zarr_dataset.py +2 -0
  45. careamics/lightning_datamodule.py +45 -19
  46. careamics/lightning_module.py +8 -2
  47. careamics/lightning_prediction_datamodule.py +3 -13
  48. careamics/lightning_prediction_loop.py +8 -6
  49. careamics/losses/__init__.py +2 -3
  50. careamics/losses/loss_factory.py +1 -1
  51. careamics/losses/losses.py +11 -7
  52. careamics/model_io/bmz_io.py +3 -3
  53. careamics/models/activation.py +2 -0
  54. careamics/models/layers.py +121 -25
  55. careamics/models/model_factory.py +1 -1
  56. careamics/models/unet.py +35 -14
  57. careamics/prediction/stitch_prediction.py +2 -6
  58. careamics/transforms/__init__.py +2 -2
  59. careamics/transforms/compose.py +33 -7
  60. careamics/transforms/n2v_manipulate.py +49 -13
  61. careamics/transforms/normalize.py +55 -3
  62. careamics/transforms/pixel_manipulation.py +5 -5
  63. careamics/transforms/struct_mask_parameters.py +3 -1
  64. careamics/transforms/transform.py +10 -19
  65. careamics/transforms/xy_flip.py +123 -0
  66. careamics/transforms/xy_random_rotate90.py +38 -5
  67. careamics/utils/base_enum.py +28 -0
  68. careamics/utils/path_utils.py +2 -0
  69. careamics/utils/ram.py +2 -0
  70. careamics/utils/receptive_field.py +93 -87
  71. {careamics-0.1.0rc5.dist-info → careamics-0.1.0rc6.dist-info}/METADATA +2 -1
  72. careamics-0.1.0rc6.dist-info/RECORD +107 -0
  73. careamics/config/noise_models.py +0 -162
  74. careamics/config/support/supported_extraction_strategies.py +0 -25
  75. careamics/config/transformations/nd_flip_model.py +0 -27
  76. careamics/losses/noise_model_factory.py +0 -40
  77. careamics/losses/noise_models.py +0 -524
  78. careamics/transforms/nd_flip.py +0 -67
  79. careamics-0.1.0rc5.dist-info/RECORD +0 -111
  80. {careamics-0.1.0rc5.dist-info → careamics-0.1.0rc6.dist-info}/WHEEL +0 -0
  81. {careamics-0.1.0rc5.dist-info → careamics-0.1.0rc6.dist-info}/licenses/LICENSE +0 -0
@@ -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,3 +1,5 @@
1
+ """Utility function to get RAM size."""
2
+
1
3
  import psutil
2
4
 
3
5
 
@@ -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,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: careamics
3
- Version: 0.1.0rc5
3
+ Version: 0.1.0rc6
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
@@ -14,6 +14,7 @@ Classifier: Programming Language :: Python :: 3.8
14
14
  Classifier: Programming Language :: Python :: 3.9
15
15
  Classifier: Programming Language :: Python :: 3.10
16
16
  Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
17
18
  Classifier: Typing :: Typed
18
19
  Requires-Python: >=3.8
19
20
  Requires-Dist: bioimageio-core>=0.6.0
@@ -0,0 +1,107 @@
1
+ careamics/__init__.py,sha256=DkMGt4t9ua0gCgvZFEtb6eydvoxG976T0KUro8KnDNA,760
2
+ careamics/careamist.py,sha256=vn-XiawERTTIKZqcfTg8leoVoLdBmHWIe9tkGrgkEGY,29719
3
+ careamics/conftest.py,sha256=Od4WcaaP0UP-XUMrFr_oo4e6c2hi_RvNbuaRTopwlmI,911
4
+ careamics/lightning_datamodule.py,sha256=TBKTpVfOvgsQg_8gwU68Au-aw_OXfUSsah7snXef43Y,32685
5
+ careamics/lightning_module.py,sha256=MSUxZfkhM1-D5AEZrkuNazOBbZCgbxCuuGtgYjhLEHU,10313
6
+ careamics/lightning_prediction_datamodule.py,sha256=4aTyMSbHiy1ebp6WSfDMDoYCJJU4qf4T5ShAjRNn_yM,15057
7
+ careamics/lightning_prediction_loop.py,sha256=qDfRVXPiCVyRz-P3l9tmlCfMT8mx9waKNfNrIMrjt3w,4599
8
+ careamics/py.typed,sha256=esB4cHc6c07uVkGtqf8at7ttEnprwRxwk8obY8Qumq4,187
9
+ careamics/callbacks/__init__.py,sha256=spxJlDByD-6QtMl9vcIty8Wb0tyHaSTKTItozHenI44,204
10
+ careamics/callbacks/hyperparameters_callback.py,sha256=ODJpwwdgc1-Py8yEUpXLar8_IOAcfR7lF3--6LfSiGc,1496
11
+ careamics/callbacks/progress_bar_callback.py,sha256=8HvNSWZldixd6pjz0dLDo0apIbzTovv5smKmZ6tZQ8U,2444
12
+ careamics/config/__init__.py,sha256=SP1oJKhK3VDN9ABwnpfR3H02qRprzymjRfNYeC7kHEo,1019
13
+ careamics/config/algorithm_model.py,sha256=2y4SWagzIyZH_WWYeZWLF-4SGcBk-g04QwKdSzmYTiM,5771
14
+ careamics/config/callback_model.py,sha256=CcamVhgRsVdskCe_9EtyWi1YbrNX5vKEplc97AYz1h8,3118
15
+ careamics/config/configuration_example.py,sha256=vxXYGB05cOqQwGGBuPN4kQ3uQJxRwzyFq5Tflk5HNvc,2575
16
+ careamics/config/configuration_factory.py,sha256=cnv6Qod5Wx1J0h951wgbayMO1KVUWxK0OmAIvscPzm8,21286
17
+ careamics/config/configuration_model.py,sha256=j7QryeMNQAsD_0byb81u99Oek2uyj3Syr0nUepFYTe8,18494
18
+ careamics/config/data_model.py,sha256=58cS8a1Tk4ZXMf8z4QA7NtJKi_EwlfGTsB0e59q9hhE,12741
19
+ careamics/config/inference_model.py,sha256=gbLV4B_7VRAc0QCa8r2EYk-YOdGuGswJIQGDFkj7XUM,5936
20
+ careamics/config/optimizer_models.py,sha256=eWCyH9rMTUl82ubqrHFHssQwVyTYNh9lRpVQGv96ppM,5336
21
+ careamics/config/tile_information.py,sha256=-k9hcJrL-QBp9n0Nf5qufEMcudnNNe8pWY37NtlWLxs,3009
22
+ careamics/config/training_model.py,sha256=oghv91J7xIdI69wpNJGmLUAwgM9l3VhMsbsOo4USqkU,1559
23
+ careamics/config/architectures/__init__.py,sha256=CdnViydyTdQixus3uWHBIgbgxmu9t1_ADehqpjN_57U,444
24
+ careamics/config/architectures/architecture_model.py,sha256=545hlbOZU9EJNGTcSpy7eXpfzCtvIm28dDJGMo36AfQ,886
25
+ careamics/config/architectures/custom_model.py,sha256=MxsFK4cvwjt59_-ZWeIFrlExQ9PpR5X0s9SqxN_B4YQ,4598
26
+ careamics/config/architectures/register_model.py,sha256=lHH0aUPmXtI3Bq_76zkhg07_Yb_nOJZkZJLCC_G-rZM,2434
27
+ careamics/config/architectures/unet_model.py,sha256=sQjfqTjh1kTNi369U3_94jroU6LyLlflaIe8FwdHQvo,2892
28
+ careamics/config/architectures/vae_model.py,sha256=Z0satmte4udManh_bxtl93ZmQlmo6JFE1NQIuZkTsQk,926
29
+ careamics/config/references/__init__.py,sha256=rZAQzmrciX5cNICcXaBH6sbE6N6L7_qYQUkasNy9y-c,763
30
+ careamics/config/references/algorithm_descriptions.py,sha256=wR3hIoeg5eiUEPbwTxMpQYLTKQyRl_5naSDbBZOZESU,3541
31
+ careamics/config/references/references.py,sha256=AXx08FJQxHb7SYOluCr_eQn_mbOris5dXqhKrCnhBTE,1573
32
+ careamics/config/support/__init__.py,sha256=pKqk76kyBraiSC1SQos-cyiQwsfOLLkLuWj6Hw60LZ4,1041
33
+ careamics/config/support/supported_activations.py,sha256=O27_dGDgw2P-DslKJsXGVAyS2NUQM6Ta4jeo2uTQlW0,519
34
+ careamics/config/support/supported_algorithms.py,sha256=GCkauFDlmb2hJwFSdoIpGmpLjPeYFHOGy2NweKdw8T4,358
35
+ careamics/config/support/supported_architectures.py,sha256=LLD6hyje9Q0BcvA7p2E8WW_cY5yEgMI_NAP4HBi27UU,540
36
+ careamics/config/support/supported_data.py,sha256=C0VcP1DkZqJ4MPn6UZcCZX8ZfVNdz0ZJk6y89fiim2I,2084
37
+ careamics/config/support/supported_loggers.py,sha256=ubSOkGoYabGbm_jmyc1R3eFcvcP-sHmuyiBi_d3_wLg,197
38
+ careamics/config/support/supported_losses.py,sha256=TPsMCuDdgb64TRyDwonnwHb1R-rkn3OzhtHimyVtrOY,540
39
+ careamics/config/support/supported_optimizers.py,sha256=xxbJsyohJTlHeUz2I4eRwcE3BeACs-6PH8cpX6w2wX8,1394
40
+ careamics/config/support/supported_pixel_manipulations.py,sha256=rFiktUlvoFU7s1NAKEMqsXOzLw5eaw9GtCKUznvq6xc,432
41
+ careamics/config/support/supported_struct_axis.py,sha256=alZMA5Y-BpDymLPUEd1zqVY0xMkgl9Rv1d4ujED6sco,424
42
+ careamics/config/support/supported_transforms.py,sha256=ylTiS8fUFKFwfn85gh7kKF4Trb9Q4ENPKm-XDWCe-SY,311
43
+ careamics/config/transformations/__init__.py,sha256=oqwBAL2XXbPRZZ5iOzNqalX6SyJ1M-S0lkfbDGZOzyE,378
44
+ careamics/config/transformations/n2v_manipulate_model.py,sha256=UTyfpm1mmMvYg_HoMzXilZhJGx_muiV-lLQ4UThCFJ0,1854
45
+ careamics/config/transformations/normalize_model.py,sha256=fua-JAcfNdTuikERreaR_0mz9ExsYSDJ7mUgIDl-U0M,804
46
+ careamics/config/transformations/transform_model.py,sha256=i7KAtSv4nah2H7uyJFKqg7RdKF68OHIPMNNvDo0HxGY,1000
47
+ careamics/config/transformations/xy_flip_model.py,sha256=zU-uZ1b1zNZWckbho3onN-B7BHKhN7jbgbNZyRQhv2s,1025
48
+ careamics/config/transformations/xy_random_rotate90_model.py,sha256=6sYKmtCLvz0SV1qZgBSHUTH-CUjwvHnohq1HyPntbyE,894
49
+ careamics/config/validators/__init__.py,sha256=iv0nVI0W7j9DxFPwh0DjRCzM9P8oLQn4Gwi5rfuFrrI,180
50
+ careamics/config/validators/validator_utils.py,sha256=H11pttfXFdnlUw9FFIgPWy3sxO1ks38dtmYAS6Kl9-c,2624
51
+ careamics/dataset/__init__.py,sha256=cUcqy1Nxa5WhDQim6948r3i1kGQ-HijUqAACyyM7cuU,174
52
+ careamics/dataset/in_memory_dataset.py,sha256=WcVfE7sdqac07dzmb4Wz2yML6t-0PmQaIfmvyv6uQQE,12567
53
+ careamics/dataset/iterable_dataset.py,sha256=aJKL3F6SesOy-WTRXarYDJjGh7RlxqmYDrYAv09J4I0,15070
54
+ careamics/dataset/zarr_dataset.py,sha256=lojnK5bhiF1vyjuPtWXBrZ9sy5fT_rBvZJbbbnE-H_I,5665
55
+ careamics/dataset/dataset_utils/__init__.py,sha256=5U_kavgh_QEvTiDuM-O4hsqmDOKh6_y6iDvZPE8Jtsc,446
56
+ careamics/dataset/dataset_utils/dataset_utils.py,sha256=zYNglet5lYKxIhTeOGG2K24oujC-m5zyYlwJcQcleVA,2662
57
+ careamics/dataset/dataset_utils/file_utils.py,sha256=hOCDYlVcoBCFR3B9Eh5nTYSiTW0wskAecUfykB1Mj_I,4047
58
+ careamics/dataset/dataset_utils/read_tiff.py,sha256=nbSAU11Tv-jViFHRAtrG8pGH09CG3IIdF2WF6duAxxQ,1729
59
+ careamics/dataset/dataset_utils/read_utils.py,sha256=0nsfzHq3zr9kjm2qZZrMRKI5LC5MiRSH35xPBCYyBrQ,579
60
+ careamics/dataset/dataset_utils/read_zarr.py,sha256=2jzREAnJDQSv0qmsL-v00BxmiZ_sp0ijq667LZSQ_hY,1685
61
+ careamics/dataset/patching/__init__.py,sha256=7-s12oUAZNlMOwSkxSwbD7vojQINWYFzn_4qIJ87WBg,37
62
+ careamics/dataset/patching/patching.py,sha256=vS7wQ1JdSNsFlqJi41Y_NupFIez2BXOO86r0UY1gDJA,7535
63
+ careamics/dataset/patching/random_patching.py,sha256=B1POeDApLyvcRRBpg0loLsOoUGWVkMojEzt4xD_WiaQ,6281
64
+ careamics/dataset/patching/sequential_patching.py,sha256=_l3Q2uYIhjMJMaxDdSbHC9_2kRF9eLz-Xs3r9i7j3Nc,5903
65
+ careamics/dataset/patching/tiled_patching.py,sha256=_IUl5zcBM-BMcRfQajDOQ7RIXmqympM3O75jRHqRi0M,5888
66
+ careamics/dataset/patching/validate_patch_dimension.py,sha256=Y7SWajYWtU7pdZpAI3t_H3Mxw5GMjd9hPpdRygORwK8,2036
67
+ careamics/losses/__init__.py,sha256=kVEwfZ2xXfd8x0n-VHGKm6qvzbto5pIIJYP_jN-bCtw,89
68
+ careamics/losses/loss_factory.py,sha256=vaMlxH5oescWTKlK1adWwbeD9tW4Ti-p7qKmc1iHCi0,1005
69
+ careamics/losses/losses.py,sha256=DKwHZ9ifVe6wMd3tBOiswLC-saU1bj1RCcXGOkREmKU,2328
70
+ careamics/model_io/__init__.py,sha256=HITzjiuZQwo-rQ2_Ma3bz9l7PDANv1_S489E-tffV9s,155
71
+ careamics/model_io/bmz_io.py,sha256=MGZklRek3WI8VqV0gt63hL-APDsMkYbDGdqkih_iWAY,7031
72
+ careamics/model_io/model_io_utils.py,sha256=x5u1HszZgRfvuku4eKQhmInyxRaEzkgNqAhGSyLS6e4,2116
73
+ careamics/model_io/bioimage/__init__.py,sha256=r94nu8WDAvj0Fbu4C-iJXdOhfSQXeZBvN3UKsLG0RNI,298
74
+ careamics/model_io/bioimage/_readme_factory.py,sha256=LZAuEiWNBTPaD8KrLPMq16yJuOPKDZiGQuTMHKLvoT4,3514
75
+ careamics/model_io/bioimage/bioimage_utils.py,sha256=nlW0J1daYyLbL6yVN3QSn3HhA2joMjIG-thK64lpVTY,1085
76
+ careamics/model_io/bioimage/model_description.py,sha256=wXGJBzGGSwEds-V0G4mgPvoi4dDXNn_7Tp6iPCsAeTY,9208
77
+ careamics/models/__init__.py,sha256=Wty5hwQb_As33pQOZqY5j-DpDOdh5ArBH4BhQDSuXTQ,133
78
+ careamics/models/activation.py,sha256=xdqz4-yKV7oElG_dDrYuibS8HOiYvKdV_r9FwWPvaDE,977
79
+ careamics/models/layers.py,sha256=oWzpq8OdHFEJqPWC9X8IRPNe0XqAnesSqwoT6V3t1Mw,13712
80
+ careamics/models/model_factory.py,sha256=5YRwRRUemxb-pTRL3VWn8N61tCGyhrurqPgcFaNETb0,1360
81
+ careamics/models/unet.py,sha256=3pXpiCIw7WUaDV0Jmczkxi99C5-Zu3NpQpWxgRkeGL8,14321
82
+ careamics/prediction/__init__.py,sha256=-Bfc7UqPSqpGx0NGvHMkE-bHOkZYMn7EaxQ9tO6A3uU,118
83
+ careamics/prediction/stitch_prediction.py,sha256=lC9qdcR4BTNezCxoTeombg6k8mmTmN45TZSbEHg13Mk,2163
84
+ careamics/transforms/__init__.py,sha256=VIHIsC8sMAh1TCm67ifB816Zp-LRo6rAONPuT2Qs3bs,483
85
+ careamics/transforms/compose.py,sha256=mTkhoxvgvsBqNoz9RWpJ_tqsDl1CDp0-UARTjUuBRf4,3477
86
+ careamics/transforms/n2v_manipulate.py,sha256=6O0RmL6zgBvZgbga6yyu1FwrxPlWXuviDoHzyxQQXfY,5404
87
+ careamics/transforms/normalize.py,sha256=Ts1gOuzWYPmjAlMf4OgN3y6bHVgvBaq91GdkKGWpTy4,4237
88
+ careamics/transforms/pixel_manipulation.py,sha256=qjTfgk86VkwVVu69E0sXQEfASi170IlzxorpAPmYOe0,12657
89
+ careamics/transforms/struct_mask_parameters.py,sha256=jE29Li9sx3olaRnqYfJsSlKi2t0WQzJmCm9aCbIQEsA,421
90
+ careamics/transforms/transform.py,sha256=cEqc4ci8na70i-HIGYC7udRfVa8D_8OjdRVrr3txLvQ,464
91
+ careamics/transforms/tta.py,sha256=6H0E0yxmZT_TEslenOIXqlEM-l_0oCtIk59gAGP0byM,1960
92
+ careamics/transforms/xy_flip.py,sha256=Q1kKTa2kE3W1P3dlpT4GAVSSHM3TebnrvIyWh75Fnko,3443
93
+ careamics/transforms/xy_random_rotate90.py,sha256=zWdBROLLjgxTMSQEQesJr17j84BmZhKWCMVVONHU8mw,2781
94
+ careamics/utils/__init__.py,sha256=tO1X5QTfnthepuW0uYagz5fWehtLtwK2gPmkUeqhdOw,334
95
+ careamics/utils/base_enum.py,sha256=bz1D8mDx5V5hdnJ3WAzJXWHJTbgwAky5FprUt9F5cMA,1387
96
+ careamics/utils/context.py,sha256=Ljf70OR1FcYpsVpxb5Sr2fzmPVIZgDS1uZob_3BcELg,1409
97
+ careamics/utils/logging.py,sha256=coIscjkDYpqcsGnsONuYOdIYd6_gHxdnYIZ-e9Y2Ybg,10322
98
+ careamics/utils/metrics.py,sha256=9YQe5Aj2Pv2h9jnRFeRbDQ_3qXAW0QHpucSqiUtwDcA,2382
99
+ careamics/utils/path_utils.py,sha256=8AugiG5DOmzgSnTCJI8vypXaPE0XhnR-9pzeiFUZ-0I,554
100
+ careamics/utils/ram.py,sha256=mhZVA_DsIlXMvABSxot4eBBxbvWx7JzfijC_cVBtF1s,239
101
+ careamics/utils/receptive_field.py,sha256=Y2h4c8S6glX3qcx5KHDmO17Kkuyey9voxfoXyqcAfiM,3296
102
+ careamics/utils/running_stats.py,sha256=GIPMPuH9EOUKD_cYBkJFPggXRKnQEiOXx68Pq9UCCVI,1384
103
+ careamics/utils/torch_utils.py,sha256=g1zxdlM7_BA7mMLcCzmrxZX4LmH__KXlJibC95muVaA,3014
104
+ careamics-0.1.0rc6.dist-info/METADATA,sha256=o_1ZDxRYCTLnSruXdXEHT8Y3qNiBW-fShITOyT_wO3E,3464
105
+ careamics-0.1.0rc6.dist-info/WHEEL,sha256=zEMcRr9Kr03x1ozGwg5v9NQBKn3kndp6LSoSlVg-jhU,87
106
+ careamics-0.1.0rc6.dist-info/licenses/LICENSE,sha256=6zdNW-k_xHRKYWUf9tDI_ZplUciFHyj0g16DYuZ2udw,1509
107
+ careamics-0.1.0rc6.dist-info/RECORD,,
@@ -1,162 +0,0 @@
1
- from __future__ import annotations
2
-
3
- from enum import Enum
4
- from typing import Dict, Union
5
-
6
- from pydantic import BaseModel, ConfigDict, Field, field_validator
7
-
8
-
9
- class NoiseModelType(str, Enum):
10
- """
11
- Available noise models.
12
-
13
- Currently supported noise models:
14
-
15
- - hist: Histogram noise model.
16
- - gmm: Gaussian mixture model noise model.F
17
- """
18
-
19
- NONE = "none"
20
- HIST = "hist"
21
- GMM = "gmm"
22
-
23
- # TODO add validator decorator
24
- @classmethod
25
- def validate_noise_model_type(
26
- cls, noise_model: Union[str, NoiseModel], parameters: dict
27
- ) -> None:
28
- """_summary_.
29
-
30
- Parameters
31
- ----------
32
- noise_model : Union[str, NoiseModel]
33
- _description_
34
- parameters : dict
35
- _description_
36
-
37
- Returns
38
- -------
39
- BaseModel
40
- _description_
41
- """
42
- if noise_model == NoiseModelType.HIST.value:
43
- HistogramNoiseModel(**parameters)
44
- return HistogramNoiseModel().model_dump() if not parameters else parameters
45
-
46
- elif noise_model == NoiseModelType.GMM.value:
47
- GaussianMixtureNoiseModel(**parameters)
48
- return (
49
- GaussianMixtureNoiseModel().model_dump()
50
- if not parameters
51
- else parameters
52
- )
53
-
54
-
55
- class NoiseModel(BaseModel):
56
- """_summary_.
57
-
58
- Parameters
59
- ----------
60
- BaseModel : _type_
61
- _description_
62
-
63
- Returns
64
- -------
65
- _type_
66
- _description_
67
-
68
- Raises
69
- ------
70
- ValueError
71
- _description_
72
- """
73
-
74
- model_config = ConfigDict(
75
- use_enum_values=True,
76
- protected_namespaces=(), # allows to use model_* as a field name
77
- validate_assignment=True,
78
- )
79
-
80
- model_type: NoiseModelType
81
- parameters: Dict = Field(default_factory=dict, validate_default=True)
82
-
83
- @field_validator("parameters")
84
- @classmethod
85
- def validate_parameters(cls, data, values) -> Dict:
86
- """_summary_.
87
-
88
- Parameters
89
- ----------
90
- parameters : Dict
91
- _description_
92
-
93
- Returns
94
- -------
95
- Dict
96
- _description_
97
- """
98
- if values.data["model_type"] not in [NoiseModelType.GMM, NoiseModelType.HIST]:
99
- raise ValueError(
100
- f"Incorrect noise model {values.data['model_type']}."
101
- f"Please refer to the documentation" # TODO add link to documentation
102
- )
103
-
104
- parameters = NoiseModelType.validate_noise_model_type(
105
- values.data["model_type"], data
106
- )
107
- return parameters
108
-
109
-
110
- class HistogramNoiseModel(BaseModel):
111
- """
112
- Histogram noise model.
113
-
114
- Attributes
115
- ----------
116
- min_value : float
117
- Minimum value in the input.
118
- max_value : float
119
- Maximum value in the input.
120
- bins : int
121
- Number of bins of the histogram.
122
- """
123
-
124
- min_value: float = Field(default=350.0, ge=0.0, le=65535.0)
125
- max_value: float = Field(default=6500.0, ge=0.0, le=65535.0)
126
- bins: int = Field(default=256, ge=1)
127
-
128
-
129
- class GaussianMixtureNoiseModel(BaseModel):
130
- """
131
- Gaussian mixture model noise model.
132
-
133
- Attributes
134
- ----------
135
- min_signal : float
136
- Minimum signal intensity expected in the image.
137
- max_signal : float
138
- Maximum signal intensity expected in the image.
139
- weight : array
140
- A [3*n_gaussian, n_coeff] sized array containing the values of the weights
141
- describing the noise model.
142
- Each gaussian contributes three parameters (mean, standard deviation and weight),
143
- hence the number of rows in `weight` are 3*n_gaussian.
144
- If `weight = None`, the weight array is initialized using the `min_signal` and
145
- `max_signal` parameters.
146
- n_gaussian: int
147
- Number of gaussians.
148
- n_coeff: int
149
- Number of coefficients to describe the functional relationship between gaussian
150
- parameters and the signal.
151
- 2 implies a linear relationship, 3 implies a quadratic relationship and so on.
152
- device: device
153
- GPU device.
154
- min_sigma: int
155
- """
156
-
157
- num_components: int = Field(default=3, ge=1)
158
- min_value: float = Field(default=350.0, ge=0.0, le=65535.0)
159
- max_value: float = Field(default=6500.0, ge=0.0, le=65535.0)
160
- n_gaussian: int = Field(default=3, ge=1)
161
- n_coeff: int = Field(default=2, ge=1)
162
- min_sigma: int = Field(default=50, ge=1)
@@ -1,25 +0,0 @@
1
- """
2
- Extraction strategy module.
3
-
4
- This module defines the various extraction strategies available in CAREamics.
5
- """
6
-
7
- from careamics.utils import BaseEnum
8
-
9
-
10
- class SupportedExtractionStrategy(str, BaseEnum):
11
- """
12
- Available extraction strategies.
13
-
14
- Currently supported:
15
- - random: random extraction.
16
- # TODO
17
- - sequential: grid extraction, can miss edge values.
18
- - tiled: tiled extraction, covers the whole image.
19
- """
20
-
21
- RANDOM = "random"
22
- RANDOM_ZARR = "random_zarr"
23
- SEQUENTIAL = "sequential"
24
- TILED = "tiled"
25
- NONE = "none"
@@ -1,27 +0,0 @@
1
- """Pydantic model for the NDFlip transform."""
2
-
3
- from typing import Literal, Optional
4
-
5
- from pydantic import ConfigDict
6
-
7
- from .transform_model import TransformModel
8
-
9
-
10
- class NDFlipModel(TransformModel):
11
- """
12
- Pydantic model used to represent NDFlip transformation.
13
-
14
- Attributes
15
- ----------
16
- name : Literal["NDFlip"]
17
- Name of the transformation.
18
- seed : Optional[int]
19
- Seed for the random number generator.
20
- """
21
-
22
- model_config = ConfigDict(
23
- validate_assignment=True,
24
- )
25
-
26
- name: Literal["NDFlip"] = "NDFlip"
27
- seed: Optional[int] = None