simba-uw-tf-dev 4.6.2__py3-none-any.whl → 4.7.1__py3-none-any.whl

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 (90) hide show
  1. simba/assets/.recent_projects.txt +1 -0
  2. simba/assets/lookups/tooptips.json +6 -1
  3. simba/data_processors/agg_clf_counter_mp.py +52 -53
  4. simba/data_processors/blob_location_computer.py +1 -1
  5. simba/data_processors/circling_detector.py +30 -13
  6. simba/data_processors/cuda/geometry.py +45 -27
  7. simba/data_processors/cuda/image.py +1648 -1598
  8. simba/data_processors/cuda/statistics.py +72 -26
  9. simba/data_processors/cuda/timeseries.py +1 -1
  10. simba/data_processors/cue_light_analyzer.py +5 -9
  11. simba/data_processors/egocentric_aligner.py +25 -7
  12. simba/data_processors/freezing_detector.py +55 -47
  13. simba/data_processors/kleinberg_calculator.py +61 -29
  14. simba/feature_extractors/feature_subsets.py +14 -7
  15. simba/feature_extractors/mitra_feature_extractor.py +2 -2
  16. simba/feature_extractors/straub_tail_analyzer.py +4 -6
  17. simba/labelling/standard_labeller.py +1 -1
  18. simba/mixins/config_reader.py +5 -2
  19. simba/mixins/geometry_mixin.py +22 -36
  20. simba/mixins/image_mixin.py +24 -28
  21. simba/mixins/plotting_mixin.py +28 -10
  22. simba/mixins/statistics_mixin.py +48 -11
  23. simba/mixins/timeseries_features_mixin.py +1 -1
  24. simba/mixins/train_model_mixin.py +67 -29
  25. simba/model/inference_batch.py +1 -1
  26. simba/model/yolo_seg_inference.py +3 -3
  27. simba/outlier_tools/skip_outlier_correction.py +1 -1
  28. simba/plotting/ROI_feature_visualizer_mp.py +3 -5
  29. simba/plotting/clf_validator_mp.py +4 -5
  30. simba/plotting/cue_light_visualizer.py +6 -7
  31. simba/plotting/directing_animals_visualizer_mp.py +2 -3
  32. simba/plotting/distance_plotter_mp.py +378 -378
  33. simba/plotting/gantt_creator.py +29 -10
  34. simba/plotting/gantt_creator_mp.py +96 -33
  35. simba/plotting/geometry_plotter.py +270 -272
  36. simba/plotting/heat_mapper_clf_mp.py +4 -6
  37. simba/plotting/heat_mapper_location_mp.py +2 -2
  38. simba/plotting/light_dark_box_plotter.py +2 -2
  39. simba/plotting/path_plotter_mp.py +26 -29
  40. simba/plotting/plot_clf_results_mp.py +455 -454
  41. simba/plotting/pose_plotter_mp.py +28 -29
  42. simba/plotting/probability_plot_creator_mp.py +288 -288
  43. simba/plotting/roi_plotter_mp.py +31 -31
  44. simba/plotting/single_run_model_validation_video_mp.py +427 -427
  45. simba/plotting/spontaneous_alternation_plotter.py +2 -3
  46. simba/plotting/yolo_pose_track_visualizer.py +32 -27
  47. simba/plotting/yolo_pose_visualizer.py +35 -36
  48. simba/plotting/yolo_seg_visualizer.py +2 -3
  49. simba/pose_importers/simba_blob_importer.py +3 -3
  50. simba/roi_tools/roi_aggregate_stats_mp.py +5 -4
  51. simba/roi_tools/roi_clf_calculator_mp.py +4 -4
  52. simba/sandbox/analyze_runtimes.py +30 -0
  53. simba/sandbox/cuda/egocentric_rotator.py +374 -374
  54. simba/sandbox/get_cpu_pool.py +5 -0
  55. simba/sandbox/proboscis_to_tip.py +28 -0
  56. simba/sandbox/test_directionality.py +47 -0
  57. simba/sandbox/test_nonstatic_directionality.py +27 -0
  58. simba/sandbox/test_pycharm_cuda.py +51 -0
  59. simba/sandbox/test_simba_install.py +41 -0
  60. simba/sandbox/test_static_directionality.py +26 -0
  61. simba/sandbox/test_static_directionality_2d.py +26 -0
  62. simba/sandbox/verify_env.py +42 -0
  63. simba/third_party_label_appenders/transform/coco_keypoints_to_yolo.py +3 -3
  64. simba/third_party_label_appenders/transform/coco_keypoints_to_yolo_bbox.py +2 -2
  65. simba/ui/pop_ups/clf_plot_pop_up.py +2 -2
  66. simba/ui/pop_ups/fsttc_pop_up.py +27 -25
  67. simba/ui/pop_ups/gantt_pop_up.py +31 -6
  68. simba/ui/pop_ups/kleinberg_pop_up.py +39 -40
  69. simba/ui/pop_ups/video_processing_pop_up.py +37 -29
  70. simba/ui/tkinter_functions.py +3 -0
  71. simba/utils/custom_feature_extractor.py +1 -1
  72. simba/utils/data.py +90 -14
  73. simba/utils/enums.py +1 -0
  74. simba/utils/errors.py +441 -440
  75. simba/utils/lookups.py +1203 -1203
  76. simba/utils/printing.py +124 -124
  77. simba/utils/read_write.py +3769 -3721
  78. simba/utils/yolo.py +10 -1
  79. simba/video_processors/blob_tracking_executor.py +2 -2
  80. simba/video_processors/clahe_ui.py +1 -1
  81. simba/video_processors/egocentric_video_rotator.py +44 -41
  82. simba/video_processors/multi_cropper.py +1 -1
  83. simba/video_processors/video_processing.py +5264 -5222
  84. simba/video_processors/videos_to_frames.py +43 -33
  85. {simba_uw_tf_dev-4.6.2.dist-info → simba_uw_tf_dev-4.7.1.dist-info}/METADATA +4 -3
  86. {simba_uw_tf_dev-4.6.2.dist-info → simba_uw_tf_dev-4.7.1.dist-info}/RECORD +90 -80
  87. {simba_uw_tf_dev-4.6.2.dist-info → simba_uw_tf_dev-4.7.1.dist-info}/LICENSE +0 -0
  88. {simba_uw_tf_dev-4.6.2.dist-info → simba_uw_tf_dev-4.7.1.dist-info}/WHEEL +0 -0
  89. {simba_uw_tf_dev-4.6.2.dist-info → simba_uw_tf_dev-4.7.1.dist-info}/entry_points.txt +0 -0
  90. {simba_uw_tf_dev-4.6.2.dist-info → simba_uw_tf_dev-4.7.1.dist-info}/top_level.txt +0 -0
@@ -24,15 +24,16 @@ from simba.utils.checks import (check_file_exist_and_readable, check_float,
24
24
  check_valid_boolean, check_valid_lst,
25
25
  check_video_and_data_frm_count_align)
26
26
  from simba.utils.data import (create_color_palettes, detect_bouts,
27
- slice_roi_dict_for_video)
27
+ get_cpu_pool, slice_roi_dict_for_video,
28
+ terminate_cpu_pool)
28
29
  from simba.utils.enums import ROI_SETTINGS, Formats, Keys, Paths, TextOptions
29
30
  from simba.utils.errors import (BodypartColumnNotFoundError, DuplicationError,
30
31
  NoFilesFoundError, NoROIDataError,
31
32
  ROICoordinatesNotFoundError)
32
33
  from simba.utils.printing import SimbaTimer, stdout_success
33
34
  from simba.utils.read_write import (concatenate_videos_in_folder,
34
- find_core_cnt, get_video_meta_data,
35
- read_df)
35
+ find_core_cnt, get_current_time,
36
+ get_video_meta_data, read_df)
36
37
  from simba.utils.warnings import (DuplicateNamesWarning, FrameRangeWarning,
37
38
  GPUToolsWarning)
38
39
 
@@ -117,7 +118,7 @@ def _roi_plotter_mp(data: Tuple[int, pd.DataFrame],
117
118
 
118
119
  writer.write(img)
119
120
  current_frm += 1
120
- if verbose: print(f"Multi-processing video frame {current_frm} on core {group_cnt}...")
121
+ if verbose: print(f"[{get_current_time()}] Multi-processing video frame {current_frm}/{video_meta_data['frame_count']} (core batch: {group_cnt}, video: {video_meta_data['video_name']})...")
121
122
  else:
122
123
  FrameRangeWarning(msg=f'Could not read frame {current_frm} in video {video_meta_data["video_name"]}', source=_roi_plotter_mp.__name__)
123
124
  break
@@ -363,34 +364,33 @@ class ROIPlotMultiprocess(ConfigReader):
363
364
  del self.data_df
364
365
  del self.roi_analyzer.logger
365
366
  if self.verbose: print(f"Creating ROI images, multiprocessing (chunksize: {self.multiprocess_chunksize}, cores: {self.core_cnt})...")
366
- with multiprocessing.Pool(self.core_cnt, maxtasksperchild=self.maxtasksperchild) as pool:
367
- constants = functools.partial(_roi_plotter_mp,
368
- loc_dict=self.loc_dict,
369
- font_size=self.font_size,
370
- circle_sizes=self.circle_sizes,
371
- save_temp_directory=self.temp_folder,
372
- body_part_dict=self.bp_dict,
373
- input_video_path=self.video_path,
374
- roi_dfs_dict=self.sliced_roi_dict,
375
- roi_dict = self.roi_dict_,
376
- video_shape_names=self.shape_names,
377
- bp_colors=self.color_lst,
378
- show_animal_name=self.show_animal_name,
379
- show_pose=self.show_pose,
380
- animal_ids=self.animal_names,
381
- threshold=self.threshold,
382
- outside_roi=self.outside_roi,
383
- verbose=self.verbose,
384
- border_bg_clr=self.border_bg_clr,
385
- animal_bp_dict=self.animal_bp_dict,
386
- show_bbox=self.show_bbox)
387
-
388
- for cnt, batch_cnt in enumerate(pool.imap(constants, data, chunksize=self.multiprocess_chunksize)):
389
- print(f'Image batch {batch_cnt+1} / {self.core_cnt} complete...')
367
+ self.pool = get_cpu_pool(core_cnt=self.core_cnt, maxtasksperchild=self.maxtasksperchild, source=self.__class__.__name__, verbose=True)
368
+ constants = functools.partial(_roi_plotter_mp,
369
+ loc_dict=self.loc_dict,
370
+ font_size=self.font_size,
371
+ circle_sizes=self.circle_sizes,
372
+ save_temp_directory=self.temp_folder,
373
+ body_part_dict=self.bp_dict,
374
+ input_video_path=self.video_path,
375
+ roi_dfs_dict=self.sliced_roi_dict,
376
+ roi_dict = self.roi_dict_,
377
+ video_shape_names=self.shape_names,
378
+ bp_colors=self.color_lst,
379
+ show_animal_name=self.show_animal_name,
380
+ show_pose=self.show_pose,
381
+ animal_ids=self.animal_names,
382
+ threshold=self.threshold,
383
+ outside_roi=self.outside_roi,
384
+ verbose=self.verbose,
385
+ border_bg_clr=self.border_bg_clr,
386
+ animal_bp_dict=self.animal_bp_dict,
387
+ show_bbox=self.show_bbox)
388
+
389
+ for cnt, batch_cnt in enumerate(self.pool.imap(constants, data, chunksize=self.multiprocess_chunksize)):
390
+ print(f'Image batch {batch_cnt+1} / {self.core_cnt} complete...')
390
391
  print(f"Joining {self.video_name} multi-processed ROI video...")
391
- concatenate_videos_in_folder(in_folder=self.temp_folder, save_path=self.save_path, video_format="mp4", remove_splits=True, gpu=self.gpu)
392
- pool.terminate()
393
- pool.join()
392
+ concatenate_videos_in_folder(in_folder=self.temp_folder, save_path=self.save_path, video_format="mp4", remove_splits=True, gpu=self.gpu)
393
+ terminate_cpu_pool(pool=self.pool, force=False, source=self.__class__.__name__)
394
394
  video_timer.stop_timer()
395
395
  stdout_success(msg=f"Video {self.video_name} created. ROI video saved at {self.save_path}", elapsed_time=video_timer.elapsed_time_str, source=self.__class__.__name__, )
396
396