dclab 0.62.17__tar.gz → 0.63.0__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.17 → dclab-0.63.0}/CHANGELOG +2 -0
- {dclab-0.62.17 → dclab-0.63.0}/PKG-INFO +1 -1
- {dclab-0.62.17 → dclab-0.63.0}/dclab/_version.py +2 -2
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/export.py +79 -8
- {dclab-0.62.17 → dclab-0.63.0}/dclab.egg-info/PKG-INFO +1 -1
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_export_avi.py +39 -17
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_export_fcs.py +17 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_export_hdf5.py +58 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_export_tsv.py +18 -0
- {dclab-0.62.17 → dclab-0.63.0}/.gitignore +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/.readthedocs.yml +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/LICENSE +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/MANIFEST.in +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/README.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/cached.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/cli/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/cli/common.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/cli/task_compress.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/cli/task_condense.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/cli/task_join.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/cli/task_repack.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/cli/task_split.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/cli/task_tdms2rtdc.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/cli/task_verify_dataset.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/definitions/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/definitions/feat_const.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/definitions/feat_logic.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/definitions/meta_const.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/definitions/meta_logic.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/definitions/meta_parse.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/downsampling.pyx +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/packaging/LICENSE +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/packaging/LICENSE.APACHE +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/packaging/LICENSE.BSD +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/packaging/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/packaging/_structures.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/packaging/version.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/skimage/LICENSE +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/skimage/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/skimage/_find_contours.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/skimage/_find_contours_cy.pyx +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/skimage/_pnpoly.pyx +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/skimage/_shared/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/skimage/_shared/geometry.pxd +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/skimage/_shared/geometry.pyx +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/skimage/measure.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/skimage/pnpoly.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/statsmodels/LICENSE +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/statsmodels/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/statsmodels/nonparametric/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/statsmodels/nonparametric/_kernel_base.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/statsmodels/nonparametric/kernel_density.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/external/statsmodels/nonparametric/kernels.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/bright.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/bright_bc.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/bright_perc.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/contour.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/emodulus/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/emodulus/load.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/emodulus/lut_HE-2D-FEM-22.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/emodulus/lut_HE-3D-FEM-22.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/emodulus/lut_LE-2D-FEM-19.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/emodulus/pxcorr.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/emodulus/scale_linear.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/emodulus/viscosity.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/fl_crosstalk.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/inert_ratio.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/features/volume.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/http_utils.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/isoelastics/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/isoelastics/iso_HE-2D-FEM-22-area_um-deform.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/isoelastics/iso_HE-2D-FEM-22-volume-deform.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/isoelastics/iso_HE-3D-FEM-22-area_um-deform.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/isoelastics/iso_HE-3D-FEM-22-volume-deform.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/isoelastics/iso_LE-2D-FEM-19-area_um-deform.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/isoelastics/iso_LE-2D-FEM-19-volume-deform.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/isoelastics/iso_LE-2D-ana-18-area_um-deform.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/kde/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/kde/base.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/kde/contours.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/kde/methods.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/kde_contours.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/kde_methods.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/lme4/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/lme4/lme4_template.R +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/lme4/rsetup.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/lme4/wrapr.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/polygon_filter.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/check.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/config.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/copier.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/core.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/feat_anc_core/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/feat_anc_core/af_basic.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/feat_anc_core/af_emodulus.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/feat_anc_core/af_fl_max_ctc.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/feat_anc_core/af_image_contour.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/feat_anc_core/af_ml_class.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/feat_anc_core/ancillary_feature.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/feat_anc_ml/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/feat_anc_plugin/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/feat_anc_plugin/plugin_feature.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/feat_basin.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/feat_temp.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/filter.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_dcor/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_dcor/access_token.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_dcor/api.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_dcor/base.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_dcor/basin.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_dcor/logs.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_dcor/tables.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_dict.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_hdf5/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_hdf5/base.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_hdf5/basin.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_hdf5/events.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_hdf5/feat_defect.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_hdf5/logs.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_hdf5/tables.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_hierarchy/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_hierarchy/base.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_hierarchy/events.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_hierarchy/hfilter.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_hierarchy/mapper.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_http.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_s3.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_tdms/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_tdms/event_contour.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_tdms/event_image.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_tdms/event_mask.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_tdms/event_trace.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_tdms/exc.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/fmt_tdms/naming.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/load.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/meta_table.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/rtdc_dataset/writer.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/statistics.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/util.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab/warn.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab.egg-info/SOURCES.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab.egg-info/dependency_links.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab.egg-info/entry_points.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab.egg-info/requires.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/dclab.egg-info/top_level.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/.gitignore +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/README.md +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/conf.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/data/example.poly +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/data/example.rtdc +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/data/example_plugin.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/data/example_plugin_metadata.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/data/example_traces.rtdc +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/data/example_video.rtdc +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/dclab.bib +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/extensions/dclab_defs.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/extensions/fancy_include.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/extensions/github_changelog.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/extensions/simple_argparse.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/figures/DCOR_API_Token_website.png +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/index.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/logo/dc_logo.png +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/logo/dc_logo.svg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/logo/dclab.png +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/logo/dclab.svg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/logo/dclab_large_white.png +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/logo/dclab_large_white.svg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/logo/favicon.ico +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/logo/favicon.svg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/requirements.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_advanced_usage.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_basins/basin_example_workflows.svg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_basins/index.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_dc_io.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_dc_usage.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_dcor.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_emodulus/figures_emodulus/.gitignore +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_HE-2D-FEM-22.png +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_HE-3D-FEM-22.png +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_LE-2D-FEM-19.png +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_emodulus/figures_emodulus/plot_emodulus_lut.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_emodulus/figures_emodulus/requirements.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_emodulus/figures_viscosity/LICENSE +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_emodulus/figures_viscosity/buyukurganci_22_fig3a.jpg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_emodulus/figures_viscosity/buyukurganci_22_fig3a.pdf +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_emodulus/index.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_feat_plugin.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_feat_temp.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_fluorescence.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_lme4.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_notation.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_s3.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_av_scatter.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_changelog.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_cli.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_code_reference.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_examples.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_getting_started.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/docs/sec_z_bib.rst +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/emodulus_dcor.jpg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/emodulus_dcor.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/generate_example_images.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/isoelastics.jpg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/isoelastics.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/isoelastics_custom.jpg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/isoelastics_custom.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/lme4_glmer_diff.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/lme4_lmer.jpg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/lme4_lmer.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/overview_plot.jpg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/overview_plot.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/plugin_example.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/plugin_usage.jpg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/plugin_usage.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/viscosity_models.jpg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/examples/viscosity_models.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/pyproject.toml +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/.gitignore +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/README.md +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/fem2iso_volume.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/fem2lutiso_std.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/fem2rtdc.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/lut_recipes/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/lut_recipes/hooks/LUT_analytical_linear-elastic_2Daxis.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/lut_recipes/hooks/README.md +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/lut_recipes/hooks/__init__.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/lut_recipes/hooks/common.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/lut_recipes/hooks/he_2d_fem_22.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/lut_recipes/hooks/he_3d_fem_22.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/lut_recipes/hooks/le_2d_fem_19.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/lut_recipes/lut_processor.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/pixelation_correction.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/pixelation_correction_2020.png +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/pixelation_correction_2022.png +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/scripts/requirements.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/setup.cfg +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/setup.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/README.md +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/conftest.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/README.md +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/example_access_token.dcor-access +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/example_isoelastics.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/feat_anc_plugin_creative.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-hdf5_fl-no-contour_2019.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-hdf5_fl_2017.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-hdf5_fl_2018.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-hdf5_fl_wide-channel_2023.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-hdf5_image-bg_2020.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-hdf5_image-mask-blood_2021.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-hdf5_mask-contour_2018.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-hdf5_polygon_gate_2021.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-hdf5_raw-cytoshot-exported.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-hdf5_segfault-compound_2023.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-hdf5_wide-channel_2023.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-tdms_2fl-no-image_2017.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-tdms_fl-image-bright_2017.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-tdms_fl-image-large-fov_2017.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-tdms_fl-image_2016.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-tdms_fl_2015.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-tdms_minimal_2016.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/data/fmt-tdms_shapein-2.0.1-no-image_2017.zip +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/helper_methods.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/requirements.txt +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_cache.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_cli.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_cli_argparse.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_cli_compress.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_cli_condense.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_cli_join.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_cli_repack.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_cli_split.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_config_value_mapping.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_dfn.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_downsampling.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_feat_bright.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_feat_bright_bc.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_feat_bright_perc.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_feat_contour.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_feat_emodulus.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_feat_emodulus_viscosity.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_feat_fl_crosstalk.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_feat_inert_ratio.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_feat_volume.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_http_utils.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_isoelastics.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_kde_contours.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_kde_deprecations.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_kde_methods.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_lme4.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_lut_he_2d_fem_22.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_lut_he_3d_fem_22.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_polygon_contains.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_polygon_filter.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_check_dataset.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_config.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_copier.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_core_feat.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_downsampling.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_export.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_feat_anc_core.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_feat_anc_ml.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_feat_anc_plugin.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_feat_basin.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_feat_basin_mapped.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_feat_temp.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_filter.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_fmt_dcor.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_fmt_dcor_access_token.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_fmt_dcor_basin.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_fmt_dict.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_fmt_hdf5.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_fmt_hdf5_basins.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_fmt_hdf5_basins_internal.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_fmt_hierarchy.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_fmt_http.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_fmt_http_basin.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_fmt_s3.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_fmt_s3_basin.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_fmt_tdms.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_hash.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_kde.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_limit_events.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_rtdc_writer.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_statistics.py +0 -0
- {dclab-0.62.17 → dclab-0.63.0}/tests/test_util.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dclab
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.63.0
|
|
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>
|
|
@@ -51,6 +51,7 @@ class Export(object):
|
|
|
51
51
|
pixel_format: str = "yuv420p",
|
|
52
52
|
codec: str = "rawvideo",
|
|
53
53
|
codec_options: dict[str, str] = None,
|
|
54
|
+
progress_callback: callable = None,
|
|
54
55
|
):
|
|
55
56
|
"""Exports filtered event images to a video file
|
|
56
57
|
|
|
@@ -72,6 +73,10 @@ class Export(object):
|
|
|
72
73
|
codec_options:
|
|
73
74
|
Additional arguments to give to the codec using ffmpeg,
|
|
74
75
|
e.g. `{'preset': 'slow', 'crf': '0'}` for "libx264" codec.
|
|
76
|
+
progress_callback: callable
|
|
77
|
+
Function that takes at least two arguments: float between 0 and
|
|
78
|
+
1 for monitoring progress and a string describing what is being
|
|
79
|
+
done.
|
|
75
80
|
|
|
76
81
|
Notes
|
|
77
82
|
-----
|
|
@@ -103,6 +108,10 @@ class Export(object):
|
|
|
103
108
|
|
|
104
109
|
# write the filtered frames to the video file
|
|
105
110
|
for evid in np.arange(len(ds)):
|
|
111
|
+
|
|
112
|
+
if progress_callback is not None and evid % 10_000 == 0:
|
|
113
|
+
progress_callback(evid / len(ds), "exporting video")
|
|
114
|
+
|
|
106
115
|
# skip frames that were filtered out
|
|
107
116
|
if filtered and not ds.filter.all[evid]:
|
|
108
117
|
continue
|
|
@@ -116,12 +125,22 @@ class Export(object):
|
|
|
116
125
|
|
|
117
126
|
for packet in stream.encode(av_frame):
|
|
118
127
|
container.mux(packet)
|
|
128
|
+
|
|
129
|
+
if progress_callback is not None:
|
|
130
|
+
progress_callback(1.0, "video export complete")
|
|
131
|
+
|
|
119
132
|
else:
|
|
120
133
|
msg = "No image data to export: dataset {} !".format(ds.title)
|
|
121
134
|
raise OSError(msg)
|
|
122
135
|
|
|
123
|
-
def fcs(self,
|
|
124
|
-
|
|
136
|
+
def fcs(self,
|
|
137
|
+
path: pathlib.Path | str,
|
|
138
|
+
features: list[str],
|
|
139
|
+
meta_data: dict = None,
|
|
140
|
+
filtered: bool = True,
|
|
141
|
+
override: bool = False,
|
|
142
|
+
progress_callback: callable = None,
|
|
143
|
+
):
|
|
125
144
|
"""Export the data of an RT-DC dataset to an .fcs file
|
|
126
145
|
|
|
127
146
|
Parameters
|
|
@@ -142,6 +161,10 @@ class Export(object):
|
|
|
142
161
|
override: bool
|
|
143
162
|
If set to `True`, an existing file ``path`` will be overridden.
|
|
144
163
|
If set to `False`, raises `OSError` if ``path`` exists.
|
|
164
|
+
progress_callback: callable
|
|
165
|
+
Function that takes at least two arguments: float between 0 and
|
|
166
|
+
1 for monitoring progress and a string describing what is being
|
|
167
|
+
done.
|
|
145
168
|
|
|
146
169
|
Notes
|
|
147
170
|
-----
|
|
@@ -175,12 +198,18 @@ class Export(object):
|
|
|
175
198
|
# Collect the header
|
|
176
199
|
chn_names = [dfn.get_feature_label(c, rtdc_ds=ds) for c in features]
|
|
177
200
|
|
|
201
|
+
if progress_callback is not None:
|
|
202
|
+
progress_callback(0.0, "collecting data")
|
|
203
|
+
|
|
178
204
|
# Collect the data
|
|
179
205
|
if filtered:
|
|
180
206
|
data = [ds[c][ds.filter.all] for c in features]
|
|
181
207
|
else:
|
|
182
208
|
data = [ds[c] for c in features]
|
|
183
209
|
|
|
210
|
+
if progress_callback is not None:
|
|
211
|
+
progress_callback(0.5, "exporting data")
|
|
212
|
+
|
|
184
213
|
data = np.array(data).transpose()
|
|
185
214
|
meta_data["dclab version"] = version
|
|
186
215
|
fcswrite.write_fcs(filename=str(path),
|
|
@@ -189,6 +218,9 @@ class Export(object):
|
|
|
189
218
|
text_kw_pr=meta_data,
|
|
190
219
|
)
|
|
191
220
|
|
|
221
|
+
if progress_callback is not None:
|
|
222
|
+
progress_callback(1.0, "export complete")
|
|
223
|
+
|
|
192
224
|
def hdf5(self,
|
|
193
225
|
path: str | pathlib.Path,
|
|
194
226
|
features: List[str] = None,
|
|
@@ -200,7 +232,9 @@ class Export(object):
|
|
|
200
232
|
override: bool = False,
|
|
201
233
|
compression_kwargs: Dict = None,
|
|
202
234
|
compression: str = "deprecated",
|
|
203
|
-
skip_checks: bool = False
|
|
235
|
+
skip_checks: bool = False,
|
|
236
|
+
progress_callback: callable = None,
|
|
237
|
+
):
|
|
204
238
|
"""Export the data of the current instance to an HDF5 file
|
|
205
239
|
|
|
206
240
|
Parameters
|
|
@@ -244,7 +278,10 @@ class Export(object):
|
|
|
244
278
|
Use `compression_kwargs` instead.
|
|
245
279
|
skip_checks: bool
|
|
246
280
|
Disable checking whether all features have the same length.
|
|
247
|
-
|
|
281
|
+
progress_callback: callable
|
|
282
|
+
Function that takes at least two arguments: float between 0 and
|
|
283
|
+
1 for monitoring progress and a string describing what is being
|
|
284
|
+
done.
|
|
248
285
|
|
|
249
286
|
.. versionchanged:: 0.58.0
|
|
250
287
|
|
|
@@ -335,6 +372,8 @@ class Export(object):
|
|
|
335
372
|
with RTDCWriter(path,
|
|
336
373
|
mode="append",
|
|
337
374
|
compression_kwargs=compression_kwargs) as hw:
|
|
375
|
+
if progress_callback is not None:
|
|
376
|
+
progress_callback(0.0, "writing metadata")
|
|
338
377
|
# write meta data
|
|
339
378
|
hw.store_metadata(meta)
|
|
340
379
|
|
|
@@ -369,7 +408,10 @@ class Export(object):
|
|
|
369
408
|
ds.tables[tab])
|
|
370
409
|
|
|
371
410
|
# write each feature individually
|
|
372
|
-
for feat in features:
|
|
411
|
+
for ii, feat in enumerate(features):
|
|
412
|
+
if progress_callback is not None:
|
|
413
|
+
progress_callback(ii / len(features), f"exporting {feat}")
|
|
414
|
+
|
|
373
415
|
if (filter_arr is None or
|
|
374
416
|
# This does not work for the .tdms file format
|
|
375
417
|
# (and probably also not for DCOR).
|
|
@@ -393,6 +435,10 @@ class Export(object):
|
|
|
393
435
|
filtarr=filter_arr)
|
|
394
436
|
|
|
395
437
|
if basins:
|
|
438
|
+
if progress_callback:
|
|
439
|
+
progress_callback(1 - 1 / (len(features) or 1),
|
|
440
|
+
"writing basins")
|
|
441
|
+
|
|
396
442
|
# We have to store basins. There are three options:
|
|
397
443
|
# - filtering disabled: just copy basins
|
|
398
444
|
# - filtering enabled
|
|
@@ -472,9 +518,17 @@ class Export(object):
|
|
|
472
518
|
|
|
473
519
|
# Do not verify basins, it takes too long.
|
|
474
520
|
hw.store_basin(**bn_dict, verify=False)
|
|
521
|
+
if progress_callback is not None:
|
|
522
|
+
progress_callback(1.0, "export complete")
|
|
475
523
|
|
|
476
|
-
def tsv(self,
|
|
477
|
-
|
|
524
|
+
def tsv(self,
|
|
525
|
+
path: pathlib.Path | str,
|
|
526
|
+
features: list[str],
|
|
527
|
+
meta_data: dict = None,
|
|
528
|
+
filtered: bool = True,
|
|
529
|
+
override: bool = False,
|
|
530
|
+
progress_callback: callable = None,
|
|
531
|
+
):
|
|
478
532
|
"""Export the data of the current instance to a .tsv file
|
|
479
533
|
|
|
480
534
|
Parameters
|
|
@@ -496,6 +550,10 @@ class Export(object):
|
|
|
496
550
|
override: bool
|
|
497
551
|
If set to `True`, an existing file ``path`` will be overridden.
|
|
498
552
|
If set to `False`, raises `OSError` if ``path`` exists.
|
|
553
|
+
progress_callback: callable
|
|
554
|
+
Function that takes at least two arguments: float between 0 and
|
|
555
|
+
1 for monitoring progress and a string describing what is being
|
|
556
|
+
done.
|
|
499
557
|
"""
|
|
500
558
|
if meta_data is None:
|
|
501
559
|
meta_data = {}
|
|
@@ -516,6 +574,10 @@ class Export(object):
|
|
|
516
574
|
if c not in ds.features_scalar:
|
|
517
575
|
raise ValueError("Invalid feature name {}".format(c))
|
|
518
576
|
meta_data["dclab version"] = version
|
|
577
|
+
|
|
578
|
+
if progress_callback is not None:
|
|
579
|
+
progress_callback(0.0, "writing metadata")
|
|
580
|
+
|
|
519
581
|
# Write BOM header
|
|
520
582
|
with path.open("wb") as fd:
|
|
521
583
|
fd.write(codecs.BOM_UTF8)
|
|
@@ -539,17 +601,26 @@ class Export(object):
|
|
|
539
601
|
fd.write("# "+header2+"\n")
|
|
540
602
|
|
|
541
603
|
with path.open("ab") as fd:
|
|
542
|
-
|
|
604
|
+
if progress_callback is not None:
|
|
605
|
+
progress_callback(0.1, "collecting data")
|
|
606
|
+
|
|
607
|
+
# collect data
|
|
543
608
|
if filtered:
|
|
544
609
|
data = [ds[c][ds.filter.all] for c in features]
|
|
545
610
|
else:
|
|
546
611
|
data = [ds[c] for c in features]
|
|
547
612
|
|
|
613
|
+
if progress_callback is not None:
|
|
614
|
+
progress_callback(0.5, "writing data")
|
|
615
|
+
|
|
548
616
|
np.savetxt(fd,
|
|
549
617
|
np.array(data).transpose(),
|
|
550
618
|
fmt=str("%.10e"),
|
|
551
619
|
delimiter="\t")
|
|
552
620
|
|
|
621
|
+
if progress_callback is not None:
|
|
622
|
+
progress_callback(1.0, "export complete")
|
|
623
|
+
|
|
553
624
|
|
|
554
625
|
def yield_filtered_array_stacks(data, indices):
|
|
555
626
|
"""Generator returning chunks with the filtered feature data
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dclab
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.63.0
|
|
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,11 +1,9 @@
|
|
|
1
|
-
import
|
|
2
|
-
from os.path import join
|
|
3
|
-
import tempfile
|
|
1
|
+
from unittest import mock
|
|
4
2
|
|
|
5
3
|
import pytest
|
|
6
4
|
|
|
7
5
|
import dclab
|
|
8
|
-
from dclab import new_dataset
|
|
6
|
+
from dclab import new_dataset, RTDCWriter
|
|
9
7
|
import numpy as np
|
|
10
8
|
|
|
11
9
|
from helper_methods import example_data_dict, retrieve_data
|
|
@@ -30,48 +28,72 @@ def test_avi_export_check(tmp_path):
|
|
|
30
28
|
assert num_frames == len(ds)
|
|
31
29
|
|
|
32
30
|
|
|
31
|
+
@pytest.mark.filterwarnings(
|
|
32
|
+
"ignore::dclab.rtdc_dataset.config.WrongConfigurationTypeWarning")
|
|
33
|
+
def test_avi_export_progress(tmp_path):
|
|
34
|
+
path = retrieve_data("fmt-hdf5_image-bg_2020.zip")
|
|
35
|
+
# create an .rtdc file with more than 10_000 events
|
|
36
|
+
path_large = path.with_name("large.rtdc")
|
|
37
|
+
path_avi = path.with_name("export.avi")
|
|
38
|
+
|
|
39
|
+
with RTDCWriter(path_large) as hw, new_dataset(path) as ds:
|
|
40
|
+
hw.store_metadata(ds.config.as_dict(pop_filtering=True))
|
|
41
|
+
size = len(ds)
|
|
42
|
+
num_iters = 25_000 // size
|
|
43
|
+
for feat in ["time", "image", "deform"]:
|
|
44
|
+
feat_data = np.concatenate([ds[feat][:]] * num_iters)
|
|
45
|
+
hw.store_feature(feat, feat_data)
|
|
46
|
+
|
|
47
|
+
with dclab.new_dataset(path_large) as dse:
|
|
48
|
+
assert len(dse) > 20_000, "we need a large dataset"
|
|
49
|
+
|
|
50
|
+
callback = mock.MagicMock()
|
|
51
|
+
dse.export.avi(path=path_avi, progress_callback=callback)
|
|
52
|
+
|
|
53
|
+
callback.assert_any_call(0.0, "exporting video")
|
|
54
|
+
callback.assert_any_call(0.4, "exporting video")
|
|
55
|
+
callback.assert_any_call(0.8, "exporting video")
|
|
56
|
+
callback.assert_any_call(1.0, "video export complete")
|
|
57
|
+
|
|
58
|
+
|
|
33
59
|
@pytest.mark.filterwarnings(
|
|
34
60
|
"ignore::dclab.rtdc_dataset.config.WrongConfigurationTypeWarning")
|
|
35
61
|
@pytest.mark.filterwarnings('ignore::dclab.rtdc_dataset.'
|
|
36
62
|
+ 'fmt_tdms.exc.CorruptFrameWarning')
|
|
37
|
-
def test_avi_export_tdms():
|
|
63
|
+
def test_avi_export_tdms(tmp_path):
|
|
38
64
|
pytest.importorskip("nptdms")
|
|
39
65
|
ds = new_dataset(retrieve_data("fmt-tdms_fl-image_2016.zip"))
|
|
40
|
-
|
|
41
|
-
f1 =
|
|
66
|
+
|
|
67
|
+
f1 = tmp_path / "test.avi"
|
|
42
68
|
ds.export.avi(path=f1)
|
|
43
|
-
assert
|
|
44
|
-
f1)[6] > 1e4, "Resulting file to small, Something went wrong!"
|
|
69
|
+
assert f1.stat()[6] > 1e4, "Resulting file to small, Something went wrong!"
|
|
45
70
|
|
|
46
71
|
|
|
47
72
|
@pytest.mark.filterwarnings(
|
|
48
73
|
"ignore::dclab.rtdc_dataset.config.WrongConfigurationTypeWarning")
|
|
49
74
|
@pytest.mark.filterwarnings('ignore::dclab.rtdc_dataset.'
|
|
50
75
|
+ 'fmt_tdms.exc.CorruptFrameWarning')
|
|
51
|
-
def test_avi_override_tdms():
|
|
76
|
+
def test_avi_override_tdms(tmp_path):
|
|
52
77
|
pytest.importorskip("nptdms")
|
|
53
78
|
ds = new_dataset(retrieve_data("fmt-tdms_fl-image_2016.zip"))
|
|
54
79
|
|
|
55
|
-
|
|
56
|
-
f1 = join(edest, "test.avi")
|
|
80
|
+
f1 = tmp_path / "test.avi"
|
|
57
81
|
ds.export.avi(f1, override=True)
|
|
58
82
|
try:
|
|
59
|
-
ds.export.avi(f1
|
|
83
|
+
ds.export.avi(f1.with_name(f1.stem), override=False)
|
|
60
84
|
except OSError:
|
|
61
85
|
pass
|
|
62
86
|
else:
|
|
63
87
|
raise ValueError("Should append .avi and not override!")
|
|
64
88
|
|
|
65
89
|
|
|
66
|
-
def test_avi_no_images():
|
|
90
|
+
def test_avi_no_images(tmp_path):
|
|
67
91
|
keys = ["area_um", "deform", "time", "frame", "fl3_width"]
|
|
68
92
|
ddict = example_data_dict(size=127, keys=keys)
|
|
69
93
|
ds = dclab.new_dataset(ddict)
|
|
70
94
|
|
|
71
|
-
edest = tempfile.mkdtemp()
|
|
72
|
-
f1 = join(edest, "test.avi")
|
|
73
95
|
try:
|
|
74
|
-
ds.export.avi(
|
|
96
|
+
ds.export.avi(tmp_path / "test.avi")
|
|
75
97
|
except OSError:
|
|
76
98
|
pass
|
|
77
99
|
else:
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import io
|
|
2
2
|
from os.path import join
|
|
3
3
|
import tempfile
|
|
4
|
+
from unittest import mock
|
|
4
5
|
|
|
5
6
|
import pytest
|
|
6
7
|
|
|
@@ -33,6 +34,22 @@ def test_fcs_export():
|
|
|
33
34
|
assert len(a1) != 0
|
|
34
35
|
|
|
35
36
|
|
|
37
|
+
def test_fcs_export_progress(tmp_path):
|
|
38
|
+
pytest.importorskip("fcswrite")
|
|
39
|
+
keys = ["area_um", "deform", "time", "frame", "fl3_width"]
|
|
40
|
+
ddict = example_data_dict(size=222, keys=keys)
|
|
41
|
+
ds = dclab.new_dataset(ddict)
|
|
42
|
+
|
|
43
|
+
f1 = tmp_path / "test.fcs"
|
|
44
|
+
|
|
45
|
+
callback = mock.MagicMock()
|
|
46
|
+
ds.export.fcs(f1, keys, progress_callback=callback)
|
|
47
|
+
|
|
48
|
+
callback.assert_any_call(0.0, "collecting data")
|
|
49
|
+
callback.assert_any_call(0.5, "exporting data")
|
|
50
|
+
callback.assert_any_call(1.0, "export complete")
|
|
51
|
+
|
|
52
|
+
|
|
36
53
|
def test_fcs_override():
|
|
37
54
|
pytest.importorskip("fcswrite")
|
|
38
55
|
keys = ["area_um", "deform", "time", "frame", "fl3_width"]
|
|
@@ -2,6 +2,7 @@ import json
|
|
|
2
2
|
from os.path import join
|
|
3
3
|
import pathlib
|
|
4
4
|
import tempfile
|
|
5
|
+
from unittest import mock
|
|
5
6
|
|
|
6
7
|
import h5py
|
|
7
8
|
import numpy as np
|
|
@@ -578,6 +579,63 @@ def test_hdf5_override():
|
|
|
578
579
|
raise ValueError("Should append .rtdc and not override!")
|
|
579
580
|
|
|
580
581
|
|
|
582
|
+
def test_hdf5_progress(tmp_path):
|
|
583
|
+
keys = ["area_um", "deform", "time", "frame", "fl3_width"]
|
|
584
|
+
ddict = example_data_dict(size=222, keys=keys)
|
|
585
|
+
ds = dclab.new_dataset(ddict)
|
|
586
|
+
|
|
587
|
+
f1 = tmp_path / "test.rtdc"
|
|
588
|
+
|
|
589
|
+
callback = mock.MagicMock()
|
|
590
|
+
ds.export.hdf5(f1, keys, progress_callback=callback)
|
|
591
|
+
|
|
592
|
+
callback.assert_any_call(0.0, "writing metadata")
|
|
593
|
+
callback.assert_any_call(0/5, "exporting area_um")
|
|
594
|
+
callback.assert_any_call(1/5, "exporting deform")
|
|
595
|
+
callback.assert_any_call(2/5, "exporting fl3_width")
|
|
596
|
+
callback.assert_any_call(3/5, "exporting frame")
|
|
597
|
+
callback.assert_any_call(4/5, "exporting time")
|
|
598
|
+
callback.assert_any_call(1.0, "export complete")
|
|
599
|
+
|
|
600
|
+
|
|
601
|
+
def test_hdf5_progress_basins(tmp_path):
|
|
602
|
+
h5path = retrieve_data("fmt-hdf5_image-mask-blood_2021.zip")
|
|
603
|
+
path_exp = h5path.with_name("exported.rtdc")
|
|
604
|
+
|
|
605
|
+
callback = mock.MagicMock()
|
|
606
|
+
|
|
607
|
+
with dclab.new_dataset(h5path) as ds:
|
|
608
|
+
ds.export.hdf5(path_exp,
|
|
609
|
+
features=["deform", "image"],
|
|
610
|
+
basins=True,
|
|
611
|
+
progress_callback=callback
|
|
612
|
+
)
|
|
613
|
+
|
|
614
|
+
callback.assert_any_call(0.0, "writing metadata")
|
|
615
|
+
callback.assert_any_call(0/2, "exporting deform")
|
|
616
|
+
callback.assert_any_call(1/2, "exporting image")
|
|
617
|
+
callback.assert_any_call(1/2, "writing basins")
|
|
618
|
+
callback.assert_any_call(1.0, "export complete")
|
|
619
|
+
|
|
620
|
+
|
|
621
|
+
def test_hdf5_progress_basins_only(tmp_path):
|
|
622
|
+
h5path = retrieve_data("fmt-hdf5_image-mask-blood_2021.zip")
|
|
623
|
+
path_exp = h5path.with_name("exported.rtdc")
|
|
624
|
+
|
|
625
|
+
callback = mock.MagicMock()
|
|
626
|
+
|
|
627
|
+
with dclab.new_dataset(h5path) as ds:
|
|
628
|
+
ds.export.hdf5(path_exp,
|
|
629
|
+
features=[],
|
|
630
|
+
basins=True,
|
|
631
|
+
progress_callback=callback
|
|
632
|
+
)
|
|
633
|
+
|
|
634
|
+
callback.assert_any_call(0.0, "writing metadata")
|
|
635
|
+
callback.assert_any_call(0.0, "writing basins")
|
|
636
|
+
callback.assert_any_call(1.0, "export complete")
|
|
637
|
+
|
|
638
|
+
|
|
581
639
|
@pytest.mark.parametrize("tables", [True, False])
|
|
582
640
|
def test_hdf5_tables(tables):
|
|
583
641
|
keys = ["area_um", "deform", "time", "frame", "index_online"]
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
from unittest import mock
|
|
1
2
|
import dclab
|
|
2
3
|
|
|
3
4
|
from helper_methods import example_data_dict, retrieve_data
|
|
@@ -27,6 +28,23 @@ def test_tsv_export(tmp_path):
|
|
|
27
28
|
assert len(a1) != 0
|
|
28
29
|
|
|
29
30
|
|
|
31
|
+
def test_fcs_export_progress(tmp_path):
|
|
32
|
+
pytest.importorskip("fcswrite")
|
|
33
|
+
keys = ["area_um", "deform", "time", "frame", "fl3_width"]
|
|
34
|
+
ddict = example_data_dict(size=222, keys=keys)
|
|
35
|
+
ds = dclab.new_dataset(ddict)
|
|
36
|
+
|
|
37
|
+
f1 = tmp_path / "test.tsv"
|
|
38
|
+
|
|
39
|
+
callback = mock.MagicMock()
|
|
40
|
+
ds.export.tsv(f1, keys, progress_callback=callback)
|
|
41
|
+
|
|
42
|
+
callback.assert_any_call(0.0, "writing metadata")
|
|
43
|
+
callback.assert_any_call(0.1, "collecting data")
|
|
44
|
+
callback.assert_any_call(0.5, "writing data")
|
|
45
|
+
callback.assert_any_call(1.0, "export complete")
|
|
46
|
+
|
|
47
|
+
|
|
30
48
|
@pytest.mark.filterwarnings(
|
|
31
49
|
"ignore::dclab.rtdc_dataset.config.WrongConfigurationTypeWarning")
|
|
32
50
|
def test_tsv_export_ds_metadata(tmp_path):
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|