modusa 0.2.23__py3-none-any.whl → 0.3__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 (80) hide show
  1. modusa/.DS_Store +0 -0
  2. modusa/__init__.py +8 -1
  3. modusa/devtools/{generate_doc_source.py → generate_docs_source.py} +5 -5
  4. modusa/devtools/generate_template.py +5 -5
  5. modusa/devtools/main.py +3 -3
  6. modusa/devtools/templates/generator.py +1 -1
  7. modusa/devtools/templates/io.py +1 -1
  8. modusa/devtools/templates/{signal.py → model.py} +18 -11
  9. modusa/devtools/templates/plugin.py +1 -1
  10. modusa/generators/__init__.py +11 -1
  11. modusa/generators/audio.py +188 -0
  12. modusa/generators/audio_waveforms.py +1 -1
  13. modusa/generators/base.py +1 -1
  14. modusa/generators/ftds.py +298 -0
  15. modusa/generators/s1d.py +270 -0
  16. modusa/generators/s2d.py +300 -0
  17. modusa/generators/s_ax.py +102 -0
  18. modusa/generators/t_ax.py +64 -0
  19. modusa/generators/tds.py +267 -0
  20. modusa/models/__init__.py +14 -0
  21. modusa/models/__pycache__/signal1D.cpython-312.pyc.4443461152 +0 -0
  22. modusa/models/audio.py +90 -0
  23. modusa/models/base.py +70 -0
  24. modusa/models/data.py +457 -0
  25. modusa/models/ftds.py +584 -0
  26. modusa/models/s1d.py +578 -0
  27. modusa/models/s2d.py +619 -0
  28. modusa/models/s_ax.py +448 -0
  29. modusa/models/t_ax.py +335 -0
  30. modusa/models/tds.py +465 -0
  31. modusa/plugins/__init__.py +3 -1
  32. modusa/tmp.py +98 -0
  33. modusa/tools/__init__.py +5 -0
  34. modusa/tools/audio_converter.py +56 -67
  35. modusa/tools/audio_loader.py +90 -0
  36. modusa/tools/audio_player.py +42 -67
  37. modusa/tools/math_ops.py +104 -1
  38. modusa/tools/plotter.py +305 -497
  39. modusa/tools/youtube_downloader.py +31 -98
  40. modusa/utils/excp.py +6 -0
  41. modusa/utils/np_func_cat.py +44 -0
  42. modusa/utils/plot.py +142 -0
  43. {modusa-0.2.23.dist-info → modusa-0.3.dist-info}/METADATA +5 -16
  44. modusa-0.3.dist-info/RECORD +60 -0
  45. modusa/devtools/docs/source/generators/audio_waveforms.rst +0 -8
  46. modusa/devtools/docs/source/generators/base.rst +0 -8
  47. modusa/devtools/docs/source/generators/index.rst +0 -8
  48. modusa/devtools/docs/source/io/audio_loader.rst +0 -8
  49. modusa/devtools/docs/source/io/base.rst +0 -8
  50. modusa/devtools/docs/source/io/index.rst +0 -8
  51. modusa/devtools/docs/source/plugins/base.rst +0 -8
  52. modusa/devtools/docs/source/plugins/index.rst +0 -7
  53. modusa/devtools/docs/source/signals/audio_signal.rst +0 -8
  54. modusa/devtools/docs/source/signals/base.rst +0 -8
  55. modusa/devtools/docs/source/signals/frequency_domain_signal.rst +0 -8
  56. modusa/devtools/docs/source/signals/index.rst +0 -11
  57. modusa/devtools/docs/source/signals/spectrogram.rst +0 -8
  58. modusa/devtools/docs/source/signals/time_domain_signal.rst +0 -8
  59. modusa/devtools/docs/source/tools/audio_converter.rst +0 -8
  60. modusa/devtools/docs/source/tools/audio_player.rst +0 -8
  61. modusa/devtools/docs/source/tools/base.rst +0 -8
  62. modusa/devtools/docs/source/tools/fourier_tranform.rst +0 -8
  63. modusa/devtools/docs/source/tools/index.rst +0 -13
  64. modusa/devtools/docs/source/tools/math_ops.rst +0 -8
  65. modusa/devtools/docs/source/tools/plotter.rst +0 -8
  66. modusa/devtools/docs/source/tools/youtube_downloader.rst +0 -8
  67. modusa/io/__init__.py +0 -5
  68. modusa/io/audio_loader.py +0 -184
  69. modusa/io/base.py +0 -43
  70. modusa/signals/__init__.py +0 -3
  71. modusa/signals/audio_signal.py +0 -540
  72. modusa/signals/base.py +0 -27
  73. modusa/signals/frequency_domain_signal.py +0 -376
  74. modusa/signals/spectrogram.py +0 -564
  75. modusa/signals/time_domain_signal.py +0 -412
  76. modusa/tools/fourier_tranform.py +0 -24
  77. modusa-0.2.23.dist-info/RECORD +0 -70
  78. {modusa-0.2.23.dist-info → modusa-0.3.dist-info}/WHEEL +0 -0
  79. {modusa-0.2.23.dist-info → modusa-0.3.dist-info}/entry_points.txt +0 -0
  80. {modusa-0.2.23.dist-info → modusa-0.3.dist-info}/licenses/LICENSE.md +0 -0
@@ -1,8 +0,0 @@
1
- YoutubeDownloader
2
- =================
3
-
4
- .. autoclass:: modusa.tools.youtube_downloader.YoutubeDownloader
5
- :members:
6
- :undoc-members:
7
- :show-inheritance:
8
-
modusa/io/__init__.py DELETED
@@ -1,5 +0,0 @@
1
- #!/usr/bin/env python3
2
-
3
- from .base import ModusaIO
4
-
5
- from .audio_loader import AudioLoader
modusa/io/audio_loader.py DELETED
@@ -1,184 +0,0 @@
1
- #!/usr/bin/env python3
2
-
3
- from modusa.io import ModusaIO
4
- from modusa.signals import AudioSignal
5
- from modusa.decorators import validate_args_type
6
- from pathlib import Path
7
- import tempfile
8
- import numpy as np
9
-
10
- class AudioLoader(ModusaIO):
11
- """
12
- Loads audio from various sources like filepath, YouTube, etc.
13
-
14
- Note
15
- ----
16
- - All `from_` methods return :class:`~modusa.signals.AudioSignal` instance.
17
-
18
- """
19
-
20
- #--------Meta Information----------
21
- _name = "Audio Loader"
22
- _description = "Loads audio from various sources."
23
- _author_name = "Ankit Anand"
24
- _author_email = "ankit0.anand0@gmail.com"
25
- _created_at = "2025-07-05"
26
- #----------------------------------
27
-
28
- def __init__(self):
29
- super().__init__()
30
-
31
- @staticmethod
32
- @validate_args_type()
33
- def from_youtube(url: str, sr: int | None = None) -> "AudioSignal":
34
- """
35
- Loads audio from youtube url using :class:`~modusa.io.YoutubeDownloader`,
36
- :class:`~modusa.io.AudioConverter` and `librosa`.
37
-
38
- .. code-block:: python
39
-
40
- from modusa.io import AudioSignalLoader
41
-
42
- # From youtube
43
- audio_signal = AudioSignalLoader.from_youtube(
44
- url="https://www.youtube.com/watch?v=lIpw9-Y_N0g",
45
- sr=None
46
- )
47
-
48
- PARAMETERS
49
- ----------
50
- url: str
51
- Link to the YouTube video.
52
- sr: int
53
- Sampling rate to load the audio in.
54
-
55
- Returns
56
- -------
57
-
58
- AudioSignal:
59
- `Audio signal` instance with loaded audio content from YouTube.
60
- """
61
-
62
- from modusa.tools.youtube_downloader import YoutubeDownloader
63
- from modusa.tools.audio_converter import AudioConverter
64
- import librosa
65
-
66
- # Download the audio in temp directory using tempfile module
67
- with tempfile.TemporaryDirectory() as tmpdir:
68
- audio_fp: Path = YoutubeDownloader.download(url=url, content_type="audio", output_dir=Path(tmpdir))
69
-
70
- # Convert the audio to ".wav" form for loading
71
- wav_audio_fp: Path = AudioConverter.convert(inp_audio_fp=audio_fp, output_audio_fp=audio_fp.with_suffix(".wav"))
72
-
73
- # Load the audio in memory and return that
74
- audio_data, audio_sr = librosa.load(wav_audio_fp, sr=sr)
75
-
76
- audio = AudioSignal(y=audio_data, sr=audio_sr, title=audio_fp.stem)
77
-
78
- return audio
79
-
80
- @staticmethod
81
- @validate_args_type()
82
- def from_fp(fp: str | Path, sr: int | None = None) -> AudioSignal:
83
- """
84
- Loads audio from a filepath using `librosa`.
85
-
86
- .. code-block:: python
87
-
88
- from modusa.io import AudioSignalLoader
89
-
90
- # From file
91
- audio_signal = AudioSignalLoader.from_fp(
92
- fp="path/to/audio.wav",
93
- sr=None
94
- )
95
-
96
- Parameters
97
- ----------
98
- fp: str | Path
99
- Local filepath of the audio.
100
- sr: int | None
101
- Sampling rate to load the audio in.
102
-
103
- Returns
104
- -------
105
- AudioSignal
106
- `Audio signal` instance with loaded audio content from filepath.
107
-
108
- """
109
- import librosa
110
- import warnings
111
- warnings.filterwarnings("ignore", message="pkg_resources is deprecated as an API.")
112
-
113
- fp = Path(fp)
114
- y, sr = librosa.load(fp, sr=sr)
115
-
116
- audio_signal = AudioSignal(y=y, sr=sr, title=fp.name)
117
-
118
- return audio_signal
119
-
120
-
121
- @staticmethod
122
- def from_array(y: np.ndarray, sr: int) -> AudioSignal:
123
- """
124
- Loads audio with a given sampling rate.
125
-
126
- .. code-block:: python
127
-
128
- from modusa.io import AudioSignalLoader
129
- import numpy as np
130
-
131
- # From numpy array
132
- audio_signal = AudioSignalLoader.from_array_with_sr(
133
- x=np.random.random((100, )),
134
- sr = 100 # Automatically generates time index
135
- )
136
-
137
- Parameters
138
- ----------
139
- y: np.ndarray
140
- Data of the audio signal.
141
- sr: int
142
- Sampling rate of the audio signal.
143
-
144
- Returns
145
- -------
146
- AudioSignal
147
- `Audio signal` instance with loaded audio content from sampling rate.
148
- """
149
-
150
- return AudioSignal(y=y, sr=sr)
151
-
152
- @staticmethod
153
- def from_list(y: list, t: list) -> AudioSignal:
154
- """
155
- Loads `AudioSignal` instance from python list.
156
-
157
- .. code-block:: python
158
-
159
- from modusa.io import AudioSignalLoader
160
-
161
- # From list
162
- audio_signal = AudioSignalLoader.from_list(
163
- y=[1, 2, 3, 2, 3],
164
- t = [0.1, 0.2, 0.3, 0.4, 0.5]
165
- )
166
-
167
- Parameters
168
- ----------
169
- y: list
170
- Data of the audio signal.
171
- t: np.ndarray | None
172
- Corresponding time stamps of the audio signal.
173
-
174
- Returns
175
- -------
176
- AudioSignal
177
- `Audio signal` instance with loaded audio content from python list.
178
- """
179
- y = np.array(y)
180
- t = np.array(t)
181
-
182
- return AudioSignal(y=y, t=t)
183
-
184
-
modusa/io/base.py DELETED
@@ -1,43 +0,0 @@
1
- #!/usr/bin/env python3
2
-
3
- from abc import ABC, abstractmethod
4
-
5
- class ModusaIO(ABC):
6
- """
7
- Base class for all I/O components: loaders, savers, recorders, etc.
8
-
9
- >>> modusa-dev create io
10
-
11
- .. code-block:: python
12
-
13
- # General template of a subclass of ModusaIO
14
- from modusa.io import ModusaIO
15
-
16
- class MyCustomIOClass(ModusaIO):
17
- #--------Meta Information----------
18
- _name = "My Custom I/O"
19
- _description = "My custom class for I/O."
20
- _author_name = "Ankit Anand"
21
- _author_email = "ankit0.anand0@gmail.com"
22
- _created_at = "2025-07-06"
23
- #----------------------------------
24
-
25
- @staticmethod
26
- def do_something():
27
- pass
28
-
29
-
30
- Note
31
- ----
32
- - This class is intended to be subclassed by any IO related tools built for the modusa framework.
33
- - In order to create an IO tool, you can use modusa-dev CLI to generate an IO template.
34
- - It is recommended to treat subclasses of ModusaIO as namespaces and define @staticmethods with control parameters, rather than using instance-level __init__ methods.
35
- """
36
-
37
- #--------Meta Information----------
38
- _name: str = "Modusa I/O"
39
- _description: str = "Base class for any I/O in the Modusa framework."
40
- _author_name = "Ankit Anand"
41
- _author_email = "ankit0.anand0@gmail.com"
42
- _created_at = "2025-07-06"
43
- #----------------------------------
@@ -1,3 +0,0 @@
1
- #!/usr/bin/env python3
2
-
3
- from .audio_signal import AudioSignal