pywavelet 0.2.6__tar.gz → 0.2.8__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 (120) hide show
  1. {pywavelet-0.2.6 → pywavelet-0.2.8}/.gitignore +4 -1
  2. {pywavelet-0.2.6 → pywavelet-0.2.8}/CHANGELOG.rst +130 -0
  3. {pywavelet-0.2.6 → pywavelet-0.2.8}/PKG-INFO +3 -1
  4. {pywavelet-0.2.6 → pywavelet-0.2.8}/docs/_config.yml +1 -1
  5. pywavelet-0.2.8/docs/_toc.yml +21 -0
  6. pywavelet-0.2.8/docs/examples/accuracy.ipynb +381 -0
  7. pywavelet-0.2.8/docs/examples/backends.ipynb +208 -0
  8. pywavelet-0.2.6/docs/example.ipynb → pywavelet-0.2.8/docs/examples/basic.ipynb +39 -15
  9. pywavelet-0.2.8/docs/examples/collect_runtimes.sh +6 -0
  10. pywavelet-0.2.8/docs/examples/example_signals.ipynb +559 -0
  11. pywavelet-0.2.8/docs/examples/example_transforms.png +0 -0
  12. pywavelet-0.2.8/docs/examples/inverse_transform_mwe.py +344 -0
  13. pywavelet-0.2.8/docs/examples/roundtrip_time.png +0 -0
  14. pywavelet-0.2.8/docs/examples/runtime.ipynb +411 -0
  15. pywavelet-0.2.8/docs/examples/runtime.png +0 -0
  16. {pywavelet-0.2.6 → pywavelet-0.2.8}/pyproject.toml +7 -1
  17. pywavelet-0.2.8/src/pywavelet/__init__.py +39 -0
  18. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/_version.py +2 -2
  19. pywavelet-0.2.8/src/pywavelet/backend.py +179 -0
  20. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/logger.py +6 -6
  21. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/__init__.py +4 -0
  22. pywavelet-0.2.8/src/pywavelet/transforms/cupy/forward/from_freq.py +89 -0
  23. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/cupy/forward/main.py +11 -7
  24. pywavelet-0.2.8/src/pywavelet/transforms/cupy/inverse/to_freq.py +66 -0
  25. pywavelet-0.2.8/src/pywavelet/transforms/jax/__init__.py +36 -0
  26. pywavelet-0.2.8/src/pywavelet/transforms/jax/forward/from_freq.py +96 -0
  27. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/jax/forward/main.py +9 -6
  28. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/jax/inverse/to_freq.py +17 -28
  29. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/numpy/forward/from_freq.py +14 -6
  30. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/numpy/forward/main.py +13 -4
  31. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/phi_computer.py +35 -20
  32. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/types/common.py +1 -1
  33. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/types/plotting.py +1 -1
  34. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/types/timeseries.py +1 -0
  35. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/types/wavelet.py +4 -2
  36. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/types/wavelet_bins.py +3 -9
  37. pywavelet-0.2.8/src/pywavelet/utils/__init__.py +6 -0
  38. pywavelet-0.2.6/src/pywavelet/utils.py → pywavelet-0.2.8/src/pywavelet/utils/analysis.py +1 -1
  39. pywavelet-0.2.8/src/pywavelet/utils/timing_cli/__init__.py +0 -0
  40. pywavelet-0.2.8/src/pywavelet/utils/timing_cli/cli.py +95 -0
  41. pywavelet-0.2.8/src/pywavelet/utils/timing_cli/collect_runtimes.py +192 -0
  42. pywavelet-0.2.8/src/pywavelet/utils/timing_cli/plot.py +76 -0
  43. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet.egg-info/PKG-INFO +3 -1
  44. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet.egg-info/SOURCES.txt +24 -7
  45. pywavelet-0.2.8/src/pywavelet.egg-info/entry_points.txt +2 -0
  46. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet.egg-info/requires.txt +2 -0
  47. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/conftest.py +11 -7
  48. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/ollie_example.py +3 -2
  49. pywavelet-0.2.8/tests/test_backend_consistency.py +145 -0
  50. pywavelet-0.2.8/tests/test_backends.py +40 -0
  51. pywavelet-0.2.8/tests/test_docs.py +36 -0
  52. pywavelet-0.2.8/tests/test_forward_transform.py +92 -0
  53. pywavelet-0.2.8/tests/test_inverse_transform.py +159 -0
  54. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/test_phi.py +10 -2
  55. pywavelet-0.2.8/tests/test_precision.py +79 -0
  56. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/test_roundtrip_conversion.py +37 -26
  57. pywavelet-0.2.8/tests/test_runtime_cli.py +30 -0
  58. pywavelet-0.2.8/tests/test_snr.py +244 -0
  59. pywavelet-0.2.8/tests/utils/__init__.py +3 -0
  60. pywavelet-0.2.8/tests/utils/conversions.py +34 -0
  61. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/utils/plotting.py +139 -25
  62. pywavelet-0.2.6/docs/_toc.yml +0 -19
  63. pywavelet-0.2.6/docs/roundtrip_time.png +0 -0
  64. pywavelet-0.2.6/docs/runtime.ipynb +0 -201
  65. pywavelet-0.2.6/src/pywavelet/__init__.py +0 -27
  66. pywavelet-0.2.6/src/pywavelet/backend.py +0 -53
  67. pywavelet-0.2.6/src/pywavelet/transforms/cupy/forward/from_freq.py +0 -92
  68. pywavelet-0.2.6/src/pywavelet/transforms/cupy/inverse/to_freq.py +0 -62
  69. pywavelet-0.2.6/src/pywavelet/transforms/jax/__init__.py +0 -12
  70. pywavelet-0.2.6/src/pywavelet/transforms/jax/forward/from_freq.py +0 -103
  71. pywavelet-0.2.6/tests/test_backends.py +0 -136
  72. pywavelet-0.2.6/tests/test_docs.py +0 -46
  73. pywavelet-0.2.6/tests/test_snr.py +0 -123
  74. pywavelet-0.2.6/tests/utils/__init__.py +0 -4
  75. pywavelet-0.2.6/tests/utils/conversions.py +0 -23
  76. pywavelet-0.2.6/tests/utils/cupy_check.py +0 -14
  77. {pywavelet-0.2.6 → pywavelet-0.2.8}/.github/workflows/ci.yml +0 -0
  78. {pywavelet-0.2.6 → pywavelet-0.2.8}/.github/workflows/docs.yml +0 -0
  79. {pywavelet-0.2.6 → pywavelet-0.2.8}/.github/workflows/pypi.yml +0 -0
  80. {pywavelet-0.2.6 → pywavelet-0.2.8}/.pre-commit-config.yaml +0 -0
  81. {pywavelet-0.2.6 → pywavelet-0.2.8}/CITATION.cff +0 -0
  82. {pywavelet-0.2.6 → pywavelet-0.2.8}/README.rst +0 -0
  83. {pywavelet-0.2.6 → pywavelet-0.2.8}/docs/_static/demo.gif +0 -0
  84. {pywavelet-0.2.6/docs → pywavelet-0.2.8/docs/_static}/logo.png +0 -0
  85. {pywavelet-0.2.6 → pywavelet-0.2.8}/docs/api.rst +0 -0
  86. {pywavelet-0.2.6/docs → pywavelet-0.2.8/docs/examples}/roundtrip_freq.png +0 -0
  87. {pywavelet-0.2.6 → pywavelet-0.2.8}/docs/index.rst +0 -0
  88. {pywavelet-0.2.6 → pywavelet-0.2.8}/setup.cfg +0 -0
  89. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/cupy/__init__.py +0 -0
  90. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/cupy/forward/__init__.py +0 -0
  91. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/cupy/forward/from_time.py +0 -0
  92. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/cupy/inverse/__init__.py +0 -0
  93. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/cupy/inverse/main.py +0 -0
  94. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/jax/forward/__init__.py +0 -0
  95. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/jax/forward/from_time.py +0 -0
  96. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/jax/inverse/__init__.py +0 -0
  97. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/jax/inverse/main.py +0 -0
  98. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/numpy/__init__.py +0 -0
  99. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/numpy/forward/__init__.py +0 -0
  100. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/numpy/forward/from_time.py +0 -0
  101. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/numpy/inverse/__init__.py +0 -0
  102. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/numpy/inverse/main.py +0 -0
  103. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/numpy/inverse/to_freq.py +0 -0
  104. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/transforms/numpy/inverse/to_time.py +0 -0
  105. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/types/__init__.py +0 -0
  106. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet/types/frequencyseries.py +0 -0
  107. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet.egg-info/dependency_links.txt +0 -0
  108. {pywavelet-0.2.6 → pywavelet-0.2.8}/src/pywavelet.egg-info/top_level.txt +0 -0
  109. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/test_data/roundtrip_chirp_freq.npz +0 -0
  110. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/test_data/roundtrip_chirp_time.npz +0 -0
  111. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/test_data/roundtrip_pure_f0_freq.npz +0 -0
  112. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/test_data/roundtrip_sine_freq.npz +0 -0
  113. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/test_data/roundtrip_sine_time.npz +0 -0
  114. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/test_lnl.py +0 -0
  115. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/test_mask.py +0 -0
  116. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/test_psd.py +0 -0
  117. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/test_timefreq_type.py +0 -0
  118. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/test_version.py +0 -0
  119. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/test_wavelet_plot.py +0 -0
  120. {pywavelet-0.2.6 → pywavelet-0.2.8}/tests/utils/generate_data.py +0 -0
@@ -16,7 +16,8 @@ __pycache__/
16
16
  *.so
17
17
  out_*
18
18
  *_version.py
19
-
19
+ *.csv
20
+ *.json
20
21
  *.pdf
21
22
  # Distribution / packaging
22
23
  .Python
@@ -119,3 +120,5 @@ venv.bak/
119
120
 
120
121
  # VSCode
121
122
  .vscode/
123
+ /docs/runtime_data_cpu.csv
124
+ /docs/examples/data.h5
@@ -5,6 +5,127 @@ CHANGELOG
5
5
  =========
6
6
 
7
7
 
8
+ .. _changelog-v0.2.8:
9
+
10
+ v0.2.8 (2025-04-27)
11
+ ===================
12
+
13
+ Bug Fixes
14
+ ---------
15
+
16
+ * fix: add direct forwaard transform tesst (`b7f4499`_)
17
+
18
+ Unknown
19
+ -------
20
+
21
+ * Fixing roundtrip transforms for jax + cupy (#23)
22
+
23
+ * hacking
24
+
25
+ * add inverse test
26
+
27
+ * [pre-commit.ci] auto fixes from pre-commit.com hooks
28
+
29
+ for more information, see https://pre-commit.ci
30
+
31
+ * fix forward
32
+
33
+ * [pre-commit.ci] auto fixes from pre-commit.com hooks
34
+
35
+ for more information, see https://pre-commit.ci
36
+
37
+ * add cupy roundtrip fix
38
+
39
+ * make plotting more obvious
40
+
41
+ * [pre-commit.ci] auto fixes from pre-commit.com hooks
42
+
43
+ for more information, see https://pre-commit.ci
44
+
45
+ ---------
46
+
47
+ Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.github.com> (`248ba73`_)
48
+
49
+ * use relative errr (`eed33ab`_)
50
+
51
+ * add yet another roundtrip test (`6c8d990`_)
52
+
53
+ * add backend consistency simple check (`ba49718`_)
54
+
55
+ * add open-in-colabl (`643eecb`_)
56
+
57
+ * add additional example (`aa3b11b`_)
58
+
59
+ * add collect runtimes (`d9c1f01`_)
60
+
61
+ * add log for pywavelet file (`3767c16`_)
62
+
63
+ * fix backend logger (`6d89404`_)
64
+
65
+ * add more logs (`4af72e7`_)
66
+
67
+ * allow precision argss for freq->WDM (`361694c`_)
68
+
69
+ * allow numpy to use float64/float32 (`a7dbbe2`_)
70
+
71
+ * add in typechecking for phi, add precision-backednd setter (`697e584`_)
72
+
73
+ * simpler runtime collection (`49181d4`_)
74
+
75
+ * add: runtime cli tool to check different backened speeds (`1e1d9f0`_)
76
+
77
+ * add colab button to docs (`4505979`_)
78
+
79
+ * add more examples (`754bc0f`_)
80
+
81
+ * add accuracy check (`46caf25`_)
82
+
83
+ * Merge branch 'main' of github.com:pywavelet/pywavelet (`7d64ccb`_)
84
+
85
+ .. _b7f4499: https://github.com/pywavelet/pywavelet/commit/b7f44992491d5b555ca05a8a870ab82617826b38
86
+ .. _248ba73: https://github.com/pywavelet/pywavelet/commit/248ba73a33662cc6200886dec18f88c5fdef4946
87
+ .. _eed33ab: https://github.com/pywavelet/pywavelet/commit/eed33ab619dc5fdd404c3e6227f3a103dc5cc99e
88
+ .. _6c8d990: https://github.com/pywavelet/pywavelet/commit/6c8d9903ff2caf37fae0b4c6e3febecdcba4cbd1
89
+ .. _ba49718: https://github.com/pywavelet/pywavelet/commit/ba4971882e866953a50246532b2a5fefca096d53
90
+ .. _643eecb: https://github.com/pywavelet/pywavelet/commit/643eecb82c006693a201a3427ba6ef684ed406b4
91
+ .. _aa3b11b: https://github.com/pywavelet/pywavelet/commit/aa3b11b4dacdb0806a088d76b1b8307a218f21c4
92
+ .. _d9c1f01: https://github.com/pywavelet/pywavelet/commit/d9c1f016995075d483151be03dae73fa65b77110
93
+ .. _3767c16: https://github.com/pywavelet/pywavelet/commit/3767c16110dc9d80a154d65aed0b92a188f0062f
94
+ .. _6d89404: https://github.com/pywavelet/pywavelet/commit/6d89404e186123f384d1150928aee0d48f2d7e7f
95
+ .. _4af72e7: https://github.com/pywavelet/pywavelet/commit/4af72e7eb3be0fdfa9c196bdfe6c360769dcb335
96
+ .. _361694c: https://github.com/pywavelet/pywavelet/commit/361694c60e9b0177733383dc57c240f7c21940a1
97
+ .. _a7dbbe2: https://github.com/pywavelet/pywavelet/commit/a7dbbe25f4a14b7148133a3370ac351ff3c2d9f6
98
+ .. _697e584: https://github.com/pywavelet/pywavelet/commit/697e5848e88fd19df9d0582a663860a0572e57c8
99
+ .. _49181d4: https://github.com/pywavelet/pywavelet/commit/49181d444525360a0490a84602c1bcc0bec56988
100
+ .. _1e1d9f0: https://github.com/pywavelet/pywavelet/commit/1e1d9f0a85a23475b7e2b49f84a2ba33fe417e17
101
+ .. _4505979: https://github.com/pywavelet/pywavelet/commit/4505979679601f6213a4f423af26375f16373678
102
+ .. _754bc0f: https://github.com/pywavelet/pywavelet/commit/754bc0fc265ce85002cea828ce02a59574c97fca
103
+ .. _46caf25: https://github.com/pywavelet/pywavelet/commit/46caf25a789eb244641bbb260a7ec5e464203a22
104
+ .. _7d64ccb: https://github.com/pywavelet/pywavelet/commit/7d64ccb092b61210bb93648f5cf43cb20346e474
105
+
106
+
107
+ .. _changelog-v0.2.7:
108
+
109
+ v0.2.7 (2025-03-25)
110
+ ===================
111
+
112
+ Chores
113
+ ------
114
+
115
+ * chore(release): 0.2.7 (`e827211`_)
116
+
117
+ Unknown
118
+ -------
119
+
120
+ * add monochromatic WDM check (`1ffbd29`_)
121
+
122
+ * Merge branch 'main' of github.com:pywavelet/pywavelet (`ef5aa31`_)
123
+
124
+ .. _e827211: https://github.com/pywavelet/pywavelet/commit/e8272117bb9352d21b89ac93198ee800315b4a14
125
+ .. _1ffbd29: https://github.com/pywavelet/pywavelet/commit/1ffbd29b44eaca650d9829237cbf4f8a54b49051
126
+ .. _ef5aa31: https://github.com/pywavelet/pywavelet/commit/ef5aa31e72c8a838cfb008c03bd47b009df728dc
127
+
128
+
8
129
  .. _changelog-v0.2.6:
9
130
 
10
131
  v0.2.6 (2025-03-24)
@@ -13,8 +134,15 @@ v0.2.6 (2025-03-24)
13
134
  Bug Fixes
14
135
  ---------
15
136
 
137
+ * fix: add more checkingn for cupy and jax backends (`75e54c0`_)
138
+
16
139
  * fix: add note in readme about JAX and cupy (`d3cd8d9`_)
17
140
 
141
+ Chores
142
+ ------
143
+
144
+ * chore(release): 0.2.6 (`d2e3cb2`_)
145
+
18
146
  Unknown
19
147
  -------
20
148
 
@@ -120,7 +248,9 @@ Co-authored-by: pre-commit-ci[bot] <66853113+pre-commit-ci[bot]@users.noreply.gi
120
248
 
121
249
  * add additional JAX tests (`c0d8396`_)
122
250
 
251
+ .. _75e54c0: https://github.com/pywavelet/pywavelet/commit/75e54c00dd9ddfff98a7f0612f54abf1ac17184e
123
252
  .. _d3cd8d9: https://github.com/pywavelet/pywavelet/commit/d3cd8d92b5e6cf398ff3a4948b911533abe842f1
253
+ .. _d2e3cb2: https://github.com/pywavelet/pywavelet/commit/d2e3cb271b06d1d9bc3060e924fa5bcd57ceb269
124
254
  .. _6cdfb28: https://github.com/pywavelet/pywavelet/commit/6cdfb28b152a7f7ad499f0b6ba6ef69da9284c57
125
255
  .. _14b250b: https://github.com/pywavelet/pywavelet/commit/14b250b55dbea88c3b7c22b5faca531113d34477
126
256
  .. _3d8b4cd: https://github.com/pywavelet/pywavelet/commit/3d8b4cdc8dea6af33b08985cb97f0897984838fc
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: pywavelet
3
- Version: 0.2.6
3
+ Version: 0.2.8
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/
@@ -23,6 +23,7 @@ Requires-Dist: rocket-fft
23
23
  Requires-Dist: astropy>=5.2.1
24
24
  Requires-Dist: jaxtyping
25
25
  Requires-Dist: beartype
26
+ Requires-Dist: click
26
27
  Provides-Extra: jax
27
28
  Requires-Dist: jax; extra == "jax"
28
29
  Provides-Extra: cupy
@@ -39,6 +40,7 @@ Requires-Dist: mypy; extra == "dev"
39
40
  Requires-Dist: jupyter-book; extra == "dev"
40
41
  Requires-Dist: GitPython; extra == "dev"
41
42
  Requires-Dist: nbconvert; extra == "dev"
43
+ Requires-Dist: pytest-click; extra == "dev"
42
44
 
43
45
  pywavelet
44
46
  #########
@@ -1,7 +1,7 @@
1
1
  # see https://jupyterbook.org/customize/config.html
2
2
  title: Pywavelet
3
3
  author: pywavelet developers
4
- logo: logo.png
4
+ logo: _static/logo.png
5
5
 
6
6
  execute:
7
7
  execute_notebooks: 'off'
@@ -0,0 +1,21 @@
1
+ # Table of contents
2
+ # Learn more at https://jupyterbook.org/customize/toc.html
3
+
4
+ format: jb-book
5
+ root: index.rst
6
+ parts:
7
+ - caption: " "
8
+ chapters:
9
+ - file: api.rst
10
+ - file: examples/basic.ipynb
11
+ - file: examples/runtime.ipynb
12
+ - file: examples/accuracy.ipynb
13
+ - file: examples/example_signals.ipynb
14
+ #- caption: Case Studies
15
+ # chapters:
16
+ # - url: https://www.youtube.com/watch?v=dQw4w9WgXcQ&themeRefresh=1
17
+ # title: LISA white-dwarf
18
+ # - url: https://www.youtube.com/watch?v=dQw4w9WgXcQ&themeRefresh=1
19
+ # title: LVK compact binary
20
+ # - url: https://www.youtube.com/watch?v=dQw4w9WgXcQ&themeRefresh=1
21
+ # title: Analysis with gaps