dclab 0.64.0__tar.gz → 0.64.1__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.0 → dclab-0.64.1}/CHANGELOG +5 -0
- {dclab-0.64.0 → dclab-0.64.1}/PKG-INFO +2 -2
- {dclab-0.64.0 → dclab-0.64.1}/dclab/_version.py +2 -2
- {dclab-0.64.0 → dclab-0.64.1}/dclab/kde/base.py +84 -1
- {dclab-0.64.0 → dclab-0.64.1}/dclab/statistics.py +27 -4
- {dclab-0.64.0 → dclab-0.64.1}/dclab.egg-info/PKG-INFO +2 -2
- {dclab-0.64.0 → dclab-0.64.1}/pyproject.toml +3 -3
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_kde.py +70 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_statistics.py +15 -0
- {dclab-0.64.0 → dclab-0.64.1}/.gitignore +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/.readthedocs.yml +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/LICENSE +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/MANIFEST.in +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/README.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/cached.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/cli/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/cli/common.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/cli/task_compress.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/cli/task_condense.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/cli/task_join.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/cli/task_repack.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/cli/task_split.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/cli/task_tdms2rtdc.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/cli/task_verify_dataset.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/definitions/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/definitions/feat_const.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/definitions/feat_logic.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/definitions/meta_const.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/definitions/meta_logic.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/definitions/meta_parse.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/downsampling.pyx +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/packaging/LICENSE +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/packaging/LICENSE.APACHE +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/packaging/LICENSE.BSD +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/packaging/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/packaging/_structures.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/packaging/version.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/skimage/LICENSE +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/skimage/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/skimage/_find_contours.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/skimage/_find_contours_cy.pyx +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/skimage/_pnpoly.pyx +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/skimage/_shared/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/skimage/_shared/geometry.pxd +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/skimage/_shared/geometry.pyx +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/skimage/measure.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/skimage/pnpoly.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/statsmodels/LICENSE +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/statsmodels/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/statsmodels/nonparametric/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/statsmodels/nonparametric/_kernel_base.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/statsmodels/nonparametric/kernel_density.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/external/statsmodels/nonparametric/kernels.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/bright.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/bright_bc.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/bright_perc.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/contour.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/emodulus/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/emodulus/load.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/emodulus/lut_HE-2D-FEM-22.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/emodulus/lut_HE-3D-FEM-22.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/emodulus/lut_LE-2D-FEM-19.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/emodulus/pxcorr.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/emodulus/scale_linear.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/emodulus/viscosity.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/fl_crosstalk.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/inert_ratio.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/features/volume.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/http_utils.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/isoelastics/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/isoelastics/iso_HE-2D-FEM-22-area_um-deform.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/isoelastics/iso_HE-2D-FEM-22-volume-deform.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/isoelastics/iso_HE-3D-FEM-22-area_um-deform.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/isoelastics/iso_HE-3D-FEM-22-volume-deform.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/isoelastics/iso_LE-2D-FEM-19-area_um-deform.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/isoelastics/iso_LE-2D-FEM-19-volume-deform.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/isoelastics/iso_LE-2D-ana-18-area_um-deform.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/kde/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/kde/contours.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/kde/methods.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/kde_contours.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/kde_methods.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/lme4/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/lme4/lme4_template.R +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/lme4/rsetup.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/lme4/wrapr.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/polygon_filter.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/check.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/config.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/copier.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/core.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/export.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/feat_anc_core/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/feat_anc_core/af_basic.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/feat_anc_core/af_emodulus.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/feat_anc_core/af_fl_max_ctc.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/feat_anc_core/af_image_contour.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/feat_anc_core/af_ml_class.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/feat_anc_core/ancillary_feature.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/feat_anc_ml/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/feat_anc_plugin/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/feat_anc_plugin/plugin_feature.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/feat_basin.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/feat_temp.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/filter.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_dcor/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_dcor/access_token.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_dcor/api.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_dcor/base.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_dcor/basin.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_dcor/logs.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_dcor/tables.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_dict.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_hdf5/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_hdf5/base.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_hdf5/basin.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_hdf5/events.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_hdf5/feat_defect.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_hdf5/logs.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_hdf5/tables.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_hierarchy/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_hierarchy/base.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_hierarchy/events.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_hierarchy/hfilter.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_hierarchy/mapper.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_http.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_s3.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_tdms/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_tdms/event_contour.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_tdms/event_image.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_tdms/event_mask.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_tdms/event_trace.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_tdms/exc.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/fmt_tdms/naming.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/load.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/meta_table.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/rtdc_dataset/writer.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/util.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab/warn.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab.egg-info/SOURCES.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab.egg-info/dependency_links.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab.egg-info/entry_points.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab.egg-info/requires.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/dclab.egg-info/top_level.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/.gitignore +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/README.md +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/conf.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/data/example.poly +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/data/example.rtdc +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/data/example_plugin.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/data/example_plugin_metadata.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/data/example_traces.rtdc +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/data/example_video.rtdc +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/dclab.bib +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/extensions/dclab_defs.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/extensions/fancy_include.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/extensions/github_changelog.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/extensions/simple_argparse.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/figures/DCOR_API_Token_website.png +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/index.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/logo/dc_logo.png +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/logo/dc_logo.svg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/logo/dclab.png +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/logo/dclab.svg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/logo/dclab_large_white.png +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/logo/dclab_large_white.svg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/logo/favicon.ico +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/logo/favicon.svg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/requirements.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_advanced_usage.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_basins/basin_example_workflows.svg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_basins/index.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_dc_io.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_dc_usage.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_dcor.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_emodulus/figures_emodulus/.gitignore +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_HE-2D-FEM-22.png +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_HE-3D-FEM-22.png +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_emodulus/figures_emodulus/emodulus_20um_LE-2D-FEM-19.png +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_emodulus/figures_emodulus/plot_emodulus_lut.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_emodulus/figures_emodulus/requirements.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_emodulus/figures_viscosity/LICENSE +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_emodulus/figures_viscosity/buyukurganci_22_fig3a.jpg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_emodulus/figures_viscosity/buyukurganci_22_fig3a.pdf +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_emodulus/index.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_feat_plugin.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_feat_temp.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_fluorescence.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_lme4.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_notation.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_s3.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_av_scatter.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_changelog.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_cli.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_code_reference.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_examples.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_getting_started.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/docs/sec_z_bib.rst +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/emodulus_dcor.jpg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/emodulus_dcor.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/generate_example_images.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/isoelastics.jpg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/isoelastics.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/isoelastics_custom.jpg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/isoelastics_custom.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/lme4_glmer_diff.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/lme4_lmer.jpg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/lme4_lmer.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/overview_plot.jpg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/overview_plot.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/plugin_example.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/plugin_usage.jpg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/plugin_usage.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/viscosity_models.jpg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/examples/viscosity_models.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/.gitignore +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/README.md +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/fem2iso_volume.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/fem2lutiso_std.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/fem2rtdc.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/lut_recipes/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/lut_recipes/hooks/LUT_analytical_linear-elastic_2Daxis.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/lut_recipes/hooks/README.md +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/lut_recipes/hooks/__init__.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/lut_recipes/hooks/common.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/lut_recipes/hooks/he_2d_fem_22.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/lut_recipes/hooks/he_3d_fem_22.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/lut_recipes/hooks/le_2d_fem_19.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/lut_recipes/lut_processor.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/pixelation_correction.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/pixelation_correction_2020.png +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/pixelation_correction_2022.png +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/scripts/requirements.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/setup.cfg +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/setup.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/README.md +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/conftest.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/README.md +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/example_access_token.dcor-access +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/example_isoelastics.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/feat_anc_plugin_creative.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-hdf5_fl-no-contour_2019.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-hdf5_fl_2017.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-hdf5_fl_2018.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-hdf5_fl_wide-channel_2023.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-hdf5_image-bg_2020.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-hdf5_image-mask-blood_2021.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-hdf5_mask-contour_2018.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-hdf5_polygon_gate_2021.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-hdf5_raw-cytoshot-exported.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-hdf5_segfault-compound_2023.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-hdf5_wide-channel_2023.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-tdms_2fl-no-image_2017.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-tdms_fl-image-bright_2017.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-tdms_fl-image-large-fov_2017.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-tdms_fl-image_2016.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-tdms_fl_2015.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-tdms_minimal_2016.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/data/fmt-tdms_shapein-2.0.1-no-image_2017.zip +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/helper_methods.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/requirements.txt +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_cache.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_cli.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_cli_argparse.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_cli_compress.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_cli_condense.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_cli_join.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_cli_repack.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_cli_split.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_config_value_mapping.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_dfn.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_downsampling.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_feat_bright.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_feat_bright_bc.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_feat_bright_perc.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_feat_contour.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_feat_emodulus.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_feat_emodulus_viscosity.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_feat_fl_crosstalk.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_feat_inert_ratio.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_feat_volume.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_http_utils.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_isoelastics.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_kde_contours.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_kde_deprecations.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_kde_methods.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_lme4.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_lut_he_2d_fem_22.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_lut_he_3d_fem_22.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_polygon_contains.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_polygon_filter.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_check_dataset.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_config.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_copier.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_core_feat.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_downsampling.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_export.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_export_avi.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_export_fcs.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_export_hdf5.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_export_tsv.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_feat_anc_core.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_feat_anc_ml.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_feat_anc_plugin.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_feat_basin.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_feat_basin_mapped.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_feat_basin_perishable.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_feat_temp.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_filter.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_dcor.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_dcor_access_token.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_dcor_basin.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_dcor_private.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_dict.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_hdf5.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_hdf5_basins.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_hdf5_basins_internal.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_hierarchy.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_http.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_http_basin.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_s3.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_s3_basin.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_fmt_tdms.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_hash.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_kde.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_limit_events.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_rtdc_writer.py +0 -0
- {dclab-0.64.0 → dclab-0.64.1}/tests/test_util.py +0 -0
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
0.64.1
|
|
2
|
+
- enh: introduce `KernelDensityEstimator.get_at`
|
|
3
|
+
- enh: add 10th, 25th, 75th, and 90th percentile statistics methods
|
|
4
|
+
- enh: new `ret_dict` arg in `get_statistics` returns dict instead of tuple
|
|
5
|
+
- setup: fix finding packages in pyproject.toml
|
|
1
6
|
0.64.0
|
|
2
7
|
- feat: introduce concept of perishable (e.g. temporally expiring) basins
|
|
3
8
|
- feat: add `PerishableRecord` to presigned URLs for DCOR basins (#244)
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dclab
|
|
3
|
-
Version: 0.64.
|
|
3
|
+
Version: 0.64.1
|
|
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>
|
|
7
|
-
License: GPL-2.0-or-later
|
|
7
|
+
License-Expression: GPL-2.0-or-later
|
|
8
8
|
Project-URL: source, https://github.com/DC-Analysis/dclab
|
|
9
9
|
Project-URL: tracker, https://github.com/DC-Analysis/dclab/issues
|
|
10
10
|
Project-URL: documentation, https://dclab.readthedocs.io/en/stable/
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import warnings
|
|
2
2
|
|
|
3
3
|
import numpy as np
|
|
4
|
+
from scipy.interpolate import RegularGridInterpolator as RGI
|
|
4
5
|
|
|
5
6
|
from .methods import bin_width_doane_div5, get_bad_vals, methods
|
|
6
7
|
from .contours import find_contours_level, get_quantile_levels
|
|
@@ -316,6 +317,8 @@ class KernelDensityEstimator:
|
|
|
316
317
|
yscale="linear"):
|
|
317
318
|
"""Evaluate the kernel density estimate for scatter plots
|
|
318
319
|
|
|
320
|
+
The KDE is evaluated with the `kde_type` function for every point.
|
|
321
|
+
|
|
319
322
|
Parameters
|
|
320
323
|
----------
|
|
321
324
|
xax: str
|
|
@@ -332,7 +335,7 @@ class KernelDensityEstimator:
|
|
|
332
335
|
Additional keyword arguments to the KDE method
|
|
333
336
|
xscale: str
|
|
334
337
|
If set to "log", take the logarithm of the x-values before
|
|
335
|
-
computing the KDE. This is useful when data are
|
|
338
|
+
computing the KDE. This is useful when data are
|
|
336
339
|
displayed on a log-scale. Defaults to "linear".
|
|
337
340
|
yscale: str
|
|
338
341
|
See `xscale`.
|
|
@@ -374,3 +377,83 @@ class KernelDensityEstimator:
|
|
|
374
377
|
density = np.array([])
|
|
375
378
|
|
|
376
379
|
return density
|
|
380
|
+
|
|
381
|
+
def get_at(self, xax="area_um", yax="deform", positions=None,
|
|
382
|
+
kde_type="histogram", kde_kwargs=None, xscale="linear",
|
|
383
|
+
yscale="linear"):
|
|
384
|
+
"""Evaluate the kernel density estimate for specific events
|
|
385
|
+
|
|
386
|
+
The KDE is computed via linear interpolation from the output
|
|
387
|
+
of `get_raster`.
|
|
388
|
+
|
|
389
|
+
Parameters
|
|
390
|
+
----------
|
|
391
|
+
xax: str
|
|
392
|
+
Identifier for X axis (e.g. "area_um", "aspect", "deform")
|
|
393
|
+
yax: str
|
|
394
|
+
Identifier for Y axis
|
|
395
|
+
positions: list of two 1d ndarrays or ndarray of shape (2, N)
|
|
396
|
+
The positions where the KDE will be computed. Note that
|
|
397
|
+
the KDE estimate is computed from the points that
|
|
398
|
+
are set in `self.rtdc_ds.filter.all`.
|
|
399
|
+
kde_type: str
|
|
400
|
+
The KDE method to use, see :const:`.kde_methods.methods`
|
|
401
|
+
kde_kwargs: dict
|
|
402
|
+
Additional keyword arguments to the KDE method
|
|
403
|
+
xscale: str
|
|
404
|
+
If set to "log", take the logarithm of the x-values before
|
|
405
|
+
computing the KDE. This is useful when data are
|
|
406
|
+
displayed on a log-scale. Defaults to "linear".
|
|
407
|
+
yscale: str
|
|
408
|
+
See `xscale`.
|
|
409
|
+
|
|
410
|
+
Returns
|
|
411
|
+
-------
|
|
412
|
+
density : 1d ndarray
|
|
413
|
+
The kernel density evaluated for the filtered events.
|
|
414
|
+
"""
|
|
415
|
+
if kde_kwargs is None:
|
|
416
|
+
kde_kwargs = {}
|
|
417
|
+
xax = xax.lower()
|
|
418
|
+
yax = yax.lower()
|
|
419
|
+
kde_type = kde_type.lower()
|
|
420
|
+
if kde_type not in methods:
|
|
421
|
+
raise ValueError(f"Not a valid kde type: {kde_type}!")
|
|
422
|
+
|
|
423
|
+
# Get data
|
|
424
|
+
x = self.rtdc_ds[xax][self.rtdc_ds.filter.all]
|
|
425
|
+
y = self.rtdc_ds[yax][self.rtdc_ds.filter.all]
|
|
426
|
+
|
|
427
|
+
# Apply scale (no change for linear scale)
|
|
428
|
+
xs = self.apply_scale(x, xscale, xax)
|
|
429
|
+
ys = self.apply_scale(y, yscale, yax)
|
|
430
|
+
|
|
431
|
+
if positions:
|
|
432
|
+
xs = self.apply_scale(positions[0], xscale, xax)
|
|
433
|
+
ys = self.apply_scale(positions[1], yscale, yax)
|
|
434
|
+
|
|
435
|
+
if len(x):
|
|
436
|
+
xr, yr, density_grid = self.get_raster(xax=xax,
|
|
437
|
+
yax=yax,
|
|
438
|
+
kde_type=kde_type,
|
|
439
|
+
kde_kwargs=kde_kwargs,
|
|
440
|
+
xscale=xscale,
|
|
441
|
+
yscale=yscale)
|
|
442
|
+
|
|
443
|
+
# Apply scale (no change for linear scale)
|
|
444
|
+
xrs = self.apply_scale(xr, xscale, xax)
|
|
445
|
+
yrs = self.apply_scale(yr, yscale, yax)
|
|
446
|
+
|
|
447
|
+
# 'scipy.interp2d' has been removed in SciPy 1.14.0
|
|
448
|
+
# https://scipy.github.io/devdocs/tutorial/interpolate/interp_transition_guide.html
|
|
449
|
+
interp_func = RGI((xrs[:, 0], yrs[0, :]),
|
|
450
|
+
density_grid,
|
|
451
|
+
method="linear",
|
|
452
|
+
bounds_error=False,
|
|
453
|
+
fill_value=np.nan)
|
|
454
|
+
density = interp_func((xs, ys))
|
|
455
|
+
|
|
456
|
+
else:
|
|
457
|
+
density = np.array([])
|
|
458
|
+
|
|
459
|
+
return density
|
|
@@ -86,7 +86,7 @@ def flow_rate(ds):
|
|
|
86
86
|
return np.nan
|
|
87
87
|
|
|
88
88
|
|
|
89
|
-
def get_statistics(ds, methods=None, features=None):
|
|
89
|
+
def get_statistics(ds, methods=None, features=None, ret_dict=False):
|
|
90
90
|
"""Compute statistics for an RT-DC dataset
|
|
91
91
|
|
|
92
92
|
Parameters
|
|
@@ -96,13 +96,16 @@ def get_statistics(ds, methods=None, features=None):
|
|
|
96
96
|
methods: list of str or None
|
|
97
97
|
The methods wih which to compute the statistics.
|
|
98
98
|
The list of available methods is given with
|
|
99
|
-
|
|
99
|
+
:func:`.available_methods.keys`
|
|
100
100
|
If set to `None`, statistics for all methods are computed.
|
|
101
101
|
features: list of str
|
|
102
102
|
Feature name identifiers are defined by
|
|
103
|
-
|
|
103
|
+
:func:`dclab.definitions.feature_exists`.
|
|
104
104
|
If set to `None`, statistics for all scalar features
|
|
105
105
|
available are computed.
|
|
106
|
+
ret_dict: bool
|
|
107
|
+
Instead of returning ``(header, values)``, return a dictionary
|
|
108
|
+
with headers as keys.
|
|
106
109
|
|
|
107
110
|
Returns
|
|
108
111
|
-------
|
|
@@ -148,7 +151,10 @@ def get_statistics(ds, methods=None, features=None):
|
|
|
148
151
|
label = dfn.get_feature_label(ft, rtdc_ds=ds)
|
|
149
152
|
header.append(" ".join([mt, label]))
|
|
150
153
|
|
|
151
|
-
|
|
154
|
+
if ret_dict:
|
|
155
|
+
return dict(zip(header, values))
|
|
156
|
+
else:
|
|
157
|
+
return header, values
|
|
152
158
|
|
|
153
159
|
|
|
154
160
|
def mode(data):
|
|
@@ -191,7 +197,24 @@ def mode(data):
|
|
|
191
197
|
# Register all the methods
|
|
192
198
|
# Methods that require an axis
|
|
193
199
|
Statistics(name="Mean", req_feature=True, method=np.average)
|
|
200
|
+
# Premature-Optimization warning: `np.percentile` also accepts an array
|
|
201
|
+
# of percentiles as the `q` argument, which I would expect to yield better
|
|
202
|
+
# performance than computing percentiles individually. Implementing this
|
|
203
|
+
# would break the way we are defining statistical methods here (One
|
|
204
|
+
# `Statistics` instance per method) and thus requires a considerable
|
|
205
|
+
# amount of work (much more work than writing this text here). It would
|
|
206
|
+
# also make understanding the code more difficult. In addition, computing
|
|
207
|
+
# statistics is not done often and is extremely fast anyway for a few
|
|
208
|
+
# millions of events. Don't optimize this!
|
|
209
|
+
Statistics(name="10th Percentile", req_feature=True,
|
|
210
|
+
method=lambda data: np.percentile(data, 10))
|
|
211
|
+
Statistics(name="25th Percentile", req_feature=True,
|
|
212
|
+
method=lambda data: np.percentile(data, 25))
|
|
194
213
|
Statistics(name="Median", req_feature=True, method=np.median)
|
|
214
|
+
Statistics(name="75th Percentile", req_feature=True,
|
|
215
|
+
method=lambda data: np.percentile(data, 75))
|
|
216
|
+
Statistics(name="90th Percentile", req_feature=True,
|
|
217
|
+
method=lambda data: np.percentile(data, 90))
|
|
195
218
|
Statistics(name="Mode", req_feature=True, method=mode)
|
|
196
219
|
Statistics(name="SD", req_feature=True, method=np.std)
|
|
197
220
|
# Methods that work on RTDCBase
|
|
@@ -1,10 +1,10 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: dclab
|
|
3
|
-
Version: 0.64.
|
|
3
|
+
Version: 0.64.1
|
|
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>
|
|
7
|
-
License: GPL-2.0-or-later
|
|
7
|
+
License-Expression: GPL-2.0-or-later
|
|
8
8
|
Project-URL: source, https://github.com/DC-Analysis/dclab
|
|
9
9
|
Project-URL: tracker, https://github.com/DC-Analysis/dclab/issues
|
|
10
10
|
Project-URL: documentation, https://dclab.readthedocs.io/en/stable/
|
|
@@ -34,7 +34,7 @@ classifiers = [
|
|
|
34
34
|
'Topic :: Scientific/Engineering :: Visualization',
|
|
35
35
|
'Intended Audience :: Science/Research',
|
|
36
36
|
]
|
|
37
|
-
license =
|
|
37
|
+
license = "GPL-2.0-or-later"
|
|
38
38
|
# This is not supported in Python 3.8
|
|
39
39
|
# license = "GPL-2.0-or-later"
|
|
40
40
|
dependencies = [
|
|
@@ -75,8 +75,8 @@ changelog = "https://dclab.readthedocs.io/en/stable/sec_changelog.html"
|
|
|
75
75
|
# We need the following, because automatic package discovery does not work
|
|
76
76
|
# when running cibuildwheel on GitHub Actions (there will be a "wheelhouse"
|
|
77
77
|
# directory).
|
|
78
|
-
[tool.setuptools]
|
|
79
|
-
|
|
78
|
+
[tool.setuptools.packages.find]
|
|
79
|
+
include = ["dclab"]
|
|
80
80
|
|
|
81
81
|
[tool.setuptools_scm]
|
|
82
82
|
write_to = "dclab/_version.py"
|
|
@@ -5,6 +5,8 @@ from dclab.external import skimage
|
|
|
5
5
|
from dclab.kde import KernelDensityEstimator
|
|
6
6
|
from dclab import polygon_filter
|
|
7
7
|
|
|
8
|
+
from helper_methods import example_data_dict
|
|
9
|
+
|
|
8
10
|
|
|
9
11
|
def test_contour_lines():
|
|
10
12
|
np.random.seed(47)
|
|
@@ -99,3 +101,71 @@ def test_contour_lines_data_with_too_much_space():
|
|
|
99
101
|
yscale="linear",
|
|
100
102
|
quantiles=[0.5])
|
|
101
103
|
assert not contours, "there should be no contours with too much space"
|
|
104
|
+
|
|
105
|
+
|
|
106
|
+
def test_kde_log_get_at():
|
|
107
|
+
ddict = example_data_dict(size=300, keys=["area_um", "deform"])
|
|
108
|
+
ddict["deform"][:20] = .1
|
|
109
|
+
ddict["area_um"][:20] = .5
|
|
110
|
+
ds = dclab.new_dataset(ddict)
|
|
111
|
+
kde_instance = KernelDensityEstimator(ds)
|
|
112
|
+
a = kde_instance.get_at(xax="area_um", yax="deform", yscale="log")
|
|
113
|
+
assert np.all(a[:20] == a[0])
|
|
114
|
+
|
|
115
|
+
|
|
116
|
+
def test_kde_log_get_at_points():
|
|
117
|
+
ddict = example_data_dict(size=300, keys=["area_um", "tilt"])
|
|
118
|
+
ds = dclab.new_dataset(ddict)
|
|
119
|
+
kde_instance = KernelDensityEstimator(ds)
|
|
120
|
+
a = kde_instance.get_at(yscale="log", xax="area_um", yax="tilt")
|
|
121
|
+
b = kde_instance.get_at(yscale="log", xax="area_um", yax="tilt")
|
|
122
|
+
|
|
123
|
+
assert np.all(a == b)
|
|
124
|
+
|
|
125
|
+
|
|
126
|
+
def test_kde_log_get_at_invalid():
|
|
127
|
+
ddict = example_data_dict(size=300, keys=["area_um", "deform"])
|
|
128
|
+
ddict["deform"][:20] = .1
|
|
129
|
+
ddict["area_um"][:20] = .5
|
|
130
|
+
ddict["deform"][21] = np.nan
|
|
131
|
+
ddict["deform"][22] = np.inf
|
|
132
|
+
ddict["deform"][23] = -.1
|
|
133
|
+
ds = dclab.new_dataset(ddict)
|
|
134
|
+
kde_instance = KernelDensityEstimator(ds)
|
|
135
|
+
a = kde_instance.get_at(xax="area_um", yax="deform", yscale="log")
|
|
136
|
+
assert np.all(a[:20] == a[0])
|
|
137
|
+
assert np.isnan(a[21])
|
|
138
|
+
assert np.isnan(a[22])
|
|
139
|
+
assert np.isnan(a[23])
|
|
140
|
+
|
|
141
|
+
|
|
142
|
+
def test_kde_get_at_positions():
|
|
143
|
+
ddict = example_data_dict()
|
|
144
|
+
ds = dclab.new_dataset(ddict)
|
|
145
|
+
|
|
146
|
+
kde_instance = KernelDensityEstimator(ds)
|
|
147
|
+
|
|
148
|
+
ds.config["filtering"]["enable filters"] = False
|
|
149
|
+
sc = kde_instance.get_at(xax="area_um", yax="deform")
|
|
150
|
+
sc2 = kde_instance.get_at(xax="area_um", yax="deform",
|
|
151
|
+
positions=(ds["area_um"], ds["deform"]))
|
|
152
|
+
assert np.all(sc == sc2)
|
|
153
|
+
|
|
154
|
+
|
|
155
|
+
def test_kde_log_get_at_out_of_bounds():
|
|
156
|
+
ddict = example_data_dict(size=300, keys=["area_um", "deform"])
|
|
157
|
+
ds = dclab.new_dataset(ddict)
|
|
158
|
+
kde_instance = KernelDensityEstimator(ds)
|
|
159
|
+
|
|
160
|
+
# Define a positions that has values outside the typical data range
|
|
161
|
+
# `area_um` ([0.0, 400]) and `deform` ([0.0, 0.02])
|
|
162
|
+
positions = ([410, 300, 300, 300],
|
|
163
|
+
[-1, -2, 0.01, 0.015])
|
|
164
|
+
|
|
165
|
+
# Get the density at the out-of-bounds position
|
|
166
|
+
a = kde_instance.get_at(xax="area_um", yax="deform",
|
|
167
|
+
positions=positions, yscale="log")
|
|
168
|
+
assert np.isnan(a[0])
|
|
169
|
+
assert np.isnan(a[1])
|
|
170
|
+
assert np.isfinite(a[2])
|
|
171
|
+
assert np.isfinite(a[3])
|
|
@@ -99,6 +99,21 @@ def test_false_method():
|
|
|
99
99
|
break
|
|
100
100
|
|
|
101
101
|
|
|
102
|
+
def test_percentiles():
|
|
103
|
+
ddict = example_data_dict(size=1_000, keys=["area_um", "deform"])
|
|
104
|
+
np.random.seed(42)
|
|
105
|
+
ddict["userdef1"] = np.random.random(1_000)
|
|
106
|
+
ds = dclab.new_dataset(ddict)
|
|
107
|
+
stats = dclab.statistics.get_statistics(ds, ret_dict=True)
|
|
108
|
+
for pp in [10, 25, 75, 90]:
|
|
109
|
+
# We have one thousand events in the userdef1 feature that are
|
|
110
|
+
# evenly distributed between 0 and 1. We allow an error of 5%
|
|
111
|
+
# relative to 1, which should be sufficient to capture the
|
|
112
|
+
# randomness.
|
|
113
|
+
assert np.allclose(stats[f"{pp}th Percentile User-defined 1"], pp/100,
|
|
114
|
+
rtol=0, atol=0.05)
|
|
115
|
+
|
|
116
|
+
|
|
102
117
|
def test_stats_without_features():
|
|
103
118
|
ddict = example_data_dict(size=5085, keys=["area_um", "deform"])
|
|
104
119
|
ds = dclab.new_dataset(ddict)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|