Mercurial > repos > shellac > guppy_basecaller
diff env/lib/python3.7/site-packages/networkx/linalg/graphmatrix.py @ 5:9b1c78e6ba9c draft default tip
"planemo upload commit 6c0a8142489327ece472c84e558c47da711a9142"
author | shellac |
---|---|
date | Mon, 01 Jun 2020 08:59:25 -0400 |
parents | 79f47841a781 |
children |
line wrap: on
line diff
--- a/env/lib/python3.7/site-packages/networkx/linalg/graphmatrix.py Thu May 14 16:47:39 2020 -0400 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,172 +0,0 @@ -""" -Adjacency matrix and incidence matrix of graphs. -""" -# Copyright (C) 2004-2019 by -# Aric Hagberg <hagberg@lanl.gov> -# Dan Schult <dschult@colgate.edu> -# Pieter Swart <swart@lanl.gov> -# All rights reserved. -# BSD license. -import networkx as nx -__author__ = "\n".join(['Aric Hagberg (hagberg@lanl.gov)', - 'Pieter Swart (swart@lanl.gov)', - 'Dan Schult(dschult@colgate.edu)']) - -__all__ = ['incidence_matrix', - 'adj_matrix', 'adjacency_matrix', - ] - - -def incidence_matrix(G, nodelist=None, edgelist=None, - oriented=False, weight=None): - """Returns incidence matrix of G. - - The incidence matrix assigns each row to a node and each column to an edge. - For a standard incidence matrix a 1 appears wherever a row's node is - incident on the column's edge. For an oriented incidence matrix each - edge is assigned an orientation (arbitrarily for undirected and aligning to - direction for directed). A -1 appears for the tail of an edge and 1 - for the head of the edge. The elements are zero otherwise. - - Parameters - ---------- - G : graph - A NetworkX graph - - nodelist : list, optional (default= all nodes in G) - The rows are ordered according to the nodes in nodelist. - If nodelist is None, then the ordering is produced by G.nodes(). - - edgelist : list, optional (default= all edges in G) - The columns are ordered according to the edges in edgelist. - If edgelist is None, then the ordering is produced by G.edges(). - - oriented: bool, optional (default=False) - If True, matrix elements are +1 or -1 for the head or tail node - respectively of each edge. If False, +1 occurs at both nodes. - - weight : string or None, optional (default=None) - The edge data key used to provide each value in the matrix. - If None, then each edge has weight 1. Edge weights, if used, - should be positive so that the orientation can provide the sign. - - Returns - ------- - A : SciPy sparse matrix - The incidence matrix of G. - - Notes - ----- - For MultiGraph/MultiDiGraph, the edges in edgelist should be - (u,v,key) 3-tuples. - - "Networks are the best discrete model for so many problems in - applied mathematics" [1]_. - - References - ---------- - .. [1] Gil Strang, Network applications: A = incidence matrix, - http://academicearth.org/lectures/network-applications-incidence-matrix - """ - import scipy.sparse - if nodelist is None: - nodelist = list(G) - if edgelist is None: - if G.is_multigraph(): - edgelist = list(G.edges(keys=True)) - else: - edgelist = list(G.edges()) - A = scipy.sparse.lil_matrix((len(nodelist), len(edgelist))) - node_index = dict((node, i) for i, node in enumerate(nodelist)) - for ei, e in enumerate(edgelist): - (u, v) = e[:2] - if u == v: - continue # self loops give zero column - try: - ui = node_index[u] - vi = node_index[v] - except KeyError: - raise nx.NetworkXError('node %s or %s in edgelist ' - 'but not in nodelist' % (u, v)) - if weight is None: - wt = 1 - else: - if G.is_multigraph(): - ekey = e[2] - wt = G[u][v][ekey].get(weight, 1) - else: - wt = G[u][v].get(weight, 1) - if oriented: - A[ui, ei] = -wt - A[vi, ei] = wt - else: - A[ui, ei] = wt - A[vi, ei] = wt - return A.asformat('csc') - - -def adjacency_matrix(G, nodelist=None, weight='weight'): - """Returns adjacency matrix of G. - - Parameters - ---------- - G : graph - A NetworkX graph - - nodelist : list, optional - The rows and columns are ordered according to the nodes in nodelist. - If nodelist is None, then the ordering is produced by G.nodes(). - - weight : string or None, optional (default='weight') - The edge data key used to provide each value in the matrix. - If None, then each edge has weight 1. - - Returns - ------- - A : SciPy sparse matrix - Adjacency matrix representation of G. - - Notes - ----- - For directed graphs, entry i,j corresponds to an edge from i to j. - - If you want a pure Python adjacency matrix representation try - networkx.convert.to_dict_of_dicts which will return a - dictionary-of-dictionaries format that can be addressed as a - sparse matrix. - - For MultiGraph/MultiDiGraph with parallel edges the weights are summed. - See to_numpy_matrix for other options. - - The convention used for self-loop edges in graphs is to assign the - diagonal matrix entry value to the edge weight attribute - (or the number 1 if the edge has no weight attribute). If the - alternate convention of doubling the edge weight is desired the - resulting Scipy sparse matrix can be modified as follows: - - >>> import scipy as sp - >>> G = nx.Graph([(1,1)]) - >>> A = nx.adjacency_matrix(G) - >>> print(A.todense()) - [[1]] - >>> A.setdiag(A.diagonal()*2) - >>> print(A.todense()) - [[2]] - - See Also - -------- - to_numpy_matrix - to_scipy_sparse_matrix - to_dict_of_dicts - adjacency_spectrum - """ - return nx.to_scipy_sparse_matrix(G, nodelist=nodelist, weight=weight) - - -adj_matrix = adjacency_matrix - - -# fixture for pytest -def setup_module(module): - import pytest - scipy = pytest.importorskip('scipy')