sonusai 0.18.0__py3-none-any.whl → 0.18.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.
@@ -0,0 +1,72 @@
1
+ from collections import namedtuple
2
+
3
+ TruthSettingRecord = namedtuple('TruthSettingRecord', [
4
+ 'id',
5
+ 'setting'])
6
+
7
+ TargetFileRecord = namedtuple('TargetFileRecord', [
8
+ 'id',
9
+ 'name',
10
+ 'samples',
11
+ 'level_type',
12
+ 'speaker_id'])
13
+
14
+ NoiseFileRecord = namedtuple('NoiseFileRecord', [
15
+ 'id',
16
+ 'name',
17
+ 'samples'])
18
+
19
+ TopRecord = namedtuple('TopRecord', [
20
+ 'id',
21
+ 'version',
22
+ 'class_balancing',
23
+ 'feature',
24
+ 'noise_mix_mode',
25
+ 'num_classes',
26
+ 'seed',
27
+ 'truth_mutex',
28
+ 'truth_reduction_function',
29
+ 'mixid_width',
30
+ 'speaker_metadata_tiers',
31
+ 'textgrid_metadata_tiers'])
32
+
33
+ ClassLabelRecord = namedtuple('ClassLabelRecord', [
34
+ 'id',
35
+ 'label'])
36
+
37
+ ClassWeightsThresholdRecord = namedtuple('ClassWeightsThresholdRecord', [
38
+ 'id',
39
+ 'threshold'])
40
+
41
+ ImpulseResponseFileRecord = namedtuple('ImpulseResponseFileRecord', [
42
+ 'id',
43
+ 'file'])
44
+
45
+ SpectralMaskRecord = namedtuple('SpectralMaskRecord', [
46
+ 'id',
47
+ 'f_max_width',
48
+ 'f_num',
49
+ 't_max_width',
50
+ 't_num',
51
+ 't_max_percent'])
52
+
53
+ TargetRecord = namedtuple('TargetRecord', [
54
+ 'id',
55
+ 'file_id',
56
+ 'augmentation',
57
+ 'gain'])
58
+
59
+ MixtureRecord = namedtuple('MixtureRecord', [
60
+ 'id',
61
+ 'name',
62
+ 'noise_file_id',
63
+ 'noise_augmentation',
64
+ 'noise_offset',
65
+ 'noise_snr_gain',
66
+ 'random_snr',
67
+ 'snr',
68
+ 'samples',
69
+ 'spectral_mask_id',
70
+ 'spectral_mask_seed',
71
+ 'target_snr_gain'
72
+ ])
@@ -992,6 +992,9 @@ def _populate_speaker_table(location: str, target_files: TargetFiles, test: bool
992
992
  description[0] not in ('id', 'parent')]
993
993
  con.execute("UPDATE top SET speaker_metadata_tiers=? WHERE top.id = ?", (json.dumps(tiers), 1))
994
994
 
995
+ if 'speaker_id' in tiers:
996
+ con.execute("CREATE INDEX speaker_speaker_id_idx ON speaker (speaker_id)")
997
+
995
998
  con.commit()
996
999
  con.close()
997
1000
 
@@ -26,6 +26,8 @@ from sonusai.mixture.datatypes import TargetFiles
26
26
  from sonusai.mixture.datatypes import Targets
27
27
  from sonusai.mixture.datatypes import TransformConfig
28
28
  from sonusai.mixture.datatypes import Truth
29
+ from sonusai.mixture.db_datatypes import MixtureRecord
30
+ from sonusai.mixture.db_datatypes import TargetRecord
29
31
  from sonusai.mixture.mixdb import MixtureDatabase
30
32
 
31
33
 
@@ -228,7 +230,7 @@ def from_mixture(mixture: Mixture) -> tuple[str, int, str, int, float, bool, flo
228
230
  mixture.target_snr_gain)
229
231
 
230
232
 
231
- def to_mixture(entry: tuple[str, int, str, int, float, bool, float, int, int, int, float], targets: Targets) -> Mixture:
233
+ def to_mixture(entry: MixtureRecord, targets: Targets) -> Mixture:
232
234
  import json
233
235
 
234
236
  from sonusai.utils import dataclass_from_dict
@@ -238,32 +240,32 @@ def to_mixture(entry: tuple[str, int, str, int, float, bool, float, int, int, in
238
240
  from .datatypes import UniversalSNR
239
241
 
240
242
  return Mixture(targets=targets,
241
- name=entry[0],
242
- noise=Noise(file_id=entry[1],
243
- augmentation=dataclass_from_dict(Augmentation, json.loads(entry[2])),
244
- offset=entry[3]),
245
- noise_snr_gain=entry[4],
246
- snr=UniversalSNR(is_random=entry[5], value=entry[6]),
247
- samples=entry[7],
248
- spectral_mask_id=entry[8],
249
- spectral_mask_seed=entry[9],
250
- target_snr_gain=entry[10])
243
+ name=entry.name,
244
+ noise=Noise(file_id=entry.noise_file_id,
245
+ augmentation=dataclass_from_dict(Augmentation, json.loads(entry.noise_augmentation)),
246
+ offset=entry.noise_offset),
247
+ noise_snr_gain=entry.noise_snr_gain,
248
+ snr=UniversalSNR(is_random=entry.random_snr, value=entry.snr),
249
+ samples=entry.samples,
250
+ spectral_mask_id=entry.spectral_mask_id,
251
+ spectral_mask_seed=entry.spectral_mask_seed,
252
+ target_snr_gain=entry.target_snr_gain)
251
253
 
252
254
 
253
255
  def from_target(target: Target) -> tuple[int, str, float]:
254
256
  return target.file_id, target.augmentation.to_json(), target.gain
255
257
 
256
258
 
257
- def to_target(entry: tuple[int, str, float]) -> Target:
259
+ def to_target(entry: TargetRecord) -> Target:
258
260
  import json
259
261
 
260
262
  from sonusai.utils import dataclass_from_dict
261
263
  from .datatypes import Augmentation
262
264
  from .datatypes import Target
263
265
 
264
- return Target(file_id=entry[0],
265
- augmentation=dataclass_from_dict(Augmentation, json.loads(entry[1])),
266
- gain=entry[2])
266
+ return Target(file_id=entry.file_id,
267
+ augmentation=dataclass_from_dict(Augmentation, json.loads(entry.augmentation)),
268
+ gain=entry.gain)
267
269
 
268
270
 
269
271
  def read_mixture_data(name: str, items: list[str] | str) -> Any:
sonusai/mixture/mixdb.py CHANGED
@@ -129,32 +129,32 @@ class MixtureDatabase:
129
129
  @cached_property
130
130
  def num_classes(self) -> int:
131
131
  with self.db() as c:
132
- return int(c.execute("SELECT top.num_classes from top").fetchone()[0])
132
+ return int(c.execute("SELECT top.num_classes FROM top").fetchone()[0])
133
133
 
134
134
  @cached_property
135
135
  def truth_mutex(self) -> bool:
136
136
  with self.db() as c:
137
- return bool(c.execute("SELECT top.truth_mutex from top").fetchone()[0])
137
+ return bool(c.execute("SELECT top.truth_mutex FROM top").fetchone()[0])
138
138
 
139
139
  @cached_property
140
140
  def truth_reduction_function(self) -> str:
141
141
  with self.db() as c:
142
- return str(c.execute("SELECT top.truth_reduction_function from top").fetchone()[0])
142
+ return str(c.execute("SELECT top.truth_reduction_function FROM top").fetchone()[0])
143
143
 
144
144
  @cached_property
145
145
  def noise_mix_mode(self) -> str:
146
146
  with self.db() as c:
147
- return str(c.execute("SELECT top.noise_mix_mode from top").fetchone()[0])
147
+ return str(c.execute("SELECT top.noise_mix_mode FROM top").fetchone()[0])
148
148
 
149
149
  @cached_property
150
150
  def class_balancing(self) -> bool:
151
151
  with self.db() as c:
152
- return bool(c.execute("SELECT top.class_balancing from top").fetchone()[0])
152
+ return bool(c.execute("SELECT top.class_balancing FROM top").fetchone()[0])
153
153
 
154
154
  @cached_property
155
155
  def feature(self) -> str:
156
156
  with self.db() as c:
157
- return str(c.execute("SELECT top.feature from top").fetchone()[0])
157
+ return str(c.execute("SELECT top.feature FROM top").fetchone()[0])
158
158
 
159
159
  @cached_property
160
160
  def fg_decimation(self) -> int:
@@ -282,14 +282,16 @@ class MixtureDatabase:
282
282
 
283
283
  :return: Spectral masks
284
284
  """
285
+ from .db_datatypes import SpectralMaskRecord
286
+
285
287
  with self.db() as c:
286
- results = c.execute(
287
- "SELECT spectral_mask.f_max_width, f_num, t_max_width, t_num, t_max_percent FROM spectral_mask")
288
- return [SpectralMask(f_max_width=spectral_mask[0],
289
- f_num=spectral_mask[1],
290
- t_max_width=spectral_mask[2],
291
- t_num=spectral_mask[3],
292
- t_max_percent=spectral_mask[4]) for spectral_mask in results.fetchall()]
288
+ spectral_masks = [SpectralMaskRecord(*result) for result in
289
+ c.execute("SELECT * FROM spectral_mask").fetchall()]
290
+ return [SpectralMask(f_max_width=spectral_mask.f_max_width,
291
+ f_num=spectral_mask.f_num,
292
+ t_max_width=spectral_mask.t_max_width,
293
+ t_num=spectral_mask.t_num,
294
+ t_max_percent=spectral_mask.t_max_percent) for spectral_mask in spectral_masks]
293
295
 
294
296
  def spectral_mask(self, sm_id: int) -> SpectralMask:
295
297
  """Get spectral mask with ID from db
@@ -309,27 +311,29 @@ class MixtureDatabase:
309
311
 
310
312
  from .datatypes import TruthSetting
311
313
  from .datatypes import TruthSettings
314
+ from .db_datatypes import TargetFileRecord
312
315
 
313
316
  with self.db() as c:
314
317
  target_files: TargetFiles = []
315
- for target in c.execute(
316
- "SELECT target_file.name, samples, level_type, id, speaker_id FROM target_file").fetchall():
318
+ target_file_records = [TargetFileRecord(*result) for result in
319
+ c.execute("SELECT * FROM target_file").fetchall()]
320
+ for target_file_record in target_file_records:
317
321
  truth_settings: TruthSettings = []
318
- for ts in c.execute(
322
+ for truth_setting_records in c.execute(
319
323
  "SELECT truth_setting.setting " +
320
324
  "FROM truth_setting, target_file_truth_setting " +
321
325
  "WHERE ? = target_file_truth_setting.target_file_id " +
322
326
  "AND truth_setting.id = target_file_truth_setting.truth_setting_id",
323
- (target[3],)).fetchall():
324
- entry = json.loads(ts[0])
325
- truth_settings.append(TruthSetting(config=entry.get('config', None),
326
- function=entry.get('function', None),
327
- index=entry.get('index', None)))
328
- target_files.append(TargetFile(name=target[0],
329
- samples=target[1],
330
- level_type=target[2],
327
+ (target_file_record.id,)).fetchall():
328
+ truth_setting = json.loads(truth_setting_records[0])
329
+ truth_settings.append(TruthSetting(config=truth_setting.get('config', None),
330
+ function=truth_setting.get('function', None),
331
+ index=truth_setting.get('index', None)))
332
+ target_files.append(TargetFile(name=target_file_record.name,
333
+ samples=target_file_record.samples,
334
+ level_type=target_file_record.level_type,
331
335
  truth_settings=truth_settings,
332
- speaker_id=target[4]))
336
+ speaker_id=target_file_record.speaker_id))
333
337
  return target_files
334
338
 
335
339
  @cached_property
@@ -439,18 +443,16 @@ class MixtureDatabase:
439
443
  """
440
444
  from .helpers import to_mixture
441
445
  from .helpers import to_target
446
+ from .db_datatypes import MixtureRecord
447
+ from .db_datatypes import TargetRecord
442
448
 
443
449
  with self.db() as c:
444
450
  mixtures: Mixtures = []
445
- for mixture in c.execute(
446
- "SELECT mixture.name, noise_file_id, noise_augmentation, noise_offset, noise_snr_gain, " +
447
- "random_snr, snr, samples, spectral_mask_id, spectral_mask_seed, target_snr_gain, id " +
448
- "FROM mixture").fetchall():
449
- targets = [to_target(target) for target in c.execute(
450
- "SELECT target.file_id, augmentation, gain " +
451
- "FROM target, mixture_target " +
451
+ for mixture in [MixtureRecord(*record) for record in c.execute("SELECT * FROM mixture").fetchall()]:
452
+ targets = [to_target(TargetRecord(*target)) for target in c.execute(
453
+ "SELECT target.* FROM target, mixture_target " +
452
454
  "WHERE ? = mixture_target.mixture_id AND target.id = mixture_target.target_id",
453
- (mixture[11],)).fetchall()]
455
+ (mixture.id,)).fetchall()]
454
456
  mixtures.append(to_mixture(mixture, targets))
455
457
  return mixtures
456
458
 
@@ -474,7 +476,7 @@ class MixtureDatabase:
474
476
  @cached_property
475
477
  def mixid_width(self) -> int:
476
478
  with self.db() as c:
477
- return int(c.execute("SELECT top.mixid_width from top").fetchone()[0])
479
+ return int(c.execute("SELECT top.mixid_width FROM top").fetchone()[0])
478
480
 
479
481
  def location_filename(self, name: str) -> str:
480
482
  """Add the location to the given file name
@@ -1001,17 +1003,8 @@ class MixtureDatabase:
1001
1003
  def speech_metadata_tiers(self) -> list[str]:
1002
1004
  return sorted(set(self.speaker_metadata_tiers + self.textgrid_metadata_tiers))
1003
1005
 
1004
- def speaker(self, speaker_id: int | None, tier: str) -> Optional[str]:
1005
- if speaker_id is None:
1006
- return None
1007
-
1008
- with self.db() as c:
1009
- data = c.execute(f'SELECT {tier} FROM speaker WHERE ? = id', (speaker_id,)).fetchone()
1010
- if data is None:
1011
- return None
1012
- if data[0] is None:
1013
- return None
1014
- return data[0]
1006
+ def speaker(self, s_id: int | None, tier: str) -> Optional[str]:
1007
+ return _speaker(self.db, s_id, tier)
1015
1008
 
1016
1009
  def speech_metadata(self, tier: str) -> list[str]:
1017
1010
  from .helpers import get_textgrid_tier_from_target_file
@@ -1096,27 +1089,22 @@ class MixtureDatabase:
1096
1089
  return x == value
1097
1090
 
1098
1091
  # First get list of matching target files
1099
- target_files: list[str] = []
1092
+ target_file_ids: list[int] = []
1100
1093
  is_textgrid = tier in self.textgrid_metadata_tiers
1101
- for target_file in self.target_files:
1094
+ for target_file_id, target_file in enumerate(self.target_files):
1102
1095
  if is_textgrid:
1103
1096
  metadata = get_textgrid_tier_from_target_file(target_file.name, tier)
1104
1097
  else:
1105
1098
  metadata = self.speaker(target_file.speaker_id, tier)
1106
1099
 
1107
1100
  if not isinstance(metadata, list) and predicate(metadata):
1108
- target_files.append(target_file.name)
1101
+ target_file_ids.append(target_file_id + 1)
1109
1102
 
1110
1103
  # Next get list of mixture IDs that contain those target files
1111
- m_ids: list[int] = []
1112
- for m_id in self.mixids_to_list():
1113
- mixid_target_files = [self.target_file(target.file_id).name for target in self.mixture(m_id).targets]
1114
- for mixid_target_file in mixid_target_files:
1115
- if mixid_target_file in target_files:
1116
- m_ids.append(m_id)
1117
-
1118
- # Return sorted, unique list of mixture IDs
1119
- return sorted(list(set(m_ids)))
1104
+ with self.db() as c:
1105
+ m_ids = c.execute("SELECT mixture_id FROM mixture_target " +
1106
+ f"WHERE mixture_target.target_id IN ({','.join(map(str, target_file_ids))})").fetchall()
1107
+ return [x[0] - 1 for x in m_ids]
1120
1108
 
1121
1109
  def mixture_all_speech_metadata(self, m_id: int) -> list[dict[str, SpeechMetadata]]:
1122
1110
  from .helpers import mixture_all_speech_metadata
@@ -1300,17 +1288,16 @@ def _spectral_mask(db: partial, sm_id: int) -> SpectralMask:
1300
1288
  :param sm_id: Spectral mask ID
1301
1289
  :return: Spectral mask
1302
1290
  """
1291
+ from .db_datatypes import SpectralMaskRecord
1292
+
1303
1293
  with db() as c:
1304
- spectral_mask = c.execute(
1305
- "SELECT spectral_mask.f_max_width, f_num, t_max_width, t_num, t_max_percent " +
1306
- "FROM spectral_mask " +
1307
- "WHERE ? = spectral_mask.id",
1308
- (sm_id,)).fetchone()
1309
- return SpectralMask(f_max_width=spectral_mask[0],
1310
- f_num=spectral_mask[1],
1311
- t_max_width=spectral_mask[2],
1312
- t_num=spectral_mask[3],
1313
- t_max_percent=spectral_mask[4])
1294
+ spectral_mask = SpectralMaskRecord(*c.execute("SELECT * FROM spectral_mask WHERE ? = spectral_mask.id",
1295
+ (sm_id,)).fetchone())
1296
+ return SpectralMask(f_max_width=spectral_mask.f_max_width,
1297
+ f_num=spectral_mask.f_num,
1298
+ t_max_width=spectral_mask.t_max_width,
1299
+ t_num=spectral_mask.t_num,
1300
+ t_max_percent=spectral_mask.t_max_percent)
1314
1301
 
1315
1302
 
1316
1303
  @lru_cache
@@ -1325,11 +1312,11 @@ def _target_file(db: partial, t_id: int) -> TargetFile:
1325
1312
 
1326
1313
  from .datatypes import TruthSetting
1327
1314
  from .datatypes import TruthSettings
1315
+ from .db_datatypes import TargetFileRecord
1328
1316
 
1329
1317
  with db() as c:
1330
- target = c.execute(
1331
- "SELECT target_file.name, samples, level_type, speaker_id FROM target_file WHERE ? = target_file.id",
1332
- (t_id,)).fetchone()
1318
+ target_file = TargetFileRecord(
1319
+ *c.execute("SELECT * FROM target_file WHERE ? = target_file.id", (t_id,)).fetchone())
1333
1320
 
1334
1321
  truth_settings: TruthSettings = []
1335
1322
  for ts in c.execute(
@@ -1342,11 +1329,11 @@ def _target_file(db: partial, t_id: int) -> TargetFile:
1342
1329
  truth_settings.append(TruthSetting(config=entry.get('config', None),
1343
1330
  function=entry.get('function', None),
1344
1331
  index=entry.get('index', None)))
1345
- return TargetFile(name=target[0],
1346
- samples=target[1],
1347
- level_type=target[2],
1332
+ return TargetFile(name=target_file.name,
1333
+ samples=target_file.samples,
1334
+ level_type=target_file.level_type,
1348
1335
  truth_settings=truth_settings,
1349
- speaker_id=target[3])
1336
+ speaker_id=target_file.speaker_id)
1350
1337
 
1351
1338
 
1352
1339
  @lru_cache
@@ -1387,19 +1374,29 @@ def _mixture(db: partial, m_id: int) -> Mixture:
1387
1374
  """
1388
1375
  from .helpers import to_mixture
1389
1376
  from .helpers import to_target
1377
+ from .db_datatypes import MixtureRecord
1378
+ from .db_datatypes import TargetRecord
1390
1379
 
1391
1380
  with db() as c:
1392
- mixture = c.execute(
1393
- "SELECT mixture.name, noise_file_id, noise_augmentation, noise_offset, noise_snr_gain, " +
1394
- "random_snr, snr, samples, spectral_mask_id, spectral_mask_seed, target_snr_gain, id " +
1395
- "FROM mixture " +
1396
- "WHERE ? = mixture.id",
1397
- (m_id + 1,)).fetchone()
1398
-
1399
- targets = [to_target(target) for target in c.execute(
1400
- "SELECT target.file_id, augmentation, gain " +
1381
+ mixture = MixtureRecord(*c.execute("SELECT * FROM mixture WHERE ? = mixture.id", (m_id + 1,)).fetchone())
1382
+ targets = [to_target(TargetRecord(*target)) for target in c.execute(
1383
+ "SELECT target.* " +
1401
1384
  "FROM target, mixture_target " +
1402
1385
  "WHERE ? = mixture_target.mixture_id AND target.id = mixture_target.target_id",
1403
- (mixture[11],)).fetchall()]
1386
+ (mixture.id,)).fetchall()]
1404
1387
 
1405
1388
  return to_mixture(mixture, targets)
1389
+
1390
+
1391
+ @lru_cache
1392
+ def _speaker(db: partial, s_id: int | None, tier: str) -> Optional[str]:
1393
+ if s_id is None:
1394
+ return None
1395
+
1396
+ with db() as c:
1397
+ data = c.execute(f'SELECT {tier} FROM speaker WHERE ? = id', (s_id,)).fetchone()
1398
+ if data is None:
1399
+ return None
1400
+ if data[0] is None:
1401
+ return None
1402
+ return data[0]
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: sonusai
3
- Version: 0.18.0
3
+ Version: 0.18.1
4
4
  Summary: Framework for building deep neural network models for sound, speech, and voice AI
5
5
  Home-page: https://aaware.com
6
6
  License: GPL-3.0-only
@@ -36,13 +36,14 @@ sonusai/mixture/class_count.py,sha256=_wFnVl2yEOnbor7pLg7cYOUeX6nioov-03Cv3SEbh2
36
36
  sonusai/mixture/config.py,sha256=d2IzZ1samHWGMpoKzSmUwMyAWWhgmyNoxyO8oiUwbsg,22193
37
37
  sonusai/mixture/constants.py,sha256=ZRM7Z8e6EwnL9RwaMVxks-QokN9KMWxnQzAf9VNxa9M,1408
38
38
  sonusai/mixture/datatypes.py,sha256=uVJtT2sVGS531pSglhaLLF5hZcI3_0oKQOWmMkrCwqo,8253
39
+ sonusai/mixture/db_datatypes.py,sha256=GDYbcSrlgUJsesiUUNnR4s5aBkMgviiNSQDaBcgYX7I,1428
39
40
  sonusai/mixture/eq_rule_is_valid.py,sha256=MpQwRA5M76wSiQWEI1lW2cLFdPaMttBLcQp3tWD8efM,1243
40
41
  sonusai/mixture/feature.py,sha256=Rwuf82IoXzhHPGbKYVGcatImF_ssBf_FfvbqghVPXtg,4116
41
- sonusai/mixture/generation.py,sha256=H_9kgresvNAEI6pmqAEwOaxQMPg6geVw6G0Y8fmbu_o,42580
42
- sonusai/mixture/helpers.py,sha256=4gb_t65Aw9O8hUgDzq-7D_t6LynfQDl1jcuFhQIAdWI,24590
42
+ sonusai/mixture/generation.py,sha256=ohZnhtHIrdQDql2OF703NnhK07Ys-1qAjiwrIql-oMw,42694
43
+ sonusai/mixture/helpers.py,sha256=eC9ZysEa-83VLKen_9PKWzr8w9dkHj4lp6rMB2fNLbg,24759
43
44
  sonusai/mixture/log_duration_and_sizes.py,sha256=baTUpqyM15wA125jo9E3posmVJUe3WlpksyO6v9Jul0,1347
44
45
  sonusai/mixture/mapped_snr_f.py,sha256=Fdf2uw62FvyKvVy5VywaUtPZGO1zCWQsHlte0bwkKPQ,3121
45
- sonusai/mixture/mixdb.py,sha256=xgHD43OgXaFKb1o4nsCPt-bd_mnk-PPetX4OGCGZ8DM,51582
46
+ sonusai/mixture/mixdb.py,sha256=XSJQKYaUfQylpWbGjfxfP7dendr-9JFcmLWNyE0qUwQ,51697
46
47
  sonusai/mixture/soundfile_audio.py,sha256=mHa5SIXsu_uE0j3DO52GydRJrvWSzU_nII-7YJfQ6Qo,4154
47
48
  sonusai/mixture/sox_audio.py,sha256=HT3kYA9TP5QPCuoOJdUMnGVN-qY6q96DGL8zxuog76o,12277
48
49
  sonusai/mixture/sox_augmentation.py,sha256=kBWPrsFk0EBi71nLcKt5v0GA34bY7g9D9x0cEamNWbU,4564
@@ -115,7 +116,7 @@ sonusai/utils/stratified_shuffle_split.py,sha256=rJNXvBp-GxoKzH3OpL7k0ANSu5xMP2z
115
116
  sonusai/utils/write_audio.py,sha256=ZsPGExwM86QHLLN2LOWekK2uAqf5pV_1oRW811p0QAI,840
116
117
  sonusai/utils/yes_or_no.py,sha256=eMLXBVH0cEahiXY4W2KNORmwNQ-ba10eRtldh0y4NYg,263
117
118
  sonusai/vars.py,sha256=m2AefF0m5bXWGXpJj8Pi42zWL2ydeEj7bkak3GrtMyM,940
118
- sonusai-0.18.0.dist-info/METADATA,sha256=LwOGcp1V_87ef8oyjI8Kjwo5K8tbIKjpRfJ17dW0Dbc,2591
119
- sonusai-0.18.0.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
120
- sonusai-0.18.0.dist-info/entry_points.txt,sha256=zMNjEphEPO6B3cD1GNpit7z-yA9tUU5-j3W2v-UWstU,92
121
- sonusai-0.18.0.dist-info/RECORD,,
119
+ sonusai-0.18.1.dist-info/METADATA,sha256=cLhSYAb5FSCHlrBCG0xA2hwa_4S86JUEWIqY85xA5o8,2591
120
+ sonusai-0.18.1.dist-info/WHEEL,sha256=sP946D7jFCHeNz5Iq4fL4Lu-PrWrFsgfLXbbkciIZwg,88
121
+ sonusai-0.18.1.dist-info/entry_points.txt,sha256=zMNjEphEPO6B3cD1GNpit7z-yA9tUU5-j3W2v-UWstU,92
122
+ sonusai-0.18.1.dist-info/RECORD,,