pywavelet 0.2.3__py3-none-any.whl → 0.2.4__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.
pywavelet/_version.py CHANGED
@@ -12,5 +12,5 @@ __version__: str
12
12
  __version_tuple__: VERSION_TUPLE
13
13
  version_tuple: VERSION_TUPLE
14
14
 
15
- __version__ = version = '0.2.3'
16
- __version_tuple__ = version_tuple = (0, 2, 3)
15
+ __version__ = version = '0.2.4'
16
+ __version_tuple__ = version_tuple = (0, 2, 4)
@@ -1,6 +1,7 @@
1
1
  from typing import List, Tuple
2
2
 
3
3
  import matplotlib.pyplot as plt
4
+ import numpy as np
4
5
 
5
6
  from .common import fmt_timerange, is_documented_by, xp
6
7
  from .plotting import plot_wavelet_grid, plot_wavelet_trend
@@ -343,14 +344,18 @@ class Wavelet:
343
344
 
344
345
  def __mul__(self, other):
345
346
  """Element-wise multiplication of two Wavelet objects."""
346
- if isinstance(other, Wavelet):
347
- return Wavelet(
348
- data=self.data * other.data, time=self.time, freq=self.freq
349
- )
347
+ if isinstance(other, WaveletMask):
348
+ data = self.data.copy()
349
+ data[~other.mask] = np.nan
350
+ return Wavelet(data=data, time=self.time, freq=self.freq)
350
351
  elif isinstance(other, float):
351
352
  return Wavelet(
352
353
  data=self.data * other, time=self.time, freq=self.freq
353
354
  )
355
+ elif isinstance(other, WaveletMask):
356
+ return Wavelet(
357
+ data=self.data * other.data, time=self.time, freq=self.freq
358
+ )
354
359
 
355
360
  def __truediv__(self, other):
356
361
  """Element-wise division of two Wavelet objects."""
@@ -445,11 +450,40 @@ class WaveletMask(Wavelet):
445
450
  return rpr
446
451
 
447
452
  @classmethod
448
- def from_frange(
449
- cls, time_grid: xp.ndarray, freq_grid: xp.ndarray, frange: List[float]
453
+ def from_restrictions(
454
+ cls,
455
+ time_grid: xp.ndarray,
456
+ freq_grid: xp.ndarray,
457
+ frange: List[float],
458
+ tgaps: List[Tuple[float, float]] = [],
450
459
  ):
460
+ """
461
+ Create a WaveletMask object from restrictions on time and frequency.
462
+
463
+ Parameters
464
+ ----------
465
+ time_grid : xp.ndarray
466
+ Array of time points.
467
+ freq_grid : xp.ndarray
468
+ Array of corresponding frequency points.
469
+ frange : List[float]
470
+ Frequency range to include.
471
+ tgaps : List[Tuple[float, float]]
472
+ List of time gaps to exclude.
473
+
474
+ Returns
475
+ -------
476
+ WaveletMask
477
+ A WaveletMask object with the specified restrictions.
478
+ """
451
479
  self = cls.zeros_from_grid(time_grid, freq_grid)
452
480
  self.data[
453
481
  (freq_grid >= frange[0]) & (freq_grid <= frange[1]), :
454
482
  ] = True
483
+
484
+ for tgap in tgaps:
485
+ self.data[
486
+ :, (time_grid >= tgap[0]) & (time_grid <= tgap[1])
487
+ ] = False
488
+ self.data = self.data.astype(bool)
455
489
  return self
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: pywavelet
3
- Version: 0.2.3
3
+ Version: 0.2.4
4
4
  Summary: WDM wavelet transform your time/freq series!
5
5
  Author-email: Pywavelet Team <avi.vajpeyi@gmail.com>
6
6
  Project-URL: Homepage, https://pywavelet.github.io/pywavelet/
@@ -1,5 +1,5 @@
1
1
  pywavelet/__init__.py,sha256=zcK3Qj4wTrGZF1rU3aT6yA9LvliAOD4DVOY7gNfHhCI,53
2
- pywavelet/_version.py,sha256=AaQEeqeDwmZAHoPuwg2C0ulADePbIYLSFanZzt0cytQ,411
2
+ pywavelet/_version.py,sha256=4gL0W4-u58XR5lRLpeoIPrGhcewTk0-527de6uTNmkg,411
3
3
  pywavelet/backend.py,sha256=SmpgIBHvTO1rtIAQQN_zpVB8i6R-x23FNKJG6_JlrNs,666
4
4
  pywavelet/logger.py,sha256=DyKC-pJ_N9GlVeXL00E1D8hUd8GceBg-pnn7g1YPKcM,391
5
5
  pywavelet/utils.py,sha256=l47C643nGlV9q4a0G7wtKzuas0Ou4En2e1FTATCgwlw,1907
@@ -27,9 +27,9 @@ pywavelet/types/common.py,sha256=aIcYq-0KOLHnPQjrVbVmw_TQ3Xm5a7xA30rSgwt3rk4,127
27
27
  pywavelet/types/frequencyseries.py,sha256=hrtLaIUaRrqXw8l00yFe2tPJwpksDa_4n1z6R8XSPPQ,7531
28
28
  pywavelet/types/plotting.py,sha256=JNDxeP-fB8U09E90J-rVT-h5yCGA_tGRHtctbgINiRo,10625
29
29
  pywavelet/types/timeseries.py,sha256=u35bIqFo3QdlQRBEu6maeWA7DePS11LQ6WMiLjZPcWo,9456
30
- pywavelet/types/wavelet.py,sha256=el48oyAfwtSw2tCQLUb85F9lKr0qMSRJPUmAUU8TS50,12552
30
+ pywavelet/types/wavelet.py,sha256=uHJzTS2ZXTRr7I7NHWv3qNjknSBhQUpcED3jM6ti7UM,13587
31
31
  pywavelet/types/wavelet_bins.py,sha256=GoQGKeZlPc-KbYY7LoxAhB-HI4diHpPcTABBXRfUTLA,1459
32
- pywavelet-0.2.3.dist-info/METADATA,sha256=IGnMbmU9Cer13p5ZpYNmdcWKnWG1J0p1p_BN7_I1smE,2241
33
- pywavelet-0.2.3.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
34
- pywavelet-0.2.3.dist-info/top_level.txt,sha256=g0Ezt0Rg0X-nrd-a0pAXKVRkuWNsF2M9Ynsjb9b2UYQ,10
35
- pywavelet-0.2.3.dist-info/RECORD,,
32
+ pywavelet-0.2.4.dist-info/METADATA,sha256=Thhhz8I2XTKr0mVuf09UpcvjeEGKUnVUX0jxENu6gEQ,2241
33
+ pywavelet-0.2.4.dist-info/WHEEL,sha256=P9jw-gEje8ByB7_hXoICnHtVCrEwMQh-630tKvQWehc,91
34
+ pywavelet-0.2.4.dist-info/top_level.txt,sha256=g0Ezt0Rg0X-nrd-a0pAXKVRkuWNsF2M9Ynsjb9b2UYQ,10
35
+ pywavelet-0.2.4.dist-info/RECORD,,