sgwt 0.3.3__tar.gz → 0.3.6__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 (110) hide show
  1. {sgwt-0.3.3/sgwt.egg-info → sgwt-0.3.6}/PKG-INFO +45 -50
  2. {sgwt-0.3.3 → sgwt-0.3.6}/README.rst +41 -50
  3. {sgwt-0.3.3 → sgwt-0.3.6}/docs/conf.py +9 -2
  4. sgwt-0.3.6/examples/demo_benchmark.py +424 -0
  5. {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_cheby_coeffs.py +5 -18
  6. {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_dynamic_topology.py +5 -22
  7. sgwt-0.3.6/examples/demo_filters_1.py +25 -0
  8. {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_filters_2.py +5 -16
  9. {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_filters_3.py +2 -12
  10. sgwt-0.3.6/examples/demo_filters_4.py +23 -0
  11. sgwt-0.3.6/examples/demo_filters_5.py +24 -0
  12. sgwt-0.3.6/examples/demo_filters_6.py +35 -0
  13. sgwt-0.3.6/examples/demo_filters_7.py +23 -0
  14. sgwt-0.3.6/examples/demo_filters_8.py +23 -0
  15. sgwt-0.3.6/examples/demo_inpainting.py +65 -0
  16. sgwt-0.3.6/examples/demo_mesh_brain.py +40 -0
  17. sgwt-0.3.6/examples/demo_mesh_bunny.py +40 -0
  18. sgwt-0.3.6/examples/demo_mesh_engine.py +44 -0
  19. sgwt-0.3.6/examples/demo_mesh_horse.py +42 -0
  20. sgwt-0.3.6/examples/demo_mesh_plot.py +306 -0
  21. sgwt-0.3.6/examples/demo_plot.py +180 -0
  22. sgwt-0.3.6/examples/demo_sgma_1.py +63 -0
  23. sgwt-0.3.6/examples/demo_sgma_1b.py +69 -0
  24. sgwt-0.3.6/examples/demo_sgma_2.py +47 -0
  25. sgwt-0.3.6/examples/demo_sgma_3.py +46 -0
  26. {sgwt-0.3.3 → sgwt-0.3.6}/pyproject.toml +25 -5
  27. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/__init__.py +16 -13
  28. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/chebyconv.py +50 -14
  29. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/cholconv.py +222 -84
  30. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/cholesky/wrapper.py +20 -20
  31. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/functions/__init__.py +2 -1
  32. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/functions/analytical.py +30 -11
  33. sgwt-0.3.6/sgwt/functions/cwt.py +62 -0
  34. sgwt-0.3.6/sgwt/library/DELAY/NEISO.mat +0 -0
  35. sgwt-0.3.6/sgwt/library/LENGTH/NEISO.mat +0 -0
  36. sgwt-0.3.6/sgwt/library/MESH/BUNNY.ply +105410 -0
  37. sgwt-0.3.6/sgwt/library/MESH/HORSE.ply +0 -0
  38. sgwt-0.3.6/sgwt/library/MESH/LBRAIN.ply +433475 -0
  39. sgwt-0.3.6/sgwt/library/MESH/RBRAIN.ply +435218 -0
  40. sgwt-0.3.6/sgwt/sgma.py +427 -0
  41. sgwt-0.3.6/sgwt/tests/__init__.py +6 -0
  42. sgwt-0.3.6/sgwt/tests/conftest.py +171 -0
  43. sgwt-0.3.6/sgwt/tests/test_chebyshev.py +137 -0
  44. sgwt-0.3.6/sgwt/tests/test_cholconv.py +341 -0
  45. sgwt-0.3.6/sgwt/tests/test_functions.py +105 -0
  46. sgwt-0.3.6/sgwt/tests/test_performance.py +266 -0
  47. sgwt-0.3.6/sgwt/tests/test_sgma.py +507 -0
  48. sgwt-0.3.6/sgwt/tests/test_util.py +594 -0
  49. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/util.py +280 -64
  50. {sgwt-0.3.3 → sgwt-0.3.6/sgwt.egg-info}/PKG-INFO +45 -50
  51. sgwt-0.3.6/sgwt.egg-info/SOURCES.txt +99 -0
  52. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt.egg-info/requires.txt +5 -0
  53. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt.egg-info/top_level.txt +0 -1
  54. sgwt-0.3.3/examples/demo_filters_1.py +0 -34
  55. sgwt-0.3.3/examples/demo_inpainting.py +0 -94
  56. sgwt-0.3.3/examples/demo_plot.py +0 -49
  57. sgwt-0.3.3/sgwt/library/__init__.py +0 -28
  58. sgwt-0.3.3/sgwt.egg-info/SOURCES.txt +0 -73
  59. sgwt-0.3.3/tests/run_tests.py +0 -91
  60. sgwt-0.3.3/tests/test_chebyshev.py +0 -82
  61. sgwt-0.3.3/tests/test_cholesky.py +0 -214
  62. sgwt-0.3.3/tests/test_util.py +0 -102
  63. {sgwt-0.3.3 → sgwt-0.3.6}/LICENSE +0 -0
  64. {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_cheby_convolve_1.py +0 -0
  65. {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_cheby_convolve_2.py +0 -0
  66. {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_cheby_time.py +0 -0
  67. {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_dynamic_stream.py +0 -0
  68. {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_dynamic_time.py +0 -0
  69. {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_recon.py +0 -0
  70. {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_single_file.py +0 -0
  71. {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_vf.py +0 -0
  72. {sgwt-0.3.3 → sgwt-0.3.6}/setup.cfg +0 -0
  73. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/cholesky/__init__.py +0 -0
  74. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/cholesky/structs.py +0 -0
  75. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/klu/__init__.py +0 -0
  76. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/klu/structs.py +0 -0
  77. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/klu/wrapper.py +0 -0
  78. /sgwt-0.3.3/sgwt/library/DELAY/EASTWEST_DELAY.mat → /sgwt-0.3.6/sgwt/library/DELAY/EASTWEST.mat +0 -0
  79. /sgwt-0.3.3/sgwt/library/DELAY/HAWAII_DELAY.mat → /sgwt-0.3.6/sgwt/library/DELAY/HAWAII.mat +0 -0
  80. /sgwt-0.3.3/sgwt/library/DELAY/TEXAS_DELAY.mat → /sgwt-0.3.6/sgwt/library/DELAY/TEXAS.mat +0 -0
  81. /sgwt-0.3.3/sgwt/library/DELAY/USA_DELAY.mat → /sgwt-0.3.6/sgwt/library/DELAY/USA.mat +0 -0
  82. /sgwt-0.3.3/sgwt/library/DELAY/WECC_DELAY.mat → /sgwt-0.3.6/sgwt/library/DELAY/WECC.mat +0 -0
  83. /sgwt-0.3.3/sgwt/library/IMPEDANCE/EASTWEST_IMPEDANCE.mat → /sgwt-0.3.6/sgwt/library/IMPEDANCE/EASTWEST.mat +0 -0
  84. /sgwt-0.3.3/sgwt/library/IMPEDANCE/HAWAII_IMPEDANCE.mat → /sgwt-0.3.6/sgwt/library/IMPEDANCE/HAWAII.mat +0 -0
  85. /sgwt-0.3.3/sgwt/library/IMPEDANCE/TEXAS_IMPEDANCE.mat → /sgwt-0.3.6/sgwt/library/IMPEDANCE/TEXAS.mat +0 -0
  86. /sgwt-0.3.3/sgwt/library/IMPEDANCE/USA_IMPEDANCE.mat → /sgwt-0.3.6/sgwt/library/IMPEDANCE/USA.mat +0 -0
  87. /sgwt-0.3.3/sgwt/library/IMPEDANCE/WECC_IMPEDANCE.mat → /sgwt-0.3.6/sgwt/library/IMPEDANCE/WECC.mat +0 -0
  88. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/KERNELS/GAUSSIAN_WAV.json +0 -0
  89. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/KERNELS/MEXICAN_HAT.json +0 -0
  90. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/KERNELS/MODIFIED_MORLET.json +0 -0
  91. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/KERNELS/SHANNON.json +0 -0
  92. /sgwt-0.3.3/sgwt/library/LENGTH/EASTWEST_LENGTH.mat → /sgwt-0.3.6/sgwt/library/LENGTH/EASTWEST.mat +0 -0
  93. /sgwt-0.3.3/sgwt/library/LENGTH/HAWAII_LENGTH.mat → /sgwt-0.3.6/sgwt/library/LENGTH/HAWAII.mat +0 -0
  94. /sgwt-0.3.3/sgwt/library/LENGTH/TEXAS_LENGTH.mat → /sgwt-0.3.6/sgwt/library/LENGTH/TEXAS.mat +0 -0
  95. /sgwt-0.3.3/sgwt/library/LENGTH/USA_LENGTH.mat → /sgwt-0.3.6/sgwt/library/LENGTH/USA.mat +0 -0
  96. /sgwt-0.3.3/sgwt/library/LENGTH/WECC_LENGTH.mat → /sgwt-0.3.6/sgwt/library/LENGTH/WECC.mat +0 -0
  97. /sgwt-0.3.3/sgwt/library/SIGNALS/EASTWEST_COORDS.mat → /sgwt-0.3.6/sgwt/library/SIGNALS/EASTWEST.mat +0 -0
  98. /sgwt-0.3.3/sgwt/library/SIGNALS/HAWAII_COORDS.mat → /sgwt-0.3.6/sgwt/library/SIGNALS/HAWAII.mat +0 -0
  99. /sgwt-0.3.3/sgwt/library/SIGNALS/TEXAS_COORDS.mat → /sgwt-0.3.6/sgwt/library/SIGNALS/TEXAS.mat +0 -0
  100. /sgwt-0.3.3/sgwt/library/SIGNALS/USA_COORDS.mat → /sgwt-0.3.6/sgwt/library/SIGNALS/USA.mat +0 -0
  101. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/amd.dll +0 -0
  102. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/btf.dll +0 -0
  103. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/camd.dll +0 -0
  104. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/ccolamd.dll +0 -0
  105. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/cholmod.dll +0 -0
  106. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/colamd.dll +0 -0
  107. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/klu.dll +0 -0
  108. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/klu_cholmod.dll +0 -0
  109. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/suitesparseconfig.dll +0 -0
  110. {sgwt-0.3.3 → sgwt-0.3.6}/sgwt.egg-info/dependency_links.txt +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: sgwt
3
- Version: 0.3.3
3
+ Version: 0.3.6
4
4
  Summary: Sparse Tools for the Spectral Graph Wavelet Transformation and Graph Convolution
5
5
  Author-email: Luke Lowery <lukel@tamu.edu>
6
6
  Project-URL: Homepage, https://github.com/lukelowry/sgwt
@@ -18,6 +18,10 @@ Requires-Dist: scipy
18
18
  Requires-Dist: importlib-resources>=5.0; python_version < "3.9"
19
19
  Provides-Extra: dev
20
20
  Requires-Dist: matplotlib; extra == "dev"
21
+ Provides-Extra: test
22
+ Requires-Dist: pytest; extra == "test"
23
+ Requires-Dist: pytest-cov; extra == "test"
24
+ Requires-Dist: pytest-benchmark; extra == "test"
21
25
  Provides-Extra: docs
22
26
  Requires-Dist: sphinx; extra == "docs"
23
27
  Requires-Dist: numpydoc; extra == "docs"
@@ -28,86 +32,82 @@ Requires-Dist: sphinx-rtd-theme; extra == "docs"
28
32
  Requires-Dist: sphinx-copybutton; extra == "docs"
29
33
  Dynamic: license-file
30
34
 
31
- Sparse SGWT
35
+ Sparse Graph Convolution
32
36
  ====================================
33
37
 
34
- .. image:: https://img.shields.io/pypi/v/sgwt.svg
35
- :target: https://pypi.org/project/sgwt/
36
- :alt: PyPI Version
38
+ .. |pypi| image:: https://img.shields.io/pypi/v/sgwt.svg
39
+ :target: https://pypi.org/project/sgwt/
40
+ :alt: PyPI Version
37
41
 
38
- .. image:: https://img.shields.io/pypi/pyversions/sgwt.svg
39
- :target: https://pypi.org/project/sgwt/
40
- :alt: Python Version
42
+ .. |python| image:: https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9%20%7C%203.10%20%7C%203.11-blue.svg
43
+ :target: https://pypi.org/project/sgwt/
44
+ :alt: Python Version
41
45
 
42
- .. image:: https://img.shields.io/badge/License-GPLv3-blue.svg
43
- :target: ./LICENSE.md
44
- :alt: License
46
+ .. |license| image:: https://img.shields.io/badge/License-GPLv3-blue.svg
47
+ :target: ./LICENSE.md
48
+ :alt: License
49
+
50
+ .. |coverage| image:: https://img.shields.io/badge/coverage-100%25-brightgreen.svg
51
+ :alt: Coverage
52
+
53
+ |pypi| |python| |license| |coverage|
45
54
 
46
55
  A high-performance Python library for sparse Graph Signal Processing (GSP) and Spectral Graph Wavelet Transforms (SGWT). This package leverages the ``CHOLMOD`` library for efficient sparse direct solvers, providing significant speedups over traditional dense or iterative methods for large-scale graph convolution.
47
56
 
48
- Key Features
49
- ------------
57
+ Some of the key features include:
58
+
50
59
 
51
60
  - **High-Performance Sparse Solvers**: Direct integration with the ``CHOLMOD`` library for optimized sparse Cholesky factorizations and linear system solves.
52
- - **Generalized Graph Convolution**: Support for arbitrary spectral kernels via polynomial approximation (Chebyshev) and standard analytical filters (low-pass, band-pass, high-pass).
61
+ - **Generalized Graph Convolution**: Support for arbitrary spectral kernels via rational approximation (Kernel Fitting), polynomial approximation (Chebyshev), and standard analytical filters (low-pass, band-pass, high-pass).
53
62
  - **Dynamic Topology Support**: Specialized routines for graphs with evolving structures, utilizing efficient rank-1 updates for real-time topology changes.
54
63
  - **Resource-Aware Execution**: Context-managed memory allocation and workspace reuse to minimize overhead in high-throughput applications.
55
64
  - **Integrated Graph Repository**: Built-in access to standardized graph Laplacians and signals from power systems and infrastructure networks.
56
65
 
66
+ For detailed usage, API reference, and theoretical background, please visit the `documentation website <https://sgwt.readthedocs.io/>`_.
67
+
57
68
  Installation
58
69
  ------------
59
70
 
60
- You can install ``sgwt`` from the `Python Package Index (PyPI) <https://pypi.org/project/sgwt/>`_:
71
+ The ``sgwt`` package requires Python 3.7+ and is currently only compatible with **Windows** operating systems due to its reliance on a pre-compiled ``CHOLMOD`` library.
72
+
73
+ Install the latest stable release from `PyPI <https://pypi.org/project/sgwt/>`_:
61
74
 
62
75
  .. code-block:: bash
63
76
 
64
77
  pip install sgwt
65
78
 
66
- Usage Example
79
+ This command will also install the necessary dependencies (e.g., NumPy, SciPy).
80
+
81
+ Basic Example
67
82
  -------------
68
83
 
69
- Here is a quick example of applying a band-pass filter to an impulse signal on the built-in Texas grid Laplacian.
84
+ Here is a quick example using a band-pass filter to an impulse signal on the synthetic Texas grid to get the wavelet function at three different scales.
85
+
70
86
 
71
87
  .. code-block:: python
72
88
 
73
89
  import sgwt
74
90
 
75
- # 1. Load a built-in graph Laplacian, which defines the graph's topology.
91
+ # Graph Laplacian
76
92
  L = sgwt.DELAY_TEXAS
77
93
 
78
- # 2. Create a vertex-domain signal. Here, a Dirac impulse on the 600th vertex.
79
- # The `impulse` helper function ensures the required column-major memory order.
80
- signal = sgwt.impulse(L, n=600)
94
+ # Impulse at 600th Vertex
95
+ X = sgwt.impulse(L, n=600)
81
96
 
82
- # 3. Use the static convolution context manager. This performs a one-time
83
- # symbolic factorization of the Laplacian for efficient repeated solves.
84
97
  with sgwt.Convolve(L) as conv:
85
- # 4. Apply an analytical band-pass filter. The scale parameter controls
86
- # the filter's center frequency.
87
- filtered_signals = conv.bandpass(signal, scales=[10.0])
88
-
89
- # 5. The result is a list of filtered signals, one for each input scale.
90
- result = filtered_signals[0]
98
+
99
+ # Wavelet at 3 scales
100
+ Y = conv.bandpass(X, scales=[0.1, 1, 10])
91
101
 
92
- print(f"Graph has {L.shape[0]} vertices.")
93
- print(f"Signal on vertex 600, shape: {signal.shape}")
94
- print(f"Filtered signal shape: {result.shape}")
95
-
96
- Examples
97
- --------
98
102
 
99
103
  The `examples/ <https://github.com/lukelowry/sgwt/tree/main/examples>`_ directory contains a comprehensive suite of demonstrations, also rendered in the `Examples <https://sgwt.readthedocs.io/en/stable/examples/static.html>`_ section of the documentation. Key applications include:
100
104
 
101
105
  - **Static Filtering**: Basic low-pass, band-pass, and high-pass filtering on various graph sizes.
102
106
  - **Dynamic Graphs**: Real-time topology updates, performance comparisons, and online stream processing.
103
107
 
104
- Documentation
105
- -------------
106
108
 
107
- For detailed usage, API reference, and theoretical background, please visit the `documentation website <https://sgwt.readthedocs.io/en/stable/>`_.
108
-
109
- Citation
110
- --------
109
+ Citation & Acknowledgements
110
+ ---------------------------
111
111
 
112
112
  If you use this library in your research, please cite it. The `GitHub repository <https://github.com/lukelowry/sgwt>`_ includes a ``CITATION.cff`` file that provides citation metadata. On GitHub, you can use the "Cite this repository" button on the sidebar to get the citation in your preferred format (including BibTeX).
113
113
 
@@ -115,20 +115,15 @@ For convenience, the BibTeX entry for the associated paper is:
115
115
 
116
116
  .. code-block:: bibtex
117
117
 
118
- @inproceedings{lowery-sgwt-YYYY,
118
+ @inproceedings{lowery-sgwt-2026,
119
119
  title={Using Spectral Graph Wavelets to Analyze Large Power System Oscillation Modes},
120
120
  author={Lowery, Luke and Baek, Jongoh and Birchfield, Adam},
121
- year={YYYY}
121
+ year={2026}
122
122
  }
123
123
 
124
- Author
125
-
126
- This module was developed by Luke Lowery during his PhD studies at Texas A&M University. You can learn more on his `research page <https://lukelowry.github.io/>`_ or view his publications on `Google Scholar <https://scholar.google.com/citations?user=CTynuRMAAAAJ&hl=en>`_.
127
-
128
- An alternative implementation in `Julia <https://github.com/lukelowry/SpectralGraphWavelet.jl>`_ is also available, which takes advantage of native SuiteSparse support.
124
+ Luke Lowery developed this module during his PhD studies at Texas A&M University. You can learn more on his `research page <https://lukelowry.github.io/>`_ or view his publications on `Google Scholar <https://scholar.google.com/citations?user=CTynuRMAAAAJ&hl=en>`_.
129
125
 
130
- Acknowledgements
131
- ----------------
126
+ An alternative implementation in `Julia <https://github.com/lukelowry/SpectralGraphWavelet.jl>`_ is also available and leverages native SuiteSparse support.
132
127
 
133
128
  - The core performance of this library relies on the ``CHOLMOD`` library from `SuiteSparse <https://github.com/DrTimothyAldenDavis/SuiteSparse>`_, developed by Dr. Tim Davis at Texas A&M University.
134
129
  - The graph laplacians used in the examples are derived from the `synthetic grid repository <https://electricgrids.engr.tamu.edu/electric-grid-test-cases/>`_, made available by Dr. Adam Birchfield at Texas A&M University.
@@ -1,83 +1,79 @@
1
- Sparse SGWT
1
+ Sparse Graph Convolution
2
2
  ====================================
3
3
 
4
- .. image:: https://img.shields.io/pypi/v/sgwt.svg
5
- :target: https://pypi.org/project/sgwt/
6
- :alt: PyPI Version
4
+ .. |pypi| image:: https://img.shields.io/pypi/v/sgwt.svg
5
+ :target: https://pypi.org/project/sgwt/
6
+ :alt: PyPI Version
7
7
 
8
- .. image:: https://img.shields.io/pypi/pyversions/sgwt.svg
9
- :target: https://pypi.org/project/sgwt/
10
- :alt: Python Version
8
+ .. |python| image:: https://img.shields.io/badge/python-3.7%20%7C%203.8%20%7C%203.9%20%7C%203.10%20%7C%203.11-blue.svg
9
+ :target: https://pypi.org/project/sgwt/
10
+ :alt: Python Version
11
11
 
12
- .. image:: https://img.shields.io/badge/License-GPLv3-blue.svg
13
- :target: ./LICENSE.md
14
- :alt: License
12
+ .. |license| image:: https://img.shields.io/badge/License-GPLv3-blue.svg
13
+ :target: ./LICENSE.md
14
+ :alt: License
15
+
16
+ .. |coverage| image:: https://img.shields.io/badge/coverage-100%25-brightgreen.svg
17
+ :alt: Coverage
18
+
19
+ |pypi| |python| |license| |coverage|
15
20
 
16
21
  A high-performance Python library for sparse Graph Signal Processing (GSP) and Spectral Graph Wavelet Transforms (SGWT). This package leverages the ``CHOLMOD`` library for efficient sparse direct solvers, providing significant speedups over traditional dense or iterative methods for large-scale graph convolution.
17
22
 
18
- Key Features
19
- ------------
23
+ Some of the key features include:
24
+
20
25
 
21
26
  - **High-Performance Sparse Solvers**: Direct integration with the ``CHOLMOD`` library for optimized sparse Cholesky factorizations and linear system solves.
22
- - **Generalized Graph Convolution**: Support for arbitrary spectral kernels via polynomial approximation (Chebyshev) and standard analytical filters (low-pass, band-pass, high-pass).
27
+ - **Generalized Graph Convolution**: Support for arbitrary spectral kernels via rational approximation (Kernel Fitting), polynomial approximation (Chebyshev), and standard analytical filters (low-pass, band-pass, high-pass).
23
28
  - **Dynamic Topology Support**: Specialized routines for graphs with evolving structures, utilizing efficient rank-1 updates for real-time topology changes.
24
29
  - **Resource-Aware Execution**: Context-managed memory allocation and workspace reuse to minimize overhead in high-throughput applications.
25
30
  - **Integrated Graph Repository**: Built-in access to standardized graph Laplacians and signals from power systems and infrastructure networks.
26
31
 
32
+ For detailed usage, API reference, and theoretical background, please visit the `documentation website <https://sgwt.readthedocs.io/>`_.
33
+
27
34
  Installation
28
35
  ------------
29
36
 
30
- You can install ``sgwt`` from the `Python Package Index (PyPI) <https://pypi.org/project/sgwt/>`_:
37
+ The ``sgwt`` package requires Python 3.7+ and is currently only compatible with **Windows** operating systems due to its reliance on a pre-compiled ``CHOLMOD`` library.
38
+
39
+ Install the latest stable release from `PyPI <https://pypi.org/project/sgwt/>`_:
31
40
 
32
41
  .. code-block:: bash
33
42
 
34
43
  pip install sgwt
35
44
 
36
- Usage Example
45
+ This command will also install the necessary dependencies (e.g., NumPy, SciPy).
46
+
47
+ Basic Example
37
48
  -------------
38
49
 
39
- Here is a quick example of applying a band-pass filter to an impulse signal on the built-in Texas grid Laplacian.
50
+ Here is a quick example using a band-pass filter to an impulse signal on the synthetic Texas grid to get the wavelet function at three different scales.
51
+
40
52
 
41
53
  .. code-block:: python
42
54
 
43
55
  import sgwt
44
56
 
45
- # 1. Load a built-in graph Laplacian, which defines the graph's topology.
57
+ # Graph Laplacian
46
58
  L = sgwt.DELAY_TEXAS
47
59
 
48
- # 2. Create a vertex-domain signal. Here, a Dirac impulse on the 600th vertex.
49
- # The `impulse` helper function ensures the required column-major memory order.
50
- signal = sgwt.impulse(L, n=600)
60
+ # Impulse at 600th Vertex
61
+ X = sgwt.impulse(L, n=600)
51
62
 
52
- # 3. Use the static convolution context manager. This performs a one-time
53
- # symbolic factorization of the Laplacian for efficient repeated solves.
54
63
  with sgwt.Convolve(L) as conv:
55
- # 4. Apply an analytical band-pass filter. The scale parameter controls
56
- # the filter's center frequency.
57
- filtered_signals = conv.bandpass(signal, scales=[10.0])
58
-
59
- # 5. The result is a list of filtered signals, one for each input scale.
60
- result = filtered_signals[0]
64
+
65
+ # Wavelet at 3 scales
66
+ Y = conv.bandpass(X, scales=[0.1, 1, 10])
61
67
 
62
- print(f"Graph has {L.shape[0]} vertices.")
63
- print(f"Signal on vertex 600, shape: {signal.shape}")
64
- print(f"Filtered signal shape: {result.shape}")
65
-
66
- Examples
67
- --------
68
68
 
69
69
  The `examples/ <https://github.com/lukelowry/sgwt/tree/main/examples>`_ directory contains a comprehensive suite of demonstrations, also rendered in the `Examples <https://sgwt.readthedocs.io/en/stable/examples/static.html>`_ section of the documentation. Key applications include:
70
70
 
71
71
  - **Static Filtering**: Basic low-pass, band-pass, and high-pass filtering on various graph sizes.
72
72
  - **Dynamic Graphs**: Real-time topology updates, performance comparisons, and online stream processing.
73
73
 
74
- Documentation
75
- -------------
76
74
 
77
- For detailed usage, API reference, and theoretical background, please visit the `documentation website <https://sgwt.readthedocs.io/en/stable/>`_.
78
-
79
- Citation
80
- --------
75
+ Citation & Acknowledgements
76
+ ---------------------------
81
77
 
82
78
  If you use this library in your research, please cite it. The `GitHub repository <https://github.com/lukelowry/sgwt>`_ includes a ``CITATION.cff`` file that provides citation metadata. On GitHub, you can use the "Cite this repository" button on the sidebar to get the citation in your preferred format (including BibTeX).
83
79
 
@@ -85,20 +81,15 @@ For convenience, the BibTeX entry for the associated paper is:
85
81
 
86
82
  .. code-block:: bibtex
87
83
 
88
- @inproceedings{lowery-sgwt-YYYY,
84
+ @inproceedings{lowery-sgwt-2026,
89
85
  title={Using Spectral Graph Wavelets to Analyze Large Power System Oscillation Modes},
90
86
  author={Lowery, Luke and Baek, Jongoh and Birchfield, Adam},
91
- year={YYYY}
87
+ year={2026}
92
88
  }
93
89
 
94
- Author
95
-
96
- This module was developed by Luke Lowery during his PhD studies at Texas A&M University. You can learn more on his `research page <https://lukelowry.github.io/>`_ or view his publications on `Google Scholar <https://scholar.google.com/citations?user=CTynuRMAAAAJ&hl=en>`_.
97
-
98
- An alternative implementation in `Julia <https://github.com/lukelowry/SpectralGraphWavelet.jl>`_ is also available, which takes advantage of native SuiteSparse support.
90
+ Luke Lowery developed this module during his PhD studies at Texas A&M University. You can learn more on his `research page <https://lukelowry.github.io/>`_ or view his publications on `Google Scholar <https://scholar.google.com/citations?user=CTynuRMAAAAJ&hl=en>`_.
99
91
 
100
- Acknowledgements
101
- ----------------
92
+ An alternative implementation in `Julia <https://github.com/lukelowry/SpectralGraphWavelet.jl>`_ is also available and leverages native SuiteSparse support.
102
93
 
103
94
  - The core performance of this library relies on the ``CHOLMOD`` library from `SuiteSparse <https://github.com/DrTimothyAldenDavis/SuiteSparse>`_, developed by Dr. Tim Davis at Texas A&M University.
104
- - The graph laplacians used in the examples are derived from the `synthetic grid repository <https://electricgrids.engr.tamu.edu/electric-grid-test-cases/>`_, made available by Dr. Adam Birchfield at Texas A&M University.
95
+ - The graph laplacians used in the examples are derived from the `synthetic grid repository <https://electricgrids.engr.tamu.edu/electric-grid-test-cases/>`_, made available by Dr. Adam Birchfield at Texas A&M University.
@@ -63,7 +63,7 @@ source_suffix = ".rst"
63
63
  master_doc = "index"
64
64
 
65
65
  project = "Sparse SGWT"
66
- copyright = "2024, Luke Lowery"
66
+ copyright = "2025, Luke Lowery"
67
67
  author = "Luke Lowery"
68
68
  version = importlib_metadata.version("sgwt")
69
69
  release = version
@@ -73,4 +73,11 @@ html_theme_options = {
73
73
  "navigation_depth": 2,
74
74
  }
75
75
 
76
- autodoc_mock_imports = ["ctypes"]
76
+ autodoc_mock_imports = ["ctypes"]
77
+
78
+ # -- Options for LaTeX output ---------------------------------------------
79
+
80
+ latex_documents = [
81
+ ('index_for_pdf', 'sgwt-docs.tex', 'Sparse Graph Convolution',
82
+ 'Luke Lowery', 'manual'),
83
+ ]