boris-behav-obs 9.0.2__py2.py3-none-any.whl → 9.0.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.
Files changed (80) hide show
  1. boris/__init__.py +1 -1
  2. boris/__main__.py +1 -1
  3. boris/about.py +2 -2
  4. boris/add_modifier.py +1 -1
  5. boris/add_modifier_ui.py +22 -22
  6. boris/advanced_event_filtering.py +1 -1
  7. boris/analysis_plugins/number_of_occurences.py +6 -3
  8. boris/analysis_plugins/number_of_occurences_by_independent_variable.py +6 -4
  9. boris/analysis_plugins/time_budget.py +24 -14
  10. boris/behav_coding_map_creator.py +1 -1
  11. boris/behavior_binary_table.py +1 -1
  12. boris/behaviors_coding_map.py +1 -1
  13. boris/boris_cli.py +1 -1
  14. boris/cmd_arguments.py +1 -1
  15. boris/coding_pad.py +1 -1
  16. boris/config.py +16 -9
  17. boris/config_file.py +1 -1
  18. boris/connections.py +1 -1
  19. boris/converters.py +1 -1
  20. boris/cooccurence.py +1 -1
  21. boris/core.py +143 -176
  22. boris/db_functions.py +1 -1
  23. boris/dialog.py +10 -277
  24. boris/edit_event.py +8 -1
  25. boris/event_operations.py +1 -1
  26. boris/events_cursor.py +1 -1
  27. boris/events_snapshots.py +1 -1
  28. boris/exclusion_matrix.py +1 -1
  29. boris/export_events.py +1 -1
  30. boris/export_observation.py +1 -1
  31. boris/external_processes.py +1 -1
  32. boris/geometric_measurement.py +1 -1
  33. boris/gui_utilities.py +1 -1
  34. boris/image_overlay.py +1 -1
  35. boris/import_observations.py +1 -1
  36. boris/irr.py +1 -1
  37. boris/latency.py +1 -1
  38. boris/map_creator.py +1 -1
  39. boris/measurement_widget.py +1 -1
  40. boris/media_file.py +1 -1
  41. boris/menu_options.py +1 -1
  42. boris/modifiers_coding_map.py +1 -1
  43. boris/observation.py +1 -1
  44. boris/observation_operations.py +530 -425
  45. boris/observations_list.py +3 -3
  46. boris/otx_parser.py +1 -1
  47. boris/param_panel.py +1 -1
  48. boris/player_dock_widget.py +13 -9
  49. boris/plot_data_module.py +1 -1
  50. boris/plot_events.py +1 -1
  51. boris/plot_events_rt.py +1 -1
  52. boris/plot_spectrogram_rt.py +1 -1
  53. boris/plot_waveform_rt.py +1 -1
  54. boris/plugins.py +2 -2
  55. boris/preferences.py +6 -1
  56. boris/preferences_ui.py +7 -1
  57. boris/project.py +1 -1
  58. boris/project_functions.py +73 -76
  59. boris/project_import_export.py +1 -1
  60. boris/select_modifiers.py +1 -1
  61. boris/select_observations.py +6 -6
  62. boris/select_subj_behav.py +1 -1
  63. boris/state_events.py +1 -1
  64. boris/subjects_pad.py +1 -1
  65. boris/synthetic_time_budget.py +1 -1
  66. boris/time_budget_functions.py +1 -1
  67. boris/time_budget_widget.py +5 -5
  68. boris/transitions.py +1 -1
  69. boris/utilities.py +1 -1
  70. boris/version.py +3 -3
  71. boris/video_equalizer.py +1 -1
  72. boris/video_operations.py +1 -1
  73. boris/write_event.py +1 -1
  74. {boris_behav_obs-9.0.2.dist-info → boris_behav_obs-9.0.4.dist-info}/METADATA +1 -1
  75. boris_behav_obs-9.0.4.dist-info/RECORD +103 -0
  76. boris_behav_obs-9.0.2.dist-info/RECORD +0 -103
  77. {boris_behav_obs-9.0.2.dist-info → boris_behav_obs-9.0.4.dist-info}/LICENSE.TXT +0 -0
  78. {boris_behav_obs-9.0.2.dist-info → boris_behav_obs-9.0.4.dist-info}/WHEEL +0 -0
  79. {boris_behav_obs-9.0.2.dist-info → boris_behav_obs-9.0.4.dist-info}/entry_points.txt +0 -0
  80. {boris_behav_obs-9.0.2.dist-info → boris_behav_obs-9.0.4.dist-info}/top_level.txt +0 -0
boris/dialog.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
@@ -430,165 +430,6 @@ class get_time_widget(QWidget):
430
430
  self.rb_datetime.setChecked(True)
431
431
 
432
432
 
433
- '''
434
- class get_time_widget(QWidget):
435
- """
436
- widget for selecting a time in various formats: secondes, HH:MM:SS:ZZZ or YYYY-mm-DD HH:MM:SS:ZZZ
437
- """
438
-
439
- def __init__(self, time_value=0, parent=None):
440
- super().__init__(parent)
441
-
442
- self.setWindowTitle("BORIS")
443
-
444
- self.widget = QWidget()
445
- self.widget.setObjectName("widget")
446
-
447
- self.widget.setGeometry(QRect(60, 171, 278, 124))
448
- self.verticalLayout = QVBoxLayout(self.widget)
449
- self.verticalLayout.setContentsMargins(0, 0, 0, 0)
450
- self.horizontalLayout_2 = QHBoxLayout()
451
- self.horizontalLayout_2.setObjectName("horizontalLayout_2")
452
- self.pb_sign = QPushButton(self.widget, clicked=self.pb_sign_clicked)
453
- self.pb_sign.setText("+")
454
- font = QFont()
455
- font.setPointSize(14)
456
- self.pb_sign.setFont(font)
457
-
458
- self.horizontalLayout_2.addWidget(self.pb_sign)
459
-
460
- self.gridLayout_3 = QGridLayout()
461
- self.gridLayout = QGridLayout()
462
-
463
- self.rb_seconds = QRadioButton(self.widget)
464
- self.rb_seconds.toggled.connect(self.format_changed)
465
- self.gridLayout.addWidget(self.rb_seconds, 0, 0, 1, 1)
466
-
467
- self.le_seconds = QLineEdit(self.widget)
468
- self.le_seconds.setText("0.000")
469
- self.le_seconds.setValidator(QRegExpValidator(QRegExp("([0-9]+([.][0-9]*)?|[.][0-9]+)")))
470
- self.gridLayout.addWidget(self.le_seconds, 0, 1, 1, 1)
471
-
472
- self.lb_seconds = QLabel(self.widget)
473
- self.lb_seconds.setText("seconds")
474
- self.lb_seconds.setIndent(0)
475
- self.gridLayout.addWidget(self.lb_seconds, 0, 2, 1, 1)
476
-
477
- self.lb_hour = QLabel(self.widget)
478
- self.lb_hour.setText("hour")
479
- self.lb_hour.setIndent(0)
480
- self.gridLayout.addWidget(self.lb_hour, 1, 1, 1, 1)
481
-
482
- self.lb_hhmmss = QLabel(self.widget)
483
- self.lb_hhmmss.setText("mm:ss.ms")
484
- self.gridLayout.addWidget(self.lb_hhmmss, 1, 2, 1, 1)
485
-
486
- self.rb_time = QRadioButton(self.widget)
487
- self.rb_time.toggled.connect(self.format_changed)
488
- self.gridLayout.addWidget(self.rb_time, 2, 0, 1, 1)
489
-
490
- self.sb_hour = QSpinBox(self.widget)
491
- self.sb_hour.setButtonSymbols(QAbstractSpinBox.NoButtons)
492
- self.sb_hour.setMinimum(0)
493
- self.sb_hour.setMaximum(cfg.HOUR_CUTOFF)
494
- self.sb_hour.setDisplayIntegerBase(10)
495
- self.gridLayout.addWidget(self.sb_hour, 2, 1, 1, 1)
496
-
497
- self.te_time = QTimeEdit(self.widget)
498
- self.te_time.setDisplayFormat("mm:ss.zzz")
499
- self.gridLayout.addWidget(self.te_time, 2, 2, 1, 1)
500
-
501
- self.gridLayout_3.addLayout(self.gridLayout, 0, 0, 1, 1)
502
-
503
- self.gridLayout_2 = QGridLayout()
504
- self.rb_datetime = QRadioButton(self.widget)
505
- self.rb_datetime.toggled.connect(self.format_changed)
506
-
507
- self.gridLayout_2.addWidget(self.rb_datetime, 0, 0, 1, 1)
508
-
509
- self.dte = QDateTimeEdit(self.widget)
510
- self.dte.setDisplayFormat("yyyy-MM-dd hh:mm:ss.zzz")
511
-
512
- self.gridLayout_2.addWidget(self.dte, 0, 1, 1, 1)
513
-
514
- self.gridLayout_3.addLayout(self.gridLayout_2, 1, 0, 1, 1)
515
-
516
- self.horizontalLayout_2.addLayout(self.gridLayout_3)
517
-
518
- self.verticalLayout.addLayout(self.horizontalLayout_2)
519
-
520
- self.setLayout(self.verticalLayout)
521
-
522
- if time_value:
523
- self.set_time(time_value)
524
-
525
- self.format_changed()
526
-
527
- def format_changed(self):
528
- self.le_seconds.setEnabled(self.rb_seconds.isChecked())
529
- self.lb_seconds.setEnabled(self.rb_seconds.isChecked())
530
- self.sb_hour.setEnabled(self.rb_time.isChecked())
531
- self.te_time.setEnabled(self.rb_time.isChecked())
532
- self.lb_hour.setEnabled(self.rb_time.isChecked())
533
- self.lb_hhmmss.setEnabled(self.rb_time.isChecked())
534
- self.dte.setEnabled(self.rb_datetime.isChecked())
535
-
536
- def pb_sign_clicked(self):
537
- if self.pb_sign.text() == "+":
538
- self.pb_sign.setText("-")
539
- else:
540
- self.pb_sign.setText("+")
541
-
542
- def get_time(self) -> dec:
543
- """
544
- return time in seconds
545
- """
546
-
547
- if self.rb_seconds.isChecked():
548
- try:
549
- time_sec = float(self.le_seconds.text())
550
- except Exception:
551
- QMessageBox.warning(
552
- None,
553
- cfg.programName,
554
- "The value is not a decimal number",
555
- QMessageBox.Ok | QMessageBox.Default,
556
- QMessageBox.NoButton,
557
- )
558
- return None
559
-
560
- if self.rb_time.isChecked():
561
- time_sec = self.sb_hour.value() * 3600
562
- time_sec += self.te_time.time().msecsSinceStartOfDay() / 1000
563
-
564
- if self.rb_datetime.isChecked():
565
- time_sec = self.dte.dateTime().toMSecsSinceEpoch() / 1000
566
-
567
- if self.pb_sign.text() == "-":
568
- time_sec = -time_sec
569
-
570
- return dec(time_sec)
571
-
572
- def set_time(self, new_time: float) -> None:
573
- self.pb_sign.setText("-" if new_time < 0 else "+")
574
-
575
- # seconds
576
- self.le_seconds.setText(f"{new_time:0.3f}")
577
-
578
- # hh:mm:ss.zzz
579
- h = int(abs(new_time) // 3600)
580
- m = int((abs(new_time) - h * 3600) // 60)
581
- s = int((abs(new_time) - h * 3600 - m * 60))
582
- ms = round((abs(new_time) - h * 3600 - m * 60 - s) * 1000)
583
-
584
- self.sb_hour.setValue(h)
585
- self.te_time.setTime(QTime(0, m, s, ms))
586
-
587
- if new_time > cfg.DATE_CUTOFF:
588
- self.dte.setDateTime(QDateTime().fromMSecsSinceEpoch(int(new_time * 1000)))
589
- '''
590
-
591
-
592
433
  class Ask_time(QDialog):
593
434
  def __init__(self, time_value=0):
594
435
  super().__init__()
@@ -940,51 +781,12 @@ class ChooseObservationsToImport(QDialog):
940
781
  return [item.text() for item in self.lw.selectedItems()]
941
782
 
942
783
 
943
- '''
944
- class Ask_time(QDialog):
945
- """
946
- "Ask time" dialog box using duration widget in duration_widget module
947
- """
948
-
949
- def __init__(self, time_format):
950
- super().__init__()
951
- hbox = QVBoxLayout(self)
952
- self.label = QLabel()
953
- self.label.setText("Go to time")
954
- hbox.addWidget(self.label)
955
-
956
- self.time_widget = duration_widget.Duration_widget()
957
- if time_format == cfg.HHMMSS:
958
- self.time_widget.set_format_hhmmss()
959
- if time_format == cfg.S:
960
- self.time_widget.set_format_s()
961
-
962
- hbox.addWidget(self.time_widget)
963
-
964
- self.pbOK = QPushButton("OK")
965
- self.pbOK.clicked.connect(self.accept)
966
- self.pbOK.setDefault(True)
967
-
968
- self.pbCancel = QPushButton("Cancel")
969
- self.pbCancel.clicked.connect(self.reject)
970
-
971
- self.hbox2 = QHBoxLayout(self)
972
- self.hbox2.addItem(QSpacerItem(241, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))
973
- self.hbox2.addWidget(self.pbCancel)
974
- self.hbox2.addWidget(self.pbOK)
975
- hbox.addLayout(self.hbox2)
976
- self.setLayout(hbox)
977
- self.setWindowTitle("Time")
978
- '''
979
-
980
-
981
784
  class FindInEvents(QWidget):
982
785
  """
983
786
  "find in events" dialog box
984
787
  """
985
788
 
986
789
  clickSignal = Signal(str)
987
-
988
790
  currentIdx: int = -1
989
791
 
990
792
  def __init__(self):
@@ -1028,10 +830,11 @@ class FindInEvents(QWidget):
1028
830
  hbox.addWidget(self.lb_message)
1029
831
 
1030
832
  hbox2 = QHBoxLayout()
833
+ hbox2.addItem(QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum))
1031
834
  self.pbOK = QPushButton("Find")
1032
835
  self.pbOK.clicked.connect(lambda: self.click("FIND"))
1033
836
  self.pbCancel = QPushButton(cfg.CLOSE)
1034
- self.pbCancel.clicked.connect(lambda: self.click(cfg.CLOSE))
837
+ self.pbCancel.clicked.connect(lambda: self.click("CLOSE"))
1035
838
  hbox2.addWidget(self.pbCancel)
1036
839
  hbox2.addWidget(self.pbOK)
1037
840
  hbox.addLayout(hbox2)
@@ -1060,22 +863,6 @@ class FindReplaceEvents(QWidget):
1060
863
  self.combo_fields.addItems(("Choose a field", "Subject", "Behavior", "Modifiers", "Comment"))
1061
864
  hbox.addWidget(self.combo_fields)
1062
865
 
1063
- # self.cbSubject = QCheckBox("Subject")
1064
- # self.cbSubject.setChecked(False)
1065
- # hbox.addWidget(self.cbSubject)
1066
-
1067
- # self.cbBehavior = QCheckBox("Behavior")
1068
- # self.cbBehavior.setChecked(False)
1069
- # hbox.addWidget(self.cbBehavior)
1070
-
1071
- # self.cbModifier = QCheckBox("Modifiers")
1072
- # self.cbModifier.setChecked(False)
1073
- # hbox.addWidget(self.cbModifier)
1074
-
1075
- # self.cbComment = QCheckBox("Comment")
1076
- # self.cbComment.setChecked(False)
1077
- # hbox.addWidget(self.cbComment)
1078
-
1079
866
  self.lbFind = QLabel("Find")
1080
867
  hbox.addWidget(self.lbFind)
1081
868
 
@@ -1098,6 +885,8 @@ class FindReplaceEvents(QWidget):
1098
885
 
1099
886
  hbox2 = QHBoxLayout()
1100
887
 
888
+ hbox2.addItem(QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum))
889
+
1101
890
  self.pbCancel = QPushButton(cfg.CANCEL, clicked=lambda: self.click("CANCEL"))
1102
891
  hbox2.addWidget(self.pbCancel)
1103
892
 
@@ -1118,64 +907,9 @@ class FindReplaceEvents(QWidget):
1118
907
  self.clickSignal.emit(msg)
1119
908
 
1120
909
 
1121
- '''
1122
- class explore_project_dialog(QDialog):
1123
- """
1124
- "explore project" dialog box
1125
- """
1126
-
1127
- def __init__(self):
1128
- super().__init__()
1129
-
1130
- self.setWindowTitle("Explore project")
1131
-
1132
- hbox = QVBoxLayout()
1133
-
1134
- hbox.addWidget(QLabel("Search in all observations"))
1135
-
1136
- self.lb_subject = QLabel("Subject")
1137
- hbox.addWidget(self.lb_subject)
1138
- self.find_subject = QLineEdit()
1139
- hbox.addWidget(self.find_subject)
1140
-
1141
- self.lb_behav = QLabel("Behaviors")
1142
- hbox.addWidget(self.lb_behav)
1143
- self.find_behavior = QLineEdit()
1144
- hbox.addWidget(self.find_behavior)
1145
-
1146
- self.lb_modifier = QLabel("Modifier")
1147
- hbox.addWidget(self.lb_modifier)
1148
- self.find_modifier = QLineEdit()
1149
- hbox.addWidget(self.find_modifier)
1150
-
1151
- self.lb_comment = QLabel("Comment")
1152
- hbox.addWidget(self.lb_comment)
1153
- self.find_comment = QLineEdit()
1154
- hbox.addWidget(self.find_comment)
1155
-
1156
- self.cb_case_sensitive = QCheckBox("Case sensitive")
1157
- self.cb_case_sensitive.setChecked(False)
1158
- hbox.addWidget(self.cb_case_sensitive)
1159
-
1160
- self.lb_message = QLabel()
1161
- hbox.addWidget(self.lb_message)
1162
-
1163
- hbox2 = QHBoxLayout()
1164
- self.pbOK = QPushButton("Find")
1165
- self.pbOK.clicked.connect(self.accept)
1166
- self.pbCancel = QPushButton("Cancel")
1167
- self.pbCancel.clicked.connect(self.reject)
1168
- hbox2.addWidget(self.pbCancel)
1169
- hbox2.addWidget(self.pbOK)
1170
- hbox.addLayout(hbox2)
1171
-
1172
- self.setLayout(hbox)
1173
- '''
1174
-
1175
-
1176
910
  class Results_dialog(QDialog):
1177
911
  """
1178
- widget for visualizing text output
912
+ widget for visualizing text output in HTML
1179
913
  """
1180
914
 
1181
915
  def __init__(self):
@@ -1270,10 +1004,10 @@ class View_data(QDialog):
1270
1004
 
1271
1005
  hbox2.addItem(QSpacerItem(40, 20, QSizePolicy.Expanding, QSizePolicy.Minimum))
1272
1006
 
1273
- self.pbCancel = QPushButton("Cancel", clicked=self.reject)
1007
+ self.pbCancel = QPushButton(cfg.CANCEL, clicked=self.reject)
1274
1008
  hbox2.addWidget(self.pbCancel)
1275
1009
 
1276
- self.pbOK = QPushButton("OK", clicked=self.accept)
1010
+ self.pbOK = QPushButton(cfg.OK, clicked=self.accept)
1277
1011
  hbox2.addWidget(self.pbOK)
1278
1012
 
1279
1013
  vbox.addLayout(hbox2)
@@ -1306,13 +1040,12 @@ class View_explore_project_results(QWidget):
1306
1040
  vbox.addWidget(self.tw)
1307
1041
 
1308
1042
  hbox2 = QHBoxLayout()
1309
- hbox2.addWidget(QPushButton("OK", clicked=self.close))
1043
+ hbox2.addItem(QSpacerItem(40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum))
1044
+ hbox2.addWidget(QPushButton(cfg.CLOSE, clicked=self.close))
1310
1045
 
1311
1046
  vbox.addLayout(hbox2)
1312
1047
 
1313
1048
  self.setLayout(vbox)
1314
1049
 
1315
- # self.resize(540, 640)
1316
-
1317
1050
  def tw_cellDoubleClicked(self, r, c):
1318
1051
  self.double_click_signal.emit(self.tw.item(r, 0).text(), int(self.tw.item(r, 1).text()))
boris/edit_event.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
@@ -77,6 +77,13 @@ class DlgEditEvent(QDialog, Ui_Form):
77
77
  # future time widget
78
78
  self.time_widget = dialog.get_time_widget(self.time_value)
79
79
 
80
+ if time_format == cfg.S:
81
+ self.time_widget.rb_seconds.setChecked(True)
82
+ if time_format == cfg.HHMMSS:
83
+ self.time_widget.rb_time.setChecked(True)
84
+ if self.time_value > cfg.DATE_CUTOFF:
85
+ self.time_widget.rb_datetime.setChecked(True)
86
+
80
87
  self.horizontalLayout_2.insertWidget(0, self.time_widget)
81
88
 
82
89
  if observation_type == cfg.IMAGES:
boris/event_operations.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
 
7
7
  This program is free software; you can redistribute it and/or modify
boris/events_cursor.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
 
7
7
  This program is free software; you can redistribute it and/or modify
boris/events_snapshots.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
 
7
7
  This program is free software; you can redistribute it and/or modify
boris/exclusion_matrix.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
boris/export_events.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This program is free software; you can redistribute it and/or modify
7
7
  it under the terms of the GNU General Public License as published by
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
boris/gui_utilities.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This program is free software; you can redistribute it and/or modify
7
7
  it under the terms of the GNU General Public License as published by
boris/image_overlay.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
 
7
7
  This program is free software; you can redistribute it and/or modify
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This program is free software; you can redistribute it and/or modify
7
7
  it under the terms of the GNU General Public License as published by
boris/irr.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
 
7
7
  This program is free software; you can redistribute it and/or modify
boris/latency.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This program is free software; you can redistribute it and/or modify
7
7
  it under the terms of the GNU General Public License as published by
boris/map_creator.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
boris/media_file.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
boris/menu_options.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This program is free software; you can redistribute it and/or modify
7
7
  it under the terms of the GNU General Public License as published by
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7
 
boris/observation.py CHANGED
@@ -1,7 +1,7 @@
1
1
  """
2
2
  BORIS
3
3
  Behavioral Observation Research Interactive Software
4
- Copyright 2012-2024 Olivier Friard
4
+ Copyright 2012-2025 Olivier Friard
5
5
 
6
6
  This file is part of BORIS.
7
7