dclab 0.64.1__tar.gz → 0.64.3__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.64.1 → dclab-0.64.3}/CHANGELOG +10 -0
- {dclab-0.64.1 → dclab-0.64.3}/PKG-INFO +1 -1
- {dclab-0.64.1 → dclab-0.64.3}/dclab/_version.py +2 -2
- {dclab-0.64.1 → dclab-0.64.3}/dclab/definitions/feat_logic.py +27 -28
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/core.py +3 -3
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/feat_basin.py +27 -15
- {dclab-0.64.1 → dclab-0.64.3}/dclab.egg-info/PKG-INFO +1 -1
- {dclab-0.64.1 → dclab-0.64.3}/dclab.egg-info/SOURCES.txt +2 -1
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_basins/index.rst +1 -1
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_code_reference.rst +2 -2
- dclab-0.64.3/tests/test_dfn_feat.py +27 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_feat_basin.py +42 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_http_basin.py +1 -1
- {dclab-0.64.1 → dclab-0.64.3}/.gitignore +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/.readthedocs.yml +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/LICENSE +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/MANIFEST.in +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/README.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/cached.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/cli/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/cli/common.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/cli/task_compress.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/cli/task_condense.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/cli/task_join.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/cli/task_repack.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/cli/task_split.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/cli/task_tdms2rtdc.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/cli/task_verify_dataset.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/definitions/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/definitions/feat_const.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/definitions/meta_const.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/definitions/meta_logic.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/definitions/meta_parse.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/downsampling.pyx +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/packaging/LICENSE +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/packaging/LICENSE.APACHE +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/packaging/LICENSE.BSD +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/packaging/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/packaging/_structures.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/packaging/version.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/skimage/LICENSE +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/skimage/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/skimage/_find_contours.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/skimage/_find_contours_cy.pyx +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/skimage/_pnpoly.pyx +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/skimage/_shared/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/skimage/_shared/geometry.pxd +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/skimage/_shared/geometry.pyx +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/skimage/measure.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/skimage/pnpoly.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/statsmodels/LICENSE +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/statsmodels/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/statsmodels/nonparametric/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/statsmodels/nonparametric/_kernel_base.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/statsmodels/nonparametric/kernel_density.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/external/statsmodels/nonparametric/kernels.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/bright.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/bright_bc.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/bright_perc.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/contour.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/emodulus/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/emodulus/load.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/emodulus/lut_HE-2D-FEM-22.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/emodulus/lut_HE-3D-FEM-22.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/emodulus/lut_LE-2D-FEM-19.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/emodulus/pxcorr.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/emodulus/scale_linear.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/emodulus/viscosity.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/fl_crosstalk.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/inert_ratio.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/features/volume.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/http_utils.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/isoelastics/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/isoelastics/iso_HE-2D-FEM-22-area_um-deform.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/isoelastics/iso_HE-2D-FEM-22-volume-deform.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/isoelastics/iso_HE-3D-FEM-22-area_um-deform.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/isoelastics/iso_HE-3D-FEM-22-volume-deform.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/isoelastics/iso_LE-2D-FEM-19-area_um-deform.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/isoelastics/iso_LE-2D-FEM-19-volume-deform.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/isoelastics/iso_LE-2D-ana-18-area_um-deform.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/kde/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/kde/base.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/kde/contours.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/kde/methods.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/kde_contours.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/kde_methods.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/lme4/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/lme4/lme4_template.R +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/lme4/rsetup.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/lme4/wrapr.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/polygon_filter.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/check.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/config.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/copier.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/export.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/feat_anc_core/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/feat_anc_core/af_basic.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/feat_anc_core/af_emodulus.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/feat_anc_core/af_fl_max_ctc.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/feat_anc_core/af_image_contour.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/feat_anc_core/af_ml_class.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/feat_anc_core/ancillary_feature.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/feat_anc_ml/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/feat_anc_plugin/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/feat_anc_plugin/plugin_feature.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/feat_temp.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/filter.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_dcor/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_dcor/access_token.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_dcor/api.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_dcor/base.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_dcor/basin.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_dcor/logs.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_dcor/tables.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_dict.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_hdf5/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_hdf5/base.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_hdf5/basin.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_hdf5/events.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_hdf5/feat_defect.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_hdf5/logs.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_hdf5/tables.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_hierarchy/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_hierarchy/base.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_hierarchy/events.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_hierarchy/hfilter.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_hierarchy/mapper.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_http.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_s3.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_tdms/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_tdms/event_contour.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_tdms/event_image.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_tdms/event_mask.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_tdms/event_trace.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_tdms/exc.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/fmt_tdms/naming.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/load.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/meta_table.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/rtdc_dataset/writer.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/statistics.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/util.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab/warn.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab.egg-info/dependency_links.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab.egg-info/entry_points.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab.egg-info/requires.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/dclab.egg-info/top_level.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/.gitignore +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/README.md +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/conf.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/data/example.poly +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/data/example.rtdc +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/data/example_plugin.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/data/example_plugin_metadata.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/data/example_traces.rtdc +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/data/example_video.rtdc +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/dclab.bib +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/extensions/dclab_defs.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/extensions/fancy_include.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/extensions/github_changelog.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/extensions/simple_argparse.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/figures/DCOR_API_Token_website.png +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/index.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/logo/dc_logo.png +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/logo/dc_logo.svg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/logo/dclab.png +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/logo/dclab.svg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/logo/dclab_large_white.png +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/logo/dclab_large_white.svg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/logo/favicon.ico +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/logo/favicon.svg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/requirements.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_advanced_usage.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_basins/basin_example_workflows.svg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_dc_io.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_dc_usage.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_dcor.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_emodulus/figures_emodulus/.gitignore +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_HE-2D-FEM-22.png +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_HE-3D-FEM-22.png +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_LE-2D-FEM-19.png +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_emodulus/figures_emodulus/plot_emodulus_lut.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_emodulus/figures_emodulus/requirements.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_emodulus/figures_viscosity/LICENSE +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_emodulus/figures_viscosity/buyukurganci_22_fig3a.jpg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_emodulus/figures_viscosity/buyukurganci_22_fig3a.pdf +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_emodulus/index.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_feat_plugin.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_feat_temp.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_fluorescence.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_lme4.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_notation.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_s3.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_av_scatter.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_changelog.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_cli.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_examples.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_getting_started.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/docs/sec_z_bib.rst +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/emodulus_dcor.jpg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/emodulus_dcor.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/generate_example_images.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/isoelastics.jpg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/isoelastics.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/isoelastics_custom.jpg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/isoelastics_custom.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/lme4_glmer_diff.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/lme4_lmer.jpg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/lme4_lmer.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/overview_plot.jpg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/overview_plot.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/plugin_example.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/plugin_usage.jpg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/plugin_usage.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/viscosity_models.jpg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/examples/viscosity_models.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/pyproject.toml +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/.gitignore +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/README.md +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/fem2iso_volume.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/fem2lutiso_std.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/fem2rtdc.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/lut_recipes/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/lut_recipes/hooks/LUT_analytical_linear-elastic_2Daxis.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/lut_recipes/hooks/README.md +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/lut_recipes/hooks/__init__.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/lut_recipes/hooks/common.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/lut_recipes/hooks/he_2d_fem_22.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/lut_recipes/hooks/he_3d_fem_22.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/lut_recipes/hooks/le_2d_fem_19.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/lut_recipes/lut_processor.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/pixelation_correction.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/pixelation_correction_2020.png +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/pixelation_correction_2022.png +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/scripts/requirements.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/setup.cfg +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/setup.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/README.md +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/conftest.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/README.md +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/example_access_token.dcor-access +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/example_isoelastics.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/feat_anc_plugin_creative.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-hdf5_fl-no-contour_2019.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-hdf5_fl_2017.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-hdf5_fl_2018.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-hdf5_fl_wide-channel_2023.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-hdf5_image-bg_2020.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-hdf5_image-mask-blood_2021.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-hdf5_mask-contour_2018.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-hdf5_polygon_gate_2021.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-hdf5_raw-cytoshot-exported.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-hdf5_segfault-compound_2023.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-hdf5_wide-channel_2023.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-tdms_2fl-no-image_2017.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-tdms_fl-image-bright_2017.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-tdms_fl-image-large-fov_2017.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-tdms_fl-image_2016.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-tdms_fl_2015.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-tdms_minimal_2016.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/data/fmt-tdms_shapein-2.0.1-no-image_2017.zip +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/helper_methods.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/requirements.txt +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_cache.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_cli.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_cli_argparse.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_cli_compress.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_cli_condense.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_cli_join.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_cli_repack.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_cli_split.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_config_value_mapping.py +0 -0
- /dclab-0.64.1/tests/test_dfn.py → /dclab-0.64.3/tests/test_dfn_meta.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_downsampling.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_feat_bright.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_feat_bright_bc.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_feat_bright_perc.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_feat_contour.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_feat_emodulus.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_feat_emodulus_viscosity.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_feat_fl_crosstalk.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_feat_inert_ratio.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_feat_volume.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_http_utils.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_isoelastics.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_kde.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_kde_contours.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_kde_deprecations.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_kde_methods.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_lme4.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_lut_he_2d_fem_22.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_lut_he_3d_fem_22.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_polygon_contains.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_polygon_filter.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_check_dataset.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_config.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_copier.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_core_feat.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_downsampling.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_export.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_export_avi.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_export_fcs.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_export_hdf5.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_export_tsv.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_feat_anc_core.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_feat_anc_ml.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_feat_anc_plugin.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_feat_basin_mapped.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_feat_basin_perishable.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_feat_temp.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_filter.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_dcor.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_dcor_access_token.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_dcor_basin.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_dcor_private.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_dict.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_hdf5.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_hdf5_basins.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_hdf5_basins_internal.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_hierarchy.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_http.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_s3.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_s3_basin.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_fmt_tdms.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_hash.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_kde.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_limit_events.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_rtdc_writer.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_statistics.py +0 -0
- {dclab-0.64.1 → dclab-0.64.3}/tests/test_util.py +0 -0
|
@@ -1,3 +1,13 @@
|
|
|
1
|
+
0.64.3
|
|
2
|
+
- ci: use GitHub windows-latest runner for building wheel
|
|
3
|
+
0.64.2
|
|
4
|
+
- fix: string comparison TypeError when verifying basins, in niche cases
|
|
5
|
+
when basin's run identifier was not specified or could not be computed
|
|
6
|
+
- enh: raise NotImplementedError when subsetting basin contour data
|
|
7
|
+
- enh: make measurement identifier computation robust against empty strings
|
|
8
|
+
- ref: remove zombie code for fetching ML model label from model instance
|
|
9
|
+
- ref: minor cleanup in feature definitions
|
|
10
|
+
- docs: minor cleanup
|
|
1
11
|
0.64.1
|
|
2
12
|
- enh: introduce `KernelDensityEstimator.get_at`
|
|
3
13
|
- enh: add 10th, 25th, 75th, and 90th percentile statistics methods
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dclab
|
|
3
|
-
Version: 0.64.
|
|
3
|
+
Version: 0.64.3
|
|
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>
|
|
@@ -1,6 +1,11 @@
|
|
|
1
|
+
import re
|
|
2
|
+
|
|
1
3
|
from . import feat_const
|
|
2
4
|
|
|
3
5
|
|
|
6
|
+
ML_SCORE_REGEX = re.compile(r"^ml_score_[a-z0-9]{3}$")
|
|
7
|
+
|
|
8
|
+
|
|
4
9
|
def check_feature_shape(name, data):
|
|
5
10
|
"""Check if (non)-scalar feature matches with its data's dimensionality
|
|
6
11
|
|
|
@@ -17,11 +22,15 @@ def check_feature_shape(name, data):
|
|
|
17
22
|
If the data's shape does not match its scalar description
|
|
18
23
|
"""
|
|
19
24
|
if len(data.shape) == 1 and not scalar_feature_exists(name):
|
|
20
|
-
raise ValueError(
|
|
21
|
-
|
|
25
|
+
raise ValueError(
|
|
26
|
+
f"Feature '{name}' is not a scalar feature, but "
|
|
27
|
+
"a 1D array was given for `data`!"
|
|
28
|
+
)
|
|
22
29
|
elif len(data.shape) != 1 and scalar_feature_exists(name):
|
|
23
|
-
raise ValueError(
|
|
24
|
-
|
|
30
|
+
raise ValueError(
|
|
31
|
+
f"Feature '{name}' is a scalar feature, but the "
|
|
32
|
+
"`data` array is not 1D!"
|
|
33
|
+
)
|
|
25
34
|
|
|
26
35
|
|
|
27
36
|
def feature_exists(name, scalar_only=False):
|
|
@@ -56,15 +65,9 @@ def feature_exists(name, scalar_only=False):
|
|
|
56
65
|
elif not scalar_only and name in feat_const.feature_names:
|
|
57
66
|
# non-scalar feature
|
|
58
67
|
valid = True
|
|
59
|
-
|
|
60
|
-
#
|
|
61
|
-
|
|
62
|
-
if (name.startswith("ml_score_")
|
|
63
|
-
and len(name) == len("ml_score_???")
|
|
64
|
-
and name[-3] in valid_chars
|
|
65
|
-
and name[-2] in valid_chars
|
|
66
|
-
and name[-1] in valid_chars):
|
|
67
|
-
valid = True
|
|
68
|
+
elif ML_SCORE_REGEX.match(name):
|
|
69
|
+
# machine-learning score feature ml_score_???
|
|
70
|
+
valid = True
|
|
68
71
|
return valid
|
|
69
72
|
|
|
70
73
|
|
|
@@ -93,8 +96,10 @@ def feature_register(name, label=None, is_scalar=True):
|
|
|
93
96
|
allowed_chars = "abcdefghijklmnopqrstuvwxyz_1234567890"
|
|
94
97
|
feat = "".join([f for f in name if f in allowed_chars])
|
|
95
98
|
if feat != name:
|
|
96
|
-
raise ValueError(
|
|
97
|
-
|
|
99
|
+
raise ValueError(
|
|
100
|
+
"`feature` must only contain lower-case characters, "
|
|
101
|
+
f"digits, and underscores; got '{name}'!"
|
|
102
|
+
)
|
|
98
103
|
if label is None:
|
|
99
104
|
label = f"User-defined feature {name}"
|
|
100
105
|
if feature_exists(name):
|
|
@@ -156,22 +161,16 @@ def get_feature_label(name, rtdc_ds=None, with_unit=True):
|
|
|
156
161
|
TODO: extract feature label from ancillary information when an rtdc_ds is
|
|
157
162
|
given.
|
|
158
163
|
"""
|
|
159
|
-
# TODO: Is there another way of avoiding this circular import?
|
|
160
|
-
from ..rtdc_dataset.feat_anc_core.ancillary_feature import AncillaryFeature
|
|
161
|
-
assert feature_exists(name)
|
|
162
164
|
if name in feat_const.feature_name2label:
|
|
163
165
|
label = feat_const.feature_name2label[name]
|
|
166
|
+
elif ML_SCORE_REGEX.match(name):
|
|
167
|
+
# use a generic name for machine-learning features
|
|
168
|
+
label = f"ML score {name[-3:].upper()}"
|
|
164
169
|
else:
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
168
|
-
|
|
169
|
-
labelid = af.data.outputs.index(name)
|
|
170
|
-
label = af.data.output_labels[labelid]
|
|
171
|
-
break
|
|
172
|
-
else:
|
|
173
|
-
# If that did not work, use a generic name.
|
|
174
|
-
label = "ML score {}".format(name[-3:].upper())
|
|
170
|
+
exists = feature_exists(name)
|
|
171
|
+
msg = f"Could not find label for '{name}'"
|
|
172
|
+
msg += " (feature does not exist)" if not exists else ""
|
|
173
|
+
raise ValueError(msg)
|
|
175
174
|
if not with_unit:
|
|
176
175
|
if label.endswith("]") and label.count("["):
|
|
177
176
|
label = label.rsplit("[", 1)[0].strip()
|
|
@@ -835,9 +835,9 @@ class RTDCBase(abc.ABC):
|
|
|
835
835
|
identifier = self.config.get("experiment", {}).get("run identifier",
|
|
836
836
|
None)
|
|
837
837
|
if identifier is None:
|
|
838
|
-
time = self.config.get("experiment", {}).get("time", None)
|
|
839
|
-
date = self.config.get("experiment", {}).get("date", None)
|
|
840
|
-
sid = self.config.get("setup", {}).get("identifier", None)
|
|
838
|
+
time = self.config.get("experiment", {}).get("time", None) or None
|
|
839
|
+
date = self.config.get("experiment", {}).get("date", None) or None
|
|
840
|
+
sid = self.config.get("setup", {}).get("identifier", None) or None
|
|
841
841
|
if None not in [time, date, sid]:
|
|
842
842
|
# only compute an identifier if all of the above are defined.
|
|
843
843
|
hasher = hashlib.md5(f"{time}_{date}_{sid}".encode("utf-8"))
|
|
@@ -458,22 +458,30 @@ class Basin(abc.ABC):
|
|
|
458
458
|
if not self._measurement_identifier_verified:
|
|
459
459
|
if self.measurement_identifier is None:
|
|
460
460
|
# No measurement identifier was presented by the
|
|
461
|
-
# referencing dataset.
|
|
461
|
+
# referencing dataset. We are in the dark.
|
|
462
|
+
# Don't perform any checks.
|
|
462
463
|
self._measurement_identifier_verified = True
|
|
463
464
|
else:
|
|
464
|
-
|
|
465
|
-
|
|
466
|
-
|
|
467
|
-
|
|
465
|
+
# This is the measurement identifier of the basin.
|
|
466
|
+
basin_identifier = self.get_measurement_identifier()
|
|
467
|
+
if basin_identifier is None:
|
|
468
|
+
# Again, we are in the dark, because the basin dataset
|
|
469
|
+
# does not have an identifier. This is an undesirable
|
|
470
|
+
# situation, but there is nothing we can do about it.
|
|
471
|
+
self._measurement_identifier_verified = True
|
|
468
472
|
else:
|
|
469
|
-
|
|
470
|
-
|
|
471
|
-
|
|
472
|
-
|
|
473
|
-
|
|
474
|
-
|
|
475
|
-
|
|
476
|
-
|
|
473
|
+
if self.mapping == "same":
|
|
474
|
+
# When we have identical mapping, then the
|
|
475
|
+
# measurement identifier has to match exactly.
|
|
476
|
+
verifier = str.__eq__
|
|
477
|
+
else:
|
|
478
|
+
# When we have non-identical mapping (e.g. exported
|
|
479
|
+
# data), then the measurement identifier has to
|
|
480
|
+
# partially match.
|
|
481
|
+
verifier = str.startswith
|
|
482
|
+
self._measurement_identifier_verified = verifier(
|
|
483
|
+
self.measurement_identifier, basin_identifier)
|
|
484
|
+
|
|
477
485
|
check_rid = self._measurement_identifier_verified
|
|
478
486
|
else:
|
|
479
487
|
check_rid = True
|
|
@@ -538,8 +546,12 @@ class BasinProxy:
|
|
|
538
546
|
|
|
539
547
|
def __getitem__(self, feat):
|
|
540
548
|
if feat not in self._features:
|
|
541
|
-
|
|
542
|
-
|
|
549
|
+
if feat == "contour":
|
|
550
|
+
raise NotImplementedError("Feature 'contour' cannot be "
|
|
551
|
+
"handled by BasinProxy.")
|
|
552
|
+
else:
|
|
553
|
+
feat_obj = BasinProxyFeature(feat_obj=self.ds[feat],
|
|
554
|
+
basinmap=self.basinmap)
|
|
543
555
|
self._features[feat] = feat_obj
|
|
544
556
|
return self._features[feat]
|
|
545
557
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dclab
|
|
3
|
-
Version: 0.64.
|
|
3
|
+
Version: 0.64.3
|
|
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>
|
|
@@ -246,7 +246,8 @@ tests/test_cli_join.py
|
|
|
246
246
|
tests/test_cli_repack.py
|
|
247
247
|
tests/test_cli_split.py
|
|
248
248
|
tests/test_config_value_mapping.py
|
|
249
|
-
tests/
|
|
249
|
+
tests/test_dfn_feat.py
|
|
250
|
+
tests/test_dfn_meta.py
|
|
250
251
|
tests/test_downsampling.py
|
|
251
252
|
tests/test_feat_bright.py
|
|
252
253
|
tests/test_feat_bright_bc.py
|
|
@@ -432,7 +432,7 @@ are a few things to notice:
|
|
|
432
432
|
This relative path makes it possible to copy-paste these two files *together* to
|
|
433
433
|
other locations. You will always be able to open the output file and see the
|
|
434
434
|
basin features defined in the input file. Internally, dclab also checks
|
|
435
|
-
the :
|
|
435
|
+
the :meth:`run identifier <dclab.rtdc_dataset.RTDCBase.get_measurement_identifier>`
|
|
436
436
|
of the output file against that of the input file to avoid loading basin
|
|
437
437
|
features from the wrong file.
|
|
438
438
|
|
|
@@ -304,8 +304,8 @@ isoelastics
|
|
|
304
304
|
|
|
305
305
|
.. _sec_ref_kde:
|
|
306
306
|
|
|
307
|
-
|
|
308
|
-
|
|
307
|
+
Kernel Density Estimators (KDEs)
|
|
308
|
+
--------------------------------
|
|
309
309
|
.. autoclass:: dclab.kde.KernelDensityEstimator
|
|
310
310
|
:members:
|
|
311
311
|
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
import pytest
|
|
2
|
+
|
|
3
|
+
import dclab
|
|
4
|
+
from dclab.definitions import get_feature_label
|
|
5
|
+
|
|
6
|
+
|
|
7
|
+
@pytest.mark.parametrize("name,label",
|
|
8
|
+
[
|
|
9
|
+
["ml_score_rbc", "ML score RBC"],
|
|
10
|
+
["deform", "Deformation"],
|
|
11
|
+
["area_um", "Area [µm²]"],
|
|
12
|
+
])
|
|
13
|
+
def test_get_feature_label_basic(name, label):
|
|
14
|
+
assert get_feature_label(name) == label
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
def test_get_feature_label_temporary():
|
|
18
|
+
name = "unknown"
|
|
19
|
+
label = "User-defined feature unknown"
|
|
20
|
+
dclab.register_temporary_feature(name)
|
|
21
|
+
assert get_feature_label(name) == label
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def test_get_feature_label_invalid():
|
|
25
|
+
name = "unknown2"
|
|
26
|
+
with pytest.raises(ValueError, match="unknown2"):
|
|
27
|
+
get_feature_label(name)
|
|
@@ -418,6 +418,48 @@ def test_basin_key_reproducible():
|
|
|
418
418
|
]
|
|
419
419
|
|
|
420
420
|
|
|
421
|
+
def test_basin_run_identifier_unknown():
|
|
422
|
+
"""
|
|
423
|
+
When the run identifier of a basin is unknown, the basin
|
|
424
|
+
should still be accepted.
|
|
425
|
+
"""
|
|
426
|
+
h5path = retrieve_data("fmt-hdf5_fl_wide-channel_2023.zip")
|
|
427
|
+
with h5py.File(h5path, "a") as h5:
|
|
428
|
+
# remove run identifier and metadata from which run identifier
|
|
429
|
+
# can be computed.
|
|
430
|
+
for attr in [
|
|
431
|
+
"experiment:run identifier",
|
|
432
|
+
"experiment:time",
|
|
433
|
+
"experiment:date",
|
|
434
|
+
"setup:identifier",
|
|
435
|
+
]:
|
|
436
|
+
if attr in h5.attrs:
|
|
437
|
+
del h5.attrs[attr]
|
|
438
|
+
assert attr not in h5.attrs
|
|
439
|
+
|
|
440
|
+
export_same = h5path.with_name("same.rtdc")
|
|
441
|
+
export_subs = h5path.with_name("subs.rtdc")
|
|
442
|
+
|
|
443
|
+
# Check whether that worked and export a subset with basins.
|
|
444
|
+
with dclab.new_dataset(h5path) as ds:
|
|
445
|
+
assert ds.get_measurement_identifier() is None
|
|
446
|
+
# export without filters
|
|
447
|
+
ds.export.hdf5(export_same, features=["deform"], basins=True)
|
|
448
|
+
# export with filters
|
|
449
|
+
ds.filter.manual[::2] = False
|
|
450
|
+
ds.apply_filter()
|
|
451
|
+
ds.export.hdf5(export_subs, features=["deform"], basins=True)
|
|
452
|
+
|
|
453
|
+
# Try to open the exported datasets (this raised an error before)
|
|
454
|
+
with dclab.new_dataset(export_same) as ds:
|
|
455
|
+
assert "image" in ds
|
|
456
|
+
assert ds["image"][0][0, 0] == 124
|
|
457
|
+
|
|
458
|
+
with dclab.new_dataset(export_subs) as ds:
|
|
459
|
+
assert "image" in ds
|
|
460
|
+
assert ds["image"][0][0, 0] == 126
|
|
461
|
+
|
|
462
|
+
|
|
421
463
|
def test_basin_sorting_basic():
|
|
422
464
|
bnlist = [
|
|
423
465
|
{"type": "remote", "format": "dcor", "ident": 0},
|
|
@@ -258,7 +258,7 @@ def test_trace_availability_invalid(tmp_path):
|
|
|
258
258
|
bdat = {
|
|
259
259
|
"type": "remote",
|
|
260
260
|
"format": "http",
|
|
261
|
-
"urls": ["https://dcor.mpl.mpg.de/api/3/action/
|
|
261
|
+
"urls": ["https://dcor.mpl.mpg.de/api/3/action/status_show"],
|
|
262
262
|
"features": ["trace"],
|
|
263
263
|
}
|
|
264
264
|
blines = json.dumps(bdat, indent=2).split("\n")
|
|
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
|
|
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
|