ezmsg-sigproc 1.8.1__py3-none-any.whl → 2.0.0__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 (45) hide show
  1. ezmsg/sigproc/__version__.py +2 -2
  2. ezmsg/sigproc/activation.py +36 -39
  3. ezmsg/sigproc/adaptive_lattice_notch.py +231 -0
  4. ezmsg/sigproc/affinetransform.py +169 -163
  5. ezmsg/sigproc/aggregate.py +119 -104
  6. ezmsg/sigproc/bandpower.py +58 -52
  7. ezmsg/sigproc/base.py +1242 -0
  8. ezmsg/sigproc/butterworthfilter.py +37 -33
  9. ezmsg/sigproc/cheby.py +29 -17
  10. ezmsg/sigproc/combfilter.py +163 -0
  11. ezmsg/sigproc/decimate.py +19 -10
  12. ezmsg/sigproc/detrend.py +29 -0
  13. ezmsg/sigproc/diff.py +81 -0
  14. ezmsg/sigproc/downsample.py +78 -78
  15. ezmsg/sigproc/ewma.py +197 -0
  16. ezmsg/sigproc/extract_axis.py +41 -0
  17. ezmsg/sigproc/filter.py +257 -141
  18. ezmsg/sigproc/filterbank.py +247 -199
  19. ezmsg/sigproc/math/abs.py +17 -22
  20. ezmsg/sigproc/math/clip.py +24 -24
  21. ezmsg/sigproc/math/difference.py +34 -30
  22. ezmsg/sigproc/math/invert.py +13 -25
  23. ezmsg/sigproc/math/log.py +28 -33
  24. ezmsg/sigproc/math/scale.py +18 -26
  25. ezmsg/sigproc/quantize.py +71 -0
  26. ezmsg/sigproc/resample.py +298 -0
  27. ezmsg/sigproc/sampler.py +241 -259
  28. ezmsg/sigproc/scaler.py +55 -218
  29. ezmsg/sigproc/signalinjector.py +52 -43
  30. ezmsg/sigproc/slicer.py +81 -89
  31. ezmsg/sigproc/spectrogram.py +77 -75
  32. ezmsg/sigproc/spectrum.py +203 -168
  33. ezmsg/sigproc/synth.py +546 -393
  34. ezmsg/sigproc/transpose.py +131 -0
  35. ezmsg/sigproc/util/asio.py +156 -0
  36. ezmsg/sigproc/util/message.py +31 -0
  37. ezmsg/sigproc/util/profile.py +55 -12
  38. ezmsg/sigproc/util/typeresolution.py +83 -0
  39. ezmsg/sigproc/wavelets.py +154 -153
  40. ezmsg/sigproc/window.py +269 -211
  41. {ezmsg_sigproc-1.8.1.dist-info → ezmsg_sigproc-2.0.0.dist-info}/METADATA +2 -1
  42. ezmsg_sigproc-2.0.0.dist-info/RECORD +51 -0
  43. ezmsg_sigproc-1.8.1.dist-info/RECORD +0 -39
  44. {ezmsg_sigproc-1.8.1.dist-info → ezmsg_sigproc-2.0.0.dist-info}/WHEEL +0 -0
  45. {ezmsg_sigproc-1.8.1.dist-info → ezmsg_sigproc-2.0.0.dist-info}/licenses/LICENSE.txt +0 -0
@@ -1,76 +1,82 @@
1
1
  from dataclasses import field
2
- import typing
3
2
 
4
- import numpy as np
5
3
  import ezmsg.core as ez
6
4
  from ezmsg.util.messages.axisarray import AxisArray
7
- from ezmsg.util.generator import consumer, compose
8
5
 
9
- from .spectrogram import spectrogram, SpectrogramSettings
10
- from .aggregate import ranged_aggregate, AggregationFunction
11
- from .base import GenAxisArray
12
-
13
-
14
- @consumer
15
- def bandpower(
16
- spectrogram_settings: SpectrogramSettings,
17
- bands: list[tuple[float, float]] | None = [
18
- (17, 30),
19
- (70, 170),
20
- ],
21
- ) -> typing.Generator[AxisArray, AxisArray, None]:
22
- """
23
- Calculate the average spectral power in each band.
24
-
25
- Args:
26
- spectrogram_settings: Settings for spectrogram calculation.
27
- bands: (min, max) tuples of band limits in Hz.
28
-
29
- Returns:
30
- A primed generator object ready to yield an :obj:`AxisArray` for each .send(axis_array)
31
- with the data payload being the average spectral power in each band of the input data.
32
- """
33
- msg_out = AxisArray(np.array([]), dims=[""])
34
-
35
- f_spec = spectrogram(
36
- window_dur=spectrogram_settings.window_dur,
37
- window_shift=spectrogram_settings.window_shift,
38
- window_anchor=spectrogram_settings.window_anchor,
39
- window=spectrogram_settings.window,
40
- transform=spectrogram_settings.transform,
41
- output=spectrogram_settings.output,
42
- )
43
- f_agg = ranged_aggregate(
44
- axis="freq", bands=bands, operation=AggregationFunction.MEAN
45
- )
46
- pipeline = compose(f_spec, f_agg)
47
-
48
- while True:
49
- msg_in: AxisArray = yield msg_out
50
- msg_out = pipeline(msg_in)
6
+ from .spectrogram import SpectrogramSettings, SpectrogramTransformer
7
+ from .aggregate import (
8
+ AggregationFunction,
9
+ RangedAggregateTransformer,
10
+ RangedAggregateSettings,
11
+ )
12
+ from .base import (
13
+ BaseProcessor,
14
+ CompositeProcessor,
15
+ BaseStatefulProcessor,
16
+ BaseTransformerUnit,
17
+ )
51
18
 
52
19
 
53
20
  class BandPowerSettings(ez.Settings):
54
21
  """
55
22
  Settings for ``BandPower``.
56
- See :obj:`bandpower` for details.
57
23
  """
58
24
 
59
25
  spectrogram_settings: SpectrogramSettings = field(
60
26
  default_factory=SpectrogramSettings
61
27
  )
28
+ """
29
+ Settings for spectrogram calculation.
30
+ """
31
+
62
32
  bands: list[tuple[float, float]] | None = field(
63
33
  default_factory=lambda: [(17, 30), (70, 170)]
64
34
  )
35
+ """
36
+ (min, max) tuples of band limits in Hz.
37
+ """
38
+
65
39
 
40
+ class BandPowerTransformer(CompositeProcessor[BandPowerSettings, AxisArray, AxisArray]):
41
+ @staticmethod
42
+ def _initialize_processors(
43
+ settings: BandPowerSettings,
44
+ ) -> dict[str, BaseProcessor | BaseStatefulProcessor]:
45
+ return {
46
+ "spectrogram": SpectrogramTransformer(
47
+ settings=settings.spectrogram_settings
48
+ ),
49
+ "aggregate": RangedAggregateTransformer(
50
+ settings=RangedAggregateSettings(
51
+ axis="freq",
52
+ bands=settings.bands,
53
+ operation=AggregationFunction.MEAN,
54
+ )
55
+ ),
56
+ }
66
57
 
67
- class BandPower(GenAxisArray):
68
- """:obj:`Unit` for :obj:`bandpower`."""
69
58
 
59
+ class BandPower(
60
+ BaseTransformerUnit[BandPowerSettings, AxisArray, AxisArray, BandPowerTransformer]
61
+ ):
70
62
  SETTINGS = BandPowerSettings
71
63
 
72
- def construct_generator(self):
73
- self.STATE.gen = bandpower(
74
- spectrogram_settings=self.SETTINGS.spectrogram_settings,
75
- bands=self.SETTINGS.bands,
64
+
65
+ def bandpower(
66
+ spectrogram_settings: SpectrogramSettings,
67
+ bands: list[tuple[float, float]] | None = [
68
+ (17, 30),
69
+ (70, 170),
70
+ ],
71
+ ) -> BandPowerTransformer:
72
+ """
73
+ Calculate the average spectral power in each band.
74
+
75
+ Returns:
76
+ :obj:`BandPowerTransformer`
77
+ """
78
+ return BandPowerTransformer(
79
+ settings=BandPowerSettings(
80
+ spectrogram_settings=spectrogram_settings, bands=bands
76
81
  )
82
+ )