dcnum 0.27.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.
Files changed (143) hide show
  1. dcnum-0.27.3/.github/workflows/check.yml +44 -0
  2. dcnum-0.27.3/.github/workflows/deploy_pypi.yml +45 -0
  3. dcnum-0.27.3/.gitignore +162 -0
  4. dcnum-0.27.3/.readthedocs.yml +14 -0
  5. dcnum-0.27.3/CHANGELOG +412 -0
  6. dcnum-0.27.3/LICENSE +21 -0
  7. dcnum-0.27.3/PKG-INFO +65 -0
  8. dcnum-0.27.3/README.rst +35 -0
  9. dcnum-0.27.3/benchmark/.gitignore +3 -0
  10. dcnum-0.27.3/benchmark/Readme.md +17 -0
  11. dcnum-0.27.3/benchmark/benchmark.py +64 -0
  12. dcnum-0.27.3/benchmark/bm_logic_ctrl_job_runner.py +49 -0
  13. dcnum-0.27.3/benchmark/bm_segm_segmenter.py +93 -0
  14. dcnum-0.27.3/benchmark/bm_segm_segmenter_manager_thread.py +77 -0
  15. dcnum-0.27.3/benchmark/bm_write_chunk_writer.py +54 -0
  16. dcnum-0.27.3/benchmark/bm_write_queue_writer_thread.py +61 -0
  17. dcnum-0.27.3/docs/.gitignore +1 -0
  18. dcnum-0.27.3/docs/conf.py +86 -0
  19. dcnum-0.27.3/docs/extensions/github_changelog.py +75 -0
  20. dcnum-0.27.3/docs/index.rst +21 -0
  21. dcnum-0.27.3/docs/requirements.txt +9 -0
  22. dcnum-0.27.3/docs/sec_design.rst +88 -0
  23. dcnum-0.27.3/pyproject.toml +50 -0
  24. dcnum-0.27.3/setup.cfg +4 -0
  25. dcnum-0.27.3/src/dcnum/__init__.py +25 -0
  26. dcnum-0.27.3/src/dcnum/_version.py +34 -0
  27. dcnum-0.27.3/src/dcnum/common.py +15 -0
  28. dcnum-0.27.3/src/dcnum/feat/__init__.py +8 -0
  29. dcnum-0.27.3/src/dcnum/feat/event_extractor_manager_thread.py +151 -0
  30. dcnum-0.27.3/src/dcnum/feat/feat_background/__init__.py +7 -0
  31. dcnum-0.27.3/src/dcnum/feat/feat_background/base.py +243 -0
  32. dcnum-0.27.3/src/dcnum/feat/feat_background/bg_copy.py +35 -0
  33. dcnum-0.27.3/src/dcnum/feat/feat_background/bg_roll_median.py +327 -0
  34. dcnum-0.27.3/src/dcnum/feat/feat_background/bg_sparse_median.py +493 -0
  35. dcnum-0.27.3/src/dcnum/feat/feat_brightness/__init__.py +4 -0
  36. dcnum-0.27.3/src/dcnum/feat/feat_brightness/bright_all.py +132 -0
  37. dcnum-0.27.3/src/dcnum/feat/feat_brightness/common.py +9 -0
  38. dcnum-0.27.3/src/dcnum/feat/feat_contour/__init__.py +4 -0
  39. dcnum-0.27.3/src/dcnum/feat/feat_contour/contour.py +17 -0
  40. dcnum-0.27.3/src/dcnum/feat/feat_contour/moments.py +157 -0
  41. dcnum-0.27.3/src/dcnum/feat/feat_contour/volume.py +174 -0
  42. dcnum-0.27.3/src/dcnum/feat/feat_texture/__init__.py +3 -0
  43. dcnum-0.27.3/src/dcnum/feat/feat_texture/common.py +24 -0
  44. dcnum-0.27.3/src/dcnum/feat/feat_texture/tex_all.py +125 -0
  45. dcnum-0.27.3/src/dcnum/feat/gate.py +193 -0
  46. dcnum-0.27.3/src/dcnum/feat/queue_event_extractor.py +454 -0
  47. dcnum-0.27.3/src/dcnum/logic/__init__.py +8 -0
  48. dcnum-0.27.3/src/dcnum/logic/chunk_slot.py +226 -0
  49. dcnum-0.27.3/src/dcnum/logic/ctrl.py +840 -0
  50. dcnum-0.27.3/src/dcnum/logic/job.py +230 -0
  51. dcnum-0.27.3/src/dcnum/logic/json_encoder.py +28 -0
  52. dcnum-0.27.3/src/dcnum/logic/slot_register.py +116 -0
  53. dcnum-0.27.3/src/dcnum/logic/universal_worker.py +58 -0
  54. dcnum-0.27.3/src/dcnum/meta/__init__.py +3 -0
  55. dcnum-0.27.3/src/dcnum/meta/paths.py +31 -0
  56. dcnum-0.27.3/src/dcnum/meta/ppid.py +246 -0
  57. dcnum-0.27.3/src/dcnum/os_env_st.py +85 -0
  58. dcnum-0.27.3/src/dcnum/read/__init__.py +10 -0
  59. dcnum-0.27.3/src/dcnum/read/cache.py +199 -0
  60. dcnum-0.27.3/src/dcnum/read/const.py +20 -0
  61. dcnum-0.27.3/src/dcnum/read/detect_flicker.py +44 -0
  62. dcnum-0.27.3/src/dcnum/read/hdf5_concat.py +145 -0
  63. dcnum-0.27.3/src/dcnum/read/hdf5_data.py +629 -0
  64. dcnum-0.27.3/src/dcnum/read/mapped.py +100 -0
  65. dcnum-0.27.3/src/dcnum/segm/__init__.py +9 -0
  66. dcnum-0.27.3/src/dcnum/segm/segm_thresh.py +33 -0
  67. dcnum-0.27.3/src/dcnum/segm/segm_torch/__init__.py +23 -0
  68. dcnum-0.27.3/src/dcnum/segm/segm_torch/segm_torch_base.py +133 -0
  69. dcnum-0.27.3/src/dcnum/segm/segm_torch/segm_torch_mpo.py +74 -0
  70. dcnum-0.27.3/src/dcnum/segm/segm_torch/segm_torch_sto.py +121 -0
  71. dcnum-0.27.3/src/dcnum/segm/segm_torch/torch_model.py +129 -0
  72. dcnum-0.27.3/src/dcnum/segm/segm_torch/torch_postproc.py +93 -0
  73. dcnum-0.27.3/src/dcnum/segm/segm_torch/torch_preproc.py +115 -0
  74. dcnum-0.27.3/src/dcnum/segm/segmenter.py +437 -0
  75. dcnum-0.27.3/src/dcnum/segm/segmenter_manager_thread.py +83 -0
  76. dcnum-0.27.3/src/dcnum/segm/segmenter_mpo.py +354 -0
  77. dcnum-0.27.3/src/dcnum/segm/segmenter_sto.py +101 -0
  78. dcnum-0.27.3/src/dcnum/write/__init__.py +8 -0
  79. dcnum-0.27.3/src/dcnum/write/chunk_writer.py +83 -0
  80. dcnum-0.27.3/src/dcnum/write/event_stash.py +98 -0
  81. dcnum-0.27.3/src/dcnum/write/queue_writer_base.py +248 -0
  82. dcnum-0.27.3/src/dcnum/write/queue_writer_process.py +47 -0
  83. dcnum-0.27.3/src/dcnum/write/queue_writer_thread.py +9 -0
  84. dcnum-0.27.3/src/dcnum/write/writer.py +569 -0
  85. dcnum-0.27.3/src/dcnum.egg-info/PKG-INFO +65 -0
  86. dcnum-0.27.3/src/dcnum.egg-info/SOURCES.txt +141 -0
  87. dcnum-0.27.3/src/dcnum.egg-info/dependency_links.txt +1 -0
  88. dcnum-0.27.3/src/dcnum.egg-info/requires.txt +10 -0
  89. dcnum-0.27.3/src/dcnum.egg-info/top_level.txt +1 -0
  90. dcnum-0.27.3/tests/conftest.py +25 -0
  91. dcnum-0.27.3/tests/data/fmt-hdf5_cytoshot_extended-moments-features.zip +0 -0
  92. dcnum-0.27.3/tests/data/fmt-hdf5_cytoshot_full-features_2023.zip +0 -0
  93. dcnum-0.27.3/tests/data/fmt-hdf5_cytoshot_full-features_2024.zip +0 -0
  94. dcnum-0.27.3/tests/data/fmt-hdf5_cytoshot_full-features_legacy_allev_2023.zip +0 -0
  95. dcnum-0.27.3/tests/data/fmt-hdf5_shapein_empty.zip +0 -0
  96. dcnum-0.27.3/tests/data/fmt-hdf5_shapein_raw-with-variable-length-logs.zip +0 -0
  97. dcnum-0.27.3/tests/data/segm-torch-model_unet-dcnum-test_g1_910c2.zip +0 -0
  98. dcnum-0.27.3/tests/data/segm-torch-model_unet-dcnum-test_g2_17ec6.zip +0 -0
  99. dcnum-0.27.3/tests/data/segm-torch-test-data_unet-dcnum-test_g1_910c2.zip +0 -0
  100. dcnum-0.27.3/tests/helper_methods.py +103 -0
  101. dcnum-0.27.3/tests/requirements.txt +2 -0
  102. dcnum-0.27.3/tests/test_common_join.py +44 -0
  103. dcnum-0.27.3/tests/test_feat_background_base.py +159 -0
  104. dcnum-0.27.3/tests/test_feat_background_bg_copy.py +78 -0
  105. dcnum-0.27.3/tests/test_feat_background_bg_roll_median.py +237 -0
  106. dcnum-0.27.3/tests/test_feat_background_bg_sparsemed.py +408 -0
  107. dcnum-0.27.3/tests/test_feat_brightness.py +50 -0
  108. dcnum-0.27.3/tests/test_feat_event_extractor_manager.py +76 -0
  109. dcnum-0.27.3/tests/test_feat_gate.py +191 -0
  110. dcnum-0.27.3/tests/test_feat_haralick.py +115 -0
  111. dcnum-0.27.3/tests/test_feat_moments_based.py +348 -0
  112. dcnum-0.27.3/tests/test_feat_moments_based_extended.py +54 -0
  113. dcnum-0.27.3/tests/test_feat_volume.py +199 -0
  114. dcnum-0.27.3/tests/test_init.py +7 -0
  115. dcnum-0.27.3/tests/test_logic_chunk_slot.py +87 -0
  116. dcnum-0.27.3/tests/test_logic_job.py +105 -0
  117. dcnum-0.27.3/tests/test_logic_json.py +21 -0
  118. dcnum-0.27.3/tests/test_logic_pipeline.py +1352 -0
  119. dcnum-0.27.3/tests/test_meta_paths.py +42 -0
  120. dcnum-0.27.3/tests/test_meta_ppid_base.py +147 -0
  121. dcnum-0.27.3/tests/test_meta_ppid_bg.py +61 -0
  122. dcnum-0.27.3/tests/test_meta_ppid_data.py +45 -0
  123. dcnum-0.27.3/tests/test_meta_ppid_feat.py +24 -0
  124. dcnum-0.27.3/tests/test_meta_ppid_gate.py +24 -0
  125. dcnum-0.27.3/tests/test_meta_ppid_segm.py +60 -0
  126. dcnum-0.27.3/tests/test_read_basin.py +214 -0
  127. dcnum-0.27.3/tests/test_read_cache.py +82 -0
  128. dcnum-0.27.3/tests/test_read_concat_hdf5.py +127 -0
  129. dcnum-0.27.3/tests/test_read_detect_flicker.py +87 -0
  130. dcnum-0.27.3/tests/test_read_hdf5.py +406 -0
  131. dcnum-0.27.3/tests/test_read_hdf5_basins.py +343 -0
  132. dcnum-0.27.3/tests/test_read_hdf5_concat.py +29 -0
  133. dcnum-0.27.3/tests/test_read_hdf5_index_mapping.py +101 -0
  134. dcnum-0.27.3/tests/test_segm_base.py +141 -0
  135. dcnum-0.27.3/tests/test_segm_mpo.py +359 -0
  136. dcnum-0.27.3/tests/test_segm_no_mask_proc.py +52 -0
  137. dcnum-0.27.3/tests/test_segm_sto.py +294 -0
  138. dcnum-0.27.3/tests/test_segm_thresh.py +136 -0
  139. dcnum-0.27.3/tests/test_segm_torch.py +246 -0
  140. dcnum-0.27.3/tests/test_segm_torch_preproc.py +90 -0
  141. dcnum-0.27.3/tests/test_write_chunk_writer.py +48 -0
  142. dcnum-0.27.3/tests/test_write_queue_writer_thread.py +141 -0
  143. dcnum-0.27.3/tests/test_write_writer.py +509 -0
@@ -0,0 +1,44 @@
1
+ name: Checks
2
+
3
+ on:
4
+ push:
5
+ pull_request:
6
+
7
+ jobs:
8
+ build:
9
+
10
+ runs-on: ${{ matrix.os }}
11
+ strategy:
12
+ matrix:
13
+ python-version: ['3.10', '3.13']
14
+ os: [macos-latest, ubuntu-latest, windows-latest]
15
+ fail-fast: false
16
+ timeout-minutes: 30
17
+
18
+ steps:
19
+ - uses: actions/checkout@main
20
+ with:
21
+ fetch-depth: 0
22
+ - name: Set up Python ${{ matrix.python-version }}
23
+ uses: actions/setup-python@main
24
+ with:
25
+ python-version: ${{ matrix.python-version }}
26
+ - name: Install dependencies
27
+ run: |
28
+ # prerequisites
29
+ python -m pip install --upgrade pip wheel
30
+ python -m pip install coverage flake8 pytest
31
+ - name: Install dcnum
32
+ run: |
33
+ pip install .[torch]
34
+ - name: List installed packages
35
+ run: |
36
+ pip freeze
37
+ - name: Lint with flake8
38
+ run: |
39
+ flake8 --exclude _version.py .
40
+ - name: Test with pytest
41
+ run: |
42
+ coverage run --source=dcnum -m pytest tests
43
+ - name: Upload coverage to Codecov
44
+ uses: codecov/codecov-action@v4
@@ -0,0 +1,45 @@
1
+ name: Release to PyPI
2
+
3
+ on:
4
+ push:
5
+ tags:
6
+ - '*'
7
+
8
+ jobs:
9
+ build_sdist:
10
+ name: Build source distribution
11
+ runs-on: ubuntu-latest
12
+ steps:
13
+ - uses: actions/checkout@main
14
+ with:
15
+ fetch-depth: 0
16
+
17
+ - name: Build sdist
18
+ run: pipx run build --sdist
19
+
20
+ - name: publish
21
+ env:
22
+ TWINE_USERNAME: __token__
23
+ TWINE_PASSWORD: ${{ secrets.PYPI_PWD }}
24
+ run: |
25
+ pipx install twine
26
+ twine upload --skip-existing dist/*
27
+
28
+ build_wheels:
29
+ name: Build wheel
30
+ runs-on: ubuntu-latest
31
+ steps:
32
+ - uses: actions/checkout@main
33
+ with:
34
+ fetch-depth: 0
35
+
36
+ - name: Build sdist
37
+ run: pipx run build --wheel
38
+
39
+ - name: publish
40
+ env:
41
+ TWINE_USERNAME: __token__
42
+ TWINE_PASSWORD: ${{ secrets.PYPI_PWD }}
43
+ run: |
44
+ pipx install twine
45
+ twine upload --skip-existing dist/*
@@ -0,0 +1,162 @@
1
+ # Byte-compiled / optimized / DLL files
2
+ __pycache__/
3
+ *.py[cod]
4
+ *$py.class
5
+
6
+ # C extensions
7
+ *.so
8
+
9
+ # Distribution / packaging
10
+ .Python
11
+ build/
12
+ develop-eggs/
13
+ dist/
14
+ downloads/
15
+ eggs/
16
+ .eggs/
17
+ lib/
18
+ lib64/
19
+ parts/
20
+ sdist/
21
+ var/
22
+ wheels/
23
+ share/python-wheels/
24
+ *.egg-info/
25
+ .installed.cfg
26
+ *.egg
27
+ MANIFEST
28
+
29
+ # PyInstaller
30
+ # Usually these files are written by a python script from a template
31
+ # before PyInstaller builds the exe, so as to inject date/other infos into it.
32
+ *.manifest
33
+ *.spec
34
+
35
+ # Installer logs
36
+ pip-log.txt
37
+ pip-delete-this-directory.txt
38
+
39
+ # Unit test / coverage reports
40
+ htmlcov/
41
+ .tox/
42
+ .nox/
43
+ .coverage
44
+ .coverage.*
45
+ .cache
46
+ nosetests.xml
47
+ coverage.xml
48
+ *.cover
49
+ *.py,cover
50
+ .hypothesis/
51
+ .pytest_cache/
52
+ cover/
53
+
54
+ # Translations
55
+ *.mo
56
+ *.pot
57
+
58
+ # Django stuff:
59
+ *.log
60
+ local_settings.py
61
+ db.sqlite3
62
+ db.sqlite3-journal
63
+
64
+ # Flask stuff:
65
+ instance/
66
+ .webassets-cache
67
+
68
+ # Scrapy stuff:
69
+ .scrapy
70
+
71
+ # Sphinx documentation
72
+ docs/_build/
73
+
74
+ # PyBuilder
75
+ .pybuilder/
76
+ target/
77
+
78
+ # Jupyter Notebook
79
+ .ipynb_checkpoints
80
+
81
+ # IPython
82
+ profile_default/
83
+ ipython_config.py
84
+
85
+ # pyenv
86
+ # For a library or package, you might want to ignore these files since the code is
87
+ # intended to run in multiple environments; otherwise, check them in:
88
+ # .python-version
89
+
90
+ # pipenv
91
+ # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
92
+ # However, in case of collaboration, if having platform-specific dependencies or dependencies
93
+ # having no cross-platform support, pipenv may install dependencies that don't work, or not
94
+ # install all needed dependencies.
95
+ #Pipfile.lock
96
+
97
+ # poetry
98
+ # Similar to Pipfile.lock, it is generally recommended to include poetry.lock in version control.
99
+ # This is especially recommended for binary packages to ensure reproducibility, and is more
100
+ # commonly ignored for libraries.
101
+ # https://python-poetry.org/docs/basic-usage/#commit-your-poetrylock-file-to-version-control
102
+ #poetry.lock
103
+
104
+ # pdm
105
+ # Similar to Pipfile.lock, it is generally recommended to include pdm.lock in version control.
106
+ #pdm.lock
107
+ # pdm stores project-wide configurations in .pdm.toml, but it is recommended to not include it
108
+ # in version control.
109
+ # https://pdm.fming.dev/#use-with-ide
110
+ .pdm.toml
111
+
112
+ # PEP 582; used by e.g. github.com/David-OConnor/pyflow and github.com/pdm-project/pdm
113
+ __pypackages__/
114
+
115
+ # Celery stuff
116
+ celerybeat-schedule
117
+ celerybeat.pid
118
+
119
+ # SageMath parsed files
120
+ *.sage.py
121
+
122
+ # Environments
123
+ .env
124
+ .venv
125
+ env/
126
+ venv/
127
+ ENV/
128
+ env.bak/
129
+ venv.bak/
130
+
131
+ # Spyder project settings
132
+ .spyderproject
133
+ .spyproject
134
+
135
+ # Rope project settings
136
+ .ropeproject
137
+
138
+ # mkdocs documentation
139
+ /site
140
+
141
+ # mypy
142
+ .mypy_cache/
143
+ .dmypy.json
144
+ dmypy.json
145
+
146
+ # Pyre type checker
147
+ .pyre/
148
+
149
+ # pytype static type analyzer
150
+ .pytype/
151
+
152
+ # Cython debug symbols
153
+ cython_debug/
154
+
155
+ # PyCharm
156
+ # JetBrains specific template is maintained in a separate JetBrains.gitignore that can
157
+ # be found at https://github.com/github/gitignore/blob/main/Global/JetBrains.gitignore
158
+ # and can be added to the global gitignore or merged into this file. For a more nuclear
159
+ # option (not recommended) you can uncomment the following to ignore the entire idea folder.
160
+ .idea/
161
+
162
+ _version.py
@@ -0,0 +1,14 @@
1
+ version: 2
2
+ formats:
3
+ - pdf
4
+ build:
5
+ os: ubuntu-22.04
6
+ tools:
7
+ python: "3.11"
8
+ sphinx:
9
+ configuration: docs/conf.py
10
+ python:
11
+ install:
12
+ - requirements: docs/requirements.txt
13
+ - method: pip
14
+ path: .
dcnum-0.27.3/CHANGELOG ADDED
@@ -0,0 +1,412 @@
1
+ 0.27.3
2
+ - ref: remove scikit-image dependency
3
+ 0.27.2
4
+ - setup: update dependency scipy >= 1.15.2
5
+ - setup: add upper version bound for dependencies
6
+ 0.27.1
7
+ - enh: optimize torchsto segmentation (batch size, threshold on GPU)
8
+ - enh: add info logging for segmenters
9
+ 0.27.0
10
+ - meta: increment DCNUM_PPID_GENERATION (segmentation with background, #47)
11
+ - fix: wrong `bg_off` background correction for segmentation (#47)
12
+ - fix: set maximum chunk size for writing to 1000 (speed)
13
+ - enh: align `HDF5ImageCache` chunk size to the underlying `h5py.Dataset` (#5)
14
+ - enh: load image data to shared arrays with `UniversalWorker` (#31)
15
+ - enh: use shared arrays for segmentation (#31)
16
+ - enh: improved start-up speed for MPO segmenters
17
+ - enh: add `image_chunk_size` argument for `HDF5Data`
18
+ - enh: quantify waiting times in pipeline steps
19
+ - enh: loading data from disk is done in a separate thread
20
+ - enh: globally increase the number of slots to 7
21
+ - enh: more accurate timing statistics
22
+ - enh: use `np.asarray` instead of `np.array` where possible (speed-up)
23
+ - enh: increase efficiency for label postprocessing (speed-up)
24
+ - bmk: add benchmarks for short pipeline run and segmenter manager thread
25
+ - ref: remove unused `start`/`stop` kwargs for `segment_batch`
26
+ - ref: make `segment_chunk` accept a `ChunkSlot` instance
27
+ - ref: remove deprecated `path` keyword argument for `HDF5Writer`
28
+ - ref: introduce "chunk slot register" architecture which encompasses
29
+ the new classes `SlotRegister`, `ChunkSlot` and `UniversalWorker`
30
+ - ref: rename `join_thread_helper` to `join_worker`
31
+ - ref: `QueueEventExtractor` fetches preloaded labels from `ChunkSlot`
32
+ - ref: rename `process_mask` to `process_labels`
33
+ 0.26.0
34
+ - feat: data writing is now done in a separate process (#32)
35
+ - fix: `create_with_basins` should not add internal basins, but register them
36
+ - fix: ignore existing identical scalar features in `copy_features`
37
+ - enh: allow passing compression options via `DCNumPipelineJob`
38
+ - ref: migrate classes in `write` module to individual files
39
+ - ref: rename `DequeueWriterThread` to `ChunkWriter`
40
+ - ref: rename `QueueCollectorThread` to `QueueWriterThread`
41
+ - ref: use `multiprocessing.Value` `write_queue_size` to communicate
42
+ writer queue size to `EventExtractorManagerThread`
43
+ - ref: instantiate `ChunkWriter` in `QueueWriterBase.run`
44
+ - ref: add `common` submodule
45
+ - ref: remove deprecated `no_basins_in_output` argument for `DCNumPipelineJob`
46
+ 0.25.11
47
+ - enh: align measurement identifier computation with that of dclab
48
+ - enh: new `get_measurement_identifier` method
49
+ - enh: allow to optionally store measurement identifier in basin metadata
50
+ - enh: measurement identifier check for basin data
51
+ 0.25.10
52
+ - fix: search for validation strings in logs did not use re.MULTILINE
53
+ - enh: allow to validate torch model applicability based on meta values
54
+ 0.25.9
55
+ - fix: md5 sum caused PermissionError on Windows for background computation
56
+ 0.25.8
57
+ - fix: invalid type definition for `concatenated_hdf5_data`
58
+ - enh: make sure `HDF5Data.path` is converted to `pathlib.Path` if it is `str`
59
+ - docs: properly employ license MIT
60
+ - ref: move `concatenated_hdf5_data` to `read.hdf5_concat` submodule
61
+ 0.25.7
62
+ - enh: `HDF5Writer.store_log` returns created dataset
63
+ - docs: add code reference using apidoc
64
+ 0.25.6
65
+ - maintenance release
66
+ 0.25.5
67
+ - enh: support unnamed table data in `HDF5Data`
68
+ - setup: pin scipy<1.15 due to https://github.com/scipy/scipy/issues/22333
69
+ 0.25.4
70
+ - enh: support passing a single file to `concatenated_hdf5_data`
71
+ 0.25.3
72
+ - enh: request single threaded operations when going into mp.Process (#17)
73
+ - enh: new module `dcnum.single_thread_osenv`
74
+ 0.25.2
75
+ - setup: officially support numpy 2
76
+ - setup: pin dependencies
77
+ 0.25.1
78
+ - fix: catch ValueError when computing relative path on different anchors
79
+ - ref: replace np.string_ with np.bytes_
80
+ - ref: remove unused `data` argument to QueueCollectorThread
81
+ - ref: minor speed-up for QueueCollectorThread
82
+ 0.25.0
83
+ - feat: identify flickering in raw data via dcnum.read.detect_flickering
84
+ - fix: handle out-of-bounds slice indexing for BaseImageChunkCache
85
+ - fix: np.bool_ and np.floating not recognized in PPID parsing
86
+ 0.24.0
87
+ - feat: add support for internal basins
88
+ - feat: "image_bg" as internal basin for "sparsemed" background computer
89
+ - fix: "sparsmed" background computer attributed background images with
90
+ an offset of `split_time` (the fist event obtained the background image
91
+ of the first event of the first second and so on)
92
+ - enh: support numpy indexing for mapped basins
93
+ - enh: add new `write.copy_basins` method
94
+ - ref: return `h5py.Group` in `HDF5Data.get_basin_data` instead of
95
+ a basin `HDF5Data` instance
96
+ - ref: perform "plumbing" before "cleanup" in pipeline
97
+ - ref: increment DCNUM_PPID_GENERATION to 11
98
+ 0.23.4
99
+ - enh: run set_num_interop_threads(1) for torchmpo segmenter
100
+ 0.23.3
101
+ - fix: ignore non-file-type-like basins
102
+ - fix: workaround for slow reading from HDF5 (don't use index arrays)
103
+ - fix: avoid excessive stalling when writer is slow
104
+ 0.23.2
105
+ - enh: add DCNumPipelineJob.validate method
106
+ - enh: list Python libraries used in job log
107
+ - setup: change required pytorch version from 2.3 to 2.2 (hardware support)
108
+ 0.23.1
109
+ - enh: support passing custom default arguments to get_class_method_info
110
+ - tests: fix torch preprocessing tests
111
+ 0.23.0
112
+ - feat: implement segmentation using PyTorch models
113
+ - fix: always compute image_bg if it is not in the input file
114
+ - enh: introduce `Segmenter.validate_applicability` method
115
+ 0.22.1
116
+ - fix: compute pipeline identifier of origin dataset for basin mapping
117
+ 0.22.0
118
+ - fix: GPUSegmenter did not perform mask postprocessing
119
+ (this was not actually fixed in 0.21.0)
120
+ - tests: implement mock STO segmenter for testing (#3)
121
+ - tests: add tests for bg_off in segmentation
122
+ - ref: increment DCNUM_PPID_GENERATION to 10
123
+ - ref: renamed CPUSegmenter to MPOSegmenter
124
+ - ref: renamed GPUSegmenter to STOSegmenter
125
+ 0.21.4
126
+ - fix: division by zero error when computing stall time
127
+ 0.21.3
128
+ - fix: negative stall time in log messages
129
+ 0.21.2
130
+ - fix: negative argument for time.sleep
131
+ 0.21.1
132
+ - enh: support boolean images in mask postprocessing
133
+ 0.21.0
134
+ - ref: enable mask postprocessing by default for all segmenters
135
+ - ref: increment DCNUM_PPID_GENERATION to 9
136
+ 0.20.4
137
+ - fix: slot_chunks were not performed in increasing order, making it
138
+ impossible for writer to continue writing and consequent OOM
139
+ - enh: reserve one CPU for writer thread and control logic
140
+ - enh: disentangle logging and debugging keyword arguments
141
+ - enh: do not initialize slot_chunks and slot_states with lock
142
+ 0.20.3
143
+ - enh: improve strategy for stalling for slow writer
144
+ 0.20.2
145
+ - ref: remove __init__ from SegmentThresh
146
+ 0.20.1
147
+ - fix: relative basin locations not written correctly
148
+ - enh: increase deque size threshold for waiting for writer
149
+ 0.20.0
150
+ - feat: support reading mapped basins
151
+ - feat: support writing mapped-basin-based output files
152
+ - fix: copy "bg_off" data to output file when copying background data
153
+ - enh: allow to slice BaseImageChunkCache
154
+ - enh: sort logs, tables and basins for reproducible access
155
+ - enh: add more timing information in logs
156
+ - ref: background progress value is now a double between 0 and 1
157
+ 0.19.1
158
+ - enh: support steps when specifying data slices in `index_mapping`
159
+ 0.19.0
160
+ - enh: elevate `HDF5Data`s `index_mapping` to pipeline identifier status
161
+ (this changes the pipeline identifier)
162
+ - enh: improve sanity checks for `BackgroundRollMed`
163
+ 0.18.0
164
+ - BREAKING CHANGE: mask postprocessing did a morphological opening instead
165
+ of a morphological closing, failing to remove spurious noise
166
+ - BREAKING CHANGE: perform first fill_holes and then closing_disk in mask
167
+ postprocessing
168
+ - feat: allow to specify ranges when creating an HDF5Data instance to
169
+ enable e.g. processing only a portion of an input file
170
+ - feat: volume computation via contour revolve algorithm (#23)
171
+ - feat: background offset (flickering) correction via the
172
+ "offset_correction" keyword for the "sparsemed" background computer
173
+ and "bg_off" everywhere else
174
+ - enh: allow creating HDF5Writer from h5py.File
175
+ - fix: mask postprocessing did a morphological opening instead
176
+ of a morphological closing, failing to remove spurious noise
177
+ - fix: remove mask ppid part for segmenters that do not use it
178
+ - fix: mask postprocessing with "fill_holes" using `cv2.floodFill`
179
+ sometimes segmented the entire frame if the upper left pixel was not
180
+ set to background
181
+ - enh: perform first fill_holes and then closing_disk in mask
182
+ postprocessing
183
+ - enh: pop read-cache items before adding a new one
184
+ - enh: allow to request the raw contour from `moments_based_features`
185
+ - ref: increment DCNUM_PPID_GENERATION to 8
186
+ - ref: added new super class `BaseImageChunkCache`
187
+ - ref: use HDF5Writer in Background class
188
+ - ref: minor cleanup
189
+ - ref: rename submodule `feat_moments` to `feat_contour`
190
+ - ref: remove unused `name` property from `Background` class
191
+ 0.17.2
192
+ - fix: make sure unsupported features are not propagated in
193
+ `concatenated_hdf5_data` (#27)
194
+ 0.17.1
195
+ - ref: remove "bg_med" and "index_online" from protected scalar features,
196
+ because "bg_med" may change due to a different background computation
197
+ method and "index_online" enumerates events from online segmentation
198
+ 0.17.0
199
+ - feat: allow to register topical search paths
200
+ - ref: remove deprecated `get_ppid_from_kwargs` methods
201
+ - ref: remove deprecated `preselect` and `ptp_median` keyword
202
+ arguments from `QueueEventExtractor`
203
+ - ref: remove deprecated "key" from `get_class_method_info` info dict
204
+ - ref: issue UserWarning instead of DeprecationWarning when checking
205
+ segmenter keyword arguments
206
+ - ref: remove pixel size check for HDF5 data
207
+ - ref: remove unused `_get_model_file` from GPUSegmenter
208
+ 0.16.8
209
+ - fix: correctly set number of workers for CPUSegmenter
210
+ - enh: update list of environment variables that should be set to
211
+ disable multithreading in subprocesses
212
+ 0.16.7
213
+ - fix: if the writer dequeue fills up, stall the feature extractor
214
+ - enh: optimize DequeWriterThread loop
215
+ - enh: minor optimization in HDF5Writer.require_feature
216
+ 0.16.6
217
+ - fix: correctly handle mask images with no background on border
218
+ - fix: enforce user-defined features in concatenated_hdf5_data
219
+ - fix: Gate.features returned duplicate entries
220
+ - ref: cache empty border image creation for clear_border
221
+ - ref: rename internal background worker classes
222
+ - ref: simplify Gate initialization
223
+ - ref: Gate instance does not have to keep a reference to the data
224
+ - ref: better box_gates management for Gate class
225
+ - tests: increase coverage
226
+ 0.16.5
227
+ - fix: replace unreliable Queue.empty and Queue.qsize (macOS support)
228
+ 0.16.4
229
+ - fix: there was no progress for background copying
230
+ - enh: detect data files that contain no events
231
+ - tests: add test for sparsemed bg worker
232
+ - tests: add test for logic json encoder
233
+ 0.16.3
234
+ - enh: define valid DCNumJobRunner state
235
+ - enh: more robust computation of progress
236
+ - enh: use HDF5Data when loading input data for background computation
237
+ - enh: automatically split segmenters and extractors equally
238
+ - ref: reduce default image cache size from 5 to 2
239
+ - ref: move dataset generation default kwargs to writer submodule
240
+ - ref: warn above 0.5% of discarded events in EventExtractorManagerThread
241
+ 0.16.2
242
+ - fix: ignore empty HDF5 datasets when copying metadata
243
+ - fix: logging from subprocesses did not work as expected
244
+ - enh: warn user about total number of invalid masks
245
+ - enh: introduce DCNumJobRunner.error_tb for errors happening in threads
246
+ - enh: improve logging verbosity
247
+ - enh: append job information as log entry in DCNumJobRunner output file
248
+ - enh: set chunk size for all feature data to 1MiB in HDF5Writer
249
+ - ref: removed close_queues argument from EventExtractor init
250
+ - ref: rename event_count with image_count in background computation
251
+ - ref: do not print anything to stdout when computing background data
252
+ - ref: use data from background computer in DCNumJobRunner.get_status
253
+ 0.16.1
254
+ - fix: when checking for ppid kwargs, allow kwargs defined in `__init__`
255
+ - ref: use kwonly arguments for segmenter `__init__` method
256
+ - tests: set environment variables so that libraries use one thread only
257
+ 0.16.0
258
+ - feat: implement "copy" background class
259
+ - fix: handle small kernel size before background computation (#16)
260
+ - fix: update experiment:run identifier for dclab-user convenience
261
+ - fix: make sure output directory exists for pipeline job
262
+ - fix: forward debugging flag to SegmenterManagerThread
263
+ - ref: reduced minimum frame count for rolling median background
264
+ computation to kernel size
265
+ 0.15.0
266
+ - BREAKING CHANGE: Remove preselection capabilities, because it is not
267
+ well integrated into the pipeline. For more information, please see
268
+ issue #15.
269
+ - feat: introduce logic submodule for running pipelines
270
+ - feat: implement HDF5Writer.store_log
271
+ - enh: add Segmenter.hardware_processor property
272
+ - enh: introduce pipeline identifier for data pixel size
273
+ - enh: reduce pixel_size accuracy to 8 digits after the decimal point
274
+ for pipeline reproducibility
275
+ - enh: warn the user when creating a basin-based file without basin paths
276
+ - ref: deprecate pixel size correction in HDF5Data
277
+ - ref: increment DCNUM_PPID_GENERATION to 7
278
+ - ref: several changes and deprecations in the PPID helper functions
279
+ - build: change flat-layout to src-layout (issues with editable installs)
280
+ 0.14.0
281
+ - fix: protected features (e.g. time, frame) were not included in ouptut
282
+ files when the input file was basin-based
283
+ - ref: increment DCNUM_PPID_GENERATION to 6
284
+ 0.13.3
285
+ - fix: correctly raise KeyError for missing image-based feature from
286
+ `HDF5Data._image_cache`
287
+ 0.13.2
288
+ - fix: properly convert variable-length string logs in `copy_metadata`
289
+ 0.13.1
290
+ - fix: wrong event count in logs
291
+ - ref: np.product is deprecated in numpy 2.0
292
+ 0.13.0
293
+ - feat: support writing file-based HDF5 basins (#11)
294
+ - feat: support reading file-based HDF5 basins (#11)
295
+ - feat: implement `create_with_basins` convenience method (#11)
296
+ - fix: correctly support passing an ndarray to BackgroundSparseMed
297
+ instead of an input file path
298
+ - fix: BackgroundSparseMed did not work for datasets of length < 100
299
+ - fix: bad f-string in BackgroundSparseMed
300
+ - enh: create a default basin-based output file for background computation
301
+ - ref: unite initialization code of background computers in base class
302
+ - ref: define context managers of background computers in base class
303
+ - ref: remove functools.cache decorator from HDF5Data
304
+ - tests: add tests for BackgroundSparseMed
305
+ 0.12.3
306
+ - fix: background computation with sparsemed did not work
307
+ - enh: support passing paths as strings to Background class
308
+ 0.12.2
309
+ - enh: more efficient computation of inert_ratio_prnc feature (#6)
310
+ - enh: more efficient computation of tilt feature (#6)
311
+ - enh: feature computation for area_um_raw, deform_raw, eccentr_prnc,
312
+ per_ratio, and per_um_raw
313
+ - ref: increment DCNUM_PPID_GENERATION to 5
314
+ 0.12.1
315
+ - fix: avoid NaN-valued features due to invalid contours (#9)
316
+ - ref: increment DCNUM_PPID_GENERATION to 4
317
+ 0.12.0
318
+ - ref: always use "spawn" for creating new processes to avoid race
319
+ conditions with Python threading.Lock upon forking on POSIX
320
+ - enh: some multiprocessing values in CPUSegmenter can be raw
321
+ 0.11.13
322
+ - enh: wait for event queue to empty before attempting to join
323
+ QueueEventExtractor processes
324
+ 0.11.12
325
+ - enh: explicitly close event queue in QueueEventExtractor
326
+ 0.11.11
327
+ - fix: QueueCollectorThread hangs indefinitely because of a missing
328
+ EventStash.is_complete check
329
+ - tests: increase coverage for queue_collector_thread submodule
330
+ 0.11.10
331
+ - fix: GPUSegmenter does not remove model_file from passed kwargs anymore
332
+ 0.11.9
333
+ - fix: properly support table data of length 1
334
+ - tests: make sure all segmenters have clear type definitions
335
+ 0.11.8
336
+ - reg: do not close the background thread of the event queue
337
+ 0.11.7
338
+ - enh: add more debugging messages for feature extraction workers
339
+ 0.11.6
340
+ - enh: add more debugging messages for feature extraction workers
341
+ 0.11.5
342
+ - setup: fix bad package discovery
343
+ 0.11.4
344
+ - fix: properly handle empty logs
345
+ 0.11.3
346
+ - fix: make sure values in tables dictionary are one-dimensional
347
+ 0.11.2
348
+ - meta: increment pipeline ID (texture feature computation)
349
+ - fix: HDF5Data was not pickable
350
+ - fix: HDF5Data did not properly handle tables
351
+ - enh: add context manager for CPUSegmenter
352
+ - enh: record and log execution time of segmentation and feature extraction
353
+ - enh: properly handle border case for computing contour-moments
354
+ - enh: properly handle empty images/masks in haralick texture features
355
+ - tests: do not use numba's JIT during testing (coverage)
356
+ 0.11.1
357
+ - fix: fix GPUSegmenter labeling
358
+ 0.11.0
359
+ - feat: introduce GPUSegmenter base class
360
+ - fix: handle bytes-values in HDF5 attributes
361
+ - ref: correctly introduce `requires_background_correction` for segmenters
362
+ - setup: don't requrie cibuildwheel
363
+ 0.10.0
364
+ - enh: some minor improvements in efficiency
365
+ - ref: increment DCNUM_PPID_GENERATION for the sake of clarity
366
+ - ref: unify dealing with num_workers and debugging
367
+ 0.0.9
368
+ - fix: properly propagate event extraction keyword arguments
369
+ - fix: QueueCollectorThread used uint16 for enumerating indices
370
+ - fix: handle case where number of events is not multiple of chunk_size
371
+ - enh: reduce thread waiting times
372
+ - enh: add bounds check for image cache
373
+ 0.0.8
374
+ - feat: introduce QueueCollectorThread
375
+ - feat: introduce SegmenterManagerThread
376
+ - feat: instroduce EventExtractorManagerThread and corresponding workers
377
+ - enh: minor improvements for HDF5ImageCache and ImageCorrCache
378
+ - enh: use data size as cache size if smaller than requested chunk size
379
+ - enh: return dictionary for brightness feature computation
380
+ - enh: allow to pass a single image for brightness feature computation
381
+ - enh: allow to pass a single image for texture feature computation
382
+ - enh: make sure that masks are written as uint8 to HDF5 files
383
+ - ref: haralick texture computation now returns dict instead of recarray
384
+ - ref: renamed HDF5WriterThread to DequeWriterThread
385
+ - ref: renamed feature submodules (prepended "feat_")
386
+ 0.0.7
387
+ - enh: dataset keyword arguments and mode HDF5WriterThread
388
+ - enh: speed-up of brightness feature computation
389
+ 0.0.6
390
+ - feat: add HDF5Writer and HDF5WriterThread classes in write submodule
391
+ - feat: segmenters compute labeled images instead of masks
392
+ - enh: introduce iter_chunks for cached image data
393
+ - ref: do not filter for contour length
394
+ - ref: rename feat.background.get_available_background_methods
395
+ - ref: store PPID information in dataset metadata instead of "user" section
396
+ 0.0.5
397
+ - enh: allow to set image_cache_size in HDF5Data
398
+ - enh: allow to easily register new custom segmenters
399
+ - ref: CPUSegmenter has its own submodule now
400
+ 0.0.4
401
+ - feat: introduce HDF5 virtual dataset path concatenator
402
+ - enh: allow to pass h5py.File object to HDF5Data
403
+ - fix: typo in logging statement for sparse median bg computation
404
+ 0.0.3
405
+ - feat: introduce median background computation
406
+ - feat: introduce data reader
407
+ - feat: introduce thresholding segmenter
408
+ - feat: introduce brightness, haralick texture, and moments-based features
409
+ 0.0.2
410
+ - first automated release
411
+ 0.0.1
412
+ - stub release
dcnum-0.27.3/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2023 Paul Müller
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.