boris-behav-obs 9.0.8__py2.py3-none-any.whl → 9.1.1__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.
@@ -29,7 +29,7 @@ import tablib
29
29
  import pickle
30
30
 
31
31
  from PySide6.QtCore import Qt
32
- from PySide6.QtGui import QColor, QFont
32
+ from PySide6.QtGui import QFont
33
33
  from PySide6.QtWidgets import QApplication, QFileDialog, QListWidgetItem, QMessageBox, QTableWidgetItem
34
34
 
35
35
 
@@ -223,7 +223,7 @@ def select_behaviors(
223
223
  paramPanelWindow.resize(800, 600)
224
224
  paramPanelWindow.setWindowTitle(title)
225
225
  paramPanelWindow.lbBehaviors.setText(text)
226
- for w in [
226
+ for w in (
227
227
  paramPanelWindow.lwSubjects,
228
228
  paramPanelWindow.pbSelectAllSubjects,
229
229
  paramPanelWindow.pbUnselectAllSubjects,
@@ -233,7 +233,7 @@ def select_behaviors(
233
233
  paramPanelWindow.cbExcludeBehaviors,
234
234
  paramPanelWindow.frm_time,
235
235
  paramPanelWindow.frm_time_bin_size,
236
- ]:
236
+ ):
237
237
  w.setVisible(False)
238
238
 
239
239
  if behavioral_categories:
@@ -318,7 +318,7 @@ def import_ethogram_from_dict(self, project: dict):
318
318
  if self.twBehaviors.rowCount():
319
319
  response = dialog.MessageDialog(
320
320
  cfg.programName,
321
- ("Some behaviors are already configured. " "Do you want to append behaviors or replace them?"),
321
+ ("Some behaviors are already configured. Do you want to append behaviors or replace them?"),
322
322
  [cfg.APPEND, cfg.REPLACE, cfg.CANCEL],
323
323
  )
324
324
  if response == cfg.REPLACE:
@@ -473,7 +473,7 @@ def import_behaviors_from_project(self):
473
473
  import ethogram from a BORIS project file
474
474
  """
475
475
  file_name, _ = QFileDialog.getOpenFileName(
476
- self, "Import behaviors from BORIS project file", "", ("Project files (*.boris *.boris.gz);;" "All files (*)")
476
+ self, "Import behaviors from BORIS project file", "", ("Project files (*.boris *.boris.gz);;All files (*)")
477
477
  )
478
478
  if not file_name:
479
479
  return
@@ -887,7 +887,7 @@ def import_subjects_from_project(self):
887
887
  """
888
888
 
889
889
  file_name, _ = QFileDialog().getOpenFileName(
890
- self, "Import subjects from project file", "", ("Project files (*.boris *.boris.gz);;" "All files (*)")
890
+ self, "Import subjects from project file", "", ("Project files (*.boris *.boris.gz);;All files (*)")
891
891
  )
892
892
  if not file_name:
893
893
  return
@@ -907,7 +907,7 @@ def import_subjects_from_project(self):
907
907
  if self.twSubjects.rowCount():
908
908
  response = dialog.MessageDialog(
909
909
  cfg.programName,
910
- ("There are subjects already configured. " "Do you want to append subjects or replace them?"),
910
+ ("There are subjects already configured. Do you want to append subjects or replace them?"),
911
911
  [cfg.APPEND, cfg.REPLACE, cfg.CANCEL],
912
912
  )
913
913
 
@@ -941,7 +941,7 @@ def import_subjects_from_text_file(self):
941
941
  if self.twSubjects.rowCount():
942
942
  response = dialog.MessageDialog(
943
943
  cfg.programName,
944
- ("There are subjects already configured. " "Do you want to append subjects or replace them?"),
944
+ ("There are subjects already configured. Do you want to append subjects or replace them?"),
945
945
  [cfg.APPEND, cfg.REPLACE, cfg.CANCEL],
946
946
  )
947
947
 
@@ -1048,7 +1048,7 @@ def import_indep_variables_from_project(self):
1048
1048
  self,
1049
1049
  "Import independent variables from project file",
1050
1050
  "",
1051
- ("Project files (*.boris *.boris.gz);;" "All files (*)"),
1051
+ ("Project files (*.boris *.boris.gz);;All files (*)"),
1052
1052
  )
1053
1053
  if not file_name:
1054
1054
  return
@@ -55,9 +55,7 @@ def select_observations2(self, mode: str, windows_title: str = "") -> Tuple[str,
55
55
  indep_var_header.append(pj[cfg.INDEPENDENT_VARIABLES][idx]["label"])
56
56
  column_type.append(pj[cfg.INDEPENDENT_VARIABLES][idx]["type"])
57
57
 
58
- state_events_list = [
59
- pj[cfg.ETHOGRAM][x][cfg.BEHAVIOR_CODE] for x in pj[cfg.ETHOGRAM] if cfg.STATE in pj[cfg.ETHOGRAM][x][cfg.TYPE].upper()
60
- ]
58
+ state_events_list = util.state_behavior_codes(pj[cfg.ETHOGRAM])
61
59
 
62
60
  data: list = []
63
61
  not_paired: list = []
@@ -38,6 +38,8 @@ def choose_obs_subj_behav_category(
38
38
  selected_observations: list,
39
39
  start_coding: Optional[dec] = dec("NaN"), # Union[..., None]
40
40
  end_coding: Optional[dec] = dec("NaN"),
41
+ start_interval: Optional[dec] = dec("NaN"),
42
+ end_interval: Optional[dec] = dec("NaN"),
41
43
  maxTime: Optional[dec] = None,
42
44
  show_include_modifiers: bool = True,
43
45
  show_exclude_non_coded_behaviors: bool = True,
@@ -66,7 +68,7 @@ def choose_obs_subj_behav_category(
66
68
  "selected behaviors": selectedBehaviors,
67
69
  "include modifiers": True/False,
68
70
  "exclude behaviors": True/False,
69
- "time": TIME_FULL_OBS / TIME_EVENTS / TIME_ARBITRARY_INTERVAL
71
+ "time": TIME_FULL_OBS / TIME_EVENTS / TIME_ARBITRARY_INTERVAL / TIME_OBS_INTERVAL
70
72
  "start time": startTime,
71
73
  "end time": endTime
72
74
  }
@@ -97,6 +99,8 @@ def choose_obs_subj_behav_category(
97
99
  paramPanelWindow.media_duration = maxTime
98
100
  paramPanelWindow.start_coding = start_coding
99
101
  paramPanelWindow.end_coding = end_coding
102
+ paramPanelWindow.start_interval = start_interval
103
+ paramPanelWindow.end_interval = end_interval
100
104
 
101
105
  if self.timeFormat == cfg.S:
102
106
  paramPanelWindow.start_time.rb_seconds.setChecked(True)
@@ -112,6 +116,7 @@ def choose_obs_subj_behav_category(
112
116
  paramPanelWindow.rb_observed_events.setEnabled(False)
113
117
  paramPanelWindow.frm_time_interval.setVisible(False)
114
118
  paramPanelWindow.rb_user_defined.setVisible(False)
119
+ paramPanelWindow.rb_obs_interval.setVisible(False)
115
120
  paramPanelWindow.rb_media_duration.setVisible(False)
116
121
  else:
117
122
  paramPanelWindow.frm_time_interval.setEnabled(False)
@@ -242,6 +247,10 @@ def choose_obs_subj_behav_category(
242
247
  )
243
248
  return {cfg.SELECTED_SUBJECTS: [], cfg.SELECTED_BEHAVIORS: []}
244
249
 
250
+ elif paramPanelWindow.rb_obs_interval.isChecked() and not ((start_interval is None) or start_interval.is_nan()):
251
+ startTime = paramPanelWindow.start_time.get_time()
252
+ endTime = paramPanelWindow.end_time.get_time()
253
+
245
254
  else:
246
255
  startTime = None
247
256
  endTime = None
@@ -255,6 +264,8 @@ def choose_obs_subj_behav_category(
255
264
  time_param = cfg.TIME_FULL_OBS
256
265
  if paramPanelWindow.rb_observed_events.isChecked():
257
266
  time_param = cfg.TIME_EVENTS
267
+ if paramPanelWindow.rb_obs_interval.isChecked():
268
+ time_param = cfg.TIME_OBS_INTERVAL
258
269
  if paramPanelWindow.rb_user_defined.isChecked():
259
270
  time_param = cfg.TIME_ARBITRARY_INTERVAL
260
271
 
@@ -64,11 +64,15 @@ def synthetic_time_budget(self) -> None:
64
64
 
65
65
  start_coding, end_coding, _ = observation_operations.coding_time(self.pj[cfg.OBSERVATIONS], selected_observations)
66
66
 
67
+ start_interval, end_interval = observation_operations.time_intervals_range(self.pj[cfg.OBSERVATIONS], selected_observations)
68
+
67
69
  synth_tb_param = select_subj_behav.choose_obs_subj_behav_category(
68
70
  self,
69
71
  selected_observations,
70
72
  start_coding=start_coding,
71
73
  end_coding=end_coding,
74
+ start_interval=start_interval,
75
+ end_interval=end_interval,
72
76
  maxTime=max_media_duration_all_obs,
73
77
  show_exclude_non_coded_behaviors=False,
74
78
  by_category=False,
@@ -179,6 +183,8 @@ def synthetic_binned_time_budget(self) -> None:
179
183
 
180
184
  start_coding, end_coding, _ = observation_operations.coding_time(self.pj[cfg.OBSERVATIONS], selected_observations)
181
185
 
186
+ start_interval, end_interval = observation_operations.time_intervals_range(self.pj[cfg.OBSERVATIONS], selected_observations)
187
+
182
188
  # exit with message if events do not have timestamp
183
189
  if start_coding.is_nan():
184
190
  QMessageBox.critical(
@@ -195,6 +201,8 @@ def synthetic_binned_time_budget(self) -> None:
195
201
  selected_observations,
196
202
  start_coding=start_coding,
197
203
  end_coding=end_coding,
204
+ start_interval=start_interval,
205
+ end_interval=end_interval,
198
206
  maxTime=max_media_duration_all_obs,
199
207
  show_exclude_non_coded_behaviors=False,
200
208
  by_category=False,
@@ -35,14 +35,14 @@ from . import project_functions
35
35
  from . import observation_operations
36
36
 
37
37
 
38
- def default_value(ethogram: dict, behav: str, param):
38
+ def default_value(ethogram: dict, behavior_code: str, param):
39
39
  """
40
40
  return value for duration in case of point event
41
41
  """
42
42
  default_value_ = 0.0
43
- behav_type = project_functions.event_type(behav, ethogram)
43
+ behavior_type = project_functions.event_type(behavior_code, ethogram)
44
44
 
45
- if behav_type == "POINT EVENT" and param in (
45
+ if behavior_type in cfg.POINT_EVENT_TYPES and param in (
46
46
  "duration",
47
47
  "duration mean",
48
48
  "duration stdev",
@@ -50,7 +50,7 @@ def default_value(ethogram: dict, behav: str, param):
50
50
  ):
51
51
  default_value_ = cfg.NA
52
52
 
53
- if behav_type == "STATE EVENT" and param in (
53
+ if behavior_type in cfg.STATE_EVENT_TYPES and param in (
54
54
  "duration mean",
55
55
  "duration stdev",
56
56
  ):
@@ -259,6 +259,13 @@ def synthetic_time_budget_bin(pj: dict, selected_observations: list, parameters_
259
259
  min_time = dec(start_time)
260
260
  max_time = dec(end_time)
261
261
 
262
+ if time_interval == cfg.TIME_OBS_INTERVAL:
263
+ obs_interval = pj[cfg.OBSERVATIONS][obs_id][cfg.OBSERVATION_TIME_INTERVAL]
264
+ offset = pj[cfg.OBSERVATIONS][obs_id][cfg.TIME_OFFSET]
265
+ min_time = dec(obs_interval[0]) + offset
266
+ # Use max media duration for max time if no interval is defined (=0)
267
+ max_time = dec(obs_interval[1]) + offset if obs_interval[1] != 0 else dec(obs_length)
268
+
262
269
  events_interval = {}
263
270
  mem_events_interval = {}
264
271
 
@@ -324,7 +331,7 @@ def synthetic_time_budget_bin(pj: dict, selected_observations: list, parameters_
324
331
  behaviors[subject][behav]["number"] = nocc
325
332
 
326
333
  behav_type = project_functions.event_type(behav[0], pj[cfg.ETHOGRAM])
327
- if behav_type == "STATE EVENT":
334
+ if behav_type in cfg.STATE_EVENT_TYPES:
328
335
  dur = interval_len(interval_intersec)
329
336
  behaviors[subject][behav]["duration"] = f"{dur:.3f}"
330
337
  behaviors[subject][behav]["duration mean"] = f"{interval_mean(interval_intersec):.3f}"
@@ -336,7 +343,7 @@ def synthetic_time_budget_bin(pj: dict, selected_observations: list, parameters_
336
343
  proportion = dur / ((time_bin_end - time_bin_start) - time_to_subtract)
337
344
  behaviors[subject][behav]["proportion of time"] = f"{proportion:.3f}"
338
345
 
339
- if behav_type == "POINT EVENT":
346
+ if behav_type in cfg.POINT_EVENT_TYPES:
340
347
  behaviors[subject][behav]["duration"] = cfg.NA
341
348
  behaviors[subject][behav]["duration mean"] = cfg.NA
342
349
  behaviors[subject][behav]["duration stdev"] = cfg.NA
@@ -696,7 +703,7 @@ def time_budget_analysis(
696
703
 
697
704
  if not distinct_modifiers:
698
705
  if not parameters[cfg.EXCLUDE_BEHAVIORS]:
699
- if cfg.STATE in project_functions.event_type(behavior, ethogram):
706
+ if project_functions.event_type(behavior, ethogram) in cfg.STATE_EVENT_TYPES:
700
707
  # check if observation from pictures
701
708
  if parameters["start time"] == dec("0.000") and parameters["end time"] == dec("0.000"):
702
709
  duration = cfg.NA
@@ -732,10 +739,8 @@ def time_budget_analysis(
732
739
  )
733
740
  continue
734
741
 
735
- if cfg.POINT in project_functions.event_type(behavior, ethogram):
742
+ if project_functions.event_type(behavior, ethogram) in cfg.POINT_EVENT_TYPES:
736
743
  for modifier in distinct_modifiers:
737
- print(f"{modifier=}")
738
-
739
744
  cursor.execute(
740
745
  (
741
746
  "SELECT occurence, observation FROM events "
@@ -806,7 +811,7 @@ def time_budget_analysis(
806
811
  }
807
812
  )
808
813
 
809
- if cfg.STATE in project_functions.event_type(behavior, ethogram):
814
+ if project_functions.event_type(behavior, ethogram) in cfg.STATE_EVENT_TYPES:
810
815
  for modifier in distinct_modifiers:
811
816
  cursor.execute(
812
817
  (
@@ -920,9 +925,9 @@ def time_budget_analysis(
920
925
  )
921
926
 
922
927
  else: # no modifiers
923
- if cfg.POINT in project_functions.event_type(behavior, ethogram):
928
+ if project_functions.event_type(behavior, ethogram) in cfg.POINT_EVENT_TYPES:
924
929
  cursor.execute(
925
- ("SELECT occurence, observation FROM events " "WHERE subject = ? AND code = ? ORDER BY observation, occurence"),
930
+ ("SELECT occurence, observation FROM events WHERE subject = ? AND code = ? ORDER BY observation, occurence"),
926
931
  (subject, behavior),
927
932
  )
928
933
 
@@ -985,7 +990,7 @@ def time_budget_analysis(
985
990
  }
986
991
  )
987
992
 
988
- if cfg.STATE in project_functions.event_type(behavior, ethogram):
993
+ if project_functions.event_type(behavior, ethogram) in cfg.STATE_EVENT_TYPES:
989
994
  cursor.execute(
990
995
  ("SELECT occurence, observation FROM events WHERE subject = ? AND code = ? ORDER BY observation, occurence"),
991
996
  (subject, behavior),
@@ -1116,7 +1121,7 @@ def time_budget_analysis(
1116
1121
  if category not in categories[subject]:
1117
1122
  categories[subject][category] = {"duration": 0, "number": 0}
1118
1123
 
1119
- if cfg.STATE in project_functions.event_type(behav["behavior"], ethogram):
1124
+ if project_functions.event_type(behav["behavior"], ethogram) in cfg.STATE_EVENT_TYPES:
1120
1125
  if behav["duration"] not in ("-", cfg.NA) and categories[subject][category]["duration"] not in (
1121
1126
  "-",
1122
1127
  cfg.NA,
@@ -429,11 +429,15 @@ def time_budget(self, mode: str, mode2: str = "list"):
429
429
 
430
430
  start_coding, end_coding, _ = observation_operations.coding_time(self.pj[cfg.OBSERVATIONS], selected_observations)
431
431
 
432
+ start_interval, end_interval = observation_operations.time_intervals_range(self.pj[cfg.OBSERVATIONS], selected_observations)
433
+
432
434
  parameters: dict = select_subj_behav.choose_obs_subj_behav_category(
433
435
  self,
434
436
  selected_observations,
435
437
  start_coding=start_coding,
436
438
  end_coding=end_coding,
439
+ start_interval=start_interval,
440
+ end_interval=end_interval,
437
441
  maxTime=max_media_duration_all_obs,
438
442
  by_category=(mode == "by_category"),
439
443
  n_observations=len(selected_observations),
@@ -452,9 +456,9 @@ def time_budget(self, mode: str, mode2: str = "list"):
452
456
  if start_coding is not None and not start_coding.is_nan():
453
457
  cancel_pressed, parameters[cfg.EXCLUDED_BEHAVIORS] = self.filter_behaviors(
454
458
  title="Select behaviors to exclude from the total time",
455
- text=("The duration of the selected behaviors will " "be subtracted from the total time"),
459
+ text=("The duration of the selected behaviors will be subtracted from the total time"),
456
460
  table="",
457
- behavior_type=[cfg.STATE_EVENT],
461
+ behavior_type=cfg.STATE_EVENT_TYPES,
458
462
  )
459
463
  if cancel_pressed:
460
464
  return
@@ -497,6 +501,13 @@ def time_budget(self, mode: str, mode2: str = "list"):
497
501
  except Exception:
498
502
  max_time = float(obs_length)
499
503
 
504
+ if parameters[cfg.TIME_INTERVAL] == cfg.TIME_OBS_INTERVAL:
505
+ obs_interval = self.pj[cfg.OBSERVATIONS][obsId][cfg.OBSERVATION_TIME_INTERVAL]
506
+ offset = float(self.pj[cfg.OBSERVATIONS][obsId][cfg.TIME_OFFSET])
507
+ min_time = float(obs_interval[0]) + offset
508
+ # Use max media duration for max time if no interval is defined (=0)
509
+ max_time = float(obs_interval[1]) + offset if obs_interval[1] != 0 else float(obs_length)
510
+
500
511
  if parameters[cfg.TIME_INTERVAL] == cfg.TIME_EVENTS: # events duration
501
512
  try:
502
513
  min_time = float(self.pj[cfg.OBSERVATIONS][obsId][cfg.EVENTS][0][0]) # first event
@@ -516,7 +527,7 @@ def time_budget(self, mode: str, mode2: str = "list"):
516
527
  for subj in parameters[cfg.SELECTED_SUBJECTS]:
517
528
  for behav in parameters[cfg.SELECTED_BEHAVIORS]:
518
529
  # if cfg.POINT in self.eventType(behav).upper():
519
- if cfg.POINT in project_functions.event_type(behav, self.pj[cfg.ETHOGRAM]):
530
+ if project_functions.event_type(behav, self.pj[cfg.ETHOGRAM]) in cfg.POINT_EVENT_TYPES:
520
531
  continue
521
532
 
522
533
  # extract modifiers
@@ -564,7 +575,7 @@ def time_budget(self, mode: str, mode2: str = "list"):
564
575
  % 2
565
576
  ):
566
577
  cursor.execute(
567
- ("INSERT INTO events (observation, subject, code, type, modifiers, occurence) " "VALUES (?,?,?,?,?,?)"),
578
+ ("INSERT INTO events (observation, subject, code, type, modifiers, occurence) VALUES (?,?,?,?,?,?)"),
568
579
  (obsId, subj, behav, "STATE", modifier[0], max_time),
569
580
  )
570
581
  try:
@@ -853,7 +864,7 @@ def time_budget(self, mode: str, mode2: str = "list"):
853
864
  # check intervals
854
865
  for subj in parameters[cfg.SELECTED_SUBJECTS]:
855
866
  for behav in parameters[cfg.SELECTED_BEHAVIORS]:
856
- if cfg.POINT in project_functions.event_type(behav, self.pj[cfg.ETHOGRAM]):
867
+ if project_functions.event_type(behav, self.pj[cfg.ETHOGRAM]) in cfg.POINT_EVENT_TYPES:
857
868
  continue
858
869
 
859
870
  cursor.execute(
@@ -877,7 +888,7 @@ def time_budget(self, mode: str, mode2: str = "list"):
877
888
  % 2
878
889
  ):
879
890
  cursor.execute(
880
- ("INSERT INTO events (observation, subject, code, type, modifiers, occurence) " "VALUES (?,?,?,?,?,?)"),
891
+ ("INSERT INTO events (observation, subject, code, type, modifiers, occurence) VALUES (?,?,?,?,?,?)"),
881
892
  (obsId, subj, behav, "STATE", modifier[0], min_time),
882
893
  )
883
894
  if (
@@ -893,7 +904,7 @@ def time_budget(self, mode: str, mode2: str = "list"):
893
904
  % 2
894
905
  ):
895
906
  cursor.execute(
896
- ("INSERT INTO events (observation, subject, code, type, modifiers, occurence) " "VALUES (?,?,?,?,?,?)"),
907
+ ("INSERT INTO events (observation, subject, code, type, modifiers, occurence) VALUES (?,?,?,?,?,?)"),
897
908
  (obsId, subj, behav, cfg.STATE, modifier[0], max_time),
898
909
  )
899
910
  try:
boris/utilities.py CHANGED
@@ -522,7 +522,7 @@ def behav_category_user_color(behavioral_categories: dict, name: str) -> Union[s
522
522
 
523
523
  def state_behavior_codes(ethogram: dict) -> list:
524
524
  """
525
- behavior codes defined as STATE event
525
+ returns a list of behavior codes defined as STATE event
526
526
 
527
527
  Args:
528
528
  ethogram (dict): ethogram dictionary
@@ -531,12 +531,12 @@ def state_behavior_codes(ethogram: dict) -> list:
531
531
  list: list of behavior codes defined as STATE event
532
532
 
533
533
  """
534
- return [ethogram[x][cfg.BEHAVIOR_CODE] for x in ethogram if ethogram[x][cfg.TYPE] in (cfg.STATE_EVENT, cfg.STATE_EVENT_WITH_CODING_MAP)]
534
+ return [ethogram[x][cfg.BEHAVIOR_CODE] for x in ethogram if ethogram[x][cfg.TYPE] in cfg.STATE_EVENT_TYPES]
535
535
 
536
536
 
537
537
  def point_behavior_codes(ethogram: dict) -> list:
538
538
  """
539
- behavior codes defined as POINT event
539
+ returns a list of behavior codes defined as POINT event
540
540
 
541
541
  Args:
542
542
  ethogram (dict): ethogram dictionary
boris/version.py CHANGED
@@ -20,5 +20,5 @@ This file is part of BORIS.
20
20
 
21
21
  """
22
22
 
23
- __version__ = "9.0.8"
24
- __version_date__ = "2025-03-06"
23
+ __version__ = "9.1.1"
24
+ __version_date__ = "2025-03-12"
boris/write_event.py CHANGED
@@ -381,7 +381,8 @@ def write_event(self, event: dict, mem_time: dec) -> int:
381
381
  behavior_to_stop = [
382
382
  self.pj[cfg.ETHOGRAM][x]
383
383
  for x in self.pj[cfg.ETHOGRAM]
384
- if self.pj[cfg.ETHOGRAM][x][cfg.BEHAVIOR_CODE] == cs and self.pj[cfg.ETHOGRAM][x]["type"] == cfg.STATE_EVENT
384
+ if self.pj[cfg.ETHOGRAM][x][cfg.BEHAVIOR_CODE] == cs
385
+ and self.pj[cfg.ETHOGRAM][x]["type"] in (cfg.STATE_EVENT, cfg.STATE_EVENT_WITH_CODING_MAP)
385
386
  ]
386
387
  if behavior_to_stop:
387
388
  behavior_to_stop = behavior_to_stop[0]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.2
2
2
  Name: boris-behav-obs
3
- Version: 9.0.8
3
+ Version: 9.1.1
4
4
  Summary: BORIS - Behavioral Observation Research Interactive Software
5
5
  Author-email: Olivier Friard <olivier.friard@unito.it>
6
6
  License: GNU GENERAL PUBLIC LICENSE
@@ -3,34 +3,34 @@ boris/__main__.py,sha256=ANjTbXgXDoz2nB1tCtOIllfIVotCa602iebACX7rXaE,764
3
3
  boris/about.py,sha256=KEUz6nryrg8FceVyFsf8sMz-xWd2cGwIUfuVydHxqC4,5366
4
4
  boris/add_modifier.py,sha256=DWqxkKDBm21QH_kPvhpnltwLtFvPxne0VmZ1SY26hj8,26340
5
5
  boris/add_modifier_ui.py,sha256=Y7TLO5uS6zW7zpjXmjA4V_VIp_bFDNtjOTbJ9Q6m-mQ,11601
6
- boris/advanced_event_filtering.py,sha256=TNfefo0cmmmMIREenwIKxovLijLT0L9nfrZHgZ_jUkA,15184
6
+ boris/advanced_event_filtering.py,sha256=DyPHEj2QsTpkkYjBD0iMXqFYCkrMjMcmp1MOuSITtGk,15411
7
7
  boris/behav_coding_map_creator.py,sha256=PSEYMLvOwt0HR7H4kQZl6dli3q89wezWMv-Ri3EZWWc,37443
8
- boris/behavior_binary_table.py,sha256=9-porbfI4Bpl58ItcngusoOpzhTPJ9unvDBDKDFo-aY,11677
8
+ boris/behavior_binary_table.py,sha256=SsaPrXyGXwWYPJ_4R0BlfqeV-q1n0vGNDo0HB3ZmQi8,12426
9
9
  boris/behaviors_coding_map.py,sha256=Pat6U2JHxH8epWH42ZlwzZJ0Rmgl-BKQ5KARjp3GbNg,7291
10
10
  boris/boris_cli.py,sha256=n0OiVvZM1gM6E7yKaff9wlgmpAGK4TK052VRi8AabJo,13196
11
11
  boris/cmd_arguments.py,sha256=oWb-FvhKLbKJhATlTHy9muWu8XnnUfOZ-3Fmz2M8Yzc,1848
12
12
  boris/coding_pad.py,sha256=fBKdp7DDyupySJosIYtqNd8s2E-GruzCgVhDFsoVWKE,10986
13
- boris/config.py,sha256=_1DabgiY89-aUZaPlF8UAgzeAlbkUnlJPufI7NkbvcU,17121
14
- boris/config_file.py,sha256=RC6lmO9UN_yKz_OgVmviz8rv2f4GXS-0VlRBSoSUcUg,13521
15
- boris/connections.py,sha256=7vTfpZjn225uvEx2VQdV1RgCDP1znW0XAMy8Zu-CSpg,19294
13
+ boris/config.py,sha256=cy4MSVFMHYaEHpHdncljuiaMSTpV6rFNm1OyVYF28Bc,17295
14
+ boris/config_file.py,sha256=1-2ZmTvKET57rwrLR1dXblt0AxMpGB1LAiHxu-Sy8es,13543
15
+ boris/connections.py,sha256=y_KkIj3WQQEepJASATHBpZaqwT-ERyFNovy2Q8e7FAA,19321
16
16
  boris/converters.py,sha256=c1Jps-URoglY5ILQHz-pCCf6-4DFUHZLtqr_ofsrFg0,11722
17
17
  boris/converters_ui.py,sha256=uu7LOBV_fKv2DBdOqsqPwjGsjgONr5ODBoscAA-EP48,9900
18
- boris/cooccurence.py,sha256=dzEMxJ0bLKychCZ7i5vS5LtKEHwISehUenc5k5RnPos,9826
19
- boris/core.py,sha256=P6xpIqnEZwE6SGfCFB2g2Flec6Wsx9CUXg7O8Hmh2bg,233322
18
+ boris/cooccurence.py,sha256=NV3lPhzKptyYh_pSjx1a_FqwaKstqIwj46GpNcyJ4aY,10236
19
+ boris/core.py,sha256=ncIjy9W5jDKkdmytTNGwq2qscZVlZ0tMd9bOOro_9dg,237708
20
20
  boris/core_qrc.py,sha256=T3ki5e2Pj0I0QBGz63MPUgZzl8F_VHZwSq074mRNBDU,650669
21
21
  boris/core_ui.py,sha256=SeC26uveDCjrCBLsRPuQ6FaapKfON_HIRcQStEDLhl4,76384
22
22
  boris/db_functions.py,sha256=Uw9wWH_Pe-qNzpV1k21YG_jKsoOmfY_iiK_7ARZHGDc,13352
23
23
  boris/dev.py,sha256=9pUElbjl9g17rFUJXX5aVSu55_iIKIuDxNdrB0DI_d0,3671
24
- boris/dialog.py,sha256=eWoB_uIZLdg1ugmpqW1Fphk3M4AD9vBZoY4wjgdzMgI,32794
24
+ boris/dialog.py,sha256=IAX5_CtTfEUGm5lhzxajjx0oVTs8HNEAw2twTW8AmkE,32859
25
25
  boris/duration_widget.py,sha256=GjZgCAMGOcsNjoPiRImEVe6yMkH2vuNoh44ulpd5nlg,6924
26
- boris/edit_event.py,sha256=hyy43CD5BCBa4iJbzbLQZKiFBVnox7JI0FNP0k-5aSk,7891
26
+ boris/edit_event.py,sha256=2hpxn9DYuJW1CK02hF4iU0--J_0C_KTiN9gGZ1frJBc,7678
27
27
  boris/edit_event_ui.py,sha256=vhglQrhkF9tt0HVlkXnkG7symW0eOFA7nhbk6l_qn3k,7772
28
- boris/event_operations.py,sha256=JoMFOSzul0xcS8PNQ2ANQsHm4wkyduPMEcyPSsdRLyI,37893
28
+ boris/event_operations.py,sha256=ys1DxZ6iooMvvq_hzpPVZSW0dF9Trbx921XV3jeKOxw,38209
29
29
  boris/events_cursor.py,sha256=VPY_ygD0fxE5lp25mcd2l00XQXurCR6hprffF4tKRbU,2078
30
- boris/events_snapshots.py,sha256=uzyCGgcyu0CKjZ76B5lyE8_kAMfxVS59GuYpdsCEc04,27561
30
+ boris/events_snapshots.py,sha256=PjWzQvUGQtIcEc_7FDsRphf7fAhhTccQgYc2eQSA65g,27621
31
31
  boris/exclusion_matrix.py,sha256=ff88xD6aqc8bpIuj9ZCz9ju_HeqqgibQwoaJrIOJ6RI,5272
32
- boris/export_events.py,sha256=-IVwH9aeCsb5_JhDlBQNnKcDf1vRaZG7X2T42IjBEwo,38282
33
- boris/export_observation.py,sha256=Ez4y_kf0cR3doMpIG1Mq4Hbgc71sAPiRYnDHJvLj6Ec,49827
32
+ boris/export_events.py,sha256=YoqE0vHXeDMAk28e6rewI3TODdfMr8YbJsNnJqiXv0Y,39720
33
+ boris/export_observation.py,sha256=uPJH_5MXqGm4JSeaSlTikh1i6OKSyLIaZFzS9wp-9qk,50729
34
34
  boris/external_processes.py,sha256=vpmhA4Lj2GblBIrDD0YjesB8HPOgx4K9gSWVhTop4Cg,11927
35
35
  boris/geometric_measurement.py,sha256=4pI-AYpBSFlJBqS-f8dnkgLtj_Z2E5kwwAdh6WwZ4kk,35049
36
36
  boris/gui_utilities.py,sha256=402qypJ44JkcZ1PDeV79j8Z9faQ473TzEkjjO-scBz0,4170
@@ -47,15 +47,15 @@ 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=oop08nflDLZAgDbIB8GOiVdTgLhppJ_ODH0Z24cyqvE,57176
50
- boris/observation_operations.py,sha256=GT4xUwgSTLv-wTdhkHq6iE-S4ziV2Hu1DqQyhqNIghs,104332
50
+ boris/observation_operations.py,sha256=w295Vlj6qparn7xcdh1tkwgXXx2QTnq9J6KUJGh1zvg,105533
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=iC_jhATeJUfGbF5xo7uUjz9oM_PFTifZc7CLvvVL8mw,7872
55
- boris/param_panel_ui.py,sha256=ggV5jM4aq1pOmPLNg7J-2r5gsjrq9zSnXtxoLqIZ76g,12963
54
+ boris/param_panel.py,sha256=Sna2SlJt1CSUEE_bNX2X6ibFjs2Um0-ZjtQf5-JlJTc,8693
55
+ boris/param_panel_ui.py,sha256=4emQDFmuL4_R7bKxosLjdUb-VSPWkDm7suy38F5EKcA,13260
56
56
  boris/player_dock_widget.py,sha256=VBuuGoAb2D027oFnMBlIQPiSQcEdedhoQltNFSJq8mw,5982
57
57
  boris/plot_data_module.py,sha256=6QbLKfyGp4TYRyHnB9G45y5XrpeXLytcorltEAWfYak,16562
58
- boris/plot_events.py,sha256=Lpmq5TyS10pVA3QmMMOqRTmfN-1T3-RSNCjaTNwxuuk,23541
58
+ boris/plot_events.py,sha256=hA_Yt-ZaxbAOKjN7gYHiaEx5TPR-7HIWGJXXg4cq6lw,24048
59
59
  boris/plot_events_rt.py,sha256=xig__Uea3mQqO5raMBVB3pm3vuQkjAbJpwSS7AwIob8,8327
60
60
  boris/plot_spectrogram_rt.py,sha256=JV8N7T8133wGVhlPxmgOb426u1g1p21-LbTqgaeddkk,8361
61
61
  boris/plot_waveform_rt.py,sha256=05JN_6HCq674ROore_6PNw93GQNZJQDlDxp2ODAFkkA,7474
@@ -63,41 +63,41 @@ boris/plugins.py,sha256=2RyrS3fdJ2lA8FhG_qymDCfaFyzK3TaRy2ll3yHjlz4,2817
63
63
  boris/preferences.py,sha256=qPfd9Tyg7u30kXwVqMOgkdy2RXri9bItRa5U2-ZVQmg,16847
64
64
  boris/preferences_ui.py,sha256=D2bFLb3E0m6IwSeqKoItRDiqvPmJGoeXLHF2K02n1Zo,26293
65
65
  boris/project.py,sha256=hAeAb5pD0u_l0bezU9ePvbTOYQKfxrFGvYB2NAqSDHg,84377
66
- boris/project_functions.py,sha256=uEkZS6iMLD8BR5Vnb9boatUenupIWWcFVtL0r43Q4nE,79128
67
- boris/project_import_export.py,sha256=tYFSSnTo2pbvS0sfT3jkkDzirdsg-oTguMfl2kl8r00,38387
66
+ boris/project_functions.py,sha256=Bu-HD58uYL__v2ih5OhQnVF22_lPrnvX3LCw4wheC1I,79251
67
+ boris/project_import_export.py,sha256=1FdsYFzZ_jrhPRaH7xEkcPnh-hQXN4HFz1PhsIsSoL8,38361
68
68
  boris/project_ui.py,sha256=yB-ewhHt8S8DTTRIk-dNK2tPMNU24lNji9fDW_Xazu8,38805
69
69
  boris/qrc_boris.py,sha256=aH-qUirYY1CGxmTK1SFCPvuZfazIHX4DdUKF1gxZeYM,675008
70
70
  boris/qrc_boris5.py,sha256=prnOw7VGXWXRuVCYp_yIrmWhrlG1F9rx-3BQvkPenjY,161608
71
71
  boris/select_modifiers.py,sha256=42uG9F75pfPoPJ-blp-vFgmpBpVJtL42FlIxpNpq9z4,13319
72
- boris/select_observations.py,sha256=W1HfgwGnI0KsnrZJMfaLJvLLzQc_gK2HYDB3SZIl748,7977
73
- boris/select_subj_behav.py,sha256=YDR5L6t6wHfuh9BSoAGA4WLAVw9e3Qslr8u5SFHL0Kg,10930
72
+ boris/select_observations.py,sha256=HM0suMes1YxVwQ-Xakw7ROaxbN0EyeSiZFZNrTQIHAA,7886
73
+ boris/select_subj_behav.py,sha256=5ln2e83nVEcMW1TTeOE5K1gqd4lSvh7LeiSfhloZPrU,11537
74
74
  boris/state_events.py,sha256=R5CcT_cldnxqhQkvX_V1AMNxH0Nc6jLzMZYiWkeJwAE,7770
75
75
  boris/subjects_pad.py,sha256=lSRRGfLfD10_YpGua8RGVdKhoXlsXawGhNibPkRhuzM,3541
76
- boris/synthetic_time_budget.py,sha256=G26GDbScv4DviCDRIG_lo1sY6THGoVYqoR4cRpSuEGk,9956
77
- boris/time_budget_functions.py,sha256=vInLbWyswtB0OE_1VATjCCmEdhnwgHuQudNnvVWh2gQ,52022
78
- boris/time_budget_widget.py,sha256=2YRMe1h_X3K4aSs1AnGUDblvi-QYkdHAZwicudeN_Es,42418
76
+ boris/synthetic_time_budget.py,sha256=NwJt6TO6XZwxF2s7ETvqiDEqrz9ad30g1sQ0bVBsN9o,10364
77
+ boris/time_budget_functions.py,sha256=1-7_G84SDs7rp1EWr5zHInzRVDUkUdIfm_AX0516ceQ,52539
78
+ boris/time_budget_widget.py,sha256=_yYzLa6aJRWHRataek_ciXMEKGW75HA9y0auhAJwzbA,43137
79
79
  boris/transitions.py,sha256=_aZJfJWv3EBrtmQ7qsdTCayQo6uWU7BXqtQQgflEhr4,12250
80
- boris/utilities.py,sha256=_DRmQSD7lYn52B0yzMkMdF7jQBGx_x44fBaJ1PejpSM,52775
81
- boris/version.py,sha256=Xr0WXzrXZBnFo5aKUFdcl6Md3KMAGfRBSttcMss5SB0,787
80
+ boris/utilities.py,sha256=zwWpH-lozAUj_8K6Gf2Hl-BSW0aRdWo37HGXTWQ86qk,52782
81
+ boris/version.py,sha256=MwBl656ww2Munfb847fzP6VQ6OX5HrRbTL8ngrLBaS8,787
82
82
  boris/video_equalizer.py,sha256=FartoGghFK-T53zklP70rPKYqTuzL8qdvfGlsOF2wwc,5854
83
83
  boris/video_equalizer_ui.py,sha256=1CG3s79eM4JAbaCx3i1ILZXLceb41_gGXlOLNfpBgnw,10142
84
84
  boris/video_operations.py,sha256=mh3iR__Sm2KnV44L_sW2pOo3AgLwlM7wiTnnqQiAVs4,9381
85
85
  boris/view_df.py,sha256=AKScLASX2Uatw7rqPbsnio83eVT4GZYCFhL091eMvlY,3370
86
86
  boris/view_df_ui.py,sha256=CaMeRH_vQ00CTDDFQn73ZZaS-r8BSTWpL-dMCFqzJ_Q,2775
87
- boris/write_event.py,sha256=LV6HT1PMAz2-2EotEIbKsHiO7E4IBxp01BCphWyoAOk,23766
87
+ boris/write_event.py,sha256=jKZWzvDvQ-wwFvTLjA-zUjtXQCWwVC49Y5g-1UctpYw,23821
88
88
  boris/analysis_plugins/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
89
- boris/analysis_plugins/number_of_occurences.py,sha256=GU3TSKnmZ7_wEcKu7mw9-7FUz3jTh6BQffOphbFjLS0,2017
89
+ boris/analysis_plugins/number_of_occurences.py,sha256=U0NuU8leQixwDWlH26FsQmZl-wrvWKxNH_CWAWb8us4,1972
90
90
  boris/analysis_plugins/number_of_occurences_by_independent_variable.py,sha256=fkyOuc1AiOSnrz7L6Ocd742XmDHhhQEtgi2KSiTOG4c,2252
91
- boris/analysis_plugins/time_budget.py,sha256=wZ1DKYVOfMhLm3xenoHHybPEkKOmO-h66Ni3G-P62KI,3604
91
+ boris/analysis_plugins/time_budget.py,sha256=_eNv_9oxwa-L6pZVyATc8YNnsmUj_3Px2F0F3Y603p0,3547
92
92
  boris/portion/__init__.py,sha256=ZBUG4I7YWhRkeWdP-JEpxhxldJlUYQkeaJseTjdhtJE,602
93
93
  boris/portion/const.py,sha256=hEp26BKcEg1Js4DfZsBHmDtJJts83Tl1HWQ0CNJNwEc,1588
94
94
  boris/portion/dict.py,sha256=SyHxc7PfDw2ufNLFQycwJtzmRfL48rDp4UrM2KN7IWc,11282
95
95
  boris/portion/func.py,sha256=3TkQtFKLfsqntwd27HSGHceFhnXHmT-EbNMqktElC5Q,2174
96
96
  boris/portion/interval.py,sha256=bAdUiJjGeUAPgsBAImwNeviiwfQq5odfhFZccAWzOTA,20299
97
97
  boris/portion/io.py,sha256=ppNeRpiLNrocF1yzGeuEUIhYMf2LfsR-cji3d0nmvUs,6371
98
- boris_behav_obs-9.0.8.dist-info/LICENSE.TXT,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
99
- boris_behav_obs-9.0.8.dist-info/METADATA,sha256=xnfU2WG50EeKwawDyZyT0WLnvaUKj8-CbRRC1Fke5gI,42102
100
- boris_behav_obs-9.0.8.dist-info/WHEEL,sha256=rF4EZyR2XVS6irmOHQIJx2SUqXLZKRMUrjsg8UwN-XQ,109
101
- boris_behav_obs-9.0.8.dist-info/entry_points.txt,sha256=-Vl37ZFjZYK5wTSDf5LAzd2cVLON1Pfy1xkx490Wxak,47
102
- boris_behav_obs-9.0.8.dist-info/top_level.txt,sha256=fJSgm62S7WesiwTorGbOO4nNN0yzgZ3klgfGi3Px4qI,6
103
- boris_behav_obs-9.0.8.dist-info/RECORD,,
98
+ boris_behav_obs-9.1.1.dist-info/LICENSE.TXT,sha256=WJ7YI-moTFb-uVrFjnzzhGJrnL9P2iqQe8NuED3hutI,35141
99
+ boris_behav_obs-9.1.1.dist-info/METADATA,sha256=zuFFmX5VePSe15dz0kKJdQR-TulX0i47xsTTwUkEnLw,42102
100
+ boris_behav_obs-9.1.1.dist-info/WHEEL,sha256=SrDKpSbFN1G94qcmBqS9nyHcDMp9cUS9OC06hC0G3G0,109
101
+ boris_behav_obs-9.1.1.dist-info/entry_points.txt,sha256=-Vl37ZFjZYK5wTSDf5LAzd2cVLON1Pfy1xkx490Wxak,47
102
+ boris_behav_obs-9.1.1.dist-info/top_level.txt,sha256=fJSgm62S7WesiwTorGbOO4nNN0yzgZ3klgfGi3Px4qI,6
103
+ boris_behav_obs-9.1.1.dist-info/RECORD,,
@@ -1,5 +1,5 @@
1
1
  Wheel-Version: 1.0
2
- Generator: setuptools (75.8.2)
2
+ Generator: setuptools (76.0.0)
3
3
  Root-Is-Purelib: true
4
4
  Tag: py2-none-any
5
5
  Tag: py3-none-any