sonusai 1.0.9__tar.gz → 1.0.10__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.9 → sonusai-1.0.10}/PKG-INFO +1 -1
  2. {sonusai-1.0.9 → sonusai-1.0.10}/pyproject.toml +1 -1
  3. sonusai-1.0.10/sonusai/mixture/parse.py +145 -0
  4. {sonusai-1.0.9 → sonusai-1.0.10}/README.rst +0 -0
  5. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/__init__.py +0 -0
  6. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/aawscd_probwrite.py +0 -0
  7. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/audiofe.py +0 -0
  8. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/calc_metric_spenh.py +0 -0
  9. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/config/__init__.py +0 -0
  10. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/config/config.py +0 -0
  11. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/config/config.yml +0 -0
  12. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/config/constants.py +0 -0
  13. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/constants.py +0 -0
  14. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/data/__init__.py +0 -0
  15. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/data/genmixdb.yml +0 -0
  16. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/data/silero_vad_v5.1.jit +0 -0
  17. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/data/silero_vad_v5.1.onnx +0 -0
  18. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/data/speech_ma01_01.wav +0 -0
  19. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/data/whitenoise.wav +0 -0
  20. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/datatypes.py +0 -0
  21. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/deprecated/gentcst.py +0 -0
  22. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/deprecated/plot.py +0 -0
  23. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/deprecated/tplot.py +0 -0
  24. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/doc/__init__.py +0 -0
  25. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/doc/doc.py +0 -0
  26. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/doc.py +0 -0
  27. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/genft.py +0 -0
  28. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/genmetrics.py +0 -0
  29. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/genmix.py +0 -0
  30. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/genmixdb.py +0 -0
  31. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/ir_metric.py +0 -0
  32. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/lsdb.py +0 -0
  33. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/main.py +0 -0
  34. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/__init__.py +0 -0
  35. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/calc_audio_stats.py +0 -0
  36. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/calc_class_weights.py +0 -0
  37. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/calc_optimal_thresholds.py +0 -0
  38. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/calc_pcm.py +0 -0
  39. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/calc_pesq.py +0 -0
  40. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/calc_phase_distance.py +0 -0
  41. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/calc_sa_sdr.py +0 -0
  42. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/calc_sample_weights.py +0 -0
  43. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/calc_segsnr_f.py +0 -0
  44. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/calc_speech.py +0 -0
  45. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/calc_wer.py +0 -0
  46. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/calc_wsdr.py +0 -0
  47. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/class_summary.py +0 -0
  48. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/confusion_matrix_summary.py +0 -0
  49. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/one_hot.py +0 -0
  50. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics/snr_summary.py +0 -0
  51. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/metrics_summary.py +0 -0
  52. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/__init__.py +0 -0
  53. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/audio.py +0 -0
  54. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/class_balancing.py +0 -0
  55. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/config.py +0 -0
  56. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/constants.py +0 -0
  57. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/data_io.py +0 -0
  58. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/db.py +0 -0
  59. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/db_datatypes.py +0 -0
  60. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/db_file.py +0 -0
  61. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/effects.py +0 -0
  62. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/feature.py +0 -0
  63. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/generation.py +0 -0
  64. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/helpers.py +0 -0
  65. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/ir_delay.py +0 -0
  66. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/ir_effects.py +0 -0
  67. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/log_duration_and_sizes.py +0 -0
  68. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/mixdb.py +0 -0
  69. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/pad_audio.py +0 -0
  70. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/resample.py +0 -0
  71. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/sox_effects.py +0 -0
  72. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/sox_help.py +0 -0
  73. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/spectral_mask.py +0 -0
  74. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/truth.py +0 -0
  75. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/truth_functions/__init__.py +0 -0
  76. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/truth_functions/crm.py +0 -0
  77. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/truth_functions/energy.py +0 -0
  78. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/truth_functions/file.py +0 -0
  79. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/truth_functions/metadata.py +0 -0
  80. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/truth_functions/metrics.py +0 -0
  81. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/truth_functions/phoneme.py +0 -0
  82. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/truth_functions/sed.py +0 -0
  83. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mixture/truth_functions/target.py +0 -0
  84. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/mkwav.py +0 -0
  85. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/onnx_predict.py +0 -0
  86. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/queries/__init__.py +0 -0
  87. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/queries/queries.py +0 -0
  88. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/speech/__init__.py +0 -0
  89. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/speech/l2arctic.py +0 -0
  90. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/speech/librispeech.py +0 -0
  91. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/speech/mcgill.py +0 -0
  92. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/speech/textgrid.py +0 -0
  93. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/speech/timit.py +0 -0
  94. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/speech/types.py +0 -0
  95. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/speech/vctk.py +0 -0
  96. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/speech/voxceleb.py +0 -0
  97. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/__init__.py +0 -0
  98. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/asl_p56.py +0 -0
  99. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/asr.py +0 -0
  100. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/asr_functions/__init__.py +0 -0
  101. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/asr_functions/aaware_whisper.py +0 -0
  102. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/audio_devices.py +0 -0
  103. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/braced_glob.py +0 -0
  104. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/calculate_input_shape.py +0 -0
  105. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/choice.py +0 -0
  106. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/compress.py +0 -0
  107. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/convert_string_to_number.py +0 -0
  108. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/create_timestamp.py +0 -0
  109. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/create_ts_name.py +0 -0
  110. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/dataclass_from_dict.py +0 -0
  111. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/db.py +0 -0
  112. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/docstring.py +0 -0
  113. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/energy_f.py +0 -0
  114. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/engineering_number.py +0 -0
  115. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/evaluate_random_rule.py +0 -0
  116. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/get_frames_per_batch.py +0 -0
  117. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/get_label_names.py +0 -0
  118. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/grouper.py +0 -0
  119. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/human_readable_size.py +0 -0
  120. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/keyboard_interrupt.py +0 -0
  121. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/load_object.py +0 -0
  122. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/max_text_width.py +0 -0
  123. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/model_utils.py +0 -0
  124. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/numeric_conversion.py +0 -0
  125. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/onnx_utils.py +0 -0
  126. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/parallel.py +0 -0
  127. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/path_info.py +0 -0
  128. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/print_mixture_details.py +0 -0
  129. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/rand.py +0 -0
  130. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/ranges.py +0 -0
  131. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/read_predict_data.py +0 -0
  132. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/reshape.py +0 -0
  133. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/seconds_to_hms.py +0 -0
  134. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/stacked_complex.py +0 -0
  135. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/stratified_shuffle_split.py +0 -0
  136. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/tokenized_shell_vars.py +0 -0
  137. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/write_audio.py +0 -0
  138. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/utils/yes_or_no.py +0 -0
  139. {sonusai-1.0.9 → sonusai-1.0.10}/sonusai/vars.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.3
2
2
  Name: sonusai
3
- Version: 1.0.9
3
+ Version: 1.0.10
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.9"
3
+ version = "1.0.10"
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>"]
@@ -0,0 +1,145 @@
1
+ """
2
+ Parse config rules
3
+
4
+ sai_expand(0, 5)
5
+ sai_expand(.0, 5)
6
+ sai_expand(0., 5)
7
+ sai_expand(0.0, 5)
8
+ sai_expand(0, .5)
9
+ sai_expand(.0, .5)
10
+ sai_expand(0., .5)
11
+ sai_expand(0.0, .5)
12
+ sai_expand(0, 5.)
13
+ sai_expand(.0, 5.)
14
+ sai_expand(0., 5.)
15
+ sai_expand(0.0, 5.)
16
+ sai_expand(0, 5.0)
17
+ sai_expand(.0, 5.0)
18
+ sai_expand(0., 5.0)
19
+ sai_expand(0.0, 5.0)
20
+
21
+ sai_rand(-1, 1)
22
+ sai_choose(repeat=False)
23
+ sai_choose(repeat=False, tag=tag)
24
+ sai_sequence()
25
+ sai_sequence(tag=tag)
26
+
27
+ sai_expand(0, sai_rand(-1, 1))
28
+ sai_expand(sai_rand(0, 4), 0)
29
+ sai_expand(sai_rand(0, 4), sai_rand(-1, 1))
30
+
31
+ sai_choose(num=1, unique=speaker_id, repeat=False)
32
+ sai_choose(num=1, repeat=False)
33
+ sai_choose(num=1, unique=speaker_id, repeat=True)
34
+ sai_choose(num=1, repeat=True)
35
+ sai_sequence(num=0)
36
+ sai_sequence(num=0, unique=speaker_id)
37
+
38
+ """
39
+
40
+ from dataclasses import dataclass
41
+
42
+
43
+ @dataclass
44
+ class Match:
45
+ group: str
46
+ span: tuple[int, int]
47
+
48
+ def start(self) -> int:
49
+ return self.span[0]
50
+
51
+ def end(self) -> int:
52
+ return self.span[1]
53
+
54
+
55
+ def find_sai_expand(text: str) -> list[Match]:
56
+ import re
57
+
58
+ results = []
59
+ matches = re.finditer(r"sai_expand\(", text)
60
+ if matches:
61
+ for match in matches:
62
+ s = match.start()
63
+ e = match.end()
64
+ num_lparen = 1
65
+ while num_lparen != 0 and e < len(text):
66
+ if text[e] == "(":
67
+ num_lparen += 1
68
+ elif text[e] == ")":
69
+ num_lparen -= 1
70
+ e += 1
71
+ if num_lparen != 0:
72
+ raise ValueError(f"Unbalanced parenthesis in '{text}'")
73
+
74
+ results.append(Match(group=text[s:e], span=(s, e)))
75
+
76
+ return results
77
+
78
+
79
+ def parse_sai_expand(text: str) -> list[str]:
80
+ """
81
+ expand_syntax ::= expand_keyword lparen expand_item next_expand_item+ rparen
82
+ expand_keyword ::= sai_expand
83
+ lparen ::= (
84
+ expand_item ::= expand_syntax | rand_syntax | number
85
+ rand_syntax ::= rand_keyword lparen rand_item comma rand_item rparen
86
+ rand_item ::= real number
87
+ comma ::= ,
88
+ number ::= real number or signed integer
89
+ next_item ::= comma item
90
+ rparen ::= )
91
+ """
92
+ import pyparsing as pp
93
+
94
+ lparen = pp.Literal("(")
95
+ rparen = pp.Literal(")")
96
+ comma = pp.Literal(",")
97
+
98
+ real_number = pp.pyparsing_common.real
99
+ signed_integer = pp.pyparsing_common.signed_integer
100
+ number = real_number | signed_integer
101
+
102
+ identifier = pp.Word(pp.alphanums + "_.-")
103
+
104
+ rand_literal = pp.Literal("sai_rand")
105
+ rand_expression = (rand_literal + lparen + number + comma + number + rparen).set_parse_action(
106
+ lambda tokens: "".join(map(str, tokens))
107
+ )
108
+
109
+ expand_literal = pp.Literal("sai_expand")
110
+ expand_args = pp.DelimitedList(rand_expression | identifier, min=1)
111
+ expand_expression = expand_literal + lparen + expand_args("args") + rparen
112
+
113
+ try:
114
+ result = expand_expression.parse_string(text)
115
+ except pp.ParseException as e:
116
+ raise ValueError(f"Could not parse '{text}'") from e
117
+
118
+ return list(result.args)
119
+
120
+
121
+ def sai_expand(text: str) -> list[str]:
122
+ # initialize with input
123
+ expanded = [text]
124
+
125
+ # look for pattern
126
+ matches = find_sai_expand(text)
127
+
128
+ # if not found, early exit
129
+ if not matches:
130
+ return expanded
131
+
132
+ # remove entry we are expanding
133
+ expanded.pop()
134
+
135
+ # start with the innermost match
136
+ match = matches[-1]
137
+ prelude = text[: match.start()]
138
+ postlude = text[match.end() :]
139
+
140
+ # loop over parsed expand values
141
+ for value in parse_sai_expand(match.group):
142
+ # extend result with expand of replacement (for handling multiple expands in a single rule)
143
+ expanded.extend(sai_expand(prelude + value + postlude))
144
+
145
+ return expanded
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
File without changes
File without changes