boris-behav-obs 9.6.2__py2.py3-none-any.whl → 9.6.3__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/analysis_plugins/time_budget.py +0 -4
- boris/behav_coding_map_creator.py +0 -1
- boris/coding_pad.py +0 -2
- boris/core.py +9 -24
- boris/db_functions.py +4 -4
- boris/edit_event.py +0 -9
- boris/export_events.py +63 -71
- boris/gui_utilities.py +0 -1
- boris/modifier_coding_map_creator.py +0 -2
- boris/observation_operations.py +2 -4
- boris/param_panel.py +0 -4
- boris/plot_spectrogram_rt.py +2 -1
- boris/plot_waveform_rt.py +2 -1
- boris/time_budget_functions.py +0 -9
- boris/version.py +2 -2
- boris/video_equalizer.py +0 -2
- boris/view_df.py +0 -2
- boris/write_event.py +0 -9
- {boris_behav_obs-9.6.2.dist-info → boris_behav_obs-9.6.3.dist-info}/METADATA +11 -8
- {boris_behav_obs-9.6.2.dist-info → boris_behav_obs-9.6.3.dist-info}/RECORD +24 -24
- {boris_behav_obs-9.6.2.dist-info → boris_behav_obs-9.6.3.dist-info}/WHEEL +0 -0
- {boris_behav_obs-9.6.2.dist-info → boris_behav_obs-9.6.3.dist-info}/entry_points.txt +0 -0
- {boris_behav_obs-9.6.2.dist-info → boris_behav_obs-9.6.3.dist-info}/licenses/LICENSE.TXT +0 -0
- {boris_behav_obs-9.6.2.dist-info → boris_behav_obs-9.6.3.dist-info}/top_level.txt +0 -0
boris/coding_pad.py
CHANGED
|
@@ -261,8 +261,6 @@ def show_coding_pad(self):
|
|
|
261
261
|
self.codingpad.setWindowFlags(Qt.WindowStaysOnTopHint)
|
|
262
262
|
self.codingpad.sendEventSignal.connect(self.signal_from_widget)
|
|
263
263
|
|
|
264
|
-
print(f"{self.signal_from_widget=}")
|
|
265
|
-
|
|
266
264
|
self.codingpad.clickSignal.connect(self.click_signal_from_coding_pad)
|
|
267
265
|
self.codingpad.close_signal.connect(self.close_signal_from_coding_pad)
|
|
268
266
|
self.codingpad.show()
|
boris/core.py
CHANGED
|
@@ -205,7 +205,6 @@ class TableModel(QAbstractTableModel):
|
|
|
205
205
|
if 0 <= row < self.rowCount():
|
|
206
206
|
column = index.column()
|
|
207
207
|
|
|
208
|
-
# print(self._data[:3])
|
|
209
208
|
if cfg.TW_EVENTS_FIELDS[self.observation_type][column] == "type":
|
|
210
209
|
return self._data[row][-1]
|
|
211
210
|
else:
|
|
@@ -2137,39 +2136,47 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
2137
2136
|
set_and_update_pan_and_zoom(new_pan_x, new_pan_y, new_zoom)
|
|
2138
2137
|
|
|
2139
2138
|
if cmd == "MBTN_LEFT_DBL":
|
|
2140
|
-
|
|
2139
|
+
logging.debug("MBTN_LEFT_DBL")
|
|
2141
2140
|
# ZOOM IN x2
|
|
2142
2141
|
do_zoom_in_clicked_coords(zoom_increment=1)
|
|
2143
2142
|
return
|
|
2144
2143
|
if cmd == "MBTN_RIGHT_DBL":
|
|
2144
|
+
logging.debug("MBTN_RIGHT_DBL")
|
|
2145
2145
|
# ZOOM OUT x2
|
|
2146
2146
|
do_zoom_in_clicked_coords(zoom_increment=-1)
|
|
2147
2147
|
return
|
|
2148
2148
|
if cmd == "Ctrl+WHEEL_UP":
|
|
2149
|
+
logging.debug("Ctrl+WHEEL_UP")
|
|
2149
2150
|
# ZOOM IN (3 wheel steps to zoom X2)
|
|
2150
2151
|
do_zoom_in_clicked_coords(zoom_increment=1.0 / 3.0)
|
|
2151
2152
|
return
|
|
2152
2153
|
if cmd == "Ctrl+WHEEL_DOWN":
|
|
2154
|
+
logging.debug("Ctrl+WHEEL_DOWN")
|
|
2153
2155
|
# ZOOM OUT (3 wheel steps to zoom X2)
|
|
2154
2156
|
do_zoom_in_clicked_coords(zoom_increment=-1.0 / 3.0)
|
|
2155
2157
|
return
|
|
2156
2158
|
if cmd == "WHEEL_UP":
|
|
2159
|
+
logging.debug("WHEEL_UP")
|
|
2157
2160
|
# PAN UP (VIDEO MOVES DOWN)
|
|
2158
2161
|
do_pan_in_clicked_coords(pan_x_increment=0, pan_y_increment=+0.01)
|
|
2159
2162
|
return
|
|
2160
2163
|
if cmd == "WHEEL_DOWN":
|
|
2164
|
+
logging.debug("WHEEL_DOWN")
|
|
2161
2165
|
# PAN DOWN (VIDEO MOVES UP)
|
|
2162
2166
|
do_pan_in_clicked_coords(pan_x_increment=0, pan_y_increment=-0.01)
|
|
2163
2167
|
return
|
|
2164
2168
|
if cmd == "Shift+WHEEL_UP":
|
|
2169
|
+
logging.debug("Shift+WHEEL_UP")
|
|
2165
2170
|
# PAN LEFT (VIDEO MOVES TO THE RIGHT)
|
|
2166
2171
|
do_pan_in_clicked_coords(pan_x_increment=+0.01, pan_y_increment=0)
|
|
2167
2172
|
return
|
|
2168
2173
|
if cmd == "Shift+WHEEL_DOWN":
|
|
2174
|
+
logging.debug("Shift+WHEEL_DOWN")
|
|
2169
2175
|
# PAN RIGHT (VIDEO MOVES TO THE LEFT)
|
|
2170
2176
|
do_pan_in_clicked_coords(pan_x_increment=-0.01, pan_y_increment=0)
|
|
2171
2177
|
return
|
|
2172
2178
|
if cmd == "Shift+MBTN_LEFT":
|
|
2179
|
+
logging.debug("Shift+MBTN_LEFT")
|
|
2173
2180
|
# RESET PAN AND ZOOM TO DEFAULT
|
|
2174
2181
|
set_and_update_pan_and_zoom(pan_x=0, pan_y=0, zoom=0)
|
|
2175
2182
|
return
|
|
@@ -3745,21 +3752,10 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
3745
3752
|
|
|
3746
3753
|
# calculate time for current media file in case of many queued media files
|
|
3747
3754
|
|
|
3748
|
-
print(mediaFileIdx_s)
|
|
3749
|
-
print(type(eventtime_s))
|
|
3750
|
-
print(durations)
|
|
3751
|
-
|
|
3752
3755
|
eventtime_onmedia_s = round(eventtime_s - util.float2decimal(sum(durations[0:mediaFileIdx_s])), 3)
|
|
3753
3756
|
eventtime_onmedia_e = round(eventtime_e - util.float2decimal(sum(durations[0:mediaFileIdx_e])), 3)
|
|
3754
3757
|
|
|
3755
|
-
print(row_s, media_path_s, eventtime_s, eventtime_onmedia_s)
|
|
3756
|
-
print(self.pj[cfg.OBSERVATIONS][self.observationId][cfg.EVENTS][row_s])
|
|
3757
|
-
|
|
3758
|
-
print(row_e, media_path_e, eventtime_e, eventtime_onmedia_e)
|
|
3759
|
-
print(self.pj[cfg.OBSERVATIONS][self.observationId][cfg.EVENTS][row_e])
|
|
3760
|
-
|
|
3761
3758
|
if media_path_s != media_path_e:
|
|
3762
|
-
print("events are located on 2 different media files")
|
|
3763
3759
|
return
|
|
3764
3760
|
|
|
3765
3761
|
media_path = media_path_s
|
|
@@ -3770,7 +3766,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
3770
3766
|
if "BORISEXTERNAL" in os.environ:
|
|
3771
3767
|
external_command_template = os.environ["BORISEXTERNAL"]
|
|
3772
3768
|
else:
|
|
3773
|
-
print("BORISEXTERNAL env var not defined")
|
|
3774
3769
|
return
|
|
3775
3770
|
|
|
3776
3771
|
external_command = external_command_template.format(
|
|
@@ -3853,11 +3848,6 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
3853
3848
|
|
|
3854
3849
|
time_, cumulative_time = self.get_obs_time()
|
|
3855
3850
|
|
|
3856
|
-
"""
|
|
3857
|
-
print(time_)
|
|
3858
|
-
print(cumulative_time)
|
|
3859
|
-
"""
|
|
3860
|
-
|
|
3861
3851
|
if self.pj[cfg.OBSERVATIONS][self.observationId].get(cfg.MEDIA_CREATION_DATE_AS_OFFSET, False):
|
|
3862
3852
|
write_event.write_event(self, event, time_)
|
|
3863
3853
|
else:
|
|
@@ -5222,25 +5212,20 @@ class MainWindow(QMainWindow, Ui_MainWindow):
|
|
|
5222
5212
|
if (not self.find_dialog.cbFindInSelectedEvents.isChecked()) or (
|
|
5223
5213
|
self.find_dialog.cbFindInSelectedEvents.isChecked() and event_idx in self.find_dialog.rowsToFind
|
|
5224
5214
|
):
|
|
5225
|
-
print(f"{event=}")
|
|
5226
|
-
|
|
5227
5215
|
# search only on filtered events
|
|
5228
5216
|
if event_idx not in self.tv_idx2events_idx:
|
|
5229
5217
|
continue
|
|
5230
5218
|
|
|
5231
5219
|
for idx in fields_list:
|
|
5232
|
-
print(f"{idx=}")
|
|
5233
5220
|
if (self.find_dialog.cb_case_sensitive.isChecked() and self.find_dialog.findText.text() in event[idx]) or (
|
|
5234
5221
|
not self.find_dialog.cb_case_sensitive.isChecked()
|
|
5235
5222
|
and self.find_dialog.findText.text().upper() in event[idx].upper()
|
|
5236
5223
|
):
|
|
5237
5224
|
self.find_dialog.currentIdx = event_idx
|
|
5238
5225
|
|
|
5239
|
-
# self.twEvents.scrollToItem(self.twEvents.item(event_idx, 0))
|
|
5240
5226
|
index = self.tv_events.model().index(event_idx, 0)
|
|
5241
5227
|
self.tv_events.scrollTo(index, QAbstractItemView.EnsureVisible)
|
|
5242
5228
|
self.tv_events.selectRow(event_idx)
|
|
5243
|
-
# self.twEvents.selectRow(event_idx)
|
|
5244
5229
|
return
|
|
5245
5230
|
|
|
5246
5231
|
if msg != "FIND_FROM_BEGINING":
|
boris/db_functions.py
CHANGED
|
@@ -188,7 +188,7 @@ def load_aggregated_events_in_db(
|
|
|
188
188
|
selected_behaviors = sorted([pj[cfg.ETHOGRAM][x][cfg.BEHAVIOR_CODE] for x in pj[cfg.ETHOGRAM]])
|
|
189
189
|
|
|
190
190
|
# check if state events are paired
|
|
191
|
-
out = ""
|
|
191
|
+
out: str = ""
|
|
192
192
|
for obs_id in selected_observations:
|
|
193
193
|
r, msg = project_functions.check_state_events_obs(obs_id, pj[cfg.ETHOGRAM], pj[cfg.OBSERVATIONS][obs_id], cfg.HHMMSS)
|
|
194
194
|
if not r:
|
|
@@ -212,11 +212,11 @@ def load_aggregated_events_in_db(
|
|
|
212
212
|
|
|
213
213
|
db = sqlite3.connect(":memory:")
|
|
214
214
|
|
|
215
|
-
"""
|
|
216
215
|
# only for debugging
|
|
216
|
+
"""
|
|
217
217
|
import os
|
|
218
|
-
os.system("rm /tmp/ramdisk/
|
|
219
|
-
db = sqlite3.connect("/tmp/ramdisk/
|
|
218
|
+
os.system("rm /tmp/ramdisk/aggregated_events.sqlite")
|
|
219
|
+
db = sqlite3.connect("/tmp/ramdisk/aggregated_events.sqlite", isolation_level=None)
|
|
220
220
|
"""
|
|
221
221
|
|
|
222
222
|
db.row_factory = sqlite3.Row
|
boris/edit_event.py
CHANGED
|
@@ -128,8 +128,6 @@ class DlgEditEvent(QDialog, Ui_Form):
|
|
|
128
128
|
set time to current media time
|
|
129
129
|
"""
|
|
130
130
|
|
|
131
|
-
print(f"{self.current_time=}")
|
|
132
|
-
|
|
133
131
|
if self.observation_type in (cfg.LIVE, cfg.MEDIA):
|
|
134
132
|
self.time_widget.set_time(dec(float(self.current_time)))
|
|
135
133
|
|
|
@@ -137,13 +135,6 @@ class DlgEditEvent(QDialog, Ui_Form):
|
|
|
137
135
|
if self.exif_date_time is not None:
|
|
138
136
|
self.time_widget.set_time(dec(self.exif_date_time))
|
|
139
137
|
|
|
140
|
-
# def frame_idx_na(self):
|
|
141
|
-
# """
|
|
142
|
-
# set/unset frame index NA
|
|
143
|
-
# """
|
|
144
|
-
# self.lb_frame_idx.setEnabled(not self.cb_set_frame_idx_na.isChecked())
|
|
145
|
-
# self.sb_frame_idx.setEnabled(not self.cb_set_frame_idx_na.isChecked())
|
|
146
|
-
|
|
147
138
|
def time_na(self):
|
|
148
139
|
"""
|
|
149
140
|
set/unset time to NA
|
boris/export_events.py
CHANGED
|
@@ -702,7 +702,7 @@ def export_events_as_textgrid(self) -> None:
|
|
|
702
702
|
if not export_dir:
|
|
703
703
|
return
|
|
704
704
|
|
|
705
|
-
mem_command = ""
|
|
705
|
+
mem_command: str = ""
|
|
706
706
|
|
|
707
707
|
# see https://www.fon.hum.uva.nl/praat/manual/TextGrid_file_formats.html
|
|
708
708
|
|
|
@@ -795,6 +795,7 @@ def export_events_as_textgrid(self) -> None:
|
|
|
795
795
|
max_time = float(obs_interval[1]) + offset if obs_interval[1] != 0 else float(max_media_duration)
|
|
796
796
|
|
|
797
797
|
# delete events outside time interval
|
|
798
|
+
|
|
798
799
|
cursor.execute(
|
|
799
800
|
"DELETE FROM aggregated_events WHERE observation = ? AND (start < ? AND stop < ?) OR (start > ? AND stop > ?)",
|
|
800
801
|
(
|
|
@@ -838,38 +839,30 @@ def export_events_as_textgrid(self) -> None:
|
|
|
838
839
|
|
|
839
840
|
next_obs: bool = False
|
|
840
841
|
|
|
841
|
-
|
|
842
|
-
total_media_duration = round(
|
|
843
|
-
observation_operations.observation_total_length(self.pj[cfg.OBSERVATIONS][obs_id]), 3
|
|
844
|
-
)
|
|
845
|
-
"""
|
|
846
|
-
|
|
842
|
+
# number of items for size parameter
|
|
847
843
|
cursor.execute(
|
|
848
844
|
(
|
|
849
|
-
"SELECT COUNT(
|
|
850
|
-
"WHERE observation = ? AND subject IN ({})
|
|
851
|
-
",".join(["?"] * len(parameters[cfg.SELECTED_SUBJECTS]))
|
|
852
|
-
)
|
|
845
|
+
"SELECT COUNT(*) FROM (SELECT * FROM aggregated_events "
|
|
846
|
+
f"WHERE observation = ? AND subject IN ({','.join(['?'] * len(parameters[cfg.SELECTED_SUBJECTS]))}) GROUP BY subject, behavior) "
|
|
853
847
|
),
|
|
854
848
|
[obs_id] + parameters[cfg.SELECTED_SUBJECTS],
|
|
855
849
|
)
|
|
856
850
|
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
subjectsMax = max_time
|
|
851
|
+
subjects_num = int(cursor.fetchone()[0])
|
|
852
|
+
subjects_max = max_time
|
|
860
853
|
|
|
861
854
|
out = (
|
|
862
855
|
'File type = "ooTextFile"\n'
|
|
863
856
|
'Object class = "TextGrid"\n'
|
|
864
857
|
"\n"
|
|
865
858
|
f"xmin = 0.0\n"
|
|
866
|
-
f"xmax = {
|
|
859
|
+
f"xmax = {subjects_max}\n"
|
|
867
860
|
"tiers? <exists>\n"
|
|
868
|
-
f"size = {
|
|
861
|
+
f"size = {subjects_num}\n"
|
|
869
862
|
"item []:\n"
|
|
870
863
|
)
|
|
871
864
|
|
|
872
|
-
subject_index = 0
|
|
865
|
+
subject_index: int = 0
|
|
873
866
|
for subject in parameters[cfg.SELECTED_SUBJECTS]:
|
|
874
867
|
if subject not in [
|
|
875
868
|
x[cfg.EVENT_SUBJECT_FIELD_IDX] if x[cfg.EVENT_SUBJECT_FIELD_IDX] else cfg.NO_FOCAL_SUBJECT
|
|
@@ -877,7 +870,8 @@ def export_events_as_textgrid(self) -> None:
|
|
|
877
870
|
]:
|
|
878
871
|
continue
|
|
879
872
|
|
|
880
|
-
intervalsMin
|
|
873
|
+
intervalsMin = min_time
|
|
874
|
+
intervalsMax = max_time
|
|
881
875
|
|
|
882
876
|
# STATE events
|
|
883
877
|
cursor.execute(
|
|
@@ -892,68 +886,66 @@ def export_events_as_textgrid(self) -> None:
|
|
|
892
886
|
{"start": util.float2decimal(r["start"]), "stop": util.float2decimal(r["stop"]), "code": r["behavior"]}
|
|
893
887
|
for r in cursor.fetchall()
|
|
894
888
|
]
|
|
895
|
-
if
|
|
896
|
-
|
|
889
|
+
if rows:
|
|
890
|
+
out += interval_subject_header
|
|
897
891
|
|
|
898
|
-
|
|
892
|
+
count = 0
|
|
899
893
|
|
|
900
|
-
|
|
901
|
-
|
|
902
|
-
|
|
903
|
-
|
|
904
|
-
|
|
905
|
-
|
|
906
|
-
|
|
907
|
-
|
|
908
|
-
|
|
909
|
-
|
|
910
|
-
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
"It is not possible to create the Praat TextGrid file."
|
|
894
|
+
# check if 1st behavior starts at the beginning
|
|
895
|
+
if rows[0]["start"] > 0:
|
|
896
|
+
count += 1
|
|
897
|
+
out += interval_template.format(count=count, name="null", xmin=0.0, xmax=rows[0]["start"])
|
|
898
|
+
|
|
899
|
+
for idx, row in enumerate(rows):
|
|
900
|
+
# check if events are overlapping
|
|
901
|
+
if (idx + 1 < len(rows)) and (row["stop"] > rows[idx + 1]["start"]):
|
|
902
|
+
self.results.ptText.appendHtml(
|
|
903
|
+
(
|
|
904
|
+
f"The events overlap for subject <b>{subject}</b> in the observation <b>{obs_id}</b>. "
|
|
905
|
+
"It is not possible to create the Praat TextGrid file."
|
|
906
|
+
)
|
|
914
907
|
)
|
|
915
|
-
|
|
916
|
-
QApplication.processEvents()
|
|
908
|
+
QApplication.processEvents()
|
|
917
909
|
|
|
918
|
-
|
|
919
|
-
|
|
910
|
+
next_obs = True
|
|
911
|
+
break
|
|
920
912
|
|
|
921
|
-
|
|
913
|
+
count += 1
|
|
922
914
|
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
915
|
+
if (idx + 1 < len(rows)) and (rows[idx + 1]["start"] - dec("0.001") <= row["stop"] < rows[idx + 1]["start"]):
|
|
916
|
+
xmax = rows[idx + 1]["start"]
|
|
917
|
+
else:
|
|
918
|
+
xmax = row["stop"]
|
|
919
|
+
|
|
920
|
+
out += interval_template.format(count=count, name=row["code"], xmin=row["start"], xmax=xmax)
|
|
921
|
+
|
|
922
|
+
# check if no behavior
|
|
923
|
+
if (idx + 1 < len(rows)) and (row["stop"] < rows[idx + 1]["start"] - dec("0.001")):
|
|
924
|
+
count += 1
|
|
925
|
+
out += interval_template.format(
|
|
926
|
+
count=count,
|
|
927
|
+
name="null",
|
|
928
|
+
xmin=row["stop"],
|
|
929
|
+
xmax=rows[idx + 1]["start"],
|
|
930
|
+
)
|
|
927
931
|
|
|
928
|
-
|
|
932
|
+
if next_obs:
|
|
933
|
+
break
|
|
929
934
|
|
|
930
|
-
# check if
|
|
931
|
-
if
|
|
935
|
+
# check if last event ends at the end of media file
|
|
936
|
+
if rows[-1]["stop"] < max_time:
|
|
932
937
|
count += 1
|
|
933
|
-
out += interval_template.format(
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
937
|
-
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
944
|
-
if rows[-1]["stop"] < max_time:
|
|
945
|
-
count += 1
|
|
946
|
-
out += interval_template.format(count=count, name="null", xmin=rows[-1]["stop"], xmax=max_time)
|
|
947
|
-
|
|
948
|
-
# add info
|
|
949
|
-
subject_index += 1
|
|
950
|
-
out = out.format(
|
|
951
|
-
subject_index=subject_index,
|
|
952
|
-
subject=subject,
|
|
953
|
-
intervalsSize=count,
|
|
954
|
-
intervalsMin=intervalsMin,
|
|
955
|
-
intervalsMax=intervalsMax,
|
|
956
|
-
)
|
|
938
|
+
out += interval_template.format(count=count, name="null", xmin=rows[-1]["stop"], xmax=max_time)
|
|
939
|
+
|
|
940
|
+
# add info
|
|
941
|
+
subject_index += 1
|
|
942
|
+
out = out.format(
|
|
943
|
+
subject_index=subject_index,
|
|
944
|
+
subject=subject,
|
|
945
|
+
intervalsSize=count,
|
|
946
|
+
intervalsMin=intervalsMin,
|
|
947
|
+
intervalsMax=intervalsMax,
|
|
948
|
+
)
|
|
957
949
|
|
|
958
950
|
# POINT events
|
|
959
951
|
cursor.execute(
|
boris/gui_utilities.py
CHANGED
|
@@ -66,7 +66,6 @@ def restore_geometry(widget: QWidget, widget_name: str, default_width_height):
|
|
|
66
66
|
ini_file_path = pl.Path.home() / pl.Path(".boris")
|
|
67
67
|
if ini_file_path.is_file():
|
|
68
68
|
settings = QSettings(str(ini_file_path), QSettings.IniFormat)
|
|
69
|
-
print(settings.value(f"{widget_name} geometry"))
|
|
70
69
|
widget.restoreGeometry(settings.value(f"{widget_name} geometry"))
|
|
71
70
|
logging.debug(f"geometry restored for {widget_name} {settings.value(f'{widget_name} geometry')}")
|
|
72
71
|
else:
|
boris/observation_operations.py
CHANGED
|
@@ -1301,10 +1301,8 @@ def init_mpv(self):
|
|
|
1301
1301
|
|
|
1302
1302
|
logging.debug("function: init_mpv")
|
|
1303
1303
|
|
|
1304
|
-
""
|
|
1305
|
-
print(f"{self.winId()=}")
|
|
1306
|
-
print(f"{str(int(self.winId()))=}")
|
|
1307
|
-
"""
|
|
1304
|
+
# print(f"{self.winId()=}")
|
|
1305
|
+
# print(f"{str(int(self.winId()))=}")
|
|
1308
1306
|
|
|
1309
1307
|
subprocess.Popen(
|
|
1310
1308
|
[
|
boris/param_panel.py
CHANGED
|
@@ -96,12 +96,8 @@ class Param_panel(QDialog, Ui_Dialog):
|
|
|
96
96
|
# Set start_time and end_time widgets values even if it is not shown with
|
|
97
97
|
# more than 1 observation as some analyses might use it (eg: advanced event filtering)
|
|
98
98
|
|
|
99
|
-
print(f"{self.end_interval=}")
|
|
100
|
-
|
|
101
99
|
end_interval = self.end_interval if self.end_interval != 0 else self.media_duration
|
|
102
100
|
|
|
103
|
-
print(f"{end_interval=}")
|
|
104
|
-
|
|
105
101
|
self.start_time.set_time(self.start_interval)
|
|
106
102
|
self.end_time.set_time(end_interval)
|
|
107
103
|
self.frm_time_interval.setEnabled(False)
|
boris/plot_spectrogram_rt.py
CHANGED
|
@@ -129,7 +129,8 @@ class Plot_spectrogram_RT(QWidget):
|
|
|
129
129
|
try:
|
|
130
130
|
wav = wave.open(wav_file, "r")
|
|
131
131
|
frames = wav.readframes(-1)
|
|
132
|
-
sound_info = np.fromstring(frames, dtype=np.int16)
|
|
132
|
+
# sound_info = np.fromstring(frames, dtype=np.int16)
|
|
133
|
+
sound_info = np.frombuffer(frames, dtype=np.int16)
|
|
133
134
|
frame_rate = wav.getframerate()
|
|
134
135
|
wav.close()
|
|
135
136
|
return sound_info, frame_rate
|
boris/plot_waveform_rt.py
CHANGED
|
@@ -109,7 +109,8 @@ class Plot_waveform_RT(QWidget):
|
|
|
109
109
|
try:
|
|
110
110
|
wav = wave.open(wav_file, "r")
|
|
111
111
|
frames = wav.readframes(-1)
|
|
112
|
-
signal = np.fromstring(frames, dtype=np.int16)
|
|
112
|
+
# signal = np.fromstring(frames, dtype=np.int16)
|
|
113
|
+
signal = np.frombuffer(frames, dtype=np.int16)
|
|
113
114
|
frame_rate = wav.getframerate()
|
|
114
115
|
wav.close()
|
|
115
116
|
return signal, frame_rate
|
boris/time_budget_functions.py
CHANGED
|
@@ -1021,15 +1021,6 @@ def time_budget_analysis(
|
|
|
1021
1021
|
continue
|
|
1022
1022
|
|
|
1023
1023
|
if len(rows) % 2: # unpaired events
|
|
1024
|
-
"""
|
|
1025
|
-
print()
|
|
1026
|
-
print(f"{subject=}")
|
|
1027
|
-
print(f"{behavior=}")
|
|
1028
|
-
print()
|
|
1029
|
-
for row in rows:
|
|
1030
|
-
print(f"{row['observation']=} {row['occurence']=}")
|
|
1031
|
-
print()
|
|
1032
|
-
"""
|
|
1033
1024
|
out_cat.append(
|
|
1034
1025
|
{
|
|
1035
1026
|
"subject": subject,
|
boris/version.py
CHANGED
boris/video_equalizer.py
CHANGED
|
@@ -60,8 +60,6 @@ class Video_equalizer(QDialog, Ui_Equalizer):
|
|
|
60
60
|
if n_player not in self.equalizer:
|
|
61
61
|
return
|
|
62
62
|
|
|
63
|
-
print(self.equalizer)
|
|
64
|
-
|
|
65
63
|
self.hs_brightness.setValue(self.equalizer[n_player]["hs_brightness"])
|
|
66
64
|
self.lb_brightness.setText(str(self.equalizer[n_player]["hs_brightness"]))
|
|
67
65
|
|
boris/view_df.py
CHANGED
|
@@ -49,8 +49,6 @@ class View_df(QWidget, Ui_Form):
|
|
|
49
49
|
self.lb_plugin_info.setText(f"{plugin_name} v. {plugin_version}")
|
|
50
50
|
self.setWindowTitle(f"{plugin_name} v. {plugin_version}")
|
|
51
51
|
|
|
52
|
-
# print(f"{self.df=}")
|
|
53
|
-
|
|
54
52
|
self.pb_close.clicked.connect(self.close)
|
|
55
53
|
self.pb_save.clicked.connect(self.save)
|
|
56
54
|
|
boris/write_event.py
CHANGED
|
@@ -68,8 +68,6 @@ def write_event(self, event: dict, mem_time: dec) -> int:
|
|
|
68
68
|
)
|
|
69
69
|
return 1
|
|
70
70
|
|
|
71
|
-
print(f"{mem_time=}")
|
|
72
|
-
|
|
73
71
|
if mem_time < self.pj[cfg.OBSERVATIONS][self.observationId].get(cfg.OBSERVATION_TIME_INTERVAL, [0, 0])[0]:
|
|
74
72
|
_ = dialog.MessageDialog(
|
|
75
73
|
cfg.programName,
|
|
@@ -104,12 +102,6 @@ def write_event(self, event: dict, mem_time: dec) -> int:
|
|
|
104
102
|
|
|
105
103
|
# add media creation date/time
|
|
106
104
|
|
|
107
|
-
"""
|
|
108
|
-
print(f"{media_file_name=}")
|
|
109
|
-
print(f"{mem_time=}")
|
|
110
|
-
"""
|
|
111
|
-
print(f"{self.pj[cfg.OBSERVATIONS][self.observationId][cfg.MEDIA_INFO]=}")
|
|
112
|
-
|
|
113
105
|
mem_time += dec(
|
|
114
106
|
self.pj[cfg.OBSERVATIONS][self.observationId][cfg.MEDIA_INFO][cfg.MEDIA_CREATION_TIME][media_file_name_posix]
|
|
115
107
|
)
|
|
@@ -413,7 +405,6 @@ def write_event(self, event: dict, mem_time: dec) -> int:
|
|
|
413
405
|
r = modifiers_selector.exec_()
|
|
414
406
|
if r:
|
|
415
407
|
selected_modifiers = modifiers_selector.get_modifiers()
|
|
416
|
-
# print(f"{selected_modifiers=}")
|
|
417
408
|
|
|
418
409
|
behavior_to_stop_modifier_str: str = ""
|
|
419
410
|
for idx in util.sorted_keys(selected_modifiers):
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: boris-behav-obs
|
|
3
|
-
Version: 9.6.
|
|
3
|
+
Version: 9.6.3
|
|
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
|
|
@@ -19,7 +19,7 @@ Requires-Python: >=3.12
|
|
|
19
19
|
Description-Content-Type: text/markdown
|
|
20
20
|
License-File: LICENSE.TXT
|
|
21
21
|
Requires-Dist: exifread>=3.0.0
|
|
22
|
-
Requires-Dist: numpy
|
|
22
|
+
Requires-Dist: numpy==2.3.2
|
|
23
23
|
Requires-Dist: matplotlib>=3.3.3
|
|
24
24
|
Requires-Dist: pandas>=2.2.2
|
|
25
25
|
Requires-Dist: tablib[cli,html,ods,pandas,xls,xlsx]>=3
|
|
@@ -49,7 +49,7 @@ You can not longer run BORIS natively on MacOS (since v.8). Some alternatives to
|
|
|
49
49
|
|
|
50
50
|
It provides also some analysis tools like time budget and some plotting functions.
|
|
51
51
|
|
|
52
|
-
The BORIS paper has more than [ citations](https://www.boris.unito.it/citations) in peer-reviewed scientific publications.
|
|
53
53
|
|
|
54
54
|
|
|
55
55
|
|
|
@@ -59,13 +59,17 @@ See the official [BORIS web site](https://www.boris.unito.it).
|
|
|
59
59
|
[](https://www.python.org)
|
|
60
60
|

|
|
61
61
|

|
|
62
|
+
[](https://pypi.org/project/boris-behav-obs/)
|
|
63
|
+
|
|
62
64
|
[](https://pepy.tech/project/boris-behav-obs)
|
|
63
65
|

|
|
64
|
-
|
|
65
|
-

|
|
66
|
+

|
|
66
67
|
|
|
68
|
+

|
|
67
69
|
|
|
68
70
|
|
|
71
|
+

|
|
72
|
+
[](https://github.com/olivierfriard/BORIS/stargazers)
|
|
69
73
|
|
|
70
74
|
# Documentation
|
|
71
75
|
|
|
@@ -82,8 +86,7 @@ Some [video tutorials](https://www.boris.unito.it/video_tutorials/) are availabl
|
|
|
82
86
|
# Bug reports and feature requests
|
|
83
87
|
|
|
84
88
|
|
|
85
|
-
To search for bugs, report them or request a feature, please use the
|
|
86
|
-
https://github.com/olivierfriard/BORIS/issues
|
|
89
|
+
To search for bugs, report them or request a feature, please use the [GitHub issues tracker](https://github.com/olivierfriard/BORIS/issues)
|
|
87
90
|
|
|
88
91
|
|
|
89
92
|
|
|
@@ -129,7 +132,7 @@ GNU General Public License for more details.
|
|
|
129
132
|
|
|
130
133
|
Distributed with a [GPL v.3 license](LICENSE.TXT).
|
|
131
134
|
|
|
132
|
-
Copyright (C) 2012-
|
|
135
|
+
Copyright (C) 2012-2025 Olivier Friard
|
|
133
136
|
|
|
134
137
|
|
|
135
138
|
|
|
@@ -4,36 +4,36 @@ boris/about.py,sha256=VPa8zeu0bMb1LRXDq8uUSG_7mSbkb2HTk1AtWbzWQwE,5366
|
|
|
4
4
|
boris/add_modifier.py,sha256=l9LSa_9FAV9CnBgm26tJqhMAdnFoBQafZLyt9pTKmac,26240
|
|
5
5
|
boris/add_modifier_ui.py,sha256=Y7TLO5uS6zW7zpjXmjA4V_VIp_bFDNtjOTbJ9Q6m-mQ,11601
|
|
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=5XGY4AZOsGrOj0xHT-dIeiR5ejBhPShsnYNfIQFEYsU,38788
|
|
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=oWb-FvhKLbKJhATlTHy9muWu8XnnUfOZ-3Fmz2M8Yzc,1848
|
|
12
|
-
boris/coding_pad.py,sha256=
|
|
12
|
+
boris/coding_pad.py,sha256=BaDWYIzoRgl0LHymPDmcBMFfwG7Z0XROqqMwkkADtz0,10940
|
|
13
13
|
boris/config.py,sha256=IbW8PkAFcZIL-8NoSscXSeI82dneLzpywaGXWDcnrWw,17845
|
|
14
14
|
boris/config_file.py,sha256=bPDDRjtylVJ2ll-FNRjME5iIsIagonZNFns-k9kGW2Q,13545
|
|
15
15
|
boris/connections.py,sha256=kqc6jaYNzoJe8crPtfwE-fXTW4nTfB8-PojRzbbLEus,19629
|
|
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=R8oQsjmRh0heo7RmFyZVljTdMub4I_kM_7KGxpg9DDI,230461
|
|
20
20
|
boris/core_qrc.py,sha256=Hz51Xw70ZIlDbYB281nfGtCm43_ItYhamMu2T5X8Tu8,639882
|
|
21
21
|
boris/core_ui.py,sha256=--VDOzUfjsA4TJRw3aFk2CeSL29193vPGLgYJRhQfUY,77143
|
|
22
|
-
boris/db_functions.py,sha256=
|
|
22
|
+
boris/db_functions.py,sha256=TfCJ0Hq0pTFOKrZz3RzdvnR-NKCmrPHU2qL9BSXeeGQ,13379
|
|
23
23
|
boris/dev.py,sha256=9pUElbjl9g17rFUJXX5aVSu55_iIKIuDxNdrB0DI_d0,3671
|
|
24
24
|
boris/dialog.py,sha256=LqZ73R9cwiL4qzKyMxeS2G8PKnbVZ0xFvZHw-oSek0M,34039
|
|
25
25
|
boris/duration_widget.py,sha256=GjZgCAMGOcsNjoPiRImEVe6yMkH2vuNoh44ulpd5nlg,6924
|
|
26
|
-
boris/edit_event.py,sha256=
|
|
26
|
+
boris/edit_event.py,sha256=llfICwuDq4ADKtPlq8dtIN-81jZ92JseUHhUSt5dh6s,7705
|
|
27
27
|
boris/edit_event_ui.py,sha256=qFgt00cejGB6UGC1mFkyZcsIAdvMeYMK0WYjZtJl1T0,9207
|
|
28
28
|
boris/event_operations.py,sha256=bqUZjgJaJ1Z8oTiidG9wfCp2LLUH1Zf4kBDeg_yjC-o,38514
|
|
29
29
|
boris/events_cursor.py,sha256=VPY_ygD0fxE5lp25mcd2l00XQXurCR6hprffF4tKRbU,2078
|
|
30
30
|
boris/events_snapshots.py,sha256=PjWzQvUGQtIcEc_7FDsRphf7fAhhTccQgYc2eQSA65g,27621
|
|
31
31
|
boris/exclusion_matrix.py,sha256=K_o8pEMYRQ3curgRQYkn5hPRksLDitICuwjB7mpVRPA,5269
|
|
32
|
-
boris/export_events.py,sha256=
|
|
32
|
+
boris/export_events.py,sha256=kbGeBFiJzND2K7Y-iUvmhzMDTeyDSY9hwSO1XGJ0ij0,39745
|
|
33
33
|
boris/export_observation.py,sha256=B8ASj6H70xfcTSUHrbcJa6YOYjih2WD4DSiUtXj5eAk,50764
|
|
34
34
|
boris/external_processes.py,sha256=PogE2eEiQLVZ2useMamQMOAeDmMUX_TlIpqPKLMm6Ak,13607
|
|
35
35
|
boris/geometric_measurement.py,sha256=4pI-AYpBSFlJBqS-f8dnkgLtj_Z2E5kwwAdh6WwZ4kk,35049
|
|
36
|
-
boris/gui_utilities.py,sha256=
|
|
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
39
|
boris/irr.py,sha256=n6Y_Y9iEKOf9_7EE_lDRNei7tq2wkFKk_JVflm9UQdk,22335
|
|
@@ -41,24 +41,24 @@ boris/latency.py,sha256=48z9L_A582-wKCfD0M3h0uyYkeL2ezjlQAS_GzeoOe0,9739
|
|
|
41
41
|
boris/measurement_widget.py,sha256=lZV62KtK6TjdoNbKxj3uyNAuL5dfnQnn7mYwzMo-dOM,4480
|
|
42
42
|
boris/media_file.py,sha256=Wnw-PCyAz6CA00zhjrx0UTgXZ0wmHuNlnElV_TzJ_2M,4818
|
|
43
43
|
boris/menu_options.py,sha256=uznHFMtpGRWL6Eig10gJ5tOiypgOr9XVyxRiuCbgN9U,7146
|
|
44
|
-
boris/modifier_coding_map_creator.py,sha256=
|
|
44
|
+
boris/modifier_coding_map_creator.py,sha256=3Ihh75TCNI0KkQKHuosYibAhGbdgjdlRZGmna_KuAjo,33240
|
|
45
45
|
boris/modifiers_coding_map.py,sha256=oT56ZY_PXhEJsMoblEsyNMAPbDpv7ZMOCnvmt7Ibx_Y,4554
|
|
46
46
|
boris/mpv-1.0.3.py,sha256=EXRtzQqFjOn4wMC6482Ilq3fNQ9N1GRP1VxwLzdeaBY,88077
|
|
47
47
|
boris/mpv.py,sha256=EfzIHjPbgewG4w3smEtqEUPZoVwYmMQkL4Q8ZyW-a58,76410
|
|
48
48
|
boris/mpv2.py,sha256=IUI4t4r9GYX7G5OXTjd3RhMMOkDdfal_15buBgksLsk,92152
|
|
49
49
|
boris/observation.py,sha256=10UkVyY8TDySntIX_-H-IsuFdiF6tEcmC6JQUzD6wYg,57139
|
|
50
|
-
boris/observation_operations.py,sha256=
|
|
50
|
+
boris/observation_operations.py,sha256=GSU0C5A7jn44Jzt0V6-2TzqhFtCHTn8XlgG-EZ2Qn90,107853
|
|
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
|
-
boris/param_panel.py,sha256=
|
|
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=_qQyj7eet69gjoQnqagmsC41rk4Zp3cQO1lwEm5uZR4,5638
|
|
57
57
|
boris/plot_data_module.py,sha256=6QbLKfyGp4TYRyHnB9G45y5XrpeXLytcorltEAWfYak,16562
|
|
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=
|
|
60
|
+
boris/plot_spectrogram_rt.py,sha256=wDhnkqwjd2UfCxrfOejOUxoNOqfMNo6vo1JSvYgM-2A,10925
|
|
61
|
+
boris/plot_waveform_rt.py,sha256=RNXhcBzRKnoGoVjRAHsVvOaj0BJbbI2cpCMjMUiGqX0,7534
|
|
62
62
|
boris/plugins.py,sha256=lYR_sLqRMdyGEoSPwaLyVuF50B92k6vR8TlDAE5B4l0,14252
|
|
63
63
|
boris/preferences.py,sha256=gWkqKvKuAAzjNbL3_NdBeaHfNC5xKQVxVZW4J1OwYRg,20763
|
|
64
64
|
boris/preferences_ui.py,sha256=wbo51aBNdcQTJni1DmUM5ZQPOwAtKSkEQam7rRzRS5g,34166
|
|
@@ -74,17 +74,17 @@ boris/select_subj_behav.py,sha256=ulXbsRY-AIyQRSwXhVlvkNRS_eqWaCvkDKTTyOLqvoE,11
|
|
|
74
74
|
boris/state_events.py,sha256=iUrC5ypwIKOnmoq0moDQwtH9-DrgiJ81zL2pMxESucU,7790
|
|
75
75
|
boris/subjects_pad.py,sha256=lSRRGfLfD10_YpGua8RGVdKhoXlsXawGhNibPkRhuzM,3541
|
|
76
76
|
boris/synthetic_time_budget.py,sha256=3Eb9onMLmgqCLd50CuxV9L8RV2ESzfaMWvPK_bXUMMk,10489
|
|
77
|
-
boris/time_budget_functions.py,sha256=
|
|
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
80
|
boris/utilities.py,sha256=dD5HpojqlAGLVkr3YnOsaqfbCMHFYroe040ZchB5WnM,56662
|
|
81
|
-
boris/version.py,sha256=
|
|
82
|
-
boris/video_equalizer.py,sha256=
|
|
81
|
+
boris/version.py,sha256=HGbYNN1RSRh_r7nFEFuDLgzfshiVd5wpkEXEYQi_HEw,787
|
|
82
|
+
boris/video_equalizer.py,sha256=cm2JXe1eAPkqDzxYB2OMKyuveMBdq4a9-gD1bBorbn4,5823
|
|
83
83
|
boris/video_equalizer_ui.py,sha256=1CG3s79eM4JAbaCx3i1ILZXLceb41_gGXlOLNfpBgnw,10142
|
|
84
84
|
boris/video_operations.py,sha256=rXKWndaALaF-yLEPIY_-Z99XRAncZRzRd1sLzwSpbjs,10768
|
|
85
|
-
boris/view_df.py,sha256=
|
|
85
|
+
boris/view_df.py,sha256=fhcNMFFVbQ4ZTpPwN_4Bg66DDIoV25zaPryZUsOxsKg,3338
|
|
86
86
|
boris/view_df_ui.py,sha256=CaMeRH_vQ00CTDDFQn73ZZaS-r8BSTWpL-dMCFqzJ_Q,2775
|
|
87
|
-
boris/write_event.py,sha256=
|
|
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
89
|
boris/analysis_plugins/_latency.py,sha256=9kCdFDtb5Zdao1xFpioi_exm_IxyGm6RlY3Opn6GUFo,2030
|
|
90
90
|
boris/analysis_plugins/irr_cohen_kappa.py,sha256=UtIZ_y5Wm9UbZpGI67a-AszYnH_5DV1LNcff76ChQYg,2253
|
|
@@ -94,16 +94,16 @@ boris/analysis_plugins/irr_weighted_cohen_kappa_with_modifiers.py,sha256=of4EVdU
|
|
|
94
94
|
boris/analysis_plugins/list_of_dataframe_columns.py,sha256=VEiVhxADtyaIKN4JrfFV02TuTAfWhQ60bf1mHVQp27I,437
|
|
95
95
|
boris/analysis_plugins/number_of_occurences.py,sha256=IDyDrdezqvSKT3BlD8QWpSYk8X9nnBBLI80OUnFJ3bY,509
|
|
96
96
|
boris/analysis_plugins/number_of_occurences_by_independent_variable.py,sha256=_7HTKXsyxNfyO69tP8zkQEHzT0C7qHdL1sqBjnUfRQY,1459
|
|
97
|
-
boris/analysis_plugins/time_budget.py,sha256=
|
|
97
|
+
boris/analysis_plugins/time_budget.py,sha256=bzOS0FUJ7P2kQ9d-TxXq2_OCpo-MngGDFeU5aKsniDQ,2188
|
|
98
98
|
boris/portion/__init__.py,sha256=KmMu4q-iIFO5nrVRIP340mEzxzOlZQqaRupiDmS70es,642
|
|
99
99
|
boris/portion/const.py,sha256=JSYZUktIPCekB6qSom1FPfASn-X7w0G5-aNNHKhIZnw,1715
|
|
100
100
|
boris/portion/dict.py,sha256=uNM-LEY52CZ2VNMMW_C9QukoyTvPlQf8vcbGa1lQBHI,11281
|
|
101
101
|
boris/portion/func.py,sha256=mSQr20YS1ug7R1fRqBg8LifjtXDRvJ6Kjc3WOeL9P34,2172
|
|
102
102
|
boris/portion/interval.py,sha256=sOlj3MAGGaB-JxCkigS-n3qw0fY7TANAsXv1pavr8J4,19931
|
|
103
103
|
boris/portion/io.py,sha256=kpq44pw3xnIyAlPwaR5qRHKRdZ72f8HS9YVIWs5k2pk,6367
|
|
104
|
-
boris_behav_obs-9.6.
|
|
105
|
-
boris_behav_obs-9.6.
|
|
106
|
-
boris_behav_obs-9.6.
|
|
107
|
-
boris_behav_obs-9.6.
|
|
108
|
-
boris_behav_obs-9.6.
|
|
109
|
-
boris_behav_obs-9.6.
|
|
104
|
+
boris_behav_obs-9.6.3.dist-info/licenses/LICENSE.TXT,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
|
|
105
|
+
boris_behav_obs-9.6.3.dist-info/METADATA,sha256=afO9LamHovrzbJeX6-3ppvUVgwV-BQFKgiBj5ffWrrQ,4978
|
|
106
|
+
boris_behav_obs-9.6.3.dist-info/WHEEL,sha256=JNWh1Fm1UdwIQV075glCn4MVuCRs0sotJIq-J6rbxCU,109
|
|
107
|
+
boris_behav_obs-9.6.3.dist-info/entry_points.txt,sha256=k__8XvFi4vaA4QFvQehCZjYkKmZH34HSAJI2iYCWrMs,52
|
|
108
|
+
boris_behav_obs-9.6.3.dist-info/top_level.txt,sha256=fJSgm62S7WesiwTorGbOO4nNN0yzgZ3klgfGi3Px4qI,6
|
|
109
|
+
boris_behav_obs-9.6.3.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|