Open
Description
If one creates a weighted, undirected graph from an adjacency matrix, wouldn't it make sense to check if the adjacency matrix is symmetric? This check was also introduced in rigraph
I think, see igraph/rigraph#182.
I am referring to this function:
python-igraph/src/igraph/sparse_matrix.py
Line 154 in 4c82c9d
A simple check could be something like symmetric = not np.any((matrix!=matrix.T).data)
(here assuming that it is scipy.sparse.csr_matrix).
Here is a simple example (not the most efficient way to check the behavior though):
import numpy as np
from scipy.sparse import csr_matrix
import igraph as ig
rng = np.random.default_rng(0)
n = int(1e3)
sparse_adj = rng.choice(np.array([0, 1, 2]),
size=(n**2), replace=True,
p=np.array([0.9, 0.05, 0.05])).reshape(n, n).astype(np.float64)
sparse_adj = csr_matrix(sparse_adj)
symmetric = not np.any((sparse_adj!=sparse_adj.T).data)
print(f"{symmetric=}")
g = ig.Graph.Weighted_Adjacency(sparse_adj,
mode="undirected",
attr="weight")