modusa 0.3.57__py3-none-any.whl → 0.3.58__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.
modusa/tools/plotter.py CHANGED
@@ -12,8 +12,8 @@ import matplotlib.font_manager as fm
12
12
  import matplotlib.pyplot as plt
13
13
  import matplotlib.gridspec as gridspec
14
14
  from matplotlib.patches import Rectangle
15
-
16
15
  import numpy as np
16
+ import fnmatch
17
17
 
18
18
  #===== Loading Devanagari font ========
19
19
  def _load_devanagari_font():
@@ -325,7 +325,7 @@ class Fig:
325
325
  else:
326
326
  curr_row[0].axvline(x=event, color=c, linestyle=ls, linewidth=lw)
327
327
 
328
- def add_annotation(self, ann, label=None, ax=None):
328
+ def add_annotation(self, ann, label=None, patterns=None, ax=None):
329
329
  """
330
330
  Add annotation to the figure.
331
331
 
@@ -338,6 +338,10 @@ class Fig:
338
338
  - Label for the annotation type.
339
339
  - This will appear to the right of the aux plot.
340
340
  - Default: None
341
+ patterns: list[str]
342
+ - Patterns to group annotations
343
+ - E.g., "*R" or "<tag>*" or ["A*", "*B"]
344
+ - All elements in a group will have same color.
341
345
  ax: int
342
346
  - Which specific axis to plot (1, 2, 3, ...)
343
347
  - None
@@ -349,7 +353,24 @@ class Fig:
349
353
 
350
354
  xlim = self._xlim
351
355
 
352
- for i, (start, end, tag) in enumerate(ann):
356
+ if isinstance(patterns, str): patterns = [patterns]
357
+
358
+ if patterns is not None:
359
+ for i, (start, end, tag) in enumerate(ann):
360
+ for j, pattern in enumerate(patterns):
361
+ if fnmatch.fnmatch(tag, pattern):
362
+ ann[i] = (start, end, tag, j)
363
+ break
364
+ else:
365
+ ann[i] = (start, end, tag, None)
366
+ else:
367
+ for i, (start, end, tag) in enumerate(ann):
368
+ ann[i] = (start, end, tag, None)
369
+
370
+ colors = plt.rcParams['axes.prop_cycle'].by_key()['color']
371
+ print(ann)
372
+
373
+ for i, (start, end, tag, group) in enumerate(ann):
353
374
  # We make sure that we only plot annotation that are within the x range of the current view
354
375
  if xlim is not None:
355
376
  if start >= xlim[1] or end <= xlim[0]:
@@ -359,8 +380,10 @@ class Fig:
359
380
  start = max(start, xlim[0])
360
381
  end = min(end, xlim[1])
361
382
 
362
- box_colors = ["gray", "lightgray"] # Alternates color between two
363
- box_color = box_colors[i % 2]
383
+ if group is not None:
384
+ box_color = colors[group]
385
+ else:
386
+ box_color = "lightgray"
364
387
 
365
388
  width = end - start
366
389
  rect = Rectangle((start, 0), width, 1, facecolor=box_color, edgecolor="black", alpha=0.7)
@@ -374,8 +397,10 @@ class Fig:
374
397
 
375
398
  text_obj.set_clip_path(rect)
376
399
  else:
377
- box_colors = ["gray", "lightgray"] # Alternates color between two
378
- box_color = box_colors[i % 2]
400
+ if group is not None:
401
+ box_color = colors[group]
402
+ else:
403
+ box_color = "lightgray"
379
404
 
380
405
  width = end - start
381
406
  rect = Rectangle((start, 0), width, 1, facecolor=box_color, edgecolor="black", alpha=0.7)
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: modusa
3
- Version: 0.3.57
3
+ Version: 0.3.58
4
4
  Summary: A modular signal analysis python library.
5
5
  Author-Email: Ankit Anand <ankit0.anand0@gmail.com>
6
6
  License: MIT
@@ -1,7 +1,7 @@
1
- modusa-0.3.57.dist-info/METADATA,sha256=rsWyfNMBFUBxIMGnO2XKvE_ci2JMcM0RTMb8ieg7YsQ,1436
2
- modusa-0.3.57.dist-info/WHEEL,sha256=9P2ygRxDrTJz3gsagc0Z96ukrxjr-LFBGOgv3AuKlCA,90
3
- modusa-0.3.57.dist-info/entry_points.txt,sha256=fmKpleVXj6CdaBVL14WoEy6xx7JQCs85jvzwTi3lePM,73
4
- modusa-0.3.57.dist-info/licenses/LICENSE.md,sha256=JTaXAjx5awk76VArKCx5dUW8vmLEWsL_ZlR7-umaHbA,1078
1
+ modusa-0.3.58.dist-info/METADATA,sha256=aMaG5ln4Uq8f-llp978sCAUA7sU9ZlgB5DTrR7YzyEk,1436
2
+ modusa-0.3.58.dist-info/WHEEL,sha256=9P2ygRxDrTJz3gsagc0Z96ukrxjr-LFBGOgv3AuKlCA,90
3
+ modusa-0.3.58.dist-info/entry_points.txt,sha256=fmKpleVXj6CdaBVL14WoEy6xx7JQCs85jvzwTi3lePM,73
4
+ modusa-0.3.58.dist-info/licenses/LICENSE.md,sha256=JTaXAjx5awk76VArKCx5dUW8vmLEWsL_ZlR7-umaHbA,1078
5
5
  modusa/.DS_Store,sha256=_gm6qJREwfMi8dE7n5S89_RG46u5t3xHyD-smNhtNoM,6148
6
6
  modusa/__init__.py,sha256=RMIKAZZ27w1oh2UFMJvZQtQ-SluIQsac_3mSK_LaM30,277
7
7
  modusa/config.py,sha256=bTqK4t00FZqERVITrxW_q284aDDJAa9aMSfFknfR-oU,280
@@ -50,7 +50,7 @@ modusa/tools/audio_player.py,sha256=GP04TWW4jBwQBjANkfR_cJtEy7cIhvbu8RTwnf9hD6E,
50
50
  modusa/tools/audio_recorder.py,sha256=d2fVt0Sd2tlBdb2WlUs60K4N23zuxM3KUpQqX0ifPi8,2769
51
51
  modusa/tools/base.py,sha256=C0ESJ0mIfjjRlAkRbSetNtMoOfS6IrHBjexRp3l_Mh4,1293
52
52
  modusa/tools/math_ops.py,sha256=ZZ7U4DgqT7cOeE7_Lzi_Qq-48WYfwR9_osbZwTmE9eg,8690
53
- modusa/tools/plotter.py,sha256=sZGvc0xyr4M1MJ-gBpUcDtJE3WpNkU709x_LnWbAd0o,17216
53
+ modusa/tools/plotter.py,sha256=gxAqWAoXTsXXoA8uRV5KtjZbbCxeMTxLztMuoywAJxc,17874
54
54
  modusa/tools/youtube_downloader.py,sha256=hB_X8-7nOHXOlxg6vv3wyhBLoAsWyomrULP6_uCQL7s,1698
55
55
  modusa/utils/.DS_Store,sha256=nLXMwF7QJNuglLI_Gk74F7vl5Dyus2Wd74Mgowijmdo,6148
56
56
  modusa/utils/__init__.py,sha256=1oLL20yLB1GL9IbFiZD8OReDqiCpFr-yetIR6x1cNkI,23
@@ -59,4 +59,4 @@ modusa/utils/excp.py,sha256=L9vhaGjKpv9viJYdmC9n5ndmk2GVbUBuFyZyhAQZmWY,906
59
59
  modusa/utils/logger.py,sha256=K0rsnObeNKCxlNeSnVnJeRhgfmob6riB2uyU7h3dDmA,571
60
60
  modusa/utils/np_func_cat.py,sha256=TyIFgRc6bARRMDnZxlVURO5Z0I-GWhxRONYyIv-Vwxs,1007
61
61
  modusa/utils/plot.py,sha256=s_vNdxvKfwxEngvJPgrF1PcmxZNnNaaXPViHWjyjJ-c,5335
62
- modusa-0.3.57.dist-info/RECORD,,
62
+ modusa-0.3.58.dist-info/RECORD,,