dclab 0.62.9__tar.gz → 0.62.11__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.
Potentially problematic release.
This version of dclab might be problematic. Click here for more details.
- {dclab-0.62.9 → dclab-0.62.11}/CHANGELOG +6 -0
- {dclab-0.62.9 → dclab-0.62.11}/PKG-INFO +2 -2
- {dclab-0.62.9 → dclab-0.62.11}/dclab/_version.py +2 -2
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/copier.py +40 -31
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/export.py +15 -12
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_dcor/tables.py +6 -4
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/writer.py +28 -9
- {dclab-0.62.9 → dclab-0.62.11}/dclab.egg-info/PKG-INFO +2 -2
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_cli_repack.py +37 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_copier.py +63 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_export_hdf5.py +21 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_feat_basin.py +6 -1
- {dclab-0.62.9 → dclab-0.62.11}/.gitignore +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/.readthedocs.yml +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/LICENSE +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/MANIFEST.in +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/README.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/cached.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/cli/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/cli/common.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/cli/task_compress.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/cli/task_condense.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/cli/task_join.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/cli/task_repack.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/cli/task_split.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/cli/task_tdms2rtdc.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/cli/task_verify_dataset.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/definitions/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/definitions/feat_const.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/definitions/feat_logic.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/definitions/meta_const.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/definitions/meta_logic.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/definitions/meta_parse.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/downsampling.pyx +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/packaging/LICENSE +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/packaging/LICENSE.APACHE +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/packaging/LICENSE.BSD +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/packaging/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/packaging/_structures.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/packaging/version.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/skimage/LICENSE +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/skimage/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/skimage/_find_contours.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/skimage/_find_contours_cy.pyx +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/skimage/_pnpoly.pyx +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/skimage/_shared/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/skimage/_shared/geometry.pxd +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/skimage/_shared/geometry.pyx +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/skimage/measure.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/skimage/pnpoly.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/statsmodels/LICENSE +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/statsmodels/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/statsmodels/nonparametric/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/statsmodels/nonparametric/_kernel_base.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/statsmodels/nonparametric/kernel_density.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/external/statsmodels/nonparametric/kernels.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/bright.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/bright_bc.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/bright_perc.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/contour.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/emodulus/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/emodulus/load.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/emodulus/lut_HE-2D-FEM-22.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/emodulus/lut_HE-3D-FEM-22.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/emodulus/lut_LE-2D-FEM-19.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/emodulus/pxcorr.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/emodulus/scale_linear.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/emodulus/viscosity.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/fl_crosstalk.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/inert_ratio.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/features/volume.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/http_utils.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/isoelastics/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/isoelastics/iso_HE-2D-FEM-22-area_um-deform.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/isoelastics/iso_HE-2D-FEM-22-volume-deform.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/isoelastics/iso_HE-3D-FEM-22-area_um-deform.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/isoelastics/iso_HE-3D-FEM-22-volume-deform.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/isoelastics/iso_LE-2D-FEM-19-area_um-deform.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/isoelastics/iso_LE-2D-FEM-19-volume-deform.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/isoelastics/iso_LE-2D-ana-18-area_um-deform.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/kde_contours.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/kde_methods.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/lme4/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/lme4/lme4_template.R +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/lme4/rsetup.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/lme4/wrapr.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/polygon_filter.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/check.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/config.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/core.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/feat_anc_core/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/feat_anc_core/af_basic.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/feat_anc_core/af_emodulus.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/feat_anc_core/af_fl_max_ctc.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/feat_anc_core/af_image_contour.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/feat_anc_core/af_ml_class.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/feat_anc_core/ancillary_feature.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/feat_anc_ml/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/feat_anc_plugin/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/feat_anc_plugin/plugin_feature.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/feat_basin.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/feat_temp.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/filter.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_dcor/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_dcor/access_token.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_dcor/api.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_dcor/base.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_dcor/basin.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_dcor/logs.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_dict.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_hdf5/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_hdf5/base.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_hdf5/basin.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_hdf5/events.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_hdf5/feat_defect.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_hdf5/logs.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_hdf5/tables.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_hierarchy/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_hierarchy/base.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_hierarchy/events.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_hierarchy/hfilter.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_hierarchy/mapper.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_http.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_s3.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_tdms/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_tdms/event_contour.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_tdms/event_image.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_tdms/event_mask.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_tdms/event_trace.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_tdms/exc.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/fmt_tdms/naming.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/rtdc_dataset/load.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/statistics.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/util.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab/warn.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab.egg-info/SOURCES.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab.egg-info/dependency_links.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab.egg-info/entry_points.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab.egg-info/requires.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/dclab.egg-info/top_level.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/.gitignore +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/README.md +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/conf.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/data/example.poly +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/data/example.rtdc +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/data/example_plugin.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/data/example_plugin_metadata.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/data/example_traces.rtdc +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/data/example_video.rtdc +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/dclab.bib +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/extensions/dclab_defs.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/extensions/fancy_include.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/extensions/github_changelog.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/extensions/simple_argparse.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/figures/DCOR_API_Token_website.png +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/index.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/logo/dc_logo.png +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/logo/dc_logo.svg +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/logo/dclab.png +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/logo/dclab.svg +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/logo/dclab_large_white.png +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/logo/dclab_large_white.svg +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/logo/favicon.ico +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/logo/favicon.svg +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/requirements.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_advanced_usage.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_basins/index.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_dc_io.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_dc_usage.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_dcor.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_emodulus/figures_emodulus/.gitignore +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_HE-2D-FEM-22.png +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_HE-3D-FEM-22.png +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_LE-2D-FEM-19.png +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_emodulus/figures_emodulus/plot_emodulus_lut.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_emodulus/figures_emodulus/requirements.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_emodulus/figures_viscosity/LICENSE +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_emodulus/figures_viscosity/buyukurganci_22_fig3a.jpg +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_emodulus/figures_viscosity/buyukurganci_22_fig3a.pdf +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_emodulus/index.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_feat_plugin.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_feat_temp.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_fluorescence.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_lme4.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_notation.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_s3.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_av_scatter.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_changelog.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_cli.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_code_reference.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_examples.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_getting_started.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/docs/sec_z_bib.rst +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/emodulus_dcor.jpg +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/emodulus_dcor.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/generate_example_images.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/isoelastics.jpg +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/isoelastics.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/isoelastics_custom.jpg +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/isoelastics_custom.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/lme4_glmer_diff.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/lme4_lmer.jpg +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/lme4_lmer.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/overview_plot.jpg +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/overview_plot.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/plugin_example.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/plugin_usage.jpg +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/plugin_usage.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/viscosity_models.jpg +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/examples/viscosity_models.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/pyproject.toml +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/.gitignore +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/README.md +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/fem2iso_volume.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/fem2lutiso_std.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/fem2rtdc.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/lut_recipes/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/lut_recipes/hooks/LUT_analytical_linear-elastic_2Daxis.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/lut_recipes/hooks/README.md +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/lut_recipes/hooks/__init__.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/lut_recipes/hooks/common.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/lut_recipes/hooks/he_2d_fem_22.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/lut_recipes/hooks/he_3d_fem_22.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/lut_recipes/hooks/le_2d_fem_19.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/lut_recipes/lut_processor.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/pixelation_correction.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/pixelation_correction_2020.png +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/pixelation_correction_2022.png +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/scripts/requirements.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/setup.cfg +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/setup.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/README.md +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/conftest.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/README.md +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/example_access_token.dcor-access +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/example_isoelastics.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/feat_anc_plugin_creative.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-hdf5_fl-no-contour_2019.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-hdf5_fl_2017.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-hdf5_fl_2018.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-hdf5_fl_wide-channel_2023.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-hdf5_image-bg_2020.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-hdf5_image-mask-blood_2021.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-hdf5_mask-contour_2018.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-hdf5_polygon_gate_2021.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-hdf5_raw-cytoshot-exported.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-hdf5_segfault-compound_2023.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-hdf5_wide-channel_2023.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-tdms_2fl-no-image_2017.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-tdms_fl-image-bright_2017.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-tdms_fl-image-large-fov_2017.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-tdms_fl-image_2016.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-tdms_fl_2015.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-tdms_minimal_2016.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/data/fmt-tdms_shapein-2.0.1-no-image_2017.zip +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/helper_methods.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/requirements.txt +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_cache.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_cli.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_cli_argparse.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_cli_compress.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_cli_condense.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_cli_join.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_cli_split.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_config_value_mapping.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_dfn.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_downsampling.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_feat_bright.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_feat_bright_bc.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_feat_bright_perc.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_feat_contour.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_feat_emodulus.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_feat_emodulus_viscosity.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_feat_fl_crosstalk.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_feat_inert_ratio.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_feat_volume.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_http_utils.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_isoelastics.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_kde_contours.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_kde_methods.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_lme4.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_lut_he_2d_fem_22.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_lut_he_3d_fem_22.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_polygon_contains.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_polygon_filter.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_check_dataset.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_config.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_core_feat.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_downsampling.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_export.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_export_avi.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_export_fcs.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_export_tsv.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_feat_anc_core.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_feat_anc_ml.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_feat_anc_plugin.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_feat_basin_mapped.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_feat_temp.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_filter.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_fmt_dcor.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_fmt_dcor_access_token.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_fmt_dcor_basin.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_fmt_dict.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_fmt_hdf5.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_fmt_hdf5_basins.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_fmt_hdf5_basins_internal.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_fmt_hierarchy.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_fmt_http.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_fmt_http_basin.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_fmt_s3.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_fmt_s3_basin.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_fmt_tdms.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_hash.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_kde.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_limit_events.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_rtdc_writer.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_statistics.py +0 -0
- {dclab-0.62.9 → dclab-0.62.11}/tests/test_util.py +0 -0
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
0.62.11
|
|
2
|
+
- enh: support plain `numpy.array` tables
|
|
3
|
+
0.62.10
|
|
4
|
+
- fix: `basin_definition_copy` failed when more than one basins defined
|
|
5
|
+
due to redundant loop
|
|
6
|
+
- fix: JSON logs during export were not sorted and indented
|
|
1
7
|
0.62.9
|
|
2
8
|
- enh: sort basin definition before exporting to JSON; the side-effect
|
|
3
9
|
is that the unique key for a basin changes, possibly resulting in
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: dclab
|
|
3
|
-
Version: 0.62.
|
|
3
|
+
Version: 0.62.11
|
|
4
4
|
Summary: Library for real-time deformability cytometry (RT-DC)
|
|
5
5
|
Author: Benedikt Hartmann, Eoghan O'Connell, Maik Herbig, Maximilian Schlögel, Nadia Sbaa, Paul Müller, Philipp Rosendahl, Raghava Alajangi
|
|
6
6
|
Maintainer-email: Paul Müller <dev@craban.de>
|
|
@@ -178,42 +178,51 @@ def basin_definition_copy(src_h5file, dst_h5file, features_iter):
|
|
|
178
178
|
relevant for the internal basin.
|
|
179
179
|
"""
|
|
180
180
|
dst_h5file.require_group("basins")
|
|
181
|
-
|
|
181
|
+
# Load the basin information
|
|
182
|
+
basin_dicts = RTDC_HDF5.basin_get_dicts_from_h5file(src_h5file)
|
|
183
|
+
for bn in basin_dicts:
|
|
184
|
+
b_key = bn["key"]
|
|
185
|
+
|
|
182
186
|
if b_key in dst_h5file["basins"]:
|
|
183
|
-
#
|
|
187
|
+
# already stored therein
|
|
184
188
|
continue
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
|
|
194
|
-
|
|
195
|
-
|
|
196
|
-
|
|
197
|
-
|
|
198
|
-
|
|
189
|
+
|
|
190
|
+
# sanity check
|
|
191
|
+
if b_key not in src_h5file["basins"]:
|
|
192
|
+
raise ValueError(
|
|
193
|
+
f"Failed to parse basin information correctly. Source file "
|
|
194
|
+
f"{src_h5file} does not contain basin {b_key} which I got "
|
|
195
|
+
f"from `RTDC_HDF5.basin_get_dicts_from_h5file`.")
|
|
196
|
+
|
|
197
|
+
if bn["type"] == "internal":
|
|
198
|
+
# Make sure we define the internal features selected
|
|
199
|
+
feat_used = [f for f in bn["features"] if f in features_iter]
|
|
200
|
+
if len(feat_used) == 0:
|
|
201
|
+
# We don't have any internal features, don't write anything
|
|
202
|
+
continue
|
|
203
|
+
elif feat_used != bn["features"]:
|
|
204
|
+
bn["features"] = feat_used
|
|
205
|
+
rewrite = True
|
|
199
206
|
else:
|
|
200
|
-
# We do not have an internal basin, just copy everything
|
|
201
207
|
rewrite = False
|
|
208
|
+
else:
|
|
209
|
+
# We do not have an internal basin, just copy everything
|
|
210
|
+
rewrite = False
|
|
202
211
|
|
|
203
|
-
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
212
|
-
|
|
213
|
-
|
|
214
|
-
|
|
215
|
-
|
|
216
|
-
|
|
212
|
+
if rewrite:
|
|
213
|
+
# Convert edited `bn` to JSON and write feature data
|
|
214
|
+
b_lines = json.dumps(bn, indent=2).split("\n")
|
|
215
|
+
key = hashobj(b_lines)
|
|
216
|
+
if key not in dst_h5file["basins"]:
|
|
217
|
+
with RTDCWriter(dst_h5file) as hw:
|
|
218
|
+
hw.write_text(dst_h5file["basins"], key, b_lines)
|
|
219
|
+
else:
|
|
220
|
+
# copy only
|
|
221
|
+
h5ds_copy(src_loc=src_h5file["basins"],
|
|
222
|
+
src_name=b_key,
|
|
223
|
+
dst_loc=dst_h5file["basins"],
|
|
224
|
+
dst_name=b_key,
|
|
225
|
+
recursive=False)
|
|
217
226
|
|
|
218
227
|
|
|
219
228
|
def h5ds_copy(src_loc, src_name, dst_loc, dst_name=None,
|
|
@@ -319,18 +319,21 @@ class Export(object):
|
|
|
319
319
|
|
|
320
320
|
# write export log
|
|
321
321
|
hw.store_log(time.strftime("dclab-export_%Y-%m-%d_%H.%M.%S"),
|
|
322
|
-
json.dumps(
|
|
323
|
-
"dclab version": version_tuple,
|
|
324
|
-
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
322
|
+
json.dumps(
|
|
323
|
+
{"dclab version": version_tuple,
|
|
324
|
+
"kwargs": {
|
|
325
|
+
"features": features,
|
|
326
|
+
"filtered": filtered,
|
|
327
|
+
"logs": logs,
|
|
328
|
+
"tables": tables,
|
|
329
|
+
"basins": basins,
|
|
330
|
+
"meta_prefix": meta_prefix,
|
|
331
|
+
"skip_checks": skip_checks
|
|
332
|
+
}
|
|
333
|
+
},
|
|
334
|
+
indent=2,
|
|
335
|
+
sort_keys=True,
|
|
336
|
+
).split("\n"))
|
|
334
337
|
|
|
335
338
|
if logs:
|
|
336
339
|
# write logs
|
|
@@ -30,11 +30,13 @@ class DCORTables:
|
|
|
30
30
|
tables = {}
|
|
31
31
|
for key in table_data:
|
|
32
32
|
columns, data = table_data[key]
|
|
33
|
-
ds_dt = np.dtype({'names': columns,
|
|
34
|
-
'formats': [np.float64] * len(columns)})
|
|
35
33
|
tab_data = np.asarray(data)
|
|
36
|
-
|
|
37
|
-
|
|
34
|
+
if columns is not None:
|
|
35
|
+
# We have a rec-array (named columns)
|
|
36
|
+
ds_dt = np.dtype({'names': columns,
|
|
37
|
+
'formats': [np.float64] * len(columns)})
|
|
38
|
+
tab_data = np.rec.array(tab_data, dtype=ds_dt)
|
|
39
|
+
tables[key] = tab_data
|
|
38
40
|
|
|
39
41
|
self._tables_cache = tables
|
|
40
42
|
return self._tables_cache
|
|
@@ -616,7 +616,7 @@ class RTDCWriter:
|
|
|
616
616
|
convfunc = dfn.get_config_value_func(sec, ck)
|
|
617
617
|
self.h5file.attrs[idk] = convfunc(value)
|
|
618
618
|
|
|
619
|
-
def store_table(self, name, cmp_array):
|
|
619
|
+
def store_table(self, name, cmp_array, h5_attrs=None):
|
|
620
620
|
"""Store a compound array table
|
|
621
621
|
|
|
622
622
|
Tables are semi-metadata. They may contain information collected
|
|
@@ -629,16 +629,33 @@ class RTDCWriter:
|
|
|
629
629
|
----------
|
|
630
630
|
name: str
|
|
631
631
|
Name of the table
|
|
632
|
-
cmp_array: np.recarray, h5py.Dataset, or dict
|
|
632
|
+
cmp_array: np.recarray, h5py.Dataset, np.ndarray, or dict
|
|
633
633
|
If a np.recarray or h5py.Dataset are provided, then they
|
|
634
634
|
are written as-is to the file. If a dictionary is provided,
|
|
635
635
|
then the dictionary is converted into a numpy recarray.
|
|
636
|
+
If a numpy array is provided, then the array is written
|
|
637
|
+
as a raw table (no column names) to the file.
|
|
638
|
+
h5_attrs: dict, optional
|
|
639
|
+
Attributes to store alongside the corresponding HDF5 dataset
|
|
636
640
|
"""
|
|
637
|
-
if
|
|
641
|
+
if h5_attrs is None:
|
|
642
|
+
h5_attrs = {}
|
|
643
|
+
|
|
644
|
+
if isinstance(cmp_array, np.recarray):
|
|
638
645
|
# A table is a compound array (np.recarray). If we are here,
|
|
639
|
-
# this means that the user passed an instance of np.recarray
|
|
640
|
-
|
|
646
|
+
# this means that the user passed an instance of np.recarray.
|
|
647
|
+
pass
|
|
648
|
+
elif isinstance(cmp_array, h5py.Dataset):
|
|
649
|
+
# An instance of h5py.Dataset (which we trust to be a proper
|
|
641
650
|
# compound dataset at this point). No additional steps needed.
|
|
651
|
+
h5_attrs.update(cmp_array.attrs)
|
|
652
|
+
pass
|
|
653
|
+
elif isinstance(cmp_array, np.ndarray):
|
|
654
|
+
# A numpy array was passed. This usually means we have something
|
|
655
|
+
# that we can look at, so we add image tags.
|
|
656
|
+
h5_attrs['CLASS'] = np.bytes_('IMAGE')
|
|
657
|
+
h5_attrs['IMAGE_VERSION'] = np.bytes_('1.2')
|
|
658
|
+
h5_attrs['IMAGE_SUBCLASS'] = np.bytes_('IMAGE_GRAYSCALE')
|
|
642
659
|
pass
|
|
643
660
|
elif isinstance(cmp_array, dict):
|
|
644
661
|
# The user passed a dict which we now have to convert to a
|
|
@@ -659,16 +676,18 @@ class RTDCWriter:
|
|
|
659
676
|
else:
|
|
660
677
|
raise NotImplementedError(
|
|
661
678
|
f"Cannot convert {type(cmp_array)} to table!")
|
|
679
|
+
|
|
680
|
+
# data
|
|
662
681
|
group = self.h5file.require_group("tables")
|
|
663
682
|
tab = group.create_dataset(
|
|
664
683
|
name,
|
|
665
684
|
data=cmp_array,
|
|
666
685
|
fletcher32=True,
|
|
667
686
|
**self.compression_kwargs)
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
687
|
+
|
|
688
|
+
# metadata
|
|
689
|
+
if h5_attrs:
|
|
690
|
+
tab.attrs.update(h5_attrs)
|
|
672
691
|
|
|
673
692
|
def version_brand(self, old_version=None, write_attribute=True):
|
|
674
693
|
"""Perform version branding
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
Metadata-Version: 2.
|
|
1
|
+
Metadata-Version: 2.2
|
|
2
2
|
Name: dclab
|
|
3
|
-
Version: 0.62.
|
|
3
|
+
Version: 0.62.11
|
|
4
4
|
Summary: Library for real-time deformability cytometry (RT-DC)
|
|
5
5
|
Author: Benedikt Hartmann, Eoghan O'Connell, Maik Herbig, Maximilian Schlögel, Nadia Sbaa, Paul Müller, Philipp Rosendahl, Raghava Alajangi
|
|
6
6
|
Maintainer-email: Paul Müller <dev@craban.de>
|
|
@@ -80,6 +80,43 @@ def test_repack_basin_internal(use_basins):
|
|
|
80
80
|
assert "userdef1" not in ds.features_basin
|
|
81
81
|
|
|
82
82
|
|
|
83
|
+
@pytest.mark.filterwarnings(
|
|
84
|
+
"ignore::dclab.rtdc_dataset.config.WrongConfigurationTypeWarning")
|
|
85
|
+
def test_repack_multiple_basins():
|
|
86
|
+
h5path = retrieve_data("fmt-hdf5_fl_wide-channel_2023.zip")
|
|
87
|
+
h5path_small = h5path.with_name("smaller.rtdc")
|
|
88
|
+
h5path_out = h5path.with_name("repacked.rtdc")
|
|
89
|
+
|
|
90
|
+
# Dataset creation
|
|
91
|
+
with h5py.File(h5path) as src, RTDCWriter(h5path_small) as hw:
|
|
92
|
+
# first, copy all the scalar features to the new file
|
|
93
|
+
rtdc_dataset.rtdc_copy(src_h5file=src,
|
|
94
|
+
dst_h5file=hw.h5file,
|
|
95
|
+
features="scalar")
|
|
96
|
+
hw.store_basin(basin_name="example basin",
|
|
97
|
+
basin_type="file",
|
|
98
|
+
basin_format="hdf5",
|
|
99
|
+
basin_locs=[h5path],
|
|
100
|
+
basin_descr="an example test basin",
|
|
101
|
+
)
|
|
102
|
+
|
|
103
|
+
hw.store_basin(basin_name="example basin",
|
|
104
|
+
basin_type="file",
|
|
105
|
+
basin_format="hdf5",
|
|
106
|
+
basin_locs=[h5path],
|
|
107
|
+
basin_descr="a different test basin",
|
|
108
|
+
)
|
|
109
|
+
|
|
110
|
+
assert len(hw.h5file["basins"].keys()) == 2
|
|
111
|
+
|
|
112
|
+
# repack the basin-based dataset
|
|
113
|
+
cli.repack(path_in=h5path_small,
|
|
114
|
+
path_out=h5path_out)
|
|
115
|
+
|
|
116
|
+
with new_dataset(h5path_out) as ds:
|
|
117
|
+
assert len(ds.basins) == 2
|
|
118
|
+
|
|
119
|
+
|
|
83
120
|
def test_repack_no_data_from_basins_written():
|
|
84
121
|
"""
|
|
85
122
|
When repacking a dataset, feature data from the basin should not be
|
|
@@ -203,6 +203,44 @@ def test_copy_basins_mapped():
|
|
|
203
203
|
assert is_properly_compressed(hc["events/basinmap0"])
|
|
204
204
|
|
|
205
205
|
|
|
206
|
+
def test_copy_basins_multiple():
|
|
207
|
+
path = retrieve_data("fmt-hdf5_image-bg_2020.zip")
|
|
208
|
+
path_copy = path.with_name("test_copy.rtdc")
|
|
209
|
+
|
|
210
|
+
# add log to source file
|
|
211
|
+
with RTDCWriter(path, mode="append") as hw:
|
|
212
|
+
hw.store_basin(
|
|
213
|
+
basin_type="file",
|
|
214
|
+
basin_format="hdf5",
|
|
215
|
+
basin_name="test_basin",
|
|
216
|
+
basin_locs=["does-not-exist-but-does-not-matter.rtdc"],
|
|
217
|
+
basin_map=np.arange(len(hw.h5file["events/deform"])),
|
|
218
|
+
basin_descr="A first basin",
|
|
219
|
+
verify=False
|
|
220
|
+
)
|
|
221
|
+
|
|
222
|
+
hw.store_basin(
|
|
223
|
+
basin_type="file",
|
|
224
|
+
basin_format="hdf5",
|
|
225
|
+
basin_name="test_basin",
|
|
226
|
+
basin_locs=["does-not-exist-but-does-not-matter.rtdc"],
|
|
227
|
+
basin_map=np.arange(len(hw.h5file["events/deform"])),
|
|
228
|
+
basin_descr="A second basin",
|
|
229
|
+
verify=False
|
|
230
|
+
)
|
|
231
|
+
|
|
232
|
+
assert len(hw.h5file["basins"]) == 2
|
|
233
|
+
|
|
234
|
+
# copy
|
|
235
|
+
with h5py.File(path) as h5, h5py.File(path_copy, "w") as hc:
|
|
236
|
+
rtdc_copy(src_h5file=h5,
|
|
237
|
+
dst_h5file=hc)
|
|
238
|
+
|
|
239
|
+
# Make sure this worked
|
|
240
|
+
with h5py.File(path_copy) as hc:
|
|
241
|
+
assert len(hc["basins"]) == 2
|
|
242
|
+
|
|
243
|
+
|
|
206
244
|
def test_copy_basins_no_basin():
|
|
207
245
|
path = retrieve_data("fmt-hdf5_image-bg_2020.zip")
|
|
208
246
|
path_copy = path.with_name("test_copy.rtdc")
|
|
@@ -419,6 +457,31 @@ def test_copy_tables():
|
|
|
419
457
|
np.pi, 2 * np.pi, 10))
|
|
420
458
|
|
|
421
459
|
|
|
460
|
+
def test_copy_tables_array_only():
|
|
461
|
+
path = retrieve_data("fmt-hdf5_image-bg_2020.zip")
|
|
462
|
+
path_copy = path.with_name("test_copy.rtdc")
|
|
463
|
+
|
|
464
|
+
# generate a table that consists of an array, not a dict-like object
|
|
465
|
+
tab_data = np.random.random((1000, 300))
|
|
466
|
+
|
|
467
|
+
# add table to source file
|
|
468
|
+
with h5py.File(path, "a") as h5:
|
|
469
|
+
h5tab = h5.require_group("tables")
|
|
470
|
+
h5tab.create_dataset(name="random_data",
|
|
471
|
+
data=tab_data)
|
|
472
|
+
assert not is_properly_compressed(h5["tables/random_data"])
|
|
473
|
+
|
|
474
|
+
# copy
|
|
475
|
+
with h5py.File(path) as h5, h5py.File(path_copy, "w") as hc:
|
|
476
|
+
rtdc_copy(src_h5file=h5,
|
|
477
|
+
dst_h5file=hc)
|
|
478
|
+
|
|
479
|
+
# Make sure this worked
|
|
480
|
+
with h5py.File(path_copy) as hc:
|
|
481
|
+
assert is_properly_compressed(hc["tables/random_data"])
|
|
482
|
+
assert np.all(tab_data == hc["tables/random_data"])
|
|
483
|
+
|
|
484
|
+
|
|
422
485
|
def test_copy_tables_hdf5_issue_3214():
|
|
423
486
|
"""Checks for a bug in HDF5
|
|
424
487
|
|
|
@@ -609,6 +609,27 @@ def test_hdf5_tables(tables):
|
|
|
609
609
|
assert "src_iratrax" not in h5.get("tables", {})
|
|
610
610
|
|
|
611
611
|
|
|
612
|
+
def test_hdf5_tables_array_only():
|
|
613
|
+
keys = ["area_um", "deform", "time", "frame", "index_online"]
|
|
614
|
+
ddict = example_data_dict(size=10, keys=keys)
|
|
615
|
+
ds1 = dclab.new_dataset(ddict)
|
|
616
|
+
ds1.config["experiment"]["sample"] = "test"
|
|
617
|
+
ds1.config["experiment"]["run index"] = 1
|
|
618
|
+
ds1.config["imaging"]["frame rate"] = 2000
|
|
619
|
+
|
|
620
|
+
# generate a table that consists of an array, not a dict-like object
|
|
621
|
+
tab_data = np.random.random((1000, 300))
|
|
622
|
+
ds1.tables["iratrax"] = tab_data
|
|
623
|
+
|
|
624
|
+
edest = pathlib.Path(tempfile.mkdtemp())
|
|
625
|
+
f1 = edest / "dclab_test_export_hdf5_1.rtdc"
|
|
626
|
+
ds1.export.hdf5(f1, keys, tables=True)
|
|
627
|
+
with h5py.File(f1, "r") as h5:
|
|
628
|
+
assert "src_iratrax" in h5.get("tables", {})
|
|
629
|
+
assert np.all(h5["tables"]["src_iratrax"] == tab_data)
|
|
630
|
+
assert h5["tables"]["src_iratrax"].attrs["CLASS"] == np.bytes_("IMAGE")
|
|
631
|
+
|
|
632
|
+
|
|
612
633
|
def test_hdf5_trace_from_tdms():
|
|
613
634
|
pytest.importorskip("nptdms")
|
|
614
635
|
ds = new_dataset(retrieve_data("fmt-tdms_2fl-no-image_2017.zip"))
|
|
@@ -410,7 +410,12 @@ def test_basin_key_reproducible():
|
|
|
410
410
|
with dclab.new_dataset(h5path_small_2) as ds:
|
|
411
411
|
assert len(ds.basins) == 1
|
|
412
412
|
# dclab 0.62.9
|
|
413
|
-
assert ds.basins[0].key
|
|
413
|
+
assert ds.basins[0].key in [
|
|
414
|
+
# posix linesep
|
|
415
|
+
"b8763fad05e17b58407875fe9c28d90b",
|
|
416
|
+
# win linesep
|
|
417
|
+
"a495fd2d495e0d991f3a4a313ec3a3fc",
|
|
418
|
+
]
|
|
414
419
|
|
|
415
420
|
|
|
416
421
|
def test_basin_sorting_basic():
|
|
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
|
|
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
|