boris-behav-obs 9.3.4__py2.py3-none-any.whl → 9.4__py2.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/1.py +45 -0
- boris/about.py +5 -4
- boris/config.py +2 -0
- boris/config_file.py +1 -1
- boris/converters.py +1 -3
- boris/core.py +107 -168
- boris/dialog.py +10 -31
- boris/edit_event.py +47 -27
- boris/edit_event_ui.py +69 -36
- boris/event_operations.py +50 -57
- boris/observation.py +1 -2
- boris/observation_operations.py +16 -3
- boris/project_functions.py +1 -1
- boris/select_observations.py +7 -1
- boris/state_events.py +1 -1
- boris/utilities.py +170 -75
- boris/version.py +2 -2
- {boris_behav_obs-9.3.4.dist-info → boris_behav_obs-9.4.dist-info}/METADATA +1 -1
- {boris_behav_obs-9.3.4.dist-info → boris_behav_obs-9.4.dist-info}/RECORD +23 -22
- {boris_behav_obs-9.3.4.dist-info → boris_behav_obs-9.4.dist-info}/WHEEL +1 -1
- {boris_behav_obs-9.3.4.dist-info → boris_behav_obs-9.4.dist-info}/entry_points.txt +0 -0
- {boris_behav_obs-9.3.4.dist-info → boris_behav_obs-9.4.dist-info}/licenses/LICENSE.TXT +0 -0
- {boris_behav_obs-9.3.4.dist-info → boris_behav_obs-9.4.dist-info}/top_level.txt +0 -0
boris/utilities.py
CHANGED
|
@@ -19,54 +19,101 @@ Copyright 2012-2025 Olivier Friard
|
|
|
19
19
|
MA 02110-1301, USA.
|
|
20
20
|
"""
|
|
21
21
|
|
|
22
|
+
from decimal import Decimal as dec
|
|
23
|
+
from decimal import getcontext, ROUND_DOWN
|
|
24
|
+
from hachoir.metadata import extractMetadata
|
|
25
|
+
from hachoir.parser import createParser
|
|
26
|
+
from shutil import copyfile
|
|
27
|
+
from typing import Union, Tuple
|
|
22
28
|
import csv
|
|
29
|
+
import datetime
|
|
23
30
|
import datetime as dt
|
|
31
|
+
import exifread
|
|
24
32
|
import json
|
|
25
33
|
import logging
|
|
26
34
|
import math
|
|
35
|
+
import numpy as np
|
|
27
36
|
import os
|
|
28
37
|
import pathlib as pl
|
|
38
|
+
from PIL.ImageQt import Image
|
|
39
|
+
import platform
|
|
29
40
|
import re
|
|
41
|
+
import shutil
|
|
30
42
|
import subprocess
|
|
31
43
|
import sys
|
|
32
44
|
import urllib.parse
|
|
45
|
+
import urllib.request
|
|
33
46
|
import wave
|
|
34
|
-
import exifread
|
|
35
|
-
import datetime
|
|
36
|
-
from decimal import Decimal as dec
|
|
37
|
-
from decimal import getcontext, ROUND_DOWN
|
|
38
|
-
from shutil import copyfile
|
|
39
|
-
from typing import Union, Tuple
|
|
40
47
|
|
|
41
|
-
from
|
|
42
|
-
from hachoir.metadata import extractMetadata
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
import numpy as np
|
|
48
|
+
from PySide6 import __version__ as pyside6_version
|
|
46
49
|
from PySide6.QtGui import QPixmap, QImage
|
|
47
|
-
|
|
48
|
-
from PIL.ImageQt import Image
|
|
50
|
+
from PySide6.QtCore import qVersion
|
|
49
51
|
|
|
50
52
|
from . import config as cfg
|
|
53
|
+
from . import version
|
|
51
54
|
|
|
52
|
-
|
|
55
|
+
logger = logging.getLogger(__name__)
|
|
53
56
|
|
|
54
|
-
"""
|
|
55
57
|
try:
|
|
56
58
|
from . import mpv2 as mpv
|
|
59
|
+
except Exception:
|
|
60
|
+
logger.warning("MPV library not found")
|
|
57
61
|
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
62
|
+
if sys.platform.startswith("win"):
|
|
63
|
+
import ctypes
|
|
64
|
+
|
|
65
|
+
ctypes.windll.user32.MessageBoxW(0, "The MPV library was not found!\nIt will be downloaded.", "BORIS", 0)
|
|
66
|
+
|
|
67
|
+
# download libmpv2.dll and ffprobe from https://github.com/boris-behav-obs/boris-behav-obs.github.io/releases/download/files/
|
|
68
|
+
|
|
69
|
+
url = "https://github.com/boris-behav-obs/boris-behav-obs.github.io/releases/download/files/"
|
|
70
|
+
|
|
71
|
+
external_files_dir = ""
|
|
72
|
+
# search where to download libmpv-2.dll
|
|
73
|
+
|
|
74
|
+
external_files_dir = pl.Path(__file__).parent / "misc"
|
|
75
|
+
if not external_files_dir.is_dir():
|
|
76
|
+
logger.info(f"Creating {external_files_dir} directory")
|
|
77
|
+
external_files_dir.mkdir(parents=True, exist_ok=True)
|
|
78
|
+
|
|
79
|
+
logger.info(f"MPV library directory: {external_files_dir}")
|
|
80
|
+
|
|
81
|
+
local_filename = external_files_dir / "libmpv-2.dll"
|
|
82
|
+
logger.info("Downloading libmpv-2.dll...")
|
|
83
|
+
try:
|
|
84
|
+
urllib.request.urlretrieve(url + "libmpv-2.dll", local_filename)
|
|
85
|
+
logger.info(f"File downloaded as {local_filename}")
|
|
86
|
+
except Exception:
|
|
87
|
+
logger.critical("The MPV library can not be downloaded! Check your connection.")
|
|
88
|
+
ctypes.windll.user32.MessageBoxW(0, "The MPV library can not be downloaded!\nCheck your connection.", "BORIS", 0)
|
|
89
|
+
sys.exit(5)
|
|
90
|
+
# reload package
|
|
91
|
+
try:
|
|
92
|
+
from . import mpv2 as mpv
|
|
93
|
+
except Exception:
|
|
94
|
+
logger.warning("MPV library not found after dowloading")
|
|
95
|
+
sys.exit(5)
|
|
96
|
+
|
|
97
|
+
elif sys.platform.startswith("linux"):
|
|
98
|
+
text = (
|
|
99
|
+
"The MPV library was not found!\nInstall it\n\n"
|
|
100
|
+
"With Debian/Ubuntu/Mint:\nsudo apt install libmpv2\n\n"
|
|
101
|
+
"With Fedora:\nsudo dnf install mpv-libs\n\n"
|
|
102
|
+
"With OpenSUSE:\nsudo zypper install mpv\n\n"
|
|
103
|
+
"Arch Linux / Manjaro:\nsudo pacman -S mpv\n\n"
|
|
104
|
+
)
|
|
105
|
+
if shutil.which("zenity") is not None:
|
|
106
|
+
subprocess.run(["zenity", "--error", f"--text={text}"])
|
|
107
|
+
elif shutil.which("kdialog"):
|
|
108
|
+
subprocess.run(["kdialog", "--msgbox", text])
|
|
109
|
+
elif shutil.which("gxmessage"):
|
|
110
|
+
subprocess.run(["gxmessage", text])
|
|
111
|
+
elif shutil.which("xmessage"):
|
|
112
|
+
subprocess.run(["xmessage", text])
|
|
113
|
+
|
|
114
|
+
sys.exit(5)
|
|
115
|
+
else:
|
|
116
|
+
sys.exit(5)
|
|
70
117
|
|
|
71
118
|
|
|
72
119
|
def extract_exif_DateTimeOriginal(file_path: str) -> int:
|
|
@@ -110,10 +157,10 @@ def extract_video_creation_date(file_path: str) -> int | None:
|
|
|
110
157
|
returns the timestamp of the media creation date time with Hachoir
|
|
111
158
|
"""
|
|
112
159
|
|
|
113
|
-
|
|
160
|
+
logger.debug(f"extract_video_creation_date for {file_path}")
|
|
114
161
|
|
|
115
162
|
if not pl.Path(file_path).is_file():
|
|
116
|
-
|
|
163
|
+
logger.debug(f"{file_path} not found")
|
|
117
164
|
return None
|
|
118
165
|
try:
|
|
119
166
|
parser = createParser(file_path)
|
|
@@ -140,14 +187,14 @@ def extract_date_time_from_file_name(file_path: str) -> int | None:
|
|
|
140
187
|
|
|
141
188
|
if matches:
|
|
142
189
|
if pattern == r"\d{4}-\d{2}-\d{2}_\d{6}":
|
|
143
|
-
|
|
190
|
+
logger.debug(
|
|
144
191
|
f"extract_date_time_from_file_name timestamp from {file_path}: {int(datetime.datetime.strptime(matches[0], '%Y-%m-%d_%H%M%S').timestamp())}"
|
|
145
192
|
)
|
|
146
193
|
|
|
147
194
|
return int(datetime.datetime.strptime(matches[0], "%Y-%m-%d_%H%M%S").timestamp())
|
|
148
195
|
|
|
149
196
|
if pattern == r"\d{4}-\d{2}-\d{2}_\d{2}:\d{2}:\d{2}":
|
|
150
|
-
|
|
197
|
+
logger.debug(
|
|
151
198
|
f"extract_date_time_from_file_name timestamp from {file_path}: {int(datetime.datetime.strptime(matches[0], '%Y-%m-%d_%H:%M:%S').timestamp())}"
|
|
152
199
|
)
|
|
153
200
|
|
|
@@ -798,9 +845,9 @@ def extract_wav(ffmpeg_bin: str, media_file_path: str, tmp_dir: str) -> str:
|
|
|
798
845
|
try:
|
|
799
846
|
wav = wave.open(media_file_path, "r")
|
|
800
847
|
wav.close()
|
|
801
|
-
|
|
848
|
+
logger.debug(f"{media_file_path} is a WAV file. Copying in the temp directory...")
|
|
802
849
|
copyfile(media_file_path, wav_file_path)
|
|
803
|
-
|
|
850
|
+
logger.debug(f"{media_file_path} copied in {wav_file_path}")
|
|
804
851
|
return str(wav_file_path)
|
|
805
852
|
except Exception:
|
|
806
853
|
if wav_file_path.is_file():
|
|
@@ -815,7 +862,7 @@ def extract_wav(ffmpeg_bin: str, media_file_path: str, tmp_dir: str) -> str:
|
|
|
815
862
|
)
|
|
816
863
|
out, error = p.communicate()
|
|
817
864
|
out, error = out.decode("utf-8"), error.decode("utf-8")
|
|
818
|
-
|
|
865
|
+
logger.debug(f"{out}, {error}")
|
|
819
866
|
|
|
820
867
|
if "does not contain any stream" not in error:
|
|
821
868
|
if wav_file_path.is_file():
|
|
@@ -866,8 +913,8 @@ def seconds_of_day(timestamp: dt.datetime) -> dec:
|
|
|
866
913
|
dev: number of seconds since the start of the day
|
|
867
914
|
"""
|
|
868
915
|
|
|
869
|
-
#
|
|
870
|
-
#
|
|
916
|
+
# logger.debug("function: seconds_of_day")
|
|
917
|
+
# logger.debug(f"{timestamp = }")
|
|
871
918
|
|
|
872
919
|
t = timestamp.time()
|
|
873
920
|
return dec(t.hour * 3600 + t.minute * 60 + t.second + t.microsecond / 1000000).quantize(dec("0.001"))
|
|
@@ -1200,8 +1247,8 @@ def test_ffmpeg_path(FFmpegPath: str) -> Tuple[bool, str]:
|
|
|
1200
1247
|
"""
|
|
1201
1248
|
|
|
1202
1249
|
out, error = subprocess.Popen(f'"{FFmpegPath}" -version', stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True).communicate()
|
|
1203
|
-
|
|
1204
|
-
|
|
1250
|
+
logger.debug(f"test ffmpeg path output: {out}")
|
|
1251
|
+
logger.debug(f"test ffmpeg path error: {error}")
|
|
1205
1252
|
|
|
1206
1253
|
if (b"avconv" in out) or (b"the Libav developers" in error):
|
|
1207
1254
|
return False, "Please use FFmpeg from https://www.ffmpeg.org in place of FFmpeg from Libav project."
|
|
@@ -1223,43 +1270,24 @@ def check_ffmpeg_path() -> Tuple[bool, str]:
|
|
|
1223
1270
|
str: if bool True returns ffmpegpath else returns error message
|
|
1224
1271
|
"""
|
|
1225
1272
|
|
|
1273
|
+
# search embedded ffmpeg
|
|
1226
1274
|
if sys.platform.startswith("linux") or sys.platform.startswith("darwin"):
|
|
1227
|
-
|
|
1228
|
-
|
|
1229
|
-
|
|
1230
|
-
ffmpeg_path = pl.Path(sys.argv[0]).resolve().parent / "boris" / "misc" / "ffmpeg"
|
|
1231
|
-
if sys.argv[0].endswith("__main__.py"):
|
|
1232
|
-
ffmpeg_path = pl.Path(sys.argv[0]).resolve().parent / "misc" / "ffmpeg"
|
|
1233
|
-
|
|
1234
|
-
if not ffmpeg_path.is_file():
|
|
1235
|
-
# search global ffmpeg
|
|
1236
|
-
ffmpeg_path = "ffmpeg"
|
|
1237
|
-
|
|
1238
|
-
# test ffmpeg
|
|
1239
|
-
r, msg = test_ffmpeg_path(str(ffmpeg_path))
|
|
1240
|
-
if r:
|
|
1241
|
-
return True, str(ffmpeg_path)
|
|
1242
|
-
else:
|
|
1243
|
-
return False, "FFmpeg is not available"
|
|
1275
|
+
ffmpeg_executable = pl.Path("ffmpeg")
|
|
1276
|
+
elif sys.platform.startswith("win"):
|
|
1277
|
+
ffmpeg_executable = pl.Path("ffmpeg.exe")
|
|
1244
1278
|
|
|
1245
|
-
|
|
1246
|
-
|
|
1247
|
-
|
|
1248
|
-
|
|
1249
|
-
|
|
1250
|
-
|
|
1251
|
-
|
|
1252
|
-
|
|
1253
|
-
|
|
1254
|
-
|
|
1255
|
-
|
|
1256
|
-
|
|
1257
|
-
# test ffmpeg
|
|
1258
|
-
r, msg = test_ffmpeg_path(str(ffmpeg_path))
|
|
1259
|
-
if r:
|
|
1260
|
-
return True, str(ffmpeg_path)
|
|
1261
|
-
else:
|
|
1262
|
-
return False, "FFmpeg is not available"
|
|
1279
|
+
ffmpeg_path = pl.Path(__file__).parent / "misc" / ffmpeg_executable
|
|
1280
|
+
|
|
1281
|
+
if not ffmpeg_path.is_file():
|
|
1282
|
+
# search global ffmpeg
|
|
1283
|
+
ffmpeg_path = ffmpeg_executable
|
|
1284
|
+
|
|
1285
|
+
# test ffmpeg
|
|
1286
|
+
r, msg = test_ffmpeg_path(str(ffmpeg_path))
|
|
1287
|
+
if r:
|
|
1288
|
+
return True, str(ffmpeg_path)
|
|
1289
|
+
else:
|
|
1290
|
+
return False, "FFmpeg is not available"
|
|
1263
1291
|
|
|
1264
1292
|
|
|
1265
1293
|
def smart_size_format(n: Union[float, int, str, None]) -> str:
|
|
@@ -1281,6 +1309,73 @@ def smart_size_format(n: Union[float, int, str, None]) -> str:
|
|
|
1281
1309
|
return f"{n / 1_000_000_000:,.1f} Gb"
|
|
1282
1310
|
|
|
1283
1311
|
|
|
1312
|
+
def get_systeminfo() -> str:
|
|
1313
|
+
"""
|
|
1314
|
+
returns info about the system
|
|
1315
|
+
"""
|
|
1316
|
+
|
|
1317
|
+
mpv_lib_version_, mpv_lib_file_path, mpv_api_version = mpv_lib_version()
|
|
1318
|
+
|
|
1319
|
+
system_info = (
|
|
1320
|
+
f"BORIS version: {version.__version__}\n"
|
|
1321
|
+
f"OS: {platform.uname().system} {platform.uname().release} {platform.uname().version}\n"
|
|
1322
|
+
f"CPU: {platform.uname().machine} {platform.uname().processor}\n"
|
|
1323
|
+
f"Python {platform.python_version()} ({'64-bit' if sys.maxsize > 2**32 else '32-bit'})\n"
|
|
1324
|
+
f"Qt {qVersion()} - PySide {pyside6_version}\n"
|
|
1325
|
+
f"MPV library version: {mpv_lib_version_}\n"
|
|
1326
|
+
f"MPV API version: {mpv_api_version}\n"
|
|
1327
|
+
f"MPV library file path: {mpv_lib_file_path}\n\n"
|
|
1328
|
+
)
|
|
1329
|
+
|
|
1330
|
+
r, memory = mem_info()
|
|
1331
|
+
if not r:
|
|
1332
|
+
system_info += (
|
|
1333
|
+
f"Memory (RAM) Total: {memory.get('total_memory', 'Not available'):.2f} Mb "
|
|
1334
|
+
f"Free: {memory.get('free_memory', 'Not available'):.2f} Mb\n\n"
|
|
1335
|
+
)
|
|
1336
|
+
|
|
1337
|
+
return system_info
|
|
1338
|
+
|
|
1339
|
+
"""
|
|
1340
|
+
# system info
|
|
1341
|
+
systeminfo = ""
|
|
1342
|
+
if sys.platform.startswith("win"):
|
|
1343
|
+
# systeminfo = subprocess.getoutput("systeminfo")
|
|
1344
|
+
systeminfo = subprocess.run("systeminfo /FO csv /NH", capture_output=True, text=True, encoding="mbcs", shell=True).stdout
|
|
1345
|
+
|
|
1346
|
+
import csv
|
|
1347
|
+
from io import StringIO
|
|
1348
|
+
|
|
1349
|
+
# Parse it as CSV
|
|
1350
|
+
f = StringIO(systeminfo)
|
|
1351
|
+
reader = csv.reader(f)
|
|
1352
|
+
parsed_data = list(reader)[0]
|
|
1353
|
+
# Print specific fields by index
|
|
1354
|
+
info_to_show = ""
|
|
1355
|
+
info_to_show += f"Computer Name: {parsed_data[0]}\n"
|
|
1356
|
+
info_to_show += f"OS Name: {parsed_data[1]}\n"
|
|
1357
|
+
info_to_show += f"OS Version: {parsed_data[2]}\n"
|
|
1358
|
+
info_to_show += f"System Manufacturer: {parsed_data[11]}\n"
|
|
1359
|
+
info_to_show += f"System Model: {parsed_data[12]}\n"
|
|
1360
|
+
info_to_show += f"Processor: {parsed_data[14]}\n"
|
|
1361
|
+
info_to_show += f"Locale: {parsed_data[19]}\n"
|
|
1362
|
+
info_to_show += f"Installed Memory: {parsed_data[22]}\n"
|
|
1363
|
+
|
|
1364
|
+
# info about graphic card
|
|
1365
|
+
graphic_info = subprocess.run(
|
|
1366
|
+
"wmic path win32_videocontroller get name", capture_output=True, text=True, encoding="mbcs", shell=True
|
|
1367
|
+
).stdout
|
|
1368
|
+
info_to_show += graphic_info.replace("\n", "").replace("Name", "Graphic card model")
|
|
1369
|
+
|
|
1370
|
+
systeminfo = info_to_show
|
|
1371
|
+
|
|
1372
|
+
if sys.platform.startswith("linux"):
|
|
1373
|
+
systeminfo = subprocess.getoutput("cat /etc/*rel*; uname -a")
|
|
1374
|
+
|
|
1375
|
+
return systeminfo
|
|
1376
|
+
"""
|
|
1377
|
+
|
|
1378
|
+
|
|
1284
1379
|
def ffprobe_media_analysis(ffmpeg_bin: str, file_name: str) -> dict:
|
|
1285
1380
|
"""
|
|
1286
1381
|
analyse video parameters with ffprobe (if available)
|
|
@@ -1436,8 +1531,8 @@ def accurate_media_analysis(ffmpeg_bin: str, file_name: str) -> dict:
|
|
|
1436
1531
|
|
|
1437
1532
|
ffprobe_results = ffprobe_media_analysis(ffmpeg_bin, file_name)
|
|
1438
1533
|
|
|
1439
|
-
|
|
1440
|
-
|
|
1534
|
+
logger.debug(f"file_name: {file_name}")
|
|
1535
|
+
logger.debug(f"ffprobe_results: {ffprobe_results}")
|
|
1441
1536
|
|
|
1442
1537
|
if ("error" not in ffprobe_results) and (ffprobe_results["bitrate"] is not None):
|
|
1443
1538
|
return ffprobe_results
|
boris/version.py
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
|
+
boris/1.py,sha256=rb6Nstw1vIHlBwMnzExVOlgU2F75Tuf1VYRXBTrZUFg,1082
|
|
1
2
|
boris/__init__.py,sha256=iAtmVMy22TJpMmxVTMSK_6-wXnCbx1ogvWgfYEcbHzU,773
|
|
2
3
|
boris/__main__.py,sha256=ANjTbXgXDoz2nB1tCtOIllfIVotCa602iebACX7rXaE,764
|
|
3
|
-
boris/about.py,sha256=
|
|
4
|
+
boris/about.py,sha256=VPa8zeu0bMb1LRXDq8uUSG_7mSbkb2HTk1AtWbzWQwE,5366
|
|
4
5
|
boris/add_modifier.py,sha256=DWqxkKDBm21QH_kPvhpnltwLtFvPxne0VmZ1SY26hj8,26340
|
|
5
6
|
boris/add_modifier_ui.py,sha256=Y7TLO5uS6zW7zpjXmjA4V_VIp_bFDNtjOTbJ9Q6m-mQ,11601
|
|
6
7
|
boris/advanced_event_filtering.py,sha256=VlvU12mL6xYacZOvJAi5uLpHMcmAw5Pvuvmka-PN29c,15469
|
|
@@ -10,22 +11,22 @@ boris/behaviors_coding_map.py,sha256=xIGJxp2eghrpiGDmYH73eJPERuyc4A_54uT-Got3zTs
|
|
|
10
11
|
boris/boris_cli.py,sha256=n0OiVvZM1gM6E7yKaff9wlgmpAGK4TK052VRi8AabJo,13196
|
|
11
12
|
boris/cmd_arguments.py,sha256=oWb-FvhKLbKJhATlTHy9muWu8XnnUfOZ-3Fmz2M8Yzc,1848
|
|
12
13
|
boris/coding_pad.py,sha256=fBKdp7DDyupySJosIYtqNd8s2E-GruzCgVhDFsoVWKE,10986
|
|
13
|
-
boris/config.py,sha256=
|
|
14
|
-
boris/config_file.py,sha256=
|
|
14
|
+
boris/config.py,sha256=PQXm3gJgdCtPOFKLH65sDGw8sk_cdMP53p6eMrlRJl0,17457
|
|
15
|
+
boris/config_file.py,sha256=bPDDRjtylVJ2ll-FNRjME5iIsIagonZNFns-k9kGW2Q,13545
|
|
15
16
|
boris/connections.py,sha256=rVI18AuXh8cEnnoCKJk0RMWAaiNOpiaS554Okgk3SBY,19383
|
|
16
|
-
boris/converters.py,sha256=
|
|
17
|
+
boris/converters.py,sha256=n6gDM9x2hS-ZOoHLruiifuXxnC7ERsUukiFokhHZPoQ,11678
|
|
17
18
|
boris/converters_ui.py,sha256=uu7LOBV_fKv2DBdOqsqPwjGsjgONr5ODBoscAA-EP48,9900
|
|
18
19
|
boris/cooccurence.py,sha256=tVERC-V8MWjWHlGEfDuu08iS94qjt4do-38jwI62QaY,10367
|
|
19
|
-
boris/core.py,sha256=
|
|
20
|
+
boris/core.py,sha256=jMZkM_VsFD-Yk6Q-8wApWZfo-JKvmvpQo5lY1H_k7Bc,231590
|
|
20
21
|
boris/core_qrc.py,sha256=J0kom27nrmi4-TCDLJZCZbtUAitiXQ4WEDfErawuxt8,639879
|
|
21
22
|
boris/core_ui.py,sha256=SeC26uveDCjrCBLsRPuQ6FaapKfON_HIRcQStEDLhl4,76384
|
|
22
23
|
boris/db_functions.py,sha256=Uw9wWH_Pe-qNzpV1k21YG_jKsoOmfY_iiK_7ARZHGDc,13352
|
|
23
24
|
boris/dev.py,sha256=9pUElbjl9g17rFUJXX5aVSu55_iIKIuDxNdrB0DI_d0,3671
|
|
24
|
-
boris/dialog.py,sha256=
|
|
25
|
+
boris/dialog.py,sha256=LqZ73R9cwiL4qzKyMxeS2G8PKnbVZ0xFvZHw-oSek0M,34039
|
|
25
26
|
boris/duration_widget.py,sha256=GjZgCAMGOcsNjoPiRImEVe6yMkH2vuNoh44ulpd5nlg,6924
|
|
26
|
-
boris/edit_event.py,sha256=
|
|
27
|
-
boris/edit_event_ui.py,sha256=
|
|
28
|
-
boris/event_operations.py,sha256=
|
|
27
|
+
boris/edit_event.py,sha256=IMZnopPALNJHgGenl_kMZjqO_Q9GKtyEcyVq5w5VGyU,8001
|
|
28
|
+
boris/edit_event_ui.py,sha256=qFgt00cejGB6UGC1mFkyZcsIAdvMeYMK0WYjZtJl1T0,9207
|
|
29
|
+
boris/event_operations.py,sha256=bqUZjgJaJ1Z8oTiidG9wfCp2LLUH1Zf4kBDeg_yjC-o,38514
|
|
29
30
|
boris/events_cursor.py,sha256=VPY_ygD0fxE5lp25mcd2l00XQXurCR6hprffF4tKRbU,2078
|
|
30
31
|
boris/events_snapshots.py,sha256=PjWzQvUGQtIcEc_7FDsRphf7fAhhTccQgYc2eQSA65g,27621
|
|
31
32
|
boris/exclusion_matrix.py,sha256=ff88xD6aqc8bpIuj9ZCz9ju_HeqqgibQwoaJrIOJ6RI,5272
|
|
@@ -46,8 +47,8 @@ boris/modifiers_coding_map.py,sha256=oT56ZY_PXhEJsMoblEsyNMAPbDpv7ZMOCnvmt7Ibx_Y
|
|
|
46
47
|
boris/mpv-1.0.3.py,sha256=EXRtzQqFjOn4wMC6482Ilq3fNQ9N1GRP1VxwLzdeaBY,88077
|
|
47
48
|
boris/mpv.py,sha256=EfzIHjPbgewG4w3smEtqEUPZoVwYmMQkL4Q8ZyW-a58,76410
|
|
48
49
|
boris/mpv2.py,sha256=IUI4t4r9GYX7G5OXTjd3RhMMOkDdfal_15buBgksLsk,92152
|
|
49
|
-
boris/observation.py,sha256=
|
|
50
|
-
boris/observation_operations.py,sha256=
|
|
50
|
+
boris/observation.py,sha256=PcyRjeWnDDniug-cJTr9tqfL0lfMQ02hMk4xY7ZxIvk,57029
|
|
51
|
+
boris/observation_operations.py,sha256=6krVy8PrxZ_EUHzUN9FA6Qy17v8QhayVt0uMOMlSDac,106603
|
|
51
52
|
boris/observation_ui.py,sha256=DAnU94QBNvkLuHT6AxTwqSk_D_n6VUhSl8PexZv_dUk,33309
|
|
52
53
|
boris/observations_list.py,sha256=NqwECGHtHYmKhSe-qCfqPmJ24SSfzlXvIXS2i3op_zE,10591
|
|
53
54
|
boris/otx_parser.py,sha256=70QvilzFHXbjAHR88YH0aEXJ3xxheLS5fZGgHFHGpNE,16367
|
|
@@ -63,22 +64,22 @@ boris/plugins.py,sha256=CCS1I44OMkGZqcfLGKNPGfEQXPgngocy5YhWveXQPKM,10029
|
|
|
63
64
|
boris/preferences.py,sha256=qPfd9Tyg7u30kXwVqMOgkdy2RXri9bItRa5U2-ZVQmg,16847
|
|
64
65
|
boris/preferences_ui.py,sha256=D2bFLb3E0m6IwSeqKoItRDiqvPmJGoeXLHF2K02n1Zo,26293
|
|
65
66
|
boris/project.py,sha256=nyXfCDY_rLP3jC1QGv-280jUKgbABqESjOm7I19rJ1U,86432
|
|
66
|
-
boris/project_functions.py,sha256=
|
|
67
|
+
boris/project_functions.py,sha256=7Pf-u7rPKQGWxO2AwLuR4WljxOpuoH6bxsAEkttPCzw,80794
|
|
67
68
|
boris/project_import_export.py,sha256=oBG1CSXfKISsb3TLNT-8BH8kZPAzxIYSNemlLVH1Lh8,38560
|
|
68
69
|
boris/project_ui.py,sha256=yB-ewhHt8S8DTTRIk-dNK2tPMNU24lNji9fDW_Xazu8,38805
|
|
69
70
|
boris/qrc_boris.py,sha256=aH-qUirYY1CGxmTK1SFCPvuZfazIHX4DdUKF1gxZeYM,675008
|
|
70
71
|
boris/qrc_boris5.py,sha256=prnOw7VGXWXRuVCYp_yIrmWhrlG1F9rx-3BQvkPenjY,161608
|
|
71
72
|
boris/select_modifiers.py,sha256=42uG9F75pfPoPJ-blp-vFgmpBpVJtL42FlIxpNpq9z4,13319
|
|
72
|
-
boris/select_observations.py,sha256=
|
|
73
|
+
boris/select_observations.py,sha256=k7c3FNVQW74YGH9oFmtHXRVCRnpKGhjCVk3cQtyLML8,8027
|
|
73
74
|
boris/select_subj_behav.py,sha256=ulXbsRY-AIyQRSwXhVlvkNRS_eqWaCvkDKTTyOLqvoE,11742
|
|
74
|
-
boris/state_events.py,sha256=
|
|
75
|
+
boris/state_events.py,sha256=Vrxn3CxC3yf8aeFE76l24n03qgaQ1QXpMtprYT0pq64,7771
|
|
75
76
|
boris/subjects_pad.py,sha256=lSRRGfLfD10_YpGua8RGVdKhoXlsXawGhNibPkRhuzM,3541
|
|
76
77
|
boris/synthetic_time_budget.py,sha256=3Eb9onMLmgqCLd50CuxV9L8RV2ESzfaMWvPK_bXUMMk,10489
|
|
77
78
|
boris/time_budget_functions.py,sha256=y5He8crz0xsTxVfz0jATwFFQVnPAIrNHja_0sF6NtRE,52551
|
|
78
79
|
boris/time_budget_widget.py,sha256=z-tyITBtIz-KH1H2OdMB5a8x9QQLK7Wu96-zkC6NVDA,43213
|
|
79
80
|
boris/transitions.py,sha256=_aZJfJWv3EBrtmQ7qsdTCayQo6uWU7BXqtQQgflEhr4,12250
|
|
80
|
-
boris/utilities.py,sha256=
|
|
81
|
-
boris/version.py,sha256=
|
|
81
|
+
boris/utilities.py,sha256=suquxdukTUscCy2M3fbR2-OcFtf_vrx4HcQD3i18XYo,56502
|
|
82
|
+
boris/version.py,sha256=elwA5lNbiLkILJCCD7leDvgwYJgZb2gk3T__Uou8fSE,785
|
|
82
83
|
boris/video_equalizer.py,sha256=FartoGghFK-T53zklP70rPKYqTuzL8qdvfGlsOF2wwc,5854
|
|
83
84
|
boris/video_equalizer_ui.py,sha256=1CG3s79eM4JAbaCx3i1ILZXLceb41_gGXlOLNfpBgnw,10142
|
|
84
85
|
boris/video_operations.py,sha256=mh3iR__Sm2KnV44L_sW2pOo3AgLwlM7wiTnnqQiAVs4,9381
|
|
@@ -96,9 +97,9 @@ boris/portion/dict.py,sha256=SyHxc7PfDw2ufNLFQycwJtzmRfL48rDp4UrM2KN7IWc,11282
|
|
|
96
97
|
boris/portion/func.py,sha256=3TkQtFKLfsqntwd27HSGHceFhnXHmT-EbNMqktElC5Q,2174
|
|
97
98
|
boris/portion/interval.py,sha256=bAdUiJjGeUAPgsBAImwNeviiwfQq5odfhFZccAWzOTA,20299
|
|
98
99
|
boris/portion/io.py,sha256=ppNeRpiLNrocF1yzGeuEUIhYMf2LfsR-cji3d0nmvUs,6371
|
|
99
|
-
boris_behav_obs-9.
|
|
100
|
-
boris_behav_obs-9.
|
|
101
|
-
boris_behav_obs-9.
|
|
102
|
-
boris_behav_obs-9.
|
|
103
|
-
boris_behav_obs-9.
|
|
104
|
-
boris_behav_obs-9.
|
|
100
|
+
boris_behav_obs-9.4.dist-info/licenses/LICENSE.TXT,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
|
|
101
|
+
boris_behav_obs-9.4.dist-info/METADATA,sha256=R-ofdWjXC79DgAjKwE-GeB8n_rJBD9uUSnvdo3_3SmI,4512
|
|
102
|
+
boris_behav_obs-9.4.dist-info/WHEEL,sha256=_z0Kb-VmhLeNt2nZ-PsoQBjD25rP0tBwgAyRYD7oTKI,109
|
|
103
|
+
boris_behav_obs-9.4.dist-info/entry_points.txt,sha256=k__8XvFi4vaA4QFvQehCZjYkKmZH34HSAJI2iYCWrMs,52
|
|
104
|
+
boris_behav_obs-9.4.dist-info/top_level.txt,sha256=fJSgm62S7WesiwTorGbOO4nNN0yzgZ3klgfGi3Px4qI,6
|
|
105
|
+
boris_behav_obs-9.4.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|