# From version 0.13.1 to 0.14.0

## Package structure

Version 0.14.0 includes a large refactor of the `fractal_tasks_core` package,
leading to this new structure:
```
fractal_tasks_core/
├── cellvoyager
│   ├── filenames.py
│   ├── __init__.py
│   └── metadata.py
├── ngff
│   ├── __init__.py
│   ├── specs.py
│   └── zarr_utils.py
├── roi
│   ├── __init__.py
│   ├── load_region.py
│   ├── _overlaps_common.py
│   ├── v1_checks.py
│   ├── v1_overlaps.py
│   └── v1.py
├── tables
│   ├── __init__.py
│   └── v1.py
├── tasks
│   ├── apply_registration_to_image.py
│   ├── apply_registration_to_ROI_tables.py
│   ├── calculate_registration_image_based.py
│   ├── cellpose_segmentation.py
│   ├── compress_tif.py
│   ├── copy_ome_zarr.py
│   ├── create_ome_zarr_multiplex.py
│   ├── create_ome_zarr.py
│   ├── illumination_correction.py
│   ├── import_ome_zarr.py
│   ├── __init__.py
│   ├── maximum_intensity_projection.py
│   ├── napari_workflows_wrapper_models.py
│   ├── napari_workflows_wrapper.py
│   ├── _utils.py
│   └── yokogawa_to_ome_zarr.py
├── __FRACTAL_MANIFEST__.json
├── __init__.py
├── channels.py
├── labels.py
├── masked_loading.py
├── pyramids.py
├── upscale_array.py
├── utils.py
└── zarr_utils.py
```

## Imports


This refactor changed several `import` statements; find below a list (grouped
by their original paths) of the old/new forms.

> ⚠️ WARNING: This is a manually-curated list, please do open an issue if you spot
> an error!


### Channels

```diff
-from fractal_tasks_core.lib_channels import ChannelNotFoundError
+from fractal_tasks_core.channels import ChannelNotFoundError

-from fractal_tasks_core.lib_channels import OmeroChannel
+from fractal_tasks_core.channels import OmeroChannel

-from fractal_tasks_core.lib_channels import check_unique_wavelength_ids
+from fractal_tasks_core.channels import check_unique_wavelength_ids

-from fractal_tasks_core.lib_channels import check_well_channel_labels
+from fractal_tasks_core.channels import check_well_channel_labels

-from fractal_tasks_core.lib_channels import define_omero_channels
+from fractal_tasks_core.channels import define_omero_channels

-from fractal_tasks_core.lib_channels import get_channel_from_image_zarr
+from fractal_tasks_core.channels import get_channel_from_image_zarr

-from fractal_tasks_core.lib_channels import get_omero_channel_list
+from fractal_tasks_core.channels import get_omero_channel_list

-from fractal_tasks_core.lib_channels import update_omero_channels
+from fractal_tasks_core.channels import update_omero_channels
```

### Input models

```diff
# ⚠️ WARNING: note the new name
-from fractal_tasks_core.lib_input_models import Channel
+from fractal_tasks_core.channels import ChannelInputModel

-from fractal_tasks_core.lib_input_models import NapariWorkflowsInput
+from fractal_tasks_core.tasks.napari_workflows_wrapper_models import NapariWorkflowsInput

-from fractal_tasks_core.lib_input_models import NapariWorkflowsOutput
+from fractal_tasks_core.tasks.napari_workflows_wrapper_models import NapariWorkflowsOutput
```

### CellVoyager converter utils

```diff
-from fractal_tasks_core.lib_glob import glob_with_multiple_patterns
+from fractal_tasks_core.cellvoyager.filenames import glob_with_multiple_patterns

-from fractal_tasks_core.lib_parse_filename_metadata import parse_filename
+from fractal_tasks_core.cellvoyager.filenames import parse_filename

-from fractal_tasks_core.lib_metadata_parsing import parse_yokogawa_metadata
+from fractal_tasks_core.cellvoyager.metadata import parse_yokogawa_metadata
```

### NGFF specs and validation

```diff

-from fractal_tasks_core.lib_ngff import detect_ome_ngff_type
+from fractal_tasks_core.ngff import detect_ome_ngff_type

-from fractal_tasks_core.lib_ngff import NgffImageMeta
+from fractal_tasks_core.ngff import NgffImageMeta

-from fractal_tasks_core.lib_ngff import load_NgffImageMeta
+from fractal_tasks_core.ngff import load_NgffImageMeta

-from fractal_tasks_core.lib_ngff import load_NgffWellMeta
+from fractal_tasks_core.ngff import load_NgffWellMeta
```

### Pyramids

```diff
-from fractal_tasks_core.lib_pyramid_creation import build_pyramid
+from fractal_tasks_core.pyramids import build_pyramid
```

### Regions of interest

```diff
-from fractal_tasks_core.lib_regions_of_interest import are_ROI_table_columns_valid
+from fractal_tasks_core.roi import are_ROI_table_columns_valid

-from fractal_tasks_core.lib_regions_of_interest import array_to_bounding_box_table
+from fractal_tasks_core.roi import array_to_bounding_box_table

-from fractal_tasks_core.lib_regions_of_interest import check_valid_ROI_indices
+from fractal_tasks_core.roi import check_valid_ROI_indices

-from fractal_tasks_core.lib_regions_of_interest import convert_ROI_table_to_indices
+from fractal_tasks_core.roi import convert_ROI_table_to_indices

-from fractal_tasks_core.lib_regions_of_interest import convert_ROIs_from_3D_to_2D
+from fractal_tasks_core.roi import convert_ROIs_from_3D_to_2D

-from fractal_tasks_core.lib_regions_of_interest import convert_indices_to_regions
+from fractal_tasks_core.roi import convert_indices_to_regions

-from fractal_tasks_core.lib_regions_of_interest import empty_bounding_box_table
+from fractal_tasks_core.roi import empty_bounding_box_table

-from fractal_tasks_core.lib_ROI_overlaps import find_overlaps_in_ROI_indices
+from fractal_tasks_core.roi import find_overlaps_in_ROI_indices

-from fractal_tasks_core.lib_regions_of_interest import get_image_grid_ROIs
+from fractal_tasks_core.roi import get_image_grid_ROIs

-from fractal_tasks_core.lib_ROI_overlaps import get_overlapping_pairs_3D
+from fractal_tasks_core.roi import get_overlapping_pairs_3D

-from fractal_tasks_core.lib_regions_of_interest import get_single_image_ROI
+from fractal_tasks_core.roi import get_single_image_ROI

-from fractal_tasks_core.lib_regions_of_interest import is_ROI_table_valid
+from fractal_tasks_core.roi import is_ROI_table_valid

-from fractal_tasks_core.lib_regions_of_interest import is_standard_roi_table
+from fractal_tasks_core.roi import is_standard_roi_table

-from fractal_tasks_core.lib_regions_of_interest import load_region
+from fractal_tasks_core.roi import load_region

-from fractal_tasks_core.lib_regions_of_interest import prepare_FOV_ROI_table
+from fractal_tasks_core.roi import prepare_FOV_ROI_table

-from fractal_tasks_core.lib_regions_of_interest import prepare_well_ROI_table
+from fractal_tasks_core.roi import prepare_well_ROI_table

-from fractal_tasks_core.lib_ROI_overlaps import remove_FOV_overlaps
+from fractal_tasks_core.roi import remove_FOV_overlaps
```

### Other

```diff
-from fractal_tasks_core.lib_tables import write_table
+from fractal_tasks_core.tables import write_table

-from fractal_tasks_core.lib_masked_loading import masked_loading_wrapper
+from fractal_tasks_core.masked_loading import masked_loading_wrapper

-from fractal_tasks_core.lib_upscale_array import upscale_array
+from fractal_tasks_core.upscale_array import upscale_array

-from fractal_tasks_core.lib_write import OverwriteNotAllowedError
+from fractal_tasks_core.zarr_utils import OverwriteNotAllowedError

-from fractal_tasks_core.lib_write import open_zarr_group_with_overwrite
+from fractal_tasks_core.zarr_utils import open_zarr_group_with_overwrite

-from fractal_tasks_core.lib_write import prepare_label_group
+from fractal_tasks_core.labels import prepare_label_group

-from fractal_tasks_core.lib_zattrs_utils import get_table_path_dict
+from fractal_tasks_core.utils import get_table_path_dict

-from fractal_tasks_core.lib_zattrs_utils import rescale_datasets
+from fractal_tasks_core.utils import rescale_datasets

-from fractal_tasks_core.lib_read_fractal_metadata import get_parameters_from_metadata
+from fractal_tasks_core.utils import get_parameters_from_metadata
```
