modusa 0.3.57__py3-none-any.whl → 0.3.59__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,23 @@ 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
+
372
+ for i, (start, end, tag, group) in enumerate(ann):
353
373
  # We make sure that we only plot annotation that are within the x range of the current view
354
374
  if xlim is not None:
355
375
  if start >= xlim[1] or end <= xlim[0]:
@@ -359,8 +379,10 @@ class Fig:
359
379
  start = max(start, xlim[0])
360
380
  end = min(end, xlim[1])
361
381
 
362
- box_colors = ["gray", "lightgray"] # Alternates color between two
363
- box_color = box_colors[i % 2]
382
+ if group is not None:
383
+ box_color = colors[group]
384
+ else:
385
+ box_color = "lightgray"
364
386
 
365
387
  width = end - start
366
388
  rect = Rectangle((start, 0), width, 1, facecolor=box_color, edgecolor="black", alpha=0.7)
@@ -374,8 +396,10 @@ class Fig:
374
396
 
375
397
  text_obj.set_clip_path(rect)
376
398
  else:
377
- box_colors = ["gray", "lightgray"] # Alternates color between two
378
- box_color = box_colors[i % 2]
399
+ if group is not None:
400
+ box_color = colors[group]
401
+ else:
402
+ box_color = "lightgray"
379
403
 
380
404
  width = end - start
381
405
  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.59
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.59.dist-info/METADATA,sha256=Q7jRh_V5LnpAi_1rCmj1JUeYLndWFZO_OZsLtRHO4hk,1436
2
+ modusa-0.3.59.dist-info/WHEEL,sha256=9P2ygRxDrTJz3gsagc0Z96ukrxjr-LFBGOgv3AuKlCA,90
3
+ modusa-0.3.59.dist-info/entry_points.txt,sha256=fmKpleVXj6CdaBVL14WoEy6xx7JQCs85jvzwTi3lePM,73
4
+ modusa-0.3.59.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=blJTBPdpxegC9DKsw7bs8SX2DDAF8mF2uPUZdSrerVs,17861
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.59.dist-info/RECORD,,