# -*- coding: utf-8 -*-
from . import Graph
import numpy as np
from scipy import sparse
[docs]class LowStretchTree(Graph):
r"""
Create a low stretch tree graph.
Parameters
----------
k : int
2^k points on each side of the grid of vertices (default 6)
Examples
--------
>>> from pygsp import graphs, plotting
>>> G = graphs.LowStretchTree(k=3)
>>> G.plot()
"""
def __init__(self, k=6, **kwargs):
XCoords = np.array([1, 2, 1, 2])
YCoords = np.array([1, 1, 2, 2])
ii = np.array([0, 0, 1, 2, 2, 3])
jj = np.array([1, 2, 1, 3, 0, 2])
for p in range(1, k):
ii = np.concatenate((ii, ii + 4**p, ii + 2*4**p,
ii + 3*4**p, [4**p - 1], [4**p - 1],
[4**p + (4**(p+1) + 2)/3. - 1],
[5/3.*4**p + 1/3. - 1],
[4**p + (4**(p+1) + 2)/3. - 1], [3*4**p]))
jj = np.concatenate((jj, jj + 4**p, jj + 2*4**p, jj + 3*4**p,
[5./3*4**p + 1/3. - 1],
[4**p + (4**(p+1) + 2)/3. - 1],
[3*4**p], [4**p - 1], [4**p - 1],
[4**p + (4**(p+1)+2)/3. - 1]))
YCoords = np.kron(np.ones((2)), YCoords)
YCoords = np.concatenate((YCoords, YCoords + 2**p))
XCoords = np.concatenate((XCoords, XCoords + 2**p))
XCoords = np.kron(np.ones((2)), XCoords)
W = sparse.csc_matrix((np.ones((np.shape(ii))), (ii, jj)))
coords = np.concatenate((XCoords[:, np.newaxis],
YCoords[:, np.newaxis]),
axis=1)
self.root = 4**(k - 1)
plotting = {"edges_width": 1.25,
"vertex_sizee": 75,
"limits": np.array([0, 2**k + 1, 0, 2**k + 1])}
super(LowStretchTree, self).__init__(W=W, coords=coords, plotting=plotting,
gtype="low strech tree", **kwargs)