boris-behav-obs 9.5.2__tar.gz → 9.6.1__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 (123) hide show
  1. {boris_behav_obs-9.5.2/boris_behav_obs.egg-info → boris_behav_obs-9.6.1}/PKG-INFO +1 -1
  2. boris_behav_obs-9.6.1/boris/analysis_plugins/number_of_occurences_by_independent_variable.py +54 -0
  3. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/connections.py +2 -0
  4. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/core_ui.py +5 -1
  5. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/version.py +2 -2
  6. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/video_operations.py +46 -7
  7. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1/boris_behav_obs.egg-info}/PKG-INFO +1 -1
  8. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/pyproject.toml +1 -1
  9. boris_behav_obs-9.5.2/boris/analysis_plugins/number_of_occurences_by_independent_variable.py +0 -34
  10. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/LICENSE.TXT +0 -0
  11. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/MANIFEST.in +0 -0
  12. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/README.TXT +0 -0
  13. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/README.md +0 -0
  14. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/__init__.py +0 -0
  15. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/__main__.py +0 -0
  16. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/about.py +0 -0
  17. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/add_modifier.py +0 -0
  18. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/add_modifier_ui.py +0 -0
  19. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/advanced_event_filtering.py +0 -0
  20. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/analysis_plugins/__init__.py +0 -0
  21. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/analysis_plugins/_latency.py +0 -0
  22. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/analysis_plugins/list_of_dataframe_columns.py +0 -0
  23. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/analysis_plugins/number_of_occurences.py +0 -0
  24. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/analysis_plugins/time_budget.py +0 -0
  25. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/behav_coding_map_creator.py +0 -0
  26. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/behavior_binary_table.py +0 -0
  27. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/behaviors_coding_map.py +0 -0
  28. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/boris_cli.py +0 -0
  29. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/cmd_arguments.py +0 -0
  30. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/coding_pad.py +0 -0
  31. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/config.py +0 -0
  32. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/config_file.py +0 -0
  33. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/converters.py +0 -0
  34. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/converters_ui.py +0 -0
  35. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/cooccurence.py +0 -0
  36. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/core.py +0 -0
  37. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/core_qrc.py +0 -0
  38. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/db_functions.py +0 -0
  39. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/dev.py +0 -0
  40. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/dialog.py +0 -0
  41. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/duration_widget.py +0 -0
  42. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/edit_event.py +0 -0
  43. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/edit_event_ui.py +0 -0
  44. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/event_operations.py +0 -0
  45. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/events_cursor.py +0 -0
  46. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/events_snapshots.py +0 -0
  47. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/exclusion_matrix.py +0 -0
  48. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/export_events.py +0 -0
  49. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/export_observation.py +0 -0
  50. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/external_processes.py +0 -0
  51. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/geometric_measurement.py +0 -0
  52. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/gui_utilities.py +0 -0
  53. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/image_overlay.py +0 -0
  54. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/import_observations.py +0 -0
  55. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/irr.py +0 -0
  56. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/latency.py +0 -0
  57. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/measurement_widget.py +0 -0
  58. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/media_file.py +0 -0
  59. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/menu_options.py +0 -0
  60. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/modifier_coding_map_creator.py +0 -0
  61. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/modifiers_coding_map.py +0 -0
  62. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/mpv-1.0.3.py +0 -0
  63. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/mpv.py +0 -0
  64. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/mpv2.py +0 -0
  65. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/observation.py +0 -0
  66. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/observation_operations.py +0 -0
  67. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/observation_ui.py +0 -0
  68. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/observations_list.py +0 -0
  69. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/otx_parser.py +0 -0
  70. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/param_panel.py +0 -0
  71. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/param_panel_ui.py +0 -0
  72. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/player_dock_widget.py +0 -0
  73. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/plot_data_module.py +0 -0
  74. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/plot_events.py +0 -0
  75. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/plot_events_rt.py +0 -0
  76. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/plot_spectrogram_rt.py +0 -0
  77. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/plot_waveform_rt.py +0 -0
  78. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/plugins.py +0 -0
  79. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/portion/__init__.py +0 -0
  80. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/portion/const.py +0 -0
  81. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/portion/dict.py +0 -0
  82. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/portion/func.py +0 -0
  83. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/portion/interval.py +0 -0
  84. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/portion/io.py +0 -0
  85. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/preferences.py +0 -0
  86. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/preferences_ui.py +0 -0
  87. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/project.py +0 -0
  88. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/project_functions.py +0 -0
  89. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/project_import_export.py +0 -0
  90. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/project_ui.py +0 -0
  91. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/qrc_boris.py +0 -0
  92. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/qrc_boris5.py +0 -0
  93. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/select_modifiers.py +0 -0
  94. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/select_observations.py +0 -0
  95. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/select_subj_behav.py +0 -0
  96. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/state_events.py +0 -0
  97. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/subjects_pad.py +0 -0
  98. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/synthetic_time_budget.py +0 -0
  99. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/time_budget_functions.py +0 -0
  100. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/time_budget_widget.py +0 -0
  101. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/transitions.py +0 -0
  102. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/utilities.py +0 -0
  103. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/video_equalizer.py +0 -0
  104. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/video_equalizer_ui.py +0 -0
  105. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/view_df.py +0 -0
  106. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/view_df_ui.py +0 -0
  107. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris/write_event.py +0 -0
  108. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris_behav_obs.egg-info/SOURCES.txt +0 -0
  109. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris_behav_obs.egg-info/dependency_links.txt +0 -0
  110. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris_behav_obs.egg-info/entry_points.txt +0 -0
  111. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris_behav_obs.egg-info/requires.txt +0 -0
  112. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/boris_behav_obs.egg-info/top_level.txt +0 -0
  113. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/setup.cfg +0 -0
  114. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/tests/test_db_functions.py +0 -0
  115. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/tests/test_export_observation.py +0 -0
  116. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/tests/test_irr.py +0 -0
  117. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/tests/test_observation_gui.py +0 -0
  118. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/tests/test_otx_parser.py +0 -0
  119. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/tests/test_preferences_gui.py +0 -0
  120. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/tests/test_project_functions.py +0 -0
  121. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/tests/test_time_budget.py +0 -0
  122. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/tests/test_utilities.py +0 -0
  123. {boris_behav_obs-9.5.2 → boris_behav_obs-9.6.1}/tests/test_utilities2.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boris-behav-obs
3
- Version: 9.5.2
3
+ Version: 9.6.1
4
4
  Summary: BORIS - Behavioral Observation Research Interactive Software
5
5
  Author-email: Olivier Friard <olivier.friard@unito.it>
6
6
  License-Expression: GPL-3.0-only
@@ -0,0 +1,54 @@
1
+ """
2
+ BORIS plugin
3
+
4
+ number of occurences of behaviors by independent_variable
5
+ """
6
+
7
+ import pandas as pd
8
+
9
+ __version__ = "0.4.0"
10
+ __version_date__ = "2025-07-17"
11
+ __plugin_name__ = "Number of occurences of behaviors by subject by independent_variable"
12
+ __author__ = "Olivier Friard - University of Torino - Italy"
13
+
14
+
15
+ def run(df: pd.DataFrame):
16
+ """
17
+ Calculate the number of occurrences of behaviors by subject and by independent_variable.
18
+
19
+ This plugin returns a Pandas dataframe
20
+ """
21
+
22
+ df_results_list: list = []
23
+
24
+ flag_variable_found = False
25
+
26
+ for column in df.columns:
27
+ if isinstance(column, tuple) or (isinstance(column, str) and not column.startswith("independent variable '")):
28
+ continue
29
+
30
+ flag_variable_found = True
31
+ grouped_df: df.DataFrame = (
32
+ df.groupby(
33
+ [
34
+ column,
35
+ "Subject",
36
+ "Behavior",
37
+ ]
38
+ )["Behavior"]
39
+ .count()
40
+ .reset_index(name="number of occurences")
41
+ )
42
+
43
+ grouped_df.rename(columns={column: "Value"}, inplace=True)
44
+
45
+ grouped_df.insert(0, "independent variable name", column)
46
+
47
+ df_results_list.append(grouped_df)
48
+
49
+ df_results = pd.concat(df_results_list, ignore_index=True) if df_results_list else pd.DataFrame([])
50
+
51
+ if not flag_variable_found:
52
+ return "No independent variable found"
53
+ else:
54
+ return df_results
@@ -166,8 +166,10 @@ def connections(self):
166
166
  # menu playback
167
167
  self.actionJumpTo.triggered.connect(self.jump_to)
168
168
  self.action_deinterlace.triggered.connect(lambda: video_operations.deinterlace(self))
169
+ self.action_change_time_offset_of_players.triggered.connect(lambda: video_operations.change_player_offset(self))
169
170
  self.actionZoom_level.triggered.connect(lambda: video_operations.zoom_level(self))
170
171
  self.actionRotate_current_video.triggered.connect(lambda: video_operations.rotate_displayed_video(self))
172
+
171
173
  self.actionDisplay_subtitles.triggered.connect(lambda: video_operations.display_subtitles(self))
172
174
  self.actionVideo_equalizer.triggered.connect(lambda: video_equalizer.video_equalizer_show(self))
173
175
 
@@ -380,6 +380,8 @@ class Ui_MainWindow(object):
380
380
  self.action_load_plugins.setObjectName(u"action_load_plugins")
381
381
  self.actionCreate_video_spectrogram = QAction(MainWindow)
382
382
  self.actionCreate_video_spectrogram.setObjectName(u"actionCreate_video_spectrogram")
383
+ self.action_change_time_offset_of_players = QAction(MainWindow)
384
+ self.action_change_time_offset_of_players.setObjectName(u"action_change_time_offset_of_players")
383
385
  self.centralwidget = QWidget(MainWindow)
384
386
  self.centralwidget.setObjectName(u"centralwidget")
385
387
  self.horizontalLayout_2 = QHBoxLayout(self.centralwidget)
@@ -486,7 +488,7 @@ class Ui_MainWindow(object):
486
488
  MainWindow.setCentralWidget(self.centralwidget)
487
489
  self.menubar = QMenuBar(MainWindow)
488
490
  self.menubar.setObjectName(u"menubar")
489
- self.menubar.setGeometry(QRect(0, 0, 1509, 20))
491
+ self.menubar.setGeometry(QRect(0, 0, 1509, 25))
490
492
  self.menuHelp = QMenu(self.menubar)
491
493
  self.menuHelp.setObjectName(u"menuHelp")
492
494
  self.menuFile = QMenu(self.menubar)
@@ -743,6 +745,7 @@ class Ui_MainWindow(object):
743
745
  self.menuPlayback.addAction(self.actionJumpForward)
744
746
  self.menuPlayback.addAction(self.actionJumpBackward)
745
747
  self.menuPlayback.addAction(self.actionJumpTo)
748
+ self.menuPlayback.addAction(self.action_change_time_offset_of_players)
746
749
  self.menuPlayback.addAction(self.action_deinterlace)
747
750
  self.menuPlayback.addSeparator()
748
751
  self.menuPlayback.addAction(self.actionZoom_level)
@@ -1033,6 +1036,7 @@ class Ui_MainWindow(object):
1033
1036
  self.actionAdd_frame_indexes.setText(QCoreApplication.translate("MainWindow", u"Add frame indexes", None))
1034
1037
  self.action_load_plugins.setText(QCoreApplication.translate("MainWindow", u"Load plugins", None))
1035
1038
  self.actionCreate_video_spectrogram.setText(QCoreApplication.translate("MainWindow", u"Create video spectrogram", None))
1039
+ self.action_change_time_offset_of_players.setText(QCoreApplication.translate("MainWindow", u"Change time offset of players", None))
1036
1040
  self.lbLogoBoris.setText("")
1037
1041
  self.lbLogoUnito.setText("")
1038
1042
  self.lb_player_status.setText(QCoreApplication.translate("MainWindow", u"lb_player_status", None))
@@ -20,5 +20,5 @@ This file is part of BORIS.
20
20
 
21
21
  """
22
22
 
23
- __version__ = "9.5.2"
24
- __version_date__ = "2025-07-15"
23
+ __version__ = "9.6.1"
24
+ __version_date__ = "2025-07-17"
@@ -87,13 +87,6 @@ def zoom_level(self):
87
87
  for idx, dw in enumerate(self.dw_player):
88
88
  players_list.append(("dsb", f"Player #{idx + 1}", 0.1, 12, 0.1, 2**dw.player.video_zoom, 1))
89
89
 
90
- """
91
- zoom_levels: list = []
92
- for choice in (2, 1, 0.5, 0.25):
93
- zoom_levels.append((str(choice), "selected" if log2(choice) == dw.player.video_zoom else ""))
94
- players_list.append(("il", f"Player #{idx + 1}", zoom_levels))
95
- """
96
-
97
90
  zl = dialog.Input_dialog(label_caption="Select the zoom level", elements_list=players_list, title="Video zoom level")
98
91
  if not zl.exec_():
99
92
  return
@@ -117,6 +110,52 @@ def zoom_level(self):
117
110
  self.project_changed()
118
111
 
119
112
 
113
+ def change_player_offset(self):
114
+ """
115
+ display dialog box for setting the player time offset
116
+ """
117
+ logging.info("change the player time offset")
118
+
119
+ if cfg.OFFSET not in self.pj[cfg.OBSERVATIONS][self.observationId][cfg.MEDIA_INFO]:
120
+ self.pj[cfg.OBSERVATIONS][self.observationId][cfg.MEDIA_INFO][cfg.OFFSET] = {}
121
+
122
+ players_list: list = []
123
+
124
+ for idx, dw in enumerate(self.dw_player):
125
+ players_list.append(
126
+ (
127
+ "dsb",
128
+ f"Player #{idx + 1}",
129
+ -100000,
130
+ 100000,
131
+ 0.001,
132
+ self.pj[cfg.OBSERVATIONS][self.observationId][cfg.MEDIA_INFO][cfg.OFFSET][str(idx + 1)],
133
+ 3,
134
+ )
135
+ )
136
+
137
+ zl = dialog.Input_dialog(label_caption="Select the time offset", elements_list=players_list, title="Time offset")
138
+ if not zl.exec_():
139
+ return
140
+
141
+ for idx, dw in enumerate(self.dw_player):
142
+ if (
143
+ self.pj[cfg.OBSERVATIONS][self.observationId][cfg.MEDIA_INFO][cfg.OFFSET].get(str(idx + 1), 0)
144
+ != zl.elements[f"Player #{idx + 1}"].value()
145
+ ):
146
+ logging.debug(f"time offset of player changed in {zl.elements[f'Player #{idx + 1}'].value()} for player {idx + 1}")
147
+
148
+ self.pj[cfg.OBSERVATIONS][self.observationId][cfg.MEDIA_INFO][cfg.OFFSET][str(idx + 1)] = float(
149
+ zl.elements[f"Player #{idx + 1}"].value()
150
+ )
151
+
152
+ if self.dw_player[0].player.time_pos is not None:
153
+ cumulative_time_pos = self.getLaps() # for player 1
154
+ self.sync_time(idx, cumulative_time_pos)
155
+
156
+ self.project_changed()
157
+
158
+
120
159
  def rotate_displayed_video(self):
121
160
  """
122
161
  rotate the displayed video
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: boris-behav-obs
3
- Version: 9.5.2
3
+ Version: 9.6.1
4
4
  Summary: BORIS - Behavioral Observation Research Interactive Software
5
5
  Author-email: Olivier Friard <olivier.friard@unito.it>
6
6
  License-Expression: GPL-3.0-only
@@ -1,6 +1,6 @@
1
1
  [project]
2
2
  name = "boris-behav-obs"
3
- version = "9.5.2"
3
+ version = "9.6.1"
4
4
  description = "BORIS - Behavioral Observation Research Interactive Software"
5
5
  authors = [{ name="Olivier Friard", email="olivier.friard@unito.it" }]
6
6
  readme = "README.md"
@@ -1,34 +0,0 @@
1
- """
2
- BORIS plugin
3
-
4
- number of occurences of behaviors by independent_variable
5
- """
6
-
7
- import pandas as pd
8
-
9
- __version__ = "0.3.0"
10
- __version_date__ = "2025-03-17"
11
- __plugin_name__ = "Number of occurences of behaviors by subject by independent_variable"
12
- __author__ = "Olivier Friard - University of Torino - Italy"
13
-
14
-
15
- def run(df: pd.DataFrame):
16
- """
17
- Calculate the number of occurrences of behaviors by subject and by independent_variable.
18
-
19
- This plugin returns a Pandas dataframe
20
- """
21
-
22
- df_results: df.DataFrame = (
23
- df.groupby(
24
- [
25
- "independent variable 'Weather'",
26
- "Subject",
27
- "Behavior",
28
- ]
29
- )["Behavior"]
30
- .count()
31
- .reset_index(name="number of occurences")
32
- )
33
-
34
- return df_results