sonusai 0.20.3__py3-none-any.whl → 1.0.2__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (97) hide show
  1. sonusai/__init__.py +16 -3
  2. sonusai/audiofe.py +241 -77
  3. sonusai/calc_metric_spenh.py +71 -73
  4. sonusai/config/__init__.py +3 -0
  5. sonusai/config/config.py +61 -0
  6. sonusai/config/config.yml +20 -0
  7. sonusai/config/constants.py +8 -0
  8. sonusai/constants.py +11 -0
  9. sonusai/data/genmixdb.yml +21 -36
  10. sonusai/{mixture/datatypes.py → datatypes.py} +91 -130
  11. sonusai/deprecated/plot.py +4 -5
  12. sonusai/doc/doc.py +4 -4
  13. sonusai/doc.py +11 -4
  14. sonusai/genft.py +43 -45
  15. sonusai/genmetrics.py +25 -19
  16. sonusai/genmix.py +54 -82
  17. sonusai/genmixdb.py +88 -264
  18. sonusai/ir_metric.py +30 -34
  19. sonusai/lsdb.py +41 -48
  20. sonusai/main.py +15 -22
  21. sonusai/metrics/calc_audio_stats.py +4 -293
  22. sonusai/metrics/calc_class_weights.py +4 -4
  23. sonusai/metrics/calc_optimal_thresholds.py +8 -5
  24. sonusai/metrics/calc_pesq.py +2 -2
  25. sonusai/metrics/calc_segsnr_f.py +4 -4
  26. sonusai/metrics/calc_speech.py +25 -13
  27. sonusai/metrics/class_summary.py +7 -7
  28. sonusai/metrics/confusion_matrix_summary.py +5 -5
  29. sonusai/metrics/one_hot.py +4 -4
  30. sonusai/metrics/snr_summary.py +7 -7
  31. sonusai/metrics_summary.py +38 -45
  32. sonusai/mixture/__init__.py +4 -104
  33. sonusai/mixture/audio.py +10 -39
  34. sonusai/mixture/class_balancing.py +103 -0
  35. sonusai/mixture/config.py +251 -271
  36. sonusai/mixture/constants.py +35 -39
  37. sonusai/mixture/data_io.py +25 -36
  38. sonusai/mixture/db_datatypes.py +58 -22
  39. sonusai/mixture/effects.py +386 -0
  40. sonusai/mixture/feature.py +7 -11
  41. sonusai/mixture/generation.py +478 -628
  42. sonusai/mixture/helpers.py +82 -184
  43. sonusai/mixture/ir_delay.py +3 -4
  44. sonusai/mixture/ir_effects.py +77 -0
  45. sonusai/mixture/log_duration_and_sizes.py +6 -12
  46. sonusai/mixture/mixdb.py +910 -729
  47. sonusai/mixture/pad_audio.py +35 -0
  48. sonusai/mixture/resample.py +7 -0
  49. sonusai/mixture/sox_effects.py +195 -0
  50. sonusai/mixture/sox_help.py +650 -0
  51. sonusai/mixture/spectral_mask.py +2 -2
  52. sonusai/mixture/truth.py +17 -15
  53. sonusai/mixture/truth_functions/crm.py +12 -12
  54. sonusai/mixture/truth_functions/energy.py +22 -22
  55. sonusai/mixture/truth_functions/file.py +5 -5
  56. sonusai/mixture/truth_functions/metadata.py +4 -4
  57. sonusai/mixture/truth_functions/metrics.py +4 -4
  58. sonusai/mixture/truth_functions/phoneme.py +3 -3
  59. sonusai/mixture/truth_functions/sed.py +11 -13
  60. sonusai/mixture/truth_functions/target.py +10 -10
  61. sonusai/mkwav.py +26 -29
  62. sonusai/onnx_predict.py +240 -88
  63. sonusai/queries/__init__.py +2 -2
  64. sonusai/queries/queries.py +38 -34
  65. sonusai/speech/librispeech.py +1 -1
  66. sonusai/speech/mcgill.py +1 -1
  67. sonusai/speech/timit.py +2 -2
  68. sonusai/summarize_metric_spenh.py +10 -17
  69. sonusai/utils/__init__.py +7 -1
  70. sonusai/utils/asl_p56.py +2 -2
  71. sonusai/utils/asr.py +2 -2
  72. sonusai/utils/asr_functions/aaware_whisper.py +4 -5
  73. sonusai/utils/choice.py +31 -0
  74. sonusai/utils/compress.py +1 -1
  75. sonusai/utils/dataclass_from_dict.py +19 -1
  76. sonusai/utils/energy_f.py +3 -3
  77. sonusai/utils/evaluate_random_rule.py +15 -0
  78. sonusai/utils/keyboard_interrupt.py +12 -0
  79. sonusai/utils/onnx_utils.py +3 -17
  80. sonusai/utils/print_mixture_details.py +21 -19
  81. sonusai/utils/{temp_seed.py → rand.py} +3 -3
  82. sonusai/utils/read_predict_data.py +2 -2
  83. sonusai/utils/reshape.py +3 -3
  84. sonusai/utils/stratified_shuffle_split.py +3 -3
  85. sonusai/{mixture → utils}/tokenized_shell_vars.py +1 -1
  86. sonusai/utils/write_audio.py +2 -2
  87. sonusai/vars.py +11 -4
  88. {sonusai-0.20.3.dist-info → sonusai-1.0.2.dist-info}/METADATA +4 -2
  89. sonusai-1.0.2.dist-info/RECORD +138 -0
  90. sonusai/mixture/augmentation.py +0 -444
  91. sonusai/mixture/class_count.py +0 -15
  92. sonusai/mixture/eq_rule_is_valid.py +0 -45
  93. sonusai/mixture/target_class_balancing.py +0 -107
  94. sonusai/mixture/targets.py +0 -175
  95. sonusai-0.20.3.dist-info/RECORD +0 -128
  96. {sonusai-0.20.3.dist-info → sonusai-1.0.2.dist-info}/WHEEL +0 -0
  97. {sonusai-0.20.3.dist-info → sonusai-1.0.2.dist-info}/entry_points.txt +0 -0
@@ -0,0 +1,103 @@
1
+ from ..datatypes import EffectList
2
+ from ..datatypes import EffectedFile
3
+ from ..datatypes import File
4
+
5
+
6
+ def balance_sources(
7
+ effected_sources: list[EffectedFile],
8
+ files: list[File],
9
+ effects: list[EffectList],
10
+ class_balancing_effect: EffectList,
11
+ num_classes: int,
12
+ num_ir: int,
13
+ mixups: list[int] | None = None,
14
+ ) -> tuple[list[EffectedFile], list[EffectList]]:
15
+ import math
16
+
17
+ from .augmentation import get_mixups
18
+ from .sources import get_augmented_target_ids_by_class
19
+
20
+ first_cba_id = len(effects)
21
+
22
+ if mixups is None:
23
+ mixups = get_mixups(effects)
24
+
25
+ for mixup in mixups:
26
+ if mixup == 1:
27
+ continue
28
+
29
+ effected_sources_indices_by_class = get_augmented_target_ids_by_class(
30
+ augmented_targets=effected_sources,
31
+ targets=files,
32
+ target_augmentations=effects,
33
+ mixup=mixup,
34
+ num_classes=num_classes,
35
+ )
36
+
37
+ largest = max([len(item) for item in effected_sources_indices_by_class])
38
+ largest = math.ceil(largest / mixup) * mixup
39
+ for es_indices in effected_sources_indices_by_class:
40
+ additional_effects_needed = largest - len(es_indices)
41
+ file_ids = sorted({effected_sources[at_index].file_id for at_index in es_indices})
42
+
43
+ tfi_idx = 0
44
+ for _ in range(additional_effects_needed):
45
+ file_id = file_ids[tfi_idx]
46
+ tfi_idx = (tfi_idx + 1) % len(file_ids)
47
+ effect_id, effects = _get_unused_balancing_effect(
48
+ effected_sources=effected_sources,
49
+ files=files,
50
+ effects=effects,
51
+ class_balancing_effect=class_balancing_effect,
52
+ file_id=file_id,
53
+ mixup=mixup,
54
+ num_ir=num_ir,
55
+ first_cbe_id=first_cba_id,
56
+ )
57
+ effected_sources.append(EffectedFile(file_id=file_id, effect_id=effect_id))
58
+
59
+ return effected_sources, effects
60
+
61
+
62
+ def _get_unused_balancing_effect(
63
+ effected_sources: list[EffectedFile],
64
+ files: list[File],
65
+ effects: list[EffectList],
66
+ class_balancing_effect: EffectList,
67
+ file_id: int,
68
+ mixup: int,
69
+ num_ir: int,
70
+ first_cbe_id: int,
71
+ ) -> tuple[int, list[EffectList]]:
72
+ """Get an unused balancing augmentation for a given target file index"""
73
+ from dataclasses import asdict
74
+
75
+ from .augmentation import get_augmentation_rules
76
+
77
+ balancing_augmentations = [item for item in range(len(effects)) if item >= first_cbe_id]
78
+ used_balancing_augmentations = [
79
+ effected_source.effect_id
80
+ for effected_source in effected_sources
81
+ if effected_source.file_id == file_id and effected_source.effect_id in balancing_augmentations
82
+ ]
83
+
84
+ augmentation_indices = [
85
+ item
86
+ for item in balancing_augmentations
87
+ if item not in used_balancing_augmentations and effects[item].mixup == mixup
88
+ ]
89
+ if len(augmentation_indices) > 0:
90
+ return augmentation_indices[0], effects
91
+
92
+ class_balancing_effect = get_class_balancing_effect(file=files[file_id], default_cbe=class_balancing_effect)
93
+ new_effect = get_augmentation_rules(rules=asdict(class_balancing_effect), num_ir=num_ir)[0]
94
+ new_effect.mixup = mixup
95
+ effects.append(new_effect)
96
+ return len(effects) - 1, effects
97
+
98
+
99
+ def get_class_balancing_effect(file: File, default_cbe: EffectList) -> EffectList:
100
+ """Get the class balancing effect rule for the given target"""
101
+ if file.class_balancing_effect is not None:
102
+ return file.class_balancing_effect
103
+ return default_cbe