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.
- {sgwt-0.3.3/sgwt.egg-info → sgwt-0.3.6}/PKG-INFO +45 -50
- {sgwt-0.3.3 → sgwt-0.3.6}/README.rst +41 -50
- {sgwt-0.3.3 → sgwt-0.3.6}/docs/conf.py +9 -2
- sgwt-0.3.6/examples/demo_benchmark.py +424 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_cheby_coeffs.py +5 -18
- {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_dynamic_topology.py +5 -22
- sgwt-0.3.6/examples/demo_filters_1.py +25 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_filters_2.py +5 -16
- {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_filters_3.py +2 -12
- sgwt-0.3.6/examples/demo_filters_4.py +23 -0
- sgwt-0.3.6/examples/demo_filters_5.py +24 -0
- sgwt-0.3.6/examples/demo_filters_6.py +35 -0
- sgwt-0.3.6/examples/demo_filters_7.py +23 -0
- sgwt-0.3.6/examples/demo_filters_8.py +23 -0
- sgwt-0.3.6/examples/demo_inpainting.py +65 -0
- sgwt-0.3.6/examples/demo_mesh_brain.py +40 -0
- sgwt-0.3.6/examples/demo_mesh_bunny.py +40 -0
- sgwt-0.3.6/examples/demo_mesh_engine.py +44 -0
- sgwt-0.3.6/examples/demo_mesh_horse.py +42 -0
- sgwt-0.3.6/examples/demo_mesh_plot.py +306 -0
- sgwt-0.3.6/examples/demo_plot.py +180 -0
- sgwt-0.3.6/examples/demo_sgma_1.py +63 -0
- sgwt-0.3.6/examples/demo_sgma_1b.py +69 -0
- sgwt-0.3.6/examples/demo_sgma_2.py +47 -0
- sgwt-0.3.6/examples/demo_sgma_3.py +46 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/pyproject.toml +25 -5
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/__init__.py +16 -13
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/chebyconv.py +50 -14
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/cholconv.py +222 -84
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/cholesky/wrapper.py +20 -20
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/functions/__init__.py +2 -1
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/functions/analytical.py +30 -11
- sgwt-0.3.6/sgwt/functions/cwt.py +62 -0
- sgwt-0.3.6/sgwt/library/DELAY/NEISO.mat +0 -0
- sgwt-0.3.6/sgwt/library/LENGTH/NEISO.mat +0 -0
- sgwt-0.3.6/sgwt/library/MESH/BUNNY.ply +105410 -0
- sgwt-0.3.6/sgwt/library/MESH/HORSE.ply +0 -0
- sgwt-0.3.6/sgwt/library/MESH/LBRAIN.ply +433475 -0
- sgwt-0.3.6/sgwt/library/MESH/RBRAIN.ply +435218 -0
- sgwt-0.3.6/sgwt/sgma.py +427 -0
- sgwt-0.3.6/sgwt/tests/__init__.py +6 -0
- sgwt-0.3.6/sgwt/tests/conftest.py +171 -0
- sgwt-0.3.6/sgwt/tests/test_chebyshev.py +137 -0
- sgwt-0.3.6/sgwt/tests/test_cholconv.py +341 -0
- sgwt-0.3.6/sgwt/tests/test_functions.py +105 -0
- sgwt-0.3.6/sgwt/tests/test_performance.py +266 -0
- sgwt-0.3.6/sgwt/tests/test_sgma.py +507 -0
- sgwt-0.3.6/sgwt/tests/test_util.py +594 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/util.py +280 -64
- {sgwt-0.3.3 → sgwt-0.3.6/sgwt.egg-info}/PKG-INFO +45 -50
- sgwt-0.3.6/sgwt.egg-info/SOURCES.txt +99 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt.egg-info/requires.txt +5 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt.egg-info/top_level.txt +0 -1
- sgwt-0.3.3/examples/demo_filters_1.py +0 -34
- sgwt-0.3.3/examples/demo_inpainting.py +0 -94
- sgwt-0.3.3/examples/demo_plot.py +0 -49
- sgwt-0.3.3/sgwt/library/__init__.py +0 -28
- sgwt-0.3.3/sgwt.egg-info/SOURCES.txt +0 -73
- sgwt-0.3.3/tests/run_tests.py +0 -91
- sgwt-0.3.3/tests/test_chebyshev.py +0 -82
- sgwt-0.3.3/tests/test_cholesky.py +0 -214
- sgwt-0.3.3/tests/test_util.py +0 -102
- {sgwt-0.3.3 → sgwt-0.3.6}/LICENSE +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_cheby_convolve_1.py +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_cheby_convolve_2.py +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_cheby_time.py +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_dynamic_stream.py +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_dynamic_time.py +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_recon.py +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_single_file.py +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/examples/demo_vf.py +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/setup.cfg +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/cholesky/__init__.py +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/cholesky/structs.py +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/klu/__init__.py +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/klu/structs.py +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/klu/wrapper.py +0 -0
- /sgwt-0.3.3/sgwt/library/DELAY/EASTWEST_DELAY.mat → /sgwt-0.3.6/sgwt/library/DELAY/EASTWEST.mat +0 -0
- /sgwt-0.3.3/sgwt/library/DELAY/HAWAII_DELAY.mat → /sgwt-0.3.6/sgwt/library/DELAY/HAWAII.mat +0 -0
- /sgwt-0.3.3/sgwt/library/DELAY/TEXAS_DELAY.mat → /sgwt-0.3.6/sgwt/library/DELAY/TEXAS.mat +0 -0
- /sgwt-0.3.3/sgwt/library/DELAY/USA_DELAY.mat → /sgwt-0.3.6/sgwt/library/DELAY/USA.mat +0 -0
- /sgwt-0.3.3/sgwt/library/DELAY/WECC_DELAY.mat → /sgwt-0.3.6/sgwt/library/DELAY/WECC.mat +0 -0
- /sgwt-0.3.3/sgwt/library/IMPEDANCE/EASTWEST_IMPEDANCE.mat → /sgwt-0.3.6/sgwt/library/IMPEDANCE/EASTWEST.mat +0 -0
- /sgwt-0.3.3/sgwt/library/IMPEDANCE/HAWAII_IMPEDANCE.mat → /sgwt-0.3.6/sgwt/library/IMPEDANCE/HAWAII.mat +0 -0
- /sgwt-0.3.3/sgwt/library/IMPEDANCE/TEXAS_IMPEDANCE.mat → /sgwt-0.3.6/sgwt/library/IMPEDANCE/TEXAS.mat +0 -0
- /sgwt-0.3.3/sgwt/library/IMPEDANCE/USA_IMPEDANCE.mat → /sgwt-0.3.6/sgwt/library/IMPEDANCE/USA.mat +0 -0
- /sgwt-0.3.3/sgwt/library/IMPEDANCE/WECC_IMPEDANCE.mat → /sgwt-0.3.6/sgwt/library/IMPEDANCE/WECC.mat +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/KERNELS/GAUSSIAN_WAV.json +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/KERNELS/MEXICAN_HAT.json +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/KERNELS/MODIFIED_MORLET.json +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/KERNELS/SHANNON.json +0 -0
- /sgwt-0.3.3/sgwt/library/LENGTH/EASTWEST_LENGTH.mat → /sgwt-0.3.6/sgwt/library/LENGTH/EASTWEST.mat +0 -0
- /sgwt-0.3.3/sgwt/library/LENGTH/HAWAII_LENGTH.mat → /sgwt-0.3.6/sgwt/library/LENGTH/HAWAII.mat +0 -0
- /sgwt-0.3.3/sgwt/library/LENGTH/TEXAS_LENGTH.mat → /sgwt-0.3.6/sgwt/library/LENGTH/TEXAS.mat +0 -0
- /sgwt-0.3.3/sgwt/library/LENGTH/USA_LENGTH.mat → /sgwt-0.3.6/sgwt/library/LENGTH/USA.mat +0 -0
- /sgwt-0.3.3/sgwt/library/LENGTH/WECC_LENGTH.mat → /sgwt-0.3.6/sgwt/library/LENGTH/WECC.mat +0 -0
- /sgwt-0.3.3/sgwt/library/SIGNALS/EASTWEST_COORDS.mat → /sgwt-0.3.6/sgwt/library/SIGNALS/EASTWEST.mat +0 -0
- /sgwt-0.3.3/sgwt/library/SIGNALS/HAWAII_COORDS.mat → /sgwt-0.3.6/sgwt/library/SIGNALS/HAWAII.mat +0 -0
- /sgwt-0.3.3/sgwt/library/SIGNALS/TEXAS_COORDS.mat → /sgwt-0.3.6/sgwt/library/SIGNALS/TEXAS.mat +0 -0
- /sgwt-0.3.3/sgwt/library/SIGNALS/USA_COORDS.mat → /sgwt-0.3.6/sgwt/library/SIGNALS/USA.mat +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/amd.dll +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/btf.dll +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/camd.dll +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/ccolamd.dll +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/cholmod.dll +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/colamd.dll +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/klu.dll +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/klu_cholmod.dll +0 -0
- {sgwt-0.3.3 → sgwt-0.3.6}/sgwt/library/dll/suitesparseconfig.dll +0 -0
- {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
|
+
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
|
|
35
|
+
Sparse Graph Convolution
|
|
32
36
|
====================================
|
|
33
37
|
|
|
34
|
-
.. image:: https://img.shields.io/pypi/v/sgwt.svg
|
|
35
|
-
|
|
36
|
-
|
|
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/
|
|
39
|
-
|
|
40
|
-
|
|
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
|
-
|
|
44
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
#
|
|
91
|
+
# Graph Laplacian
|
|
76
92
|
L = sgwt.DELAY_TEXAS
|
|
77
93
|
|
|
78
|
-
#
|
|
79
|
-
|
|
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
|
-
|
|
86
|
-
#
|
|
87
|
-
|
|
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
|
-
|
|
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-
|
|
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={
|
|
121
|
+
year={2026}
|
|
122
122
|
}
|
|
123
123
|
|
|
124
|
-
|
|
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
|
-
|
|
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
|
|
1
|
+
Sparse Graph Convolution
|
|
2
2
|
====================================
|
|
3
3
|
|
|
4
|
-
.. image:: https://img.shields.io/pypi/v/sgwt.svg
|
|
5
|
-
|
|
6
|
-
|
|
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/
|
|
9
|
-
|
|
10
|
-
|
|
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
|
-
|
|
14
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
-
|
|
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
|
|
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
|
-
#
|
|
57
|
+
# Graph Laplacian
|
|
46
58
|
L = sgwt.DELAY_TEXAS
|
|
47
59
|
|
|
48
|
-
#
|
|
49
|
-
|
|
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
|
-
|
|
56
|
-
#
|
|
57
|
-
|
|
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
|
-
|
|
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-
|
|
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={
|
|
87
|
+
year={2026}
|
|
92
88
|
}
|
|
93
89
|
|
|
94
|
-
|
|
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
|
-
|
|
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 = "
|
|
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
|
+
]
|