accusleepy 0.7.3__py3-none-any.whl → 0.8.1__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.
accusleepy/bouts.py CHANGED
@@ -11,7 +11,7 @@ class Bout:
11
11
 
12
12
  length: int # length, in number of epochs
13
13
  start_index: int # index where bout starts
14
- end_index: int # index where bout ends
14
+ end_index: int # index where bout ends (non-inclusive)
15
15
  surrounding_state: int # brain state on both sides of the bout
16
16
 
17
17
 
@@ -41,6 +41,44 @@ def find_last_adjacent_bout(sorted_bouts: list[Bout], bout_index: int) -> int:
41
41
  return bout_index
42
42
 
43
43
 
44
+ def find_short_bouts(
45
+ labels: np.array, min_epochs: int, brain_states: set[int]
46
+ ) -> list[Bout]:
47
+ """Locate all brain state bouts below a minimum length
48
+
49
+ :param labels: brain state labels (digits in the 0-9 range)
50
+ :param min_epochs: minimum number of epochs in a bout
51
+ :param brain_states: set of brain states in the labels
52
+ :return: list of Bout objects
53
+ """
54
+ # convert labels to a string for regex search
55
+ # There is probably a regex that can find all patterns like ab+a
56
+ # without consuming each "a" but I haven't found it :(
57
+ label_string = "".join(labels.astype(str))
58
+ bouts = list()
59
+ for state in brain_states:
60
+ for other_state in brain_states:
61
+ if state == other_state:
62
+ continue
63
+ # get start and end indices of each bout
64
+ expression = (
65
+ f"(?<={other_state}){state}{{1,{min_epochs - 1}}}(?={other_state})"
66
+ )
67
+ matches = re.finditer(expression, label_string)
68
+ spans = [match.span() for match in matches]
69
+
70
+ for span in spans:
71
+ bouts.append(
72
+ Bout(
73
+ length=span[1] - span[0],
74
+ start_index=span[0],
75
+ end_index=span[1],
76
+ surrounding_state=other_state,
77
+ )
78
+ )
79
+ return bouts
80
+
81
+
44
82
  def enforce_min_bout_length(
45
83
  labels: np.array, epoch_length: int | float, min_bout_length: int | float
46
84
  ) -> np.array:
@@ -61,11 +99,9 @@ def enforce_min_bout_length(
61
99
  :param min_bout_length: minimum bout length, in seconds
62
100
  :return: updated brain state labels
63
101
  """
64
- # if recording is very short, don't change anything
65
- if labels.size < 3:
66
- return labels
67
-
68
- if epoch_length == min_bout_length:
102
+ # if the recording is very short or the minimum bout length
103
+ # is one epoch long, don't change anything
104
+ if labels.size < 3 or epoch_length == min_bout_length:
69
105
  return labels
70
106
 
71
107
  # get minimum number of epochs in a bout
@@ -73,36 +109,8 @@ def enforce_min_bout_length(
73
109
  # get set of states in the labels
74
110
  brain_states = set(labels.tolist())
75
111
 
76
- while True: # so true
77
- # convert labels to a string for regex search
78
- # There is probably a regex that can find all patterns like ab+a
79
- # without consuming each "a" but I haven't found it :(
80
- label_string = "".join(labels.astype(str))
81
-
82
- bouts = list()
83
-
84
- for state in brain_states:
85
- for other_state in brain_states:
86
- if state == other_state:
87
- continue
88
- # get start and end indices of each bout
89
- expression = (
90
- f"(?<={other_state}){state}{{1,{min_epochs - 1}}}(?={other_state})"
91
- )
92
- matches = re.finditer(expression, label_string)
93
- spans = [match.span() for match in matches]
94
-
95
- # if some bouts were found
96
- for span in spans:
97
- bouts.append(
98
- Bout(
99
- length=span[1] - span[0],
100
- start_index=span[0],
101
- end_index=span[1],
102
- surrounding_state=other_state,
103
- )
104
- )
105
-
112
+ while True:
113
+ bouts = find_short_bouts(labels, min_epochs, brain_states)
106
114
  if len(bouts) == 0:
107
115
  break
108
116
 
accusleepy/config.json CHANGED
@@ -33,5 +33,7 @@
33
33
  "learning_rate": 0.001,
34
34
  "momentum": 0.9,
35
35
  "training_epochs": 6
36
- }
36
+ },
37
+ "epochs_to_show": 5,
38
+ "autoscroll_state": false
37
39
  }
accusleepy/constants.py CHANGED
@@ -67,6 +67,8 @@ DEFAULT_OVERWRITE_KEY = "default_overwrite_setting"
67
67
  EMG_FILTER_KEY = "emg_filter"
68
68
  # model training hyperparameters key
69
69
  HYPERPARAMETERS_KEY = "hyperparameters"
70
+ EPOCHS_TO_SHOW_KEY = "epochs_to_show"
71
+ AUTOSCROLL_KEY = "autoscroll_state"
70
72
 
71
73
  # default values
72
74
  # default UI settings
@@ -82,3 +84,6 @@ DEFAULT_BATCH_SIZE = 64
82
84
  DEFAULT_LEARNING_RATE = 1e-3
83
85
  DEFAULT_MOMENTUM = 0.9
84
86
  DEFAULT_TRAINING_EPOCHS = 6
87
+ # default manual scoring settings
88
+ DEFAULT_EPOCHS_TO_SHOW = 5
89
+ DEFAULT_AUTOSCROLL_STATE = False
accusleepy/fileio.py CHANGED
@@ -29,6 +29,21 @@ class Hyperparameters:
29
29
  training_epochs: int
30
30
 
31
31
 
32
+ @dataclass
33
+ class AccuSleePyConfig:
34
+ """AccuSleePy configuration settings"""
35
+
36
+ brain_state_set: BrainStateSet
37
+ default_epoch_length: int | float
38
+ overwrite_setting: bool
39
+ save_confidence_setting: bool
40
+ min_bout_length: int | float
41
+ emg_filter: EMGFilter
42
+ hyperparameters: Hyperparameters
43
+ epochs_to_show: int
44
+ autoscroll_state: bool
45
+
46
+
32
47
  @dataclass
33
48
  class Recording:
34
49
  """Store information about a recording"""
@@ -111,33 +126,40 @@ def save_labels(
111
126
  pd.DataFrame({c.BRAIN_STATE_COL: labels}).to_csv(filename, index=False)
112
127
 
113
128
 
114
- def load_config() -> tuple[
115
- BrainStateSet, int | float, bool, bool, int | float, EMGFilter, Hyperparameters
116
- ]:
129
+ def load_config() -> AccuSleePyConfig:
117
130
  """Load configuration file with brain state options
118
131
 
119
- :return: set of brain state options,
132
+ :return: AccuSleePyConfig containing the following:
133
+ set of brain state options,
120
134
  default epoch length,
121
135
  default overwrite setting,
122
136
  default confidence score output setting,
123
137
  default minimum bout length,
124
138
  EMG filter parameters,
125
- model training hyperparameters
139
+ model training hyperparameters,
140
+ default epochs to show for manual scoring,
141
+ default autoscroll state for manual scoring
126
142
  """
127
143
  with open(
128
144
  os.path.join(os.path.dirname(os.path.abspath(__file__)), c.CONFIG_FILE), "r"
129
145
  ) as f:
130
146
  data = json.load(f)
131
147
 
132
- return (
133
- BrainStateSet(
148
+ return AccuSleePyConfig(
149
+ brain_state_set=BrainStateSet(
134
150
  [BrainState(**b) for b in data[BRAIN_STATES_KEY]], c.UNDEFINED_LABEL
135
151
  ),
136
- data[c.DEFAULT_EPOCH_LENGTH_KEY],
137
- data.get(c.DEFAULT_OVERWRITE_KEY, c.DEFAULT_OVERWRITE_SETTING),
138
- data.get(c.DEFAULT_CONFIDENCE_SETTING_KEY, c.DEFAULT_CONFIDENCE_SETTING),
139
- data.get(c.DEFAULT_MIN_BOUT_LENGTH_KEY, c.DEFAULT_MIN_BOUT_LENGTH),
140
- EMGFilter(
152
+ default_epoch_length=data[c.DEFAULT_EPOCH_LENGTH_KEY],
153
+ overwrite_setting=data.get(
154
+ c.DEFAULT_OVERWRITE_KEY, c.DEFAULT_OVERWRITE_SETTING
155
+ ),
156
+ save_confidence_setting=data.get(
157
+ c.DEFAULT_CONFIDENCE_SETTING_KEY, c.DEFAULT_CONFIDENCE_SETTING
158
+ ),
159
+ min_bout_length=data.get(
160
+ c.DEFAULT_MIN_BOUT_LENGTH_KEY, c.DEFAULT_MIN_BOUT_LENGTH
161
+ ),
162
+ emg_filter=EMGFilter(
141
163
  **data.get(
142
164
  c.EMG_FILTER_KEY,
143
165
  {
@@ -147,7 +169,7 @@ def load_config() -> tuple[
147
169
  },
148
170
  )
149
171
  ),
150
- Hyperparameters(
172
+ hyperparameters=Hyperparameters(
151
173
  **data.get(
152
174
  c.HYPERPARAMETERS_KEY,
153
175
  {
@@ -158,6 +180,8 @@ def load_config() -> tuple[
158
180
  },
159
181
  )
160
182
  ),
183
+ epochs_to_show=data.get(c.EPOCHS_TO_SHOW_KEY, c.DEFAULT_EPOCHS_TO_SHOW),
184
+ autoscroll_state=data.get(c.AUTOSCROLL_KEY, c.DEFAULT_AUTOSCROLL_STATE),
161
185
  )
162
186
 
163
187
 
@@ -169,6 +193,8 @@ def save_config(
169
193
  min_bout_length: int | float,
170
194
  emg_filter: EMGFilter,
171
195
  hyperparameters: Hyperparameters,
196
+ epochs_to_show: int,
197
+ autoscroll_state: bool,
172
198
  ) -> None:
173
199
  """Save configuration of brain state options to json file
174
200
 
@@ -181,6 +207,8 @@ def save_config(
181
207
  :param overwrite_setting: default setting for overwriting
182
208
  existing labels
183
209
  :param hyperparameters: model training hyperparameters
210
+ :param epochs_to_show: default epochs to show for manual scoring,
211
+ :param autoscroll_state: default autoscroll state for manual scoring
184
212
  """
185
213
  output_dict = brain_state_set.to_output_dict()
186
214
  output_dict.update({c.DEFAULT_EPOCH_LENGTH_KEY: default_epoch_length})
@@ -189,6 +217,8 @@ def save_config(
189
217
  output_dict.update({c.DEFAULT_MIN_BOUT_LENGTH_KEY: min_bout_length})
190
218
  output_dict.update({c.EMG_FILTER_KEY: emg_filter.__dict__})
191
219
  output_dict.update({c.HYPERPARAMETERS_KEY: hyperparameters.__dict__})
220
+ output_dict.update({c.EPOCHS_TO_SHOW_KEY: epochs_to_show})
221
+ output_dict.update({c.AUTOSCROLL_KEY: autoscroll_state})
192
222
  with open(
193
223
  os.path.join(os.path.dirname(os.path.abspath(__file__)), c.CONFIG_FILE), "w"
194
224
  ) as f:
Binary file
accusleepy/gui/main.py CHANGED
@@ -81,6 +81,11 @@ from accusleepy.validation import (
81
81
 
82
82
  # note: functions using torch or scipy are lazily imported
83
83
 
84
+ # on Windows, prevent dark mode from changing the visual style
85
+ if os.name == "nt":
86
+ sys.argv += ["-platform", "windows:darkmode=0"]
87
+
88
+
84
89
  # relative path to user manual
85
90
  MAIN_GUIDE_FILE = os.path.normpath(r"text/main_guide.md")
86
91
 
@@ -108,15 +113,16 @@ class AccuSleepWindow(QMainWindow):
108
113
  self.setWindowTitle("AccuSleePy")
109
114
 
110
115
  # fill in settings tab
111
- (
112
- self.brain_state_set,
113
- self.epoch_length,
114
- self.only_overwrite_undefined,
115
- self.save_confidence_scores,
116
- self.min_bout_length,
117
- self.emg_filter,
118
- self.hyperparameters,
119
- ) = load_config()
116
+ config = load_config()
117
+ self.brain_state_set = config.brain_state_set
118
+ self.epoch_length = config.default_epoch_length
119
+ self.only_overwrite_undefined = config.overwrite_setting
120
+ self.save_confidence_scores = config.save_confidence_setting
121
+ self.min_bout_length = config.min_bout_length
122
+ self.emg_filter = config.emg_filter
123
+ self.hyperparameters = config.hyperparameters
124
+ self.default_epochs_to_show = config.epochs_to_show
125
+ self.default_autoscroll_state = config.autoscroll_state
120
126
 
121
127
  self.settings_widgets = None
122
128
  self.initialize_settings_tab()
@@ -1238,6 +1244,8 @@ class AccuSleepWindow(QMainWindow):
1238
1244
  self.ui.overwrite_default_checkbox.setChecked(self.only_overwrite_undefined)
1239
1245
  self.ui.confidence_setting_checkbox.setChecked(self.save_confidence_scores)
1240
1246
  self.ui.default_min_bout_length_spinbox.setValue(self.min_bout_length)
1247
+ self.ui.epochs_to_show_spinbox.setValue(self.default_epochs_to_show)
1248
+ self.ui.autoscroll_checkbox.setChecked(self.default_autoscroll_state)
1241
1249
  # EMG filter
1242
1250
  self.ui.emg_order_spinbox.setValue(self.emg_filter.order)
1243
1251
  self.ui.bp_lower_spinbox.setValue(self.emg_filter.bp_lower)
@@ -1439,6 +1447,8 @@ class AccuSleepWindow(QMainWindow):
1439
1447
  momentum=self.hyperparameters.momentum,
1440
1448
  training_epochs=self.hyperparameters.training_epochs,
1441
1449
  ),
1450
+ epochs_to_show=self.ui.epochs_to_show_spinbox.value(),
1451
+ autoscroll_state=self.ui.autoscroll_checkbox.isChecked(),
1442
1452
  )
1443
1453
  self.ui.save_config_status.setText("configuration saved")
1444
1454
 
@@ -139,11 +139,10 @@ class ManualScoringWindow(QDialog):
139
139
  self.ui.setupUi(self)
140
140
  self.setWindowTitle("AccuSleePy manual scoring window")
141
141
 
142
- # load set of valid brain states
143
- self.brain_state_set, _, _, _, _, _, _ = load_config()
144
-
145
- # initial setting for number of epochs to show in the lower plot
146
- self.epochs_to_show = 5
142
+ config = load_config()
143
+ self.brain_state_set = config.brain_state_set
144
+ self.epochs_to_show = config.epochs_to_show
145
+ self.autoscroll_state = config.autoscroll_state
147
146
 
148
147
  # find the set of y-axis locations of valid brain state labels
149
148
  self.label_display_options = convert_labels(
@@ -216,7 +215,11 @@ class ManualScoringWindow(QDialog):
216
215
  self.emg_signal_offset = 0
217
216
  self.roi_brain_state = 0
218
217
  self.label_roi_mode = False
219
- self.autoscroll_state = False
218
+
219
+ # set autoscroll state and epochs to show, based on defaults
220
+ self.ui.autoscroll.setChecked(self.autoscroll_state)
221
+ self.ui.shownepochslabel.setText(str(self.epochs_to_show))
222
+
220
223
  # keep track of save state to warn user when they quit
221
224
  self.last_saved_labels = copy.deepcopy(self.labels)
222
225
 
@@ -2224,20 +2224,25 @@ class Ui_PrimaryWindow(object):
2224
2224
  self.horizontalLayout_81.setSpacing(20)
2225
2225
  self.horizontalLayout_81.setObjectName("horizontalLayout_81")
2226
2226
  self.verticalLayout_6 = QVBoxLayout()
2227
- self.verticalLayout_6.setSpacing(10)
2227
+ self.verticalLayout_6.setSpacing(20)
2228
2228
  self.verticalLayout_6.setObjectName("verticalLayout_6")
2229
+ self.primary_defaults_groupbox = QGroupBox(self.ui_default_page)
2230
+ self.primary_defaults_groupbox.setObjectName("primary_defaults_groupbox")
2231
+ self.verticalLayout_4 = QVBoxLayout(self.primary_defaults_groupbox)
2232
+ self.verticalLayout_4.setSpacing(10)
2233
+ self.verticalLayout_4.setObjectName("verticalLayout_4")
2229
2234
  self.default_epoch_layout = QHBoxLayout()
2230
2235
  self.default_epoch_layout.setObjectName("default_epoch_layout")
2231
2236
  self.horizontalLayout_60 = QHBoxLayout()
2232
2237
  self.horizontalLayout_60.setObjectName("horizontalLayout_60")
2233
- self.label_17 = QLabel(self.ui_default_page)
2238
+ self.label_17 = QLabel(self.primary_defaults_groupbox)
2234
2239
  self.label_17.setObjectName("label_17")
2235
2240
  sizePolicy1.setHeightForWidth(self.label_17.sizePolicy().hasHeightForWidth())
2236
2241
  self.label_17.setSizePolicy(sizePolicy1)
2237
2242
 
2238
2243
  self.horizontalLayout_60.addWidget(self.label_17)
2239
2244
 
2240
- self.default_epoch_input = QDoubleSpinBox(self.ui_default_page)
2245
+ self.default_epoch_input = QDoubleSpinBox(self.primary_defaults_groupbox)
2241
2246
  self.default_epoch_input.setObjectName("default_epoch_input")
2242
2247
  sizePolicy1.setHeightForWidth(
2243
2248
  self.default_epoch_input.sizePolicy().hasHeightForWidth()
@@ -2256,13 +2261,13 @@ class Ui_PrimaryWindow(object):
2256
2261
 
2257
2262
  self.default_epoch_layout.addItem(self.horizontalSpacer_70)
2258
2263
 
2259
- self.verticalLayout_6.addLayout(self.default_epoch_layout)
2264
+ self.verticalLayout_4.addLayout(self.default_epoch_layout)
2260
2265
 
2261
2266
  self.horizontalLayout_75 = QHBoxLayout()
2262
2267
  self.horizontalLayout_75.setObjectName("horizontalLayout_75")
2263
2268
  self.horizontalLayout_76 = QHBoxLayout()
2264
2269
  self.horizontalLayout_76.setObjectName("horizontalLayout_76")
2265
- self.overwrite_default_checkbox = QCheckBox(self.ui_default_page)
2270
+ self.overwrite_default_checkbox = QCheckBox(self.primary_defaults_groupbox)
2266
2271
  self.overwrite_default_checkbox.setObjectName("overwrite_default_checkbox")
2267
2272
 
2268
2273
  self.horizontalLayout_76.addWidget(self.overwrite_default_checkbox)
@@ -2275,7 +2280,7 @@ class Ui_PrimaryWindow(object):
2275
2280
 
2276
2281
  self.horizontalLayout_75.addItem(self.horizontalSpacer_88)
2277
2282
 
2278
- self.verticalLayout_6.addLayout(self.horizontalLayout_75)
2283
+ self.verticalLayout_4.addLayout(self.horizontalLayout_75)
2279
2284
 
2280
2285
  self.confidence_score_setting_layout = QHBoxLayout()
2281
2286
  self.confidence_score_setting_layout.setObjectName(
@@ -2283,7 +2288,7 @@ class Ui_PrimaryWindow(object):
2283
2288
  )
2284
2289
  self.horizontalLayout_62 = QHBoxLayout()
2285
2290
  self.horizontalLayout_62.setObjectName("horizontalLayout_62")
2286
- self.confidence_setting_checkbox = QCheckBox(self.ui_default_page)
2291
+ self.confidence_setting_checkbox = QCheckBox(self.primary_defaults_groupbox)
2287
2292
  self.confidence_setting_checkbox.setObjectName("confidence_setting_checkbox")
2288
2293
  sizePolicy1.setHeightForWidth(
2289
2294
  self.confidence_setting_checkbox.sizePolicy().hasHeightForWidth()
@@ -2301,20 +2306,22 @@ class Ui_PrimaryWindow(object):
2301
2306
 
2302
2307
  self.confidence_score_setting_layout.addItem(self.horizontalSpacer_72)
2303
2308
 
2304
- self.verticalLayout_6.addLayout(self.confidence_score_setting_layout)
2309
+ self.verticalLayout_4.addLayout(self.confidence_score_setting_layout)
2305
2310
 
2306
2311
  self.horizontalLayout_2 = QHBoxLayout()
2307
2312
  self.horizontalLayout_2.setObjectName("horizontalLayout_2")
2308
2313
  self.horizontalLayout_18 = QHBoxLayout()
2309
2314
  self.horizontalLayout_18.setObjectName("horizontalLayout_18")
2310
- self.label_19 = QLabel(self.ui_default_page)
2315
+ self.label_19 = QLabel(self.primary_defaults_groupbox)
2311
2316
  self.label_19.setObjectName("label_19")
2312
2317
  sizePolicy1.setHeightForWidth(self.label_19.sizePolicy().hasHeightForWidth())
2313
2318
  self.label_19.setSizePolicy(sizePolicy1)
2314
2319
 
2315
2320
  self.horizontalLayout_18.addWidget(self.label_19)
2316
2321
 
2317
- self.default_min_bout_length_spinbox = QDoubleSpinBox(self.ui_default_page)
2322
+ self.default_min_bout_length_spinbox = QDoubleSpinBox(
2323
+ self.primary_defaults_groupbox
2324
+ )
2318
2325
  self.default_min_bout_length_spinbox.setObjectName(
2319
2326
  "default_min_bout_length_spinbox"
2320
2327
  )
@@ -2335,7 +2342,68 @@ class Ui_PrimaryWindow(object):
2335
2342
 
2336
2343
  self.horizontalLayout_2.addItem(self.horizontalSpacer_90)
2337
2344
 
2338
- self.verticalLayout_6.addLayout(self.horizontalLayout_2)
2345
+ self.verticalLayout_4.addLayout(self.horizontalLayout_2)
2346
+
2347
+ self.verticalLayout_6.addWidget(self.primary_defaults_groupbox)
2348
+
2349
+ self.manual_defaults_groupbox = QGroupBox(self.ui_default_page)
2350
+ self.manual_defaults_groupbox.setObjectName("manual_defaults_groupbox")
2351
+ self.verticalLayout_7 = QVBoxLayout(self.manual_defaults_groupbox)
2352
+ self.verticalLayout_7.setSpacing(10)
2353
+ self.verticalLayout_7.setObjectName("verticalLayout_7")
2354
+ self.epochs_to_show_layout = QHBoxLayout()
2355
+ self.epochs_to_show_layout.setObjectName("epochs_to_show_layout")
2356
+ self.horizontalLayout_78 = QHBoxLayout()
2357
+ self.horizontalLayout_78.setObjectName("horizontalLayout_78")
2358
+ self.label_20 = QLabel(self.manual_defaults_groupbox)
2359
+ self.label_20.setObjectName("label_20")
2360
+ sizePolicy1.setHeightForWidth(self.label_20.sizePolicy().hasHeightForWidth())
2361
+ self.label_20.setSizePolicy(sizePolicy1)
2362
+
2363
+ self.horizontalLayout_78.addWidget(self.label_20)
2364
+
2365
+ self.epochs_to_show_spinbox = QSpinBox(self.manual_defaults_groupbox)
2366
+ self.epochs_to_show_spinbox.setObjectName("epochs_to_show_spinbox")
2367
+ self.epochs_to_show_spinbox.setMinimum(3)
2368
+ self.epochs_to_show_spinbox.setSingleStep(2)
2369
+ self.epochs_to_show_spinbox.setValue(5)
2370
+
2371
+ self.horizontalLayout_78.addWidget(self.epochs_to_show_spinbox)
2372
+
2373
+ self.epochs_to_show_layout.addLayout(self.horizontalLayout_78)
2374
+
2375
+ self.horizontalSpacer_92 = QSpacerItem(
2376
+ 40, 20, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum
2377
+ )
2378
+
2379
+ self.epochs_to_show_layout.addItem(self.horizontalSpacer_92)
2380
+
2381
+ self.verticalLayout_7.addLayout(self.epochs_to_show_layout)
2382
+
2383
+ self.autoscroll_layout = QHBoxLayout()
2384
+ self.autoscroll_layout.setObjectName("autoscroll_layout")
2385
+ self.horizontalLayout_77 = QHBoxLayout()
2386
+ self.horizontalLayout_77.setObjectName("horizontalLayout_77")
2387
+ self.autoscroll_checkbox = QCheckBox(self.manual_defaults_groupbox)
2388
+ self.autoscroll_checkbox.setObjectName("autoscroll_checkbox")
2389
+ sizePolicy1.setHeightForWidth(
2390
+ self.autoscroll_checkbox.sizePolicy().hasHeightForWidth()
2391
+ )
2392
+ self.autoscroll_checkbox.setSizePolicy(sizePolicy1)
2393
+
2394
+ self.horizontalLayout_77.addWidget(self.autoscroll_checkbox)
2395
+
2396
+ self.autoscroll_layout.addLayout(self.horizontalLayout_77)
2397
+
2398
+ self.horizontalSpacer_91 = QSpacerItem(
2399
+ 10, 10, QSizePolicy.Policy.Expanding, QSizePolicy.Policy.Minimum
2400
+ )
2401
+
2402
+ self.autoscroll_layout.addItem(self.horizontalSpacer_91)
2403
+
2404
+ self.verticalLayout_7.addLayout(self.autoscroll_layout)
2405
+
2406
+ self.verticalLayout_6.addWidget(self.manual_defaults_groupbox)
2339
2407
 
2340
2408
  self.verticalSpacer_5 = QSpacerItem(
2341
2409
  5, 5, QSizePolicy.Policy.Minimum, QSizePolicy.Policy.Expanding
@@ -3098,32 +3166,96 @@ class Ui_PrimaryWindow(object):
3098
3166
  None,
3099
3167
  )
3100
3168
  )
3169
+ self.primary_defaults_groupbox.setTitle(
3170
+ QCoreApplication.translate("PrimaryWindow", "Primary window settings", None)
3171
+ )
3101
3172
  self.label_17.setText(
3102
3173
  QCoreApplication.translate("PrimaryWindow", "Epoch length:", None)
3103
3174
  )
3175
+ # if QT_CONFIG(tooltip)
3176
+ self.default_epoch_input.setToolTip(
3177
+ QCoreApplication.translate(
3178
+ "PrimaryWindow",
3179
+ "This sets the temporal resolution for sleep scoring",
3180
+ None,
3181
+ )
3182
+ )
3183
+ # endif // QT_CONFIG(tooltip)
3104
3184
  self.default_epoch_input.setSuffix(
3105
3185
  QCoreApplication.translate("PrimaryWindow", " sec", None)
3106
3186
  )
3187
+ # if QT_CONFIG(tooltip)
3188
+ self.overwrite_default_checkbox.setToolTip(
3189
+ QCoreApplication.translate(
3190
+ "PrimaryWindow",
3191
+ "During automated scoring, only overwrite epochs with the undefined brain state",
3192
+ None,
3193
+ )
3194
+ )
3195
+ # endif // QT_CONFIG(tooltip)
3107
3196
  self.overwrite_default_checkbox.setText(
3108
3197
  QCoreApplication.translate(
3109
3198
  "PrimaryWindow", "Only overwrite undefined epochs", None
3110
3199
  )
3111
3200
  )
3201
+ # if QT_CONFIG(tooltip)
3202
+ self.confidence_setting_checkbox.setToolTip(
3203
+ QCoreApplication.translate(
3204
+ "PrimaryWindow",
3205
+ "Save the model's confidence scores in label files",
3206
+ None,
3207
+ )
3208
+ )
3209
+ # endif // QT_CONFIG(tooltip)
3112
3210
  self.confidence_setting_checkbox.setText(
3113
3211
  QCoreApplication.translate("PrimaryWindow", "Save confidence scores", None)
3114
3212
  )
3115
3213
  self.label_19.setText(
3116
3214
  QCoreApplication.translate("PrimaryWindow", "Minimum bout length:", None)
3117
3215
  )
3216
+ # if QT_CONFIG(tooltip)
3217
+ self.default_min_bout_length_spinbox.setToolTip(
3218
+ QCoreApplication.translate(
3219
+ "PrimaryWindow",
3220
+ "Minimum allowed duration for a bout of any brain state",
3221
+ None,
3222
+ )
3223
+ )
3224
+ # endif // QT_CONFIG(tooltip)
3118
3225
  self.default_min_bout_length_spinbox.setSuffix(
3119
3226
  QCoreApplication.translate("PrimaryWindow", " sec", None)
3120
3227
  )
3228
+ self.manual_defaults_groupbox.setTitle(
3229
+ QCoreApplication.translate(
3230
+ "PrimaryWindow", "Manual scoring window settings", None
3231
+ )
3232
+ )
3233
+ self.label_20.setText(
3234
+ QCoreApplication.translate("PrimaryWindow", "Epochs to show", None)
3235
+ )
3236
+ # if QT_CONFIG(tooltip)
3237
+ self.epochs_to_show_spinbox.setToolTip(
3238
+ QCoreApplication.translate(
3239
+ "PrimaryWindow", "Number of epochs to display in the lower plots", None
3240
+ )
3241
+ )
3242
+ # endif // QT_CONFIG(tooltip)
3243
+ # if QT_CONFIG(tooltip)
3244
+ self.autoscroll_checkbox.setToolTip(
3245
+ QCoreApplication.translate(
3246
+ "PrimaryWindow",
3247
+ "After scoring each epoch, automatically advance to the next one",
3248
+ None,
3249
+ )
3250
+ )
3251
+ # endif // QT_CONFIG(tooltip)
3252
+ self.autoscroll_checkbox.setText(
3253
+ QCoreApplication.translate("PrimaryWindow", "Auto scroll", None)
3254
+ )
3121
3255
  self.ui_default_description_label.setText(
3122
3256
  QCoreApplication.translate(
3123
3257
  "PrimaryWindow",
3124
- "These are the default values/settings that are shown in the primary UI window when it starts up.\n"
3125
- "\n"
3126
- 'Changes here will not affect the **current** state of the controls in the "Sleep scoring" tab.',
3258
+ "<html><head/><body><p>These are the default values/settings that are shown in the primary window and manual scoring window when they start up.</p><p>Changes here will not affect the **current** state of the controls in the &quot;Sleep scoring&quot; tab.</p></body></html>",
3127
3259
  None,
3128
3260
  )
3129
3261
  )
@@ -3787,184 +3787,307 @@ Each brain state has several attributes:
3787
3787
  <item>
3788
3788
  <layout class="QVBoxLayout" name="verticalLayout_6">
3789
3789
  <property name="spacing">
3790
- <number>10</number>
3790
+ <number>20</number>
3791
3791
  </property>
3792
3792
  <item>
3793
- <layout class="QHBoxLayout" name="default_epoch_layout">
3794
- <item>
3795
- <layout class="QHBoxLayout" name="horizontalLayout_60">
3796
- <item>
3797
- <widget class="QLabel" name="label_17">
3798
- <property name="sizePolicy">
3799
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
3800
- <horstretch>0</horstretch>
3801
- <verstretch>0</verstretch>
3802
- </sizepolicy>
3803
- </property>
3804
- <property name="text">
3805
- <string>Epoch length:</string>
3806
- </property>
3807
- </widget>
3808
- </item>
3809
- <item>
3810
- <widget class="QDoubleSpinBox" name="default_epoch_input">
3811
- <property name="sizePolicy">
3812
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
3813
- <horstretch>0</horstretch>
3814
- <verstretch>0</verstretch>
3815
- </sizepolicy>
3816
- </property>
3817
- <property name="suffix">
3818
- <string> sec</string>
3819
- </property>
3820
- <property name="maximum">
3821
- <double>100000.000000000000000</double>
3822
- </property>
3823
- <property name="singleStep">
3824
- <double>0.500000000000000</double>
3825
- </property>
3826
- </widget>
3827
- </item>
3828
- </layout>
3829
- </item>
3830
- <item>
3831
- <spacer name="horizontalSpacer_70">
3832
- <property name="orientation">
3833
- <enum>Qt::Orientation::Horizontal</enum>
3834
- </property>
3835
- <property name="sizeType">
3836
- <enum>QSizePolicy::Policy::Expanding</enum>
3837
- </property>
3838
- <property name="sizeHint" stdset="0">
3839
- <size>
3840
- <width>10</width>
3841
- <height>10</height>
3842
- </size>
3843
- </property>
3844
- </spacer>
3845
- </item>
3846
- </layout>
3847
- </item>
3848
- <item>
3849
- <layout class="QHBoxLayout" name="horizontalLayout_75">
3850
- <item>
3851
- <layout class="QHBoxLayout" name="horizontalLayout_76">
3852
- <item>
3853
- <widget class="QCheckBox" name="overwrite_default_checkbox">
3854
- <property name="text">
3855
- <string>Only overwrite undefined epochs</string>
3856
- </property>
3857
- </widget>
3858
- </item>
3859
- </layout>
3860
- </item>
3861
- <item>
3862
- <spacer name="horizontalSpacer_88">
3863
- <property name="orientation">
3864
- <enum>Qt::Orientation::Horizontal</enum>
3865
- </property>
3866
- <property name="sizeHint" stdset="0">
3867
- <size>
3868
- <width>40</width>
3869
- <height>20</height>
3870
- </size>
3871
- </property>
3872
- </spacer>
3873
- </item>
3874
- </layout>
3875
- </item>
3876
- <item>
3877
- <layout class="QHBoxLayout" name="confidence_score_setting_layout">
3878
- <item>
3879
- <layout class="QHBoxLayout" name="horizontalLayout_62">
3880
- <item>
3881
- <widget class="QCheckBox" name="confidence_setting_checkbox">
3882
- <property name="sizePolicy">
3883
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
3884
- <horstretch>0</horstretch>
3885
- <verstretch>0</verstretch>
3886
- </sizepolicy>
3887
- </property>
3888
- <property name="text">
3889
- <string>Save confidence scores</string>
3890
- </property>
3891
- <property name="checked">
3892
- <bool>true</bool>
3893
- </property>
3894
- </widget>
3895
- </item>
3896
- </layout>
3897
- </item>
3898
- <item>
3899
- <spacer name="horizontalSpacer_72">
3900
- <property name="orientation">
3901
- <enum>Qt::Orientation::Horizontal</enum>
3902
- </property>
3903
- <property name="sizeType">
3904
- <enum>QSizePolicy::Policy::Expanding</enum>
3905
- </property>
3906
- <property name="sizeHint" stdset="0">
3907
- <size>
3908
- <width>10</width>
3909
- <height>10</height>
3910
- </size>
3911
- </property>
3912
- </spacer>
3913
- </item>
3914
- </layout>
3793
+ <widget class="QGroupBox" name="primary_defaults_groupbox">
3794
+ <property name="title">
3795
+ <string>Primary window settings</string>
3796
+ </property>
3797
+ <layout class="QVBoxLayout" name="verticalLayout_4">
3798
+ <property name="spacing">
3799
+ <number>10</number>
3800
+ </property>
3801
+ <item>
3802
+ <layout class="QHBoxLayout" name="default_epoch_layout">
3803
+ <item>
3804
+ <layout class="QHBoxLayout" name="horizontalLayout_60">
3805
+ <item>
3806
+ <widget class="QLabel" name="label_17">
3807
+ <property name="sizePolicy">
3808
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
3809
+ <horstretch>0</horstretch>
3810
+ <verstretch>0</verstretch>
3811
+ </sizepolicy>
3812
+ </property>
3813
+ <property name="text">
3814
+ <string>Epoch length:</string>
3815
+ </property>
3816
+ </widget>
3817
+ </item>
3818
+ <item>
3819
+ <widget class="QDoubleSpinBox" name="default_epoch_input">
3820
+ <property name="sizePolicy">
3821
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
3822
+ <horstretch>0</horstretch>
3823
+ <verstretch>0</verstretch>
3824
+ </sizepolicy>
3825
+ </property>
3826
+ <property name="toolTip">
3827
+ <string>This sets the temporal resolution for sleep scoring</string>
3828
+ </property>
3829
+ <property name="suffix">
3830
+ <string> sec</string>
3831
+ </property>
3832
+ <property name="maximum">
3833
+ <double>100000.000000000000000</double>
3834
+ </property>
3835
+ <property name="singleStep">
3836
+ <double>0.500000000000000</double>
3837
+ </property>
3838
+ </widget>
3839
+ </item>
3840
+ </layout>
3841
+ </item>
3842
+ <item>
3843
+ <spacer name="horizontalSpacer_70">
3844
+ <property name="orientation">
3845
+ <enum>Qt::Orientation::Horizontal</enum>
3846
+ </property>
3847
+ <property name="sizeType">
3848
+ <enum>QSizePolicy::Policy::Expanding</enum>
3849
+ </property>
3850
+ <property name="sizeHint" stdset="0">
3851
+ <size>
3852
+ <width>10</width>
3853
+ <height>10</height>
3854
+ </size>
3855
+ </property>
3856
+ </spacer>
3857
+ </item>
3858
+ </layout>
3859
+ </item>
3860
+ <item>
3861
+ <layout class="QHBoxLayout" name="horizontalLayout_75">
3862
+ <item>
3863
+ <layout class="QHBoxLayout" name="horizontalLayout_76">
3864
+ <item>
3865
+ <widget class="QCheckBox" name="overwrite_default_checkbox">
3866
+ <property name="toolTip">
3867
+ <string>During automated scoring, only overwrite epochs with the undefined brain state</string>
3868
+ </property>
3869
+ <property name="text">
3870
+ <string>Only overwrite undefined epochs</string>
3871
+ </property>
3872
+ </widget>
3873
+ </item>
3874
+ </layout>
3875
+ </item>
3876
+ <item>
3877
+ <spacer name="horizontalSpacer_88">
3878
+ <property name="orientation">
3879
+ <enum>Qt::Orientation::Horizontal</enum>
3880
+ </property>
3881
+ <property name="sizeHint" stdset="0">
3882
+ <size>
3883
+ <width>40</width>
3884
+ <height>20</height>
3885
+ </size>
3886
+ </property>
3887
+ </spacer>
3888
+ </item>
3889
+ </layout>
3890
+ </item>
3891
+ <item>
3892
+ <layout class="QHBoxLayout" name="confidence_score_setting_layout">
3893
+ <item>
3894
+ <layout class="QHBoxLayout" name="horizontalLayout_62">
3895
+ <item>
3896
+ <widget class="QCheckBox" name="confidence_setting_checkbox">
3897
+ <property name="sizePolicy">
3898
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
3899
+ <horstretch>0</horstretch>
3900
+ <verstretch>0</verstretch>
3901
+ </sizepolicy>
3902
+ </property>
3903
+ <property name="toolTip">
3904
+ <string>Save the model's confidence scores in label files</string>
3905
+ </property>
3906
+ <property name="text">
3907
+ <string>Save confidence scores</string>
3908
+ </property>
3909
+ <property name="checked">
3910
+ <bool>true</bool>
3911
+ </property>
3912
+ </widget>
3913
+ </item>
3914
+ </layout>
3915
+ </item>
3916
+ <item>
3917
+ <spacer name="horizontalSpacer_72">
3918
+ <property name="orientation">
3919
+ <enum>Qt::Orientation::Horizontal</enum>
3920
+ </property>
3921
+ <property name="sizeType">
3922
+ <enum>QSizePolicy::Policy::Expanding</enum>
3923
+ </property>
3924
+ <property name="sizeHint" stdset="0">
3925
+ <size>
3926
+ <width>10</width>
3927
+ <height>10</height>
3928
+ </size>
3929
+ </property>
3930
+ </spacer>
3931
+ </item>
3932
+ </layout>
3933
+ </item>
3934
+ <item>
3935
+ <layout class="QHBoxLayout" name="horizontalLayout_2">
3936
+ <item>
3937
+ <layout class="QHBoxLayout" name="horizontalLayout_18">
3938
+ <item>
3939
+ <widget class="QLabel" name="label_19">
3940
+ <property name="sizePolicy">
3941
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
3942
+ <horstretch>0</horstretch>
3943
+ <verstretch>0</verstretch>
3944
+ </sizepolicy>
3945
+ </property>
3946
+ <property name="text">
3947
+ <string>Minimum bout length:</string>
3948
+ </property>
3949
+ </widget>
3950
+ </item>
3951
+ <item>
3952
+ <widget class="QDoubleSpinBox" name="default_min_bout_length_spinbox">
3953
+ <property name="sizePolicy">
3954
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
3955
+ <horstretch>0</horstretch>
3956
+ <verstretch>0</verstretch>
3957
+ </sizepolicy>
3958
+ </property>
3959
+ <property name="toolTip">
3960
+ <string>Minimum allowed duration for a bout of any brain state</string>
3961
+ </property>
3962
+ <property name="suffix">
3963
+ <string> sec</string>
3964
+ </property>
3965
+ <property name="maximum">
3966
+ <double>1000.000000000000000</double>
3967
+ </property>
3968
+ <property name="value">
3969
+ <double>5.000000000000000</double>
3970
+ </property>
3971
+ </widget>
3972
+ </item>
3973
+ </layout>
3974
+ </item>
3975
+ <item>
3976
+ <spacer name="horizontalSpacer_90">
3977
+ <property name="orientation">
3978
+ <enum>Qt::Orientation::Horizontal</enum>
3979
+ </property>
3980
+ <property name="sizeHint" stdset="0">
3981
+ <size>
3982
+ <width>5</width>
3983
+ <height>5</height>
3984
+ </size>
3985
+ </property>
3986
+ </spacer>
3987
+ </item>
3988
+ </layout>
3989
+ </item>
3990
+ </layout>
3991
+ </widget>
3915
3992
  </item>
3916
3993
  <item>
3917
- <layout class="QHBoxLayout" name="horizontalLayout_2">
3918
- <item>
3919
- <layout class="QHBoxLayout" name="horizontalLayout_18">
3920
- <item>
3921
- <widget class="QLabel" name="label_19">
3922
- <property name="sizePolicy">
3923
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
3924
- <horstretch>0</horstretch>
3925
- <verstretch>0</verstretch>
3926
- </sizepolicy>
3927
- </property>
3928
- <property name="text">
3929
- <string>Minimum bout length:</string>
3930
- </property>
3931
- </widget>
3932
- </item>
3933
- <item>
3934
- <widget class="QDoubleSpinBox" name="default_min_bout_length_spinbox">
3935
- <property name="sizePolicy">
3936
- <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
3937
- <horstretch>0</horstretch>
3938
- <verstretch>0</verstretch>
3939
- </sizepolicy>
3940
- </property>
3941
- <property name="suffix">
3942
- <string> sec</string>
3943
- </property>
3944
- <property name="maximum">
3945
- <double>1000.000000000000000</double>
3946
- </property>
3947
- <property name="value">
3948
- <double>5.000000000000000</double>
3949
- </property>
3950
- </widget>
3951
- </item>
3952
- </layout>
3953
- </item>
3954
- <item>
3955
- <spacer name="horizontalSpacer_90">
3956
- <property name="orientation">
3957
- <enum>Qt::Orientation::Horizontal</enum>
3958
- </property>
3959
- <property name="sizeHint" stdset="0">
3960
- <size>
3961
- <width>5</width>
3962
- <height>5</height>
3963
- </size>
3964
- </property>
3965
- </spacer>
3966
- </item>
3967
- </layout>
3994
+ <widget class="QGroupBox" name="manual_defaults_groupbox">
3995
+ <property name="title">
3996
+ <string>Manual scoring window settings</string>
3997
+ </property>
3998
+ <layout class="QVBoxLayout" name="verticalLayout_7">
3999
+ <property name="spacing">
4000
+ <number>10</number>
4001
+ </property>
4002
+ <item>
4003
+ <layout class="QHBoxLayout" name="epochs_to_show_layout">
4004
+ <item>
4005
+ <layout class="QHBoxLayout" name="horizontalLayout_78">
4006
+ <item>
4007
+ <widget class="QLabel" name="label_20">
4008
+ <property name="sizePolicy">
4009
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
4010
+ <horstretch>0</horstretch>
4011
+ <verstretch>0</verstretch>
4012
+ </sizepolicy>
4013
+ </property>
4014
+ <property name="text">
4015
+ <string>Epochs to show</string>
4016
+ </property>
4017
+ </widget>
4018
+ </item>
4019
+ <item>
4020
+ <widget class="QSpinBox" name="epochs_to_show_spinbox">
4021
+ <property name="toolTip">
4022
+ <string>Number of epochs to display in the lower plots</string>
4023
+ </property>
4024
+ <property name="minimum">
4025
+ <number>3</number>
4026
+ </property>
4027
+ <property name="singleStep">
4028
+ <number>2</number>
4029
+ </property>
4030
+ <property name="value">
4031
+ <number>5</number>
4032
+ </property>
4033
+ </widget>
4034
+ </item>
4035
+ </layout>
4036
+ </item>
4037
+ <item>
4038
+ <spacer name="horizontalSpacer_92">
4039
+ <property name="orientation">
4040
+ <enum>Qt::Orientation::Horizontal</enum>
4041
+ </property>
4042
+ <property name="sizeHint" stdset="0">
4043
+ <size>
4044
+ <width>40</width>
4045
+ <height>20</height>
4046
+ </size>
4047
+ </property>
4048
+ </spacer>
4049
+ </item>
4050
+ </layout>
4051
+ </item>
4052
+ <item>
4053
+ <layout class="QHBoxLayout" name="autoscroll_layout">
4054
+ <item>
4055
+ <layout class="QHBoxLayout" name="horizontalLayout_77">
4056
+ <item>
4057
+ <widget class="QCheckBox" name="autoscroll_checkbox">
4058
+ <property name="sizePolicy">
4059
+ <sizepolicy hsizetype="Fixed" vsizetype="Fixed">
4060
+ <horstretch>0</horstretch>
4061
+ <verstretch>0</verstretch>
4062
+ </sizepolicy>
4063
+ </property>
4064
+ <property name="toolTip">
4065
+ <string>After scoring each epoch, automatically advance to the next one</string>
4066
+ </property>
4067
+ <property name="text">
4068
+ <string>Auto scroll</string>
4069
+ </property>
4070
+ </widget>
4071
+ </item>
4072
+ </layout>
4073
+ </item>
4074
+ <item>
4075
+ <spacer name="horizontalSpacer_91">
4076
+ <property name="orientation">
4077
+ <enum>Qt::Orientation::Horizontal</enum>
4078
+ </property>
4079
+ <property name="sizeHint" stdset="0">
4080
+ <size>
4081
+ <width>10</width>
4082
+ <height>10</height>
4083
+ </size>
4084
+ </property>
4085
+ </spacer>
4086
+ </item>
4087
+ </layout>
4088
+ </item>
4089
+ </layout>
4090
+ </widget>
3968
4091
  </item>
3969
4092
  <item>
3970
4093
  <spacer name="verticalSpacer_5">
@@ -3989,9 +4112,7 @@ Each brain state has several attributes:
3989
4112
  <string notr="true">background-color: white;</string>
3990
4113
  </property>
3991
4114
  <property name="text">
3992
- <string>These are the default values/settings that are shown in the primary UI window when it starts up.
3993
-
3994
- Changes here will not affect the **current** state of the controls in the &quot;Sleep scoring&quot; tab.</string>
4115
+ <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;These are the default values/settings that are shown in the primary window and manual scoring window when they start up.&lt;/p&gt;&lt;p&gt;Changes here will not affect the **current** state of the controls in the &amp;quot;Sleep scoring&amp;quot; tab.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
3995
4116
  </property>
3996
4117
  <property name="textFormat">
3997
4118
  <enum>Qt::TextFormat::MarkdownText</enum>
@@ -40,7 +40,7 @@ your changes, you need to update the python representation of the UI.
40
40
  ```
41
41
  If the file already contains the line `import resources_rc`,
42
42
  replace it with the one above.
43
- If you updated `primary_window.py`, you also need to add:
43
+ If you updated `viewer_window.py`, you also need to add:
44
44
  ```
45
45
  from accusleepy.gui.mplwidget import MplWidget
46
46
  ```
@@ -1,6 +1,6 @@
1
- Metadata-Version: 2.3
1
+ Metadata-Version: 2.4
2
2
  Name: accusleepy
3
- Version: 0.7.3
3
+ Version: 0.8.1
4
4
  Summary: Python implementation of AccuSleep
5
5
  License: GPL-3.0-only
6
6
  Author: Zeke Barger
@@ -80,16 +80,15 @@ please consult the [developer guide](accusleepy/gui/text/dev_guide.md).
80
80
 
81
81
  ## Changelog
82
82
 
83
+ - 0.8.1: Increased test coverage
84
+ - 0.8.0: More configurable settings, visual improvements
83
85
  - 0.7.1-0.7.3: Bugfixes, code cleanup
84
86
  - 0.7.0: More settings can be configured in the UI
85
87
  - 0.6.0: Confidence scores can now be displayed and saved. Retraining your models is recommended
86
88
  since the new calibration feature will make the confidence scores more accurate.
87
89
  - 0.5.0: Performance improvements
88
90
  - 0.4.5: Added support for python 3.13, **removed support for python 3.10.**
89
- - 0.4.4: Performance improvements
90
- - 0.4.3: Improved unit tests and user manuals
91
- - 0.4.0: Improved visuals and user manuals
92
- - 0.1.0-0.3.1: Early development versions
91
+ - 0.1.0-0.4.4: Early development versions
93
92
 
94
93
  ## Screenshots
95
94
 
@@ -1,11 +1,11 @@
1
1
  accusleepy/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
2
2
  accusleepy/__main__.py,sha256=dKzl2N2Hg9lD264CWYNxThRyDKzWwyMwHRXmJxOmMis,104
3
- accusleepy/bouts.py,sha256=F_y6DxnpKFfImYb7vCZluZ2eD5I_33gZXmRM8mvebsg,5679
3
+ accusleepy/bouts.py,sha256=biJEzCjMQR-RTlQcfeomkp6NxcA5FXkhE8Kp2XyL4P4,6039
4
4
  accusleepy/brain_state_set.py,sha256=fRkrArHLIbEKimub804yt_mUXoyfsjJEfiJnTjeCMkY,3233
5
5
  accusleepy/classification.py,sha256=mF35xMrD9QXGldSnl3vkdHbm7CAptPUNjHxUA_agOTA,9778
6
- accusleepy/config.json,sha256=Ip0qTMAn2LZfof9GVA_azOvpXP0WKnqLCZeSaya1sss,819
7
- accusleepy/constants.py,sha256=r53FWeMMefuKA-mR_b2E1KBeJbq2Ck9c5VHoJ1WGZjg,2815
8
- accusleepy/fileio.py,sha256=woIF0zgJt6Lx6T9KBXAQ-AlbQAwOK1_RUmVF710nltI,7383
6
+ accusleepy/config.json,sha256=VmUFsiGD1ymEyjdzqeM5nTp8jWvDI-DIxLy1_92nueo,875
7
+ accusleepy/constants.py,sha256=62mmsr1NKzF-psS-9esuAE65kAcPL6o8v9UXQEvb5yc,2983
8
+ accusleepy/fileio.py,sha256=-aEgp2oonjQKRizVI1uI5CGknnBOxE6HG0DzxDYbSkM,8512
9
9
  accusleepy/gui/__init__.py,sha256=47DEQpj8HBSa-_TImW-5JCeuQeRkm5NMpJWZG3hSuFU,0
10
10
  accusleepy/gui/icons/brightness_down.png,sha256=PLT1fb83RHIhSRuU7MMMx0G7oJAY7o9wUcnqM8veZfM,12432
11
11
  accusleepy/gui/icons/brightness_up.png,sha256=64GnUqgPvN5xZ6Um3wOzwqvUmdAWYZT6eFmWpBsHyks,12989
@@ -18,17 +18,17 @@ accusleepy/gui/icons/save.png,sha256=J3EA8iU1BqLYRSsrq_OdoZlqrv2yfL7oV54DklTy_DI
18
18
  accusleepy/gui/icons/up_arrow.png,sha256=V9yF9t1WgjPaUu-mF1YGe_DfaRHg2dUpR_sUVVcvVvY,3329
19
19
  accusleepy/gui/icons/zoom_in.png,sha256=MFWnKZp7Rvh4bLPq4Cqo4sB_jQYedUUtT8-ZO8tNYyc,13589
20
20
  accusleepy/gui/icons/zoom_out.png,sha256=IB8Jecb3i0U4qjWRR46ridjLpvLCSe7PozBaLqQqYSw,13055
21
- accusleepy/gui/images/primary_window.png,sha256=VBeXf20pYJ8Sfjz5qCrlciQfiwZhMutF4tHCHA7-RGc,595012
21
+ accusleepy/gui/images/primary_window.png,sha256=yRGUdIcByF8DtPtDWqjmnQ8J3IHKtmijBsT7N9e1Ij0,595764
22
22
  accusleepy/gui/images/viewer_window.png,sha256=b_B7m9WSLMAOzNjctq76SyekO1WfC6qYZVNnYfhjPe8,977197
23
23
  accusleepy/gui/images/viewer_window_annotated.png,sha256=uMNUmsZIdzDlQpyoiS3lJGoWlg_T325Oj5hDZhM3Y14,146817
24
- accusleepy/gui/main.py,sha256=sLHe1imVU6xz3f6sJ9u7sxrTny9X213ev29ldoxXpX0,57740
25
- accusleepy/gui/manual_scoring.py,sha256=7jKdw-D9HdpYC2G_2RHt5UALLMjrIsP-hvLFkNM25Ek,40553
24
+ accusleepy/gui/main.py,sha256=cZQH0qJ_mykeQP7eadc1yzFHYeDwbRngrR4_H1wMxWY,58438
25
+ accusleepy/gui/manual_scoring.py,sha256=QCFF-CIU6nh26NB8Z9ktohCk8p7ola2hgjazD-OrK_o,40697
26
26
  accusleepy/gui/mplwidget.py,sha256=rJSTtWmLjHn8r3c9Kb23Rc4XzXl3i9B-JrjNjjlNnmQ,13492
27
- accusleepy/gui/primary_window.py,sha256=aV0r4mRIXp56MKvuyF2iZLXPNZjZWrpugPtUb2D5saQ,135855
28
- accusleepy/gui/primary_window.ui,sha256=8Vs76j-QMlAKaX1oclOS1LicdGQ2znpqKarro2tLgbA,201602
27
+ accusleepy/gui/primary_window.py,sha256=qqV-GAC3BgOus1lJMOg2U4AGQbhy35zLMyN8Q7ouTd8,141479
28
+ accusleepy/gui/primary_window.ui,sha256=2mD0G6b8bsyyUvMCUosQ0K-nAzMA2iiP3yMpeh9INcQ,208209
29
29
  accusleepy/gui/resources.qrc,sha256=wqPendnTLAuKfVI6v2lKHiRqAWM0oaz2ZuF5cucJdS4,803
30
30
  accusleepy/gui/resources_rc.py,sha256=Z2e34h30U4snJjnYdZVV9B6yjATKxxfvgTRt5uXtQdo,329727
31
- accusleepy/gui/text/dev_guide.md,sha256=X69cMsPtSNCqjiYQNvaIUD-QXjRFeGHLPyH2GXMTC8Q,2061
31
+ accusleepy/gui/text/dev_guide.md,sha256=PgOXfGvN17fCtnsfGvPhrhK4FUWFGP_TsHA6t9skP3U,2060
32
32
  accusleepy/gui/text/main_guide.md,sha256=iZDRp5OWyQX9LV7CMeUFIYv2ryKlIcGALRLXjxR8HpI,8288
33
33
  accusleepy/gui/text/manual_scoring_guide.md,sha256=ow_RMSjFy05NupEDSCuJtu-V65-BPnIkrZqtssFoZCQ,999
34
34
  accusleepy/gui/viewer_window.py,sha256=jysFw7C_Tr7mtK1XNWhIpHblBvatwduE3RF2GP4lrro,24479
@@ -38,6 +38,6 @@ accusleepy/multitaper.py,sha256=D5-iglwkFBRciL5tKSNcunMtcq0rM3zHwRHUVPgem1U,2567
38
38
  accusleepy/signal_processing.py,sha256=47fEAx8Aqqkiqix1ai2YEK9Fhq6UHoQcwAcOi-a8ewo,16834
39
39
  accusleepy/temperature_scaling.py,sha256=glvPcvxHpBdFjwjGfZdNku9L_BozycEmdqZhKKUCCNg,5749
40
40
  accusleepy/validation.py,sha256=VpLWK-wD5tCU6lTBG3KYgTi3PWGuYh6NitMgMoMH8JM,4434
41
- accusleepy-0.7.3.dist-info/METADATA,sha256=sna1nfMfIcNYYsNT-2Z3BlanP2Jt5kLr9wpBuRILhzA,4743
42
- accusleepy-0.7.3.dist-info/WHEEL,sha256=b4K_helf-jlQoXBBETfwnf4B04YC67LOev0jo4fX5m8,88
43
- accusleepy-0.7.3.dist-info/RECORD,,
41
+ accusleepy-0.8.1.dist-info/METADATA,sha256=29kPvzKr2ykosWwidIt6FKrjvIY-m88Ui9GQPoQPN-g,4710
42
+ accusleepy-0.8.1.dist-info/WHEEL,sha256=zp0Cn7JsFoX2ATtOhtaFYIiE2rmFAD4OcMhtUki8W3U,88
43
+ accusleepy-0.8.1.dist-info/RECORD,,
@@ -1,4 +1,4 @@
1
1
  Wheel-Version: 1.0
2
- Generator: poetry-core 2.1.3
2
+ Generator: poetry-core 2.2.1
3
3
  Root-Is-Purelib: true
4
4
  Tag: py3-none-any