careamics 0.0.12__py3-none-any.whl → 0.0.13__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 (73) hide show
  1. careamics/careamist.py +4 -3
  2. careamics/cli/utils.py +1 -1
  3. careamics/config/algorithms/n2v_algorithm_model.py +1 -1
  4. careamics/config/architectures/unet_model.py +3 -0
  5. careamics/config/callback_model.py +23 -34
  6. careamics/config/configuration.py +47 -1
  7. careamics/config/configuration_factories.py +288 -23
  8. careamics/config/data/__init__.py +2 -0
  9. careamics/config/data/data_model.py +3 -3
  10. careamics/config/data/ng_data_model.py +381 -0
  11. careamics/config/data/patching_strategies/__init__.py +14 -0
  12. careamics/config/data/patching_strategies/_overlapping_patched_model.py +103 -0
  13. careamics/config/data/patching_strategies/_patched_model.py +56 -0
  14. careamics/config/data/patching_strategies/random_patching_model.py +21 -0
  15. careamics/config/data/patching_strategies/sequential_patching_model.py +25 -0
  16. careamics/config/data/patching_strategies/tiled_patching_model.py +40 -0
  17. careamics/config/data/patching_strategies/whole_patching_model.py +12 -0
  18. careamics/config/inference_model.py +6 -3
  19. careamics/config/support/supported_data.py +7 -0
  20. careamics/config/support/supported_patching_strategies.py +22 -0
  21. careamics/config/validators/validator_utils.py +4 -3
  22. careamics/dataset/dataset_utils/iterate_over_files.py +2 -2
  23. careamics/dataset/in_memory_dataset.py +2 -1
  24. careamics/dataset/iterable_dataset.py +2 -2
  25. careamics/dataset/iterable_pred_dataset.py +2 -2
  26. careamics/dataset/iterable_tiled_pred_dataset.py +2 -2
  27. careamics/dataset/patching/patching.py +3 -2
  28. careamics/dataset/tiling/lvae_tiled_patching.py +16 -6
  29. careamics/dataset/tiling/tiled_patching.py +2 -1
  30. careamics/dataset_ng/dataset.py +46 -50
  31. careamics/dataset_ng/demos/bsd68_demo.ipynb +28 -23
  32. careamics/dataset_ng/demos/care_U2OS_demo.ipynb +1 -1
  33. careamics/dataset_ng/demos/demo_custom_image_stack.ipynb +1 -1
  34. careamics/dataset_ng/demos/demo_datamodule.ipynb +50 -46
  35. careamics/dataset_ng/demos/demo_dataset.ipynb +32 -49
  36. careamics/dataset_ng/factory.py +58 -15
  37. careamics/dataset_ng/legacy_interoperability.py +3 -1
  38. careamics/dataset_ng/patch_extractor/demo_custom_image_stack_loader.py +1 -1
  39. careamics/dataset_ng/patch_extractor/image_stack/__init__.py +2 -0
  40. careamics/dataset_ng/patch_extractor/image_stack/czi_image_stack.py +360 -0
  41. careamics/dataset_ng/patch_extractor/image_stack/in_memory_image_stack.py +1 -1
  42. careamics/dataset_ng/patch_extractor/patch_extractor_factory.py +43 -1
  43. careamics/dataset_ng/patching_strategies/random_patching.py +3 -1
  44. careamics/dataset_ng/patching_strategies/sequential_patching.py +5 -5
  45. careamics/dataset_ng/patching_strategies/tiling_strategy.py +2 -1
  46. careamics/file_io/read/get_func.py +2 -1
  47. careamics/lightning/dataset_ng/__init__.py +1 -0
  48. careamics/lightning/dataset_ng/data_module.py +218 -28
  49. careamics/lightning/dataset_ng/lightning_modules/care_module.py +44 -5
  50. careamics/lightning/dataset_ng/lightning_modules/n2v_module.py +42 -3
  51. careamics/lightning/dataset_ng/lightning_modules/unet_module.py +73 -4
  52. careamics/lightning/lightning_module.py +2 -1
  53. careamics/lightning/predict_data_module.py +2 -1
  54. careamics/lightning/train_data_module.py +2 -1
  55. careamics/losses/loss_factory.py +2 -1
  56. careamics/lvae_training/dataset/multicrop_dset.py +1 -1
  57. careamics/model_io/bioimage/bioimage_utils.py +1 -1
  58. careamics/model_io/bioimage/model_description.py +1 -1
  59. careamics/model_io/bmz_io.py +1 -1
  60. careamics/model_io/model_io_utils.py +2 -2
  61. careamics/models/activation.py +2 -1
  62. careamics/prediction_utils/prediction_outputs.py +1 -1
  63. careamics/prediction_utils/stitch_prediction.py +1 -1
  64. careamics/transforms/n2v_manipulate_torch.py +15 -9
  65. careamics/transforms/pixel_manipulation_torch.py +59 -92
  66. careamics/utils/lightning_utils.py +2 -2
  67. careamics/utils/metrics.py +2 -1
  68. careamics/utils/torch_utils.py +23 -0
  69. {careamics-0.0.12.dist-info → careamics-0.0.13.dist-info}/METADATA +10 -9
  70. {careamics-0.0.12.dist-info → careamics-0.0.13.dist-info}/RECORD +73 -62
  71. {careamics-0.0.12.dist-info → careamics-0.0.13.dist-info}/WHEEL +0 -0
  72. {careamics-0.0.12.dist-info → careamics-0.0.13.dist-info}/entry_points.txt +0 -0
  73. {careamics-0.0.12.dist-info → careamics-0.0.13.dist-info}/licenses/LICENSE +0 -0
@@ -6,7 +6,10 @@
6
6
  "metadata": {},
7
7
  "outputs": [],
8
8
  "source": [
9
- "from careamics.config.configuration_factories import create_n2v_configuration\n",
9
+ "from careamics.config.configuration_factories import (\n",
10
+ " _create_ng_data_configuration,\n",
11
+ " _list_spatial_augmentations,\n",
12
+ ")\n",
10
13
  "from careamics.lightning.dataset_ng.data_module import CareamicsDataModule"
11
14
  ]
12
15
  },
@@ -70,20 +73,19 @@
70
73
  "source": [
71
74
  "# from path, train and val, no target\n",
72
75
  "\n",
73
- "config = create_n2v_configuration(\n",
74
- " experiment_name=\"bsd68_n2v\",\n",
76
+ "config = _create_ng_data_configuration(\n",
75
77
  " data_type=\"tiff\",\n",
76
78
  " axes=\"SYX\",\n",
77
79
  " patch_size=(64, 64),\n",
78
80
  " batch_size=64,\n",
79
- " num_epochs=100\n",
81
+ " augmentations=_list_spatial_augmentations()\n",
80
82
  ")\n",
81
83
  "\n",
82
- "config.data_config.set_means_and_stds([image_mean], [image_std])\n",
83
- "config.data_config.val_dataloader_params = {\"shuffle\": False}\n",
84
+ "config.set_means_and_stds([image_mean], [image_std])\n",
85
+ "config.val_dataloader_params = {\"shuffle\": False}\n",
84
86
  "\n",
85
87
  "data_module = CareamicsDataModule(\n",
86
- " data_config=config.data_config,\n",
88
+ " data_config=config,\n",
87
89
  " train_data=train_path,\n",
88
90
  " val_data=val_path,\n",
89
91
  ")\n",
@@ -112,13 +114,15 @@
112
114
  "source": [
113
115
  "# from path, only predict\n",
114
116
  "\n",
115
- "from careamics.config.inference_model import InferenceConfig\n",
117
+ "from careamics.config.data import NGDataConfig\n",
116
118
  "\n",
117
- "config = InferenceConfig(\n",
118
- " model_config=config,\n",
119
+ "config = NGDataConfig(\n",
119
120
  " data_type=\"tiff\",\n",
120
- " tile_size=(128, 128),\n",
121
- " tile_overlap=(32, 32),\n",
121
+ " patching={\n",
122
+ " \"name\": \"tiled\",\n",
123
+ " \"patch_size\": (128, 128),\n",
124
+ " \"overlaps\": (32, 32)\n",
125
+ " },\n",
122
126
  " axes=\"YX\",\n",
123
127
  " batch_size=8,\n",
124
128
  " image_means=[image_mean],\n",
@@ -167,20 +171,19 @@
167
171
  "source": [
168
172
  "# from array, train and val, no target\n",
169
173
  "\n",
170
- "config = create_n2v_configuration(\n",
171
- " experiment_name=\"bsd68_n2v\",\n",
174
+ "config = _create_ng_data_configuration(\n",
172
175
  " data_type=\"array\",\n",
173
176
  " axes=\"SYX\",\n",
174
177
  " patch_size=(64, 64),\n",
175
178
  " batch_size=64,\n",
176
- " num_epochs=100\n",
179
+ " augmentations=_list_spatial_augmentations()\n",
177
180
  ")\n",
178
181
  "\n",
179
- "config.data_config.set_means_and_stds([image_mean], [image_std])\n",
180
- "config.data_config.val_dataloader_params = {\"shuffle\": False}\n",
182
+ "config.set_means_and_stds([image_mean], [image_std])\n",
183
+ "config.val_dataloader_params = {\"shuffle\": False}\n",
181
184
  "\n",
182
185
  "data_module = CareamicsDataModule(\n",
183
- " data_config=config.data_config,\n",
186
+ " data_config=config,\n",
184
187
  " train_data=train_array,\n",
185
188
  " val_data=val_array,\n",
186
189
  ")\n",
@@ -239,15 +242,14 @@
239
242
  "metadata": {},
240
243
  "outputs": [],
241
244
  "source": [
242
- "config = create_n2v_configuration(\n",
243
- " experiment_name=\"mitosis\",\n",
245
+ "config = _create_ng_data_configuration(\n",
244
246
  " data_type=\"array\",\n",
245
247
  " axes=\"YX\",\n",
246
248
  " patch_size=(64, 64),\n",
247
249
  " batch_size=64,\n",
248
- " num_epochs=100\n",
250
+ " augmentations=_list_spatial_augmentations()\n",
249
251
  ")\n",
250
- "config.data_config.set_means_and_stds(\n",
252
+ "config.set_means_and_stds(\n",
251
253
  " [example_data.mean()],\n",
252
254
  " [example_data.std()],\n",
253
255
  " [segmentation.mean()],\n",
@@ -255,7 +257,7 @@
255
257
  ")\n",
256
258
  "\n",
257
259
  "data_module = CareamicsDataModule(\n",
258
- " data_config=config.data_config,\n",
260
+ " data_config=config,\n",
259
261
  " train_data=[example_data],\n",
260
262
  " train_data_target=[segmentation],\n",
261
263
  " val_data=[example_data],\n",
@@ -267,15 +269,17 @@
267
269
  "train_batch = next(iter(data_module.train_dataloader()))\n",
268
270
  "val_batch = next(iter(data_module.val_dataloader()))\n",
269
271
  "\n",
270
- "fig, ax = plt.subplots(1, 8, figsize=(10, 5))\n",
272
+ "fig, ax = plt.subplots(2, 8, figsize=(10, 3))\n",
271
273
  "\n",
272
274
  "for i in range(8):\n",
273
- " ax[i].imshow(train_batch[0].data[i][0].numpy(), cmap=\"gray\")\n",
275
+ " ax[0][i].imshow(train_batch[0].data[i][0].numpy(), cmap=\"gray\")\n",
276
+ " ax[1][i].imshow(train_batch[1].data[i][0].numpy())\n",
274
277
  "\n",
275
278
  "\n",
276
- "fig, ax = plt.subplots(1, 8, figsize=(10, 5))\n",
279
+ "fig, ax = plt.subplots(2, 8, figsize=(10, 3))\n",
277
280
  "for i in range(8):\n",
278
- " ax[i].imshow(val_batch[0].data[i][0].numpy(), cmap=\"gray\")"
281
+ " ax[0][i].imshow(val_batch[0].data[i][0].numpy(), cmap=\"gray\")\n",
282
+ " ax[1][i].imshow(val_batch[1].data[i][0].numpy())"
279
283
  ]
280
284
  },
281
285
  {
@@ -286,13 +290,15 @@
286
290
  "source": [
287
291
  "# from array, only predict, with target\n",
288
292
  "\n",
289
- "from careamics.config.inference_model import InferenceConfig\n",
293
+ "from careamics.config.data import NGDataConfig\n",
290
294
  "\n",
291
- "config = InferenceConfig(\n",
292
- " model_config=config,\n",
295
+ "config = NGDataConfig(\n",
293
296
  " data_type=\"array\",\n",
294
- " tile_size=(128, 128),\n",
295
- " tile_overlap=(32, 32),\n",
297
+ " patching={\n",
298
+ " \"name\": \"tiled\",\n",
299
+ " \"patch_size\": (128, 128),\n",
300
+ " \"overlaps\": (32, 32)\n",
301
+ " },\n",
296
302
  " axes=\"YX\",\n",
297
303
  " batch_size=8,\n",
298
304
  " image_means=[image_mean],\n",
@@ -329,20 +335,19 @@
329
335
  "metadata": {},
330
336
  "outputs": [],
331
337
  "source": [
332
- "config = create_n2v_configuration(\n",
333
- " experiment_name=\"bsd68_n2v\",\n",
338
+ "config = _create_ng_data_configuration(\n",
334
339
  " data_type=\"tiff\",\n",
335
340
  " axes=\"SYX\",\n",
336
341
  " patch_size=(64, 64),\n",
337
342
  " batch_size=64,\n",
338
- " num_epochs=100\n",
343
+ " augmentations=_list_spatial_augmentations()\n",
339
344
  ")\n",
340
345
  "\n",
341
- "config.data_config.set_means_and_stds([image_mean], [image_std])\n",
342
- "config.data_config.val_dataloader_params = {\"shuffle\": False}\n",
346
+ "config.set_means_and_stds([image_mean], [image_std])\n",
347
+ "config.val_dataloader_params = {\"shuffle\": False}\n",
343
348
  "\n",
344
349
  "data_module = CareamicsDataModule(\n",
345
- " data_config=config.data_config,\n",
350
+ " data_config=config,\n",
346
351
  " train_data=sorted(train_path.glob(\"*.tiff\")),\n",
347
352
  " val_data=sorted(val_path.glob(\"*.tiff\")),\n",
348
353
  ")\n",
@@ -378,17 +383,16 @@
378
383
  "metadata": {},
379
384
  "outputs": [],
380
385
  "source": [
381
- "config = create_n2v_configuration(\n",
382
- " experiment_name=\"bsd68_n2v\",\n",
386
+ "config = _create_ng_data_configuration(\n",
383
387
  " data_type=\"custom\",\n",
384
388
  " axes=\"SYX\",\n",
385
389
  " patch_size=(64, 64),\n",
386
390
  " batch_size=64,\n",
387
- " num_epochs=100\n",
391
+ " augmentations=_list_spatial_augmentations()\n",
388
392
  ")\n",
389
393
  "\n",
390
- "config.data_config.set_means_and_stds([image_mean], [image_std])\n",
391
- "config.data_config.val_dataloader_params = {\"shuffle\": False}\n",
394
+ "config.set_means_and_stds([image_mean], [image_std])\n",
395
+ "config.val_dataloader_params = {\"shuffle\": False}\n",
392
396
  "\n",
393
397
  "def read_source_func(path):\n",
394
398
  " image = tifffile.imread(path)\n",
@@ -396,7 +400,7 @@
396
400
  " return image\n",
397
401
  "\n",
398
402
  "data_module = CareamicsDataModule(\n",
399
- " data_config=config.data_config,\n",
403
+ " data_config=config,\n",
400
404
  " train_data=sorted(train_path.glob(\"*.tiff\")),\n",
401
405
  " val_data=sorted(val_path.glob(\"*.tiff\")),\n",
402
406
  " read_source_func=read_source_func\n",
@@ -421,7 +425,7 @@
421
425
  ],
422
426
  "metadata": {
423
427
  "kernelspec": {
424
- "display_name": "Python 3",
428
+ "display_name": "czi",
425
429
  "language": "python",
426
430
  "name": "python3"
427
431
  },
@@ -435,7 +439,7 @@
435
439
  "name": "python",
436
440
  "nbconvert_exporter": "python",
437
441
  "pygments_lexer": "ipython3",
438
- "version": "3.9.20"
442
+ "version": "3.12.11"
439
443
  }
440
444
  },
441
445
  "nbformat": 4,
@@ -14,9 +14,12 @@
14
14
  "import skimage\n",
15
15
  "import tifffile\n",
16
16
  "\n",
17
- "from careamics.config import create_n2n_configuration\n",
18
- "from careamics.dataset_ng.dataset.dataset import Mode\n",
19
- "from careamics.dataset_ng.dataset.factory import create_dataset"
17
+ "from careamics.config.configuration_factories import (\n",
18
+ " _create_ng_data_configuration,\n",
19
+ " _list_spatial_augmentations,\n",
20
+ ")\n",
21
+ "from careamics.dataset_ng.dataset import Mode\n",
22
+ "from careamics.dataset_ng.factory import create_dataset"
20
23
  ]
21
24
  },
22
25
  {
@@ -58,24 +61,21 @@
58
61
  "source": [
59
62
  "# 1. Train val from an array\n",
60
63
  "\n",
61
- "train_data_config = create_n2n_configuration(\n",
62
- " \"test_exp\",\n",
64
+ "train_data_config = _create_ng_data_configuration(\n",
63
65
  " data_type=\"array\",\n",
64
66
  " axes=\"YX\",\n",
65
67
  " patch_size=(32, 32),\n",
66
68
  " batch_size=1,\n",
67
- " num_epochs=1,\n",
68
- ").data_config\n",
69
+ " augmentations=_list_spatial_augmentations()\n",
70
+ ")\n",
69
71
  "\n",
70
- "val_data_config = create_n2n_configuration(\n",
71
- " \"test_exp\",\n",
72
+ "val_data_config = _create_ng_data_configuration(\n",
72
73
  " data_type=\"array\",\n",
73
74
  " axes=\"YX\",\n",
74
75
  " patch_size=(32, 32),\n",
75
76
  " batch_size=1,\n",
76
- " num_epochs=1,\n",
77
77
  " augmentations=[],\n",
78
- ").data_config\n",
78
+ ")\n",
79
79
  "\n",
80
80
  "\n",
81
81
  "train_dataset = create_dataset(\n",
@@ -122,24 +122,21 @@
122
122
  "tifffile.imwrite(\"example_data2.tiff\", example_data[:256, :256])\n",
123
123
  "tifffile.imwrite(\"example_target2.tiff\", segmentation[:256, :256])\n",
124
124
  "\n",
125
- "train_data_config = create_n2n_configuration(\n",
126
- " \"test_exp\",\n",
125
+ "train_data_config = _create_ng_data_configuration(\n",
127
126
  " data_type=\"tiff\",\n",
128
127
  " axes=\"YX\",\n",
129
128
  " patch_size=(32, 32),\n",
130
129
  " batch_size=1,\n",
131
- " num_epochs=1,\n",
132
- ").data_config\n",
130
+ " augmentations=_list_spatial_augmentations()\n",
131
+ ")\n",
133
132
  "\n",
134
- "val_data_config = create_n2n_configuration(\n",
135
- " \"test_exp\",\n",
133
+ "val_data_config = _create_ng_data_configuration(\n",
136
134
  " data_type=\"tiff\",\n",
137
135
  " axes=\"YX\",\n",
138
136
  " patch_size=(32, 32),\n",
139
137
  " batch_size=1,\n",
140
- " num_epochs=1,\n",
141
138
  " augmentations=[],\n",
142
- ").data_config\n",
139
+ ")\n",
143
140
  "\n",
144
141
  "data = sorted(Path(\"./\").glob(\"example_data*.tiff\"))\n",
145
142
  "targets = sorted(Path(\"./\").glob(\"example_target*.tiff\"))\n",
@@ -182,18 +179,21 @@
182
179
  "metadata": {},
183
180
  "outputs": [],
184
181
  "source": [
185
- "from careamics.config import InferenceConfig\n",
182
+ "from careamics.config.data import NGDataConfig\n",
186
183
  "\n",
187
- "prediction_config = InferenceConfig(\n",
184
+ "prediction_config = NGDataConfig(\n",
188
185
  " data_type=\"array\",\n",
189
- " tile_size=(32, 32),\n",
190
- " tile_overlap=(16, 16),\n",
186
+ " patching={\n",
187
+ " \"name\": \"tiled\",\n",
188
+ " \"patch_size\": (32, 32),\n",
189
+ " \"overlaps\": (16, 16),\n",
190
+ " },\n",
191
191
  " axes=\"YX\",\n",
192
- " image_means=(example_data.mean(),),\n",
193
- " image_stds=(example_data.std(),),\n",
194
- " tta_transforms=False,\n",
195
192
  " batch_size=1,\n",
193
+ " image_means=[example_data.mean()],\n",
194
+ " image_stds=[example_data.std()],\n",
196
195
  ")\n",
196
+ "\n",
197
197
  "prediction_dataset = create_dataset(\n",
198
198
  " config=prediction_config,\n",
199
199
  " mode=Mode.PREDICTING,\n",
@@ -205,7 +205,7 @@
205
205
  "fig, ax = plt.subplots(1, 5, figsize=(10, 5))\n",
206
206
  "ax[0].set_title(\"Prediction input\")\n",
207
207
  "for i in range(5):\n",
208
- " sample, _ = prediction_dataset[i]\n",
208
+ " sample, *_ = prediction_dataset[i]\n",
209
209
  " ax[i].imshow(sample.data[0])"
210
210
  ]
211
211
  },
@@ -224,14 +224,13 @@
224
224
  "metadata": {},
225
225
  "outputs": [],
226
226
  "source": [
227
- "train_data_config = create_n2n_configuration(\n",
228
- " \"test_exp\",\n",
227
+ "train_data_config = _create_ng_data_configuration(\n",
229
228
  " data_type=\"custom\",\n",
230
229
  " axes=\"YX\",\n",
231
230
  " patch_size=(32, 32),\n",
232
231
  " batch_size=1,\n",
233
- " num_epochs=1,\n",
234
- ").data_config\n",
232
+ " augmentations=_list_spatial_augmentations(),\n",
233
+ ")\n",
235
234
  "\n",
236
235
  "\n",
237
236
  "def read_data_func_test(example_data):\n",
@@ -253,27 +252,11 @@
253
252
  " sample, _ = train_dataset[i]\n",
254
253
  " ax[i].imshow(sample.data[0])"
255
254
  ]
256
- },
257
- {
258
- "cell_type": "code",
259
- "execution_count": null,
260
- "id": "10",
261
- "metadata": {},
262
- "outputs": [],
263
- "source": []
264
- },
265
- {
266
- "cell_type": "code",
267
- "execution_count": null,
268
- "id": "11",
269
- "metadata": {},
270
- "outputs": [],
271
- "source": []
272
255
  }
273
256
  ],
274
257
  "metadata": {
275
258
  "kernelspec": {
276
- "display_name": "Python 3",
259
+ "display_name": "czi",
277
260
  "language": "python",
278
261
  "name": "python3"
279
262
  },
@@ -287,7 +270,7 @@
287
270
  "name": "python",
288
271
  "nbconvert_exporter": "python",
289
272
  "pygments_lexer": "ipython3",
290
- "version": "3.9.21"
273
+ "version": "3.12.11"
291
274
  }
292
275
  },
293
276
  "nbformat": 4,
@@ -1,15 +1,16 @@
1
1
  from collections.abc import Sequence
2
2
  from enum import Enum
3
3
  from pathlib import Path
4
- from typing import Any, Optional, Union
4
+ from typing import Any, Optional
5
5
 
6
6
  from numpy.typing import NDArray
7
7
  from typing_extensions import ParamSpec
8
8
 
9
- from careamics.config import DataConfig, InferenceConfig
9
+ from careamics.config.data.ng_data_model import NGDataConfig
10
10
  from careamics.config.support import SupportedData
11
11
  from careamics.dataset_ng.patch_extractor import ImageStackLoader, PatchExtractor
12
12
  from careamics.dataset_ng.patch_extractor.image_stack import (
13
+ CziImageStack,
13
14
  GenericImageStack,
14
15
  ImageStack,
15
16
  InMemoryImageStack,
@@ -19,6 +20,7 @@ from careamics.dataset_ng.patch_extractor.patch_extractor_factory import (
19
20
  create_array_extractor,
20
21
  create_custom_file_extractor,
21
22
  create_custom_image_stack_extractor,
23
+ create_czi_extractor,
22
24
  create_ome_zarr_extractor,
23
25
  create_tiff_extractor,
24
26
  )
@@ -38,6 +40,7 @@ class DatasetType(Enum):
38
40
  LAZY_TIFF = "lazy_tiff"
39
41
  IN_MEM_CUSTOM_FILE = "in_mem_custom_file"
40
42
  OME_ZARR = "ome_zarr"
43
+ CZI = "czi"
41
44
  CUSTOM_IMAGE_STACK = "custom_image_stack"
42
45
 
43
46
 
@@ -58,7 +61,7 @@ def determine_dataset_type(
58
61
  Whether all the data should be loaded into memory. This is argument is ignored
59
62
  unless the `data_type` is "tiff" or "custom".
60
63
  read_func : ReadFunc, optional
61
- A function that can that can be used to load custom data. This argument is
64
+ A function that can be used to load custom data. This argument is
62
65
  ignored unless the `data_type` is "custom".
63
66
  image_stack_loader : ImageStackLoader, optional
64
67
  A function for custom image stack loading. This argument is ignored unless the
@@ -87,6 +90,8 @@ def determine_dataset_type(
87
90
  return DatasetType.IN_MEM_TIFF
88
91
  else:
89
92
  return DatasetType.LAZY_TIFF
93
+ elif data_type == SupportedData.CZI:
94
+ return DatasetType.CZI
90
95
  elif data_type == SupportedData.CUSTOM:
91
96
  if read_func is not None:
92
97
  if in_memory:
@@ -111,7 +116,7 @@ def determine_dataset_type(
111
116
  # convenience function but should use `create_dataloader` function instead
112
117
  # For lazy loading custom batch sampler also needs to be set.
113
118
  def create_dataset(
114
- config: Union[DataConfig, InferenceConfig],
119
+ config: NGDataConfig,
115
120
  mode: Mode,
116
121
  inputs: Any,
117
122
  targets: Any,
@@ -151,7 +156,7 @@ def create_dataset(
151
156
  Returns
152
157
  -------
153
158
  CareamicsDataset[ImageStack]
154
- The CAREamicsDataset
159
+ The CAREamicsDataset.
155
160
 
156
161
  Raises
157
162
  ------
@@ -167,6 +172,8 @@ def create_dataset(
167
172
  elif dataset_type == DatasetType.IN_MEM_TIFF:
168
173
  return create_tiff_dataset(config, mode, inputs, targets)
169
174
  # TODO: Lazy tiff
175
+ elif dataset_type == DatasetType.CZI:
176
+ return create_czi_dataset(config, mode, inputs, targets)
170
177
  elif dataset_type == DatasetType.IN_MEM_CUSTOM_FILE:
171
178
  if read_kwargs is None:
172
179
  read_kwargs = {}
@@ -191,7 +198,7 @@ def create_dataset(
191
198
 
192
199
 
193
200
  def create_array_dataset(
194
- config: Union[DataConfig, InferenceConfig],
201
+ config: NGDataConfig,
195
202
  mode: Mode,
196
203
  inputs: Sequence[NDArray[Any]],
197
204
  targets: Optional[Sequence[NDArray[Any]]],
@@ -213,7 +220,7 @@ def create_array_dataset(
213
220
  Returns
214
221
  -------
215
222
  CareamicsDataset[InMemoryImageStack]
216
- A CAREamicsDataset
223
+ A CAREamicsDataset.
217
224
  """
218
225
  input_extractor = create_array_extractor(source=inputs, axes=config.axes)
219
226
  target_extractor: Optional[PatchExtractor[InMemoryImageStack]]
@@ -225,7 +232,7 @@ def create_array_dataset(
225
232
 
226
233
 
227
234
  def create_tiff_dataset(
228
- config: Union[DataConfig, InferenceConfig],
235
+ config: NGDataConfig,
229
236
  mode: Mode,
230
237
  inputs: Sequence[Path],
231
238
  targets: Optional[Sequence[Path]],
@@ -247,7 +254,7 @@ def create_tiff_dataset(
247
254
  Returns
248
255
  -------
249
256
  CareamicsDataset[InMemoryImageStack]
250
- A CAREamicsDataset
257
+ A CAREamicsDataset.
251
258
  """
252
259
  input_extractor = create_tiff_extractor(
253
260
  source=inputs,
@@ -262,8 +269,44 @@ def create_tiff_dataset(
262
269
  return dataset
263
270
 
264
271
 
272
+ def create_czi_dataset(
273
+ config: NGDataConfig,
274
+ mode: Mode,
275
+ inputs: Sequence[Path],
276
+ targets: Optional[Sequence[Path]],
277
+ ) -> CareamicsDataset[CziImageStack]:
278
+ """
279
+ Create a dataset from CZI files.
280
+
281
+ Parameters
282
+ ----------
283
+ config : DataConfig or InferenceConfig
284
+ The data configuration.
285
+ mode : Mode
286
+ Whether to create the dataset in "training", "validation" or "predicting" mode.
287
+ inputs : Any
288
+ The input sources to the dataset.
289
+ targets : Any, optional
290
+ The target sources to the dataset.
291
+
292
+ Returns
293
+ -------
294
+ CareamicsDataset[CziImageStack]
295
+ A CAREamicsDataset.
296
+ """
297
+
298
+ input_extractor = create_czi_extractor(source=inputs, axes=config.axes)
299
+ target_extractor: Optional[PatchExtractor[CziImageStack]]
300
+ if targets is not None:
301
+ target_extractor = create_czi_extractor(source=targets, axes=config.axes)
302
+ else:
303
+ target_extractor = None
304
+ dataset = CareamicsDataset(config, mode, input_extractor, target_extractor)
305
+ return dataset
306
+
307
+
265
308
  def create_ome_zarr_dataset(
266
- config: Union[DataConfig, InferenceConfig],
309
+ config: NGDataConfig,
267
310
  mode: Mode,
268
311
  inputs: Sequence[Path],
269
312
  targets: Optional[Sequence[Path]],
@@ -285,7 +328,7 @@ def create_ome_zarr_dataset(
285
328
  Returns
286
329
  -------
287
330
  CareamicsDataset[ZarrImageStack]
288
- A CAREamicsDataset
331
+ A CAREamicsDataset.
289
332
  """
290
333
 
291
334
  input_extractor = create_ome_zarr_extractor(source=inputs, axes=config.axes)
@@ -299,7 +342,7 @@ def create_ome_zarr_dataset(
299
342
 
300
343
 
301
344
  def create_custom_file_dataset(
302
- config: Union[DataConfig, InferenceConfig],
345
+ config: NGDataConfig,
303
346
  mode: Mode,
304
347
  inputs: Sequence[Path],
305
348
  targets: Optional[Sequence[Path]],
@@ -330,7 +373,7 @@ def create_custom_file_dataset(
330
373
  Returns
331
374
  -------
332
375
  CareamicsDataset[InMemoryImageStack]
333
- A CAREamicsDataset
376
+ A CAREamicsDataset.
334
377
  """
335
378
  input_extractor = create_custom_file_extractor(
336
379
  source=inputs, axes=config.axes, read_func=read_func, read_kwargs=read_kwargs
@@ -350,7 +393,7 @@ def create_custom_file_dataset(
350
393
 
351
394
 
352
395
  def create_custom_image_stack_dataset(
353
- config: Union[DataConfig, InferenceConfig],
396
+ config: NGDataConfig,
354
397
  mode: Mode,
355
398
  inputs: Any,
356
399
  targets: Optional[Any],
@@ -384,7 +427,7 @@ def create_custom_image_stack_dataset(
384
427
  Returns
385
428
  -------
386
429
  CareamicsDataset[GenericImageStack]
387
- A CAREamicsDataset
430
+ A CAREamicsDataset.
388
431
  """
389
432
  input_extractor = create_custom_image_stack_extractor(
390
433
  inputs,
@@ -74,7 +74,9 @@ def imageregions_to_tileinfos(
74
74
  tile_info = _imageregion_to_tileinfo(image_region, last_tile)
75
75
  tile_infos.append(tile_info)
76
76
 
77
- return [(data, [tile_info]) for data, tile_info in zip(data, tile_infos)]
77
+ return [
78
+ (data, [tile_info]) for data, tile_info in zip(data, tile_infos, strict=False)
79
+ ]
78
80
 
79
81
 
80
82
  def _imageregion_to_tileinfo(
@@ -35,7 +35,7 @@ def create_zarr_array(file_path: Path, data_path: str, data: NDArray):
35
35
 
36
36
 
37
37
  def create_zarr(file_path: Path, data_paths: Sequence[str], data: Sequence[NDArray]):
38
- for data_path, array in zip(data_paths, data):
38
+ for data_path, array in zip(data_paths, data, strict=False):
39
39
  create_zarr_array(file_path=file_path, data_path=data_path, data=array)
40
40
 
41
41
 
@@ -1,10 +1,12 @@
1
1
  __all__ = [
2
+ "CziImageStack",
2
3
  "GenericImageStack",
3
4
  "ImageStack",
4
5
  "InMemoryImageStack",
5
6
  "ZarrImageStack",
6
7
  ]
7
8
 
9
+ from .czi_image_stack import CziImageStack
8
10
  from .image_stack_protocol import GenericImageStack, ImageStack
9
11
  from .in_memory_image_stack import InMemoryImageStack
10
12
  from .zarr_image_stack import ZarrImageStack