boris-behav-obs 9.0.2__tar.gz → 9.0.5__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 (119) hide show
  1. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/PKG-INFO +1 -1
  2. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/__init__.py +1 -1
  3. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/__main__.py +1 -1
  4. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/about.py +2 -2
  5. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/add_modifier.py +1 -1
  6. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/add_modifier_ui.py +22 -22
  7. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/advanced_event_filtering.py +1 -1
  8. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/analysis_plugins/number_of_occurences.py +6 -3
  9. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/analysis_plugins/number_of_occurences_by_independent_variable.py +6 -4
  10. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/analysis_plugins/time_budget.py +24 -14
  11. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/behav_coding_map_creator.py +1 -1
  12. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/behavior_binary_table.py +1 -1
  13. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/behaviors_coding_map.py +1 -1
  14. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/boris_cli.py +1 -1
  15. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/cmd_arguments.py +1 -1
  16. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/coding_pad.py +1 -1
  17. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/config.py +16 -9
  18. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/config_file.py +1 -1
  19. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/connections.py +1 -1
  20. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/converters.py +1 -1
  21. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/cooccurence.py +1 -1
  22. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/core.py +144 -176
  23. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/db_functions.py +1 -1
  24. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/dialog.py +10 -277
  25. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/edit_event.py +8 -1
  26. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/event_operations.py +1 -1
  27. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/events_cursor.py +1 -1
  28. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/events_snapshots.py +1 -1
  29. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/exclusion_matrix.py +1 -1
  30. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/export_events.py +1 -1
  31. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/export_observation.py +1 -1
  32. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/external_processes.py +1 -1
  33. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/geometric_measurement.py +1 -1
  34. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/gui_utilities.py +1 -1
  35. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/image_overlay.py +1 -1
  36. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/import_observations.py +1 -1
  37. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/irr.py +1 -1
  38. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/latency.py +1 -1
  39. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/map_creator.py +1 -1
  40. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/measurement_widget.py +1 -1
  41. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/media_file.py +1 -1
  42. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/menu_options.py +1 -1
  43. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/modifiers_coding_map.py +1 -1
  44. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/observation.py +1 -1
  45. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/observation_operations.py +530 -425
  46. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/observations_list.py +3 -3
  47. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/otx_parser.py +1 -1
  48. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/param_panel.py +1 -1
  49. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/player_dock_widget.py +13 -9
  50. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/plot_data_module.py +1 -1
  51. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/plot_events.py +1 -1
  52. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/plot_events_rt.py +1 -1
  53. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/plot_spectrogram_rt.py +1 -1
  54. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/plot_waveform_rt.py +1 -1
  55. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/plugins.py +2 -2
  56. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/preferences.py +6 -1
  57. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/preferences_ui.py +7 -1
  58. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/project.py +1 -1
  59. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/project_functions.py +73 -76
  60. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/project_import_export.py +1 -1
  61. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/select_modifiers.py +1 -1
  62. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/select_observations.py +6 -6
  63. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/select_subj_behav.py +1 -1
  64. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/state_events.py +1 -1
  65. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/subjects_pad.py +1 -1
  66. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/synthetic_time_budget.py +1 -1
  67. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/time_budget_functions.py +1 -1
  68. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/time_budget_widget.py +5 -5
  69. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/transitions.py +1 -1
  70. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/utilities.py +1 -1
  71. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/version.py +3 -3
  72. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/video_equalizer.py +1 -1
  73. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/video_operations.py +1 -1
  74. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/write_event.py +1 -1
  75. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris_behav_obs.egg-info/PKG-INFO +1 -1
  76. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/pyproject.toml +2 -2
  77. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/LICENSE.TXT +0 -0
  78. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/MANIFEST.in +0 -0
  79. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/README.TXT +0 -0
  80. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/README.md +0 -0
  81. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/analysis_plugins/__init__.py +0 -0
  82. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/converters_ui.py +0 -0
  83. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/core_qrc.py +0 -0
  84. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/core_ui.py +0 -0
  85. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/dev.py +0 -0
  86. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/duration_widget.py +0 -0
  87. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/edit_event_ui.py +0 -0
  88. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/mpv-1.0.3.py +0 -0
  89. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/mpv.py +0 -0
  90. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/mpv2.py +0 -0
  91. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/observation_ui.py +0 -0
  92. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/param_panel_ui.py +0 -0
  93. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/portion/__init__.py +0 -0
  94. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/portion/const.py +0 -0
  95. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/portion/dict.py +0 -0
  96. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/portion/func.py +0 -0
  97. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/portion/interval.py +0 -0
  98. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/portion/io.py +0 -0
  99. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/project_ui.py +0 -0
  100. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/qrc_boris.py +0 -0
  101. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/qrc_boris5.py +0 -0
  102. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/video_equalizer_ui.py +0 -0
  103. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/view_df.py +0 -0
  104. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris/view_df_ui.py +0 -0
  105. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris_behav_obs.egg-info/SOURCES.txt +0 -0
  106. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris_behav_obs.egg-info/dependency_links.txt +0 -0
  107. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris_behav_obs.egg-info/entry_points.txt +0 -0
  108. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris_behav_obs.egg-info/requires.txt +0 -0
  109. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/boris_behav_obs.egg-info/top_level.txt +0 -0
  110. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/setup.cfg +0 -0
  111. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/tests/test_db_functions.py +0 -0
  112. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/tests/test_export_observation.py +0 -0
  113. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/tests/test_irr.py +0 -0
  114. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/tests/test_observation_gui.py +0 -0
  115. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/tests/test_otx_parser.py +0 -0
  116. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/tests/test_preferences_gui.py +0 -0
  117. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/tests/test_project_functions.py +0 -0
  118. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/tests/test_time_budget.py +0 -0
  119. {boris_behav_obs-9.0.2 → boris_behav_obs-9.0.5}/tests/test_utilities.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: boris-behav-obs
3
- Version: 9.0.2
3
+ Version: 9.0.5
4
4
  Summary: BORIS - Behavioral Observation Research Interactive Software
5
5
  Author-email: Olivier Friard <olivier.friard@unito.it>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -2,7 +2,7 @@
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
4
 
5
- Copyright 2012-2024 Olivier Friard
5
+ Copyright 2012-2025 Olivier Friard
6
6
 
7
7
  This file is part of BORIS.
8
8
 
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This program is free software; you can redistribute it and/or modify
7
7
  it under the terms of the GNU General Public License as published by
@@ -93,7 +93,7 @@ def actionAbout_activated(self):
93
93
  about_dialog.setInformativeText(
94
94
  (
95
95
  f"<b>{cfg.programName}</b> v. {version.__version__} - {version.__version_date__}"
96
- "<p>Copyright &copy; 2012-2024 Olivier Friard - Marco Gamba<br>"
96
+ "<p>Copyright &copy; 2012-2025 Olivier Friard - Marco Gamba<br>"
97
97
  "Department of Life Sciences and Systems Biology<br>"
98
98
  "University of Torino - Italy<br>"
99
99
  "<br>"
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
@@ -95,9 +95,9 @@ class Ui_Dialog(object):
95
95
  self.tabWidgetModifiersSets = QTabWidget(Dialog)
96
96
  self.tabWidgetModifiersSets.setObjectName(u"tabWidgetModifiersSets")
97
97
  self.tabWidgetModifiersSets.setMaximumSize(QSize(16777215, 30))
98
- self.tabWidgetModifiersSets.setTabPosition(QTabWidget.North)
99
- self.tabWidgetModifiersSets.setTabShape(QTabWidget.Rounded)
100
- self.tabWidgetModifiersSets.setElideMode(Qt.ElideNone)
98
+ self.tabWidgetModifiersSets.setTabPosition(QTabWidget.TabPosition.North)
99
+ self.tabWidgetModifiersSets.setTabShape(QTabWidget.TabShape.Rounded)
100
+ self.tabWidgetModifiersSets.setElideMode(Qt.TextElideMode.ElideNone)
101
101
  self.tabWidgetModifiersSets.setDocumentMode(True)
102
102
 
103
103
  self.verticalLayout.addWidget(self.tabWidgetModifiersSets)
@@ -158,6 +158,11 @@ class Ui_Dialog(object):
158
158
 
159
159
  self.horizontalLayout.addWidget(self.pbMoveDown)
160
160
 
161
+ self.pb_sort_modifiers = QPushButton(Dialog)
162
+ self.pb_sort_modifiers.setObjectName(u"pb_sort_modifiers")
163
+
164
+ self.horizontalLayout.addWidget(self.pb_sort_modifiers)
165
+
161
166
  self.pbRemoveModifier = QPushButton(Dialog)
162
167
  self.pbRemoveModifier.setObjectName(u"pbRemoveModifier")
163
168
 
@@ -166,11 +171,6 @@ class Ui_Dialog(object):
166
171
 
167
172
  self.verticalLayout.addLayout(self.horizontalLayout)
168
173
 
169
- self.pb_sort_modifiers = QPushButton(Dialog)
170
- self.pb_sort_modifiers.setObjectName(u"pb_sort_modifiers")
171
-
172
- self.verticalLayout.addWidget(self.pb_sort_modifiers)
173
-
174
174
  self.horizontalLayout_3 = QHBoxLayout()
175
175
  self.horizontalLayout_3.setObjectName(u"horizontalLayout_3")
176
176
  self.pbAddSet = QPushButton(Dialog)
@@ -178,6 +178,16 @@ class Ui_Dialog(object):
178
178
 
179
179
  self.horizontalLayout_3.addWidget(self.pbAddSet)
180
180
 
181
+ self.pbMoveSetLeft = QPushButton(Dialog)
182
+ self.pbMoveSetLeft.setObjectName(u"pbMoveSetLeft")
183
+
184
+ self.horizontalLayout_3.addWidget(self.pbMoveSetLeft)
185
+
186
+ self.pbMoveSetRight = QPushButton(Dialog)
187
+ self.pbMoveSetRight.setObjectName(u"pbMoveSetRight")
188
+
189
+ self.horizontalLayout_3.addWidget(self.pbMoveSetRight)
190
+
181
191
  self.pbRemoveSet = QPushButton(Dialog)
182
192
  self.pbRemoveSet.setObjectName(u"pbRemoveSet")
183
193
 
@@ -188,16 +198,6 @@ class Ui_Dialog(object):
188
198
 
189
199
  self.horizontalLayout_4 = QHBoxLayout()
190
200
  self.horizontalLayout_4.setObjectName(u"horizontalLayout_4")
191
- self.pbMoveSetLeft = QPushButton(Dialog)
192
- self.pbMoveSetLeft.setObjectName(u"pbMoveSetLeft")
193
-
194
- self.horizontalLayout_4.addWidget(self.pbMoveSetLeft)
195
-
196
- self.pbMoveSetRight = QPushButton(Dialog)
197
- self.pbMoveSetRight.setObjectName(u"pbMoveSetRight")
198
-
199
- self.horizontalLayout_4.addWidget(self.pbMoveSetRight)
200
-
201
201
 
202
202
  self.verticalLayout.addLayout(self.horizontalLayout_4)
203
203
 
@@ -258,8 +258,8 @@ class Ui_Dialog(object):
258
258
  self.lbModifier.setText(QCoreApplication.translate("Dialog", u"Modifier", None))
259
259
  self.lbCode.setText(QCoreApplication.translate("Dialog", u"Key code", None))
260
260
  self.lbCodeHelp.setText(QCoreApplication.translate("Dialog", u"Key code is case sensitive. Type one character or a function key (F1, F2... F12)", None))
261
- self.pbAddModifier.setText("")
262
- self.pbModifyModifier.setText("")
261
+ self.pbAddModifier.setText(QCoreApplication.translate("Dialog", u"->", None))
262
+ self.pbModifyModifier.setText(QCoreApplication.translate("Dialog", u"<-", None))
263
263
  self.lb_name.setText(QCoreApplication.translate("Dialog", u"Set name", None))
264
264
  self.lb_description.setText(QCoreApplication.translate("Dialog", u"Description", None))
265
265
  self.lbType.setText(QCoreApplication.translate("Dialog", u"Modifier type", None))
@@ -271,12 +271,12 @@ class Ui_Dialog(object):
271
271
  self.lbValues.setText(QCoreApplication.translate("Dialog", u"Values", None))
272
272
  self.pbMoveUp.setText(QCoreApplication.translate("Dialog", u"Move modifier up", None))
273
273
  self.pbMoveDown.setText(QCoreApplication.translate("Dialog", u"Move modifier down", None))
274
- self.pbRemoveModifier.setText(QCoreApplication.translate("Dialog", u"Remove modifier", None))
275
274
  self.pb_sort_modifiers.setText(QCoreApplication.translate("Dialog", u"Sort modifiers", None))
275
+ self.pbRemoveModifier.setText(QCoreApplication.translate("Dialog", u"Remove modifier", None))
276
276
  self.pbAddSet.setText(QCoreApplication.translate("Dialog", u"Add set of modifiers", None))
277
- self.pbRemoveSet.setText(QCoreApplication.translate("Dialog", u"Remove set of modifiers", None))
278
277
  self.pbMoveSetLeft.setText(QCoreApplication.translate("Dialog", u"Move set left", None))
279
278
  self.pbMoveSetRight.setText(QCoreApplication.translate("Dialog", u"Move set right", None))
279
+ self.pbRemoveSet.setText(QCoreApplication.translate("Dialog", u"Remove set of modifiers", None))
280
280
  self.pb_add_subjects.setText(QCoreApplication.translate("Dialog", u"Add subjects as modifiers", None))
281
281
  self.pb_load_file.setText(QCoreApplication.translate("Dialog", u"Load modifiers from file", None))
282
282
  self.pbCancel.setText(QCoreApplication.translate("Dialog", u"Cancel", None))
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This program is free software; you can redistribute it and/or modify
7
7
  it under the terms of the GNU General Public License as published by
@@ -6,8 +6,8 @@ number of occurences of behaviors
6
6
 
7
7
  import pandas as pd
8
8
 
9
- __version__ = "0.1.0"
10
- __version_date__ = "2024-11-14"
9
+ __version__ = "0.2.0"
10
+ __version_date__ = "2025-01-25"
11
11
  __plugin_name__ = "Number of occurences of behaviors"
12
12
  __author__ = "Olivier Friard - University of Torino - Italy"
13
13
 
@@ -17,7 +17,10 @@ def run(df: pd.DataFrame):
17
17
  Calculate the number of occurrences of behaviors by subject.
18
18
  """
19
19
 
20
- return df.groupby(["Subject", "Behavior"])["Behavior"].count().reset_index(name="number of occurences")
20
+ string_results: str = ""
21
+ df_results: pd.DataFrame = df.groupby(["Subject", "Behavior"])["Behavior"].count().reset_index(name="number of occurences")
22
+
23
+ return df_results, string_results
21
24
 
22
25
 
23
26
  def main(df: pd.DataFrame, observations_list: list = [], parameters: dict = {}) -> pd.DataFrame:
@@ -6,8 +6,8 @@ number of occurences of behaviors by independent_variable
6
6
 
7
7
  import pandas as pd
8
8
 
9
- __version__ = "0.1.0"
10
- __version_date__ = "2024-11-14"
9
+ __version__ = "0.2.0"
10
+ __version_date__ = "2025-01-25"
11
11
  __plugin_name__ = "Number of occurences of behaviors by subject by independent_variable"
12
12
  __author__ = "Olivier Friard - University of Torino - Italy"
13
13
 
@@ -17,7 +17,9 @@ def run(df: pd.DataFrame):
17
17
  Calculate the number of occurrences of behaviors by subject and by independent_variable.
18
18
  """
19
19
 
20
- results = (
20
+ str_results: str = ""
21
+
22
+ df_results: df.DataFrame = (
21
23
  df.groupby(
22
24
  [
23
25
  "independent variable 'Weather'",
@@ -29,7 +31,7 @@ def run(df: pd.DataFrame):
29
31
  .reset_index(name="number of occurences")
30
32
  )
31
33
 
32
- return results
34
+ return df_results, str_results
33
35
 
34
36
 
35
37
  def main(df: pd.DataFrame, observations_list: list = [], parameters: dict = {}) -> pd.DataFrame:
@@ -1,11 +1,14 @@
1
1
  """
2
2
  BORIS plugin
3
+
4
+ Time budget
3
5
  """
4
6
 
5
7
  import pandas as pd
8
+ import numpy as np
6
9
 
7
- __version__ = "0.1.0"
8
- __version_date__ = "2024-11-14"
10
+ __version__ = "0.2.0"
11
+ __version_date__ = "2025-01-25"
9
12
  __plugin_name__ = "Time budget"
10
13
  __author__ = "Olivier Friard - University of Torino - Italy"
11
14
 
@@ -20,37 +23,44 @@ def run(df: pd.DataFrame):
20
23
  - Standard deviation of behavior duration (in seconds)
21
24
  - Inter-event intervals mean (in seconds)
22
25
  - Inter-event intervals standard deviation (in seconds)
23
- - % of total duration
26
+ - % of total subject observation duration
24
27
  """
25
28
 
29
+ string_results: str = "test\ntest1"
30
+
31
+ group_by = ["Subject", "Behavior"]
32
+
26
33
  dfs = [
27
- df.groupby(["Subject", "Behavior"])["Behavior"].count().reset_index(name="number of occurences"),
28
- df.groupby(["Subject", "Behavior"])["Duration (s)"].sum().reset_index(name="total duration"),
29
- df.groupby(["Subject", "Behavior"])["Duration (s)"].mean().astype(float).round(3).reset_index(name="duration mean"),
30
- df.groupby(["Subject", "Behavior"])["Duration (s)"].std().astype(float).round(3).reset_index(name="duration std dev"),
34
+ df.groupby(group_by)["Behavior"].count().reset_index(name="number of occurences"),
35
+ df.groupby(group_by)["Duration (s)"].sum().reset_index(name="total duration"),
36
+ df.groupby(group_by)["Duration (s)"].mean().astype(float).round(3).reset_index(name="duration mean"),
37
+ df.groupby(group_by)["Duration (s)"].std().astype(float).round(3).reset_index(name="duration std dev"),
31
38
  ]
32
39
 
33
40
  # inter events
34
41
  df2 = df.sort_values(by=["Observation id", "Subject", "Behavior", "Start (s)"])
35
42
  df2["diff"] = df2.groupby(["Observation id", "Subject", "Behavior"])["Start (s)"].shift(periods=-1) - df2["Stop (s)"]
36
43
 
37
- dfs.append(df2.groupby(["Subject", "Behavior"])["diff"].mean().astype(float).round(3).reset_index(name="inter-event intervals mean"))
44
+ dfs.append(df2.groupby(group_by)["diff"].mean().astype(float).round(3).reset_index(name="inter-event intervals mean"))
45
+
46
+ dfs.append(df2.groupby(group_by)["diff"].std().astype(float).round(3).reset_index(name="inter-event intervals std dev"))
47
+
48
+ # % of total subject observation time
38
49
 
39
- dfs.append(df2.groupby(["Subject", "Behavior"])["diff"].std().astype(float).round(3).reset_index(name="inter-event intervals std dev"))
50
+ interval = (df.groupby(["Subject"])["Stop (s)"].max() - df.groupby(["Subject"])["Start (s)"].min()).replace(0, np.nan)
40
51
 
41
- # % of time
42
52
  dfs.append(
43
- (100 * df.groupby(["Subject", "Behavior"])["Duration (s)"].sum() / df.groupby(["Subject"])["Duration (s)"].sum())
53
+ (100 * df.groupby(group_by)["Duration (s)"].sum() / interval)
44
54
  .astype(float)
45
55
  .round(3)
46
- .reset_index(name="% of total duration")
56
+ .reset_index(name="% of total subject observation duration")
47
57
  )
48
58
 
49
59
  merged_df = dfs[0]
50
60
  for df in dfs[1:]:
51
- merged_df = pd.merge(merged_df, df, on=["Subject", "Behavior"])
61
+ merged_df = pd.merge(merged_df, df, on=group_by)
52
62
 
53
- return merged_df
63
+ return merged_df, string_results
54
64
 
55
65
 
56
66
  def main(df: pd.DataFrame, observations_list: list = [], parameters: dict = {}) -> pd.DataFrame:
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This program is free software; you can redistribute it and/or modify
7
7
  it under the terms of the GNU General Public License as published by
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
@@ -3,7 +3,7 @@ BORIS CLI
3
3
 
4
4
  Behavioral Observation Research Interactive Software Command Line Interface
5
5
 
6
- Copyright 2012-2024 Olivier Friard
6
+ Copyright 2012-2025 Olivier Friard
7
7
 
8
8
  This program is free software; you can redistribute it and/or modify
9
9
  it under the terms of the GNU General Public License as published by
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
 
7
7
  This program is free software; you can redistribute it and/or modify
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This program is free software; you can redistribute it and/or modify
7
7
  it under the terms of the GNU General Public License as published by
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
@@ -22,6 +22,10 @@ This file is part of BORIS.
22
22
 
23
23
  programName: str = "BORIS"
24
24
 
25
+ MACOS_CODE = "darwin"
26
+ MPV_SOCKET = "/tmp/mpvsocket"
27
+
28
+
25
29
  ETHOGRAM_REPOSITORY_URL = "https://www.boris.unito.it/static/ethograms"
26
30
 
27
31
  project_format_version: str = "7.0"
@@ -130,11 +134,21 @@ CHAR_FORBIDDEN_IN_MODIFIERS = "(|),`~"
130
134
  ADAPT_FAST_JUMP = "adapt_fast_jump"
131
135
  ADAPT_FAST_JUMP_DEFAULT = False
132
136
 
137
+ TIME = "time"
138
+ BEHAVIOR_CODE = "code"
139
+ SUBJECT = "subject"
140
+ MODIFIER = "modifier"
141
+ COMMENT = "comment"
142
+ BEHAVIOR_KEY = "key"
143
+ SUBJECT_KEY = "key"
144
+ BEHAVIOR_CATEGORY = "category"
133
145
 
134
- subjectsFields = ["key", SUBJECT_NAME, DESCRIPTION]
146
+
147
+ subjectsFields = [SUBJECT_KEY, SUBJECT_NAME, DESCRIPTION]
135
148
 
136
149
  UNPAIRED = "UNPAIRED"
137
150
  DISPLAY_SUBTITLES = "display_subtitles"
151
+ CHECK_PROJECT_INTEGRITY = "check_project_integrity"
138
152
 
139
153
 
140
154
  YES = "Yes"
@@ -186,13 +200,6 @@ DATA_PLOT_FIELDS = {
186
200
  }
187
201
  DATA_PLOT_STYLES = ["b-", "r-", "g-", "bo", "ro", "go"]
188
202
 
189
- TIME = "time"
190
- BEHAVIOR_CODE = "code"
191
- SUBJECT = "subject"
192
- MODIFIER = "modifier"
193
- COMMENT = "comment"
194
- BEHAVIOR_KEY = "key"
195
- BEHAVIOR_CATEGORY = "category"
196
203
 
197
204
  FILE_PATH = "file_path"
198
205
 
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This program is free software; you can redistribute it and/or modify
7
7
  it under the terms of the GNU General Public License as published by
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This program is free software; you can redistribute it and/or modify
7
7
  it under the terms of the GNU General Public License as published by