webknossos 4.2.0__tar.gz → 4.2.2__tar.gz
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.
- {webknossos-4.2.0 → webknossos-4.2.2}/PKG-INFO +2 -2
- {webknossos-4.2.0 → webknossos-4.2.2}/pyproject.toml +2 -2
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/_downsampling_utils.py +48 -26
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/layer.py +10 -6
- webknossos-4.2.2/webknossos/version.py +1 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos.egg-info/PKG-INFO +2 -2
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos.egg-info/requires.txt +1 -1
- webknossos-4.2.0/webknossos/version.py +0 -1
- {webknossos-4.2.0 → webknossos-4.2.2}/README.md +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/setup.cfg +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/tests/test_annotation.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/tests/test_api_client.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/tests/test_cli.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/tests/test_cli_utils.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/tests/test_skeleton.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/tests/test_utils.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/branchpoint.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/comment.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/edge.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/group.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/meta.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/metadata_entry.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/nml.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/node.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/parameters.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/segment.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/tree.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/utils.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/_nml/volume.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/administration/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/administration/project.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/administration/task.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/administration/team.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/administration/user.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/ai_model/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/ai_model/ai_model_category.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/ai_model/remote_ai_model.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/annotation/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/annotation/_nml_conversion.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/annotation/annotation.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/annotation/annotation_info.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/annotation/volume_layer.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/_utils.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/check_equality.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/compress.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/convert.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/convert_knossos.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/convert_raw.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/convert_zarr.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/copy_dataset.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/download.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/downsample.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/export_as_tiff.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/main.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/merge_fallback.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/upload.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/cli/upsample.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/_defaults.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/_download_dataset.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/_resolve_short_link.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/_resumable/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/_resumable/chunk.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/_resumable/core.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/_resumable/file.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/_resumable/util.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/_upload_dataset.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/api_client/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/api_client/_abstract_api_client.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/api_client/_serialization.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/api_client/datastore_api_client.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/api_client/errors.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/api_client/models.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/api_client/tracingstore_api_client.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/api_client/wk_api_client.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/context.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/chunked_image_source.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/common_slice_readers.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/czi_image_source.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/dm_slice_reader.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/image_conversion.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/image_source.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/image_source_registry.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/ims_image_source.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/infer_bounding_box_existing_files.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/mrc_image_source.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/n5_image_source.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/neuroglancer_precomputed_image_source.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/ome_zarr_helpers.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/ozx_image_source.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/segmentation_recognition.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/slice_reader.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/sliced_image_source.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/tensorstore_chunked_image_source.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/tiff_slice_reader.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/vendor/dm3.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/vendor/dm4.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/zarr_image_source.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_metadata.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_utils/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_utils/buffered_slice_reader.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_utils/buffered_slice_writer.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_utils/tensorstore_helpers.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_utils/tinywkw.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/abstract_dataset.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/dataset.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/defaults.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/errors.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/_downsampling_numba.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/_transform_utils.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/_upsampling_utils.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/abstract_layer.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/export.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/layer_to_link.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/remote_layer.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/segmentation_layer/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/segmentation_layer/abstract_segmentation_layer.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/segmentation_layer/attachments/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/segmentation_layer/attachments/agglomerate_attachment.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/segmentation_layer/attachments/attachment.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/segmentation_layer/attachments/attachments.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/segmentation_layer/remote_segmentation_layer.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/segmentation_layer/segmentation_layer.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/view/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/view/_array.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/view/mag_view.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/view/remote_mag_view.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/view/view.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/ome_metadata.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/remote_access_mode.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/remote_dataset.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/remote_dataset_registry.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/remote_folder.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/sampling_modes.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/transfer_mode.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset_properties/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset_properties/_bigint_envelope.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset_properties/coordinate_transformations.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset_properties/data_format.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset_properties/dataset_properties.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset_properties/dtype_conversion.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset_properties/layer_categories.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset_properties/length_unit.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset_properties/structuring.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/datastore/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/datastore/datastore.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/geometry/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/geometry/bounding_box.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/geometry/constants.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/geometry/mag.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/geometry/nd_bounding_box.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/geometry/normalized_bounding_box.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/geometry/vec3_float.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/geometry/vec3_int.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/geometry/vec_int.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/proofreading/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/proofreading/agglomerate_graph_data.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/proofreading/generated/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/proofreading/generated/agglomerate_graph_pb2.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/proofreading/generated/agglomerate_graph_pb2.pyi +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/py.typed +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/skeleton/__init__.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/skeleton/group.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/skeleton/node.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/skeleton/skeleton.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/skeleton/tree.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/ssl_context.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos/utils.py +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos.egg-info/SOURCES.txt +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos.egg-info/dependency_links.txt +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos.egg-info/entry_points.txt +0 -0
- {webknossos-4.2.0 → webknossos-4.2.2}/webknossos.egg-info/top_level.txt +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: webknossos
|
|
3
|
-
Version: 4.2.
|
|
3
|
+
Version: 4.2.2
|
|
4
4
|
Summary: Python API for working with WEBKNOSSOS datasets, annotations, and for WEBKNOSSOS server interaction.
|
|
5
5
|
Author-email: scalable minds <hello@scalableminds.com>
|
|
6
6
|
License: AGPL-3.0
|
|
@@ -37,7 +37,7 @@ Requires-Dist: boltons>=21.0.0
|
|
|
37
37
|
Requires-Dist: cattrs>=22.0.0
|
|
38
38
|
Requires-Dist: certifi>=2023
|
|
39
39
|
Requires-Dist: click<8.2.0
|
|
40
|
-
Requires-Dist: cluster-tools==4.2.
|
|
40
|
+
Requires-Dist: cluster-tools==4.2.2
|
|
41
41
|
Requires-Dist: httpx~=0.27.0
|
|
42
42
|
Requires-Dist: imageio>=2.37.0
|
|
43
43
|
Requires-Dist: lz4>=4.0.0
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "webknossos"
|
|
3
|
-
version = "4.2.
|
|
3
|
+
version = "4.2.2" # filled by dunamai
|
|
4
4
|
description = "Python API for working with WEBKNOSSOS datasets, annotations, and for WEBKNOSSOS server interaction."
|
|
5
5
|
authors = [{ name = "scalable minds", email = "hello@scalableminds.com" }]
|
|
6
6
|
readme = "README.md"
|
|
@@ -39,7 +39,7 @@ dependencies = [
|
|
|
39
39
|
"cattrs >=22.0.0",
|
|
40
40
|
"certifi >=2023",
|
|
41
41
|
"click <8.2.0", # pinned because of incompatibility with typer
|
|
42
|
-
"cluster-tools==4.2.
|
|
42
|
+
"cluster-tools==4.2.2",
|
|
43
43
|
"httpx ~=0.27.0",
|
|
44
44
|
"imageio >=2.37.0",
|
|
45
45
|
"lz4 >=4.0.0",
|
|
@@ -14,7 +14,14 @@ if TYPE_CHECKING:
|
|
|
14
14
|
from webknossos.dataset.dataset import Dataset, RemoteDataset
|
|
15
15
|
|
|
16
16
|
from webknossos.dataset_properties import LayerCategoryType
|
|
17
|
-
from webknossos.geometry import
|
|
17
|
+
from webknossos.geometry import (
|
|
18
|
+
C_AXIS,
|
|
19
|
+
Mag,
|
|
20
|
+
NormalizedBoundingBox,
|
|
21
|
+
Vec3FloatLike,
|
|
22
|
+
Vec3Int,
|
|
23
|
+
Vec3IntLike,
|
|
24
|
+
)
|
|
18
25
|
|
|
19
26
|
from .view import ArrayInfo, View
|
|
20
27
|
|
|
@@ -299,28 +306,6 @@ def _downsample_mode(data: np.ndarray, factors: list[int]) -> np.ndarray:
|
|
|
299
306
|
return non_linear_filter_3d(data, factors, _mode)
|
|
300
307
|
|
|
301
308
|
|
|
302
|
-
def downsample_unpadded_data(
|
|
303
|
-
buffer: np.ndarray, target_mag: Mag, interpolation_mode: InterpolationModes
|
|
304
|
-
) -> np.ndarray:
|
|
305
|
-
target_mag_np = np.array(target_mag.to_list())
|
|
306
|
-
current_dimension_size = np.array(buffer.shape[1:])
|
|
307
|
-
padding_size_for_downsampling = (
|
|
308
|
-
target_mag_np - (current_dimension_size % target_mag_np) % target_mag_np
|
|
309
|
-
)
|
|
310
|
-
padding_size_for_downsampling = list(zip([0, 0, 0], padding_size_for_downsampling))
|
|
311
|
-
buffer = np.pad(
|
|
312
|
-
buffer, pad_width=[(0, 0)] + padding_size_for_downsampling, mode="constant"
|
|
313
|
-
)
|
|
314
|
-
dimension_decrease = np.array([1] + target_mag.to_list())
|
|
315
|
-
downsampled_buffer_shape = np.array(buffer.shape) // dimension_decrease
|
|
316
|
-
downsampled_buffer = np.empty(dtype=buffer.dtype, shape=downsampled_buffer_shape)
|
|
317
|
-
for channel in range(buffer.shape[0]):
|
|
318
|
-
downsampled_buffer[channel] = downsample_cube(
|
|
319
|
-
buffer[channel], target_mag.to_list(), interpolation_mode
|
|
320
|
-
)
|
|
321
|
-
return downsampled_buffer
|
|
322
|
-
|
|
323
|
-
|
|
324
309
|
def downsample_cube(
|
|
325
310
|
cube_buffer: np.ndarray, factors: list[int], interpolation_mode: InterpolationModes
|
|
326
311
|
) -> np.ndarray:
|
|
@@ -347,8 +332,17 @@ def downsample_cube_job(
|
|
|
347
332
|
mag_factors: Vec3Int,
|
|
348
333
|
interpolation_mode: InterpolationModes,
|
|
349
334
|
buffer_shape: Vec3Int,
|
|
335
|
+
valid_source_bbox: NormalizedBoundingBox | None = None,
|
|
350
336
|
) -> None:
|
|
337
|
+
"""Downsamples the data of `source_view` into `target_view`.
|
|
338
|
+
|
|
339
|
+
Source voxels outside of `valid_source_bbox` (in mag 1, aligned with the source
|
|
340
|
+
mag) are not read. Instead, the valid data is mirrored into that region, so that
|
|
341
|
+
the area outside of the layer's bounding box doesn't darken the border voxels of
|
|
342
|
+
the target mag.
|
|
343
|
+
"""
|
|
351
344
|
(source_view, target_view, _i) = args
|
|
345
|
+
source_mag = source_view.mag.to_vec3_int()
|
|
352
346
|
|
|
353
347
|
try:
|
|
354
348
|
source_bbox = source_view.normalized_bounding_box
|
|
@@ -376,9 +370,37 @@ def downsample_cube_job(
|
|
|
376
370
|
|
|
377
371
|
bbox = source_bbox.offset(source_offset).with_size_xyz(source_size)
|
|
378
372
|
|
|
379
|
-
|
|
380
|
-
|
|
381
|
-
|
|
373
|
+
if valid_source_bbox is None:
|
|
374
|
+
valid_topleft = bbox.topleft_xyz
|
|
375
|
+
valid_bottomright = bbox.bottomright_xyz
|
|
376
|
+
else:
|
|
377
|
+
valid_topleft = bbox.topleft_xyz.pairmax(valid_source_bbox.topleft_xyz)
|
|
378
|
+
valid_bottomright = bbox.bottomright_xyz.pairmin(
|
|
379
|
+
valid_source_bbox.bottomright_xyz
|
|
380
|
+
)
|
|
381
|
+
|
|
382
|
+
if (
|
|
383
|
+
valid_topleft == bbox.topleft_xyz
|
|
384
|
+
and valid_bottomright == bbox.bottomright_xyz
|
|
385
|
+
):
|
|
386
|
+
cube_buffer_channels = source_view.read_cxyz(
|
|
387
|
+
absolute_bounding_box=bbox,
|
|
388
|
+
)
|
|
389
|
+
else:
|
|
390
|
+
cube_buffer_channels = source_view.read_cxyz(
|
|
391
|
+
absolute_bounding_box=bbox.with_topleft_xyz(
|
|
392
|
+
valid_topleft
|
|
393
|
+
).with_size_xyz(valid_bottomright - valid_topleft),
|
|
394
|
+
)
|
|
395
|
+
# Mirroring keeps a representative mix of the valid values, also when
|
|
396
|
+
# the padding is wider than the valid data (e.g. for large mag factors).
|
|
397
|
+
pad_before = (valid_topleft - bbox.topleft_xyz) // source_mag
|
|
398
|
+
pad_after = (bbox.bottomright_xyz - valid_bottomright) // source_mag
|
|
399
|
+
cube_buffer_channels = np.pad(
|
|
400
|
+
cube_buffer_channels,
|
|
401
|
+
[(0, 0)] + list(zip(pad_before, pad_after)),
|
|
402
|
+
mode="symmetric",
|
|
403
|
+
)
|
|
382
404
|
|
|
383
405
|
for channel_index in range(num_channels):
|
|
384
406
|
cube_buffer = cube_buffer_channels[channel_index]
|
|
@@ -843,15 +843,14 @@ class Layer(AbstractLayer):
|
|
|
843
843
|
mag = Mag(mag) if mag is not None else foreign_mag_view.mag
|
|
844
844
|
self._assert_mag_does_not_exist_yet(mag)
|
|
845
845
|
|
|
846
|
+
# Validated against the foreign properties without opening the foreign array,
|
|
847
|
+
# whose path might not be readable from here, e.g. a direct path without
|
|
848
|
+
# credentials for the underlying storage.
|
|
849
|
+
foreign_data_format = foreign_mag_view.data_format
|
|
846
850
|
if isinstance(foreign_mag_view, RemoteMagView):
|
|
847
|
-
# The remote properties suffice, so the foreign array is not opened.
|
|
848
|
-
# Its path might not be readable from here, e.g. a direct path without
|
|
849
|
-
# credentials for the underlying storage.
|
|
850
|
-
foreign_data_format = foreign_mag_view.data_format
|
|
851
851
|
foreign_dtype = foreign_mag_view._layer_properties.dtype_np
|
|
852
852
|
else:
|
|
853
|
-
|
|
854
|
-
foreign_dtype = foreign_mag_view.get_dtype()
|
|
853
|
+
foreign_dtype = foreign_mag_view.layer.dtype
|
|
855
854
|
assert self.data_format == foreign_data_format, (
|
|
856
855
|
f"Cannot add a remote mag whose data format {foreign_data_format} "
|
|
857
856
|
+ f"does not match the layers data format {self.data_format}"
|
|
@@ -1250,6 +1249,11 @@ class Layer(AbstractLayer):
|
|
|
1250
1249
|
mag_factors=mag_factors,
|
|
1251
1250
|
interpolation_mode=parsed_interpolation_mode,
|
|
1252
1251
|
buffer_shape=buffer_shape,
|
|
1252
|
+
# Source voxels outside of the layer's bounding box are not read,
|
|
1253
|
+
# so that they don't darken the border voxels of the target mag.
|
|
1254
|
+
valid_source_bbox=self.normalized_bounding_box.align_with_mag(
|
|
1255
|
+
from_mag, ceil=True
|
|
1256
|
+
),
|
|
1253
1257
|
)
|
|
1254
1258
|
# The downsampling computation is chunked using buffer_shape anyways.
|
|
1255
1259
|
# The target_chunk_shape determines how many jobs are spawned. Increase it
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
__version__ = '4.2.2'
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: webknossos
|
|
3
|
-
Version: 4.2.
|
|
3
|
+
Version: 4.2.2
|
|
4
4
|
Summary: Python API for working with WEBKNOSSOS datasets, annotations, and for WEBKNOSSOS server interaction.
|
|
5
5
|
Author-email: scalable minds <hello@scalableminds.com>
|
|
6
6
|
License: AGPL-3.0
|
|
@@ -37,7 +37,7 @@ Requires-Dist: boltons>=21.0.0
|
|
|
37
37
|
Requires-Dist: cattrs>=22.0.0
|
|
38
38
|
Requires-Dist: certifi>=2023
|
|
39
39
|
Requires-Dist: click<8.2.0
|
|
40
|
-
Requires-Dist: cluster-tools==4.2.
|
|
40
|
+
Requires-Dist: cluster-tools==4.2.2
|
|
41
41
|
Requires-Dist: httpx~=0.27.0
|
|
42
42
|
Requires-Dist: imageio>=2.37.0
|
|
43
43
|
Requires-Dist: lz4>=4.0.0
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
__version__ = '4.2.0'
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/client/api_client/tracingstore_api_client.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/chunked_image_source.py
RENAMED
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/common_slice_readers.py
RENAMED
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/czi_image_source.py
RENAMED
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/dm_slice_reader.py
RENAMED
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/image_conversion.py
RENAMED
|
File without changes
|
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/image_source_registry.py
RENAMED
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/ims_image_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/mrc_image_source.py
RENAMED
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/n5_image_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/ome_zarr_helpers.py
RENAMED
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/ozx_image_source.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/sliced_image_source.py
RENAMED
|
File without changes
|
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/tiff_slice_reader.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/_image_conversion/zarr_image_source.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset/layer/segmentation_layer/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/dataset_properties/coordinate_transformations.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/proofreading/generated/agglomerate_graph_pb2.py
RENAMED
|
File without changes
|
{webknossos-4.2.0 → webknossos-4.2.2}/webknossos/proofreading/generated/agglomerate_graph_pb2.pyi
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|