ethograph 0.2.52__tar.gz → 0.2.53__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 (569) hide show
  1. {ethograph-0.2.52 → ethograph-0.2.53}/.gitignore +2 -2
  2. {ethograph-0.2.52 → ethograph-0.2.53}/PKG-INFO +1 -1
  3. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/defaults/README.md +7 -0
  4. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/cover_page.py +2 -1
  5. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pygfx_video.py +21 -0
  6. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/video_sync.py +11 -0
  7. ethograph-0.2.53/ethograph/projects/crowlab/calibration/3D_Analysis_FM.toml +19 -0
  8. {ethograph-0.2.52 → ethograph-0.2.53/ethograph}/projects/crowlab/mapping.txt +2 -2
  9. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/download.py +2 -1
  10. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/paths.py +62 -13
  11. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph.egg-info/PKG-INFO +1 -1
  12. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph.egg-info/SOURCES.txt +9 -24
  13. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph.egg-info/scm_file_list.json +10 -27
  14. ethograph-0.2.53/ethograph.egg-info/scm_version.json +8 -0
  15. ethograph-0.2.53/projects/crowlab/ReadMe.md +1 -0
  16. ethograph-0.2.53/projects/crowlab/mapping.txt +34 -0
  17. ethograph-0.2.53/projects/crowlab/mapping_setup_audio.txt +8 -0
  18. ethograph-0.2.53/projects/crowlab/workflows/01 PES Curation.yaml +48 -0
  19. ethograph-0.2.53/projects/crowlab/workflows/Freddy_GBM.yaml +43 -0
  20. ethograph-0.2.53/projects/crowlab/workflows/Ivy_GBM.yaml +47 -0
  21. ethograph-0.2.53/projects/crowlab/workflows/Poppy_GBM.yaml +43 -0
  22. {ethograph-0.2.52 → ethograph-0.2.53}/pyproject.toml +1 -1
  23. ethograph-0.2.52/ethograph.egg-info/scm_version.json +0 -8
  24. ethograph-0.2.52/projects/crowlab/old config/changepoint_settings_old.yaml +0 -13
  25. ethograph-0.2.52/projects/crowlab/old config/mapping_Ivy.txt +0 -21
  26. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Crow1_inference_20260330_161224.json +0 -79
  27. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Crow1_inference_20260330_161259.json +0 -80
  28. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Freddy_inference_20260330_160621.json +0 -57
  29. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Freddy_train_20251021_164220.json +0 -64
  30. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Freddy_train_20251021_164220_epoch-100.model +0 -0
  31. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Ivy_CV_20260130_173800.json +0 -111
  32. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Ivy_inference_20260203_092442.json +0 -73
  33. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Ivy_inference_20260204_141527.json +0 -70
  34. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Ivy_inference_20260206_122331.json +0 -80
  35. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Ivy_train_20260202_191138_epoch-100.model +0 -0
  36. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Ivy_train_20260203_153754.json +0 -70
  37. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Poppy_inference_20260312_100707.json +0 -76
  38. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Poppy_inference_20260327_102414.json +0 -78
  39. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Poppy_inference_20260330_140808.json +0 -78
  40. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Poppy_inference_20260402_104151.json +0 -79
  41. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Poppy_train_20260326_190925.json +0 -80
  42. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/Poppy_train_20260331_175332.json +0 -80
  43. ethograph-0.2.52/projects/crowlab/old config/old segmentation config/ReadMe - model Freddy_train_20251021_164220_epoch-100.txt +0 -1
  44. ethograph-0.2.52/projects/crowlab/project.yaml +0 -2
  45. ethograph-0.2.52/projects/crowlab/wizard/CrowBench.ipynb +0 -709
  46. ethograph-0.2.52/projects/crowlab/wizard/SENTINEL.txt +0 -0
  47. {ethograph-0.2.52 → ethograph-0.2.53}/.claude/settings.local.json +0 -0
  48. {ethograph-0.2.52 → ethograph-0.2.53}/.gitattributes +0 -0
  49. {ethograph-0.2.52 → ethograph-0.2.53}/.github/copilot-instructions.md +0 -0
  50. {ethograph-0.2.52 → ethograph-0.2.53}/.github/workflows/docs_build_and_deploy.yml +0 -0
  51. {ethograph-0.2.52 → ethograph-0.2.53}/.github/workflows/test_and_deploy.yml +0 -0
  52. {ethograph-0.2.52 → ethograph-0.2.53}/.readthedocs.yaml +0 -0
  53. {ethograph-0.2.52 → ethograph-0.2.53}/CLAUDE.md +0 -0
  54. {ethograph-0.2.52 → ethograph-0.2.53}/LICENSE +0 -0
  55. {ethograph-0.2.52 → ethograph-0.2.53}/MANIFEST.in +0 -0
  56. {ethograph-0.2.52 → ethograph-0.2.53}/README.md +0 -0
  57. {ethograph-0.2.52 → ethograph-0.2.53}/THIRD_PARTY_NOTICES.md +0 -0
  58. {ethograph-0.2.52 → ethograph-0.2.53}/TODO.md +0 -0
  59. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/__init__.py +0 -0
  60. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/__main__.py +0 -0
  61. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/_vendor/__init__.py +0 -0
  62. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/_vendor/samurai/LICENSE +0 -0
  63. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/_vendor/samurai/NOTICE.md +0 -0
  64. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/_vendor/samurai/__init__.py +0 -0
  65. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/_vendor/samurai/kalman_filter.py +0 -0
  66. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/_vendor/vocalseg/LICENSE +0 -0
  67. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/_vendor/vocalseg/NOTICE.md +0 -0
  68. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/_vendor/vocalseg/__init__.py +0 -0
  69. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/_vendor/vocalseg/continuity_filtering.py +0 -0
  70. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/_vendor/vocalseg/dynamic_thresholding.py +0 -0
  71. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/_vendor/vocalseg/utils.py +0 -0
  72. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/assets/icon.ico +0 -0
  73. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/assets/icon.png +0 -0
  74. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/assets/menu.json +0 -0
  75. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/assets/space/moll2025.yaml +0 -0
  76. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/cli.py +0 -0
  77. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/datasets.py +0 -0
  78. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/defaults/mapping.txt +0 -0
  79. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/defaults/octron/octron.yaml +0 -0
  80. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/defaults/segment/segment.yaml +0 -0
  81. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/defaults/spot/spot.yaml +0 -0
  82. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/features/__init__.py +0 -0
  83. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/features/audio_changepoints.py +0 -0
  84. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/features/bursts.py +0 -0
  85. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/features/changepoints.py +0 -0
  86. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/features/columns.py +0 -0
  87. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/features/energy.py +0 -0
  88. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/features/geometry.py +0 -0
  89. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/features/label_inputs.py +0 -0
  90. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/features/movement.py +0 -0
  91. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/features/neural.py +0 -0
  92. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/features/oscillatory.py +0 -0
  93. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/features/preprocessing.py +0 -0
  94. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/features/timeaxis.py +0 -0
  95. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/__init__.py +0 -0
  96. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/active_panel.py +0 -0
  97. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/app_constants.py +0 -0
  98. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/app_state.py +0 -0
  99. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/assets/templates/birdpark0.png +0 -0
  100. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/assets/templates/birdpark1.png +0 -0
  101. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/assets/templates/canary.png +0 -0
  102. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/assets/templates/cricket0.png +0 -0
  103. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/assets/templates/cricket1.png +0 -0
  104. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/assets/templates/cricket2.png +0 -0
  105. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/assets/templates/lockbox1.png +0 -0
  106. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/assets/templates/lockbox2.gif +0 -0
  107. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/assets/templates/moll1.png +0 -0
  108. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/assets/templates/moll2.png +0 -0
  109. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/assets/wizard/video_setup_free_running.png +0 -0
  110. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/assets/wizard/video_setup_triggered.png +0 -0
  111. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/audio_clock.py +0 -0
  112. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/audio_player.py +0 -0
  113. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/box_annotate.py +0 -0
  114. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/box_overlay.py +0 -0
  115. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_ambiguous_session.py +0 -0
  116. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_boris_import.py +0 -0
  117. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_box_labelling.py +0 -0
  118. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_bulk_labels.py +0 -0
  119. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_busy_progress.py +0 -0
  120. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_collected_data.py +0 -0
  121. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_curation_workflow.py +0 -0
  122. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_curator_feedback.py +0 -0
  123. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_feature_labels.py +0 -0
  124. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_fit.py +0 -0
  125. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_function_params.py +0 -0
  126. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_keypoint_filter.py +0 -0
  127. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_label_gridview.py +0 -0
  128. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_label_inconsistencies.py +0 -0
  129. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_label_table.py +0 -0
  130. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_measure.py +0 -0
  131. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_onset_model.py +0 -0
  132. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_pose_labelling.py +0 -0
  133. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_pose_video_matcher.py +0 -0
  134. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_review_histogram.py +0 -0
  135. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_screen_recorder.py +0 -0
  136. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_select_template.py +0 -0
  137. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_session_folder.py +0 -0
  138. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_settings.py +0 -0
  139. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_skeleton_editor.py +0 -0
  140. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_smoothing.py +0 -0
  141. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_space_geometry.py +0 -0
  142. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_spot_crop.py +0 -0
  143. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_tag_sheet.py +0 -0
  144. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/dialog_video_grid.py +0 -0
  145. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/file_dialogs.py +0 -0
  146. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/grid_section_container.py +0 -0
  147. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/heatmap_sort.py +0 -0
  148. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/individual_colors.py +0 -0
  149. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/label_drawing_mixin.py +0 -0
  150. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/left_sidebar.py +0 -0
  151. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/main_window.py +0 -0
  152. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/make_pretty.py +0 -0
  153. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/napari.yaml +0 -0
  154. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/notify.py +0 -0
  155. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_audiotrace.py +0 -0
  156. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_base.py +0 -0
  157. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_console.py +0 -0
  158. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_container.py +0 -0
  159. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_ephystrace.py +0 -0
  160. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_heatmap.py +0 -0
  161. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_labelribbon.py +0 -0
  162. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_lineplot.py +0 -0
  163. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_overlay.py +0 -0
  164. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_psth.py +0 -0
  165. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_radial.py +0 -0
  166. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_raster.py +0 -0
  167. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_skeleton.py +0 -0
  168. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_space.py +0 -0
  169. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/plots_spectrogram.py +0 -0
  170. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_annotate.py +0 -0
  171. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_convert.py +0 -0
  172. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_detect.py +0 -0
  173. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_detect_preview.py +0 -0
  174. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_edit_mixin.py +0 -0
  175. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_fill.py +0 -0
  176. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_overlay.py +0 -0
  177. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_project_mode.py +0 -0
  178. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_render.py +0 -0
  179. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_second_view.py +0 -0
  180. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_static_group.py +0 -0
  181. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_suggest.py +0 -0
  182. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_tagsheet.py +0 -0
  183. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_training_export.py +0 -0
  184. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/pose_two_view.py +0 -0
  185. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/project.py +0 -0
  186. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/proxy_manager.py +0 -0
  187. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/raster_render.py +0 -0
  188. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/right_context.py +0 -0
  189. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/session_folder.py +0 -0
  190. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/shortcuts.py +0 -0
  191. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/source_popup.py +0 -0
  192. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/space_shapes.py +0 -0
  193. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/table_filter.py +0 -0
  194. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/templates/notebook/discover.py.j2 +0 -0
  195. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/templates/notebook/open.md.j2 +0 -0
  196. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/templates/notebook/parameters.py.j2 +0 -0
  197. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/templates/notebook/timing_offset.py.j2 +0 -0
  198. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/templates/notebook/timing_onsets.py.j2 +0 -0
  199. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/templates/notebook/timing_pulses_free.py.j2 +0 -0
  200. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/templates/notebook/timing_pulses_triggered.py.j2 +0 -0
  201. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/templates/notebook/write_neuroconv.py.j2 +0 -0
  202. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/templates/notebook/write_pair.py.j2 +0 -0
  203. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/templates/wizard_nwb_codegen.j2 +0 -0
  204. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/theme.py +0 -0
  205. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/top_bar.py +0 -0
  206. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/triangulation.py +0 -0
  207. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/unit_events.py +0 -0
  208. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/video_manager.py +0 -0
  209. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widget_trials.py +0 -0
  210. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_bottom_bar.py +0 -0
  211. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_changepoints.py +0 -0
  212. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_curation.py +0 -0
  213. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_data.py +0 -0
  214. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_ephys.py +0 -0
  215. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_frame_extract.py +0 -0
  216. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_help.py +0 -0
  217. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_io.py +0 -0
  218. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_labels.py +0 -0
  219. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_meta.py +0 -0
  220. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_navigation.py +0 -0
  221. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_plot_settings.py +0 -0
  222. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_psth.py +0 -0
  223. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/widgets_transform.py +0 -0
  224. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/wizard_media_files.py +0 -0
  225. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/wizard_multi_builder.py +0 -0
  226. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/wizard_multi_codegen.py +0 -0
  227. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/wizard_multi_tabs.py +0 -0
  228. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/wizard_multi_timeline.py +0 -0
  229. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/wizard_multi_trials.py +0 -0
  230. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/wizard_notebook.py +0 -0
  231. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/wizard_nwb.py +0 -0
  232. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/wizard_overview.py +0 -0
  233. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/wizard_pages.py +0 -0
  234. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/wizard_single.py +0 -0
  235. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/gui/wizard_state.py +0 -0
  236. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/audio_extract.py +0 -0
  237. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/catalog.py +0 -0
  238. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/data_loader.py +0 -0
  239. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/dataset.py +0 -0
  240. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/derived.py +0 -0
  241. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/ephys_loader.py +0 -0
  242. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/external_features.py +0 -0
  243. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/image_sequence.py +0 -0
  244. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/metadata_edit.py +0 -0
  245. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/metadata_table.py +0 -0
  246. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/nc_drop.py +0 -0
  247. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/netcdf.py +0 -0
  248. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/nwb_alignment.py +0 -0
  249. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/nwb_import.py +0 -0
  250. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/overlay_source.py +0 -0
  251. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/pairing.py +0 -0
  252. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/plot_sources.py +0 -0
  253. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/pynapple.py +0 -0
  254. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/schema.py +0 -0
  255. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/session_layout.py +0 -0
  256. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/time_model.py +0 -0
  257. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/time_sources.py +0 -0
  258. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/trialtree.py +0 -0
  259. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/validation.py +0 -0
  260. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/video_decode.py +0 -0
  261. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/video_feature_files.py +0 -0
  262. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/video_probe.py +0 -0
  263. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/io/video_proxy.py +0 -0
  264. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/__init__.py +0 -0
  265. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/boris.py +0 -0
  266. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/check_labels.py +0 -0
  267. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/confidence.py +0 -0
  268. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/converters.py +0 -0
  269. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/crowsetta_format.py +0 -0
  270. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/curation.py +0 -0
  271. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/export.py +0 -0
  272. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/exporters/__init__.py +0 -0
  273. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/exporters/crowlab.py +0 -0
  274. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/feature_events.py +0 -0
  275. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/intervals.py +0 -0
  276. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/label_inputs.py +0 -0
  277. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/ml.py +0 -0
  278. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/octron_project.py +0 -0
  279. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/onset_curves.py +0 -0
  280. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/onset_model.py +0 -0
  281. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/plots.py +0 -0
  282. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/pose_project.py +0 -0
  283. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/predictions.py +0 -0
  284. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/rescore.py +0 -0
  285. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/review_metrics.py +0 -0
  286. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/tsv_store.py +0 -0
  287. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/labels/workflow.py +0 -0
  288. {ethograph-0.2.52 → ethograph-0.2.53/ethograph}/projects/crowlab/ReadMe.md +0 -0
  289. {ethograph-0.2.52 → ethograph-0.2.53/ethograph}/projects/crowlab/mapping_setup_audio.txt +0 -0
  290. {ethograph-0.2.52/projects/crowlab/config → ethograph-0.2.53/ethograph/projects/crowlab}/space/moll2025.yaml +0 -0
  291. {ethograph-0.2.52 → ethograph-0.2.53/ethograph}/projects/crowlab/workflows/01 PES Curation.yaml +0 -0
  292. {ethograph-0.2.52 → ethograph-0.2.53/ethograph}/projects/crowlab/workflows/Freddy_GBM.yaml +0 -0
  293. {ethograph-0.2.52 → ethograph-0.2.53/ethograph}/projects/crowlab/workflows/Ivy_GBM.yaml +0 -0
  294. {ethograph-0.2.52 → ethograph-0.2.53/ethograph}/projects/crowlab/workflows/Poppy_GBM.yaml +0 -0
  295. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/samfill/__init__.py +0 -0
  296. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/samfill/config.py +0 -0
  297. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/samfill/fill.py +0 -0
  298. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/samfill/pairing.py +0 -0
  299. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/samfill/plan.py +0 -0
  300. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/samfill/review.py +0 -0
  301. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/samfill/sam.py +0 -0
  302. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/samfill/samurai.py +0 -0
  303. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/__init__.py +0 -0
  304. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/augment.py +0 -0
  305. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/config.py +0 -0
  306. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/crossval.py +0 -0
  307. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dataset.py +0 -0
  308. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/LICENSE.APGPL +0 -0
  309. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/NOTICE.md +0 -0
  310. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/__init__.py +0 -0
  311. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/colors.txt +0 -0
  312. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/config/losses.yaml +0 -0
  313. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/config/model/asformer.yaml +0 -0
  314. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/config/model/c2f_tcn.yaml +0 -0
  315. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/config/model/c2f_transformer.yaml +0 -0
  316. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/config/model/edtcn.yaml +0 -0
  317. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/config/model/mlp.yaml +0 -0
  318. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/config/model/motionbert.yaml +0 -0
  319. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/config/model/ms_tcn3.yaml +0 -0
  320. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/config/model/transformer.yaml +0 -0
  321. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/config/training.yaml +0 -0
  322. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/loss/__init__.py +0 -0
  323. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/loss/asymmetric_loss.py +0 -0
  324. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/loss/ms_tcn.py +0 -0
  325. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/loss/mse.py +0 -0
  326. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/loss/tcc.py +0 -0
  327. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/__init__.py +0 -0
  328. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/asformer.py +0 -0
  329. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/base_model.py +0 -0
  330. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/c2f_tcn.py +0 -0
  331. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/c2f_tcn_par.py +0 -0
  332. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/c2f_transformer.py +0 -0
  333. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/c3d.py +0 -0
  334. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/edtcn.py +0 -0
  335. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/mlp.py +0 -0
  336. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/motionbert.py +0 -0
  337. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/motionbert_modules.py +0 -0
  338. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/ms_tcn.py +0 -0
  339. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/ms_tcn_modules.py +0 -0
  340. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/model/transformer.py +0 -0
  341. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/utils.py +0 -0
  342. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/dlc2action/version.py +0 -0
  343. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/feral.py +0 -0
  344. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/feral_defaults/NOTICE.md +0 -0
  345. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/feral_defaults/default_config.yaml +0 -0
  346. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/feral_defaults/presets.yaml +0 -0
  347. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/inference.py +0 -0
  348. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/joints.py +0 -0
  349. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/LICENSE +0 -0
  350. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/NOTICE.md +0 -0
  351. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/__init__.py +0 -0
  352. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/config/defaults.yaml +0 -0
  353. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/generalized_coordinates.py +0 -0
  354. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/loss_fn/ECloss.py +0 -0
  355. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/loss_fn/__init__.py +0 -0
  356. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/models/LaDy.py +0 -0
  357. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/models/SP.py +0 -0
  358. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/models/__init__.py +0 -0
  359. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/models/dynamics.py +0 -0
  360. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/models/graph/__init__.py +0 -0
  361. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/models/graph/tools.py +0 -0
  362. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/lady/models/tcn.py +0 -0
  363. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/losses.py +0 -0
  364. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/materialise.py +0 -0
  365. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/metrics.py +0 -0
  366. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/models/__init__.py +0 -0
  367. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/models/config/rnn.yaml +0 -0
  368. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/models/rnn.py +0 -0
  369. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/models/skeleton_graph.py +0 -0
  370. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/models/vendored.py +0 -0
  371. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/plotting.py +0 -0
  372. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/postprocess.py +0 -0
  373. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/prediction_sets.py +0 -0
  374. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/preprocess.py +0 -0
  375. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/project.py +0 -0
  376. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/roles.py +0 -0
  377. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/samples.py +0 -0
  378. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/search.py +0 -0
  379. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/sessions.py +0 -0
  380. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/specscalpel/LICENSE +0 -0
  381. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/specscalpel/NOTICE.md +0 -0
  382. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/specscalpel/__init__.py +0 -0
  383. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/specscalpel/config/defaults.yaml +0 -0
  384. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/specscalpel/models/SP.py +0 -0
  385. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/specscalpel/models/SpecScalpel.py +0 -0
  386. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/specscalpel/models/__init__.py +0 -0
  387. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/specscalpel/models/graph/__init__.py +0 -0
  388. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/specscalpel/models/graph/tools.py +0 -0
  389. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/specscalpel/models/tcn.py +0 -0
  390. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/train.py +0 -0
  391. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/video_features.py +0 -0
  392. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/segment/windows.py +0 -0
  393. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/shortcuts.py +0 -0
  394. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/skeleton/CREDITS.md +0 -0
  395. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/skeleton/__init__.py +0 -0
  396. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/skeleton/config.py +0 -0
  397. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/skeleton/graph.py +0 -0
  398. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/skeleton/library.py +0 -0
  399. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/skeleton/renderers/__init__.py +0 -0
  400. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/skeleton/renderers/base.py +0 -0
  401. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/skeleton/renderers/precomputed.py +0 -0
  402. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/skeleton/shapes.py +0 -0
  403. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/skeleton/state.py +0 -0
  404. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/skeleton/templates.py +0 -0
  405. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/__init__.py +0 -0
  406. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/confidence.py +0 -0
  407. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/config.py +0 -0
  408. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/crossval.py +0 -0
  409. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/dataset.py +0 -0
  410. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/LICENSE +0 -0
  411. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/NOTICE.md +0 -0
  412. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/__init__.py +0 -0
  413. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/dataset/__init__.py +0 -0
  414. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/dataset/frame.py +0 -0
  415. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/dataset/transform.py +0 -0
  416. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/model/__init__.py +0 -0
  417. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/model/common.py +0 -0
  418. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/model/impl/__init__.py +0 -0
  419. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/model/impl/asformer.py +0 -0
  420. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/model/impl/gsm.py +0 -0
  421. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/model/impl/tsm.py +0 -0
  422. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/model/modules.py +0 -0
  423. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/model/shift.py +0 -0
  424. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/test_e2e.py +0 -0
  425. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/train_e2e.py +0 -0
  426. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/util/__init__.py +0 -0
  427. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/util/dataset.py +0 -0
  428. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/util/eval.py +0 -0
  429. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/util/io.py +0 -0
  430. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/e2espot/util/score.py +0 -0
  431. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/features.py +0 -0
  432. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/inference.py +0 -0
  433. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/metrics.py +0 -0
  434. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/msagsm.py +0 -0
  435. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/pose_batch.py +0 -0
  436. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/prediction_sets.py +0 -0
  437. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/project.py +0 -0
  438. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/stream.py +0 -0
  439. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/spot/vendored.py +0 -0
  440. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/triangulate/__init__.py +0 -0
  441. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/triangulate/calibration.py +0 -0
  442. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/triangulate/frame.py +0 -0
  443. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/triangulate/geometry.py +0 -0
  444. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/triangulate/points.py +0 -0
  445. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/triangulate/session.py +0 -0
  446. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/__init__.py +0 -0
  447. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/arraytools.py +0 -0
  448. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/audio.py +0 -0
  449. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/configkit.py +0 -0
  450. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/device.py +0 -0
  451. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/ffmpeg.py +0 -0
  452. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/logging.py +0 -0
  453. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/nwb.py +0 -0
  454. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/qt.py +0 -0
  455. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/sequences.py +0 -0
  456. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/stream_durations.py +0 -0
  457. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/system_check.py +0 -0
  458. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/utils/xr_utils.py +0 -0
  459. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/video_features/__init__.py +0 -0
  460. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/video_features/base.py +0 -0
  461. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/video_features/checkpoint/S3D_kinetics400_torchified.pt +0 -0
  462. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/video_features/extract.py +0 -0
  463. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/video_features/frames.py +0 -0
  464. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/video_features/plan.py +0 -0
  465. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/video_features/s3d.py +0 -0
  466. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/video_features/select.py +0 -0
  467. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph/video_features/timm_extract.py +0 -0
  468. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph.egg-info/dependency_links.txt +0 -0
  469. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph.egg-info/entry_points.txt +0 -0
  470. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph.egg-info/requires.txt +0 -0
  471. {ethograph-0.2.52 → ethograph-0.2.53}/ethograph.egg-info/top_level.txt +0 -0
  472. {ethograph-0.2.52 → ethograph-0.2.53}/examples/README.md +0 -0
  473. {ethograph-0.2.52 → ethograph-0.2.53}/examples/birdpark_dev/birdpark_pose.ipynb +0 -0
  474. {ethograph-0.2.52 → ethograph-0.2.53}/examples/convert_dataset_birdpark.ipynb +0 -0
  475. {ethograph-0.2.52 → ethograph-0.2.53}/examples/convert_dataset_pair24.ipynb +0 -0
  476. {ethograph-0.2.52 → ethograph-0.2.53}/examples/convert_datset_lockbox.ipynb +0 -0
  477. {ethograph-0.2.52 → ethograph-0.2.53}/examples/create_dataset_Moll25.ipynb +0 -0
  478. {ethograph-0.2.52 → ethograph-0.2.53}/examples/create_dataset_cricket.ipynb +0 -0
  479. {ethograph-0.2.52 → ethograph-0.2.53}/examples/segement_s3d_features.ipynb +0 -0
  480. {ethograph-0.2.52 → ethograph-0.2.53}/examples/segment_changepoint_features.ipynb +0 -0
  481. {ethograph-0.2.52 → ethograph-0.2.53}/notes/Bench_neural-decoding.md +0 -0
  482. {ethograph-0.2.52 → ethograph-0.2.53}/notes/Bench_smoothalpha.md +0 -0
  483. {ethograph-0.2.52 → ethograph-0.2.53}/notes/Lit_active-periods.md +0 -0
  484. {ethograph-0.2.52 → ethograph-0.2.53}/notes/Lit_curator-feedback.md +0 -0
  485. {ethograph-0.2.52 → ethograph-0.2.53}/notes/Lit_dlc2action.md +0 -0
  486. {ethograph-0.2.52 → ethograph-0.2.53}/notes/Lit_feralbeast.md +0 -0
  487. {ethograph-0.2.52 → ethograph-0.2.53}/notes/Lit_precise-event-spotting.md +0 -0
  488. {ethograph-0.2.52 → ethograph-0.2.53}/notes/Lit_unsupervised-proposals.md +0 -0
  489. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0001-vendor-dlc2action-architectures.md +0 -0
  490. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0002-literature-dataset-layout.md +0 -0
  491. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0003-advisory-variable-schema.md +0 -0
  492. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0004-scripted-not-cli.md +0 -0
  493. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0005-search-then-cross-validate.md +0 -0
  494. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0006-postprocess-from-gui-settings.md +0 -0
  495. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0007-distil-inside-the-vendored-trainer.md +0 -0
  496. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0008-features-not-graphs.md +0 -0
  497. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0009-extractors-pip-installed-not-vendored.md +0 -0
  498. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0009-spikes-as-a-config-transform.md +0 -0
  499. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0010-multilabel-targets-are-tracks.md +0 -0
  500. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0011-labels-as-inputs-across-branches.md +0 -0
  501. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0012-feral-is-an-external-extractor.md +0 -0
  502. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0013-no-learned-boundary-model-over-pose.md +0 -0
  503. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0013-session-is-a-folder-media-are-absolute.md +0 -0
  504. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0014-pose-project-as-two-sessions.md +0 -0
  505. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0015-flat-project-folder-and-libraries.md +0 -0
  506. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0015-periods-from-thresholds-and-burst-detectors.md +0 -0
  507. {ethograph-0.2.52 → ethograph-0.2.53}/notes/adr/0016-aniposelib-does-the-geometry.md +0 -0
  508. {ethograph-0.2.52 → ethograph-0.2.53}/notes/drafts/pynapple_burst_detection.py +0 -0
  509. {ethograph-0.2.52 → ethograph-0.2.53}/notes/drafts/pynapple_burst_r_to_python.html +0 -0
  510. {ethograph-0.2.52 → ethograph-0.2.53}/notes/feedback/audio_clock_dac_timestamps.md +0 -0
  511. {ethograph-0.2.52 → ethograph-0.2.53}/notes/feedback/debug_launcher_clock_patch.md +0 -0
  512. {ethograph-0.2.52 → ethograph-0.2.53}/notes/feedback/ethograph_annotation_feasibility_report.md +0 -0
  513. {ethograph-0.2.52 → ethograph-0.2.53}/notes/feedback/ethograph_windows_author_overview_2026-08-18.md +0 -0
  514. {ethograph-0.2.52 → ethograph-0.2.53}/notes/feedback/processed/ehtograph_feedback_report.md +0 -0
  515. {ethograph-0.2.52 → ethograph-0.2.53}/notes/feedback/processed/handoff_playback_and_video_freeze.md +0 -0
  516. {ethograph-0.2.52 → ethograph-0.2.53}/notes/feedback/reverted_pynapple_trials_timing.diff +0 -0
  517. {ethograph-0.2.52 → ethograph-0.2.53}/notes/prototypes/smoothing_ui.html +0 -0
  518. {ethograph-0.2.52 → ethograph-0.2.53}/projects/crowlab/sessions.txt +0 -0
  519. {ethograph-0.2.52 → ethograph-0.2.53}/projects/neural/decoding.yaml +0 -0
  520. {ethograph-0.2.52 → ethograph-0.2.53}/projects/paper/labels.yaml +0 -0
  521. {ethograph-0.2.52 → ethograph-0.2.53}/projects/paper/spot/spot.yaml +0 -0
  522. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/Developer.md +0 -0
  523. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/_sweep.py +0 -0
  524. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/bench.py +0 -0
  525. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/bench_search.py +0 -0
  526. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/bench_videofeat.py +0 -0
  527. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/bench_watch.ps1 +0 -0
  528. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/compare.py +0 -0
  529. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/dandi/dandi_ibl-brainwide.ipynb.ipynb +0 -0
  530. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/dandi/nwb_video_testing.ipynb +0 -0
  531. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/describe_sessions.py +0 -0
  532. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/docs_changepoint_screenshots.py +0 -0
  533. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/docs_mapping_plot.py +0 -0
  534. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/docs_sidebar_screenshots.py +0 -0
  535. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/docs_smoothing_screenshots.py +0 -0
  536. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/ephys/ephys_drift_diagnosis.ipynb +0 -0
  537. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/ephys/ephys_loader.ipynb +0 -0
  538. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/export_frames.py +0 -0
  539. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/export_neural_rate.py +0 -0
  540. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/feral/export_feral.py +0 -0
  541. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/feral/reinfer_feral.py +0 -0
  542. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/feral/run_feral.py +0 -0
  543. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/feral/score_feral.py +0 -0
  544. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/neuroconv.ipynb +0 -0
  545. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/README.md +0 -0
  546. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/changepoint_bars.py +0 -0
  547. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/crossval_bars.py +0 -0
  548. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/crossval_label_counts.py +0 -0
  549. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/embedding_grid.py +0 -0
  550. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/embedding_heatmaps.py +0 -0
  551. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/figure_combined.py +0 -0
  552. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/figure_neural.py +0 -0
  553. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/figure_review.py +0 -0
  554. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/figure_review_curves.py +0 -0
  555. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/figure_review_speed.py +0 -0
  556. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/s3d_ablation_bars.py +0 -0
  557. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/session.py +0 -0
  558. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/style/style ppt.mplstyle +0 -0
  559. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/paper1/style/style.mplstyle +0 -0
  560. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/release.ps1 +0 -0
  561. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/run.py +0 -0
  562. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/run_sleep.py +0 -0
  563. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/samfill_batch.py +0 -0
  564. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/screenshot_gui.py +0 -0
  565. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/spot.py +0 -0
  566. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/test.ipynb +0 -0
  567. {ethograph-0.2.52 → ethograph-0.2.53}/scripts/train_spot.py +0 -0
  568. {ethograph-0.2.52 → ethograph-0.2.53}/setup.cfg +0 -0
  569. {ethograph-0.2.52 → ethograph-0.2.53}/uv.lock +0 -0
@@ -1,6 +1,6 @@
1
1
 
2
- projects/
3
- !projects/defaults/*
2
+ /projects/
3
+ !/projects/defaults/*
4
4
  spot_frames/
5
5
  *pynapple_burst_r_to_python.html
6
6
  result/
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ethograph
3
- Version: 0.2.52
3
+ Version: 0.2.53
4
4
  Summary: A multimodal timeseries GUI for neuroethology
5
5
  Author-email: Akseli Ilmanen <akseli.ilmanen@gmail.com>
6
6
  License-Expression: GPL-3.0-or-later
@@ -49,3 +49,10 @@ references:
49
49
 
50
50
  Add a file to this folder via PR to ship it as a default. The example configs
51
51
  must keep loading: `tests/test_unit/test_home_layout.py` builds each one.
52
+
53
+ ## Bundled projects (`ethograph/projects/`)
54
+
55
+ Each folder here is a whole project, seeded into `~/.ethograph/{name}/` the
56
+ same way (`seed_bundled_projects`). The repo's `projects/crowlab/` is the
57
+ working copy; `ethograph/projects/crowlab/` is what ships, and a test keeps
58
+ the two equal. `runs/`, `sessions/`, `sessions.txt` and `wizard/` never ship.
@@ -88,7 +88,7 @@ from ethograph.io.validation import (
88
88
  VIDEO_EXTENSIONS,
89
89
  movement_dataset_info,
90
90
  )
91
- from ethograph.utils.paths import SETTINGS_DIR, defaults_dir, seed_defaults
91
+ from ethograph.utils.paths import SETTINGS_DIR, defaults_dir, seed_bundled_projects, seed_defaults
92
92
 
93
93
  # POSE_SOFTWARES is shared with the pose-overlay prompt in pose_render.
94
94
  from .app_constants import POSE_SOFTWARES
@@ -595,6 +595,7 @@ class CoverPage(QDialog):
595
595
  if chosen_project_dir(self.app_state) is not None:
596
596
  return
597
597
  seed_defaults()
598
+ seed_bundled_projects()
598
599
  starter = defaults_dir()
599
600
  starter.mkdir(parents=True, exist_ok=True)
600
601
  self.app_state.project_path = str(starter)
@@ -17,8 +17,10 @@ Seeking model:
17
17
  from __future__ import annotations
18
18
 
19
19
  import logging
20
+ import multiprocessing
20
21
  import os
21
22
  import queue
23
+ import sys
22
24
  import time
23
25
  from types import MethodType
24
26
  from typing import Optional
@@ -39,6 +41,25 @@ from .pose_overlay import PoseOverlay
39
41
  logger = logging.getLogger(__name__)
40
42
 
41
43
 
44
+ def _spawn_decode_workers_on_macos() -> None:
45
+ """Start pynaviz's decode worker with ``spawn`` on macOS, as on Windows.
46
+
47
+ pynaviz forces the ``fork`` start method on every non-Windows platform at
48
+ import. Forking a process that already runs Cocoa, Metal/wgpu and libav
49
+ threads is unsupported on macOS: pynaviz's own tests record the worker
50
+ dying with SIGSEGV at start-up because the libav demux thread's mutexes are
51
+ copied locked. A dead worker serves no async seek, so a single-frame step
52
+ moves the playhead but never the picture. ``spawn`` is the path Windows
53
+ already takes; its slow start-up is covered by the cold-decoder bridge in
54
+ :class:`~ethograph.gui.video_sync.VideoSync`.
55
+ """
56
+ if sys.platform == "darwin":
57
+ multiprocessing.set_start_method("spawn", force=True)
58
+
59
+
60
+ _spawn_decode_workers_on_macos()
61
+
62
+
42
63
  # Heartbeat age past which the render chain is considered dead (see
43
64
  # install_animate_guard / nudge_stalled_render). animate() normally re-arms
44
65
  # itself every frame, so one full second without a beat is a stall.
@@ -148,7 +148,18 @@ class VideoSync(QObject):
148
148
  # leftover marker override from a prior continuous-end segment finish.
149
149
  self.marker_time_override = None
150
150
  frame = max(0, min(int(frame), self.total_frames - 1)) if self.total_frames else 0
151
+ # Same cold-worker tolerance as playback: an async seek against a
152
+ # worker that has not yet served a frame is dropped, so decode this
153
+ # one in-process too — an arrow step must always show its frame.
151
154
  self.view.seek_trial_frame(frame)
155
+ if not self.view.decoder_ready():
156
+ self.view.seek_trial_frame(frame, synchronous=True)
157
+ # The async path presents only through pynaviz's self-re-arming
158
+ # animate chain; the playback watchdog is the only other thing that
159
+ # restarts a dead one, and it does not run while stopped.
160
+ nudge = getattr(self.view, "nudge_render_if_stalled", None)
161
+ if nudge is not None and nudge():
162
+ logger.warning("Video render loop was stalled; re-armed the draw chain on seek.")
152
163
  self._apply_frame(frame)
153
164
 
154
165
  def _apply_frame(self, frame: int):
@@ -0,0 +1,19 @@
1
+ [cam_0]
2
+ name = "cam-1"
3
+ size = [ 512, 562,]
4
+ matrix = [ [ 515.0444008533133, 0.0, 154.22201617442832,], [ 0.0, 516.1419476946951, 214.07447948182286,], [ 0.0, 0.0, 1.0,],]
5
+ distortions = [ -0.24221547972788354, 0.14346556993892795, -0.00515831655881969, 0.0013725514104746081, -0.05702948956575608,]
6
+ rotation = [ -0.017371108987220343, 0.16771373111094, -0.10326866065634688,]
7
+ translation = [ 0.0, 0.0, 0.0,]
8
+
9
+ [cam_1]
10
+ name = "cam-2"
11
+ size = [ 512, 562,]
12
+ matrix = [ [ 533.4865830454712, 0.0, 374.39479229820057,], [ 0.0, 536.7981372559631, 213.1519682543075,], [ 0.0, 0.0, 1.0,],]
13
+ distortions = [ -0.27059396933244, 0.16683263775789742, -0.004176269919434861, -0.0009247729826822582, -0.05652783562214587,]
14
+ rotation = [ 0.01735481150521321, 0.09175313109782211, -0.08864227449585904,]
15
+ translation = [ -5.728928454834148, 0.5059804012673216, 0.5329275489838221,]
16
+
17
+ [metadata]
18
+ source = "deeplabcut_3d"
19
+ source_folder = "C:\\Users\\aksel\\Documents\\DLC\\3D_Analysis_FM"
@@ -29,6 +29,6 @@
29
29
  31 pelletStickFirstContact 1 point
30
30
  32 pelletStickLastContact 1 point
31
31
  33 pelletStickContact 1
32
- 35 pelletReady 1
33
- 36 pelletBeakContact 1
32
+ 34 pelletReady 1
33
+ 35 pelletBeakContact 1
34
34
  50 stimulation 0
@@ -179,12 +179,13 @@ def ensure_default_configs() -> None:
179
179
  """
180
180
  import sys
181
181
 
182
- from ethograph.utils.paths import ethograph_home, migrate_home_layout, seed_defaults
182
+ from ethograph.utils.paths import ethograph_home, migrate_home_layout, seed_bundled_projects, seed_defaults
183
183
 
184
184
  migrate_home_layout()
185
185
  global_dir = ethograph_home()
186
186
  global_dir.mkdir(parents=True, exist_ok=True)
187
187
  seed_defaults()
188
+ seed_bundled_projects()
188
189
 
189
190
  if sys.platform == "win32":
190
191
  internal = global_dir / "_internal"
@@ -91,6 +91,9 @@ def ethograph_home() -> Path:
91
91
  # defaults/ a project directory's layout, used while no project
92
92
  # is open: mapping.txt, skeleton/, space/, runs/lightgbm/,
93
93
  # workflows/, wizard/
94
+ # {name}/ a bundled project (ethograph/projects/{name}/), seeded
95
+ # like defaults/ so a lab's vocabulary, workflows,
96
+ # calibrations and geometries arrive with the install
94
97
  #
95
98
  # Everything about a *study* is meant to live in a project directory; these
96
99
  # are the fallbacks for a session opened without one, in the same shape.
@@ -146,26 +149,37 @@ def logs_dir() -> Path:
146
149
  BUNDLED_DEFAULTS_DIR = Path(__file__).resolve().parents[1] / "defaults"
147
150
 
148
151
 
149
- def seed_defaults(dest: Path | None = None) -> list[Path]:
150
- """Copy every bundled default into *dest* (``defaults_dir()``) that is not there yet.
152
+ #: Whole project folders shipped beside the defaults (``ethograph/projects/{name}/``),
153
+ #: each seeded into ``~/.ethograph/{name}/`` by :func:`seed_bundled_projects`.
154
+ BUNDLED_PROJECTS_DIR = Path(__file__).resolve().parents[1] / "projects"
151
155
 
152
- File by file, so an example added in a later release reaches an existing
153
- install; a file the user edited is never overwritten. ``README.md`` is
154
- documentation for the repo, not a default, and is skipped.
156
+ #: What a bundled project leaves behind: trained runs, session records and the
157
+ #: wizard's folder history are the maintainer's machine, not the project.
158
+ BUNDLED_PROJECT_EXCLUDES = frozenset({"runs", "sessions", "sessions.txt", "wizard"})
155
159
 
156
- Returns
157
- -------
158
- list of Path
159
- The files written.
160
+
161
+ def bundled_project_dir(name: str) -> Path:
162
+ """``~/.ethograph/{name}`` — where the bundled project *name* is seeded."""
163
+ return ethograph_home() / name
164
+
165
+
166
+ def _seed_tree(source: Path, dest: Path, skip: frozenset[str]) -> list[Path]:
167
+ """Copy every file under *source* into *dest* that is not there yet.
168
+
169
+ File by file, so a file added in a later release reaches an existing
170
+ install; a file the user edited is never overwritten. A top-level entry
171
+ named in *skip* is left out entirely.
160
172
  """
161
173
  import shutil
162
174
 
163
- dest = defaults_dir() if dest is None else dest
164
175
  written: list[Path] = []
165
- for src in sorted(BUNDLED_DEFAULTS_DIR.rglob("*")):
166
- if not src.is_file() or src.name == "README.md":
176
+ for src in sorted(source.rglob("*")):
177
+ if not src.is_file():
178
+ continue
179
+ rel = src.relative_to(source)
180
+ if rel.parts[0] in skip:
167
181
  continue
168
- target = dest / src.relative_to(BUNDLED_DEFAULTS_DIR)
182
+ target = dest / rel
169
183
  if target.exists():
170
184
  continue
171
185
  target.parent.mkdir(parents=True, exist_ok=True)
@@ -174,6 +188,41 @@ def seed_defaults(dest: Path | None = None) -> list[Path]:
174
188
  return written
175
189
 
176
190
 
191
+ def seed_defaults(dest: Path | None = None) -> list[Path]:
192
+ """Copy every bundled default into *dest* (``defaults_dir()``) that is not there yet.
193
+
194
+ ``README.md`` is documentation for the repo, not a default, and is skipped.
195
+
196
+ Returns
197
+ -------
198
+ list of Path
199
+ The files written.
200
+ """
201
+ dest = defaults_dir() if dest is None else dest
202
+ return _seed_tree(BUNDLED_DEFAULTS_DIR, dest, frozenset({"README.md"}))
203
+
204
+
205
+ def seed_bundled_projects(home: Path | None = None) -> list[Path]:
206
+ """Seed every folder of :data:`BUNDLED_PROJECTS_DIR` into ``{home}/{name}/``.
207
+
208
+ Same contract as :func:`seed_defaults`: new files arrive, edited files
209
+ stay. :data:`BUNDLED_PROJECT_EXCLUDES` never leave the package.
210
+
211
+ Returns
212
+ -------
213
+ list of Path
214
+ The files written.
215
+ """
216
+ home = ethograph_home() if home is None else home
217
+ written: list[Path] = []
218
+ if not BUNDLED_PROJECTS_DIR.is_dir():
219
+ return written
220
+ for project in sorted(BUNDLED_PROJECTS_DIR.iterdir()):
221
+ if project.is_dir() and not project.name.startswith("_"):
222
+ written.extend(_seed_tree(project, home / project.name, BUNDLED_PROJECT_EXCLUDES))
223
+ return written
224
+
225
+
177
226
  def migrate_home_layout(home: Path | None = None) -> list[tuple[Path, Path]]:
178
227
  """Move pre-layout folders under ``cache/`` and ``defaults/``.
179
228
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: ethograph
3
- Version: 0.2.52
3
+ Version: 0.2.53
4
4
  Summary: A multimodal timeseries GUI for neuroethology
5
5
  Author-email: Akseli Ilmanen <akseli.ilmanen@gmail.com>
6
6
  License-Expression: GPL-3.0-or-later
@@ -255,6 +255,15 @@ ethograph/labels/tsv_store.py
255
255
  ethograph/labels/workflow.py
256
256
  ethograph/labels/exporters/__init__.py
257
257
  ethograph/labels/exporters/crowlab.py
258
+ ethograph/projects/crowlab/ReadMe.md
259
+ ethograph/projects/crowlab/mapping.txt
260
+ ethograph/projects/crowlab/mapping_setup_audio.txt
261
+ ethograph/projects/crowlab/calibration/3D_Analysis_FM.toml
262
+ ethograph/projects/crowlab/space/moll2025.yaml
263
+ ethograph/projects/crowlab/workflows/01 PES Curation.yaml
264
+ ethograph/projects/crowlab/workflows/Freddy_GBM.yaml
265
+ ethograph/projects/crowlab/workflows/Ivy_GBM.yaml
266
+ ethograph/projects/crowlab/workflows/Poppy_GBM.yaml
258
267
  ethograph/samfill/__init__.py
259
268
  ethograph/samfill/config.py
260
269
  ethograph/samfill/fill.py
@@ -478,31 +487,7 @@ notes/prototypes/smoothing_ui.html
478
487
  projects/crowlab/ReadMe.md
479
488
  projects/crowlab/mapping.txt
480
489
  projects/crowlab/mapping_setup_audio.txt
481
- projects/crowlab/project.yaml
482
490
  projects/crowlab/sessions.txt
483
- projects/crowlab/config/space/moll2025.yaml
484
- projects/crowlab/old config/changepoint_settings_old.yaml
485
- projects/crowlab/old config/mapping_Ivy.txt
486
- projects/crowlab/old config/old segmentation config/Crow1_inference_20260330_161224.json
487
- projects/crowlab/old config/old segmentation config/Crow1_inference_20260330_161259.json
488
- projects/crowlab/old config/old segmentation config/Freddy_inference_20260330_160621.json
489
- projects/crowlab/old config/old segmentation config/Freddy_train_20251021_164220.json
490
- projects/crowlab/old config/old segmentation config/Freddy_train_20251021_164220_epoch-100.model
491
- projects/crowlab/old config/old segmentation config/Ivy_CV_20260130_173800.json
492
- projects/crowlab/old config/old segmentation config/Ivy_inference_20260203_092442.json
493
- projects/crowlab/old config/old segmentation config/Ivy_inference_20260204_141527.json
494
- projects/crowlab/old config/old segmentation config/Ivy_inference_20260206_122331.json
495
- projects/crowlab/old config/old segmentation config/Ivy_train_20260202_191138_epoch-100.model
496
- projects/crowlab/old config/old segmentation config/Ivy_train_20260203_153754.json
497
- projects/crowlab/old config/old segmentation config/Poppy_inference_20260312_100707.json
498
- projects/crowlab/old config/old segmentation config/Poppy_inference_20260327_102414.json
499
- projects/crowlab/old config/old segmentation config/Poppy_inference_20260330_140808.json
500
- projects/crowlab/old config/old segmentation config/Poppy_inference_20260402_104151.json
501
- projects/crowlab/old config/old segmentation config/Poppy_train_20260326_190925.json
502
- projects/crowlab/old config/old segmentation config/Poppy_train_20260331_175332.json
503
- projects/crowlab/old config/old segmentation config/ReadMe - model Freddy_train_20251021_164220_epoch-100.txt
504
- projects/crowlab/wizard/CrowBench.ipynb
505
- projects/crowlab/wizard/SENTINEL.txt
506
491
  projects/crowlab/workflows/01 PES Curation.yaml
507
492
  projects/crowlab/workflows/Freddy_GBM.yaml
508
493
  projects/crowlab/workflows/Ivy_GBM.yaml
@@ -88,7 +88,6 @@
88
88
  "docs/source/advanced/gui_index.md",
89
89
  "docs/source/advanced/index.md",
90
90
  "docs/source/advanced/metadata.md",
91
- "docs/source/advanced/migrating_from_boris.md",
92
91
  "docs/source/advanced/playback.md",
93
92
  "docs/source/advanced/refinement.md",
94
93
  "docs/source/advanced/shortcuts.md",
@@ -234,6 +233,7 @@
234
233
  "docs/source/getting_started/your_data/folder_layout.md",
235
234
  "docs/source/getting_started/your_data/index.md",
236
235
  "docs/source/getting_started/your_data/media_alignment.md",
236
+ "docs/source/getting_started/your_data/migrating_from_boris.md",
237
237
  "docs/source/getting_started/your_data/trials.md",
238
238
  "docs/source/index.rst",
239
239
  "docs/source/models/curation.md",
@@ -493,6 +493,15 @@
493
493
  "ethograph/labels/review_metrics.py",
494
494
  "ethograph/labels/tsv_store.py",
495
495
  "ethograph/labels/workflow.py",
496
+ "ethograph/projects/crowlab/ReadMe.md",
497
+ "ethograph/projects/crowlab/calibration/3D_Analysis_FM.toml",
498
+ "ethograph/projects/crowlab/mapping.txt",
499
+ "ethograph/projects/crowlab/mapping_setup_audio.txt",
500
+ "ethograph/projects/crowlab/space/moll2025.yaml",
501
+ "ethograph/projects/crowlab/workflows/01 PES Curation.yaml",
502
+ "ethograph/projects/crowlab/workflows/Freddy_GBM.yaml",
503
+ "ethograph/projects/crowlab/workflows/Ivy_GBM.yaml",
504
+ "ethograph/projects/crowlab/workflows/Poppy_GBM.yaml",
496
505
  "ethograph/samfill/__init__.py",
497
506
  "ethograph/samfill/config.py",
498
507
  "ethograph/samfill/fill.py",
@@ -715,33 +724,9 @@
715
724
  "notes/feedback/reverted_pynapple_trials_timing.diff",
716
725
  "notes/prototypes/smoothing_ui.html",
717
726
  "projects/crowlab/ReadMe.md",
718
- "projects/crowlab/config/space/moll2025.yaml",
719
727
  "projects/crowlab/mapping.txt",
720
728
  "projects/crowlab/mapping_setup_audio.txt",
721
- "projects/crowlab/old config/changepoint_settings_old.yaml",
722
- "projects/crowlab/old config/mapping_Ivy.txt",
723
- "projects/crowlab/old config/old segmentation config/Crow1_inference_20260330_161224.json",
724
- "projects/crowlab/old config/old segmentation config/Crow1_inference_20260330_161259.json",
725
- "projects/crowlab/old config/old segmentation config/Freddy_inference_20260330_160621.json",
726
- "projects/crowlab/old config/old segmentation config/Freddy_train_20251021_164220.json",
727
- "projects/crowlab/old config/old segmentation config/Freddy_train_20251021_164220_epoch-100.model",
728
- "projects/crowlab/old config/old segmentation config/Ivy_CV_20260130_173800.json",
729
- "projects/crowlab/old config/old segmentation config/Ivy_inference_20260203_092442.json",
730
- "projects/crowlab/old config/old segmentation config/Ivy_inference_20260204_141527.json",
731
- "projects/crowlab/old config/old segmentation config/Ivy_inference_20260206_122331.json",
732
- "projects/crowlab/old config/old segmentation config/Ivy_train_20260202_191138_epoch-100.model",
733
- "projects/crowlab/old config/old segmentation config/Ivy_train_20260203_153754.json",
734
- "projects/crowlab/old config/old segmentation config/Poppy_inference_20260312_100707.json",
735
- "projects/crowlab/old config/old segmentation config/Poppy_inference_20260327_102414.json",
736
- "projects/crowlab/old config/old segmentation config/Poppy_inference_20260330_140808.json",
737
- "projects/crowlab/old config/old segmentation config/Poppy_inference_20260402_104151.json",
738
- "projects/crowlab/old config/old segmentation config/Poppy_train_20260326_190925.json",
739
- "projects/crowlab/old config/old segmentation config/Poppy_train_20260331_175332.json",
740
- "projects/crowlab/old config/old segmentation config/ReadMe - model Freddy_train_20251021_164220_epoch-100.txt",
741
- "projects/crowlab/project.yaml",
742
729
  "projects/crowlab/sessions.txt",
743
- "projects/crowlab/wizard/CrowBench.ipynb",
744
- "projects/crowlab/wizard/SENTINEL.txt",
745
730
  "projects/crowlab/workflows/01 PES Curation.yaml",
746
731
  "projects/crowlab/workflows/Freddy_GBM.yaml",
747
732
  "projects/crowlab/workflows/Ivy_GBM.yaml",
@@ -797,9 +782,7 @@
797
782
  "scripts/test.ipynb",
798
783
  "scripts/train_spot.py",
799
784
  "tests/__init__.py",
800
- "tests/_test_boris_gui_smoke.py",
801
785
  "tests/_test_burst_r_reference.py",
802
- "tests/_test_gutter_probe.py",
803
786
  "tests/conftest.py",
804
787
  "tests/old_tests/README.md",
805
788
  "tests/old_tests/test_box_labelling.py",
@@ -0,0 +1,8 @@
1
+ {
2
+ "tag": "0.2.53",
3
+ "distance": 0,
4
+ "node": "g08a4530",
5
+ "dirty": false,
6
+ "branch": "HEAD",
7
+ "node_date": "2026-10-16"
8
+ }
@@ -0,0 +1 @@
1
+ These configs are internal to crowlab, not relevant for general ethograph users.
@@ -0,0 +1,34 @@
1
+ 0 background 0
2
+ 1 pullOutStick 0
3
+ 2 diagonalToBox 0
4
+ 3 toss 0
5
+ 4 swoop 0
6
+ 5 reachLeftCorner 0
7
+ 6 right 0
8
+ 7 pullOutAlongWall 0
9
+ 8 swoopOut 0
10
+ 9 stickToDisp 0
11
+ 10 stickInDisp 0
12
+ 11 lookToPellet 0
13
+ 12 snapPellet 0
14
+ 13 eat 0
15
+ 14 reachRightCorner 0
16
+ 15 nodding 0
17
+ 16 beakToDisp 0
18
+ 17 stickInDispTwo 0
19
+ 18 loseStick 0
20
+ 19 pickUpStick 0
21
+ 20 shake 0
22
+ 21 shiftRight 0
23
+ 22 shiftLeft 0
24
+ 23 pullOutLeft 0
25
+ 24 swoopOutLeft 0
26
+ 25 lookgToFallingPellet 0
27
+ 26 postNod 0
28
+ 27 reachRightCornerInTwo 0
29
+ 31 pelletStickFirstContact 1 point
30
+ 32 pelletStickLastContact 1 point
31
+ 33 pelletStickContact 1
32
+ 34 pelletReady 1
33
+ 35 pelletBeakContact 1
34
+ 50 stimulation 0
@@ -0,0 +1,8 @@
1
+ 0 background
2
+ 1 Pellet_Feeder_Motor
3
+ 2 Pellet_Rutsche
4
+ 3 Klappe_auf
5
+ 4 Schieber
6
+ 5 Klappe_zu
7
+ 6 Stick_out
8
+ 7 Stick_Motor_Pull
@@ -0,0 +1,48 @@
1
+ name: 01 PES Curation
2
+ description: ''
3
+ steps:
4
+ - kind: filter_trials
5
+ params:
6
+ filters:
7
+ - column: num_pellets
8
+ values:
9
+ - '1'
10
+ - '2'
11
+ - column: poscat
12
+ values:
13
+ - '1'
14
+ - '3'
15
+ clear_first: true
16
+ - kind: delete_labels
17
+ params:
18
+ which: hidden
19
+ label_ids:
20
+ - 31
21
+ - 32
22
+ - kind: scope
23
+ params:
24
+ label_ids:
25
+ - 31
26
+ - 32
27
+ mode: frame
28
+ - kind: label_grid
29
+ params:
30
+ cameras:
31
+ - cam-1
32
+ methods: automated
33
+ columns: 3
34
+ window_s: 0.5
35
+ panels:
36
+ - feature: pellet_stickClosest_dist
37
+ selections:
38
+ individual: Freddy
39
+ keypoint: beakTip
40
+ s3d_dims: '0'
41
+ space: x
42
+ title: pellet_stickClosest_dist
43
+ axis_auto: true
44
+ skip_video: true
45
+ threshold: 0.6
46
+ grid_mode: uncurate
47
+ mark_flagged: false
48
+ generate: true
@@ -0,0 +1,43 @@
1
+ name: Freddy_GBM
2
+ description: ''
3
+ steps:
4
+ - kind: filter_trials
5
+ params:
6
+ filters:
7
+ - column: num_pellets
8
+ values:
9
+ - '1'
10
+ - '2'
11
+ clear_first: true
12
+ - kind: predict
13
+ params:
14
+ model: pelletContact_Freddy
15
+ individual: Freddy
16
+ min_confidence: 0.005
17
+ - kind: scope
18
+ params:
19
+ label_ids:
20
+ - 31
21
+ - 32
22
+ mode: frame
23
+ - kind: label_grid
24
+ params:
25
+ cameras:
26
+ - cam-1
27
+ methods: automated
28
+ columns: 3
29
+ window_s: 0.3
30
+ panels:
31
+ - feature: pellet_stickClosest_dist
32
+ selections:
33
+ individual: Freddy
34
+ keypoint: beakTip
35
+ s3d_dims: '0'
36
+ space: x
37
+ title: pellet_stickClosest_dist
38
+ axis_auto: true
39
+ skip_video: true
40
+ threshold: 0.8
41
+ grid_mode: uncurate
42
+ mark_flagged: false
43
+ generate: true
@@ -0,0 +1,47 @@
1
+ name: Ivy_GBM
2
+ description: ''
3
+ steps:
4
+ - kind: filter_trials
5
+ params:
6
+ filters:
7
+ - column: num_pellets
8
+ values:
9
+ - '1'
10
+ - '2'
11
+ - column: poscat
12
+ values:
13
+ - '1'
14
+ - '3'
15
+ clear_first: true
16
+ - kind: predict
17
+ params:
18
+ model: pelletContact_Ivy2
19
+ individual: Ivy
20
+ min_confidence: 0.0
21
+ - kind: scope
22
+ params:
23
+ label_ids:
24
+ - 31
25
+ - 32
26
+ mode: frame
27
+ - kind: label_grid
28
+ params:
29
+ cameras:
30
+ - cam-1
31
+ methods: automated
32
+ columns: 3
33
+ window_s: 0.3
34
+ panels:
35
+ - feature: pellet_stickClosest_dist
36
+ selections:
37
+ individual: Ivy
38
+ keypoint: beakTip
39
+ s3d_dims: '0'
40
+ space: x
41
+ title: pellet_stickClosest_dist
42
+ axis_auto: true
43
+ skip_video: true
44
+ threshold: 0.8
45
+ grid_mode: uncurate
46
+ mark_flagged: false
47
+ generate: true
@@ -0,0 +1,43 @@
1
+ name: Poppy_GBM
2
+ description: ''
3
+ steps:
4
+ - kind: filter_trials
5
+ params:
6
+ filters:
7
+ - column: num_pellets
8
+ values:
9
+ - '1'
10
+ - '2'
11
+ clear_first: true
12
+ - kind: predict
13
+ params:
14
+ model: pelletContact_Poppy
15
+ individual: Poppy
16
+ min_confidence: 0.005
17
+ - kind: scope
18
+ params:
19
+ label_ids:
20
+ - 31
21
+ - 32
22
+ mode: frame
23
+ - kind: label_grid
24
+ params:
25
+ cameras:
26
+ - cam-1
27
+ methods: automated
28
+ columns: 1
29
+ window_s: 0.3
30
+ panels:
31
+ - feature: pellet_stickClosest_dist
32
+ selections:
33
+ individual: Poppy
34
+ keypoint: beakTip
35
+ s3d_dims: '0'
36
+ space: x
37
+ title: pellet_stickClosest_dist
38
+ axis_auto: true
39
+ skip_video: true
40
+ threshold: 0.8
41
+ grid_mode: uncurate
42
+ mark_flagged: false
43
+ generate: true
@@ -212,7 +212,7 @@ exclude = ["tests", "docs*"]
212
212
 
213
213
  [tool.setuptools.package-data]
214
214
  "ethograph.gui" = ["*.yaml", "assets/templates/*", "assets/wizard/*", "templates/*.j2", "templates/notebook/*"]
215
- ethograph = ["assets/*", "assets/space/*", "defaults/*", "defaults/**/*"]
215
+ ethograph = ["assets/*", "assets/space/*", "defaults/*", "defaults/**/*", "projects/*", "projects/**/*"]
216
216
  "ethograph._vendor.vocalseg" = ["LICENSE", "NOTICE.md"]
217
217
  "ethograph._vendor.samurai" = ["LICENSE", "NOTICE.md"]
218
218
  # The architectures read their defaults from these at build time — see NOTICE.md.
@@ -1,8 +0,0 @@
1
- {
2
- "tag": "0.2.52",
3
- "distance": 0,
4
- "node": "g19abe87",
5
- "dirty": false,
6
- "branch": "HEAD",
7
- "node_date": "2026-10-14"
8
- }
@@ -1,13 +0,0 @@
1
- min_label_length_s: 0.05
2
- label_thresholds:
3
- '3': 0.03
4
- '8': 0.03
5
- '9': 0.03
6
- '10': 0.03
7
- '17': 0.03
8
- '24': 0.03
9
- stitch_gap_len_s: 0.015
10
- changepoint_params:
11
- max_expansion_s: 0.05
12
- max_shrink_s: 0.05
13
- sr: 200