simba-uw-tf-dev 2.7.2__tar.gz → 2.7.4__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 (683) hide show
  1. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/PKG-INFO +1 -1
  2. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/Simba_UW_tf_dev.egg-info/PKG-INFO +1 -1
  3. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/Simba_UW_tf_dev.egg-info/SOURCES.txt +1 -0
  4. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/setup.py +1 -1
  5. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/SimBA.py +2 -1
  6. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/blob_location_computer.py +19 -14
  7. simba_uw_tf_dev-2.7.4/simba/data_processors/find_animal_blob_location.py +173 -0
  8. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/geometry_mixin.py +0 -3
  9. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/image_mixin.py +67 -42
  10. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/network_mixin.py +0 -4
  11. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_importers/sleap_csv_importer.py +16 -5
  12. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/roi_ui.py +29 -9
  13. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/roi_ui_mixin.py +22 -9
  14. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/roi_utils.py +14 -9
  15. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/checks.py +36 -8
  16. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/read_write.py +134 -13
  17. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/batch_process_menus.py +2 -3
  18. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/video_processing.py +36 -13
  19. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/LICENSE +0 -0
  20. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/MANIFEST.in +0 -0
  21. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/README.md +0 -0
  22. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/Simba_UW_tf_dev.egg-info/dependency_links.txt +0 -0
  23. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/Simba_UW_tf_dev.egg-info/entry_points.txt +0 -0
  24. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/Simba_UW_tf_dev.egg-info/requires.txt +0 -0
  25. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/Simba_UW_tf_dev.egg-info/top_level.txt +0 -0
  26. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/setup.cfg +0 -0
  27. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/.DS_Store +0 -0
  28. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/SimBA_logo.ico +0 -0
  29. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/__init__.py +0 -0
  30. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/.DS_Store +0 -0
  31. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/TheGoldenLab.PNG +0 -0
  32. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/UbuntuMono-Regular.ttf +0 -0
  33. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/__init__.py +0 -0
  34. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/dash_simba_base.css +0 -0
  35. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/fonts/.DS_Store +0 -0
  36. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/fonts/Playwrite ES Deco.ttf +0 -0
  37. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/fonts/Poppins Bold.ttf +0 -0
  38. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/fonts/Poppins Regular.ttf +0 -0
  39. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/.DS_Store +0 -0
  40. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/SimBA_logo.icns +0 -0
  41. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/SimBA_logo.ico +0 -0
  42. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/SimBA_logo.png +0 -0
  43. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/SimBA_logo_3.ico +0 -0
  44. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/SimBA_logo_3.png +0 -0
  45. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/__init__.py +0 -0
  46. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/about.png +0 -0
  47. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/add.png +0 -0
  48. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/add_on.png +0 -0
  49. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/analyze_blue.png +0 -0
  50. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/analyze_green.png +0 -0
  51. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/api.png +0 -0
  52. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/archive.png +0 -0
  53. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/arrow_down_green.png +0 -0
  54. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/attributes_large.png +0 -0
  55. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/average.png +0 -0
  56. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/avi.png +0 -0
  57. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/bar_graph_blue.png +0 -0
  58. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/bar_graph_green.png +0 -0
  59. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/blur.png +0 -0
  60. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/bmp.png +0 -0
  61. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/boris.png +0 -0
  62. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/brightness.png +0 -0
  63. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/browse.png +0 -0
  64. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/brush_large.png +0 -0
  65. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/bw.png +0 -0
  66. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/calipher.png +0 -0
  67. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/change.png +0 -0
  68. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/check_blue.png +0 -0
  69. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/circle.png +0 -0
  70. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/circle_2.png +0 -0
  71. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/circle_large.png +0 -0
  72. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/circle_small.png +0 -0
  73. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/clahe.png +0 -0
  74. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/clean.png +0 -0
  75. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/clean_red.png +0 -0
  76. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/clf.png +0 -0
  77. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/clf_2.png +0 -0
  78. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/clip.png +0 -0
  79. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/close.png +0 -0
  80. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/cluster.png +0 -0
  81. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/concat.png +0 -0
  82. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/concat_icons/__init__.py +0 -0
  83. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/concat_icons/horizontal.png +0 -0
  84. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/concat_icons/mixed_mosaic.png +0 -0
  85. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/concat_icons/mosaic.png +0 -0
  86. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/concat_icons/vertical.png +0 -0
  87. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/concat_videos.png +0 -0
  88. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/convert.png +0 -0
  89. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/counter.png +0 -0
  90. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/create.png +0 -0
  91. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/crop.png +0 -0
  92. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/crossfade.png +0 -0
  93. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/csv_grey.png +0 -0
  94. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/curve_black.png +0 -0
  95. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/dash_simba.css +0 -0
  96. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/decision_tree_blue.png +0 -0
  97. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/decision_tree_purple.png +0 -0
  98. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/delete_large_orange.png +0 -0
  99. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/delete_large_red.png +0 -0
  100. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/details.png +0 -0
  101. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/dice_green.png +0 -0
  102. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/dimensionality_reduction.png +0 -0
  103. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/direction.png +0 -0
  104. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/direction_2.png +0 -0
  105. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/distance_red.png +0 -0
  106. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/documentation.png +0 -0
  107. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/dumbbell.png +0 -0
  108. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/duplicate.png +0 -0
  109. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/duplicate_2_large.png +0 -0
  110. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/duplicate_large.png +0 -0
  111. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/edit.png +0 -0
  112. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/edit_roi_large.png +0 -0
  113. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/ethovision.png +0 -0
  114. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/exit.png +0 -0
  115. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/factory.png +0 -0
  116. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/fast_forward.png +0 -0
  117. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/fast_forward_green.png +0 -0
  118. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/fastforward_green_2.png +0 -0
  119. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/feather_green.png +0 -0
  120. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/features.png +0 -0
  121. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/ffmpeg.png +0 -0
  122. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/finish.png +0 -0
  123. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/first.png +0 -0
  124. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/first_frame_blue.png +0 -0
  125. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/first_green.png +0 -0
  126. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/flip_black.png +0 -0
  127. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/flip_green.png +0 -0
  128. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/flip_red.png +0 -0
  129. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/fps.png +0 -0
  130. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/frames.png +0 -0
  131. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/gif.png +0 -0
  132. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/github.png +0 -0
  133. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/gitter.png +0 -0
  134. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/gpu.png +0 -0
  135. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/gpu_2.png +0 -0
  136. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/green_check.png +0 -0
  137. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/grey.png +0 -0
  138. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/greyscale.png +0 -0
  139. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/half_circle.png +0 -0
  140. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/half_circle_small.png +0 -0
  141. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/heatmap.png +0 -0
  142. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/hexagon.png +0 -0
  143. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/hexagon_small.png +0 -0
  144. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/hierarchy.png +0 -0
  145. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/home.png +0 -0
  146. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/id_card.png +0 -0
  147. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/image.png +0 -0
  148. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/import.png +0 -0
  149. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/info.png +0 -0
  150. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/info_large.png +0 -0
  151. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/interaction_large.png +0 -0
  152. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/interactive_blue.png +0 -0
  153. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/join_purple.png +0 -0
  154. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/join_red.png +0 -0
  155. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/join_yellow.png +0 -0
  156. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/jpeg.png +0 -0
  157. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/label.png +0 -0
  158. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/label_blue.png +0 -0
  159. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/label_large.png +0 -0
  160. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/label_yellow.png +0 -0
  161. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/last.png +0 -0
  162. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/last_frame_blue.png +0 -0
  163. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/last_red.png +0 -0
  164. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/line_chart_blue.png +0 -0
  165. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/link.png +0 -0
  166. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/load.png +0 -0
  167. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/load_black.png +0 -0
  168. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/load_blue.png +0 -0
  169. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/mars.png +0 -0
  170. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/merge.png +0 -0
  171. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/metrics.png +0 -0
  172. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/metrics_blue.png +0 -0
  173. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/metrics_green.png +0 -0
  174. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/minus.png +0 -0
  175. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/minus_blue_2.png +0 -0
  176. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/minus_red.png +0 -0
  177. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/mouse_small.png +0 -0
  178. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/mov.png +0 -0
  179. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/move.png +0 -0
  180. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/move_large.png +0 -0
  181. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/mp4.png +0 -0
  182. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/multiple_blue.png +0 -0
  183. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/multiple_green.png +0 -0
  184. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/multiple_yellow.png +0 -0
  185. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/number_black.png +0 -0
  186. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/one.png +0 -0
  187. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/one_blue.png +0 -0
  188. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/osf.png +0 -0
  189. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/outlier.png +0 -0
  190. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/paint.png +0 -0
  191. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/palette_large.png +0 -0
  192. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/parquet.png +0 -0
  193. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/path.png +0 -0
  194. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/permutation_blue.png +0 -0
  195. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/plot.png +0 -0
  196. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/plus.png +0 -0
  197. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/plus_green.png +0 -0
  198. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/plus_green_2.png +0 -0
  199. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/png.png +0 -0
  200. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/polygon.png +0 -0
  201. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/polygon_2.png +0 -0
  202. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/polygon_large.png +0 -0
  203. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/pose.png +0 -0
  204. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/print.png +0 -0
  205. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/progressbar_black.png +0 -0
  206. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/readthedocs_logo.png +0 -0
  207. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/rectangle.png +0 -0
  208. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/rectangle_1_large.png +0 -0
  209. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/rectangle_2.png +0 -0
  210. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/rectangle_red.png +0 -0
  211. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/rectangle_small.png +0 -0
  212. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/remove_bg.png +0 -0
  213. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/reorganize.png +0 -0
  214. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/restart.png +0 -0
  215. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/reverse.png +0 -0
  216. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/reverse_blue.png +0 -0
  217. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/rewind.png +0 -0
  218. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/rewind_blue_2.png +0 -0
  219. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/rewind_red.png +0 -0
  220. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/rocket.png +0 -0
  221. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/roi.png +0 -0
  222. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/roi_green.png +0 -0
  223. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/rotate.png +0 -0
  224. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/sample.png +0 -0
  225. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/save.png +0 -0
  226. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/save_blue.png +0 -0
  227. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/save_green.png +0 -0
  228. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/save_large.png +0 -0
  229. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/search.png +0 -0
  230. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/segment.png +0 -0
  231. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/seperate_green.png +0 -0
  232. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/settings.png +0 -0
  233. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/shap.png +0 -0
  234. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/shapes_large.png +0 -0
  235. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/shapes_small.png +0 -0
  236. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/simba_logo_2.png +0 -0
  237. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/single_black.png +0 -0
  238. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/single_blue.png +0 -0
  239. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/single_green.png +0 -0
  240. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/size_black.png +0 -0
  241. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/skip.png +0 -0
  242. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/skip_2.png +0 -0
  243. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/split.png +0 -0
  244. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/square_black.png +0 -0
  245. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/stopwatch.png +0 -0
  246. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/subset_blue.png +0 -0
  247. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/superimpose.png +0 -0
  248. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/system.png +0 -0
  249. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/t.png +0 -0
  250. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/table.png +0 -0
  251. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/text_black.png +0 -0
  252. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/tick.png +0 -0
  253. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/tick_large.png +0 -0
  254. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/tiff.png +0 -0
  255. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/tile_green.png +0 -0
  256. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/timer.png +0 -0
  257. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/trash.png +0 -0
  258. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/trash_red.png +0 -0
  259. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/triangle_black.png +0 -0
  260. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/triangle_small.png +0 -0
  261. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/video.png +0 -0
  262. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/video_2.png +0 -0
  263. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/visualize.png +0 -0
  264. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/visualize_blue.png +0 -0
  265. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/visualize_green.png +0 -0
  266. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/wand_blue.png +0 -0
  267. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/watermark_green.png +0 -0
  268. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/webm.png +0 -0
  269. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/webp.png +0 -0
  270. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/zero.png +0 -0
  271. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/zoom_in.png +0 -0
  272. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/icons/zoom_out.png +0 -0
  273. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/img/__init__.py +0 -0
  274. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/img/about_me.png +0 -0
  275. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/img/bg.png +0 -0
  276. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/img/bg_2.png +0 -0
  277. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/img/bg_2024.png +0 -0
  278. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/img/splash.mp4 +0 -0
  279. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/img/splash.pptx +0 -0
  280. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/img/splash_2024.mp4 +0 -0
  281. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/img/~$splash.pptx +0 -0
  282. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/lookups/__init__.py +0 -0
  283. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/lookups/critical_values_05.pickle +0 -0
  284. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/lookups/feature_extraction_headers.csv +0 -0
  285. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/lookups/features.csv +0 -0
  286. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/lookups/model_names.parquet +0 -0
  287. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/lookups/unsupervised_example_x.csv +0 -0
  288. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/lookups/yolo.yaml +0 -0
  289. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/UbuntuMono-Regular.ttf +0 -0
  290. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/__init__.py +0 -0
  291. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/animal_distances.jpg +0 -0
  292. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/baseline_scale.jpg +0 -0
  293. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/color_bar.jpg +0 -0
  294. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/down_arrow.jpg +0 -0
  295. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/feature_categories/__init__.py +0 -0
  296. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/feature_categories/shap_feature_categories.csv +0 -0
  297. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/intruder_movement.jpg +0 -0
  298. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/intruder_shape.jpg +0 -0
  299. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/resident_intruder_movement.jpg +0 -0
  300. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/resident_intruder_shape.jpg +0 -0
  301. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/resident_movement.jpg +0 -0
  302. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/resident_shape.jpg +0 -0
  303. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/side_scale.jpg +0 -0
  304. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/side_scale_5.jpg +0 -0
  305. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/shap/ubuntu.regular.ttf +0 -0
  306. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/stl/__init__.py +0 -0
  307. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/stl/grid_floor.stl +0 -0
  308. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/stl/operant_lever.stl +0 -0
  309. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/stl/operant_tray.stl +0 -0
  310. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/stl/operant_walls.stl +0 -0
  311. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/unsupervised/__init__.py +0 -0
  312. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/unsupervised/features.csv +0 -0
  313. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/assets/unsupervised/model_names.parquet +0 -0
  314. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/bounding_box_tools/__init__.py +0 -0
  315. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/bounding_box_tools/agg_boundary_stats.py +0 -0
  316. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/bounding_box_tools/boundary_menus.py +0 -0
  317. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/bounding_box_tools/boundary_statistics.py +0 -0
  318. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/bounding_box_tools/find_boundaries.py +0 -0
  319. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/bounding_box_tools/visualize_boundaries.py +0 -0
  320. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/bounding_box_tools/yolo/__init__.py +0 -0
  321. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/bounding_box_tools/yolo/model.py +0 -0
  322. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/bounding_box_tools/yolo/visualize.py +0 -0
  323. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/cue_light_tools/__init__.py +0 -0
  324. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/cue_light_tools/cue_light_analyzer.py +0 -0
  325. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/cue_light_tools/cue_light_clf_statistics.py +0 -0
  326. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/cue_light_tools/cue_light_menues.py +0 -0
  327. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/cue_light_tools/cue_light_movement_statistics.py +0 -0
  328. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/cue_light_tools/cue_light_tools.py +0 -0
  329. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/cue_light_tools/cue_light_visualizer.py +0 -0
  330. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/dash_app/SimBA_dash_app.py +0 -0
  331. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/dash_app/__init__.py +0 -0
  332. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/dash_app/dash_app.py +0 -0
  333. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/dash_app/run_dash_tkinter.py +0 -0
  334. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/.DS_Store +0 -0
  335. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/__init__.py +0 -0
  336. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/advanced_interpolator.py +0 -0
  337. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/advanced_smoothing.py +0 -0
  338. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/agg_clf_calculator.py +0 -0
  339. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/boolean_conditional_calculator.py +0 -0
  340. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/circling_detector.py +0 -0
  341. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/cuda/__init__.py +0 -0
  342. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/cuda/circular_statistics.py +0 -0
  343. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/cuda/create_shap_log.py +0 -0
  344. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/cuda/data.py +0 -0
  345. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/cuda/geometry.py +0 -0
  346. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/cuda/image.py +0 -0
  347. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/cuda/statistics.py +0 -0
  348. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/cuda/timeseries.py +0 -0
  349. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/cuda/utils.py +0 -0
  350. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/directing_animal_to_bodypart.py +0 -0
  351. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/directing_other_animals_calculator.py +0 -0
  352. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/egocentric_aligner.py +0 -0
  353. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/freezing_detector.py +0 -0
  354. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/fsttc_calculator.py +0 -0
  355. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/gibbs_sampler.py +0 -0
  356. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/interpolate.py +0 -0
  357. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/interpolate_pose.py +0 -0
  358. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/interpolation_smoothing.py +0 -0
  359. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/kleinberg_calculator.py +0 -0
  360. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/movement_calculator.py +0 -0
  361. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/mutual_exclusivity_corrector.py +0 -0
  362. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/pup_retrieval_calculator.py +0 -0
  363. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/pybursts_calculator.py +0 -0
  364. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/severity_bout_based_calculator.py +0 -0
  365. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/severity_calculator.py +0 -0
  366. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/severity_frame_based_calculator.py +0 -0
  367. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/smoothing.py +0 -0
  368. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/spontaneous_alternation_calculator.py +0 -0
  369. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/timebins_clf_calculator.py +0 -0
  370. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/data_processors/timebins_movement_calculator.py +0 -0
  371. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/.DS_Store +0 -0
  372. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/__init__.py +0 -0
  373. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/amber_feature_extractor.py +0 -0
  374. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/feature_extractor_14bp.py +0 -0
  375. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/feature_extractor_16bp.py +0 -0
  376. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/feature_extractor_4bp.py +0 -0
  377. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/feature_extractor_7bp.py +0 -0
  378. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/feature_extractor_8bp.py +0 -0
  379. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/feature_extractor_8bps_2_animals.py +0 -0
  380. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/feature_extractor_9bp.py +0 -0
  381. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/feature_extractor_user_defined.py +0 -0
  382. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/feature_subsets.py +0 -0
  383. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/add_probability_cnt_features.py +0 -0
  384. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/convex_hull_3_scratch_3.py +0 -0
  385. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/convex_hull_scratch_1.py +0 -0
  386. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/convex_hull_scratch_2.py +0 -0
  387. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/count_values_in_range.py +0 -0
  388. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/doctests.py +0 -0
  389. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/egocentrical_aligner.py +0 -0
  390. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/fish_feature_extractor_2022.py +0 -0
  391. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/fish_feature_extractor_2023_version_2.py +0 -0
  392. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/fish_feature_extractor_2023_version_3.py +0 -0
  393. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/fish_feature_extractor_2023_version_4.py +0 -0
  394. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/fish_feature_extractor_2023_version_5.py +0 -0
  395. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/graph_3d_plotter.py +0 -0
  396. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/graph_creator.py +0 -0
  397. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/make_splash.py +0 -0
  398. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/mutual_exclusive.py +0 -0
  399. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/peaks.py +0 -0
  400. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/read_in_mp.py +0 -0
  401. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/termite_rois.csv +0 -0
  402. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/time_stamp_calculator.py +0 -0
  403. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/video_color.py +0 -0
  404. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/video_rotator.py +0 -0
  405. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/misc/video_rotator_mp.py +0 -0
  406. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/feature_extractors/perimeter_jit.py +0 -0
  407. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/labelling/__init__.py +0 -0
  408. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/labelling/extract_labelled_frames.py +0 -0
  409. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/labelling/extract_labelling_meta.py +0 -0
  410. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/labelling/labelling_advanced_interface.py +0 -0
  411. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/labelling/labelling_interface.py +0 -0
  412. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/labelling/play_annotation_video.py +0 -0
  413. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/labelling/targeted_annotations_clips.py +0 -0
  414. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/.DS_Store +0 -0
  415. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/__init__.py +0 -0
  416. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/abstract_classes.py +0 -0
  417. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/annotator_mixin.py +0 -0
  418. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/circular_statistics.py +0 -0
  419. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/config_reader.py +0 -0
  420. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/feature_extraction_mixin.py +0 -0
  421. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/feature_extraction_supplement_mixin.py +0 -0
  422. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/plotting_mixin.py +0 -0
  423. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/pop_up_mixin.py +0 -0
  424. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/pose_importer_mixin.py +0 -0
  425. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/statistics_mixin.py +0 -0
  426. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/timeseries_features_mixin.py +0 -0
  427. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/train_model_mixin.py +0 -0
  428. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/mixins/unsupervised_mixin.py +0 -0
  429. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/model/__init__.py +0 -0
  430. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/model/grid_search_multiclass_rf.py +0 -0
  431. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/model/grid_search_rf.py +0 -0
  432. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/model/inference_batch.py +0 -0
  433. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/model/inference_multiclass_batch.py +0 -0
  434. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/model/inference_validation.py +0 -0
  435. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/model/ordinal_clf.py +0 -0
  436. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/model/regression/__init__.py +0 -0
  437. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/model/regression/metrics.py +0 -0
  438. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/model/regression/model.py +0 -0
  439. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/model/train_multiclass_rf.py +0 -0
  440. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/model/train_multilabel_rf.py +0 -0
  441. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/model/train_rf.py +0 -0
  442. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/outlier_tools/__init__.py +0 -0
  443. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/outlier_tools/outlier_corrector_location.py +0 -0
  444. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/outlier_tools/outlier_corrector_location_advanced.py +0 -0
  445. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/outlier_tools/outlier_corrector_location_mp.py +0 -0
  446. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/outlier_tools/outlier_corrector_movement.py +0 -0
  447. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/outlier_tools/outlier_corrector_movement_advanced.py +0 -0
  448. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/outlier_tools/outlier_corrector_movement_mp.py +0 -0
  449. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/outlier_tools/skip_outlier_correction.py +0 -0
  450. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/.DS_Store +0 -0
  451. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/ROI_feature_visualizer.py +0 -0
  452. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/ROI_feature_visualizer_mp.py +0 -0
  453. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/ROI_plotter.py +0 -0
  454. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/ROI_plotter_mp.py +0 -0
  455. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/__init__.py +0 -0
  456. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/blob_plotter.py +0 -0
  457. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/circular_feature_overlay_plotter.py +0 -0
  458. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/circular_plotting.py +0 -0
  459. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/clf_validator.py +0 -0
  460. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/clf_validator_mp.py +0 -0
  461. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/data_plotter.py +0 -0
  462. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/directing_animals_to_bodypart_visualizer.py +0 -0
  463. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/directing_animals_visualizer.py +0 -0
  464. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/directing_animals_visualizer_mp.py +0 -0
  465. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/distance_plotter.py +0 -0
  466. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/distance_plotter_mp.py +0 -0
  467. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/ez_path_plot.py +0 -0
  468. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/frame_mergerer_ffmpeg.py +0 -0
  469. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/gantt_creator.py +0 -0
  470. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/gantt_creator_mp.py +0 -0
  471. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/gantt_plotly.py +0 -0
  472. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/geometry_plotter.py +0 -0
  473. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/heat_mapper_clf.py +0 -0
  474. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/heat_mapper_clf_mp.py +0 -0
  475. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/heat_mapper_location.py +0 -0
  476. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/heat_mapper_location_mp.py +0 -0
  477. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/interactive_probability_grapher.py +0 -0
  478. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/path_plotter.py +0 -0
  479. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/path_plotter_mp.py +0 -0
  480. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/plot_clf_results.py +0 -0
  481. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/plot_clf_results_mp.py +0 -0
  482. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/pose_plotter.py +0 -0
  483. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/pose_plotter_mp.py +0 -0
  484. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/probability_plot_creator.py +0 -0
  485. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/probability_plot_creator_mp.py +0 -0
  486. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/shap_agg_stats_visualizer.py +0 -0
  487. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/single_run_model_validation_video.py +0 -0
  488. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/single_run_model_validation_video_mp.py +0 -0
  489. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/spontaneous_alternation_plotter.py +0 -0
  490. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/tools/__init__.py +0 -0
  491. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/plotting/tools/tkinter_tools.py +0 -0
  492. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/.DS_Store +0 -0
  493. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/__init__.py +0 -0
  494. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/bp_names/__init__.py +0 -0
  495. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/bp_names/bp_names.csv +0 -0
  496. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/configuration_names/__init__.py +0 -0
  497. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/configuration_names/pose_config_names.csv +0 -0
  498. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/no_animals/__init__.py +0 -0
  499. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/no_animals/no_animals.csv +0 -0
  500. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/schematics/1.png +0 -0
  501. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/schematics/10.png +0 -0
  502. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/schematics/11.png +0 -0
  503. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/schematics/12.png +0 -0
  504. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/schematics/13.png +0 -0
  505. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/schematics/2.png +0 -0
  506. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/schematics/3.png +0 -0
  507. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/schematics/4.png +0 -0
  508. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/schematics/5.png +0 -0
  509. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/schematics/6.png +0 -0
  510. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/schematics/7.png +0 -0
  511. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/schematics/8.png +0 -0
  512. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_configurations/schematics/9.png +0 -0
  513. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_importers/.DS_Store +0 -0
  514. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_importers/__init__.py +0 -0
  515. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_importers/dlc_importer_csv.py +0 -0
  516. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_importers/import_mars.py +0 -0
  517. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_importers/madlc_importer.py +0 -0
  518. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_importers/misc/__init__.py +0 -0
  519. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_importers/misc/apt_trk_importer.py +0 -0
  520. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_importers/read_DANNCE_mat.py +0 -0
  521. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_importers/sleap_h5_importer.py +0 -0
  522. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_importers/sleap_slp_importer.py +0 -0
  523. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_importers/trk_importer.py +0 -0
  524. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_processors/__init__.py +0 -0
  525. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_processors/pose_reset.py +0 -0
  526. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_processors/remove_keypoints.py +0 -0
  527. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_processors/reorganize_keypoint.py +0 -0
  528. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/pose_processors/reverse_pose.py +0 -0
  529. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/requirements.txt +0 -0
  530. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/.DS_Store +0 -0
  531. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/ROI_analyzer.py +0 -0
  532. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/ROI_clf_calculator.py +0 -0
  533. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/ROI_directing_analyzer.py +0 -0
  534. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/ROI_feature_analyzer.py +0 -0
  535. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/ROI_size_standardizer.py +0 -0
  536. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/ROI_time_bin_calculator.py +0 -0
  537. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/__init__.py +0 -0
  538. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/interactive_modifier_ui.py +0 -0
  539. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/interactive_roi_modifier_tkinter.py +0 -0
  540. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/roi_selector_circle_tkinter.py +0 -0
  541. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/roi_selector_polygon_tkinter.py +0 -0
  542. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/roi_tools/roi_selector_rectangle_tkinter.py +0 -0
  543. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/third_party_label_appenders/.DS_Store +0 -0
  544. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/third_party_label_appenders/BENTO_appender.py +0 -0
  545. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/third_party_label_appenders/BORIS_appender.py +0 -0
  546. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/third_party_label_appenders/__init__.py +0 -0
  547. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/third_party_label_appenders/boris_source_cleaner.py +0 -0
  548. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/third_party_label_appenders/converters.py +0 -0
  549. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/third_party_label_appenders/deepethogram_importer.py +0 -0
  550. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/third_party_label_appenders/ethovision_import.py +0 -0
  551. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/third_party_label_appenders/observer_importer.py +0 -0
  552. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/third_party_label_appenders/solomon_importer.py +0 -0
  553. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/third_party_label_appenders/third_party_appender.py +0 -0
  554. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/third_party_label_appenders/tools.py +0 -0
  555. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/.DS_Store +0 -0
  556. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/__init__.py +0 -0
  557. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/create_project_ui.py +0 -0
  558. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/import_pose_frame.py +0 -0
  559. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/import_videos_frame.py +0 -0
  560. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/machine_model_settings_ui.py +0 -0
  561. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/.DS_Store +0 -0
  562. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/__init__.py +0 -0
  563. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/about_simba_pop_up.py +0 -0
  564. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/animal_directing_other_animals_pop_up.py +0 -0
  565. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/append_roi_features_animals_pop_up.py +0 -0
  566. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/append_roi_features_bodypart_pop_up.py +0 -0
  567. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/archive_files_pop_up.py +0 -0
  568. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/batch_preprocess_pop_up.py +0 -0
  569. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/boolean_conditional_slicer_pup_up.py +0 -0
  570. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/check_videos_seekable_pop_up.py +0 -0
  571. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/clf_add_remove_print_pop_up.py +0 -0
  572. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/clf_annotation_counts_pop_up.py +0 -0
  573. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/clf_by_roi_pop_up.py +0 -0
  574. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/clf_by_timebins_pop_up.py +0 -0
  575. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/clf_descriptive_statistics_pop_up.py +0 -0
  576. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/clf_plot_pop_up.py +0 -0
  577. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/clf_probability_plot_pop_up.py +0 -0
  578. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/clf_validation_plot_pop_up.py +0 -0
  579. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/create_user_defined_pose_configuration_pop_up.py +0 -0
  580. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/csv_2_parquet_pop_up.py +0 -0
  581. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/data_plot_pop_up.py +0 -0
  582. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/delete_all_rois_pop_up.py +0 -0
  583. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/directing_animal_to_bodypart_plot_pop_up.py +0 -0
  584. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/directing_other_animals_plot_pop_up.py +0 -0
  585. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/direction_animal_to_bodypart_settings_pop_up.py +0 -0
  586. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/distance_plot_pop_up.py +0 -0
  587. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/egocentric_alignment_pop_up.py +0 -0
  588. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/fsttc_pop_up.py +0 -0
  589. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/gantt_pop_up.py +0 -0
  590. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/heatmap_clf_pop_up.py +0 -0
  591. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/heatmap_location_pop_up.py +0 -0
  592. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/interpolate_pop_up.py +0 -0
  593. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/kleinberg_pop_up.py +0 -0
  594. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/make_path_plot_pop_up.py +0 -0
  595. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/movement_analysis_pop_up.py +0 -0
  596. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/movement_analysis_time_bins_pop_up.py +0 -0
  597. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/mutual_exclusivity_pop_up.py +0 -0
  598. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/outlier_settings_pop_up.py +0 -0
  599. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/path_plot_pop_up.py +0 -0
  600. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/pose_bp_drop_pop_up.py +0 -0
  601. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/pose_reorganizer_pop_up.py +0 -0
  602. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/pup_retrieval_pop_up.py +0 -0
  603. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/quick_path_plot_pop_up.py +0 -0
  604. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/remove_roi_features_pop_up.py +0 -0
  605. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/roi_analysis_pop_up.py +0 -0
  606. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/roi_analysis_time_bins_pop_up.py +0 -0
  607. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/roi_features_plot_pop_up.py +0 -0
  608. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/roi_size_standardizer_popup.py +0 -0
  609. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/roi_tracking_plot_pop_up.py +0 -0
  610. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/roi_video_table_pop_up.py +0 -0
  611. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/set_machine_model_parameters_pop_up.py +0 -0
  612. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/severity_analysis_pop_up.py +0 -0
  613. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/smoothing_popup.py +0 -0
  614. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/spontaneous_alternation_pop_up.py +0 -0
  615. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/subset_feature_extractor_pop_up.py +0 -0
  616. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/targeted_annotation_clips_pop_up.py +0 -0
  617. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/third_party_annotator_appender_pop_up.py +0 -0
  618. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/validation_plot_pop_up.py +0 -0
  619. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/video_processing_pop_up.py +0 -0
  620. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/pop_ups/visualize_pose_in_dir_pop_up.py +0 -0
  621. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/px_to_mm_ui.py +0 -0
  622. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/tkinter_functions.py +0 -0
  623. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/user_defined_pose_creator.py +0 -0
  624. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/ui/video_info_ui.py +0 -0
  625. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/.DS_Store +0 -0
  626. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/__init__.py +0 -0
  627. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/bout_aggregator.py +0 -0
  628. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/cluster_frequentist_calculator.py +0 -0
  629. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/cluster_validation_calculator.py +0 -0
  630. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/cluster_video_visualizer.py +0 -0
  631. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/cluster_xai_calculator.py +0 -0
  632. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/clusterer_comparison_calculator.py +0 -0
  633. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/data_extractor.py +0 -0
  634. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/data_map.yaml +0 -0
  635. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/dataset_creator.py +0 -0
  636. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/dbcv_calculator.py +0 -0
  637. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/embedding_correlation_calculator.py +0 -0
  638. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/enums.py +0 -0
  639. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/grid_search_visualizers.py +0 -0
  640. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/hdbscan_clusterer.py +0 -0
  641. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/outlier_detector.py +0 -0
  642. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/.DS_Store +0 -0
  643. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/cluster_frequentist_stats_popup.py +0 -0
  644. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/cluster_validation_pop_up.py +0 -0
  645. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/cluster_videos_popup.py +0 -0
  646. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/cluster_xai_popup.py +0 -0
  647. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/clusterer_comparison_popup.py +0 -0
  648. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/data_extractor_popup.py +0 -0
  649. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/embedding_correlations_popup.py +0 -0
  650. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/fit_cluster_popup.py +0 -0
  651. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/fit_dim_reduction_popup.py +0 -0
  652. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/grid_search_visualizer_popup.py +0 -0
  653. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/print_embedding_info_popup.py +0 -0
  654. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/transform_cluster_popup.py +0 -0
  655. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/pop_ups/transform_dim_reduction_popup.py +0 -0
  656. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/tsne.py +0 -0
  657. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/umap_embedder.py +0 -0
  658. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/unsupervised/unsupervised_main.py +0 -0
  659. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/.DS_Store +0 -0
  660. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/__init__.py +0 -0
  661. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/cli/__init__.py +0 -0
  662. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/cli/cli_tools.py +0 -0
  663. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/config_creator.py +0 -0
  664. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/custom_feature_extractor.py +0 -0
  665. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/data.py +0 -0
  666. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/enums.py +0 -0
  667. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/errors.py +0 -0
  668. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/lookups.py +0 -0
  669. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/printing.py +0 -0
  670. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/utils/warnings.py +0 -0
  671. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/.DS_Store +0 -0
  672. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/__init__.py +0 -0
  673. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/batch_process_create_ffmpeg_commands.py +0 -0
  674. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/brightness_contrast_ui.py +0 -0
  675. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/calculate_px_dist.py +0 -0
  676. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/clahe_ui.py +0 -0
  677. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/egocentric_video_rotator.py +0 -0
  678. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/extract_frames.py +0 -0
  679. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/extract_seqframes.py +0 -0
  680. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/multi_cropper.py +0 -0
  681. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/roi_selector.py +0 -0
  682. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/roi_selector_circle.py +0 -0
  683. {simba_uw_tf_dev-2.7.2 → simba_uw_tf_dev-2.7.4}/simba/video_processors/roi_selector_polygon.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: simba_uw_tf_dev
3
- Version: 2.7.2
3
+ Version: 2.7.4
4
4
  Summary: Toolkit for computer classification and analysis of behaviors in experimental animals
5
5
  Home-page: https://github.com/sgoldenlab/simba
6
6
  Author: Simon Nilsson, Jia Jie Choong, Sophia Hwang
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: simba-uw-tf-dev
3
- Version: 2.7.2
3
+ Version: 2.7.4
4
4
  Summary: Toolkit for computer classification and analysis of behaviors in experimental animals
5
5
  Home-page: https://github.com/sgoldenlab/simba
6
6
  Author: Simon Nilsson, Jia Jie Choong, Sophia Hwang
@@ -328,6 +328,7 @@ simba/data_processors/circling_detector.py
328
328
  simba/data_processors/directing_animal_to_bodypart.py
329
329
  simba/data_processors/directing_other_animals_calculator.py
330
330
  simba/data_processors/egocentric_aligner.py
331
+ simba/data_processors/find_animal_blob_location.py
331
332
  simba/data_processors/freezing_detector.py
332
333
  simba/data_processors/fsttc_calculator.py
333
334
  simba/data_processors/gibbs_sampler.py
@@ -29,7 +29,7 @@ with open(GPU_REQUIREMENTS_PATH, "r") as f:
29
29
  # Setup configuration
30
30
  setuptools.setup(
31
31
  name="simba_uw_tf_dev",
32
- version="2.7.2",
32
+ version="2.7.4",
33
33
  author="Simon Nilsson, Jia Jie Choong, Sophia Hwang",
34
34
  author_email="sronilsson@gmail.com",
35
35
  description="Toolkit for computer classification and analysis of behaviors in experimental animals",
@@ -1,7 +1,8 @@
1
1
  __author__ = "Simon Nilsson"
2
2
 
3
- import os.path
4
3
  import time
4
+
5
+ import os.path
5
6
  import warnings
6
7
 
7
8
  warnings.filterwarnings("ignore", category=FutureWarning)
@@ -2,31 +2,28 @@ __author__ = "Simon Nilsson"
2
2
  __email__ = "sronilsson@gmail.com"
3
3
 
4
4
  import os
5
- from copy import deepcopy
6
- from typing import Optional, Union
7
-
5
+ import cv2
6
+ from copy import deepcopy, copy
7
+ from typing import Optional, Union, Dict
8
+ from shapely.geometry import Polygon, MultiPolygon
9
+ from shapely.affinity import scale
8
10
  import numpy as np
9
11
 
10
12
  try:
11
13
  from typing import Literal
12
14
  except:
13
15
  from typing_extensions import Literal
14
-
15
16
  import pandas as pd
16
17
 
17
18
  from simba.mixins.image_mixin import ImageMixin
18
- from simba.utils.checks import (check_if_dir_exists, check_int,
19
- check_nvidea_gpu_available, check_str,
20
- check_valid_boolean)
19
+ from simba.mixins.geometry_mixin import GeometryMixin
20
+ from simba.utils.checks import (check_if_dir_exists, check_int, check_nvidea_gpu_available, check_str, check_valid_boolean, check_instance, is_img_bw, check_float)
21
21
  from simba.utils.data import df_smoother, savgol_smoother
22
22
  from simba.utils.enums import Formats, Methods, Options
23
23
  from simba.utils.errors import FFMPEGCodecGPUError, InvalidInputError
24
24
  from simba.utils.printing import SimbaTimer, stdout_success
25
- from simba.utils.read_write import (find_all_videos_in_directory, get_fn_ext,
26
- get_video_meta_data, remove_files,
27
- write_df)
28
- from simba.video_processors.video_processing import (video_bg_subtraction,
29
- video_bg_subtraction_mp)
25
+ from simba.utils.read_write import (find_all_videos_in_directory, get_fn_ext, get_video_meta_data, remove_files, write_df)
26
+ from simba.video_processors.video_processing import (video_bg_subtraction, video_bg_subtraction_mp)
30
27
 
31
28
 
32
29
  class BlobLocationComputer(object):
@@ -54,10 +51,10 @@ class BlobLocationComputer(object):
54
51
  data_path: Union[str, os.PathLike],
55
52
  verbose: Optional[bool] = True,
56
53
  gpu: Optional[bool] = True,
57
- batch_size: Optional[int] = 2500,
54
+ batch_size: int = 2500,
58
55
  save_dir: Optional[Union[str, os.PathLike]] = None,
59
56
  smoothing: Optional[str] = None,
60
- multiprocessing: Optional[bool] = False):
57
+ multiprocessing: bool = False):
61
58
 
62
59
 
63
60
  if os.path.isdir(data_path):
@@ -122,5 +119,13 @@ class BlobLocationComputer(object):
122
119
  if self.verbose:
123
120
  stdout_success(f'Video blob detection complete for {len(self.data_paths)} video', elapsed_time=timer.elapsed_time_str)
124
121
 
122
+
123
+
124
+
125
+
126
+
127
+
128
+
129
+
125
130
  # x = BlobLocationComputer(data_path=r"C:\troubleshooting\RAT_NOR\project_folder\videos\2022-06-20_NOB_DOT_4_downsampled.mp4", multiprocessing=True, gpu=True, batch_size=2000, save_dir=r"C:\troubleshooting\RAT_NOR\project_folder\csv\blob_positions", smoothing='Savitzky Golay')
126
131
  # x.run()
@@ -0,0 +1,173 @@
1
+ from shapely.geometry import Polygon, MultiPolygon
2
+ from shapely.affinity import scale
3
+ from typing import Dict, Optional, Union
4
+ from copy import copy
5
+ import numpy as np
6
+ import cv2
7
+ import os
8
+ import pandas as pd
9
+ from simba.utils.read_write import read_img_batch_from_video_gpu, get_video_meta_data, find_core_cnt, get_fn_ext, read_img_batch_from_video
10
+ from simba.utils.checks import (check_float, check_instance, check_valid_boolean, is_img_bw, check_int, check_nvidea_gpu_available)
11
+ from simba.utils.printing import SimbaTimer
12
+ from simba.utils.errors import NotDirectoryError, FFMPEGCodecGPUError
13
+ import functools
14
+ import multiprocessing
15
+ from simba.utils.enums import Defaults
16
+
17
+ def find_animal_blob_location(imgs: Dict[int, np.ndarray],
18
+ verbose: bool = False,
19
+ video_name: Optional[str] = None,
20
+ inclusion_zone: Optional[Union[Polygon, MultiPolygon,]] = None,
21
+ window_size: Optional[int] = None) -> Dict[int, Dict[str, Union[int, np.ndarray]]]:
22
+ """
23
+ Helper to find the largest connected component in binary image. E.g., Use to find a "blob" (i.e., animal) within a background subtracted image.
24
+
25
+ .. seealso::
26
+ To create background subtracted videos, use e.g., :func:`simba.video_processors.video_processing.video_bg_subtraction_mp`, or :func:`~simba.video_processors.video_processing.video_bg_subtraction`.
27
+ To get ``img`` dict, use :func:`~simba.utils.read_write.read_img_batch_from_video_gpu` or :func:`~simba.mixins.image_mixin.ImageMixin.read_img_batch_from_video`.
28
+ For relevant notebook, see `BACKGROUND REMOVAL <https://simba-uw-tf-dev.readthedocs.io/en/latest/nb/bg_remove.html>`__.
29
+
30
+ .. important::
31
+ Pass black and white [0, 255] pixel values only, where the foreground is 255 and background is 0.
32
+
33
+ :param Dict[int, np.ndarray] imgs: Dictionary of images where the key is the frame id and the value is an image in np.ndarray format.
34
+ :param bool verbose: If True, prints progress. Default: False.
35
+ :param video_name video_name: The name of the video being processed for interpretable progress msg if ``verbose``.
36
+ :param Optional[Union[Polygon, MultiPolygon]] inclusion_zone: Optional shapely polygon, or multipolygon, restricting where to search for the largest blob. Default: None.
37
+ :param Optional[int] window_size: If not None, then integer representing the size multiplier of the animal geometry in previous frame. If not None, the animal geometry will only be searched for within this geometry.
38
+ :return: Dictionary where the key is the frame id and the value is a 2D array with x and y coordinates.
39
+ :rtype: Dict[int, np.ndarray]
40
+
41
+ :example:
42
+ >>> imgs = read_img_batch_from_video_gpu(video_path=r"C:\troubleshooting\mitra\test\temp\501_MA142_Gi_Saline_0515.mp4", start_frm=0, end_frm=0, black_and_white=True)
43
+ >>> data = find_animal_blob_location(imgs=imgs, window_size=3)
44
+ >>> data = pd.DataFrame.from_dict(data, orient='index')
45
+ """
46
+
47
+ from simba.mixins.geometry_mixin import GeometryMixin
48
+ check_valid_boolean(value=[verbose], source=f'{find_animal_blob_location.__name__} verbose', raise_error=True)
49
+ if inclusion_zone is not None:
50
+ check_instance(source=f'{find_animal_blob_location.__name__} inclusion_zone', instance=inclusion_zone, accepted_types=(MultiPolygon, Polygon,), raise_error=True)
51
+ if window_size is not None:
52
+ check_float(name='window_size', value=window_size, min_value=1.0, raise_error=True)
53
+ results, prior_window = {}, None
54
+ for frm_idx, img in imgs.items():
55
+ if verbose:
56
+ if video_name is None: print(f'Finding blob in image {frm_idx}...')
57
+ else: print(f'Finding blob in image {frm_idx} (Video {video_name})...')
58
+ is_img_bw(img=img, raise_error=True, source=f'{find_animal_blob_location.__name__} {frm_idx}')
59
+ contours = cv2.findContours(img, cv2.RETR_EXTERNAL, cv2.CHAIN_APPROX_SIMPLE)[1]
60
+ contours = [cnt.reshape(1, -1, 2) for cnt in contours if len(cnt) >= 3]
61
+ geometries = GeometryMixin().contours_to_geometries(contours=contours, force_rectangles=False)
62
+ if inclusion_zone is not None:
63
+ geo_idx = [inclusion_zone.contains(x.centroid) for x in geometries]
64
+ selected_polygons = [geometries[i] for i in geo_idx]
65
+ geometries = copy(selected_polygons)
66
+ if prior_window is not None:
67
+ geo_idx = [prior_window.contains(x.centroid) for x in geometries]
68
+ selected_polygons = [geometries[i] for i in geo_idx]
69
+ geometries = copy(selected_polygons)
70
+ geometry_stats = GeometryMixin().get_shape_statistics(shapes=geometries)
71
+ geometry = geometries[np.argmax(np.array(geometry_stats['areas']))].convex_hull.simplify(tolerance=5)
72
+ if window_size is not None:
73
+ window_geometry = GeometryMixin.minimum_rotated_rectangle(shape=geometry)
74
+ prior_window = scale(window_geometry, xfact=window_size, yfact=window_size, origin=window_geometry.centroid)
75
+ center = np.array(geometry.centroid.coords)[0].astype(np.int32)
76
+ vertices = np.array(geometry.exterior.coords).astype(np.int32)
77
+ results[frm_idx] = {'x': center[0], 'y': center[1], 'vertices': vertices}
78
+ return results
79
+
80
+
81
+ def get_blob_locations(video_path: Union[str, os.PathLike],
82
+ batch_size: int = 3000,
83
+ gpu: bool = False,
84
+ verbose: bool = True,
85
+ save_path: Optional[Union[str, os.PathLike]] = None,
86
+ inclusion_zone: Optional[Union[Polygon, MultiPolygon]] = None,
87
+ window_size: Optional[float] = None) -> Union[None, pd.DataFrame]:
88
+ """
89
+ Detects the location of the largest blob in each frame of a video. Processes frames in batches and optionally uses GPU for acceleration. Results can be saved to a specified path or returned as a NumPy array.
90
+ .. seealso::
91
+ For visualization of results, see :func:`simba.plotting.blob_plotter.BlobPlotter` and :func:`simba.mixins.plotting_mixin.PlottingMixin._plot_blobs`
92
+ Background subtraction can be performed using :func:`~simba.video_processors.video_processing.video_bg_subtraction_mp` or :func:`~simba.video_processors.video_processing.video_bg_subtraction`.
93
+ .. note::
94
+ In ``inclusion_zones`` is not None, then the largest blob will be searches for **inside** the passed vertices.
95
+ :param Union[str, os.PathLike] video_path: Path to the video file from which to extract frames. Often, a background subtracted video, which can be created with e.g., :func:`simba.video_processors.video_processing.video_bg_subtraction_mp`.
96
+ :param Optional[int] batch_size: Number of frames to process in each batch. Default is 3k.
97
+ :param Optional[bool] gpu: Whether to use GPU acceleration for processing. Default is False.
98
+ :param Optional[bool] verbose: Whether to print progress and status messages. Default is True.
99
+ :param Optional[Union[str, os.PathLike]] save_path: Path to save the results as a CSV file. If None, results are not saved.
100
+ :param Optional[Union[Polygon, MultiPolygon]] inclusion_zones: Optional shapely polygon, or multipolygon, restricting where to search for the largest blob. Default: None.
101
+ :param Optional[int] window_size: If not None, then integer representing the size multiplier of the animal geometry in previous frame. If not None, the animal geometry will only be searched for within this geometry.
102
+ :return: A dataframe shape (N, 4) where N is the number of frames, containing the X and Y coordinates of the centroid of the largest blob in each frame and the vertices representing the hull. If `save_path` is provided, returns None.
103
+ :rtype: Union[None, pd.DataFrame]
104
+ :example:
105
+ >>> x = ImageMixin.get_blob_locations(video_path=r"/mnt/c/troubleshooting/RAT_NOR/project_folder/videos/2022-06-20_NOB_DOT_4_downsampled_bg_subtracted.mp4", gpu=True)
106
+ >>> y = ImageMixin.get_blob_locations(video_path=r"C:\troubleshooting\RAT_NOR\project_folder\videos\2022-06-20_NOB_IOT_1_bg_subtracted.mp4", gpu=True)
107
+ """
108
+
109
+
110
+ timer = SimbaTimer(start=True)
111
+ video_meta = get_video_meta_data(video_path=video_path)
112
+ _, video_name, _ = get_fn_ext(filepath=video_path)
113
+ check_int(name=f'{get_blob_locations.__name__} batch_size', value=batch_size, min_value=1)
114
+ if batch_size > video_meta['frame_count']: batch_size = video_meta['frame_count']
115
+ if save_path is not None:
116
+ if not os.path.isdir(os.path.dirname(save_path)):
117
+ raise NotDirectoryError(msg=f'Directory path {os.path.dirname(save_path)} is not a valid directory', source=get_blob_locations.__name__)
118
+ check_valid_boolean(value=gpu, source=f'{get_blob_locations.__name__} gpu')
119
+ check_valid_boolean(value=verbose, source=f'{get_blob_locations.__name__} verbose')
120
+ if gpu and not check_nvidea_gpu_available():
121
+ raise FFMPEGCodecGPUError(msg='No GPU detected, try to set GPU to False', source=get_blob_locations.__name__)
122
+ if inclusion_zone is not None:
123
+ check_instance(source=f'{get_blob_locations} inclusion_zone', instance=inclusion_zone, accepted_types=(MultiPolygon, Polygon,), raise_error=True)
124
+ if window_size is not None:
125
+ check_float(name='window_size', value=window_size, min_value=1.0, raise_error=True)
126
+ frame_ids = list(range(0, video_meta['frame_count']))
127
+ frame_ids = [frame_ids[i:i + batch_size] for i in range(0, len(frame_ids), batch_size)]
128
+ core_cnt = find_core_cnt()[0]
129
+ results = {}
130
+ if verbose:
131
+ print('Starting blob location detection...')
132
+ for frame_batch in range(len(frame_ids)):
133
+ start_frm, end_frm = frame_ids[frame_batch][0], frame_ids[frame_batch][-1]
134
+ if gpu:
135
+ imgs = read_img_batch_from_video_gpu(video_path=video_path, start_frm=start_frm, end_frm=end_frm, verbose=False, out_format='array', black_and_white=True)
136
+ else:
137
+ imgs = read_img_batch_from_video(video_path=video_path, start_frm=start_frm, end_frm=end_frm, verbose=False, black_and_white=True)
138
+ keys = np.arange(start_frm, end_frm+1)
139
+ img_dict = {}
140
+ for cnt, img_id in enumerate(range(start_frm, end_frm+1)):
141
+ img_dict[img_id] = imgs[cnt]
142
+ batch_results = {}
143
+ img_dict = [{k: img_dict[k] for k in subset} for subset in np.array_split(keys, core_cnt)]
144
+ del imgs
145
+ with multiprocessing.Pool(core_cnt, maxtasksperchild=Defaults.LARGE_MAX_TASK_PER_CHILD.value) as pool:
146
+ constants = functools.partial(find_animal_blob_location,
147
+ verbose=verbose,
148
+ video_name=video_name,
149
+ inclusion_zone=inclusion_zone)
150
+ for cnt, result in enumerate(pool.imap(constants, img_dict, chunksize=1)):
151
+ batch_results.update(result)
152
+ results.update(batch_results)
153
+ pool.join()
154
+ pool.terminate()
155
+ results = dict(sorted(results.items()))
156
+ results = pd.DataFrame.from_dict(data=results, orient='index', columns=['x', 'y', 'vertices'])
157
+ if save_path is not None:
158
+ results.to_csv(save_path)
159
+ else:
160
+ return results
161
+
162
+
163
+
164
+
165
+ if __name__ == "__main__":
166
+ get_blob_locations(video_path=r"C:\troubleshooting\mitra\test\temp\501_MA142_Gi_Saline_0515.mp4", gpu=False, save_path=r'C:\troubleshooting\mitra\test\blob_data\501_MA142_Gi_Saline_0515.csv')
167
+
168
+
169
+
170
+ #
171
+ # imgs = read_img_batch_from_video_gpu(video_path=r"C:\troubleshooting\mitra\test\temp\501_MA142_Gi_Saline_0515.mp4", start_frm=0, end_frm=0, black_and_white=True)
172
+ # data = find_animal_blob_location(imgs=imgs, window_size=3)
173
+ # data = pd.DataFrame.from_dict(data, orient='index')
@@ -3833,9 +3833,6 @@ class GeometryMixin(object):
3833
3833
  lengths.append(length)
3834
3834
  widths.append(width)
3835
3835
  areas.append(area)
3836
-
3837
-
3838
-
3839
3836
  centers.append(list(np.array(shape.centroid.coords)[0].astype(np.int32)))
3840
3837
 
3841
3838
  return {'lengths': lengths, 'widths': widths, 'areas': areas, 'centers': centers, 'max_length': max_length, 'min_length': min_length, 'min_width': min_width, 'max_width': max_width, 'min_area': min_area, 'max_area': max_area}
@@ -1,8 +1,6 @@
1
1
  import platform
2
2
  from typing import Dict, List, Optional, Tuple, Union
3
-
4
3
  import numpy as np
5
-
6
4
  try:
7
5
  from typing import Literal
8
6
  except:
@@ -16,7 +14,7 @@ from collections import ChainMap
16
14
  import cv2
17
15
  import pandas as pd
18
16
  from numba import float64, int64, jit, njit, prange, uint8
19
- from shapely.geometry import Polygon
17
+ from shapely.geometry import Polygon, MultiPolygon
20
18
  from skimage.metrics import structural_similarity
21
19
 
22
20
  from simba.utils.checks import (check_file_exist_and_readable, check_float,
@@ -31,12 +29,8 @@ from simba.utils.errors import (ArrayError, FFMPEGCodecGPUError,
31
29
  FrameRangeError, InvalidInputError,
32
30
  NotDirectoryError)
33
31
  from simba.utils.printing import SimbaTimer, stdout_success
34
- from simba.utils.read_write import (find_core_cnt,
35
- find_files_of_filetypes_in_directory,
36
- find_largest_blob_location, get_fn_ext,
37
- get_video_meta_data, read_frm_of_video,
38
- read_img_batch_from_video_gpu, write_df)
39
-
32
+ from simba.utils.read_write import (find_core_cnt, find_files_of_filetypes_in_directory, get_fn_ext, get_video_meta_data, read_frm_of_video, read_img_batch_from_video_gpu, write_df)
33
+ from simba.data_processors.find_animal_blob_location import find_animal_blob_location
40
34
 
41
35
  class ImageMixin(object):
42
36
  """
@@ -948,7 +942,7 @@ class ImageMixin(object):
948
942
  return results.astype(int64)
949
943
 
950
944
  @staticmethod
951
- def _read_img_batch_from_video_helper(frm_idx: np.ndarray, video_path: Union[str, os.PathLike], greyscale: bool, verbose: bool):
945
+ def _read_img_batch_from_video_helper(frm_idx: np.ndarray, video_path: Union[str, os.PathLike], greyscale: bool, verbose: bool, black_and_white: bool):
952
946
 
953
947
  """Multiprocess helper used by read_img_batch_from_video to read in images from video file."""
954
948
  start_idx, end_frm, current_frm = frm_idx[0], frm_idx[-1] + 1, frm_idx[0]
@@ -959,8 +953,10 @@ class ImageMixin(object):
959
953
  if verbose:
960
954
  print(f'Reading frame idx {current_frm}...')
961
955
  img = cap.read()[1]
962
- if greyscale:
956
+ if greyscale or black_and_white:
963
957
  img = ImageMixin.img_to_greyscale(img=img)
958
+ if black_and_white:
959
+ img = np.where(img > 127, 255, 0).astype(np.uint8)
964
960
  results[current_frm] = img
965
961
  current_frm += 1
966
962
  return results
@@ -969,20 +965,26 @@ class ImageMixin(object):
969
965
  def read_img_batch_from_video(video_path: Union[str, os.PathLike],
970
966
  start_frm: int,
971
967
  end_frm: int,
972
- greyscale: Optional[bool] = False,
973
- core_cnt: Optional[int] = -1,
974
- verbose: Optional[bool] = False) -> Dict[int, np.ndarray]:
968
+ greyscale: bool = False,
969
+ black_and_white: bool = False,
970
+ core_cnt: int = -1,
971
+ verbose: bool = False) -> Dict[int, np.ndarray]:
975
972
  """
976
973
  Read a batch of frames from a video file. This method reads frames from a specified range of frames within a video file using multiprocessing.
977
974
 
978
975
  .. seealso::
979
976
  For GPU acceleration, see :func:`simba.utils.read_write.read_img_batch_from_video_gpu`
980
977
 
978
+ .. note::
979
+ When black-and-white videos are saved as MP4, there can be some small errors in pixel values during compression. A video with only (0, 255) pixel values therefore gets other pixel values, around 0 and 255, when read in again.
980
+ If you expect that the video you are reading in is black and white, set ``black_and_white`` to True to round any of these wonly value sto 0 and 255.
981
+
981
982
  :param Union[str, os.PathLike] video_path: Path to the video file.
982
983
  :param int start_frm: Starting frame index.
983
984
  :param int end_frm: Ending frame index.
984
985
  :param Optionalint] core_cnt: Number of CPU cores to use for parallel processing. Default is -1, indicating using all available cores.
985
986
  :param Optional[bool] greyscale: If True, reads the images as greyscale. If False, then as original color scale. Default: False.
987
+ :param bool black_and_white: If True, returns the images in black and white. Default False.
986
988
  :returns: A dictionary containing frame indices as keys and corresponding frame arrays as values.
987
989
  :rtype: Dict[int, np.ndarray]
988
990
 
@@ -998,7 +1000,7 @@ class ImageMixin(object):
998
1000
  check_int(name=ImageMixin().__class__.__name__,value=start_frm, min_value=0,max_value=video_meta_data["frame_count"])
999
1001
  check_int(name=ImageMixin().__class__.__name__, value=end_frm, min_value=start_frm+1, max_value=video_meta_data["frame_count"])
1000
1002
  check_int(name=ImageMixin().__class__.__name__, value=core_cnt, min_value=-1)
1001
- check_valid_boolean(value=[greyscale], source=f'{ImageMixin().__class__.__name__} greyscale')
1003
+ check_valid_boolean(value=[greyscale, black_and_white], source=f'{ImageMixin().__class__.__name__} greyscale black_and_white')
1002
1004
  if core_cnt < 0:
1003
1005
  core_cnt = multiprocessing.cpu_count()
1004
1006
  if end_frm <= start_frm:
@@ -1006,7 +1008,7 @@ class ImageMixin(object):
1006
1008
  frm_lst = np.array_split(np.arange(start_frm, end_frm + 1), core_cnt)
1007
1009
  results = {}
1008
1010
  with multiprocessing.Pool(core_cnt, maxtasksperchild=Defaults.LARGE_MAX_TASK_PER_CHILD.value) as pool:
1009
- constants = functools.partial(ImageMixin()._read_img_batch_from_video_helper, video_path=video_path, greyscale=greyscale, verbose=verbose)
1011
+ constants = functools.partial(ImageMixin()._read_img_batch_from_video_helper, video_path=video_path, greyscale=greyscale, black_and_white=black_and_white, verbose=verbose)
1010
1012
  for cnt, result in enumerate(pool.imap(constants, frm_lst, chunksize=1)):
1011
1013
  results.update(result)
1012
1014
 
@@ -1717,25 +1719,30 @@ class ImageMixin(object):
1717
1719
 
1718
1720
  @staticmethod
1719
1721
  def get_blob_locations(video_path: Union[str, os.PathLike],
1720
- batch_size: Optional[int] = 3000,
1721
- gpu: Optional[bool] = False,
1722
- verbose: Optional[bool] = True,
1723
- save_path: Optional[Union[str, os.PathLike]] = None) -> Union[None, np.ndarray]:
1722
+ batch_size: int = 3000,
1723
+ gpu: bool = False,
1724
+ verbose: bool = True,
1725
+ save_path: Optional[Union[str, os.PathLike]] = None,
1726
+ inclusion_zone: Optional[Union[Polygon, MultiPolygon]] = None,
1727
+ window_size: Optional[float] = None) -> Union[None, np.ndarray]:
1724
1728
  """
1725
- Detects the location of the largest blob in each frame of a video. Processes frames in batches and
1726
- optionally uses GPU for acceleration. Results can be saved to a specified path or returned as a NumPy array.
1729
+ Detects the location of the largest blob in each frame of a video. Processes frames in batches and optionally uses GPU for acceleration. Results can be saved to a specified path or returned as a NumPy array.
1727
1730
 
1728
1731
  .. seealso::
1729
1732
  For visualization of results, see :func:`simba.plotting.blob_plotter.BlobPlotter` and :func:`simba.mixins.plotting_mixin.PlottingMixin._plot_blobs`
1733
+ Background subtraction can be performed using :func:`~simba.video_processors.video_processing.video_bg_subtraction_mp` or :func:`~simba.video_processors.video_processing.video_bg_subtraction`.
1734
+
1735
+ .. note::
1736
+ In ``inclusion_zones`` is not None, then the largest blob will be searches for **inside** the passed vertices.
1730
1737
 
1731
- :param Union[str, os.PathLike] video_path: Path to the video file from which to extract frames.
1732
- :param Optional[int] batch_size: Number of frames to process in each batch. Default is 2000.
1738
+ :param Union[str, os.PathLike] video_path: Path to the video file from which to extract frames. Often, a background subtracted video, which can be created with e.g., :func:`simba.video_processors.video_processing.video_bg_subtraction_mp`.
1739
+ :param Optional[int] batch_size: Number of frames to process in each batch. Default is 3k.
1733
1740
  :param Optional[bool] gpu: Whether to use GPU acceleration for processing. Default is False.
1734
1741
  :param Optional[bool] verbose: Whether to print progress and status messages. Default is True.
1735
1742
  :param Optional[Union[str, os.PathLike]] save_path: Path to save the results as a CSV file. If None, results are not saved.
1736
-
1737
- :return: A NumPy array of shape (N, 2) where N is the number of frames, containing the X and Y coordinates
1738
- of the centroid of the largest blob in each frame. If `save_path` is provided, returns None.
1743
+ :param Optional[Union[Polygon, MultiPolygon]] inclusion_zones: Optional shapely polygon, or multipolygon, restricting where to search for the largest blob. Default: None.
1744
+ :param Optional[int] window_size: If not None, then integer representing the size multiplier of the animal geometry in previous frame. If not None, the animal geometry will only be searched for within this geometry.
1745
+ :return: A NumPy array of shape (N, 2) where N is the number of frames, containing the X and Y coordinates of the centroid of the largest blob in each frame. If `save_path` is provided, returns None.
1739
1746
  :rtype: Union[None, np.ndarray]
1740
1747
 
1741
1748
  :example:
@@ -1754,6 +1761,10 @@ class ImageMixin(object):
1754
1761
  check_valid_boolean(value=gpu, source=f'{ImageMixin.get_blob_locations.__name__} verbose')
1755
1762
  if gpu and not check_nvidea_gpu_available():
1756
1763
  raise FFMPEGCodecGPUError(msg='No GPU detected, try to set GPU to False', source=ImageMixin.get_blob_locations.__name__)
1764
+ if inclusion_zone is not None:
1765
+ check_instance(source=f'{ImageMixin.get_blob_locations} inclusion_zone', instance=inclusion_zone, accepted_types=(MultiPolygon, Polygon,), raise_error=True)
1766
+ if window_size is not None:
1767
+ check_float(name='window_size', value=window_size, min_value=1.0, raise_error=True)
1757
1768
  frame_ids = list(range(0, video_meta['frame_count']))
1758
1769
  frame_ids = [frame_ids[i:i + batch_size] for i in range(0, len(frame_ids), batch_size)]
1759
1770
  core_cnt = find_core_cnt()[0]
@@ -1763,10 +1774,10 @@ class ImageMixin(object):
1763
1774
  for frame_batch in range(len(frame_ids)):
1764
1775
  start_frm, end_frm = frame_ids[frame_batch][0], frame_ids[frame_batch][-1]
1765
1776
  if gpu:
1766
- imgs = read_img_batch_from_video_gpu(video_path=video_path, start_frm=start_frm, end_frm=end_frm, verbose=False, out_format='array', greyscale=False)
1777
+ imgs = read_img_batch_from_video_gpu(video_path=video_path, start_frm=start_frm, end_frm=end_frm, verbose=False, out_format='array', black_and_white=True)
1767
1778
  else:
1768
- imgs = ImageMixin.read_img_batch_from_video(video_path=video_path, start_frm=start_frm, end_frm=end_frm, verbose=verbose)
1769
- imgs = ImageMixin.img_stack_to_greyscale(imgs=imgs).astype(np.uint8)
1779
+ imgs = ImageMixin.read_img_batch_from_video(video_path=video_path, start_frm=start_frm, end_frm=end_frm, verbose=verbose, black_and_white=True)
1780
+ imgs = np.stack(list(imgs.values()))
1770
1781
  keys = np.arange(start_frm, end_frm+1)
1771
1782
  img_dict = {}
1772
1783
  for cnt, img_id in enumerate(range(start_frm, end_frm+1)):
@@ -1775,23 +1786,28 @@ class ImageMixin(object):
1775
1786
  img_dict = [{k: img_dict[k] for k in subset} for subset in np.array_split(keys, core_cnt)]
1776
1787
  del imgs
1777
1788
  with multiprocessing.Pool(core_cnt, maxtasksperchild=Defaults.LARGE_MAX_TASK_PER_CHILD.value) as pool:
1778
- constants = functools.partial(find_largest_blob_location, verbose=verbose, video_name=video_name)
1789
+ constants = functools.partial(find_animal_blob_location,
1790
+ verbose=verbose,
1791
+ video_name=video_name,
1792
+ inclusion_zone=inclusion_zone)
1779
1793
  for cnt, result in enumerate(pool.imap(constants, img_dict, chunksize=1)):
1780
1794
  batch_results.update(result)
1781
1795
  results.update(batch_results)
1782
1796
  pool.join()
1783
1797
  pool.terminate()
1784
- results = list(results.values())
1785
- results = np.stack(results, axis=0)
1786
- timer.stop_timer()
1787
- if save_path:
1788
- df = pd.DataFrame(results, columns=['X', 'Y'])
1789
- write_df(df=df, file_type=Formats.CSV.value, save_path=save_path)
1790
- if verbose:
1791
- stdout_success(f'Video {video_meta["video_name"]} blob detection complete, saved at {save_path}', elapsed_time=timer.elapsed_time_str)
1792
- else:
1793
- stdout_success(f'Video {video_meta["video_name"]} blob detection complete', elapsed_time=timer.elapsed_time_str)
1794
- return results.astype(np.int32)
1798
+ results = dict(sorted(results.items()))
1799
+ print(results)
1800
+ # results = list(results.values())
1801
+ # results = np.stack(results, axis=0)
1802
+ # timer.stop_timer()
1803
+ # if save_path:
1804
+ # df = pd.DataFrame(results, columns=['X', 'Y'])
1805
+ # write_df(df=df, file_type=Formats.CSV.value, save_path=save_path)
1806
+ # if verbose:
1807
+ # stdout_success(f'Video {video_meta["video_name"]} blob detection complete, saved at {save_path}', elapsed_time=timer.elapsed_time_str)
1808
+ # else:
1809
+ # stdout_success(f'Video {video_meta["video_name"]} blob detection complete', elapsed_time=timer.elapsed_time_str)
1810
+ # return results.astype(np.int32)
1795
1811
 
1796
1812
  @staticmethod
1797
1813
  def is_video_color(video: Union[str, os.PathLike, cv2.VideoCapture]):
@@ -1859,6 +1875,11 @@ class ImageMixin(object):
1859
1875
  return results
1860
1876
 
1861
1877
 
1878
+
1879
+
1880
+
1881
+
1882
+
1862
1883
  #x = ImageMixin.get_blob_locations(video_path=r"C:\troubleshooting\RAT_NOR\project_folder\videos\2022-06-20_NOB_DOT_4_downsampled_bg_subtracted.mp4", gpu=True)
1863
1884
  # imgs = ImageMixin().read_all_img_in_dir(dir='/Users/simon/Desktop/envs/simba/troubleshooting/RAT_NOR/project_folder/videos/examples')
1864
1885
  # imgs = np.stack(imgs.values())
@@ -1959,3 +1980,7 @@ class ImageMixin(object):
1959
1980
  #
1960
1981
  # ImageMixin.img_matrix_mse(imgs=imgs_stack)
1961
1982
 
1983
+
1984
+ #if
1985
+
1986
+ #ImageMixin.get_blob_locations(video_path=r"C:\troubleshooting\mitra\test\temp\501_MA142_Gi_Saline_0515.mp4")
@@ -199,10 +199,6 @@ class NetworkMixin(object):
199
199
  def graph_current_flow_closeness_centrality(graph: nx.Graph, weights: Optional[str] = "weight"):
200
200
 
201
201
  """
202
-
203
-
204
-
205
-
206
202
  :example:
207
203
  >>> graph = NetworkMixin.create_graph(data={('Animal_1', 'Animal_2'): 1.0, ('Animal_1', 'Animal_3'): 0.2, ('Animal_2', 'Animal_3'): 0.5})
208
204
  >>> NetworkMixin().graph_current_flow_closeness_centrality(graph=graph)
@@ -97,13 +97,16 @@ class SLEAPImporterCSV(ConfigReader, PoseImporterMixin):
97
97
  if INSTANCE_SCORE in data_df.columns:
98
98
  data_df = data_df.drop([INSTANCE_SCORE], axis=1)
99
99
  idx = data_df.iloc[:, :2]
100
- data_unique_tracks = list(idx[TRACK].unique())
101
100
  check_that_column_exist(df=idx, column_name=TRACK, file_name=video_name)
102
- idx[TRACK] = idx[TRACK].fillna(data_unique_tracks[0])
103
- idx[TRACK] = idx[TRACK].str.replace(r"[^\d.]+", "").astype(int)
104
- #idx[TRACK] = idx[TRACK].str.replace(r"[^\d.]+", "", regex=True).astype(int)
101
+ data_unique_tracks = list(idx[TRACK].unique())
105
102
  if len(data_unique_tracks) != self.animal_cnt:
106
103
  raise AnimalNumberError(msg=f'The SLEAP CSV file {video_data["DATA"]} contains data for {len(data_unique_tracks)} tracks (found tracks: {data_unique_tracks}). The SimBA project config says the SimBA project expects data for {self.animal_cnt} animals.')
104
+ if len(data_unique_tracks) == 1:
105
+ idx[TRACK] = 'track_0'; data_unique_tracks = ['track_0']
106
+
107
+ idx[TRACK] = idx[TRACK].fillna(data_unique_tracks[0])
108
+ idx[TRACK] = idx[TRACK].str.replace(r"[^\d.]+", "", regex=True).astype(int)
109
+
107
110
  data_df = data_df.iloc[:, 2:].fillna(0)
108
111
  if self.animal_cnt > 1:
109
112
  self.data_df = pd.DataFrame(self.transpose_multi_animal_table(data=data_df.values, idx=idx.values, animal_cnt=self.animal_cnt))
@@ -137,6 +140,14 @@ class SLEAPImporterCSV(ConfigReader, PoseImporterMixin):
137
140
  stdout_success(msg=f"{len(list(self.data_and_videos_lk.keys()))} file(s) imported to the SimBA project {self.input_csv_dir}", source=self.__class__.__name__)
138
141
 
139
142
 
143
+ # test = SLEAPImporterCSV(config_path=r"D:\troubleshooting\mitra\project_folder\project_config.ini",
144
+ # data_folder=r'D:\troubleshooting\mitra\raw_tracking_data',
145
+ # id_lst=['Track_0'],
146
+ # interpolation_settings={'type': 'body-parts', 'method': 'linear'},
147
+ # smoothing_settings = {'time_window': 500, 'method': 'gaussian'})
148
+ # test.run()
149
+
150
+
140
151
 
141
152
 
142
153
  #
@@ -146,7 +157,7 @@ class SLEAPImporterCSV(ConfigReader, PoseImporterMixin):
146
157
  # interpolation_settings={'type': 'animals', 'method': 'linear'},
147
158
  # smoothing_settings = {'time_window': 500, 'method': 'gaussian'})
148
159
  # test.run()
149
-
160
+ #
150
161
 
151
162
 
152
163