boris-behav-obs 9.7.15__py3-none-any.whl → 9.8.2__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.
- boris/__init__.py +1 -1
- boris/__main__.py +1 -1
- boris/about.py +4 -3
- boris/add_modifier.py +1 -1
- boris/advanced_event_filtering.py +1 -1
- boris/analysis_plugins/irr_weighted_cohen_kappa.py +2 -2
- boris/behav_coding_map_creator.py +1 -1
- boris/behavior_binary_table.py +1 -1
- boris/behaviors_coding_map.py +1 -1
- boris/boris_cli.py +1 -1
- boris/cmd_arguments.py +1 -1
- boris/coding_pad.py +1 -1
- boris/config.py +10 -1
- boris/config_file.py +18 -19
- boris/connections.py +12 -13
- boris/converters.py +1 -1
- boris/cooccurence.py +1 -1
- boris/core.py +41 -42
- boris/core_qrc.py +1830 -1967
- boris/core_ui.py +1 -1
- boris/db_functions.py +5 -14
- boris/dialog.py +24 -24
- boris/edit_event.py +1 -1
- boris/event_operations.py +1 -1
- boris/events_cursor.py +1 -1
- boris/events_snapshots.py +133 -78
- boris/exclusion_matrix.py +1 -1
- boris/export_events.py +49 -43
- boris/export_observation.py +1 -1
- boris/external_processes.py +1 -1
- boris/geometric_measurement.py +1 -1
- boris/gui_utilities.py +1 -1
- boris/image_overlay.py +1 -1
- boris/import_observations.py +1 -1
- boris/ipc_mpv.py +1 -1
- boris/irr.py +1 -1
- boris/latency.py +1 -1
- boris/measurement_widget.py +1 -1
- boris/media_file.py +1 -1
- boris/menu_options.py +14 -12
- boris/modifier_coding_map_creator.py +1 -1
- boris/modifiers_coding_map.py +1 -1
- boris/observation.py +13 -14
- boris/observation_operations.py +1 -1
- boris/observations_list.py +1 -1
- boris/otx_parser.py +1 -1
- boris/param_panel.py +1 -1
- boris/player_dock_widget.py +1 -1
- boris/plot_data_module.py +1 -1
- boris/plot_events.py +1 -1
- boris/plot_events_rt.py +1 -1
- boris/plot_spectrogram_rt.py +2 -2
- boris/plot_waveform_rt.py +1 -1
- boris/plugins.py +1 -1
- boris/preferences.py +1 -1
- boris/project.py +1 -1
- boris/project_functions.py +12 -12
- boris/project_import_export.py +1 -1
- boris/select_modifiers.py +1 -1
- boris/select_observations.py +22 -23
- boris/select_subj_behav.py +4 -4
- boris/state_events.py +1 -1
- boris/subjects_pad.py +1 -1
- boris/synthetic_time_budget.py +1 -1
- boris/time_budget_functions.py +1 -1
- boris/time_budget_widget.py +1 -1
- boris/transitions.py +1 -1
- boris/utilities.py +1 -1
- boris/version.py +3 -3
- boris/video_equalizer.py +1 -1
- boris/video_operations.py +1 -1
- boris/view_df.py +28 -4
- boris/write_event.py +1 -1
- {boris_behav_obs-9.7.15.dist-info → boris_behav_obs-9.8.2.dist-info}/METADATA +2 -2
- boris_behav_obs-9.8.2.dist-info/RECORD +110 -0
- {boris_behav_obs-9.7.15.dist-info → boris_behav_obs-9.8.2.dist-info}/WHEEL +1 -1
- boris_behav_obs-9.7.15.dist-info/RECORD +0 -110
- {boris_behav_obs-9.7.15.dist-info → boris_behav_obs-9.8.2.dist-info}/entry_points.txt +0 -0
- {boris_behav_obs-9.7.15.dist-info → boris_behav_obs-9.8.2.dist-info}/licenses/LICENSE.TXT +0 -0
- {boris_behav_obs-9.7.15.dist-info → boris_behav_obs-9.8.2.dist-info}/top_level.txt +0 -0
boris/__init__.py
CHANGED
boris/__main__.py
CHANGED
boris/about.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
BORIS
|
|
3
3
|
Behavioral Observation Research Interactive Software
|
|
4
|
-
Copyright 2012-
|
|
4
|
+
Copyright 2012-2026 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
|
|
@@ -80,7 +80,8 @@ def actionAbout_activated(self):
|
|
|
80
80
|
programs_versions.extend(["\nGraphViz", gv_result if "graphviz" in gv_result else "not installed", "https://www.graphviz.org/"])
|
|
81
81
|
|
|
82
82
|
about_dialog: QMessageBox = QMessageBox()
|
|
83
|
-
about_dialog.setIconPixmap(QPixmap(":/boris_unito"))
|
|
83
|
+
# about_dialog.setIconPixmap(QPixmap(":/boris_unito"))
|
|
84
|
+
about_dialog.setIconPixmap(QPixmap(":/dbios_unito"))
|
|
84
85
|
|
|
85
86
|
about_dialog.setWindowTitle(f"About {cfg.programName}")
|
|
86
87
|
about_dialog.setStandardButtons(QMessageBox.Ok)
|
|
@@ -90,7 +91,7 @@ def actionAbout_activated(self):
|
|
|
90
91
|
about_dialog.setInformativeText(
|
|
91
92
|
(
|
|
92
93
|
f"<b>{cfg.programName}</b> v. {version.__version__} - {version.__version_date__}"
|
|
93
|
-
"<p>Copyright © 2012-
|
|
94
|
+
"<p>Copyright © 2012-2026 Olivier Friard - Marco Gamba<br>"
|
|
94
95
|
"Department of Life Sciences and Systems Biology<br>"
|
|
95
96
|
"University of Torino - Italy<br>"
|
|
96
97
|
"<br>"
|
boris/add_modifier.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
BORIS
|
|
3
3
|
Behavioral Observation Research Interactive Software
|
|
4
|
-
Copyright 2012-
|
|
4
|
+
Copyright 2012-2026 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
|
|
@@ -4,9 +4,9 @@ BORIS plugin
|
|
|
4
4
|
Inter Rater Reliability (IRR) Weighted Cohen's Kappa
|
|
5
5
|
"""
|
|
6
6
|
|
|
7
|
-
import
|
|
8
|
-
from typing import List, Tuple, Dict, Optional
|
|
7
|
+
from typing import Dict, List, Optional, Tuple
|
|
9
8
|
|
|
9
|
+
import pandas as pd
|
|
10
10
|
from PySide6.QtWidgets import QInputDialog
|
|
11
11
|
|
|
12
12
|
__version__ = "0.0.3"
|
boris/behavior_binary_table.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
BORIS
|
|
3
3
|
Behavioral Observation Research Interactive Software
|
|
4
|
-
Copyright 2012-
|
|
4
|
+
Copyright 2012-2026 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
|
boris/behaviors_coding_map.py
CHANGED
boris/boris_cli.py
CHANGED
|
@@ -3,7 +3,7 @@ BORIS CLI
|
|
|
3
3
|
|
|
4
4
|
Behavioral Observation Research Interactive Software Command Line Interface
|
|
5
5
|
|
|
6
|
-
Copyright 2012-
|
|
6
|
+
Copyright 2012-2026 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
|
boris/cmd_arguments.py
CHANGED
boris/coding_pad.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
BORIS
|
|
3
3
|
Behavioral Observation Research Interactive Software
|
|
4
|
-
Copyright 2012-
|
|
4
|
+
Copyright 2012-2026 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
|
boris/config.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
BORIS
|
|
3
3
|
Behavioral Observation Research Interactive Software
|
|
4
|
-
Copyright 2012-
|
|
4
|
+
Copyright 2012-2026 Olivier Friard
|
|
5
5
|
|
|
6
6
|
This file is part of BORIS.
|
|
7
7
|
|
|
@@ -165,6 +165,7 @@ REMOVE = "Remove"
|
|
|
165
165
|
SAVE = "Save"
|
|
166
166
|
DISCARD = "Discard"
|
|
167
167
|
OK = "OK"
|
|
168
|
+
ABORT = "Abort"
|
|
168
169
|
OVERWRITE = "Overwrite"
|
|
169
170
|
OVERWRITE_ALL = "Overwrite all"
|
|
170
171
|
SKIP = "Skip"
|
|
@@ -493,6 +494,13 @@ FRAME_DEFAULT_CACHE_SIZE = 1
|
|
|
493
494
|
|
|
494
495
|
EXCLUDED = "excluded"
|
|
495
496
|
|
|
497
|
+
# codes for Input_dialog class
|
|
498
|
+
CHECKBOX = "cb"
|
|
499
|
+
LINE_EDIT = "le"
|
|
500
|
+
SPINBOX = "sb"
|
|
501
|
+
DOUBLE_SPINBOX = "dsb"
|
|
502
|
+
ITEMS_LIST = "il"
|
|
503
|
+
|
|
496
504
|
# modifiers
|
|
497
505
|
MODIFIERS = "modifiers"
|
|
498
506
|
SINGLE_SELECTION = 0
|
|
@@ -740,6 +748,7 @@ INIT_PARAM = {
|
|
|
740
748
|
PROJECT_FILE_INDENTATION: PROJECT_FILE_INDENTATION_DEFAULT_VALUE,
|
|
741
749
|
f"{MEDIA} tw fields": MEDIA_TW_EVENTS_FIELDS_DEFAULT,
|
|
742
750
|
# FRAME_STEP_SIZE: FRAME_STEP_SIZE_DEFAULT_VALUE,
|
|
751
|
+
TOOLBAR_ICON_SIZE: DEFAULT_TOOLBAR_ICON_SIZE_VALUE,
|
|
743
752
|
}
|
|
744
753
|
|
|
745
754
|
SDIS_EXT = "sds"
|
boris/config_file.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
BORIS
|
|
3
3
|
Behavioral Observation Research Interactive Software
|
|
4
|
-
Copyright 2012-
|
|
4
|
+
Copyright 2012-2026 Olivier Friard
|
|
5
5
|
|
|
6
6
|
This file is part of BORIS.
|
|
7
7
|
|
|
@@ -21,27 +21,27 @@ This file is part of BORIS.
|
|
|
21
21
|
Read and write the BORIS config file
|
|
22
22
|
"""
|
|
23
23
|
|
|
24
|
-
import pathlib as pl
|
|
25
24
|
import logging
|
|
25
|
+
import pathlib as pl
|
|
26
26
|
import time
|
|
27
27
|
|
|
28
|
+
from PySide6.QtCore import QByteArray, QSettings
|
|
29
|
+
|
|
28
30
|
from . import config as cfg
|
|
29
31
|
from . import dialog
|
|
30
32
|
|
|
31
|
-
from PySide6.QtCore import QByteArray, QSettings
|
|
32
|
-
|
|
33
33
|
|
|
34
|
-
def read(self):
|
|
34
|
+
def read(self) -> None:
|
|
35
35
|
"""
|
|
36
36
|
read config file
|
|
37
37
|
"""
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
ini_file_path = pl.Path.home() / pl.Path(".boris")
|
|
40
40
|
|
|
41
|
-
logging.debug(f"read config file: {
|
|
41
|
+
logging.debug(f"read config file: {ini_file_path}")
|
|
42
42
|
|
|
43
|
-
if
|
|
44
|
-
settings = QSettings(str(
|
|
43
|
+
if ini_file_path.is_file():
|
|
44
|
+
settings = QSettings(str(ini_file_path), QSettings.Format.IniFormat)
|
|
45
45
|
|
|
46
46
|
try:
|
|
47
47
|
self.config_param = settings.value("config")
|
|
@@ -180,7 +180,7 @@ def read(self):
|
|
|
180
180
|
"(An internet connection is required)\n"
|
|
181
181
|
"You can change this option in the Preferences (File > Preferences)"
|
|
182
182
|
),
|
|
183
|
-
|
|
183
|
+
(cfg.YES, cfg.NO),
|
|
184
184
|
)
|
|
185
185
|
== cfg.YES
|
|
186
186
|
)
|
|
@@ -244,7 +244,7 @@ def read(self):
|
|
|
244
244
|
dialog.MessageDialog(
|
|
245
245
|
cfg.programName,
|
|
246
246
|
("The colors list contain colors that are very light.\nDo you want to reload the default colors list?"),
|
|
247
|
-
|
|
247
|
+
(cfg.NO, cfg.YES),
|
|
248
248
|
)
|
|
249
249
|
== cfg.YES
|
|
250
250
|
):
|
|
@@ -261,7 +261,7 @@ def read(self):
|
|
|
261
261
|
dialog.MessageDialog(
|
|
262
262
|
cfg.programName,
|
|
263
263
|
("The colors list contain colors that are very light.\nDo you want to reload the default colors list?"),
|
|
264
|
-
|
|
264
|
+
(cfg.NO, cfg.YES),
|
|
265
265
|
)
|
|
266
266
|
== cfg.YES
|
|
267
267
|
):
|
|
@@ -280,7 +280,7 @@ def read(self):
|
|
|
280
280
|
"You can change this option in the"
|
|
281
281
|
" Preferences (File > Preferences)"
|
|
282
282
|
),
|
|
283
|
-
|
|
283
|
+
(cfg.NO, cfg.YES),
|
|
284
284
|
)
|
|
285
285
|
== cfg.YES
|
|
286
286
|
)
|
|
@@ -289,18 +289,17 @@ def read(self):
|
|
|
289
289
|
|
|
290
290
|
# recent projects
|
|
291
291
|
logging.debug("read recent projects")
|
|
292
|
+
self.recent_projects: list = []
|
|
292
293
|
recent_projects_file_path = pl.Path.home() / ".boris_recent_projects"
|
|
293
294
|
if recent_projects_file_path.is_file():
|
|
294
|
-
settings = QSettings(str(recent_projects_file_path), QSettings.IniFormat)
|
|
295
|
+
settings = QSettings(str(recent_projects_file_path), QSettings.Format.IniFormat)
|
|
295
296
|
try:
|
|
296
297
|
self.recent_projects = settings.value("recent_projects").split("|||")
|
|
297
298
|
while "" in self.recent_projects:
|
|
298
299
|
self.recent_projects.remove("")
|
|
299
300
|
self.set_recent_projects_menu()
|
|
300
301
|
except Exception:
|
|
301
|
-
|
|
302
|
-
else:
|
|
303
|
-
self.recent_projects = []
|
|
302
|
+
pass
|
|
304
303
|
|
|
305
304
|
|
|
306
305
|
def save(self, lastCheckForNewVersion=0):
|
|
@@ -312,7 +311,7 @@ def save(self, lastCheckForNewVersion=0):
|
|
|
312
311
|
|
|
313
312
|
logging.debug(f"save config file: {file_path}")
|
|
314
313
|
|
|
315
|
-
settings = QSettings(str(file_path), QSettings.IniFormat)
|
|
314
|
+
settings = QSettings(str(file_path), QSettings.Format.IniFormat)
|
|
316
315
|
|
|
317
316
|
settings.setValue("config", self.config_param)
|
|
318
317
|
|
|
@@ -352,5 +351,5 @@ def save(self, lastCheckForNewVersion=0):
|
|
|
352
351
|
# recent projects
|
|
353
352
|
logging.debug("Save recent projects")
|
|
354
353
|
|
|
355
|
-
settings = QSettings(str(pl.Path.home() / ".boris_recent_projects"), QSettings.IniFormat)
|
|
354
|
+
settings = QSettings(str(pl.Path.home() / ".boris_recent_projects"), QSettings.Format.IniFormat)
|
|
356
355
|
settings.setValue("recent_projects", "|||".join(self.recent_projects))
|
boris/connections.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
BORIS
|
|
3
3
|
Behavioral Observation Research Interactive Software
|
|
4
|
-
Copyright 2012-
|
|
4
|
+
Copyright 2012-2026 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
|
|
@@ -22,35 +22,34 @@ Copyright 2012-2025 Olivier Friard
|
|
|
22
22
|
from PySide6.QtCore import Qt, QTimer
|
|
23
23
|
from PySide6.QtGui import QAction
|
|
24
24
|
|
|
25
|
-
from . import config as cfg
|
|
26
25
|
from . import (
|
|
27
26
|
about,
|
|
28
27
|
behav_coding_map_creator,
|
|
29
28
|
behavior_binary_table,
|
|
30
29
|
behaviors_coding_map,
|
|
31
30
|
coding_pad,
|
|
31
|
+
cooccurence,
|
|
32
32
|
event_operations,
|
|
33
33
|
events_snapshots,
|
|
34
34
|
export_events,
|
|
35
|
+
external_processes,
|
|
35
36
|
geometric_measurement,
|
|
36
37
|
image_overlay,
|
|
37
38
|
import_observations,
|
|
38
39
|
irr,
|
|
39
40
|
latency,
|
|
40
|
-
cooccurence,
|
|
41
41
|
media_file,
|
|
42
42
|
observation_operations,
|
|
43
43
|
preferences,
|
|
44
|
+
project_functions,
|
|
44
45
|
project_import_export,
|
|
45
46
|
synthetic_time_budget,
|
|
46
47
|
time_budget_widget,
|
|
47
48
|
transitions,
|
|
48
49
|
video_equalizer,
|
|
49
50
|
video_operations,
|
|
50
|
-
project_functions,
|
|
51
|
-
external_processes,
|
|
52
51
|
)
|
|
53
|
-
|
|
52
|
+
from . import config as cfg
|
|
54
53
|
from . import state_events as state_events
|
|
55
54
|
|
|
56
55
|
|
|
@@ -151,8 +150,8 @@ def connections(self):
|
|
|
151
150
|
self.actionExport_events_as_Praat_TextGrid.triggered.connect(lambda: export_events.export_events_as_textgrid(self))
|
|
152
151
|
self.actionJWatcher.triggered.connect(lambda: export_events.export_tabular_events(self, "jwatcher"))
|
|
153
152
|
|
|
154
|
-
self.actionExtract_events_from_media_files.triggered.connect(lambda: events_snapshots.
|
|
155
|
-
self.actionExtract_frames_from_media_files.triggered.connect(lambda: events_snapshots.
|
|
153
|
+
self.actionExtract_events_from_media_files.triggered.connect(lambda: events_snapshots.extract_media_clips(self))
|
|
154
|
+
self.actionExtract_frames_from_media_files.triggered.connect(lambda: events_snapshots.extract_media_snapshots(self))
|
|
156
155
|
|
|
157
156
|
self.actionCohen_s_kappa.triggered.connect(lambda: irr.irr_cohen_kappa(self))
|
|
158
157
|
self.actionNeedleman_Wunsch.triggered.connect(lambda: irr.needleman_wunch(self))
|
|
@@ -268,7 +267,7 @@ def connections(self):
|
|
|
268
267
|
self.tv_events.doubleClicked.connect(self.tv_events_doubleClicked)
|
|
269
268
|
|
|
270
269
|
# Actions for twEthogram context menu
|
|
271
|
-
self.twEthogram.setContextMenuPolicy(Qt.ActionsContextMenu)
|
|
270
|
+
self.twEthogram.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu)
|
|
272
271
|
self.twEthogram.horizontalHeader().sortIndicatorChanged.connect(self.twEthogram_sorted)
|
|
273
272
|
|
|
274
273
|
self.actionViewBehavior.triggered.connect(self.view_behavior)
|
|
@@ -283,7 +282,7 @@ def connections(self):
|
|
|
283
282
|
self.twEthogram.addAction(self.actionShowAllBehaviors)
|
|
284
283
|
|
|
285
284
|
# Actions for twSubjects context menu
|
|
286
|
-
self.twSubjects.setContextMenuPolicy(Qt.ActionsContextMenu)
|
|
285
|
+
self.twSubjects.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu)
|
|
287
286
|
self.twSubjects.horizontalHeader().sortIndicatorChanged.connect(self.sort_twSubjects)
|
|
288
287
|
self.actionFilterSubjects.triggered.connect(self.filter_subjects)
|
|
289
288
|
self.twSubjects.addAction(self.actionFilterSubjects)
|
|
@@ -297,7 +296,7 @@ def connections(self):
|
|
|
297
296
|
# tw_headers.addAction(self.actionConfigure_twEvents_columns)
|
|
298
297
|
|
|
299
298
|
tv_headers = self.tv_events.horizontalHeader()
|
|
300
|
-
tv_headers.setContextMenuPolicy(Qt.ActionsContextMenu)
|
|
299
|
+
tv_headers.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu)
|
|
301
300
|
tv_headers.addAction(self.actionConfigure_tvevents_columns)
|
|
302
301
|
|
|
303
302
|
# Actions for twEvents menu
|
|
@@ -340,7 +339,7 @@ def connections(self):
|
|
|
340
339
|
# self.twEvents.addAction(self.actionDelete_selected_events)
|
|
341
340
|
|
|
342
341
|
# Actions for tv_events menu
|
|
343
|
-
self.tv_events.setContextMenuPolicy(Qt.ActionsContextMenu)
|
|
342
|
+
self.tv_events.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu)
|
|
344
343
|
|
|
345
344
|
self.tv_events.addAction(self.actionAdd_event)
|
|
346
345
|
self.tv_events.addAction(self.actionEdit_selected_events)
|
|
@@ -385,7 +384,7 @@ def connections(self):
|
|
|
385
384
|
# Actions for twSubjects context menu
|
|
386
385
|
self.actionDeselectCurrentSubject.triggered.connect(lambda: self.update_subject(""))
|
|
387
386
|
|
|
388
|
-
self.twSubjects.setContextMenuPolicy(Qt.ActionsContextMenu)
|
|
387
|
+
self.twSubjects.setContextMenuPolicy(Qt.ContextMenuPolicy.ActionsContextMenu)
|
|
389
388
|
self.twSubjects.addAction(self.actionDeselectCurrentSubject)
|
|
390
389
|
|
|
391
390
|
# subjects
|
boris/converters.py
CHANGED
boris/cooccurence.py
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
"""
|
|
2
2
|
BORIS
|
|
3
3
|
Behavioral Observation Research Interactive Software
|
|
4
|
-
Copyright 2012-
|
|
4
|
+
Copyright 2012-2026 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
|