acoular 25.3.post1__tar.gz → 25.7__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 (58) hide show
  1. {acoular-25.3.post1 → acoular-25.7}/.gitignore +3 -0
  2. {acoular-25.3.post1 → acoular-25.7}/PKG-INFO +3 -3
  3. {acoular-25.3.post1 → acoular-25.7}/README.md +1 -1
  4. {acoular-25.3.post1 → acoular-25.7}/acoular/__init__.py +2 -4
  5. {acoular-25.3.post1 → acoular-25.7}/acoular/aiaa/aiaa.py +9 -4
  6. {acoular-25.3.post1 → acoular-25.7}/acoular/base.py +14 -33
  7. {acoular-25.3.post1 → acoular-25.7}/acoular/calib.py +4 -4
  8. {acoular-25.3.post1 → acoular-25.7}/acoular/configuration.py +1 -1
  9. {acoular-25.3.post1 → acoular-25.7}/acoular/demo/__init__.py +6 -1
  10. {acoular-25.3.post1 → acoular-25.7}/acoular/demo/acoular_demo.py +34 -10
  11. {acoular-25.3.post1 → acoular-25.7}/acoular/deprecation.py +14 -2
  12. {acoular-25.3.post1 → acoular-25.7}/acoular/environments.py +6 -5
  13. {acoular-25.3.post1 → acoular-25.7}/acoular/fastFuncs.py +16 -10
  14. {acoular-25.3.post1 → acoular-25.7}/acoular/fbeamform.py +12 -107
  15. {acoular-25.3.post1 → acoular-25.7}/acoular/fprocess.py +3 -32
  16. {acoular-25.3.post1 → acoular-25.7}/acoular/grids.py +145 -38
  17. {acoular-25.3.post1 → acoular-25.7}/acoular/h5cache.py +5 -3
  18. {acoular-25.3.post1 → acoular-25.7}/acoular/h5files.py +10 -0
  19. {acoular-25.3.post1 → acoular-25.7}/acoular/internal.py +4 -0
  20. {acoular-25.3.post1 → acoular-25.7}/acoular/microphones.py +21 -3
  21. {acoular-25.3.post1 → acoular-25.7}/acoular/process.py +3 -45
  22. {acoular-25.3.post1 → acoular-25.7}/acoular/sdinput.py +12 -4
  23. {acoular-25.3.post1 → acoular-25.7}/acoular/signals.py +2 -2
  24. {acoular-25.3.post1 → acoular-25.7}/acoular/sources.py +28 -25
  25. {acoular-25.3.post1 → acoular-25.7}/acoular/spectra.py +17 -17
  26. {acoular-25.3.post1 → acoular-25.7}/acoular/tbeamform.py +3 -0
  27. {acoular-25.3.post1 → acoular-25.7}/acoular/tools/helpers.py +27 -0
  28. {acoular-25.3.post1 → acoular-25.7}/acoular/tools/utils.py +1 -2
  29. acoular-25.7/acoular/tprocess.py +2898 -0
  30. {acoular-25.3.post1 → acoular-25.7}/acoular/traitsviews.py +1 -3
  31. {acoular-25.3.post1 → acoular-25.7}/acoular/version.py +4 -3
  32. {acoular-25.3.post1 → acoular-25.7}/pyproject.toml +3 -3
  33. acoular-25.3.post1/acoular/tprocess.py +0 -2117
  34. {acoular-25.3.post1 → acoular-25.7}/AUTHORS.rst +0 -0
  35. {acoular-25.3.post1 → acoular-25.7}/LICENSE +0 -0
  36. {acoular-25.3.post1 → acoular-25.7}/acoular/aiaa/__init__.py +0 -0
  37. {acoular-25.3.post1 → acoular-25.7}/acoular/tfastfuncs.py +0 -0
  38. {acoular-25.3.post1 → acoular-25.7}/acoular/tools/__init__.py +0 -0
  39. {acoular-25.3.post1 → acoular-25.7}/acoular/tools/metrics.py +0 -0
  40. {acoular-25.3.post1 → acoular-25.7}/acoular/trajectory.py +0 -0
  41. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/HW90D240_f10.xml +0 -0
  42. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/W90_D105_f10.xml +0 -0
  43. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/acousticam_2c.xml +0 -0
  44. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/acousticam_4c.xml +0 -0
  45. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/array38.xml +0 -0
  46. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/array92x.xml +0 -0
  47. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/array_56.xml +0 -0
  48. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/array_56_10_9.xml +0 -0
  49. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/array_56_bomb.xml +0 -0
  50. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/array_56_v2.xml +0 -0
  51. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/array_64.xml +0 -0
  52. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/array_84_10_9.xml +0 -0
  53. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/array_84_bomb_v3.xml +0 -0
  54. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/calib_vw_ring32.xml +0 -0
  55. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/gfai_ring32.xml +0 -0
  56. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/minidsp_uma-16.xml +0 -0
  57. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/minidsp_uma-16_mirrored.xml +0 -0
  58. {acoular-25.3.post1 → acoular-25.7}/acoular/xml/tub_vogel64.xml +0 -0
@@ -24,6 +24,9 @@ MANIFEST
24
24
  examples/all_bf.sav
25
25
  examples/benchmark/results/
26
26
  **/three_sources.h5
27
+ **/three_sources_1d.h5
28
+ **/three_sources_2d.h5
29
+ **/three_sources_3d.h5
27
30
  docs/source/sg_execution_times.rst
28
31
  docs/source/api_ref/generated/
29
32
  docs/source/auto_examples/**/*
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: acoular
3
- Version: 25.3.post1
3
+ Version: 25.7
4
4
  Summary: Python library for acoustic beamforming
5
5
  Project-URL: homepage, https://acoular.org
6
6
  Project-URL: documentation, https://acoular.org
@@ -51,7 +51,7 @@ Requires-Python: <3.14,>=3.10
51
51
  Requires-Dist: numba
52
52
  Requires-Dist: numpy
53
53
  Requires-Dist: scikit-learn
54
- Requires-Dist: scipy>=1.1.0
54
+ Requires-Dist: scipy!=1.16.*,>=1.1.0
55
55
  Requires-Dist: tables
56
56
  Requires-Dist: traits>=6.0
57
57
  Provides-Extra: dev
@@ -228,7 +228,7 @@ pm = bb.synthetic( 8000, 3 )
228
228
  # compute the sound pressure level
229
229
  Lm = ac.L_p( pm )
230
230
  # plot the map
231
- plt.imshow( Lm.T, origin='lower', vmin=Lm.max()-10, extent=rg.extend(), \
231
+ plt.imshow( Lm.T, origin='lower', vmin=Lm.max()-10, extent=rg.extent, \
232
232
  interpolation='bicubic')
233
233
  plt.title('Beamformer (base) for 3 sources measured for 8000 Hz')
234
234
  plt.xlabel('x in m')
@@ -118,7 +118,7 @@ pm = bb.synthetic( 8000, 3 )
118
118
  # compute the sound pressure level
119
119
  Lm = ac.L_p( pm )
120
120
  # plot the map
121
- plt.imshow( Lm.T, origin='lower', vmin=Lm.max()-10, extent=rg.extend(), \
121
+ plt.imshow( Lm.T, origin='lower', vmin=Lm.max()-10, extent=rg.extent, \
122
122
  interpolation='bicubic')
123
123
  plt.title('Beamformer (base) for 3 sources measured for 8000 Hz')
124
124
  plt.xlabel('x in m')
@@ -16,7 +16,6 @@ from .base import (
16
16
  SamplesGenerator,
17
17
  SpectraGenerator,
18
18
  SpectraOut,
19
- TimeInOut,
20
19
  TimeOut,
21
20
  )
22
21
  from .calib import Calib
@@ -52,7 +51,7 @@ from .fbeamform import (
52
51
  SteeringVector,
53
52
  integrate,
54
53
  )
55
- from .fprocess import IRFFT, RFFT, AutoPowerSpectra, CrossPowerSpectra, FFTSpectra
54
+ from .fprocess import IRFFT, RFFT, AutoPowerSpectra, CrossPowerSpectra
56
55
  from .grids import (
57
56
  CircSector,
58
57
  ConvexSector,
@@ -69,7 +68,7 @@ from .grids import (
69
68
  Sector,
70
69
  )
71
70
  from .microphones import MicGeom
72
- from .process import Average, Cache, SampleSplitter, TimeAverage, TimeCache
71
+ from .process import Average, Cache, SampleSplitter
73
72
  from .sdinput import SoundDeviceSamplesGenerator
74
73
  from .signals import (
75
74
  FiltWNoiseGenerator,
@@ -117,7 +116,6 @@ from .tprocess import (
117
116
  FiltFiltOctave,
118
117
  FiltFreqWeight,
119
118
  FiltOctave,
120
- MaskedTimeInOut,
121
119
  MaskedTimeOut,
122
120
  Mixer,
123
121
  OctaveFilterBank,
@@ -32,6 +32,7 @@ from traits.api import (
32
32
  File,
33
33
  Instance,
34
34
  Property,
35
+ Union,
35
36
  cached_property,
36
37
  on_trait_change,
37
38
  property_depends_on,
@@ -84,12 +85,12 @@ class TriggerAIAABenchmark(TimeSamplesAIAABenchmark):
84
85
  (self.num_samples, self.num_channels) = self.data.shape
85
86
 
86
87
 
87
- @deprecated_alias({'name': 'file'})
88
+ @deprecated_alias({'name': 'file'}, removal_version='25.10')
88
89
  class CsmAIAABenchmark(PowerSpectraImport):
89
90
  """Class to load the CSM that is stored in AIAA Benchmark HDF5 file."""
90
91
 
91
92
  #: Full name of the .h5 file with data
92
- file = File(filter=['*.h5'], exists=True, desc='name of data file')
93
+ file = Union(None, File(filter=['*.h5'], exists=True), desc='name of data file')
93
94
 
94
95
  #: Basename of the .h5 file with data, is set automatically.
95
96
  basename = Property(
@@ -167,11 +168,15 @@ class MicAIAABenchmark(MicGeom):
167
168
  """
168
169
 
169
170
  #: Name of the .h5-file from which to read the data.
170
- file = File(filter=['*.h5'], exists=True, desc='name of the h5 file containing the microphone geometry')
171
+ file = Union(
172
+ None, File(filter=['*.h5'], exists=True), desc='name of the h5 file containing the microphone geometry'
173
+ )
171
174
 
172
175
  @on_trait_change('file')
173
176
  def _import_mpos(self):
174
- """Import the microphone positions from .h5 file.
177
+ """
178
+ Import the microphone positions from .h5 file.
179
+
175
180
  Called when :attr:`basename` changes.
176
181
  """
177
182
  file = _get_h5file_class()
@@ -16,7 +16,6 @@ to be used directly, but to be subclassed by classes that implement the actual s
16
16
  InOut
17
17
  TimeOut
18
18
  SpectraOut
19
- TimeInOut
20
19
  """
21
20
 
22
21
  from abc import abstractmethod
@@ -37,7 +36,7 @@ from .deprecation import deprecated_alias
37
36
  from .internal import digest
38
37
 
39
38
 
40
- @deprecated_alias({'numchannels': 'num_channels', 'numsamples': 'num_samples'})
39
+ @deprecated_alias({'numchannels': 'num_channels', 'numsamples': 'num_samples'}, removal_version='25.10')
41
40
  class Generator(ABCHasStrictTraits):
42
41
  """Interface for any generating signal processing block.
43
42
 
@@ -157,10 +156,10 @@ class SpectraGenerator(Generator):
157
156
  """
158
157
 
159
158
 
160
- @deprecated_alias({'numchannels': 'num_channels', 'numsamples': 'num_samples'}, read_only=True)
159
+ @deprecated_alias({'numchannels': 'num_channels', 'numsamples': 'num_samples'}, read_only=True, removal_version='25.10')
161
160
  class TimeOut(SamplesGenerator):
162
- """Abstract base class for any signal processing block that receives data from any
163
- :attr:`source` domain and returns time domain signals.
161
+ """
162
+ Abstract base class receiving from a :attr:`source` and returning time domain signals.
164
163
 
165
164
  It provides a base class that can be used to create signal processing blocks that receive data
166
165
  from any generating :attr:`source` and generates a time signal output via the generator
@@ -205,10 +204,14 @@ class TimeOut(SamplesGenerator):
205
204
  """
206
205
 
207
206
 
208
- @deprecated_alias({'numchannels': 'num_channels', 'numsamples': 'num_samples', 'numfreqs': 'num_freqs'}, read_only=True)
207
+ @deprecated_alias(
208
+ {'numchannels': 'num_channels', 'numsamples': 'num_samples', 'numfreqs': 'num_freqs'},
209
+ read_only=True,
210
+ removal_version='25.10',
211
+ )
209
212
  class SpectraOut(SpectraGenerator):
210
- """Abstract base class for any signal processing block that receives data from any
211
- :attr:`source` domain and returns frequency domain signals.
213
+ """
214
+ Abstract base class receiving from a :attr:`source` and returning frequency domain signals.
212
215
 
213
216
  It provides a base class that can be used to create signal processing blocks that receive data
214
217
  from any generating :attr:`source` domain and generates a frequency domain output via the
@@ -260,10 +263,10 @@ class SpectraOut(SpectraGenerator):
260
263
  """
261
264
 
262
265
 
263
- @deprecated_alias({'numchannels': 'num_channels', 'numsamples': 'num_samples'}, read_only=True)
266
+ @deprecated_alias({'numchannels': 'num_channels', 'numsamples': 'num_samples'}, read_only=True, removal_version='25.10')
264
267
  class InOut(SamplesGenerator, SpectraGenerator):
265
- """Abstract base class for any signal processing block that receives data from any
266
- :attr:`source` domain and returns signals in the same domain.
268
+ """
269
+ Abstract base class receiving from a :attr:`source` and returning signals in the same domain.
267
270
 
268
271
  It provides a base class that can be used to create signal processing blocks that receive data
269
272
  from any generating :attr:`source` and generates an output via the generator :meth:`result` in
@@ -308,25 +311,3 @@ class InOut(SamplesGenerator, SpectraGenerator):
308
311
  numpy.ndarray
309
312
  Two-dimensional output data block of shape (num, ...)
310
313
  """
311
-
312
-
313
- class TimeInOut(TimeOut):
314
- """Deprecated alias for :class:`~acoular.base.TimeOut`.
315
-
316
- .. deprecated:: 24.10
317
- Using :class:`~acoular.base.TimeInOut` is deprecated and will be removed in Acoular 25.07.
318
- Use :class:`~acoular.base.TimeOut` instead.
319
- """
320
-
321
- #: Data source; :class:`~acoular.base.SamplesGenerator` or derived object.
322
- source = Instance(SamplesGenerator)
323
-
324
- def __init__(self, *args, **kwargs):
325
- super().__init__(*args, **kwargs)
326
- import warnings
327
-
328
- warnings.warn(
329
- 'TimeInOut is deprecated and will be removed in Acoular 25.07. Use TimeOut instead.',
330
- DeprecationWarning,
331
- stacklevel=2,
332
- )
@@ -13,7 +13,7 @@
13
13
  import xml.dom.minidom
14
14
 
15
15
  from numpy import array, newaxis
16
- from traits.api import CArray, CInt, File, List, Property, cached_property, on_trait_change
16
+ from traits.api import CArray, CInt, File, List, Property, Union, cached_property, on_trait_change
17
17
 
18
18
  import acoular as ac
19
19
 
@@ -24,7 +24,7 @@ from .deprecation import deprecated_alias
24
24
  from .internal import digest
25
25
 
26
26
 
27
- @deprecated_alias({'from_file': 'file'})
27
+ @deprecated_alias({'from_file': 'file'}, removal_version='25.10')
28
28
  class Calib(InOut):
29
29
  """Processing block for handling calibration data in `*.xml` or NumPy format.
30
30
 
@@ -72,13 +72,12 @@ class Calib(InOut):
72
72
  0.07458428+0.49657939j 1.772696 +3.92233098j 3.19543248+0.17988554j
73
73
  0.3379041 -3.93342331j 0.93949242+2.5328611j 2.97352574+0.j ]]
74
74
 
75
- Deprecated and will be removed in Acoular 25.10:
76
75
  This class serves as interface to load calibration data for the used
77
76
  microphone array. The calibration factors are stored as [Pa/unit].
78
77
  """
79
78
 
80
79
  #: Name of the .xml file to be imported.
81
- file = File(filter=['*.xml'], exists=True, desc='name of the xml file to import')
80
+ file = Union(None, File(filter=['*.xml'], exists=True), desc='name of the xml file to import')
82
81
 
83
82
  #: Number of microphones in the calibration data,
84
83
  #: is set automatically when read from file or when data is set.
@@ -102,6 +101,7 @@ class Calib(InOut):
102
101
 
103
102
  @on_trait_change('data')
104
103
  def set_num_mics(self):
104
+ """Sets the number of microphones based on the shape of the data array."""
105
105
  self.num_mics = self.data.shape[0]
106
106
 
107
107
  @cached_property
@@ -68,7 +68,7 @@ class Config(HasStrictTraits):
68
68
  The package used to read and write .h5 files can be specified
69
69
  by :attr:`h5library`.
70
70
 
71
- Example:
71
+ Examples
72
72
  --------
73
73
  For using Acoular with h5py package and overwrite existing cache:
74
74
 
@@ -11,4 +11,9 @@
11
11
  """
12
12
 
13
13
  from . import acoular_demo
14
- from .acoular_demo import create_three_sources
14
+ from .acoular_demo import (
15
+ create_three_sources,
16
+ create_three_sources_1d,
17
+ create_three_sources_2d,
18
+ create_three_sources_3d,
19
+ )
@@ -33,28 +33,52 @@ Source Location RMS
33
33
 
34
34
 
35
35
  def create_three_sources(mg, h5savefile='three_sources.h5'):
36
- """Create three noise sources and return them as Mixer."""
37
- import acoular as ac
36
+ """
37
+ Create three noise sources and return them as Mixer.
38
+
39
+ Alias for :func:`create_three_sources_2d`.
40
+ """
41
+ return create_three_sources_2d(mg, h5savefile=h5savefile)
42
+
38
43
 
39
- # set up the parameters
44
+ def _create_three_sources(mg, locs, h5savefile='', sfreq=51200, duration=1):
45
+ """Create three noise sources with custom locations and return them as Mixer."""
46
+ import acoular as ac
40
47
 
41
- sfreq = 51200
42
- duration = 1
43
48
  nsamples = duration * sfreq
44
49
 
45
50
  n1 = ac.WNoiseGenerator(sample_freq=sfreq, num_samples=nsamples, seed=1)
46
51
  n2 = ac.WNoiseGenerator(sample_freq=sfreq, num_samples=nsamples, seed=2, rms=0.7)
47
52
  n3 = ac.WNoiseGenerator(sample_freq=sfreq, num_samples=nsamples, seed=3, rms=0.5)
48
- p1 = ac.PointSource(signal=n1, mics=mg, loc=(-0.1, -0.1, -0.3))
49
- p2 = ac.PointSource(signal=n2, mics=mg, loc=(0.15, 0, -0.3))
50
- p3 = ac.PointSource(signal=n3, mics=mg, loc=(0, 0.1, -0.3))
51
- pa = ac.Mixer(source=p1, sources=[p2, p3])
53
+
54
+ noises = [n1, n2, n3]
55
+ ps = [ac.PointSource(signal=n, mics=mg, loc=loc) for n, loc in list(zip(noises, locs))]
56
+ pa = ac.Mixer(source=ps[0], sources=ps[1:])
57
+
52
58
  if h5savefile:
53
59
  wh5 = ac.WriteH5(source=pa, file=h5savefile)
54
60
  wh5.save()
55
61
  return pa
56
62
 
57
63
 
64
+ def create_three_sources_1d(mg, h5savefile='three_sources_1d.h5'):
65
+ """Create three noise sources on a 1D line and return them as Mixer."""
66
+ locs = [(-0.1, 0, -0.3), (0.15, 0, -0.3), (0, 0, -0.3)]
67
+ return _create_three_sources(mg, locs, h5savefile=h5savefile)
68
+
69
+
70
+ def create_three_sources_2d(mg, h5savefile='three_sources_2d.h5'):
71
+ """Create three noise sources in a 2D plane and return them as Mixer."""
72
+ locs = [(-0.1, -0.1, -0.3), (0.15, 0, -0.3), (0, 0.1, -0.3)]
73
+ return _create_three_sources(mg, locs, h5savefile=h5savefile)
74
+
75
+
76
+ def create_three_sources_3d(mg, h5savefile='three_sources_3d.h5'):
77
+ """Create three noise sources in 3D space and return them as Mixer."""
78
+ locs = [(-0.1, -0.1, -0.3), (0.15, 0, -0.17), (0, 0.1, -0.25)]
79
+ return _create_three_sources(mg, locs, h5savefile=h5savefile)
80
+
81
+
58
82
  def run():
59
83
  """Run the Acoular demo."""
60
84
  from pathlib import Path
@@ -87,7 +111,7 @@ def run():
87
111
  from matplotlib.pyplot import axis, colorbar, figure, imshow, plot, show
88
112
 
89
113
  # show map
90
- imshow(spl.T, origin='lower', vmin=spl.max() - 10, extent=rg.extend(), interpolation='bicubic')
114
+ imshow(spl.T, origin='lower', vmin=spl.max() - 10, extent=rg.extent, interpolation='bicubic')
91
115
  colorbar()
92
116
 
93
117
  # plot microphone geometry
@@ -1,6 +1,13 @@
1
1
  # ------------------------------------------------------------------------------
2
2
  # Copyright (c) Acoular Development Team.
3
3
  # ------------------------------------------------------------------------------
4
+ """Implements helper functions for deprecation handling.
5
+
6
+ .. autosummary::
7
+ :toctree: generated/
8
+
9
+ deprecated_alias
10
+ """
4
11
 
5
12
  from warnings import warn
6
13
 
@@ -8,7 +15,9 @@ from traits.api import Property
8
15
 
9
16
 
10
17
  def deprecated_alias(old2new, read_only=False, removal_version=''):
11
- """Decorator function for deprecating renamed class traits.
18
+ """
19
+ Decorator function for deprecating renamed class traits.
20
+
12
21
  Replaced traits should no longer be part of the class definition
13
22
  and only mentioned in this decorator's parameter list.
14
23
  The replacement trait has to be defined in the updated class and
@@ -66,7 +75,10 @@ def deprecated_alias(old2new, read_only=False, removal_version=''):
66
75
  else:
67
76
  current_removal_version = ''
68
77
  # Define Trait Property type
69
- trait_type = Property(*_alias_accessor_factory(old, new, current_read_only, current_removal_version))
78
+ trait_type = Property(
79
+ *_alias_accessor_factory(old, new, current_read_only, current_removal_version),
80
+ transient=True,
81
+ )
70
82
 
71
83
  # If the new trait exists, set or update alias
72
84
  if new in cls.class_traits():
@@ -557,8 +557,7 @@ class OpenJet(FlowField):
557
557
 
558
558
  class RotatingFlow(FlowField):
559
559
  """
560
- Analytical approximation of a rotating flow field with additional velocity component
561
- in z-direction.
560
+ Analytical approximation of a rotating flow field with velocity component in z-direction.
562
561
 
563
562
  This class provides an analytical model for a fluid flow field with a
564
563
  rigid-body-like rotation about the z-axis. The flow combines rotational motion
@@ -591,11 +590,12 @@ class RotatingFlow(FlowField):
591
590
  # Positive values indicate clockwise rotation of the flow.
592
591
  # This is contrary to the usual definition of the direction of rotation.
593
592
  # Deprecated! Please use the differently defined :attr:`rps` attribute instead.
594
- rpm = Property(desc='revolutions per minute of the flow; positive values for clockwise rotation')
593
+ rpm = Property(transient=True, desc='revolutions per minute of the flow; positive values for clockwise rotation')
595
594
 
596
595
  def _get_rpm(self):
597
596
  warn(
598
- 'Deprecated use of "rpm" trait. Please use the "rps" trait instead.',
597
+ 'Deprecated use of "rpm" trait (will be removed in version 26.01). \
598
+ Please use the "rps" trait instead.',
599
599
  DeprecationWarning,
600
600
  stacklevel=2,
601
601
  )
@@ -603,7 +603,8 @@ class RotatingFlow(FlowField):
603
603
 
604
604
  def _set_rpm(self, rpm):
605
605
  warn(
606
- 'Deprecated use of "rpm" trait. Please use the "rps" trait instead (divide rpm value by -60).',
606
+ 'Deprecated use of "rpm" trait (will be removed in version 26.01). \
607
+ Please use the "rps" trait instead (divide rpm value by -60).',
607
608
  DeprecationWarning,
608
609
  stacklevel=2,
609
610
  )
@@ -1,9 +1,7 @@
1
1
  # ------------------------------------------------------------------------------
2
2
  # Copyright (c) Acoular Development Team.
3
3
  # ------------------------------------------------------------------------------
4
- """Contains all the functionalities which are very expansive, regarding
5
- computational costs. All functionalities are optimized via NUMBA.
6
- """
4
+ """Contains all computationally expensive operations and accelerates them with NUMBA."""
7
5
 
8
6
  import numba as nb
9
7
  import numpy as np
@@ -27,7 +25,8 @@ FAST_OPTION = True # fastmath options
27
25
  )
28
26
  def calcCSM(csm, SpecAllMics):
29
27
  """Adds a given spectrum to the Cross-Spectral-Matrix (CSM).
30
- Here only the upper triangular matrix of the CSM is calculated. After
28
+
29
+ Here, only the upper triangular matrix of the CSM is calculated. After
31
30
  averaging over the various ensembles, the whole CSM is created via complex
32
31
  conjugation transposing. This happens outside
33
32
  (in :class:`PowerSpectra<acoular.spectra.PowerSpectra>`).
@@ -56,9 +55,11 @@ def calcCSM(csm, SpecAllMics):
56
55
 
57
56
 
58
57
  def beamformerFreq(steerVecType, boolRemovedDiagOfCSM, normFactor, inputTupleSteer, inputTupleCsm):
59
- r"""Conventional beamformer in frequency domain. Use either a predefined
60
- steering vector formulation (see Sarradj 2012) or pass your own
61
- steering vector.
58
+ r"""
59
+ Conventional beamformer in frequency domain.
60
+
61
+ Use either a predefined steering vector formulation (see Sarradj 2012) or pass your own steering
62
+ vector.
62
63
 
63
64
  Parameters
64
65
  ----------
@@ -545,8 +546,11 @@ def _freqBeamformer_EigValProb_SpecificSteerVec_CsmRemovedDiag(
545
546
 
546
547
  # %% Point - Spread - Function
547
548
  def calcPointSpreadFunction(steerVecType, distGridToArrayCenter, distGridToAllMics, waveNumber, indSource, dtype):
548
- r"""Calculates the Point-Spread-Functions. Use either a predefined steering vector
549
- formulation (see :ref:`Sarradj, 2012<Sarradj2012>`) or pass it your own steering vector.
549
+ r"""
550
+ Calculates the Point-Spread-Functions.
551
+
552
+ Use either a predefined steering vector formulation (see :ref:`Sarradj, 2012<Sarradj2012>`) or
553
+ pass it your own steering vector.
550
554
 
551
555
  Parameters
552
556
  ----------
@@ -789,7 +793,9 @@ def _psf_Formulation4AkaTrueLocation(
789
793
  fastmath=FAST_OPTION,
790
794
  )
791
795
  def damasSolverGaussSeidel(A, dirtyMap, nIterations, relax, damasSolution):
792
- """Solves the DAMAS inverse problem via modified gauss seidel.
796
+ """
797
+ Solves the DAMAS inverse problem via modified gauss seidel.
798
+
793
799
  This is the original formulation from :ref:`Brooks and Humphreys, 2006<BrooksHumphreys2006>`.
794
800
 
795
801
  Parameters