sonusai 1.0.10__tar.gz → 1.0.11__tar.gz

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 (139) hide show
  1. {sonusai-1.0.10 → sonusai-1.0.11}/PKG-INFO +1 -1
  2. {sonusai-1.0.10 → sonusai-1.0.11}/pyproject.toml +1 -1
  3. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/__init__.py +1 -1
  4. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/db.py +33 -17
  5. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/mixdb.py +1 -1
  6. sonusai-1.0.10/sonusai/mixture/db_file.py +0 -10
  7. {sonusai-1.0.10 → sonusai-1.0.11}/README.rst +0 -0
  8. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/__init__.py +0 -0
  9. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/aawscd_probwrite.py +0 -0
  10. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/audiofe.py +0 -0
  11. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/calc_metric_spenh.py +0 -0
  12. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/config/__init__.py +0 -0
  13. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/config/config.py +0 -0
  14. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/config/config.yml +0 -0
  15. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/config/constants.py +0 -0
  16. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/constants.py +0 -0
  17. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/data/__init__.py +0 -0
  18. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/data/genmixdb.yml +0 -0
  19. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/data/silero_vad_v5.1.jit +0 -0
  20. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/data/silero_vad_v5.1.onnx +0 -0
  21. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/data/speech_ma01_01.wav +0 -0
  22. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/data/whitenoise.wav +0 -0
  23. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/datatypes.py +0 -0
  24. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/deprecated/gentcst.py +0 -0
  25. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/deprecated/plot.py +0 -0
  26. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/deprecated/tplot.py +0 -0
  27. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/doc/__init__.py +0 -0
  28. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/doc/doc.py +0 -0
  29. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/doc.py +0 -0
  30. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/genft.py +0 -0
  31. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/genmetrics.py +0 -0
  32. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/genmix.py +0 -0
  33. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/genmixdb.py +0 -0
  34. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/ir_metric.py +0 -0
  35. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/lsdb.py +0 -0
  36. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/main.py +0 -0
  37. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/__init__.py +0 -0
  38. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/calc_audio_stats.py +0 -0
  39. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/calc_class_weights.py +0 -0
  40. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/calc_optimal_thresholds.py +0 -0
  41. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/calc_pcm.py +0 -0
  42. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/calc_pesq.py +0 -0
  43. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/calc_phase_distance.py +0 -0
  44. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/calc_sa_sdr.py +0 -0
  45. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/calc_sample_weights.py +0 -0
  46. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/calc_segsnr_f.py +0 -0
  47. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/calc_speech.py +0 -0
  48. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/calc_wer.py +0 -0
  49. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/calc_wsdr.py +0 -0
  50. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/class_summary.py +0 -0
  51. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/confusion_matrix_summary.py +0 -0
  52. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/one_hot.py +0 -0
  53. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics/snr_summary.py +0 -0
  54. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/metrics_summary.py +0 -0
  55. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/audio.py +0 -0
  56. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/class_balancing.py +0 -0
  57. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/config.py +0 -0
  58. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/constants.py +0 -0
  59. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/data_io.py +0 -0
  60. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/db_datatypes.py +0 -0
  61. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/effects.py +0 -0
  62. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/feature.py +0 -0
  63. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/generation.py +0 -0
  64. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/helpers.py +0 -0
  65. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/ir_delay.py +0 -0
  66. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/ir_effects.py +0 -0
  67. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/log_duration_and_sizes.py +0 -0
  68. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/pad_audio.py +0 -0
  69. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/parse.py +0 -0
  70. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/resample.py +0 -0
  71. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/sox_effects.py +0 -0
  72. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/sox_help.py +0 -0
  73. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/spectral_mask.py +0 -0
  74. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/truth.py +0 -0
  75. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/truth_functions/__init__.py +0 -0
  76. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/truth_functions/crm.py +0 -0
  77. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/truth_functions/energy.py +0 -0
  78. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/truth_functions/file.py +0 -0
  79. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/truth_functions/metadata.py +0 -0
  80. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/truth_functions/metrics.py +0 -0
  81. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/truth_functions/phoneme.py +0 -0
  82. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/truth_functions/sed.py +0 -0
  83. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mixture/truth_functions/target.py +0 -0
  84. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/mkwav.py +0 -0
  85. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/onnx_predict.py +0 -0
  86. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/queries/__init__.py +0 -0
  87. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/queries/queries.py +0 -0
  88. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/speech/__init__.py +0 -0
  89. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/speech/l2arctic.py +0 -0
  90. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/speech/librispeech.py +0 -0
  91. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/speech/mcgill.py +0 -0
  92. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/speech/textgrid.py +0 -0
  93. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/speech/timit.py +0 -0
  94. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/speech/types.py +0 -0
  95. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/speech/vctk.py +0 -0
  96. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/speech/voxceleb.py +0 -0
  97. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/__init__.py +0 -0
  98. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/asl_p56.py +0 -0
  99. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/asr.py +0 -0
  100. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/asr_functions/__init__.py +0 -0
  101. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/asr_functions/aaware_whisper.py +0 -0
  102. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/audio_devices.py +0 -0
  103. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/braced_glob.py +0 -0
  104. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/calculate_input_shape.py +0 -0
  105. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/choice.py +0 -0
  106. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/compress.py +0 -0
  107. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/convert_string_to_number.py +0 -0
  108. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/create_timestamp.py +0 -0
  109. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/create_ts_name.py +0 -0
  110. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/dataclass_from_dict.py +0 -0
  111. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/db.py +0 -0
  112. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/docstring.py +0 -0
  113. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/energy_f.py +0 -0
  114. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/engineering_number.py +0 -0
  115. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/evaluate_random_rule.py +0 -0
  116. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/get_frames_per_batch.py +0 -0
  117. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/get_label_names.py +0 -0
  118. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/grouper.py +0 -0
  119. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/human_readable_size.py +0 -0
  120. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/keyboard_interrupt.py +0 -0
  121. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/load_object.py +0 -0
  122. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/max_text_width.py +0 -0
  123. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/model_utils.py +0 -0
  124. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/numeric_conversion.py +0 -0
  125. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/onnx_utils.py +0 -0
  126. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/parallel.py +0 -0
  127. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/path_info.py +0 -0
  128. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/print_mixture_details.py +0 -0
  129. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/rand.py +0 -0
  130. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/ranges.py +0 -0
  131. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/read_predict_data.py +0 -0
  132. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/reshape.py +0 -0
  133. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/seconds_to_hms.py +0 -0
  134. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/stacked_complex.py +0 -0
  135. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/stratified_shuffle_split.py +0 -0
  136. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/tokenized_shell_vars.py +0 -0
  137. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/write_audio.py +0 -0
  138. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/utils/yes_or_no.py +0 -0
  139. {sonusai-1.0.10 → sonusai-1.0.11}/sonusai/vars.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sonusai
3
- Version: 1.0.10
3
+ Version: 1.0.11
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
@@ -1,6 +1,6 @@
1
1
  [tool.poetry]
2
2
  name = "sonusai"
3
- version = "1.0.10"
3
+ version = "1.0.11"
4
4
  description = "Framework for building deep neural network models for sound, speech, and voice AI"
5
5
  authors = ["Chris Eddington <chris@aaware.com>", "Jason Calderwood <jason@aaware.com>"]
6
6
  maintainers = ["Chris Eddington <chris@aaware.com>", "Jason Calderwood <jason@aaware.com>"]
@@ -28,4 +28,4 @@ from .helpers import inverse_transform
28
28
  from .helpers import write_mixture_metadata
29
29
  from .log_duration_and_sizes import log_duration_and_sizes
30
30
  from .mixdb import MixtureDatabase
31
- from .db_file import db_file
31
+ from .db import db_file
@@ -2,12 +2,21 @@ import contextlib
2
2
  import sqlite3
3
3
  from os import remove
4
4
  from os.path import exists
5
+ from os.path import join
6
+ from os.path import normpath
5
7
  from sqlite3 import Connection
6
8
  from sqlite3 import Cursor
7
9
  from typing import Any
8
10
 
9
- from .. import logger_db
10
- from .db_file import db_file
11
+ from sonusai import logger_db
12
+
13
+
14
+ def db_file(location: str, test: bool = False) -> str:
15
+ from .constants import MIXDB_NAME
16
+ from .constants import TEST_MIXDB_NAME
17
+
18
+ name = TEST_MIXDB_NAME if test else MIXDB_NAME
19
+ return normpath(join(location, name))
11
20
 
12
21
 
13
22
  class SQLiteDatabase:
@@ -15,9 +24,6 @@ class SQLiteDatabase:
15
24
 
16
25
  # Constants for database configuration
17
26
  READONLY_MODE = "?mode=ro"
18
- WRITE_OPTIMIZED_PRAGMAS = (
19
- "?_journal_mode=OFF&_synchronous=OFF&_cache_size=10000&_temp_store=MEMORY&_locking_mode=EXCLUSIVE"
20
- )
21
27
  CONNECTION_TIMEOUT = 20
22
28
 
23
29
  def __init__(
@@ -39,7 +45,7 @@ class SQLiteDatabase:
39
45
  """
40
46
  self.location = location
41
47
  self.create = create
42
- self.readonly = readonly
48
+ self.readonly = readonly and not create
43
49
  self.test = test
44
50
  self.verbose = verbose
45
51
  self.con: Connection | None = None
@@ -61,6 +67,7 @@ class SQLiteDatabase:
61
67
  raise
62
68
 
63
69
  if self.cur:
70
+ self.cur.execute("BEGIN TRANSACTION")
64
71
  return self.cur
65
72
  raise sqlite3.Error("Failed to connect to database")
66
73
 
@@ -78,9 +85,13 @@ class SQLiteDatabase:
78
85
  exc_tb: The exception traceback, if any.
79
86
  """
80
87
  if self.con:
81
- if exc_type is None and not self.readonly:
82
- # Commit only on successful exit if not readonly
83
- self.con.commit()
88
+ if not self.readonly:
89
+ if exc_type is None:
90
+ # Commit only on successful exit
91
+ self.con.commit()
92
+ else:
93
+ # Rollback on exception
94
+ self.con.rollback()
84
95
  self._close_resources()
85
96
 
86
97
  def _close_resources(self) -> None:
@@ -107,9 +118,21 @@ class SQLiteDatabase:
107
118
  uri = self._build_connection_uri(db_path)
108
119
 
109
120
  try:
110
- self.con = sqlite3.connect(f"file:{uri}", uri=True, timeout=self.CONNECTION_TIMEOUT)
121
+ self.con = sqlite3.connect(
122
+ f"file:{uri}",
123
+ uri=True,
124
+ timeout=self.CONNECTION_TIMEOUT,
125
+ isolation_level=None,
126
+ )
111
127
  if self.verbose and self.con:
112
128
  self.con.set_trace_callback(logger_db.debug)
129
+ if self.create or not self.readonly:
130
+ self.con.execute("PRAGMA journal_mode=wal")
131
+ self.con.execute("PRAGMA synchronous=0") # off
132
+ self.con.execute("PRAGMA cache_size=10000")
133
+ self.con.execute("PRAGMA temp_store=2") # memory
134
+ self.con.execute("PRAGMA locking_mode=exclusive")
135
+ self.con.commit()
113
136
  except sqlite3.Error as e:
114
137
  raise sqlite3.Error(f"Failed to connect to database: {e}") from e
115
138
 
@@ -153,11 +176,4 @@ class SQLiteDatabase:
153
176
  if not self.create and self.readonly:
154
177
  uri += self.READONLY_MODE
155
178
 
156
- # Add optimized pragmas for write mode
157
- if not self.readonly:
158
- if "?" in uri:
159
- uri = uri.replace("?", f"{self.WRITE_OPTIMIZED_PRAGMAS}&")
160
- else:
161
- uri += self.WRITE_OPTIMIZED_PRAGMAS
162
-
163
179
  return uri
@@ -30,7 +30,7 @@ from ..datatypes import TruthsConfigs
30
30
  from ..datatypes import TruthsDict
31
31
  from ..datatypes import UniversalSNR
32
32
  from .db import SQLiteDatabase
33
- from .db_file import db_file
33
+ from .db import db_file
34
34
 
35
35
 
36
36
  class MixtureDatabase:
@@ -1,10 +0,0 @@
1
- from os.path import join
2
- from os.path import normpath
3
-
4
- from .constants import MIXDB_NAME
5
- from .constants import TEST_MIXDB_NAME
6
-
7
-
8
- def db_file(location: str, test: bool = False) -> str:
9
- name = TEST_MIXDB_NAME if test else MIXDB_NAME
10
- return normpath(join(location, name))
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes