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.
- careamics/callbacks/hyperparameters_callback.py +10 -3
- careamics/callbacks/progress_bar_callback.py +37 -4
- careamics/careamist.py +80 -44
- careamics/config/algorithm_model.py +5 -3
- careamics/config/architectures/architecture_model.py +7 -0
- careamics/config/architectures/custom_model.py +8 -1
- careamics/config/architectures/register_model.py +3 -1
- careamics/config/architectures/unet_model.py +2 -0
- careamics/config/architectures/vae_model.py +2 -0
- careamics/config/callback_model.py +3 -15
- careamics/config/configuration_example.py +4 -2
- careamics/config/configuration_factory.py +4 -16
- careamics/config/data_model.py +10 -14
- careamics/config/inference_model.py +0 -65
- careamics/config/optimizer_models.py +4 -4
- careamics/config/support/__init__.py +0 -2
- careamics/config/support/supported_activations.py +2 -0
- careamics/config/support/supported_algorithms.py +3 -1
- careamics/config/support/supported_architectures.py +2 -0
- careamics/config/support/supported_data.py +2 -0
- careamics/config/support/supported_loggers.py +2 -0
- careamics/config/support/supported_losses.py +2 -0
- careamics/config/support/supported_optimizers.py +2 -0
- careamics/config/support/supported_pixel_manipulations.py +3 -3
- careamics/config/support/supported_struct_axis.py +2 -0
- careamics/config/support/supported_transforms.py +4 -15
- careamics/config/tile_information.py +2 -0
- careamics/config/transformations/__init__.py +3 -2
- careamics/config/transformations/xy_flip_model.py +43 -0
- careamics/config/transformations/xy_random_rotate90_model.py +11 -3
- careamics/conftest.py +12 -0
- careamics/dataset/dataset_utils/dataset_utils.py +4 -4
- careamics/dataset/dataset_utils/file_utils.py +4 -3
- careamics/dataset/dataset_utils/read_tiff.py +6 -2
- careamics/dataset/dataset_utils/read_utils.py +2 -0
- careamics/dataset/dataset_utils/read_zarr.py +11 -7
- careamics/dataset/in_memory_dataset.py +71 -32
- careamics/dataset/iterable_dataset.py +155 -68
- careamics/dataset/patching/patching.py +56 -15
- careamics/dataset/patching/random_patching.py +8 -2
- careamics/dataset/patching/sequential_patching.py +14 -8
- careamics/dataset/patching/tiled_patching.py +3 -1
- careamics/dataset/patching/validate_patch_dimension.py +2 -0
- careamics/dataset/zarr_dataset.py +2 -0
- careamics/lightning_datamodule.py +45 -19
- careamics/lightning_module.py +8 -2
- careamics/lightning_prediction_datamodule.py +3 -13
- careamics/lightning_prediction_loop.py +8 -6
- careamics/losses/__init__.py +2 -3
- careamics/losses/loss_factory.py +1 -1
- careamics/losses/losses.py +11 -7
- careamics/model_io/bmz_io.py +3 -3
- careamics/models/activation.py +2 -0
- careamics/models/layers.py +121 -25
- careamics/models/model_factory.py +1 -1
- careamics/models/unet.py +35 -14
- careamics/prediction/stitch_prediction.py +2 -6
- careamics/transforms/__init__.py +2 -2
- careamics/transforms/compose.py +33 -7
- careamics/transforms/n2v_manipulate.py +49 -13
- careamics/transforms/normalize.py +55 -3
- careamics/transforms/pixel_manipulation.py +5 -5
- careamics/transforms/struct_mask_parameters.py +3 -1
- careamics/transforms/transform.py +10 -19
- careamics/transforms/xy_flip.py +123 -0
- careamics/transforms/xy_random_rotate90.py +38 -5
- careamics/utils/base_enum.py +28 -0
- careamics/utils/path_utils.py +2 -0
- careamics/utils/ram.py +2 -0
- careamics/utils/receptive_field.py +93 -87
- {careamics-0.1.0rc5.dist-info → careamics-0.1.0rc6.dist-info}/METADATA +2 -1
- careamics-0.1.0rc6.dist-info/RECORD +107 -0
- careamics/config/noise_models.py +0 -162
- careamics/config/support/supported_extraction_strategies.py +0 -25
- careamics/config/transformations/nd_flip_model.py +0 -27
- careamics/losses/noise_model_factory.py +0 -40
- careamics/losses/noise_models.py +0 -524
- careamics/transforms/nd_flip.py +0 -67
- careamics-0.1.0rc5.dist-info/RECORD +0 -111
- {careamics-0.1.0rc5.dist-info → careamics-0.1.0rc6.dist-info}/WHEEL +0 -0
- {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
|
-
|
|
20
|
-
|
|
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))
|
careamics/utils/base_enum.py
CHANGED
|
@@ -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
|
|
careamics/utils/path_utils.py
CHANGED
careamics/utils/ram.py
CHANGED
|
@@ -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
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
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
|
-
|
|
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
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
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
|
-
|
|
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.
|
|
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,,
|
careamics/config/noise_models.py
DELETED
|
@@ -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
|