boris-behav-obs 9.7.1__py3-none-any.whl → 9.7.12__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/about.py +5 -5
- boris/add_modifier_ui.py +47 -29
- boris/analysis_plugins/_export_to_feral.py +225 -0
- boris/behav_coding_map_creator.py +7 -7
- boris/coding_pad.py +4 -3
- boris/config.py +7 -0
- boris/config_file.py +3 -3
- boris/core.py +98 -60
- boris/ipc_mpv.py +52 -31
- boris/modifier_coding_map_creator.py +6 -6
- boris/observation.py +8 -1
- boris/observation_operations.py +68 -43
- boris/plot_data_module.py +2 -0
- boris/plot_spectrogram_rt.py +3 -0
- boris/plot_waveform_rt.py +4 -1
- boris/plugins.py +60 -23
- boris/preferences.py +9 -0
- boris/preferences_ui.py +48 -28
- boris/project.py +1 -1
- boris/project_functions.py +26 -10
- boris/subjects_pad.py +2 -2
- boris/utilities.py +32 -4
- boris/version.py +2 -2
- boris/video_operations.py +9 -1
- {boris_behav_obs-9.7.1.dist-info → boris_behav_obs-9.7.12.dist-info}/METADATA +3 -4
- {boris_behav_obs-9.7.1.dist-info → boris_behav_obs-9.7.12.dist-info}/RECORD +30 -29
- {boris_behav_obs-9.7.1.dist-info → boris_behav_obs-9.7.12.dist-info}/WHEEL +0 -0
- {boris_behav_obs-9.7.1.dist-info → boris_behav_obs-9.7.12.dist-info}/entry_points.txt +0 -0
- {boris_behav_obs-9.7.1.dist-info → boris_behav_obs-9.7.12.dist-info}/licenses/LICENSE.TXT +0 -0
- {boris_behav_obs-9.7.1.dist-info → boris_behav_obs-9.7.12.dist-info}/top_level.txt +0 -0
boris/project_functions.py
CHANGED
|
@@ -425,6 +425,9 @@ def check_project_integrity(
|
|
|
425
425
|
r = check_coded_behaviors(pj)
|
|
426
426
|
if r:
|
|
427
427
|
out += f"The following behaviors are not defined in the ethogram: <b>{', '.join(r)}</b><br>"
|
|
428
|
+
flag_all_behaviors_defined = False
|
|
429
|
+
else:
|
|
430
|
+
flag_all_behaviors_defined = True
|
|
428
431
|
|
|
429
432
|
# check for unpaired state events
|
|
430
433
|
for obs_id in pj[cfg.OBSERVATIONS]:
|
|
@@ -577,26 +580,27 @@ def check_project_integrity(
|
|
|
577
580
|
obs_results: dict = {}
|
|
578
581
|
for obs_id in pj[cfg.OBSERVATIONS]:
|
|
579
582
|
for event_idx, event in enumerate(pj[cfg.OBSERVATIONS][obs_id][cfg.EVENTS]):
|
|
580
|
-
# event[2]
|
|
581
583
|
for idx in pj[cfg.ETHOGRAM]:
|
|
582
|
-
if pj[cfg.ETHOGRAM][idx][
|
|
584
|
+
if pj[cfg.ETHOGRAM][idx][cfg.BEHAVIOR_CODE] == event[cfg.EVENT_BEHAVIOR_FIELD_IDX]:
|
|
583
585
|
break
|
|
584
586
|
else:
|
|
585
|
-
|
|
586
|
-
|
|
587
|
+
# behavior not defined in ethogram
|
|
588
|
+
continue
|
|
589
|
+
|
|
590
|
+
if (not event[cfg.EVENT_MODIFIER_FIELD_IDX]) and not pj[cfg.ETHOGRAM][idx][cfg.MODIFIERS]: # no modifiers
|
|
587
591
|
continue
|
|
588
592
|
|
|
589
|
-
if len(event[
|
|
590
|
-
print("behavior", event[
|
|
591
|
-
print(f"modifier(s) #{event[
|
|
592
|
-
print(pj[cfg.ETHOGRAM][idx]["code"], pj[cfg.ETHOGRAM][idx][cfg.MODIFIERS])
|
|
593
|
-
print()
|
|
593
|
+
if len(event[cfg.EVENT_MODIFIER_FIELD_IDX].split("|")) != len(pj[cfg.ETHOGRAM][idx][cfg.MODIFIERS]):
|
|
594
|
+
# print("behavior", event[cfg.EVENT_BEHAVIOR_FIELD_IDX])
|
|
595
|
+
# print(f"modifier(s) #{event[cfg.EVENT_MODIFIER_FIELD_IDX]}#", len(event[cfg.EVENT_MODIFIER_FIELD_IDX].split("|")))
|
|
596
|
+
# print(pj[cfg.ETHOGRAM][idx]["code"], pj[cfg.ETHOGRAM][idx][cfg.MODIFIERS])
|
|
597
|
+
# print()
|
|
594
598
|
if obs_id not in obs_results:
|
|
595
599
|
obs_results[obs_id] = []
|
|
596
600
|
|
|
597
601
|
obs_results[obs_id].append(
|
|
598
602
|
(
|
|
599
|
-
f"Event #{event_idx}: the coded modifiers for {event[
|
|
603
|
+
f"Event #{event_idx}: the coded modifiers for {event[cfg.EVENT_BEHAVIOR_FIELD_IDX]} are {len(event[cfg.EVENT_MODIFIER_FIELD_IDX].split('|'))} "
|
|
600
604
|
f"but {len(pj[cfg.ETHOGRAM][idx][cfg.MODIFIERS])} sets were defined in ethogram."
|
|
601
605
|
)
|
|
602
606
|
)
|
|
@@ -1425,6 +1429,7 @@ def open_project_json(project_file_name: str) -> tuple:
|
|
|
1425
1429
|
pj[cfg.OBSERVATIONS][obs][cfg.TYPE] = cfg.MEDIA
|
|
1426
1430
|
|
|
1427
1431
|
# convert old media list in new one
|
|
1432
|
+
d1: dict = {}
|
|
1428
1433
|
if len(pj[cfg.OBSERVATIONS][obs][cfg.FILE]):
|
|
1429
1434
|
d1 = {cfg.PLAYER1: [pj[cfg.OBSERVATIONS][obs][cfg.FILE][0]]}
|
|
1430
1435
|
|
|
@@ -1470,6 +1475,17 @@ def open_project_json(project_file_name: str) -> tuple:
|
|
|
1470
1475
|
pj[cfg.PROJECT_VERSION] = cfg.project_format_version
|
|
1471
1476
|
projectChanged = True
|
|
1472
1477
|
|
|
1478
|
+
# check if behavioral categories are stored as a list
|
|
1479
|
+
if cfg.BEHAVIORAL_CATEGORIES_CONF in pj:
|
|
1480
|
+
if isinstance(pj[cfg.BEHAVIORAL_CATEGORIES_CONF], list):
|
|
1481
|
+
# convert to dict
|
|
1482
|
+
pj[cfg.BEHAVIORAL_CATEGORIES_CONF] = {str(idx): {"name": bc} for idx, bc in enumerate(pj[cfg.BEHAVIORAL_CATEGORIES_CONF])}
|
|
1483
|
+
logging.info("Behavioral categories was converted from a list to a dictionary")
|
|
1484
|
+
projectChanged = True
|
|
1485
|
+
else:
|
|
1486
|
+
pj[cfg.BEHAVIORAL_CATEGORIES_CONF] = dict()
|
|
1487
|
+
projectChanged = True
|
|
1488
|
+
|
|
1473
1489
|
# add category key if not found
|
|
1474
1490
|
for idx in pj[cfg.ETHOGRAM]:
|
|
1475
1491
|
if cfg.BEHAVIOR_CATEGORY not in pj[cfg.ETHOGRAM][idx]:
|
boris/subjects_pad.py
CHANGED
|
@@ -27,7 +27,7 @@ from . import utilities as util
|
|
|
27
27
|
|
|
28
28
|
|
|
29
29
|
class SubjectsPad(QWidget):
|
|
30
|
-
|
|
30
|
+
click_signal = Signal(str)
|
|
31
31
|
sendEventSignal = Signal(QEvent)
|
|
32
32
|
close_signal = Signal(QRect)
|
|
33
33
|
|
|
@@ -77,7 +77,7 @@ class SubjectsPad(QWidget):
|
|
|
77
77
|
widget.pushButton.clicked.connect(lambda: self.click(subject))
|
|
78
78
|
|
|
79
79
|
def click(self, subject):
|
|
80
|
-
self.
|
|
80
|
+
self.click_signal.emit(subject)
|
|
81
81
|
|
|
82
82
|
def eventFilter(self, receiver, event):
|
|
83
83
|
"""
|
boris/utilities.py
CHANGED
|
@@ -126,6 +126,15 @@ if (sys.platform.startswith("win") or sys.platform.startswith("linux")) and ("-i
|
|
|
126
126
|
sys.exit(5)
|
|
127
127
|
|
|
128
128
|
|
|
129
|
+
def is_subdir(a: Path, b: Path) -> bool:
|
|
130
|
+
"""
|
|
131
|
+
Return True if directory A is inside directory B.
|
|
132
|
+
"""
|
|
133
|
+
a = a.resolve()
|
|
134
|
+
b = b.resolve()
|
|
135
|
+
return a.is_relative_to(b)
|
|
136
|
+
|
|
137
|
+
|
|
129
138
|
def test_mpv_ipc(socket_path: str = cfg.MPV_SOCKET) -> bool:
|
|
130
139
|
"""
|
|
131
140
|
test if socket available
|
|
@@ -471,20 +480,37 @@ def txt2np_array(
|
|
|
471
480
|
conv_name = column_converter[column_idx]
|
|
472
481
|
|
|
473
482
|
function = f"""def {conv_name}(INPUT):\n"""
|
|
474
|
-
function += """ INPUT = INPUT.decode("utf-8") if isinstance(INPUT, bytes) else INPUT"""
|
|
483
|
+
function += """ INPUT = INPUT.decode("utf-8") if isinstance(INPUT, bytes) else INPUT\n\n"""
|
|
475
484
|
for line in converters[conv_name]["code"].split("\n"):
|
|
476
485
|
function += f" {line}\n"
|
|
477
486
|
function += """ return OUTPUT"""
|
|
478
487
|
|
|
488
|
+
print("=============")
|
|
489
|
+
print(function)
|
|
490
|
+
print("=============")
|
|
491
|
+
|
|
492
|
+
import types
|
|
493
|
+
|
|
494
|
+
mod = types.ModuleType("converter_module")
|
|
495
|
+
exec(function, mod.__dict__)
|
|
496
|
+
|
|
497
|
+
"""
|
|
479
498
|
try:
|
|
480
499
|
exec(function)
|
|
481
500
|
except Exception:
|
|
482
501
|
return False, f"error in converter: {sys.exc_info()[1]}", np.array([])
|
|
483
502
|
|
|
484
|
-
|
|
503
|
+
print(f"{converters=}")
|
|
504
|
+
print(f"{column_converter=}")
|
|
505
|
+
print(locals())
|
|
506
|
+
print(f"{conv_name=}")
|
|
507
|
+
"""
|
|
508
|
+
|
|
509
|
+
# np_converters[column_idx - 1] = locals()['conv_name']
|
|
510
|
+
np_converters[column_idx - 1] = getattr(mod, conv_name)
|
|
485
511
|
|
|
486
512
|
else:
|
|
487
|
-
return False, f"converter {
|
|
513
|
+
return False, f"converter {column_converter[column_idx]} not found", np.array([])
|
|
488
514
|
|
|
489
515
|
# snif txt file
|
|
490
516
|
try:
|
|
@@ -1189,7 +1215,7 @@ def time2seconds(time_: str) -> dec:
|
|
|
1189
1215
|
return dec("0.000")
|
|
1190
1216
|
|
|
1191
1217
|
|
|
1192
|
-
def seconds2time(sec: dec) -> str:
|
|
1218
|
+
def seconds2time(sec: dec | None) -> str:
|
|
1193
1219
|
"""
|
|
1194
1220
|
convert seconds to hh:mm:ss.sss format
|
|
1195
1221
|
|
|
@@ -1198,6 +1224,8 @@ def seconds2time(sec: dec) -> str:
|
|
|
1198
1224
|
Returns:
|
|
1199
1225
|
str: time in format hh:mm:ss
|
|
1200
1226
|
"""
|
|
1227
|
+
if sec is None:
|
|
1228
|
+
return cfg.NA
|
|
1201
1229
|
|
|
1202
1230
|
if math.isnan(sec):
|
|
1203
1231
|
return cfg.NA
|
boris/version.py
CHANGED
boris/video_operations.py
CHANGED
|
@@ -231,7 +231,15 @@ def display_zoom_level(self) -> None:
|
|
|
231
231
|
"""
|
|
232
232
|
msg: str = "Zoom level: <b>"
|
|
233
233
|
for player in self.dw_player:
|
|
234
|
-
|
|
234
|
+
vz = player.player.video_zoom
|
|
235
|
+
if vz is None:
|
|
236
|
+
self.lb_zoom_level.setText("-")
|
|
237
|
+
return
|
|
238
|
+
player_video_zoom = player.player.video_zoom
|
|
239
|
+
if player_video_zoom is not None:
|
|
240
|
+
msg += f"{2**player_video_zoom:.1f} "
|
|
241
|
+
else:
|
|
242
|
+
msg += "NA "
|
|
235
243
|
msg += "</b>"
|
|
236
244
|
self.lb_zoom_level.setText(msg)
|
|
237
245
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boris-behav-obs
|
|
3
|
-
Version: 9.7.
|
|
3
|
+
Version: 9.7.12
|
|
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
|
|
@@ -44,15 +44,14 @@ BORIS (Behavioral Observation Research Interactive Software)
|
|
|
44
44
|
|
|
45
45
|
BORIS is an easy-to-use event logging software for video/audio coding or live observations.
|
|
46
46
|
|
|
47
|
-
BORIS is a free and open-source software available for GNU/Linux and
|
|
48
|
-
You can not longer run BORIS natively on MacOS (since v.8). Some alternatives to run the last version of BORIS are available, see [BORIS on MacOS](https://www.boris.unito.it/download_mac).
|
|
47
|
+
BORIS is a free and open-source software available for GNU/Linux, Windows and macOS.
|
|
49
48
|
|
|
50
49
|
It provides also some analysis tools like time budget and some plotting functions.
|
|
51
50
|
|
|
52
51
|
<!-- The BO-RIS paper has more than [ citations](https://www.boris.unito.it/citations) in peer-reviewed scientific publications. -->
|
|
53
52
|
|
|
54
53
|
|
|
55
|
-
The BORIS paper has more than
|
|
54
|
+
The BORIS paper has more than 2472 citations in peer-reviewed scientific publications.
|
|
56
55
|
|
|
57
56
|
|
|
58
57
|
|
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
boris/__init__.py,sha256=iAtmVMy22TJpMmxVTMSK_6-wXnCbx1ogvWgfYEcbHzU,773
|
|
2
2
|
boris/__main__.py,sha256=ANjTbXgXDoz2nB1tCtOIllfIVotCa602iebACX7rXaE,764
|
|
3
|
-
boris/about.py,sha256=
|
|
3
|
+
boris/about.py,sha256=RrK4fUbMUpyMWPZVmFYG91pVx_orvaLPw-OBWI_NcOg,5401
|
|
4
4
|
boris/add_modifier.py,sha256=l9LSa_9FAV9CnBgm26tJqhMAdnFoBQafZLyt9pTKmac,26240
|
|
5
|
-
boris/add_modifier_ui.py,sha256=
|
|
5
|
+
boris/add_modifier_ui.py,sha256=5PbyQKCrMhLXYkOqOvqis1E_oCYQI_994-uofIIIb0k,12366
|
|
6
6
|
boris/advanced_event_filtering.py,sha256=VlvU12mL6xYacZOvJAi5uLpHMcmAw5Pvuvmka-PN29c,15469
|
|
7
|
-
boris/behav_coding_map_creator.py,sha256=
|
|
7
|
+
boris/behav_coding_map_creator.py,sha256=rU8uh-St2gSBsx194KwvFddkrOPBN-lUio36NcFOsoI,38797
|
|
8
8
|
boris/behavior_binary_table.py,sha256=bpmRDpEjq0rw3YOCoN_He3kfUe8A_R6E48kQR7KnkH8,12453
|
|
9
9
|
boris/behaviors_coding_map.py,sha256=xIGJxp2eghrpiGDmYH73eJPERuyc4A_54uT-Got3zTs,7302
|
|
10
10
|
boris/boris_cli.py,sha256=Bc51DEMcD79ZZfM9pCzpaWU6iT6b8gNwR3n8fr42_4E,13193
|
|
11
11
|
boris/cmd_arguments.py,sha256=85zDEIW6UiXRb0TQWDxR664pQQtG5J-7Ipv91y3JixQ,2065
|
|
12
|
-
boris/coding_pad.py,sha256=
|
|
13
|
-
boris/config.py,sha256=
|
|
14
|
-
boris/config_file.py,sha256=
|
|
12
|
+
boris/coding_pad.py,sha256=DjUkuTfqzajll3KoOguGWV4WClOs9IDYYa6wUiGOiCU,10978
|
|
13
|
+
boris/config.py,sha256=bnLFkmarRH4FKX1n0oE79OGz6QqyXvVMHt73rzMHuzE,18058
|
|
14
|
+
boris/config_file.py,sha256=4jBGMaVzjoVKSeOBEHXVjbsyubN08ghQTsrm4s7Kqsw,13551
|
|
15
15
|
boris/connections.py,sha256=KsC17LnS4tRM6O3Nu3mD1H9kQ7uYhhad9229jXfGF94,19774
|
|
16
16
|
boris/converters.py,sha256=n6gDM9x2hS-ZOoHLruiifuXxnC7ERsUukiFokhHZPoQ,11678
|
|
17
17
|
boris/converters_ui.py,sha256=uu7LOBV_fKv2DBdOqsqPwjGsjgONr5ODBoscAA-EP48,9900
|
|
18
18
|
boris/cooccurence.py,sha256=tVERC-V8MWjWHlGEfDuu08iS94qjt4do-38jwI62QaY,10367
|
|
19
|
-
boris/core.py,sha256=
|
|
19
|
+
boris/core.py,sha256=Mxlp6Wxl4fNDH9JR4LnMhzgI64xK6lzqZlvdkH8meM4,234577
|
|
20
20
|
boris/core_qrc.py,sha256=Hz51Xw70ZIlDbYB281nfGtCm43_ItYhamMu2T5X8Tu8,639882
|
|
21
21
|
boris/core_ui.py,sha256=uDAI9mbadBe2mSsgugzNfRHxASc6Mu5kUf5tB9CZCjY,77445
|
|
22
22
|
boris/db_functions.py,sha256=TfCJ0Hq0pTFOKrZz3RzdvnR-NKCmrPHU2qL9BSXeeGQ,13379
|
|
@@ -36,34 +36,34 @@ boris/geometric_measurement.py,sha256=4pI-AYpBSFlJBqS-f8dnkgLtj_Z2E5kwwAdh6WwZ4k
|
|
|
36
36
|
boris/gui_utilities.py,sha256=Kv75XgFmicPUKvdRPj_yBYoDNc912cfl1IQrgw5T2kI,5458
|
|
37
37
|
boris/image_overlay.py,sha256=zZAL8MTt2i2s58CuX81Nym3rJ5pKiTeP4AO8WbIUonM,2527
|
|
38
38
|
boris/import_observations.py,sha256=zKrkpk1ADxTj2BECactPPOhU6wtrh3TjtOWue2HCT5w,9074
|
|
39
|
-
boris/ipc_mpv.py,sha256=
|
|
39
|
+
boris/ipc_mpv.py,sha256=bnc-xjp9CbyqO4uEcAxMgxyJdG3-6SJUd_gNI_sILns,9925
|
|
40
40
|
boris/irr.py,sha256=n6Y_Y9iEKOf9_7EE_lDRNei7tq2wkFKk_JVflm9UQdk,22335
|
|
41
41
|
boris/latency.py,sha256=48z9L_A582-wKCfD0M3h0uyYkeL2ezjlQAS_GzeoOe0,9739
|
|
42
42
|
boris/measurement_widget.py,sha256=lZV62KtK6TjdoNbKxj3uyNAuL5dfnQnn7mYwzMo-dOM,4480
|
|
43
43
|
boris/media_file.py,sha256=Wnw-PCyAz6CA00zhjrx0UTgXZ0wmHuNlnElV_TzJ_2M,4818
|
|
44
44
|
boris/menu_options.py,sha256=uznHFMtpGRWL6Eig10gJ5tOiypgOr9XVyxRiuCbgN9U,7146
|
|
45
|
-
boris/modifier_coding_map_creator.py,sha256=
|
|
45
|
+
boris/modifier_coding_map_creator.py,sha256=RGlo140HQLlh4we_G7RyXYRXJOTUskPF1Bin1dnE6_c,33243
|
|
46
46
|
boris/modifiers_coding_map.py,sha256=oT56ZY_PXhEJsMoblEsyNMAPbDpv7ZMOCnvmt7Ibx_Y,4554
|
|
47
47
|
boris/mpv.py,sha256=EfzIHjPbgewG4w3smEtqEUPZoVwYmMQkL4Q8ZyW-a58,76410
|
|
48
48
|
boris/mpv2.py,sha256=IUI4t4r9GYX7G5OXTjd3RhMMOkDdfal_15buBgksLsk,92152
|
|
49
|
-
boris/observation.py,sha256=
|
|
50
|
-
boris/observation_operations.py,sha256=
|
|
49
|
+
boris/observation.py,sha256=K-Xi99BMLSohx6pPLKk-Eqi56fLWDFLScHxXKkoFAlg,57507
|
|
50
|
+
boris/observation_operations.py,sha256=HPPat_-6c_Fu0cFs0wQD86AIE7g7eKHutOGi_xexMAM,106581
|
|
51
51
|
boris/observation_ui.py,sha256=DAnU94QBNvkLuHT6AxTwqSk_D_n6VUhSl8PexZv_dUk,33309
|
|
52
52
|
boris/observations_list.py,sha256=NqwECGHtHYmKhSe-qCfqPmJ24SSfzlXvIXS2i3op_zE,10591
|
|
53
53
|
boris/otx_parser.py,sha256=70QvilzFHXbjAHR88YH0aEXJ3xxheLS5fZGgHFHGpNE,16367
|
|
54
54
|
boris/param_panel.py,sha256=C7MzWg-OVjjxKbXPFC0ykOLpxbwsqEmG0jWgzBUwOEA,8695
|
|
55
55
|
boris/param_panel_ui.py,sha256=4emQDFmuL4_R7bKxosLjdUb-VSPWkDm7suy38F5EKcA,13260
|
|
56
56
|
boris/player_dock_widget.py,sha256=rdP0w6Wac7R3UMqJeHl7GNvT1hElu_x_VgNkg4Ut-6s,5880
|
|
57
|
-
boris/plot_data_module.py,sha256=
|
|
57
|
+
boris/plot_data_module.py,sha256=Xq70HDlAtvganwNmbRDUA3iKV-415zS9W1H1x0itXWE,16594
|
|
58
58
|
boris/plot_events.py,sha256=tKiUWH0TNSkK7xz5Vf0tAD3KiuAalv6UZEVtOnoFpWY,24059
|
|
59
59
|
boris/plot_events_rt.py,sha256=xJmjwqhQxCN4FDBYRQ0O2eHm356Rbexzr3m1qTefMDU,8326
|
|
60
|
-
boris/plot_spectrogram_rt.py,sha256=
|
|
61
|
-
boris/plot_waveform_rt.py,sha256=
|
|
62
|
-
boris/plugins.py,sha256=
|
|
63
|
-
boris/preferences.py,sha256
|
|
64
|
-
boris/preferences_ui.py,sha256=
|
|
65
|
-
boris/project.py,sha256=
|
|
66
|
-
boris/project_functions.py,sha256=
|
|
60
|
+
boris/plot_spectrogram_rt.py,sha256=JYuh14dI9uMPI4R6glI_jJ12itpe2X268RNtOgzm_oc,10978
|
|
61
|
+
boris/plot_waveform_rt.py,sha256=JM4TtN7IFZqLRY4k4rJ-U0DMvGdQ2FFlwH2xVOyrx68,7595
|
|
62
|
+
boris/plugins.py,sha256=AzjKLPsqBk-K8wPM3HXe4w-sNaDU1bQm2XEoLr4Zx0k,17234
|
|
63
|
+
boris/preferences.py,sha256=YcGBaXRfimH4jpFLfcUAgCAGESXSLhB6cli_cg4cDl0,21902
|
|
64
|
+
boris/preferences_ui.py,sha256=sRmsI04uRtY4xthioZVMYEv2b8WTeYfXXOk_iSNDVXU,35187
|
|
65
|
+
boris/project.py,sha256=4dE4nqo8at1lz9KykprF5Rr62R78yu4vBrTfde1gQ-g,86438
|
|
66
|
+
boris/project_functions.py,sha256=5AWfCMc3zELqMdyeFXU-HZxMVp1Dm4DV-vVPCMsHqfE,83561
|
|
67
67
|
boris/project_import_export.py,sha256=oBG1CSXfKISsb3TLNT-8BH8kZPAzxIYSNemlLVH1Lh8,38560
|
|
68
68
|
boris/project_ui.py,sha256=yB-ewhHt8S8DTTRIk-dNK2tPMNU24lNji9fDW_Xazu8,38805
|
|
69
69
|
boris/qrc_boris.py,sha256=aH-qUirYY1CGxmTK1SFCPvuZfazIHX4DdUKF1gxZeYM,675008
|
|
@@ -72,20 +72,21 @@ boris/select_modifiers.py,sha256=42uG9F75pfPoPJ-blp-vFgmpBpVJtL42FlIxpNpq9z4,133
|
|
|
72
72
|
boris/select_observations.py,sha256=k7c3FNVQW74YGH9oFmtHXRVCRnpKGhjCVk3cQtyLML8,8027
|
|
73
73
|
boris/select_subj_behav.py,sha256=ulXbsRY-AIyQRSwXhVlvkNRS_eqWaCvkDKTTyOLqvoE,11742
|
|
74
74
|
boris/state_events.py,sha256=iUrC5ypwIKOnmoq0moDQwtH9-DrgiJ81zL2pMxESucU,7790
|
|
75
|
-
boris/subjects_pad.py,sha256=
|
|
75
|
+
boris/subjects_pad.py,sha256=OWEkI-ViiIm3KfBmaEodOGTI2Cgtd0pfXghp4_d6p3k,3543
|
|
76
76
|
boris/synthetic_time_budget.py,sha256=3Eb9onMLmgqCLd50CuxV9L8RV2ESzfaMWvPK_bXUMMk,10489
|
|
77
77
|
boris/time_budget_functions.py,sha256=SbGyTF2xySEqBdRJZeWFTirruvK3r6pwM6e4Gz17W1s,52186
|
|
78
78
|
boris/time_budget_widget.py,sha256=z-tyITBtIz-KH1H2OdMB5a8x9QQLK7Wu96-zkC6NVDA,43213
|
|
79
79
|
boris/transitions.py,sha256=okyDCO-Vn4p_Fixd8cGiSIaUhUxG5ePIOqGSuP52g_c,12246
|
|
80
|
-
boris/utilities.py,sha256=
|
|
81
|
-
boris/version.py,sha256=
|
|
80
|
+
boris/utilities.py,sha256=Ae3YjXkulJYQxbE4Fpvle4tX2nA_qJQhAn980sTFHqw,58805
|
|
81
|
+
boris/version.py,sha256=ERnj-wDpDd9yosZR3Abj_lLv8SNy6tlWoTJDh5QAZDk,788
|
|
82
82
|
boris/video_equalizer.py,sha256=cm2JXe1eAPkqDzxYB2OMKyuveMBdq4a9-gD1bBorbn4,5823
|
|
83
83
|
boris/video_equalizer_ui.py,sha256=1CG3s79eM4JAbaCx3i1ILZXLceb41_gGXlOLNfpBgnw,10142
|
|
84
|
-
boris/video_operations.py,sha256=
|
|
84
|
+
boris/video_operations.py,sha256=dSpD1cnDm7DiTUirIcCYE1Olb5HlY8-S4CpLynyT1L8,11054
|
|
85
85
|
boris/view_df.py,sha256=fhcNMFFVbQ4ZTpPwN_4Bg66DDIoV25zaPryZUsOxsKg,3338
|
|
86
86
|
boris/view_df_ui.py,sha256=CaMeRH_vQ00CTDDFQn73ZZaS-r8BSTWpL-dMCFqzJ_Q,2775
|
|
87
87
|
boris/write_event.py,sha256=xC-dUjgPS4-tvrQfvyL7O_xi-tyQI7leSiSV8_x8hgg,23817
|
|
88
88
|
boris/analysis_plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
|
|
89
|
+
boris/analysis_plugins/_export_to_feral.py,sha256=_eirrreEn3Udp4POBG8cA1Gno4e-x_LFYXfvDhy11fg,7417
|
|
89
90
|
boris/analysis_plugins/_latency.py,sha256=9kCdFDtb5Zdao1xFpioi_exm_IxyGm6RlY3Opn6GUFo,2030
|
|
90
91
|
boris/analysis_plugins/irr_cohen_kappa.py,sha256=OqmivIE6i1hTcFVMp0EtY0Sr7C1Jm9t0D4IKbDfTJ7U,4268
|
|
91
92
|
boris/analysis_plugins/irr_cohen_kappa_with_modifiers.py,sha256=DtzFLRToR9GdkmWYDcCmpSvxHGpguVp-_n8F-t7ND7c,4461
|
|
@@ -101,9 +102,9 @@ boris/portion/dict.py,sha256=uNM-LEY52CZ2VNMMW_C9QukoyTvPlQf8vcbGa1lQBHI,11281
|
|
|
101
102
|
boris/portion/func.py,sha256=mSQr20YS1ug7R1fRqBg8LifjtXDRvJ6Kjc3WOeL9P34,2172
|
|
102
103
|
boris/portion/interval.py,sha256=sOlj3MAGGaB-JxCkigS-n3qw0fY7TANAsXv1pavr8J4,19931
|
|
103
104
|
boris/portion/io.py,sha256=kpq44pw3xnIyAlPwaR5qRHKRdZ72f8HS9YVIWs5k2pk,6367
|
|
104
|
-
boris_behav_obs-9.7.
|
|
105
|
-
boris_behav_obs-9.7.
|
|
106
|
-
boris_behav_obs-9.7.
|
|
107
|
-
boris_behav_obs-9.7.
|
|
108
|
-
boris_behav_obs-9.7.
|
|
109
|
-
boris_behav_obs-9.7.
|
|
105
|
+
boris_behav_obs-9.7.12.dist-info/licenses/LICENSE.TXT,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
|
|
106
|
+
boris_behav_obs-9.7.12.dist-info/METADATA,sha256=FD9BDXBQlwrLAPGIg7tpNRwBK55w-u0QeC9qU6zNhJg,5204
|
|
107
|
+
boris_behav_obs-9.7.12.dist-info/WHEEL,sha256=_zCd3N1l69ArxyTb8rzEoP9TpbYXkqRFSNOD5OuxnTs,91
|
|
108
|
+
boris_behav_obs-9.7.12.dist-info/entry_points.txt,sha256=k__8XvFi4vaA4QFvQehCZjYkKmZH34HSAJI2iYCWrMs,52
|
|
109
|
+
boris_behav_obs-9.7.12.dist-info/top_level.txt,sha256=fJSgm62S7WesiwTorGbOO4nNN0yzgZ3klgfGi3Px4qI,6
|
|
110
|
+
boris_behav_obs-9.7.12.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|