Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package python-networkx for openSUSE:Factory
checked in at 2023-01-06 17:04:56
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/python-networkx (Old)
and /work/SRC/openSUSE:Factory/.python-networkx.new.1563 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "python-networkx"
Fri Jan 6 17:04:56 2023 rev:34 rq:1056126 version:2.8.8
Changes:
--------
--- /work/SRC/openSUSE:Factory/python-networkx/python-networkx.changes
2022-10-03 13:43:51.001229055 +0200
+++
/work/SRC/openSUSE:Factory/.python-networkx.new.1563/python-networkx.changes
2023-01-06 17:05:27.656149439 +0100
@@ -1,0 +2,34 @@
+Wed Jan 4 22:18:00 UTC 2023 - Dirk Müller <[email protected]>
+
+- update to 2.8.8:
+ * Fix warnings from running tests in randomized order
+ * Update pydata-sphinx-theme
+ * update secutiry link to tidelift
+ * Update numpydoc
+ * Support Python 3.11
+ * Minor updates to expanders generator tests
+ * Add missing asserts to tests
+ * fixes #6036
+ * Improve test coverage expanders line graph generators solved (PR for issue
#6034)
+ * Replace .A call with .toarray for sparse array in example.
+ * Improve test coverage for algorithms/richclub.py
+ * Tested boykov_kolmogorov and dinitz with cutoff
+ * Improve test coverage for multigraph class
+ * Improve test coverage for algorithms in dominating_set.py (PR for issue
6032)
+ * Improve test coverage for graph class
+ * added coverage in generators/tree.py
+ * DOC: Specifically branch off main, instead of current branch
+ * Improve test coverage for multidigraph class
+ * Improve test coverage for digraph class
+ * Improve test coverage for algorithms in dispersion.py
+ * Test on Python 3.11
+ * Improve test coverage in algorithms shortest paths unweighted.py
+ * Increased test coverage algorithms/matching.py
+ * Renamed test functions in test_lowest_common_ancestors
+ * Increase covering coverage
+ * Add example for fiedler_vector
+ * Improve test coverage for cycles.py
+ * Added an example in all_pairs_node_connectivity
+ * Amount of nodes and edges have mistakes when reading adjlist file
+
+-------------------------------------------------------------------
Old:
----
networkx-2.8.7.tar.gz
New:
----
networkx-2.8.8.tar.gz
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ python-networkx.spec ++++++
--- /var/tmp/diff_new_pack.BUmDub/_old 2023-01-06 17:05:28.432153797 +0100
+++ /var/tmp/diff_new_pack.BUmDub/_new 2023-01-06 17:05:28.436153819 +0100
@@ -1,7 +1,7 @@
#
# spec file for package python-networkx
#
-# Copyright (c) 2022 SUSE LLC
+# Copyright (c) 2023 SUSE LLC
#
# All modifications and additions to the file contributed by third parties
# remain the property of their copyright owners, unless otherwise agreed
@@ -18,7 +18,7 @@
%{?!python_module:%define python_module() python3-%{**}}
Name: python-networkx
-Version: 2.8.7
+Version: 2.8.8
Release: 0
Summary: Python package for the study of complex networks
License: BSD-3-Clause
++++++ networkx-2.8.7.tar.gz -> networkx-2.8.8.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/CONTRIBUTING.rst
new/networkx-2.8.8/CONTRIBUTING.rst
--- old/networkx-2.8.7/CONTRIBUTING.rst 2022-09-30 18:57:13.000000000 +0200
+++ new/networkx-2.8.8/CONTRIBUTING.rst 2022-11-01 19:53:50.000000000 +0100
@@ -94,7 +94,7 @@
branch name will appear in the merge message, use a sensible name
such as 'bugfix-for-issue-1480'::
- git checkout -b bugfix-for-issue-1480
+ git checkout -b bugfix-for-issue-1480 main
* Commit locally as you progress (``git add`` and ``git commit``)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/PKG-INFO new/networkx-2.8.8/PKG-INFO
--- old/networkx-2.8.7/PKG-INFO 2022-10-01 22:51:50.154833800 +0200
+++ new/networkx-2.8.8/PKG-INFO 2022-11-01 21:31:21.107464800 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: networkx
-Version: 2.8.7
+Version: 2.8.8
Summary: Python package for creating and manipulating graphs and networks
Home-page: https://networkx.org/
Author: Aric Hagberg
@@ -24,6 +24,7 @@
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
@@ -41,8 +42,8 @@
NetworkX
========
-.. image::
https://github.com/networkx/networkx/workflows/test/badge.svg?tag=networkx-2.8.7
- :target:
https://github.com/networkx/networkx/actions?query=branch%3Anetworkx-2.8.7
+.. image::
https://github.com/networkx/networkx/workflows/test/badge.svg?tag=networkx-2.8.8
+ :target:
https://github.com/networkx/networkx/actions?query=branch%3Anetworkx-2.8.8
.. image:: https://codecov.io/gh/networkx/networkx/branch/main/graph/badge.svg
:target: https://app.codecov.io/gh/networkx/networkx/branch/main
@@ -59,7 +60,7 @@
- **Mailing list:** https://groups.google.com/forum/#!forum/networkx-discuss
- **Source:** https://github.com/networkx/networkx
- **Bug reports:** https://github.com/networkx/networkx/issues
-- **Report a security vulnerability:** https://tidelift.com/docs/security
+- **Report a security vulnerability:** https://tidelift.com/security
- **Tutorial:** https://networkx.org/documentation/latest/tutorial.html
- **GitHub Discussions:** https://github.com/networkx/networkx/discussions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/README.rst
new/networkx-2.8.8/README.rst
--- old/networkx-2.8.7/README.rst 2022-10-01 22:50:53.000000000 +0200
+++ new/networkx-2.8.8/README.rst 2022-11-01 21:30:43.000000000 +0100
@@ -1,8 +1,8 @@
NetworkX
========
-.. image::
https://github.com/networkx/networkx/workflows/test/badge.svg?tag=networkx-2.8.7
- :target:
https://github.com/networkx/networkx/actions?query=branch%3Anetworkx-2.8.7
+.. image::
https://github.com/networkx/networkx/workflows/test/badge.svg?tag=networkx-2.8.8
+ :target:
https://github.com/networkx/networkx/actions?query=branch%3Anetworkx-2.8.8
.. image:: https://codecov.io/gh/networkx/networkx/branch/main/graph/badge.svg
:target: https://app.codecov.io/gh/networkx/networkx/branch/main
@@ -19,7 +19,7 @@
- **Mailing list:** https://groups.google.com/forum/#!forum/networkx-discuss
- **Source:** https://github.com/networkx/networkx
- **Bug reports:** https://github.com/networkx/networkx/issues
-- **Report a security vulnerability:** https://tidelift.com/docs/security
+- **Report a security vulnerability:** https://tidelift.com/security
- **Tutorial:** https://networkx.org/documentation/latest/tutorial.html
- **GitHub Discussions:** https://github.com/networkx/networkx/discussions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/doc/release/index.rst
new/networkx-2.8.8/doc/release/index.rst
--- old/networkx-2.8.7/doc/release/index.rst 2022-09-30 18:57:13.000000000
+0200
+++ new/networkx-2.8.8/doc/release/index.rst 2022-11-01 21:26:17.000000000
+0100
@@ -15,6 +15,7 @@
:maxdepth: 2
release_dev
+ release_2.8.8
release_2.8.7
release_2.8.6
release_2.8.5
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/doc/release/release_2.8.8.rst
new/networkx-2.8.8/doc/release/release_2.8.8.rst
--- old/networkx-2.8.7/doc/release/release_2.8.8.rst 1970-01-01
01:00:00.000000000 +0100
+++ new/networkx-2.8.8/doc/release/release_2.8.8.rst 2022-11-01
21:25:44.000000000 +0100
@@ -0,0 +1,70 @@
+NetworkX 2.8.7
+==============
+
+Release date: 1 November 2022
+
+Supports Python 3.8, 3.9, 3.10, and 3.11.
+
+NetworkX is a Python package for the creation, manipulation, and study of the
+structure, dynamics, and functions of complex networks.
+
+For more information, please visit our `website <https://networkx.org/>`_
+and our :ref:`gallery of examples <examples_gallery>`.
+Please send comments and questions to the `networkx-discuss mailing list
+<http://groups.google.com/group/networkx-discuss>`_.
+
+Highlights
+----------
+
+Minor documentation and bug fixes.
+
+Merged PRs
+----------
+
+- Bump release version
+- Fix warnings from running tests in randomized order (#6014)
+- Update pydata-sphinx-theme (#6012)
+- update secutiry link to tidelift (#6019)
+- Update numpydoc (#6022)
+- Support Python 3.11 (#6023)
+- Update linters (#6024)
+- Minor updates to expanders generator tests (#6027)
+- Add missing asserts to tests (#6039)
+- fixes #6036 (#6080)
+- Improve test coverage expanders line graph generators solved (PR for issue
#6034) (#6071)
+- Replace .A call with .toarray for sparse array in example. (#6106)
+- Improve test coverage for algorithms/richclub.py (#6089)
+- Tested boykov_kolmogorov and dinitz with cutoff (#6104)
+- Improve test coverage for multigraph class (#6101)
+- Improve test coverage for algorithms in dominating_set.py (PR for issue
6032) (#6068)
+- Improve test coverage for graph class (#6105)
+- added coverage in generators/tree.py (#6082)
+- DOC: Specifically branch off main, instead of current branch (#6127)
+- Improve test coverage for multidigraph class (#6131)
+- Improve test coverage for digraph class (#6130)
+- Improve test coverage for algorithms in dispersion.py (#6100)
+- Test on Python 3.11 (#6159)
+- Improve test coverage in algorithms shortest paths unweighted.py (#6121)
+- Increased test coverage algorithms/matching.py (#6095)
+- Renamed test functions in test_lowest_common_ancestors (#6110)
+- Increase covering coverage (#6099)
+- Add example for fiedler_vector (#6155)
+- Improve test coverage for cycles.py (#6152)
+- Added an example in all_pairs_node_connectivity (#6126)
+- Amount of nodes and edges have mistakes when reading adjlist file (#6132)
+- Update pytest (#6165)
+
+Contributors
+------------
+
+- Ross Barnowski
+- Paula Pérez Bianchi
+- DiamondJoseph
+- Jarrod Millman
+- Mjh9122
+- Alimi Qudirah
+- Okite chimaobi Samuel
+- Jefter Santiago
+- Dan Schult
+- Mridul Seth
+- Tindi Sommers
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/examples/drawing/plot_eigenvalues.py
new/networkx-2.8.8/examples/drawing/plot_eigenvalues.py
--- old/networkx-2.8.7/examples/drawing/plot_eigenvalues.py 2021-05-31
22:28:22.000000000 +0200
+++ new/networkx-2.8.8/examples/drawing/plot_eigenvalues.py 2022-11-01
18:27:46.000000000 +0100
@@ -14,7 +14,7 @@
G = nx.gnm_random_graph(n, m, seed=5040) # Seed for reproducibility
L = nx.normalized_laplacian_matrix(G)
-e = numpy.linalg.eigvals(L.A)
+e = numpy.linalg.eigvals(L.toarray())
print("Largest eigenvalue:", max(e))
print("Smallest eigenvalue:", min(e))
plt.hist(e, bins=100) # histogram with 100 bins
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/networkx/__init__.py
new/networkx-2.8.8/networkx/__init__.py
--- old/networkx-2.8.7/networkx/__init__.py 2022-10-01 22:46:52.000000000
+0200
+++ new/networkx-2.8.8/networkx/__init__.py 2022-11-01 21:27:06.000000000
+0100
@@ -8,7 +8,7 @@
See https://networkx.org for complete documentation.
"""
-__version__ = "2.8.7"
+__version__ = "2.8.8"
def __getattr__(name):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/approximation/connectivity.py
new/networkx-2.8.8/networkx/algorithms/approximation/connectivity.py
--- old/networkx-2.8.7/networkx/algorithms/approximation/connectivity.py
2022-03-29 15:37:39.000000000 +0200
+++ new/networkx-2.8.8/networkx/algorithms/approximation/connectivity.py
2022-11-01 18:29:08.000000000 +0100
@@ -244,6 +244,20 @@
K : dictionary
Dictionary, keyed by source and target, of pairwise node connectivity
+ Examples
+ --------
+ A 3 node cycle with one extra node attached has connectivity 2 between all
+ nodes in the cycle and connectivity 1 between the extra node and the rest:
+
+ >>> G = nx.cycle_graph(3)
+ >>> G.add_edge(2, 3)
+ >>> import pprint # for nice dictionary formatting
+ >>> pprint.pprint(nx.all_pairs_node_connectivity(G))
+ {0: {1: 2, 2: 2, 3: 1},
+ 1: {0: 2, 2: 2, 3: 1},
+ 2: {0: 2, 1: 2, 3: 1},
+ 3: {0: 1, 1: 1, 2: 1}}
+
See Also
--------
local_node_connectivity
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/approximation/tests/test_dominating_set.py
new/networkx-2.8.8/networkx/algorithms/approximation/tests/test_dominating_set.py
---
old/networkx-2.8.7/networkx/algorithms/approximation/tests/test_dominating_set.py
2022-06-03 01:39:15.000000000 +0200
+++
new/networkx-2.8.8/networkx/algorithms/approximation/tests/test_dominating_set.py
2022-11-01 18:28:05.000000000 +0100
@@ -1,3 +1,5 @@
+import pytest
+
import networkx as nx
from networkx.algorithms.approximation import (
min_edge_dominating_set,
@@ -37,6 +39,11 @@
G = nx.relabel_nodes(G, {0: 9, 9: 0})
assert min_weighted_dominating_set(G) == {9}
+ def test_null_graph(self):
+ """Tests that the unique dominating set for the null graph is an empty
set"""
+ G = nx.Graph()
+ assert min_weighted_dominating_set(G) == set()
+
def test_min_edge_dominating_set(self):
graph = nx.path_graph(5)
dom_set = min_edge_dominating_set(graph)
@@ -65,3 +72,7 @@
for dom_edge in dom_set:
found |= u == dom_edge[0] or u == dom_edge[1]
assert found, "Non adjacent edge found!"
+
+ graph = nx.Graph() # empty Networkx graph
+ with pytest.raises(ValueError, match="Expected non-empty NetworkX
graph!"):
+ min_edge_dominating_set(graph)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/bipartite/tests/test_matching.py
new/networkx-2.8.8/networkx/algorithms/bipartite/tests/test_matching.py
--- old/networkx-2.8.7/networkx/algorithms/bipartite/tests/test_matching.py
2022-06-03 01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/algorithms/bipartite/tests/test_matching.py
2022-11-01 19:53:55.000000000 +0100
@@ -16,7 +16,7 @@
class TestMatching:
"""Tests for bipartite matching algorithms."""
- def setup(self):
+ def setup_method(self):
"""Creates a bipartite graph for use in testing matching algorithms.
The bipartite graph has a maximum cardinality matching that leaves
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/centrality/tests/test_dispersion.py
new/networkx-2.8.8/networkx/algorithms/centrality/tests/test_dispersion.py
--- old/networkx-2.8.7/networkx/algorithms/centrality/tests/test_dispersion.py
2022-06-04 19:36:56.000000000 +0200
+++ new/networkx-2.8.8/networkx/algorithms/centrality/tests/test_dispersion.py
2022-11-01 18:28:33.000000000 +0100
@@ -58,6 +58,13 @@
assert len(disp_Gu) == len(G) - 1
assert isinstance(disp_uv, float)
+ def test_dispersion_v_only(self):
+ G = small_ego_G()
+ disp_G_h = nx.dispersion(G, v="h", normalized=False)
+ disp_G_h_normalized = nx.dispersion(G, v="h", normalized=True)
+ assert disp_G_h == {"c": 0, "f": 0, "j": 0, "k": 0, "u": 4}
+ assert disp_G_h_normalized == {"c": 0.0, "f": 0.0, "j": 0.0, "k": 0.0,
"u": 1.0}
+
def test_impossible_things(self):
G = nx.karate_club_graph()
disp = nx.dispersion(G)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/centrality/tests/test_load_centrality.py
new/networkx-2.8.8/networkx/algorithms/centrality/tests/test_load_centrality.py
---
old/networkx-2.8.7/networkx/algorithms/centrality/tests/test_load_centrality.py
2022-06-03 01:39:15.000000000 +0200
+++
new/networkx-2.8.8/networkx/algorithms/centrality/tests/test_load_centrality.py
2022-11-01 18:27:34.000000000 +0100
@@ -24,6 +24,7 @@
cls.P3 = nx.path_graph(3)
cls.P4 = nx.path_graph(4)
cls.K5 = nx.complete_graph(5)
+ cls.P2 = nx.path_graph(2)
cls.C4 = nx.cycle_graph(4)
cls.T = nx.balanced_tree(r=2, h=2)
@@ -41,6 +42,13 @@
assert result[n] == pytest.approx(b[n], abs=1e-3)
assert result[n] == pytest.approx(nx.load_centrality(self.D, n),
abs=1e-3)
+ def test_P2_normalized_load(self):
+ G = self.P2
+ c = nx.load_centrality(G, normalized=True)
+ d = {0: 0.000, 1: 0.000}
+ for n in sorted(G):
+ assert c[n] == pytest.approx(d[n], abs=1e-3)
+
def test_weighted_load(self):
b = nx.load_centrality(self.G, weight="weight", normalized=False)
for n in sorted(self.G):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/community/tests/test_kclique.py
new/networkx-2.8.8/networkx/algorithms/community/tests/test_kclique.py
--- old/networkx-2.8.7/networkx/algorithms/community/tests/test_kclique.py
2021-05-31 22:28:22.000000000 +0200
+++ new/networkx-2.8.8/networkx/algorithms/community/tests/test_kclique.py
2022-11-01 19:53:55.000000000 +0100
@@ -25,7 +25,7 @@
class TestZacharyKarateClub:
- def setup(self):
+ def setup_method(self):
self.G = nx.karate_club_graph()
def _check_communities(self, k, expected):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/connectivity/kcutsets.py
new/networkx-2.8.8/networkx/algorithms/connectivity/kcutsets.py
--- old/networkx-2.8.7/networkx/algorithms/connectivity/kcutsets.py
2022-06-03 01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/algorithms/connectivity/kcutsets.py
2022-11-01 18:29:08.000000000 +0100
@@ -39,9 +39,10 @@
computed. Default value: None.
flow_func : function
- Function to perform the underlying flow computations. Default value
- edmonds_karp. This function performs better in sparse graphs with
- right tailed degree distributions. shortest_augmenting_path will
+ Function to perform the underlying flow computations. Default value is
+ :func:`~networkx.algorithms.flow.edmonds_karp`. This function performs
+ better in sparse graphs with right tailed degree distributions.
+ :func:`~networkx.algorithms.flow.shortest_augmenting_path` will
perform better in denser graphs.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/flow/tests/test_maxflow.py
new/networkx-2.8.8/networkx/algorithms/flow/tests/test_maxflow.py
--- old/networkx-2.8.7/networkx/algorithms/flow/tests/test_maxflow.py
2022-06-03 01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/algorithms/flow/tests/test_maxflow.py
2022-11-01 19:53:55.000000000 +0100
@@ -386,7 +386,7 @@
class TestMaxFlowMinCutInterface:
- def setup(self):
+ def setup_method(self):
G = nx.DiGraph()
G.add_edge("x", "a", capacity=3.0)
G.add_edge("x", "b", capacity=1.0)
@@ -539,11 +539,20 @@
assert k <= R.graph["flow_value"] <= (2 * k)
R = edmonds_karp(G, "s", "t", cutoff=k)
assert k <= R.graph["flow_value"] <= (2 * k)
+ R = dinitz(G, "s", "t", cutoff=k)
+ assert k <= R.graph["flow_value"] <= (2 * k)
+ R = boykov_kolmogorov(G, "s", "t", cutoff=k)
+ assert k <= R.graph["flow_value"] <= (2 * k)
def test_complete_graph_cutoff(self):
G = nx.complete_graph(5)
nx.set_edge_attributes(G, {(u, v): 1 for u, v in G.edges()},
"capacity")
- for flow_func in [shortest_augmenting_path, edmonds_karp]:
+ for flow_func in [
+ shortest_augmenting_path,
+ edmonds_karp,
+ dinitz,
+ boykov_kolmogorov,
+ ]:
for cutoff in [3, 2, 1]:
result = nx.maximum_flow_value(
G, 0, 4, flow_func=flow_func, cutoff=cutoff
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/isomorphism/tests/test_match_helpers.py
new/networkx-2.8.8/networkx/algorithms/isomorphism/tests/test_match_helpers.py
---
old/networkx-2.8.7/networkx/algorithms/isomorphism/tests/test_match_helpers.py
2022-06-03 01:39:15.000000000 +0200
+++
new/networkx-2.8.8/networkx/algorithms/isomorphism/tests/test_match_helpers.py
2022-11-01 19:53:55.000000000 +0100
@@ -11,7 +11,7 @@
class TestGenericMultiEdgeMatch:
- def setup(self):
+ def setup_method(self):
self.G1 = nx.MultiDiGraph()
self.G2 = nx.MultiDiGraph()
self.G3 = nx.MultiDiGraph()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/shortest_paths/tests/test_unweighted.py
new/networkx-2.8.8/networkx/algorithms/shortest_paths/tests/test_unweighted.py
---
old/networkx-2.8.7/networkx/algorithms/shortest_paths/tests/test_unweighted.py
2021-05-31 22:28:22.000000000 +0200
+++
new/networkx-2.8.8/networkx/algorithms/shortest_paths/tests/test_unweighted.py
2022-11-01 18:28:42.000000000 +0100
@@ -1,3 +1,5 @@
+import pytest
+
import networkx as nx
@@ -32,6 +34,24 @@
4, 4, 1, 12, nx.bidirectional_shortest_path(self.grid, 1, 12)
)
assert nx.bidirectional_shortest_path(self.directed_cycle, 0, 3) ==
[0, 1, 2, 3]
+ # test source = target
+ assert nx.bidirectional_shortest_path(self.cycle, 3, 3) == [3]
+
+ @pytest.mark.parametrize(
+ ("src", "tgt"),
+ (
+ (8, 3), # source not in graph
+ (3, 8), # target not in graph
+ (8, 10), # neither source nor target in graph
+ (8, 8), # src == tgt, neither in graph - tests order of input
checks
+ ),
+ )
+ def test_bidirectional_shortest_path_src_tgt_not_in_graph(self, src, tgt):
+ with pytest.raises(
+ nx.NodeNotFound,
+ match=f"Either source {src} or target {tgt} is not in G",
+ ):
+ nx.bidirectional_shortest_path(self.cycle, src, tgt)
def test_shortest_path_length(self):
assert nx.shortest_path_length(self.cycle, 0, 3) == 3
@@ -64,6 +84,10 @@
assert p[3] == [3, 2, 1, 0]
p = nx.single_target_shortest_path(self.cycle, 0, cutoff=0)
assert p == {0: [0]}
+ # test missing targets
+ target = 8
+ with pytest.raises(nx.NodeNotFound, match=f"Target {target} not in G"):
+ nx.single_target_shortest_path(self.cycle, target)
def test_single_target_shortest_path_length(self):
pl = nx.single_target_shortest_path_length
@@ -71,6 +95,10 @@
assert dict(pl(self.cycle, 0)) == lengths
lengths = {0: 0, 1: 6, 2: 5, 3: 4, 4: 3, 5: 2, 6: 1}
assert dict(pl(self.directed_cycle, 0)) == lengths
+ # test missing targets
+ target = 8
+ with pytest.raises(nx.NodeNotFound, match=f"Target {target} is not in
G"):
+ nx.single_target_shortest_path_length(self.cycle, target)
def test_all_pairs_shortest_path(self):
p = dict(nx.all_pairs_shortest_path(self.cycle))
@@ -114,3 +142,8 @@
p, s = nx.predecessor(G, 0, 3, cutoff=2, return_seen=True)
assert p == []
assert s == -1
+
+ def test_predecessor_missing_source(self):
+ source = 8
+ with pytest.raises(nx.NodeNotFound, match=f"Source {source} not in G"):
+ nx.predecessor(self.cycle, source)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/shortest_paths/tests/test_weighted.py
new/networkx-2.8.8/networkx/algorithms/shortest_paths/tests/test_weighted.py
---
old/networkx-2.8.7/networkx/algorithms/shortest_paths/tests/test_weighted.py
2022-03-29 16:02:47.000000000 +0200
+++
new/networkx-2.8.8/networkx/algorithms/shortest_paths/tests/test_weighted.py
2022-11-01 19:53:55.000000000 +0100
@@ -36,7 +36,7 @@
"""
- def setup(self):
+ def setup_method(self):
"""Creates some graphs for use in the unit tests."""
cnlti = nx.convert_node_labels_to_integers
self.grid = cnlti(nx.grid_2d_graph(4, 4), first_label=1,
ordering="sorted")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/tests/test_covering.py
new/networkx-2.8.8/networkx/algorithms/tests/test_covering.py
--- old/networkx-2.8.7/networkx/algorithms/tests/test_covering.py
2022-04-25 23:17:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/algorithms/tests/test_covering.py
2022-11-01 18:28:55.000000000 +0100
@@ -1,3 +1,5 @@
+import pytest
+
import networkx as nx
@@ -13,6 +15,15 @@
G.add_edge(0, 0)
assert nx.min_edge_cover(G) == {(0, 0)}
+ def test_graph_with_isolated_v(self):
+ G = nx.Graph()
+ G.add_node(1)
+ with pytest.raises(
+ nx.NetworkXException,
+ match="Graph has a node with no edge incident on it, so no edge
cover exists.",
+ ):
+ nx.min_edge_cover(G)
+
def test_graph_single_edge(self):
G = nx.Graph([(0, 1)])
assert nx.min_edge_cover(G) in ({(0, 1)}, {(1, 0)})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/tests/test_cycles.py
new/networkx-2.8.8/networkx/algorithms/tests/test_cycles.py
--- old/networkx-2.8.7/networkx/algorithms/tests/test_cycles.py 2022-06-03
01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/algorithms/tests/test_cycles.py 2022-11-01
18:29:04.000000000 +0100
@@ -50,6 +50,15 @@
G = nx.MultiGraph()
cy = networkx.cycle_basis(G, 0)
+ def test_cycle_basis_self_loop(self):
+ """Tests the function for graphs with self loops"""
+ G = nx.Graph()
+ nx.add_cycle(G, [0, 1, 2, 3])
+ nx.add_cycle(G, [0, 0, 6, 2])
+ cy = nx.cycle_basis(G)
+ sort_cy = sorted(sorted(c) for c in cy)
+ assert sort_cy == [[0], [0, 1, 2], [0, 2, 3], [0, 2, 6]]
+
def test_simple_cycles(self):
edges = [(0, 0), (0, 1), (0, 2), (1, 2), (2, 0), (2, 1), (2, 2)]
G = nx.DiGraph(edges)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/tests/test_lowest_common_ancestors.py
new/networkx-2.8.8/networkx/algorithms/tests/test_lowest_common_ancestors.py
---
old/networkx-2.8.7/networkx/algorithms/tests/test_lowest_common_ancestors.py
2022-08-21 19:03:33.000000000 +0200
+++
new/networkx-2.8.8/networkx/algorithms/tests/test_lowest_common_ancestors.py
2022-11-01 18:28:51.000000000 +0100
@@ -51,39 +51,33 @@
for (a, b) in ((min(pair), max(pair)) for pair in chain(d1, d2)):
assert get_pair(d1, a, b) == get_pair(d2, a, b)
- def test_tree_all_pairs_lowest_common_ancestor1(self):
- """Specifying the root is optional."""
+ def test_tree_all_pairs_lca_default_root(self):
assert dict(tree_all_pairs_lca(self.DG)) == self.ans
- def test_tree_all_pairs_lowest_common_ancestor2(self):
- """Specifying only some pairs gives only those pairs."""
+ def test_tree_all_pairs_lca_return_subset(self):
test_pairs = [(0, 1), (0, 1), (1, 0)]
ans = dict(tree_all_pairs_lca(self.DG, 0, test_pairs))
assert (0, 1) in ans and (1, 0) in ans
assert len(ans) == 2
- def test_tree_all_pairs_lowest_common_ancestor3(self):
- """Specifying no pairs same as specifying all."""
+ def test_tree_all_pairs_lca(self):
all_pairs = chain(combinations(self.DG, 2), ((node, node) for node in
self.DG))
ans = dict(tree_all_pairs_lca(self.DG, 0, all_pairs))
self.assert_has_same_pairs(ans, self.ans)
- def test_tree_all_pairs_lowest_common_ancestor4(self):
- """Gives the right answer."""
+ def test_tree_all_pairs_gold_example(self):
ans = dict(tree_all_pairs_lca(self.DG))
self.assert_has_same_pairs(self.gold, ans)
- def test_tree_all_pairs_lowest_common_ancestor5(self):
- """Handles invalid input correctly."""
+ def test_tree_all_pairs_lca_invalid_input(self):
empty_digraph = tree_all_pairs_lca(nx.DiGraph())
pytest.raises(nx.NetworkXPointlessConcept, list, empty_digraph)
bad_pairs_digraph = tree_all_pairs_lca(self.DG, pairs=[(-1, -2)])
pytest.raises(nx.NodeNotFound, list, bad_pairs_digraph)
- def test_tree_all_pairs_lowest_common_ancestor6(self):
- """Works on subtrees."""
+ def test_tree_all_pairs_lca_subtrees(self):
ans = dict(tree_all_pairs_lca(self.DG, 1))
gold = {
pair: lca
@@ -92,8 +86,7 @@
}
self.assert_has_same_pairs(gold, ans)
- def test_tree_all_pairs_lowest_common_ancestor7(self):
- """Works on disconnected nodes."""
+ def test_tree_all_pairs_lca_disconnected_nodes(self):
G = nx.DiGraph()
G.add_node(1)
assert {(1, 1): 1} == dict(tree_all_pairs_lca(G))
@@ -104,8 +97,7 @@
pytest.raises(nx.NetworkXError, list, tree_all_pairs_lca(G))
- def test_tree_all_pairs_lowest_common_ancestor8(self):
- """Raises right errors if not a tree."""
+ def test_tree_all_pairs_lca_error_if_input_not_tree(self):
# Cycle
G = nx.DiGraph([(1, 2), (2, 1)])
pytest.raises(nx.NetworkXError, list, tree_all_pairs_lca(G))
@@ -113,27 +105,24 @@
G = nx.DiGraph([(0, 2), (1, 2)])
pytest.raises(nx.NetworkXError, list, tree_all_pairs_lca(G))
- def test_tree_all_pairs_lowest_common_ancestor9(self):
- """Test that pairs works correctly as a generator."""
+ def test_tree_all_pairs_lca_generator(self):
pairs = iter([(0, 1), (0, 1), (1, 0)])
some_pairs = dict(tree_all_pairs_lca(self.DG, 0, pairs))
assert (0, 1) in some_pairs and (1, 0) in some_pairs
assert len(some_pairs) == 2
- def test_tree_all_pairs_lowest_common_ancestor10(self):
- """Test that pairs not in the graph raises error."""
+ def test_tree_all_pairs_lca_nonexisting_pairs_exception(self):
lca = tree_all_pairs_lca(self.DG, 0, [(-1, -1)])
pytest.raises(nx.NodeNotFound, list, lca)
# check if node is None
lca = tree_all_pairs_lca(self.DG, None, [(-1, -1)])
pytest.raises(nx.NodeNotFound, list, lca)
- def test_tree_all_pairs_lowest_common_ancestor12(self):
- """Test that tree routine bails on DAGs."""
+ def test_tree_all_pairs_lca_routine_bails_on_DAGs(self):
G = nx.DiGraph([(3, 4), (5, 4)])
pytest.raises(nx.NetworkXError, list, tree_all_pairs_lca(G))
- def test_not_implemented_for(self):
+ def test_tree_all_pairs_lca_not_implemented(self):
NNI = nx.NetworkXNotImplemented
G = nx.Graph([(0, 1)])
with pytest.raises(NNI):
@@ -154,8 +143,7 @@
next(all_pairs_lca(G))
pytest.raises(NNI, nx.lowest_common_ancestor, G, 0, 1)
- def test_tree_all_pairs_lowest_common_ancestor13(self):
- """Test that it works on non-empty trees with no LCAs."""
+ def test_tree_all_pairs_lca_trees_without_LCAs(self):
G = nx.DiGraph()
G.add_node(3)
ans = list(tree_all_pairs_lca(G))
@@ -232,24 +220,20 @@
root_distance[get_pair(d1, a, b)] ==
root_distance[get_pair(d2, a, b)]
)
- def test_all_pairs_lowest_common_ancestor1(self):
- """Produces the correct results."""
+ def test_all_pairs_lca_gold_example(self):
self.assert_lca_dicts_same(dict(all_pairs_lca(self.DG)), self.gold)
- def test_all_pairs_lowest_common_ancestor2(self):
- """Produces the correct results when all pairs given."""
+ def test_all_pairs_lca_all_pairs_given(self):
all_pairs = list(product(self.DG.nodes(), self.DG.nodes()))
ans = all_pairs_lca(self.DG, pairs=all_pairs)
self.assert_lca_dicts_same(dict(ans), self.gold)
- def test_all_pairs_lowest_common_ancestor3(self):
- """Produces the correct results when all pairs given as a generator."""
+ def test_all_pairs_lca_generator(self):
all_pairs = product(self.DG.nodes(), self.DG.nodes())
ans = all_pairs_lca(self.DG, pairs=all_pairs)
self.assert_lca_dicts_same(dict(ans), self.gold)
- def test_all_pairs_lowest_common_ancestor4(self):
- """Graph with two roots."""
+ def test_all_pairs_lca_input_graph_with_two_roots(self):
G = self.DG.copy()
G.add_edge(9, 10)
G.add_edge(9, 4)
@@ -268,52 +252,43 @@
G.add_edge(-1, 0)
self.assert_lca_dicts_same(testing, gold, G)
- def test_all_pairs_lowest_common_ancestor5(self):
- """Test that pairs not in the graph raises error."""
+ def test_all_pairs_lca_nonexisting_pairs_exception(self):
pytest.raises(nx.NodeNotFound, all_pairs_lca, self.DG, [(-1, -1)])
- def test_all_pairs_lowest_common_ancestor6(self):
- """Test that pairs with no LCA specified emits nothing."""
+ def test_all_pairs_lca_pairs_without_lca(self):
G = self.DG.copy()
G.add_node(-1)
gen = all_pairs_lca(G, [(-1, -1), (-1, 0)])
assert dict(gen) == {(-1, -1): -1}
- def test_all_pairs_lowest_common_ancestor7(self):
- """Test that LCA on null graph bails."""
+ def test_all_pairs_lca_null_graph(self):
pytest.raises(nx.NetworkXPointlessConcept, all_pairs_lca, nx.DiGraph())
- def test_all_pairs_lowest_common_ancestor8(self):
- """Test that LCA on non-dags bails."""
+ def test_all_pairs_lca_non_dags(self):
pytest.raises(nx.NetworkXError, all_pairs_lca, nx.DiGraph([(3, 4), (4,
3)]))
- def test_all_pairs_lowest_common_ancestor9(self):
- """Test that it works on non-empty graphs with no LCAs."""
+ def test_all_pairs_lca_nonempty_graph_without_lca(self):
G = nx.DiGraph()
G.add_node(3)
ans = list(all_pairs_lca(G))
assert ans == [((3, 3), 3)]
- def test_all_pairs_lowest_common_ancestor10(self):
- """Test that it works on a small graph that previously revealed a bug
gh-4942"""
+ def test_all_pairs_lca_bug_gh4942(self):
G = nx.DiGraph([(0, 2), (1, 2), (2, 3)])
ans = list(all_pairs_lca(G))
assert len(ans) == 9
- def test_lowest_common_ancestor1(self):
- """Test that the one-pair function works on default."""
+ def test_all_pairs_lca_default_kwarg(self):
G = nx.DiGraph([(0, 1), (2, 1)])
sentinel = object()
assert nx.lowest_common_ancestor(G, 0, 2, default=sentinel) is sentinel
- def test_lowest_common_ancestor2(self):
- """Test that the one-pair function works on identity."""
+ def test_all_pairs_lca_identity(self):
G = nx.DiGraph()
G.add_node(3)
assert nx.lowest_common_ancestor(G, 3, 3) == 3
- def test_naive_lowest_common_ancestor1(self):
- """Test that the one-pair function works for issue #4574."""
+ def test_all_pairs_lca_issue_4574(self):
G = nx.DiGraph()
G.add_nodes_from(range(17))
G.add_edges_from(
@@ -339,8 +314,7 @@
assert nx.lowest_common_ancestor(G, 7, 9) == None
- def test_naive_lowest_common_ancestor2(self):
- """Test that the one-pair function works for issue #4942."""
+ def test_all_pairs_lca_one_pair_gh4942(self):
G = nx.DiGraph()
G.add_edge(0, 1)
G.add_edge(2, 0)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/tests/test_matching.py
new/networkx-2.8.8/networkx/algorithms/tests/test_matching.py
--- old/networkx-2.8.7/networkx/algorithms/tests/test_matching.py
2022-06-03 01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/algorithms/tests/test_matching.py
2022-11-01 19:53:50.000000000 +0100
@@ -450,7 +450,7 @@
assert not nx.is_matching(G, {(0, 0), (1, 2), (2, 3)})
# selfloop edge in G
G.add_edge(0, 0)
- assert not nx.is_matching(G, {(0, 0), (1, 2), (2, 3)})
+ assert not nx.is_matching(G, {(0, 0), (1, 2)})
def test_invalid_matching(self):
G = nx.path_graph(4)
@@ -476,6 +476,16 @@
G = nx.path_graph(4)
assert nx.is_maximal_matching(G, {0: 1, 1: 0, 2: 3, 3: 2})
+ def test_invalid_input(self):
+ error = nx.NetworkXError
+ G = nx.path_graph(4)
+ # edge to node not in G
+ raises(error, nx.is_maximal_matching, G, {(0, 5)})
+ raises(error, nx.is_maximal_matching, G, {(5, 0)})
+ # edge not a 2-tuple
+ raises(error, nx.is_maximal_matching, G, {(0, 1, 2), (2, 3)})
+ raises(error, nx.is_maximal_matching, G, {(0,), (2, 3)})
+
def test_valid(self):
G = nx.path_graph(4)
assert nx.is_maximal_matching(G, {(0, 1), (2, 3)})
@@ -483,6 +493,9 @@
def test_not_matching(self):
G = nx.path_graph(4)
assert not nx.is_maximal_matching(G, {(0, 1), (1, 2), (2, 3)})
+ assert not nx.is_maximal_matching(G, {(0, 3)})
+ G.add_edge(0, 0)
+ assert not nx.is_maximal_matching(G, {(0, 0)})
def test_not_maximal(self):
G = nx.path_graph(4)
@@ -511,8 +524,30 @@
assert nx.is_perfect_matching(G, {(1, 4), (0, 3), (5, 2)})
+ def test_invalid_input(self):
+ error = nx.NetworkXError
+ G = nx.path_graph(4)
+ # edge to node not in G
+ raises(error, nx.is_perfect_matching, G, {(0, 5)})
+ raises(error, nx.is_perfect_matching, G, {(5, 0)})
+ # edge not a 2-tuple
+ raises(error, nx.is_perfect_matching, G, {(0, 1, 2), (2, 3)})
+ raises(error, nx.is_perfect_matching, G, {(0,), (2, 3)})
+
+ def test_selfloops(self):
+ error = nx.NetworkXError
+ G = nx.path_graph(4)
+ # selfloop for node not in G
+ raises(error, nx.is_perfect_matching, G, {(5, 5), (2, 3)})
+ # selfloop edge not in G
+ assert not nx.is_perfect_matching(G, {(0, 0), (1, 2), (2, 3)})
+ # selfloop edge in G
+ G.add_edge(0, 0)
+ assert not nx.is_perfect_matching(G, {(0, 0), (1, 2)})
+
def test_not_matching(self):
G = nx.path_graph(4)
+ assert not nx.is_perfect_matching(G, {(0, 3)})
assert not nx.is_perfect_matching(G, {(0, 1), (1, 2), (2, 3)})
def test_maximal_but_not_perfect(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/tests/test_richclub.py
new/networkx-2.8.8/networkx/algorithms/tests/test_richclub.py
--- old/networkx-2.8.7/networkx/algorithms/tests/test_richclub.py
2022-06-03 01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/algorithms/tests/test_richclub.py
2022-11-01 18:27:51.000000000 +0100
@@ -80,6 +80,17 @@
nx.rich_club_coefficient(G)
+def test_rich_club_selfloop():
+ G = nx.Graph() # or DiGraph, MultiGraph, MultiDiGraph, etc
+ G.add_edge(1, 1) # self loop
+ G.add_edge(1, 2)
+ with pytest.raises(
+ Exception,
+ match="rich_club_coefficient is not implemented for " "graphs with
self loops.",
+ ):
+ nx.rich_club_coefficient(G)
+
+
# def test_richclub2_normalized():
# T = nx.balanced_tree(2,10)
# rcNorm = nx.richclub.rich_club_coefficient(T,Q=2)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/tests/test_structuralholes.py
new/networkx-2.8.8/networkx/algorithms/tests/test_structuralholes.py
--- old/networkx-2.8.7/networkx/algorithms/tests/test_structuralholes.py
2022-06-03 01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/algorithms/tests/test_structuralholes.py
2022-11-01 19:53:55.000000000 +0100
@@ -18,7 +18,7 @@
"""
- def setup(self):
+ def setup_method(self):
self.D = nx.DiGraph()
self.D.add_edges_from([(0, 1), (0, 2), (1, 0), (2, 1)])
self.D_weights = {(0, 1): 2, (0, 2): 2, (1, 0): 1, (2, 1): 1}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/algorithms/tree/tests/test_mst.py
new/networkx-2.8.8/networkx/algorithms/tree/tests/test_mst.py
--- old/networkx-2.8.7/networkx/algorithms/tree/tests/test_mst.py
2022-06-08 18:11:41.000000000 +0200
+++ new/networkx-2.8.8/networkx/algorithms/tree/tests/test_mst.py
2022-11-01 19:53:55.000000000 +0100
@@ -283,7 +283,7 @@
Order of Increasing Cost
"""
- def setup(self):
+ def setup_method(self):
# Original Graph
edges = [(0, 1, 5), (1, 2, 4), (1, 4, 6), (2, 3, 5), (2, 4, 7), (3, 4,
3)]
self.G = nx.Graph()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/classes/tests/test_coreviews.py
new/networkx-2.8.8/networkx/classes/tests/test_coreviews.py
--- old/networkx-2.8.7/networkx/classes/tests/test_coreviews.py 2022-09-30
18:57:13.000000000 +0200
+++ new/networkx-2.8.8/networkx/classes/tests/test_coreviews.py 2022-11-01
19:53:55.000000000 +0100
@@ -7,7 +7,7 @@
class TestAtlasView:
# node->data
- def setup(self):
+ def setup_method(self):
self.d = {0: {"color": "blue", "weight": 1.2}, 1: {}, 2: {"color": 1}}
self.av = nx.classes.coreviews.AtlasView(self.d)
@@ -62,7 +62,7 @@
class TestAdjacencyView:
# node->nbr->data
- def setup(self):
+ def setup_method(self):
dd = {"color": "blue", "weight": 1.2}
self.nd = {0: dd, 1: {}, 2: {"color": 1}}
self.adj = {3: self.nd, 0: {3: dd}, 1: {}, 2: {3: {"color": 1}}}
@@ -114,7 +114,7 @@
class TestMultiAdjacencyView(TestAdjacencyView):
# node->nbr->key->data
- def setup(self):
+ def setup_method(self):
dd = {"color": "blue", "weight": 1.2}
self.kd = {0: dd, 1: {}, 2: {"color": 1}}
self.nd = {3: self.kd, 0: {3: dd}, 1: {0: {}}, 2: {3: {"color": 1}}}
@@ -143,7 +143,7 @@
class TestUnionAtlas:
# node->data
- def setup(self):
+ def setup_method(self):
self.s = {0: {"color": "blue", "weight": 1.2}, 1: {}, 2: {"color": 1}}
self.p = {3: {"color": "blue", "weight": 1.2}, 4: {}, 2: {"watch": 2}}
self.av = nx.classes.coreviews.UnionAtlas(self.s, self.p)
@@ -199,7 +199,7 @@
class TestUnionAdjacency:
# node->nbr->data
- def setup(self):
+ def setup_method(self):
dd = {"color": "blue", "weight": 1.2}
self.nd = {0: dd, 1: {}, 2: {"color": 1}}
self.s = {3: self.nd, 0: {}, 1: {}, 2: {3: {"color": 1}}}
@@ -249,7 +249,7 @@
class TestUnionMultiInner(TestUnionAdjacency):
# nbr->key->data
- def setup(self):
+ def setup_method(self):
dd = {"color": "blue", "weight": 1.2}
self.kd = {7: {}, "ekey": {}, 9: {"color": 1}}
self.s = {3: self.kd, 0: {7: dd}, 1: {}, 2: {"key": {"color": 1}}}
@@ -284,7 +284,7 @@
class TestUnionMultiAdjacency(TestUnionAdjacency):
# node->nbr->key->data
- def setup(self):
+ def setup_method(self):
dd = {"color": "blue", "weight": 1.2}
self.kd = {7: {}, 8: {}, 9: {"color": 1}}
self.nd = {3: self.kd, 0: {9: dd}, 1: {8: {}}, 2: {9: {"color": 1}}}
@@ -314,7 +314,7 @@
class TestFilteredGraphs:
- def setup(self):
+ def setup_method(self):
self.Graphs = [nx.Graph, nx.DiGraph, nx.MultiGraph, nx.MultiDiGraph]
def test_hide_show_nodes(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/classes/tests/test_digraph.py
new/networkx-2.8.8/networkx/classes/tests/test_digraph.py
--- old/networkx-2.8.7/networkx/classes/tests/test_digraph.py 2022-07-18
22:43:59.000000000 +0200
+++ new/networkx-2.8.8/networkx/classes/tests/test_digraph.py 2022-11-01
18:28:29.000000000 +0100
@@ -244,6 +244,8 @@
assert G.adj == {0: {1: {}}, 1: {}}
assert G.succ == {0: {1: {}}, 1: {}}
assert G.pred == {0: {}, 1: {0: {}}}
+ with pytest.raises(ValueError, match="None cannot be a node"):
+ G.add_edge(None, 3)
def test_add_edges_from(self):
G = self.Graph()
@@ -258,6 +260,8 @@
G.add_edges_from([(0, 1, 2, 3)]) # too many in tuple
with pytest.raises(TypeError):
G.add_edges_from([0]) # not a tuple
+ with pytest.raises(ValueError, match="None cannot be a node"):
+ G.add_edges_from([(None, 3), (3, 2)])
def test_remove_edge(self):
G = self.K3.copy()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/networkx/classes/tests/test_graph.py
new/networkx-2.8.8/networkx/classes/tests/test_graph.py
--- old/networkx-2.8.7/networkx/classes/tests/test_graph.py 2022-08-21
18:29:48.000000000 +0200
+++ new/networkx-2.8.8/networkx/classes/tests/test_graph.py 2022-11-01
18:28:10.000000000 +0100
@@ -683,6 +683,9 @@
G = self.Graph()
G.add_edge(*(0, 1))
assert G.adj == {0: {1: {}}, 1: {0: {}}}
+ G = self.Graph()
+ with pytest.raises(ValueError):
+ G.add_edge(None, "anything")
def test_add_edges_from(self):
G = self.Graph()
@@ -706,6 +709,8 @@
G.add_edges_from([(0, 1, 2, 3)]) # too many in tuple
with pytest.raises(TypeError):
G.add_edges_from([0]) # not a tuple
+ with pytest.raises(ValueError):
+ G.add_edges_from([(None, 3), (3, 2)]) # None cannot be a node
def test_remove_edge(self):
G = self.K3.copy()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/classes/tests/test_graphviews.py
new/networkx-2.8.8/networkx/classes/tests/test_graphviews.py
--- old/networkx-2.8.7/networkx/classes/tests/test_graphviews.py
2022-09-30 18:57:13.000000000 +0200
+++ new/networkx-2.8.8/networkx/classes/tests/test_graphviews.py
2022-11-01 19:53:55.000000000 +0100
@@ -7,7 +7,7 @@
class TestReverseView:
- def setup(self):
+ def setup_method(self):
self.G = nx.path_graph(9, create_using=nx.DiGraph())
self.rv = nx.reverse_view(self.G)
@@ -55,7 +55,7 @@
class TestMultiReverseView:
- def setup(self):
+ def setup_method(self):
self.G = nx.path_graph(9, create_using=nx.MultiDiGraph())
self.G.add_edge(4, 5)
self.rv = nx.reverse_view(self.G)
@@ -98,7 +98,7 @@
class TestToDirected:
- def setup(self):
+ def setup_method(self):
self.G = nx.path_graph(9)
self.dv = nx.to_directed(self.G)
self.MG = nx.path_graph(9, create_using=nx.MultiGraph())
@@ -137,7 +137,7 @@
class TestToUndirected:
- def setup(self):
+ def setup_method(self):
self.DG = nx.path_graph(9, create_using=nx.DiGraph())
self.uv = nx.to_undirected(self.DG)
self.MDG = nx.path_graph(9, create_using=nx.MultiDiGraph())
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/classes/tests/test_multidigraph.py
new/networkx-2.8.8/networkx/classes/tests/test_multidigraph.py
--- old/networkx-2.8.7/networkx/classes/tests/test_multidigraph.py
2022-07-18 22:43:59.000000000 +0200
+++ new/networkx-2.8.8/networkx/classes/tests/test_multidigraph.py
2022-11-01 18:28:24.000000000 +0100
@@ -285,6 +285,8 @@
assert G._adj == {0: {1: {0: {}}}, 1: {}}
assert G._succ == {0: {1: {0: {}}}, 1: {}}
assert G._pred == {0: {}, 1: {0: {0: {}}}}
+ with pytest.raises(ValueError, match="None cannot be a node"):
+ G.add_edge(None, 3)
def test_add_edges_from(self):
G = self.Graph()
@@ -321,6 +323,8 @@
pytest.raises(nx.NetworkXError, G.add_edges_from, [(0, 1, 2, 3, 4)])
# not a tuple
pytest.raises(TypeError, G.add_edges_from, [0])
+ with pytest.raises(ValueError, match="None cannot be a node"):
+ G.add_edges_from([(None, 3), (3, 2)])
def test_remove_edge(self):
G = self.K3
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/classes/tests/test_multigraph.py
new/networkx-2.8.8/networkx/classes/tests/test_multigraph.py
--- old/networkx-2.8.7/networkx/classes/tests/test_multigraph.py
2022-07-18 22:43:59.000000000 +0200
+++ new/networkx-2.8.8/networkx/classes/tests/test_multigraph.py
2022-11-01 18:28:01.000000000 +0100
@@ -303,6 +303,9 @@
G = self.Graph()
G.add_edge(*(0, 1))
assert G.adj == {0: {1: {0: {}}}, 1: {0: {0: {}}}}
+ G = self.Graph()
+ with pytest.raises(ValueError):
+ G.add_edge(None, "anything")
def test_add_edge_conflicting_key(self):
G = self.Graph()
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/networkx/drawing/tests/test_pylab.py
new/networkx-2.8.8/networkx/drawing/tests/test_pylab.py
--- old/networkx-2.8.7/networkx/drawing/tests/test_pylab.py 2022-06-03
01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/drawing/tests/test_pylab.py 2022-11-01
19:53:50.000000000 +0100
@@ -485,18 +485,19 @@
def test_alpha_iter():
pos = nx.random_layout(barbell)
+ fig = plt.figure()
# with fewer alpha elements than nodes
- plt.subplot(131)
+ fig.add_subplot(131) # Each test in a new axis object
nx.draw_networkx_nodes(barbell, pos, alpha=[0.1, 0.2])
# with equal alpha elements and nodes
num_nodes = len(barbell.nodes)
alpha = [x / num_nodes for x in range(num_nodes)]
colors = range(num_nodes)
- plt.subplot(132)
+ fig.add_subplot(132)
nx.draw_networkx_nodes(barbell, pos, node_color=colors, alpha=alpha)
# with more alpha elements than nodes
alpha.append(1)
- plt.subplot(133)
+ fig.add_subplot(133)
nx.draw_networkx_nodes(barbell, pos, alpha=alpha)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/generators/tests/test_expanders.py
new/networkx-2.8.8/networkx/generators/tests/test_expanders.py
--- old/networkx-2.8.7/networkx/generators/tests/test_expanders.py
2022-06-03 01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/generators/tests/test_expanders.py
2022-11-01 18:27:41.000000000 +0100
@@ -5,69 +5,83 @@
import pytest
import networkx as nx
-from networkx import adjacency_matrix, number_of_nodes
-from networkx.generators.expanders import (
- chordal_cycle_graph,
- margulis_gabber_galil_graph,
- paley_graph,
-)
-
-
-def test_margulis_gabber_galil_graph():
- for n in 2, 3, 5, 6, 10:
- g = margulis_gabber_galil_graph(n)
- assert number_of_nodes(g) == n * n
- for node in g:
- assert g.degree(node) == 8
- assert len(node) == 2
- for i in node:
- assert int(i) == i
- assert 0 <= i < n
+
[email protected]("n", (2, 3, 5, 6, 10))
+def test_margulis_gabber_galil_graph_properties(n):
+ g = nx.margulis_gabber_galil_graph(n)
+ assert g.number_of_nodes() == n * n
+ for node in g:
+ assert g.degree(node) == 8
+ assert len(node) == 2
+ for i in node:
+ assert int(i) == i
+ assert 0 <= i < n
+
+
[email protected]("n", (2, 3, 5, 6, 10))
+def test_margulis_gabber_galil_graph_eigvals(n):
np = pytest.importorskip("numpy")
sp = pytest.importorskip("scipy")
import scipy.linalg
+ g = nx.margulis_gabber_galil_graph(n)
# Eigenvalues are already sorted using the scipy eigvalsh,
# but the implementation in numpy does not guarantee order.
- w = sorted(sp.linalg.eigvalsh(adjacency_matrix(g).A))
+ w = sorted(sp.linalg.eigvalsh(nx.adjacency_matrix(g).toarray()))
assert w[-2] < 5 * np.sqrt(2)
-def test_chordal_cycle_graph():
[email protected]("p", (3, 5, 7, 11)) # Primes
+def test_chordal_cycle_graph(p):
"""Test for the :func:`networkx.chordal_cycle_graph` function."""
- primes = [3, 5, 7, 11]
- for p in primes:
- G = chordal_cycle_graph(p)
- assert len(G) == p
- # TODO The second largest eigenvalue should be smaller than a constant,
- # independent of the number of nodes in the graph:
- #
- # eigs = sorted(sp.linalg.eigvalsh(adjacency_matrix(G).A))
- # assert_less(eigs[-2], ...)
- #
+ G = nx.chordal_cycle_graph(p)
+ assert len(G) == p
+ # TODO The second largest eigenvalue should be smaller than a constant,
+ # independent of the number of nodes in the graph:
+ #
+ # eigs = sorted(sp.linalg.eigvalsh(nx.adjacency_matrix(G).toarray()))
+ # assert_less(eigs[-2], ...)
+ #
-def test_paley_graph():
[email protected]("p", (3, 5, 7, 11, 13)) # Primes
+def test_paley_graph(p):
"""Test for the :func:`networkx.paley_graph` function."""
- primes = [3, 5, 7, 11, 13]
- for p in primes:
- G = paley_graph(p)
- # G has p nodes
- assert len(G) == p
- # G is (p-1)/2-regular
- in_degrees = {G.in_degree(node) for node in G.nodes}
- out_degrees = {G.out_degree(node) for node in G.nodes}
- assert len(in_degrees) == 1 and in_degrees.pop() == (p - 1) // 2
- assert len(out_degrees) == 1 and out_degrees.pop() == (p - 1) // 2
-
- # If p = 1 mod 4, -1 is a square mod 4 and therefore the
- # edge in the Paley graph are symmetric.
- if p % 4 == 1:
- for (u, v) in G.edges:
- assert (v, u) in G.edges
-
-
-def test_margulis_gabber_galil_graph_badinput():
- pytest.raises(nx.NetworkXError, margulis_gabber_galil_graph, 3,
nx.DiGraph())
- pytest.raises(nx.NetworkXError, margulis_gabber_galil_graph, 3, nx.Graph())
+ G = nx.paley_graph(p)
+ # G has p nodes
+ assert len(G) == p
+ # G is (p-1)/2-regular
+ in_degrees = {G.in_degree(node) for node in G.nodes}
+ out_degrees = {G.out_degree(node) for node in G.nodes}
+ assert len(in_degrees) == 1 and in_degrees.pop() == (p - 1) // 2
+ assert len(out_degrees) == 1 and out_degrees.pop() == (p - 1) // 2
+
+ # If p = 1 mod 4, -1 is a square mod 4 and therefore the
+ # edge in the Paley graph are symmetric.
+ if p % 4 == 1:
+ for (u, v) in G.edges:
+ assert (v, u) in G.edges
+
+
[email protected]("graph_type", (nx.Graph, nx.DiGraph, nx.MultiDiGraph))
+def test_margulis_gabber_galil_graph_badinput(graph_type):
+ with pytest.raises(
+ nx.NetworkXError, match="`create_using` must be an undirected
multigraph"
+ ):
+ nx.margulis_gabber_galil_graph(3, create_using=graph_type)
+
+
[email protected]("graph_type", (nx.Graph, nx.DiGraph, nx.MultiDiGraph))
+def test_chordal_cycle_graph_badinput(graph_type):
+ with pytest.raises(
+ nx.NetworkXError, match="`create_using` must be an undirected
multigraph"
+ ):
+ nx.chordal_cycle_graph(3, create_using=graph_type)
+
+
+def test_paley_graph_badinput():
+ with pytest.raises(
+ nx.NetworkXError, match="`create_using` cannot be a multigraph."
+ ):
+ nx.paley_graph(3, create_using=nx.MultiGraph)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/generators/tests/test_trees.py
new/networkx-2.8.8/networkx/generators/tests/test_trees.py
--- old/networkx-2.8.7/networkx/generators/tests/test_trees.py 2022-06-03
01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/generators/tests/test_trees.py 2022-11-01
18:28:15.000000000 +0100
@@ -86,3 +86,16 @@
"""Tests that a random tree is in fact a tree."""
T = nx.random_tree(10, seed=1234)
assert nx.is_tree(T)
+
+
+def test_random_tree_n_zero():
+ """Tests if n = 0 then the NetworkXPointlessConcept exception is raised."""
+ with pytest.raises(nx.NetworkXPointlessConcept):
+ T = nx.random_tree(0, seed=1234)
+
+
+def test_random_tree_using_generator():
+ """Tests that creating a ramdom tree with a generator works"""
+ G = nx.Graph()
+ T = nx.random_tree(10, seed=1234, create_using=G)
+ assert nx.is_tree(T)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/linalg/algebraicconnectivity.py
new/networkx-2.8.8/networkx/linalg/algebraicconnectivity.py
--- old/networkx-2.8.7/networkx/linalg/algebraicconnectivity.py 2022-06-03
01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/linalg/algebraicconnectivity.py 2022-11-01
18:28:59.000000000 +0100
@@ -460,6 +460,18 @@
See Also
--------
laplacian_matrix
+
+ Examples
+ --------
+ Given a connected graph the signs of the values in the Fiedler vector can
be
+ used to partition the graph into two components.
+
+ >>> G = nx.barbell_graph(5, 0)
+ >>> nx.fiedler_vector(G, normalized=True, seed=1)
+ array([-0.32864129, -0.32864129, -0.32864129, -0.32864129, -0.26072899,
+ 0.26072899, 0.32864129, 0.32864129, 0.32864129, 0.32864129])
+
+ The connected components are the two 5-node cliques of the barbell graph.
"""
import numpy as np
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/networkx/readwrite/adjlist.py
new/networkx-2.8.8/networkx/readwrite/adjlist.py
--- old/networkx-2.8.7/networkx/readwrite/adjlist.py 2022-06-03
01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/readwrite/adjlist.py 2022-11-01
18:29:12.000000000 +0100
@@ -60,6 +60,14 @@
--------
write_adjlist, read_adjlist
+ Notes
+ -----
+ The default `delimiter=" "` will result in unexpected results if node
names contain
+ whitespace characters. To avoid this problem, specify an alternate
delimiter when spaces are
+ valid in node names.
+
+ NB: This option is not available for data that isn't user-generated.
+
"""
directed = G.is_directed()
seen = set()
@@ -113,6 +121,11 @@
Notes
-----
+ The default `delimiter=" "` will result in unexpected results if node
names contain
+ whitespace characters. To avoid this problem, specify an alternate
delimiter when spaces are
+ valid in node names.
+ NB: This option is not available for data that isn't user-generated.
+
This format does not store graph, node, or edge data.
See Also
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/readwrite/json_graph/tests/test_adjacency.py
new/networkx-2.8.8/networkx/readwrite/json_graph/tests/test_adjacency.py
--- old/networkx-2.8.7/networkx/readwrite/json_graph/tests/test_adjacency.py
2022-06-03 01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/readwrite/json_graph/tests/test_adjacency.py
2022-11-01 18:27:29.000000000 +0100
@@ -10,7 +10,7 @@
def test_graph(self):
G = nx.path_graph(4)
H = adjacency_graph(adjacency_data(G))
- nx.is_isomorphic(G, H)
+ assert nx.is_isomorphic(G, H)
def test_graph_attributes(self):
G = nx.path_graph(4)
@@ -36,7 +36,7 @@
nx.add_path(G, [1, 2, 3])
H = adjacency_graph(adjacency_data(G))
assert H.is_directed()
- nx.is_isomorphic(G, H)
+ assert nx.is_isomorphic(G, H)
def test_multidigraph(self):
G = nx.MultiDiGraph()
@@ -50,7 +50,7 @@
G.add_edge(1, 2, key="first")
G.add_edge(1, 2, key="second", color="blue")
H = adjacency_graph(adjacency_data(G))
- nx.is_isomorphic(G, H)
+ assert nx.is_isomorphic(G, H)
assert H[1][2]["second"]["color"] == "blue"
def test_exception(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/readwrite/json_graph/tests/test_cytoscape.py
new/networkx-2.8.8/networkx/readwrite/json_graph/tests/test_cytoscape.py
--- old/networkx-2.8.7/networkx/readwrite/json_graph/tests/test_cytoscape.py
2022-09-30 18:57:13.000000000 +0200
+++ new/networkx-2.8.8/networkx/readwrite/json_graph/tests/test_cytoscape.py
2022-11-01 19:53:50.000000000 +0100
@@ -27,7 +27,7 @@
def test_graph():
G = nx.path_graph(4)
H = cytoscape_graph(cytoscape_data(G))
- nx.is_isomorphic(G, H)
+ assert nx.is_isomorphic(G, H)
def test_input_data_is_not_modified_when_building_graph():
@@ -69,7 +69,7 @@
nx.add_path(G, [1, 2, 3])
H = cytoscape_graph(cytoscape_data(G))
assert H.is_directed()
- nx.is_isomorphic(G, H)
+ assert nx.is_isomorphic(G, H)
def test_multidigraph():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/readwrite/json_graph/tests/test_node_link.py
new/networkx-2.8.8/networkx/readwrite/json_graph/tests/test_node_link.py
--- old/networkx-2.8.7/networkx/readwrite/json_graph/tests/test_node_link.py
2022-08-21 18:51:21.000000000 +0200
+++ new/networkx-2.8.8/networkx/readwrite/json_graph/tests/test_node_link.py
2022-11-01 18:27:29.000000000 +0100
@@ -107,7 +107,7 @@
G.add_edge(1, 2, key="first")
G.add_edge(1, 2, key="second", color="blue")
H = node_link_graph(node_link_data(G))
- nx.is_isomorphic(G, H)
+ assert nx.is_isomorphic(G, H)
assert H[1][2]["second"]["color"] == "blue"
def test_graph_with_tuple_nodes(self):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/readwrite/json_graph/tests/test_tree.py
new/networkx-2.8.8/networkx/readwrite/json_graph/tests/test_tree.py
--- old/networkx-2.8.7/networkx/readwrite/json_graph/tests/test_tree.py
2022-09-30 18:57:13.000000000 +0200
+++ new/networkx-2.8.8/networkx/readwrite/json_graph/tests/test_tree.py
2022-11-01 19:53:50.000000000 +0100
@@ -13,7 +13,7 @@
G.add_edge(1, 3, foo=10)
G.add_edge(3, 4, foo=10)
H = tree_graph(tree_data(G, 1))
- nx.is_isomorphic(G, H)
+ assert nx.is_isomorphic(G, H)
def test_graph_attributes():
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/networkx/tests/test_relabel.py
new/networkx-2.8.8/networkx/tests/test_relabel.py
--- old/networkx-2.8.7/networkx/tests/test_relabel.py 2022-09-30
18:57:13.000000000 +0200
+++ new/networkx-2.8.8/networkx/tests/test_relabel.py 2022-11-01
19:53:50.000000000 +0100
@@ -180,10 +180,10 @@
K5 = nx.complete_graph(4)
G = nx.complete_graph(4)
G = nx.relabel_nodes(G, {i: i + 1 for i in range(4)}, copy=False)
- nx.is_isomorphic(K5, G)
+ assert nx.is_isomorphic(K5, G)
G = nx.complete_graph(4)
G = nx.relabel_nodes(G, {i: i - 1 for i in range(4)}, copy=False)
- nx.is_isomorphic(K5, G)
+ assert nx.is_isomorphic(K5, G)
def test_relabel_selfloop(self):
G = nx.DiGraph([(1, 1), (1, 2), (2, 3)])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/networkx-2.8.7/networkx/utils/tests/test_mapped_queue.py
new/networkx-2.8.8/networkx/utils/tests/test_mapped_queue.py
--- old/networkx-2.8.7/networkx/utils/tests/test_mapped_queue.py
2022-06-03 01:39:15.000000000 +0200
+++ new/networkx-2.8.8/networkx/utils/tests/test_mapped_queue.py
2022-11-01 19:53:55.000000000 +0100
@@ -40,7 +40,7 @@
class TestMappedQueue:
- def setup(self):
+ def setup_method(self):
pass
def _check_map(self, q):
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/networkx.egg-info/PKG-INFO
new/networkx-2.8.8/networkx.egg-info/PKG-INFO
--- old/networkx-2.8.7/networkx.egg-info/PKG-INFO 2022-10-01
22:51:49.000000000 +0200
+++ new/networkx-2.8.8/networkx.egg-info/PKG-INFO 2022-11-01
21:31:20.000000000 +0100
@@ -1,6 +1,6 @@
Metadata-Version: 2.1
Name: networkx
-Version: 2.8.7
+Version: 2.8.8
Summary: Python package for creating and manipulating graphs and networks
Home-page: https://networkx.org/
Author: Aric Hagberg
@@ -24,6 +24,7 @@
Classifier: Programming Language :: Python :: 3.8
Classifier: Programming Language :: Python :: 3.9
Classifier: Programming Language :: Python :: 3.10
+Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3 :: Only
Classifier: Topic :: Software Development :: Libraries :: Python Modules
Classifier: Topic :: Scientific/Engineering :: Bio-Informatics
@@ -41,8 +42,8 @@
NetworkX
========
-.. image::
https://github.com/networkx/networkx/workflows/test/badge.svg?tag=networkx-2.8.7
- :target:
https://github.com/networkx/networkx/actions?query=branch%3Anetworkx-2.8.7
+.. image::
https://github.com/networkx/networkx/workflows/test/badge.svg?tag=networkx-2.8.8
+ :target:
https://github.com/networkx/networkx/actions?query=branch%3Anetworkx-2.8.8
.. image:: https://codecov.io/gh/networkx/networkx/branch/main/graph/badge.svg
:target: https://app.codecov.io/gh/networkx/networkx/branch/main
@@ -59,7 +60,7 @@
- **Mailing list:** https://groups.google.com/forum/#!forum/networkx-discuss
- **Source:** https://github.com/networkx/networkx
- **Bug reports:** https://github.com/networkx/networkx/issues
-- **Report a security vulnerability:** https://tidelift.com/docs/security
+- **Report a security vulnerability:** https://tidelift.com/security
- **Tutorial:** https://networkx.org/documentation/latest/tutorial.html
- **GitHub Discussions:** https://github.com/networkx/networkx/discussions
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/networkx.egg-info/SOURCES.txt
new/networkx-2.8.8/networkx.egg-info/SOURCES.txt
--- old/networkx-2.8.7/networkx.egg-info/SOURCES.txt 2022-10-01
22:51:49.000000000 +0200
+++ new/networkx-2.8.8/networkx.egg-info/SOURCES.txt 2022-11-01
21:31:20.000000000 +0100
@@ -170,6 +170,7 @@
doc/release/release_2.8.5.rst
doc/release/release_2.8.6.rst
doc/release/release_2.8.7.rst
+doc/release/release_2.8.8.rst
doc/release/release_2.8.rst
doc/release/release_dev.rst
doc/release/release_template.rst
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/networkx.egg-info/requires.txt
new/networkx-2.8.8/networkx.egg-info/requires.txt
--- old/networkx-2.8.7/networkx.egg-info/requires.txt 2022-10-01
22:51:49.000000000 +0200
+++ new/networkx-2.8.8/networkx.egg-info/requires.txt 2022-11-01
21:31:20.000000000 +0100
@@ -7,14 +7,14 @@
[developer]
pre-commit>=2.20
-mypy>=0.981
+mypy>=0.982
[doc]
-sphinx>=5
-pydata-sphinx-theme>=0.9
-sphinx-gallery>=0.10
-numpydoc>=1.4
-pillow>=9.1
+sphinx>=5.2
+pydata-sphinx-theme>=0.11
+sphinx-gallery>=0.11
+numpydoc>=1.5
+pillow>=9.2
nb2plots>=0.6
texext>=0.6.6
@@ -25,6 +25,6 @@
sympy>=1.10
[test]
-pytest>=7.1
-pytest-cov>=3.0
+pytest>=7.2
+pytest-cov>=4.0
codecov>=2.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/requirements/developer.txt
new/networkx-2.8.8/requirements/developer.txt
--- old/networkx-2.8.7/requirements/developer.txt 2022-09-30
18:57:24.000000000 +0200
+++ new/networkx-2.8.8/requirements/developer.txt 2022-11-01
18:27:15.000000000 +0100
@@ -1,2 +1,2 @@
pre-commit>=2.20
-mypy>=0.981
+mypy>=0.982
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/requirements/doc.txt
new/networkx-2.8.8/requirements/doc.txt
--- old/networkx-2.8.7/requirements/doc.txt 2022-06-10 16:44:40.000000000
+0200
+++ new/networkx-2.8.8/requirements/doc.txt 2022-11-01 19:53:50.000000000
+0100
@@ -1,7 +1,7 @@
-sphinx>=5
-pydata-sphinx-theme>=0.9
-sphinx-gallery>=0.10
-numpydoc>=1.4
-pillow>=9.1
+sphinx>=5.2
+pydata-sphinx-theme>=0.11
+sphinx-gallery>=0.11
+numpydoc>=1.5
+pillow>=9.2
nb2plots>=0.6
texext>=0.6.6
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/requirements/test.txt
new/networkx-2.8.8/requirements/test.txt
--- old/networkx-2.8.7/requirements/test.txt 2022-04-09 19:03:19.000000000
+0200
+++ new/networkx-2.8.8/requirements/test.txt 2022-11-01 19:53:55.000000000
+0100
@@ -1,3 +1,3 @@
-pytest>=7.1
-pytest-cov>=3.0
+pytest>=7.2
+pytest-cov>=4.0
codecov>=2.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/networkx-2.8.7/setup.py new/networkx-2.8.8/setup.py
--- old/networkx-2.8.7/setup.py 2022-09-30 18:57:13.000000000 +0200
+++ new/networkx-2.8.8/setup.py 2022-11-01 19:53:50.000000000 +0100
@@ -48,6 +48,7 @@
"Programming Language :: Python :: 3.8",
"Programming Language :: Python :: 3.9",
"Programming Language :: Python :: 3.10",
+ "Programming Language :: Python :: 3.11",
"Programming Language :: Python :: 3 :: Only",
"Topic :: Software Development :: Libraries :: Python Modules",
"Topic :: Scientific/Engineering :: Bio-Informatics",