dcscope 2.26.3__tar.gz → 2.27.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.
Files changed (500) hide show
  1. {dcscope-2.26.3 → dcscope-2.27.0}/.github/workflows/check.yml +4 -2
  2. {dcscope-2.26.3 → dcscope-2.27.0}/.github/workflows/deploy_github.yml +1 -1
  3. {dcscope-2.26.3 → dcscope-2.27.0}/.github/workflows/deploy_pypi.yml +1 -1
  4. {dcscope-2.26.3 → dcscope-2.27.0}/CHANGELOG +18 -0
  5. {dcscope-2.26.3 → dcscope-2.27.0}/MANIFEST.in +1 -1
  6. {dcscope-2.26.3/dcscope.egg-info → dcscope-2.27.0}/PKG-INFO +2 -2
  7. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/_version.py +3 -3
  8. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/analysis/ana_basins.py +26 -25
  9. dcscope-2.27.0/dcscope/gui/analysis/ana_basins_ui.py +93 -0
  10. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/analysis/ana_filter.py +64 -63
  11. dcscope-2.27.0/dcscope/gui/analysis/ana_filter_ui.py +210 -0
  12. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/analysis/ana_log.py +26 -27
  13. dcscope-2.27.0/dcscope/gui/analysis/ana_log_ui.py +70 -0
  14. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/analysis/ana_meta.py +21 -21
  15. dcscope-2.27.0/dcscope/gui/analysis/ana_meta_ui.py +99 -0
  16. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/analysis/ana_plot.py +239 -191
  17. dcscope-2.27.0/dcscope/gui/analysis/ana_plot_ui.py +502 -0
  18. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/analysis/ana_slot.py +162 -163
  19. dcscope-2.27.0/dcscope/gui/analysis/ana_slot_ui.py +342 -0
  20. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/analysis/ana_tables.py +55 -53
  21. dcscope-2.27.0/dcscope/gui/analysis/ana_tables_ui.py +118 -0
  22. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/analysis/ana_view.py +15 -17
  23. dcscope-2.27.0/dcscope/gui/analysis/ana_view_ui.py +114 -0
  24. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/analysis/dlg_slot_reorder.py +16 -17
  25. dcscope-2.27.0/dcscope/gui/analysis/dlg_slot_reorder_ui.py +63 -0
  26. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/bulk/bulk_emodulus.py +73 -71
  27. dcscope-2.27.0/dcscope/gui/bulk/bulk_emodulus_ui.py +112 -0
  28. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/compute/comp_lme4.py +14 -16
  29. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/compute/comp_lme4_dataset.py +11 -13
  30. dcscope-2.27.0/dcscope/gui/compute/comp_lme4_dataset_ui.py +57 -0
  31. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/compute/comp_lme4_results.py +22 -21
  32. dcscope-2.27.0/dcscope/gui/compute/comp_lme4_results_ui.py +134 -0
  33. dcscope-2.27.0/dcscope/gui/compute/comp_lme4_ui.py +96 -0
  34. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/compute/comp_stats.py +30 -30
  35. dcscope-2.27.0/dcscope/gui/compute/comp_stats_ui.py +103 -0
  36. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/dcor/__init__.py +39 -24
  37. dcscope-2.27.0/dcscope/gui/dcor/dcor_ui.py +60 -0
  38. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/export/e2data.py +71 -68
  39. dcscope-2.27.0/dcscope/gui/export/e2data_ui.py +184 -0
  40. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/export/e2filter.py +9 -9
  41. dcscope-2.27.0/dcscope/gui/export/e2filter_ui.py +55 -0
  42. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/export/e2plot.py +25 -26
  43. dcscope-2.27.0/dcscope/gui/export/e2plot_ui.py +93 -0
  44. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/main.py +102 -100
  45. dcscope-2.27.0/dcscope/gui/main_ui.py +315 -0
  46. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/matrix/block_matrix.py +29 -30
  47. dcscope-2.27.0/dcscope/gui/matrix/block_matrix_ui.py +99 -0
  48. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/matrix/data_matrix.py +3 -3
  49. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/matrix/dm_dataset.py +26 -27
  50. dcscope-2.27.0/dcscope/gui/matrix/dm_dataset_ui.py +162 -0
  51. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/matrix/dm_element.py +8 -10
  52. dcscope-2.27.0/dcscope/gui/matrix/dm_element_ui.py +77 -0
  53. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/matrix/dm_filter.py +21 -23
  54. dcscope-2.27.0/dcscope/gui/matrix/dm_filter_ui.py +129 -0
  55. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/matrix/plot_matrix.py +3 -3
  56. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/matrix/pm_element.py +7 -8
  57. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/matrix/pm_plot.py +15 -16
  58. dcscope-2.27.0/dcscope/gui/matrix/pm_plot_ui.py +117 -0
  59. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/pipeline_plot.py +35 -36
  60. dcscope-2.27.0/dcscope/gui/pipeline_plot_ui.py +43 -0
  61. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/preferences.py +75 -71
  62. dcscope-2.27.0/dcscope/gui/preferences_ui.py +370 -0
  63. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/quick_view/qv_event_getter.py +2 -2
  64. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/quick_view/qv_image_vis.py +3 -3
  65. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/quick_view/qv_main.py +277 -270
  66. dcscope-2.27.0/dcscope/gui/quick_view/qv_main_ui.py +620 -0
  67. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/quick_view/qv_scatter.py +2 -2
  68. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/update.py +0 -14
  69. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/__init__.py +1 -1
  70. dcscope-2.27.0/dcscope/gui/widgets/bg_thread.py +59 -0
  71. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/bulk_list.py +20 -22
  72. dcscope-2.27.0/dcscope/gui/widgets/bulk_list_ui.py +60 -0
  73. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/double_spin_box_nan.py +6 -6
  74. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/mdi_subwindow_wo_close.py +3 -2
  75. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/qrangeslider.py +2 -2
  76. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/rangecontrol.py +68 -69
  77. dcscope-2.27.0/dcscope/gui/widgets/rangecontrol_ui.py +78 -0
  78. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/simple_image_view.py +2 -1
  79. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/simple_plot_widget.py +1 -1
  80. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/pipeline/core.py +31 -6
  81. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/pipeline/dataslot.py +1 -0
  82. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/pipeline/filter.py +1 -0
  83. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/pipeline/plot.py +13 -0
  84. {dcscope-2.26.3 → dcscope-2.27.0/dcscope.egg-info}/PKG-INFO +2 -2
  85. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope.egg-info/SOURCES.txt +60 -30
  86. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope.egg-info/requires.txt +1 -1
  87. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/make_scrots_qg_dcor.py +7 -4
  88. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/make_scrots_qg_emodulus.py +19 -18
  89. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/make_scrots_qg_export.py +1 -1
  90. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/make_scrots_qg_extensions.py +1 -1
  91. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/make_scrots_qg_lme4.py +7 -7
  92. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/make_scrots_qg_lme4_diff.py +12 -12
  93. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/make_scrots_qg_statistics.py +5 -5
  94. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/make_scrots_ui.py +47 -42
  95. dcscope-2.27.0/docs/scrots/qg_dcor_dlg.png +0 -0
  96. dcscope-2.27.0/docs/scrots/qg_emodulus_badtemp.png +0 -0
  97. dcscope-2.27.0/docs/scrots/qg_emodulus_config.png +0 -0
  98. dcscope-2.27.0/docs/scrots/qg_emodulus_feature.png +0 -0
  99. dcscope-2.27.0/docs/scrots/qg_emodulus_other.png +0 -0
  100. dcscope-2.27.0/docs/scrots/qg_export_data.png +0 -0
  101. dcscope-2.27.0/docs/scrots/qg_extensions.png +0 -0
  102. dcscope-2.27.0/docs/scrots/qg_lme4_diff_init.png +0 -0
  103. dcscope-2.27.0/docs/scrots/qg_lme4_diff_results.png +0 -0
  104. dcscope-2.27.0/docs/scrots/qg_lme4_init.png +0 -0
  105. dcscope-2.27.0/docs/scrots/qg_lme4_results.png +0 -0
  106. dcscope-2.27.0/docs/scrots/qg_statistics_folder.png +0 -0
  107. dcscope-2.27.0/docs/scrots/qg_statistics_init.png +0 -0
  108. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/scrots.so2 +0 -0
  109. dcscope-2.27.0/docs/scrots/ui_ana_basins.png +0 -0
  110. dcscope-2.27.0/docs/scrots/ui_ana_filter.png +0 -0
  111. dcscope-2.27.0/docs/scrots/ui_ana_logs.png +0 -0
  112. dcscope-2.27.0/docs/scrots/ui_ana_meta.png +0 -0
  113. dcscope-2.27.0/docs/scrots/ui_ana_plot.png +0 -0
  114. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/ui_ana_slot.png +0 -0
  115. dcscope-2.27.0/docs/scrots/ui_ana_tables.png +0 -0
  116. dcscope-2.27.0/docs/scrots/ui_block_matrix.png +0 -0
  117. dcscope-2.27.0/docs/scrots/ui_main.png +0 -0
  118. dcscope-2.27.0/docs/scrots/ui_qv_event.png +0 -0
  119. dcscope-2.27.0/docs/scrots/ui_qv_poly.png +0 -0
  120. dcscope-2.27.0/docs/scrots/ui_qv_settings.png +0 -0
  121. {dcscope-2.26.3 → dcscope-2.27.0}/pyproject.toml +13 -1
  122. {dcscope-2.26.3 → dcscope-2.27.0}/tests/conftest.py +6 -0
  123. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_bulk_emodulus.py +33 -24
  124. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_compute_lme4.py +29 -29
  125. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_emodulus.py +116 -108
  126. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_export_data.py +14 -14
  127. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_export_filter.py +11 -11
  128. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_export_plot.py +3 -3
  129. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_filter.py +78 -68
  130. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_matrix.py +11 -9
  131. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_pipeline_plot.py +2 -2
  132. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_plotting.py +102 -85
  133. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_quickview.py +253 -218
  134. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_reorder_datasets.py +2 -2
  135. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_pipeline_core.py +2 -2
  136. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/plot-export.py +12 -12
  137. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/analysis/ana_plot.ui +40 -11
  138. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/quick_view/qv_main.ui +2 -2
  139. dcscope-2.27.0/ui/run_uic.sh +18 -0
  140. dcscope-2.26.3/dcscope/gui/widgets/bg_thread.py +0 -29
  141. dcscope-2.26.3/docs/scrots/qg_dcor_dlg.png +0 -0
  142. dcscope-2.26.3/docs/scrots/qg_emodulus_badtemp.png +0 -0
  143. dcscope-2.26.3/docs/scrots/qg_emodulus_config.png +0 -0
  144. dcscope-2.26.3/docs/scrots/qg_emodulus_feature.png +0 -0
  145. dcscope-2.26.3/docs/scrots/qg_emodulus_other.png +0 -0
  146. dcscope-2.26.3/docs/scrots/qg_export_data.png +0 -0
  147. dcscope-2.26.3/docs/scrots/qg_extensions.png +0 -0
  148. dcscope-2.26.3/docs/scrots/qg_lme4_diff_init.png +0 -0
  149. dcscope-2.26.3/docs/scrots/qg_lme4_diff_results.png +0 -0
  150. dcscope-2.26.3/docs/scrots/qg_lme4_init.png +0 -0
  151. dcscope-2.26.3/docs/scrots/qg_lme4_results.png +0 -0
  152. dcscope-2.26.3/docs/scrots/qg_statistics_folder.png +0 -0
  153. dcscope-2.26.3/docs/scrots/qg_statistics_init.png +0 -0
  154. dcscope-2.26.3/docs/scrots/ui_ana_basins.png +0 -0
  155. dcscope-2.26.3/docs/scrots/ui_ana_filter.png +0 -0
  156. dcscope-2.26.3/docs/scrots/ui_ana_logs.png +0 -0
  157. dcscope-2.26.3/docs/scrots/ui_ana_meta.png +0 -0
  158. dcscope-2.26.3/docs/scrots/ui_ana_plot.png +0 -0
  159. dcscope-2.26.3/docs/scrots/ui_ana_tables.png +0 -0
  160. dcscope-2.26.3/docs/scrots/ui_block_matrix.png +0 -0
  161. dcscope-2.26.3/docs/scrots/ui_main.png +0 -0
  162. dcscope-2.26.3/docs/scrots/ui_qv_event.png +0 -0
  163. dcscope-2.26.3/docs/scrots/ui_qv_poly.png +0 -0
  164. dcscope-2.26.3/docs/scrots/ui_qv_settings.png +0 -0
  165. {dcscope-2.26.3 → dcscope-2.27.0}/.gitignore +0 -0
  166. {dcscope-2.26.3 → dcscope-2.27.0}/.readthedocs.yml +0 -0
  167. {dcscope-2.26.3 → dcscope-2.27.0}/LICENSE +0 -0
  168. {dcscope-2.26.3 → dcscope-2.27.0}/README.rst +0 -0
  169. {dcscope-2.26.3 → dcscope-2.27.0}/build-recipes/DCscope.icns +0 -0
  170. {dcscope-2.26.3 → dcscope-2.27.0}/build-recipes/DCscope.ico +0 -0
  171. {dcscope-2.26.3 → dcscope-2.27.0}/build-recipes/DCscopeLauncher.py +0 -0
  172. {dcscope-2.26.3 → dcscope-2.27.0}/build-recipes/Readme.md +0 -0
  173. {dcscope-2.26.3 → dcscope-2.27.0}/build-recipes/hook-dcscope.py +0 -0
  174. {dcscope-2.26.3 → dcscope-2.27.0}/build-recipes/macos_DCscope.spec +0 -0
  175. {dcscope-2.26.3 → dcscope-2.27.0}/build-recipes/macos_build_app.sh +0 -0
  176. {dcscope-2.26.3 → dcscope-2.27.0}/build-recipes/macos_build_requirements.txt +0 -0
  177. {dcscope-2.26.3 → dcscope-2.27.0}/build-recipes/win_DCscope.spec +0 -0
  178. {dcscope-2.26.3 → dcscope-2.27.0}/build-recipes/win_build_requirements.txt +0 -0
  179. {dcscope-2.26.3 → dcscope-2.27.0}/build-recipes/win_dcscope.iss_dummy +0 -0
  180. {dcscope-2.26.3 → dcscope-2.27.0}/build-recipes/win_make_iss.py +0 -0
  181. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/__init__.py +0 -0
  182. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/__main__.py +0 -0
  183. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/extensions.py +0 -0
  184. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/__init__.py +0 -0
  185. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/analysis/__init__.py +0 -0
  186. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/bulk/__init__.py +0 -0
  187. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/compute/__init__.py +0 -0
  188. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/export/__init__.py +0 -0
  189. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/helpers.py +0 -0
  190. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/matrix/Readme.md +0 -0
  191. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/matrix/__init__.py +0 -0
  192. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/quick_view/__init__.py +0 -0
  193. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/quick_view/qv_style.css +0 -0
  194. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/settings.py +0 -0
  195. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/feature_combobox.py +0 -0
  196. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/get_path.py +0 -0
  197. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/key_value_table_widget.css +0 -0
  198. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/key_value_table_widget.py +0 -0
  199. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/so_colorbaritem.py +0 -0
  200. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/gui/widgets/wait_cursor.py +0 -0
  201. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/idiom.py +0 -0
  202. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/__init__.py +0 -0
  203. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/COPYING-ICONS +0 -0
  204. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/COPYING.LIB +0 -0
  205. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/README +0 -0
  206. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/application-exit.svg +0 -0
  207. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/code-context.svg +0 -0
  208. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/dialog-cancel.svg +0 -0
  209. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/dialog-close.svg +0 -0
  210. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/dialog-messages.svg +0 -0
  211. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok-apply.svg +0 -0
  212. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/dialog-ok.svg +0 -0
  213. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/document-open-folder.svg +0 -0
  214. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/document-open.svg +0 -0
  215. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/document-save.svg +0 -0
  216. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/documentinfo.svg +0 -0
  217. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/draw-watercolor.svg +0 -0
  218. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/edit-clear-all.svg +0 -0
  219. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/edit-clear.svg +0 -0
  220. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/edit-paste.svg +0 -0
  221. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/globe.svg +0 -0
  222. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/gtk-preferences.svg +0 -0
  223. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/list-add.svg +0 -0
  224. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/messagebox_warning.svg +0 -0
  225. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/object-columns.svg +0 -0
  226. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/object-order-lower.svg +0 -0
  227. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/object-rows.svg +0 -0
  228. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/office-chart-line-stacked.svg +0 -0
  229. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/office-chart-ring.svg +0 -0
  230. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/office-chart-scatter.svg +0 -0
  231. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/path-mode-polyline.svg +0 -0
  232. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/preferences-activities.svg +0 -0
  233. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/remove.svg +0 -0
  234. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/search.svg +0 -0
  235. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/show-grid.svg +0 -0
  236. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/special_paste.svg +0 -0
  237. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/tools-wizard.svg +0 -0
  238. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/view-calendar-list.svg +0 -0
  239. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/view-filter.svg +0 -0
  240. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/view-list-tree.svg +0 -0
  241. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/view-statistics.svg +0 -0
  242. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/16/visibility.svg +0 -0
  243. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/application-exit.svg +0 -0
  244. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/code-context.svg +0 -0
  245. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/dialog-cancel.svg +0 -0
  246. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/dialog-close.svg +0 -0
  247. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/dialog-messages.svg +0 -0
  248. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok-apply.svg +0 -0
  249. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/dialog-ok.svg +0 -0
  250. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/document-open-folder.svg +0 -0
  251. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/document-open.svg +0 -0
  252. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/document-save.svg +0 -0
  253. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/documentinfo.svg +0 -0
  254. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/draw-watercolor.svg +0 -0
  255. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/edit-clear-all.svg +0 -0
  256. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/edit-clear.svg +0 -0
  257. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/edit-paste.svg +0 -0
  258. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/globe.svg +0 -0
  259. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/gtk-preferences.svg +0 -0
  260. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/list-add.svg +0 -0
  261. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/messagebox_warning.svg +0 -0
  262. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/object-columns.svg +0 -0
  263. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/object-order-lower.svg +0 -0
  264. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/object-rows.svg +0 -0
  265. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/office-chart-line-stacked.svg +0 -0
  266. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/office-chart-ring.svg +0 -0
  267. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/office-chart-scatter.svg +0 -0
  268. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/path-mode-polyline.svg +0 -0
  269. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/preferences-activities.svg +0 -0
  270. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/remove.svg +0 -0
  271. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/special_paste.svg +0 -0
  272. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/tools-wizard.svg +0 -0
  273. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/view-calendar-list.svg +0 -0
  274. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/view-filter.svg +0 -0
  275. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/view-list-tree.svg +0 -0
  276. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/view-statistics.svg +0 -0
  277. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/22/visibility.svg +0 -0
  278. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/application-exit.svg +0 -0
  279. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/code-context.svg +0 -0
  280. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/dialog-cancel.svg +0 -0
  281. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/dialog-close.svg +0 -0
  282. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/dialog-messages.svg +0 -0
  283. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok-apply.svg +0 -0
  284. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/dialog-ok.svg +0 -0
  285. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/document-open-folder.svg +0 -0
  286. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/document-open.svg +0 -0
  287. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/document-save.svg +0 -0
  288. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/documentinfo.svg +0 -0
  289. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/draw-watercolor.svg +0 -0
  290. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/edit-clear-all.svg +0 -0
  291. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/edit-clear.svg +0 -0
  292. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/edit-paste.svg +0 -0
  293. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/globe.svg +0 -0
  294. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/gtk-preferences.svg +0 -0
  295. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/list-add.svg +0 -0
  296. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/messagebox_warning.svg +0 -0
  297. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/object-columns.svg +0 -0
  298. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/object-order-lower.svg +0 -0
  299. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/object-rows.svg +0 -0
  300. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/office-chart-line-stacked.svg +0 -0
  301. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/office-chart-ring.svg +0 -0
  302. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/office-chart-scatter.svg +0 -0
  303. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/path-mode-polyline.svg +0 -0
  304. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/preferences-activities.svg +0 -0
  305. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/remove.svg +0 -0
  306. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/special_paste.svg +0 -0
  307. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/tools-wizard.svg +0 -0
  308. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/view-calendar-list.svg +0 -0
  309. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/view-filter.svg +0 -0
  310. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/view-list-tree.svg +0 -0
  311. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/view-statistics.svg +0 -0
  312. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/24/visibility.svg +0 -0
  313. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/32/application-exit.svg +0 -0
  314. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/32/dialog-cancel.svg +0 -0
  315. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/32/dialog-messages.svg +0 -0
  316. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok-apply.svg +0 -0
  317. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/32/dialog-ok.svg +0 -0
  318. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/32/document-open-folder.svg +0 -0
  319. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/32/document-open.svg +0 -0
  320. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/32/document-save.svg +0 -0
  321. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/32/gtk-preferences.svg +0 -0
  322. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/32/object-order-lower.svg +0 -0
  323. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/32/view-filter.svg +0 -0
  324. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/actions/32/view-list-tree.svg +0 -0
  325. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/places/16/folder-cloud.svg +0 -0
  326. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/places/16/folder.svg +0 -0
  327. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/places/22/folder-cloud.svg +0 -0
  328. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/places/22/folder.svg +0 -0
  329. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/places/24/folder-cloud.svg +0 -0
  330. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/places/24/folder.svg +0 -0
  331. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/places/32/folder-cloud.svg +0 -0
  332. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/places/32/folder.svg +0 -0
  333. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/places/64/folder-cloud.svg +0 -0
  334. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/places/64/folder.svg +0 -0
  335. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/16/dialog-error.svg +0 -0
  336. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/16/dialog-information.svg +0 -0
  337. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/16/dialog-question.svg +0 -0
  338. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/16/dialog-warning.svg +0 -0
  339. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/22/dialog-error.svg +0 -0
  340. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/22/dialog-information.svg +0 -0
  341. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/22/dialog-question.svg +0 -0
  342. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/22/dialog-warning.svg +0 -0
  343. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/24/dialog-error.svg +0 -0
  344. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/24/dialog-information.svg +0 -0
  345. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/24/dialog-question.svg +0 -0
  346. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/24/dialog-warning.svg +0 -0
  347. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/64/dialog-error.svg +0 -0
  348. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/64/dialog-information.svg +0 -0
  349. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/64/dialog-question.svg +0 -0
  350. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/breeze/status/64/dialog-warning.svg +0 -0
  351. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/collect_icons.py +0 -0
  352. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/dcscope/dcor.png +0 -0
  353. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/dcscope/edit-copy-anew.svg +0 -0
  354. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/dcscope/emodulus.svg +0 -0
  355. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/dcscope/filter_ray.svg +0 -0
  356. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/dcscope/region_channel.svg +0 -0
  357. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/dcscope/region_reservoir.svg +0 -0
  358. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/dcscope/rlang.svg +0 -0
  359. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/dcscope/statistical_significance.svg +0 -0
  360. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon-theme/index.theme +0 -0
  361. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/icon.png +0 -0
  362. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/img/splash.png +0 -0
  363. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/meta_tool.py +0 -0
  364. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/pipeline/__init__.py +0 -0
  365. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/pipeline/filter_ray.py +0 -0
  366. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/session.py +0 -0
  367. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope/util.py +0 -0
  368. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope.egg-info/dependency_links.txt +0 -0
  369. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope.egg-info/entry_points.txt +0 -0
  370. {dcscope-2.26.3 → dcscope-2.27.0}/dcscope.egg-info/top_level.txt +0 -0
  371. {dcscope-2.26.3 → dcscope-2.27.0}/docs/README.md +0 -0
  372. {dcscope-2.26.3 → dcscope-2.27.0}/docs/artwork/Readme.md +0 -0
  373. {dcscope-2.26.3 → dcscope-2.27.0}/docs/artwork/dcscope_icon.svg +0 -0
  374. {dcscope-2.26.3 → dcscope-2.27.0}/docs/artwork/dcscope_large_white.png +0 -0
  375. {dcscope-2.26.3 → dcscope-2.27.0}/docs/artwork/dcscope_large_white.svg +0 -0
  376. {dcscope-2.26.3 → dcscope-2.27.0}/docs/artwork/dcscope_splash.svg +0 -0
  377. {dcscope-2.26.3 → dcscope-2.27.0}/docs/artwork/favicon.ico +0 -0
  378. {dcscope-2.26.3 → dcscope-2.27.0}/docs/artwork/favicon.svg +0 -0
  379. {dcscope-2.26.3 → dcscope-2.27.0}/docs/conf.py +0 -0
  380. {dcscope-2.26.3 → dcscope-2.27.0}/docs/data/extension_fl1_density.py +0 -0
  381. {dcscope-2.26.3 → dcscope-2.27.0}/docs/dcscope.bib +0 -0
  382. {dcscope-2.26.3 → dcscope-2.27.0}/docs/extensions/fancy_include.py +0 -0
  383. {dcscope-2.26.3 → dcscope-2.27.0}/docs/extensions/github_changelog.py +0 -0
  384. {dcscope-2.26.3 → dcscope-2.27.0}/docs/extensions/rtd_pdf.py +0 -0
  385. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/ATTRIBUTION +0 -0
  386. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/area.png +0 -0
  387. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/aspect.jpg +0 -0
  388. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/brightness.jpg +0 -0
  389. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/deform.jpg +0 -0
  390. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/deform.py +0 -0
  391. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/fluorescence.jpg +0 -0
  392. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/fluorescence.py +0 -0
  393. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/inert_ratio.jpg +0 -0
  394. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/inert_ratio.py +0 -0
  395. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_countrate.jpg +0 -0
  396. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_countrate.py +0 -0
  397. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_filter_area.jpg +0 -0
  398. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_filter_area.py +0 -0
  399. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_filter_porosity.jpg +0 -0
  400. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_filter_porosity.py +0 -0
  401. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_filter_ratios.jpg +0 -0
  402. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_filter_ratios.py +0 -0
  403. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_time.jpg +0 -0
  404. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_time.py +0 -0
  405. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_youngs_modulus.py +0 -0
  406. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_youngs_modulus_15um.png +0 -0
  407. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_youngs_modulus_20um.png +0 -0
  408. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_youngs_modulus_30um.png +0 -0
  409. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/qg_youngs_modulus_40um.png +0 -0
  410. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/rtdc-setup.jpg +0 -0
  411. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/volume.jpg +0 -0
  412. {dcscope-2.26.3 → dcscope-2.27.0}/docs/figures/volume.py +0 -0
  413. {dcscope-2.26.3 → dcscope-2.27.0}/docs/index.rst +0 -0
  414. {dcscope-2.26.3 → dcscope-2.27.0}/docs/requirements.txt +0 -0
  415. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/.gitignore +0 -0
  416. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/CD66+_CD14-.poly +0 -0
  417. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/Readme.md +0 -0
  418. {dcscope-2.26.3 → dcscope-2.27.0}/docs/scrots/make_scrots.sh +0 -0
  419. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_changelog.rst +0 -0
  420. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_devs.rst +0 -0
  421. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_getting_started.rst +0 -0
  422. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_imprint.rst +0 -0
  423. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_interface.rst +0 -0
  424. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_qg_batch_stats.rst +0 -0
  425. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_qg_consistency_check.rst +0 -0
  426. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_qg_dcor.rst +0 -0
  427. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_qg_export_data.rst +0 -0
  428. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_qg_extensions.rst +0 -0
  429. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_qg_filtering.rst +0 -0
  430. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_qg_lme4.rst +0 -0
  431. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_qg_youngs_modulus.rst +0 -0
  432. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_quick_guides.rst +0 -0
  433. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_rtdc_basics.rst +0 -0
  434. {dcscope-2.26.3 → dcscope-2.27.0}/docs/sec_z_bib.rst +0 -0
  435. {dcscope-2.26.3 → dcscope-2.27.0}/setup.cfg +0 -0
  436. {dcscope-2.26.3 → dcscope-2.27.0}/tests/README.md +0 -0
  437. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/artificial_with_image_bg.rtdc +0 -0
  438. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/blood_rbc_leukocytes.rtdc +0 -0
  439. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/blood_rbc_qpi_data.rtdc +0 -0
  440. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/calibration_beads_47.rtdc +0 -0
  441. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/cytoshot_blood.rtdc +0 -0
  442. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/empty_recording.rtdc +0 -0
  443. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/ext_feat_anc_plugin_ca.py +0 -0
  444. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/extreme_shear.rtdc +0 -0
  445. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/naiad-capture_blood_pipeline.rtdc +0 -0
  446. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/version_2_1_0_basic.so2 +0 -0
  447. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/version_2_1_2_plot_color_emodulus.so2 +0 -0
  448. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/version_2_1_6_no_events.so2 +0 -0
  449. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/version_2_5_0_dcor_lme4.so2 +0 -0
  450. {dcscope-2.26.3 → dcscope-2.27.0}/tests/data/version_2_5_0_dcor_lme4_diff.so2 +0 -0
  451. {dcscope-2.26.3 → dcscope-2.27.0}/tests/requirements.txt +0 -0
  452. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_extensions.py +0 -0
  453. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_ana_meta.py +0 -0
  454. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_basic.py +0 -0
  455. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_compute_stats.py +0 -0
  456. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_gui_update.py +0 -0
  457. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_pipeline_filter_ray.py +0 -0
  458. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_pipeline_filter_ray_2.py +0 -0
  459. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_session.py +0 -0
  460. {dcscope-2.26.3 → dcscope-2.27.0}/tests/test_util.py +0 -0
  461. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/.gitignore +0 -0
  462. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/Readme.rst +0 -0
  463. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/plot-export.so2 +0 -0
  464. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/plot-export_log-large-points-export-png_expected.png +0 -0
  465. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/plot-export_log-large-points-export-svg_expected.svg +0 -0
  466. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/plot-export_scatter-and-contour-export-png_expected.png +0 -0
  467. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/plot-export_scatter-and-contour-export-svg_expected.svg +0 -0
  468. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/plot-export_scatter-and-contour-subplot1-export-png_expected.png +0 -0
  469. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/plot-export_scatter-and-contour-subplot1-export-svg_expected.svg +0 -0
  470. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/plot-export_scatter-and-contour-subplot2-export-png_expected.png +0 -0
  471. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/plot-export_scatter-and-contour-subplot2-export-svg_expected.svg +0 -0
  472. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/plot-export_scatter-long-title-export-png_expected.png +0 -0
  473. {dcscope-2.26.3 → dcscope-2.27.0}/tests-manual/run-tests.sh +0 -0
  474. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/analysis/ana_basins.ui +0 -0
  475. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/analysis/ana_filter.ui +0 -0
  476. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/analysis/ana_log.ui +0 -0
  477. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/analysis/ana_meta.ui +0 -0
  478. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/analysis/ana_slot.ui +0 -0
  479. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/analysis/ana_tables.ui +0 -0
  480. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/analysis/ana_view.ui +0 -0
  481. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/analysis/dlg_slot_reorder.ui +0 -0
  482. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/bulk/bulk_emodulus.ui +0 -0
  483. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/compute/comp_lme4.ui +0 -0
  484. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/compute/comp_lme4_dataset.ui +0 -0
  485. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/compute/comp_lme4_results.ui +0 -0
  486. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/compute/comp_stats.ui +0 -0
  487. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/dcor/dcor.ui +0 -0
  488. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/export/e2data.ui +0 -0
  489. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/export/e2filter.ui +0 -0
  490. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/export/e2plot.ui +0 -0
  491. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/main.ui +0 -0
  492. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/matrix/block_matrix.ui +0 -0
  493. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/matrix/dm_dataset.ui +0 -0
  494. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/matrix/dm_element.ui +0 -0
  495. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/matrix/dm_filter.ui +0 -0
  496. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/matrix/pm_plot.ui +0 -0
  497. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/pipeline_plot.ui +0 -0
  498. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/preferences.ui +0 -0
  499. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/widgets/bulk_list.ui +0 -0
  500. {dcscope-2.26.3/dcscope/gui → dcscope-2.27.0/ui}/widgets/rangecontrol.ui +0 -0
@@ -11,7 +11,7 @@ jobs:
11
11
  strategy:
12
12
  fail-fast: false
13
13
  matrix:
14
- python-version: ['3.10']
14
+ python-version: ['3.13']
15
15
  os: [macos-latest, ubuntu-latest, windows-latest]
16
16
  env:
17
17
  # Display must be available globally for linux to know where xvfb is
@@ -47,7 +47,9 @@ jobs:
47
47
  run: |
48
48
  # prerequisites
49
49
  python -m pip install --upgrade pip wheel
50
- python -m pip install coverage flake8
50
+ python -m pip install flake8
51
+ # https://github.com/coveragepy/coveragepy/issues/2166
52
+ python -m pip install "coverage==7.5.3"
51
53
  # install dependencies
52
54
  pip install .
53
55
  pip install -r tests/requirements.txt
@@ -14,7 +14,7 @@ jobs:
14
14
  runs-on: ${{ matrix.os }}
15
15
  strategy:
16
16
  matrix:
17
- python-version: ["3.10"]
17
+ python-version: ["3.13"]
18
18
  # macOS builds not working (on some devices?), and/or there is
19
19
  # some kind of security block in place which prevents users
20
20
  # from dragging the executable to the Applications folder.
@@ -15,7 +15,7 @@ jobs:
15
15
  - name: Set up Python
16
16
  uses: actions/setup-python@main
17
17
  with:
18
- python-version: "3.10"
18
+ python-version: "3.13"
19
19
  - name: Install dependencies
20
20
  run: |
21
21
  python -m pip install --upgrade pip
@@ -1,3 +1,21 @@
1
+ 2.27.0
2
+ - fix: delay on selecting "Plot" tab when "Marker hue" was set to "Feature"
3
+ - fix: switching tabs "View/Features" in QuickView did not update event data
4
+ - fix: set NaN-valued KDE of scatter plot points to zero
5
+ - fix: properly close DCOR search background runner in dialog
6
+ - fix: properly stop `EventGetterThread` on exit
7
+ - fix: due to race condition, sometimes incorrect range was shown in Plot tab
8
+ - enh: give all separate `QThread` object a name
9
+ - enh: remove wait cursor from some methods in QuickView
10
+ - enh: add "default KDE spacing" checkable button in AnalysisView Plot
11
+ ("auto spacing" in pipeline `Plot` class)
12
+ - enh: change "auto range" checkbox to "default XY range" checkable button
13
+ in AnalysisView Plot
14
+ - ref: migrate from loading .ui files to pyuic6-pregenerated Python files
15
+ - ref: migrate check for range from `PipelinePlot.update_content`
16
+ to `Pipeline.check_auto_range_and_spacing`
17
+ - setup: bump dclab to 0.71.7 (ValueError when encountering empty pipeline)
18
+ - ci: bump build pipeline to Python 3.13
1
19
  2.26.3
2
20
  - enh: fetch QuickView image and trace data in `EventGetterThread`
3
21
  - enh: busy indicator in QuickView when event data is fetched in the background
@@ -3,4 +3,4 @@ include LICENSE
3
3
  include README.rst
4
4
  recursive-include examples *.py
5
5
  recursive-include tests *.py
6
- recursive-include dcscope *.css *.png *.py *.svg *.theme *.ui COPYING* LICENSE README
6
+ recursive-include dcscope *.css *.png *.py *.svg *.theme COPYING* LICENSE README
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: dcscope
3
- Version: 2.26.3
3
+ Version: 2.27.0
4
4
  Summary: User interface for deformability cytometry (DC)
5
5
  Author: Benedikt Hartmann, Eoghan O'Connell, Maximilian Schlögel, Paul Müller, Raghava Alajangi
6
6
  Maintainer-email: Paul Müller <dev@craban.de>
@@ -16,7 +16,7 @@ Classifier: Intended Audience :: Science/Research
16
16
  Requires-Python: <4,>=3.9
17
17
  Description-Content-Type: text/x-rst
18
18
  License-File: LICENSE
19
- Requires-Dist: dclab[dcor,export,http,s3]>=0.71.6
19
+ Requires-Dist: dclab[dcor,export,http,s3]>=0.71.7
20
20
  Requires-Dist: h5py>=2.8.0
21
21
  Requires-Dist: numpy>=1.21
22
22
  Requires-Dist: pygments
@@ -18,7 +18,7 @@ version_tuple: tuple[int | str, ...]
18
18
  commit_id: str | None
19
19
  __commit_id__: str | None
20
20
 
21
- __version__ = version = '2.26.3'
22
- __version_tuple__ = version_tuple = (2, 26, 3)
21
+ __version__ = version = '2.27.0'
22
+ __version_tuple__ = version_tuple = (2, 27, 0)
23
23
 
24
- __commit_id__ = commit_id = 'g9e68b5ca9'
24
+ __commit_id__ = commit_id = 'g762a62993'
@@ -1,8 +1,9 @@
1
- import importlib.resources
2
1
  import json
3
2
 
4
3
  from pygments import highlight, lexers, formatters
5
- from PyQt6 import uic, QtCore, QtWidgets
4
+ from PyQt6 import QtCore, QtWidgets
5
+
6
+ from .ana_basins_ui import Ui_Form
6
7
 
7
8
 
8
9
  class BasinsPanel(QtWidgets.QWidget):
@@ -17,18 +18,18 @@ class BasinsPanel(QtWidgets.QWidget):
17
18
 
18
19
  def __init__(self, *args, **kwargs):
19
20
  super(BasinsPanel, self).__init__(*args, **kwargs)
20
- ref = importlib.resources.files(
21
- "dcscope.gui.analysis") / "ana_basins.ui"
22
- with importlib.resources.as_file(ref) as path_ui:
23
- uic.loadUi(path_ui, self)
21
+
22
+ self.ui = Ui_Form()
23
+ self.ui.setupUi(self)
24
+
24
25
  # current DCscope pipeline
25
26
  self.pipeline = None
26
27
  self.data_role = QtCore.Qt.ItemDataRole.UserRole + 2
27
- self.treeWidget_basin_name.setColumnCount(1)
28
+ self.ui.treeWidget_basin_name.setColumnCount(1)
28
29
 
29
- self.listWidget_dataset.currentRowChanged.connect(
30
+ self.ui.listWidget_dataset.currentRowChanged.connect(
30
31
  self.on_select_dataset)
31
- self.treeWidget_basin_name.currentItemChanged.connect(
32
+ self.ui.treeWidget_basin_name.currentItemChanged.connect(
32
33
  self.on_select_basin)
33
34
 
34
35
  self.pp_mod_recv.connect(self.on_pp_mod_recv)
@@ -50,16 +51,16 @@ class BasinsPanel(QtWidgets.QWidget):
50
51
  @QtCore.pyqtSlot(int)
51
52
  def on_select_dataset(self, ds_idx):
52
53
  """Show the tables of the dataset in the right-hand list widget"""
53
- self.treeWidget_basin_name.clear()
54
+ self.ui.treeWidget_basin_name.clear()
54
55
  if ds_idx >= 0:
55
56
  ds = self.pipeline.slots[ds_idx].get_dataset()
56
- self.add_basin_nodes(parent_widget=self.treeWidget_basin_name,
57
+ self.add_basin_nodes(parent_widget=self.ui.treeWidget_basin_name,
57
58
  ds=ds)
58
59
 
59
60
  @QtCore.pyqtSlot(QtWidgets.QTreeWidgetItem, QtWidgets.QTreeWidgetItem)
60
61
  def on_select_basin(self, current, previous=None):
61
62
  """Show the tables of the dataset in the right-hand list widget"""
62
- ds_idx = self.listWidget_dataset.currentRow()
63
+ ds_idx = self.ui.listWidget_dataset.currentRow()
63
64
  if current is not None and ds_idx >= 0:
64
65
  # Get the correct basin
65
66
  ds, bd = current.data(0, self.data_role)
@@ -76,9 +77,9 @@ class BasinsPanel(QtWidgets.QWidget):
76
77
  bn = None
77
78
 
78
79
  # Display the basin information
79
- self.label_status.setText(f"{loaded=}, {available=}")
80
- self.label_id.setText(f"{bd.get('name')} ({bd['key']})")
81
- self.textEdit_def.setText(
80
+ self.ui.label_status.setText(f"{loaded=}, {available=}")
81
+ self.ui.label_id.setText(f"{bd.get('name')} ({bd['key']})")
82
+ self.ui.textEdit_def.setText(
82
83
  highlight(json.dumps(bd, sort_keys=True, indent=2),
83
84
  lexers.JsonLexer(),
84
85
  formatters.HtmlFormatter(full=True,
@@ -92,9 +93,9 @@ class BasinsPanel(QtWidgets.QWidget):
92
93
  ds=bn.ds)
93
94
  current.setExpanded(True)
94
95
  else:
95
- self.textEdit_def.clear()
96
- self.label_status.setText("")
97
- self.label_id.setText("")
96
+ self.ui.textEdit_def.clear()
97
+ self.ui.label_status.setText("")
98
+ self.ui.label_id.setText("")
98
99
 
99
100
  def set_pipeline(self, pipeline):
100
101
  if self.pipeline is not None:
@@ -105,16 +106,16 @@ class BasinsPanel(QtWidgets.QWidget):
105
106
  if self.pipeline and self.pipeline.slots:
106
107
  self.setEnabled(True)
107
108
  self.setUpdatesEnabled(False)
108
- self.listWidget_dataset.clear()
109
- self.treeWidget_basin_name.clear()
109
+ self.ui.listWidget_dataset.clear()
110
+ self.ui.treeWidget_basin_name.clear()
110
111
  for name in self.pipeline.deduce_display_names():
111
- self.listWidget_dataset.addItem(name)
112
+ self.ui.listWidget_dataset.addItem(name)
112
113
  self.setUpdatesEnabled(True)
113
114
  if slot_index is None or slot_index < 0:
114
- slot_index = max(0, self.listWidget_dataset.currentRow())
115
+ slot_index = max(0, self.ui.listWidget_dataset.currentRow())
115
116
  slot_index = min(slot_index, self.pipeline.num_slots - 1)
116
- self.listWidget_dataset.setCurrentRow(slot_index)
117
+ self.ui.listWidget_dataset.setCurrentRow(slot_index)
117
118
  else:
118
119
  self.setEnabled(False)
119
- self.listWidget_dataset.clear()
120
- self.treeWidget_basin_name.clear()
120
+ self.ui.listWidget_dataset.clear()
121
+ self.ui.treeWidget_basin_name.clear()
@@ -0,0 +1,93 @@
1
+ # flake8: noqa
2
+ # This file was auto-generated with DCscope/ui/run_uic.sh.
3
+ # Form implementation generated from reading ui file './analysis/ana_basins.ui'
4
+ #
5
+ # Created by: PyQt6 UI code generator 6.11.0
6
+ #
7
+ # WARNING: Any manual changes made to this file will be lost when pyuic6 is
8
+ # run again. Do not edit this file unless you know what you are doing.
9
+
10
+
11
+ from PyQt6 import QtCore, QtGui, QtWidgets
12
+
13
+
14
+ class Ui_Form(object):
15
+ def setupUi(self, Form):
16
+ Form.setObjectName("Form")
17
+ Form.resize(701, 538)
18
+ self.verticalLayout = QtWidgets.QVBoxLayout(Form)
19
+ self.verticalLayout.setObjectName("verticalLayout")
20
+ self.horizontalLayout = QtWidgets.QHBoxLayout()
21
+ self.horizontalLayout.setObjectName("horizontalLayout")
22
+ self.verticalLayout_2 = QtWidgets.QVBoxLayout()
23
+ self.verticalLayout_2.setObjectName("verticalLayout_2")
24
+ self.label = QtWidgets.QLabel(parent=Form)
25
+ self.label.setObjectName("label")
26
+ self.verticalLayout_2.addWidget(self.label)
27
+ self.listWidget_dataset = QtWidgets.QListWidget(parent=Form)
28
+ self.listWidget_dataset.setMinimumSize(QtCore.QSize(200, 0))
29
+ self.listWidget_dataset.setProperty("showDropIndicator", False)
30
+ self.listWidget_dataset.setAlternatingRowColors(True)
31
+ self.listWidget_dataset.setSelectionBehavior(QtWidgets.QAbstractItemView.SelectionBehavior.SelectRows)
32
+ self.listWidget_dataset.setObjectName("listWidget_dataset")
33
+ self.verticalLayout_2.addWidget(self.listWidget_dataset)
34
+ self.horizontalLayout.addLayout(self.verticalLayout_2)
35
+ self.verticalLayout_3 = QtWidgets.QVBoxLayout()
36
+ self.verticalLayout_3.setObjectName("verticalLayout_3")
37
+ self.label_2 = QtWidgets.QLabel(parent=Form)
38
+ self.label_2.setObjectName("label_2")
39
+ self.verticalLayout_3.addWidget(self.label_2)
40
+ self.treeWidget_basin_name = QtWidgets.QTreeWidget(parent=Form)
41
+ self.treeWidget_basin_name.setProperty("showDropIndicator", False)
42
+ self.treeWidget_basin_name.setAlternatingRowColors(True)
43
+ self.treeWidget_basin_name.setAutoExpandDelay(0)
44
+ self.treeWidget_basin_name.setUniformRowHeights(True)
45
+ self.treeWidget_basin_name.setHeaderHidden(True)
46
+ self.treeWidget_basin_name.setObjectName("treeWidget_basin_name")
47
+ self.treeWidget_basin_name.headerItem().setText(0, "1")
48
+ self.verticalLayout_3.addWidget(self.treeWidget_basin_name)
49
+ self.horizontalLayout.addLayout(self.verticalLayout_3)
50
+ self.horizontalLayout.setStretch(1, 1)
51
+ self.verticalLayout.addLayout(self.horizontalLayout)
52
+ self.line = QtWidgets.QFrame(parent=Form)
53
+ self.line.setFrameShape(QtWidgets.QFrame.Shape.HLine)
54
+ self.line.setFrameShadow(QtWidgets.QFrame.Shadow.Sunken)
55
+ self.line.setObjectName("line")
56
+ self.verticalLayout.addWidget(self.line)
57
+ self.formLayout = QtWidgets.QFormLayout()
58
+ self.formLayout.setObjectName("formLayout")
59
+ self.label_3 = QtWidgets.QLabel(parent=Form)
60
+ self.label_3.setObjectName("label_3")
61
+ self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_3)
62
+ self.label_id = QtWidgets.QLabel(parent=Form)
63
+ self.label_id.setText("")
64
+ self.label_id.setObjectName("label_id")
65
+ self.formLayout.setWidget(0, QtWidgets.QFormLayout.ItemRole.FieldRole, self.label_id)
66
+ self.label_6 = QtWidgets.QLabel(parent=Form)
67
+ self.label_6.setObjectName("label_6")
68
+ self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_6)
69
+ self.label_5 = QtWidgets.QLabel(parent=Form)
70
+ self.label_5.setObjectName("label_5")
71
+ self.formLayout.setWidget(2, QtWidgets.QFormLayout.ItemRole.LabelRole, self.label_5)
72
+ self.textEdit_def = QtWidgets.QTextEdit(parent=Form)
73
+ self.textEdit_def.setReadOnly(True)
74
+ self.textEdit_def.setObjectName("textEdit_def")
75
+ self.formLayout.setWidget(2, QtWidgets.QFormLayout.ItemRole.FieldRole, self.textEdit_def)
76
+ self.label_status = QtWidgets.QLabel(parent=Form)
77
+ self.label_status.setText("")
78
+ self.label_status.setObjectName("label_status")
79
+ self.formLayout.setWidget(1, QtWidgets.QFormLayout.ItemRole.FieldRole, self.label_status)
80
+ self.verticalLayout.addLayout(self.formLayout)
81
+ self.verticalLayout.setStretch(2, 1)
82
+
83
+ self.retranslateUi(Form)
84
+ QtCore.QMetaObject.connectSlotsByName(Form)
85
+
86
+ def retranslateUi(self, Form):
87
+ _translate = QtCore.QCoreApplication.translate
88
+ Form.setWindowTitle(_translate("Form", "Form"))
89
+ self.label.setText(_translate("Form", "Dataset"))
90
+ self.label_2.setText(_translate("Form", "Basins"))
91
+ self.label_3.setText(_translate("Form", "Basin"))
92
+ self.label_6.setText(_translate("Form", "Status"))
93
+ self.label_5.setText(_translate("Form", "Definition"))
@@ -1,11 +1,10 @@
1
- import importlib.resources
2
-
3
- from PyQt6 import uic, QtCore, QtWidgets
1
+ from PyQt6 import QtCore, QtWidgets
4
2
 
5
3
  import dclab
6
4
 
7
- from ..widgets import RangeControl
8
5
  from ... import idiom
6
+ from ..widgets import RangeControl
7
+ from .ana_filter_ui import Ui_Form
9
8
 
10
9
 
11
10
  class FilterPanel(QtWidgets.QWidget):
@@ -28,10 +27,10 @@ class FilterPanel(QtWidgets.QWidget):
28
27
 
29
28
  def __init__(self, *args, **kwargs):
30
29
  super(FilterPanel, self).__init__(*args, **kwargs)
31
- ref = importlib.resources.files(
32
- "dcscope.gui.analysis") / "ana_filter.ui"
33
- with importlib.resources.as_file(ref) as path_ui:
34
- uic.loadUi(path_ui, self)
30
+
31
+ self.ui = Ui_Form()
32
+ self.ui.setupUi(self)
33
+
35
34
  # current DCscope pipeline
36
35
  self.pipeline = None
37
36
 
@@ -41,28 +40,29 @@ class FilterPanel(QtWidgets.QWidget):
41
40
  self._populate_box_filters()
42
41
  self._polygon_checkboxes = {}
43
42
  self.update_polygon_filters()
44
- self.toolButton_duplicate.clicked.connect(self.on_duplicate_filter)
45
- self.toolButton_remove.clicked.connect(self.on_remove_filter)
46
- self.pushButton_apply.clicked.connect(self.write_filter)
47
- self.pushButton_reset.clicked.connect(self.update_content)
43
+ self.ui.toolButton_duplicate.clicked.connect(self.on_duplicate_filter)
44
+ self.ui.toolButton_remove.clicked.connect(self.on_remove_filter)
45
+ self.ui.pushButton_apply.clicked.connect(self.write_filter)
46
+ self.ui.pushButton_reset.clicked.connect(self.update_content)
48
47
 
49
48
  # polygon buttons
50
- self.pushButton_polygon_add.clicked.connect(
49
+ self.ui.pushButton_polygon_add.clicked.connect(
51
50
  self.request_new_polygon_filter)
52
- self.pushButton_polygon_edit.clicked.connect(
51
+ self.ui.pushButton_polygon_edit.clicked.connect(
53
52
  self.on_polygon_edit)
54
- self.pushButton_polygon_duplicate.clicked.connect(
53
+ self.ui.pushButton_polygon_duplicate.clicked.connect(
55
54
  self.on_polygon_duplicate)
56
- self.pushButton_polygon_remove.clicked.connect(
55
+ self.ui.pushButton_polygon_remove.clicked.connect(
57
56
  self.on_polygon_remove)
58
57
 
59
58
  # polygon selection
60
- self.listWidget_polygon.itemSelectionChanged.connect(
59
+ self.ui.listWidget_polygon.itemSelectionChanged.connect(
61
60
  self.on_polygon_selection)
62
61
 
63
- self.comboBox_filters.currentIndexChanged.connect(self.update_content)
64
- self.toolButton_moreless.clicked.connect(self.on_moreless)
65
- self.label_box_edit.setVisible(False)
62
+ self.ui.comboBox_filters.currentIndexChanged.connect(
63
+ self.update_content)
64
+ self.ui.toolButton_moreless.clicked.connect(self.on_moreless)
65
+ self.ui.label_box_edit.setVisible(False)
66
66
  self._box_edit_view = False
67
67
  self.setUpdatesEnabled(True)
68
68
 
@@ -71,12 +71,12 @@ class FilterPanel(QtWidgets.QWidget):
71
71
  def read_filter_state(self):
72
72
  """Read filter state from UI"""
73
73
  state = {
74
- "filter used": self.checkBox_enable.isChecked(),
74
+ "filter used": self.ui.checkBox_enable.isChecked(),
75
75
  "identifier": self.current_filter.identifier,
76
- "limit events bool": self.checkBox_limit.isChecked(),
77
- "limit events num": self.spinBox_limit.value(),
78
- "name": self.lineEdit_name.text(),
79
- "remove invalid events": self.checkBox_invalid.isChecked(),
76
+ "limit events bool": self.ui.checkBox_limit.isChecked(),
77
+ "limit events num": self.ui.spinBox_limit.value(),
78
+ "name": self.ui.lineEdit_name.text(),
79
+ "remove invalid events": self.ui.checkBox_invalid.isChecked(),
80
80
  }
81
81
  # box filters
82
82
  box = {}
@@ -103,11 +103,11 @@ class FilterPanel(QtWidgets.QWidget):
103
103
  """Write filter state to UI"""
104
104
  if self.current_filter.identifier != state["identifier"]:
105
105
  raise ValueError("Filter identifier mismatch!")
106
- self.checkBox_enable.setChecked(state["filter used"])
107
- self.lineEdit_name.setText(state["name"])
108
- self.checkBox_limit.setChecked(state["limit events bool"])
109
- self.spinBox_limit.setValue(state["limit events num"])
110
- self.checkBox_invalid.setChecked(state["remove invalid events"])
106
+ self.ui.checkBox_enable.setChecked(state["filter used"])
107
+ self.ui.lineEdit_name.setText(state["name"])
108
+ self.ui.checkBox_limit.setChecked(state["limit events bool"])
109
+ self.ui.spinBox_limit.setValue(state["limit events num"])
110
+ self.ui.checkBox_invalid.setChecked(state["remove invalid events"])
111
111
  # box filters
112
112
  box = state["box filters"]
113
113
  for feat in self._box_range_controls:
@@ -142,7 +142,8 @@ class FilterPanel(QtWidgets.QWidget):
142
142
  """
143
143
  feats, labs = self.get_features_labels()
144
144
 
145
- self.verticalLayout_box.setAlignment(QtCore.Qt.AlignmentFlag.AlignTop)
145
+ self.ui.verticalLayout_box.setAlignment(
146
+ QtCore.Qt.AlignmentFlag.AlignTop)
146
147
 
147
148
  for lab, feat in sorted(zip(labs, feats)):
148
149
  integer = True if feat in idiom.INTEGER_FEATURES else False
@@ -160,7 +161,7 @@ class FilterPanel(QtWidgets.QWidget):
160
161
  rcf = list(self._box_range_controls.keys())
161
162
  rcl = [dclab.dfn.get_feature_label(ft) for ft in rcf]
162
163
  index = sorted(rcl + [lab]).index(lab)
163
- self.verticalLayout_box.insertWidget(index, rc)
164
+ self.ui.verticalLayout_box.insertWidget(index, rc)
164
165
  self._box_range_controls[feat] = rc
165
166
 
166
167
  @property
@@ -175,7 +176,7 @@ class FilterPanel(QtWidgets.QWidget):
175
176
  @property
176
177
  def current_filter(self):
177
178
  if self.filter_ids:
178
- filt_index = self.comboBox_filters.currentIndex()
179
+ filt_index = self.ui.comboBox_filters.currentIndex()
179
180
  filt = self.pipeline.filters[filt_index]
180
181
  else:
181
182
  filt = None
@@ -215,7 +216,7 @@ class FilterPanel(QtWidgets.QWidget):
215
216
 
216
217
  def get_polygon_filter_selection(self):
217
218
  """Return selected polygon filters"""
218
- items = self.listWidget_polygon.selectedItems()
219
+ items = self.ui.listWidget_polygon.selectedItems()
219
220
  pfs = []
220
221
  pf_ids = []
221
222
  for (pfid, item) in self._polygon_checkboxes.items():
@@ -226,12 +227,12 @@ class FilterPanel(QtWidgets.QWidget):
226
227
 
227
228
  @QtCore.pyqtSlot()
228
229
  def on_polygon_selection(self):
229
- num_selected = len(self.listWidget_polygon.selectedItems())
230
+ num_selected = len(self.ui.listWidget_polygon.selectedItems())
230
231
  if num_selected == 0:
231
- self.widget_selection.setEnabled(False)
232
+ self.ui.widget_selection.setEnabled(False)
232
233
  else:
233
- self.widget_selection.setEnabled(True)
234
- self.pushButton_polygon_edit.setEnabled(num_selected == 1)
234
+ self.ui.widget_selection.setEnabled(True)
235
+ self.ui.pushButton_polygon_edit.setEnabled(num_selected == 1)
235
236
 
236
237
  @QtCore.pyqtSlot()
237
238
  def on_polygon_duplicate(self):
@@ -323,24 +324,24 @@ class FilterPanel(QtWidgets.QWidget):
323
324
  for feat, rc in self._box_range_controls.items():
324
325
  if feat in features:
325
326
  rc.setVisible(True)
326
- rc.checkBox.setVisible(True)
327
- rc.doubleSpinBox_min.setEnabled(False)
328
- rc.doubleSpinBox_max.setEnabled(False)
329
- rc.range_slider.setEnabled(False)
330
- self.toolButton_moreless.setText("...Finish editing")
331
- self.label_box_edit.setVisible(True)
327
+ rc.ui.checkBox.setVisible(True)
328
+ rc.ui.doubleSpinBox_min.setEnabled(False)
329
+ rc.ui.doubleSpinBox_max.setEnabled(False)
330
+ rc.ui.range_slider.setEnabled(False)
331
+ self.ui.toolButton_moreless.setText("...Finish editing")
332
+ self.ui.label_box_edit.setVisible(True)
332
333
  self._box_edit_view = True
333
334
  else:
334
335
  # Hide all filters that are not active
335
336
  for _, rc in self._box_range_controls.items():
336
337
  if not rc.is_active():
337
338
  rc.setVisible(False)
338
- rc.checkBox.setVisible(False)
339
- rc.doubleSpinBox_min.setEnabled(True)
340
- rc.doubleSpinBox_max.setEnabled(True)
341
- rc.range_slider.setEnabled(True)
342
- self.toolButton_moreless.setText("Choose filters...")
343
- self.label_box_edit.setVisible(False)
339
+ rc.ui.checkBox.setVisible(False)
340
+ rc.ui.doubleSpinBox_min.setEnabled(True)
341
+ rc.ui.doubleSpinBox_max.setEnabled(True)
342
+ rc.ui.range_slider.setEnabled(True)
343
+ self.ui.toolButton_moreless.setText("Choose filters...")
344
+ self.ui.label_box_edit.setVisible(False)
344
345
  self._box_edit_view = False
345
346
  # Update box filter ranges
346
347
  self.update_box_ranges()
@@ -357,24 +358,24 @@ class FilterPanel(QtWidgets.QWidget):
357
358
  def update_content(self, filt_index=None, **kwargs):
358
359
  if self.pipeline and self.pipeline.filters:
359
360
  # remember the previous filter index and make sure it is sane
360
- prev_index = self.comboBox_filters.currentIndex()
361
+ prev_index = self.ui.comboBox_filters.currentIndex()
361
362
  if prev_index is None or prev_index < 0:
362
363
  prev_index = len(self.filter_ids) - 1
363
364
 
364
365
  self.setEnabled(True)
365
366
  self.update_polygon_filters()
366
367
  # update combobox
367
- self.comboBox_filters.blockSignals(True)
368
+ self.ui.comboBox_filters.blockSignals(True)
368
369
  if filt_index is None or filt_index < 0:
369
370
  # fallback to previous filter index
370
371
  filt_index = prev_index
371
372
  filt_index = min(filt_index, len(self.filter_ids) - 1)
372
373
 
373
- self.comboBox_filters.clear()
374
- self.comboBox_filters.addItems(
374
+ self.ui.comboBox_filters.clear()
375
+ self.ui.comboBox_filters.addItems(
375
376
  [filt.name for filt in self.pipeline.filters])
376
- self.comboBox_filters.setCurrentIndex(filt_index)
377
- self.comboBox_filters.blockSignals(False)
377
+ self.ui.comboBox_filters.setCurrentIndex(filt_index)
378
+ self.ui.comboBox_filters.blockSignals(False)
378
379
  # populate content
379
380
  filt = self.pipeline.filters[filt_index]
380
381
  state = filt.__getstate__()
@@ -407,25 +408,25 @@ class FilterPanel(QtWidgets.QWidget):
407
408
  def update_polygon_filters(self):
408
409
  """Update the layout containing the polygon filters"""
409
410
  # clear layout
410
- for _ in range(self.listWidget_polygon.count()):
411
- self.listWidget_polygon.takeItem(0)
411
+ for _ in range(self.ui.listWidget_polygon.count()):
412
+ self.ui.listWidget_polygon.takeItem(0)
412
413
 
413
414
  self._polygon_checkboxes = {} # must come after getting the state
414
415
  if dclab.PolygonFilter.instances:
415
- self.listWidget_polygon.setEnabled(True)
416
+ self.ui.listWidget_polygon.setEnabled(True)
416
417
  for pf in dclab.PolygonFilter.instances:
417
418
  item = QtWidgets.QListWidgetItem(pf.name)
418
419
  item.setFlags(
419
420
  item.flags() | QtCore.Qt.ItemFlag.ItemIsUserCheckable)
420
421
  item.setCheckState(QtCore.Qt.CheckState.Unchecked)
421
- self.listWidget_polygon.addItem(item)
422
+ self.ui.listWidget_polygon.addItem(item)
422
423
  item.setToolTip(f"{pf.unique_id}: {pf.name}")
423
424
  self._polygon_checkboxes[pf.unique_id] = item
424
425
  else:
425
- self.listWidget_polygon.addItem(
426
+ self.ui.listWidget_polygon.addItem(
426
427
  "No polygon filters have been created yet.")
427
- self.listWidget_polygon.setEnabled(False)
428
- self.widget_selection.setEnabled(False)
428
+ self.ui.listWidget_polygon.setEnabled(False)
429
+ self.ui.widget_selection.setEnabled(False)
429
430
 
430
431
  if self.current_filter is not None:
431
432
  filt_id = self.current_filter.identifier