Skip to content

Commit

Permalink
Trac #26326: Upgrade networkx to 2.2, add self tests, and update rand…
Browse files Browse the repository at this point in the history
…om seed format

Note that self tests require `nose` which is optional only.

Also, the random seeds are not passed as integers, but as
`random.Random` instances, see https://networkx.github.io/documentation/
stable/release/release_2.2.html#improvements

Zipball: https://files.pythonhosted.org/packages/f3/f4/7e20ef40b11847819
1cec0b58c3192f822cace858c19505c7670961b76b2/networkx-2.2.zip

URL: https://trac.sagemath.org/26326
Reported by: tmonteil
Ticket author(s): Thierry Monteil, Dima Pasechnik
Reviewer(s): Volker Braun, Dima Pasechnik
  • Loading branch information
Release Manager authored and vbraun committed Jan 10, 2019
2 parents 71f5ae8 + 8d125d0 commit e9df9ef
Show file tree
Hide file tree
Showing 8 changed files with 113 additions and 61 deletions.
6 changes: 3 additions & 3 deletions build/pkgs/networkx/checksums.ini
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
tarball=networkx-VERSION.zip
sha1=a481bea7b41c0d6af191c7d2bcde56d75da20b3e
md5=4a2c2a62dfc46ba7d594daca7c834995
cksum=1070647523
sha1=a68f8faa3726c220b93d68cfa28bed24874ba3fc
md5=82608a3686fb3e61f20cf13bfd3c1b4a
cksum=539980282
2 changes: 1 addition & 1 deletion build/pkgs/networkx/package-version.txt
Original file line number Diff line number Diff line change
@@ -1 +1 @@
2.1
2.2
22 changes: 22 additions & 0 deletions build/pkgs/networkx/spkg-check
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
if [ -z "$SAGE_LOCAL" ]; then
echo >&2 "SAGE_LOCAL undefined ... exiting"
echo >&2 "Maybe run 'sage --sh'?"
exit 1
fi

cd src

if ! command -v nosetests ; then
echo >&2 'Testing networkx requires the package nose to be installed'
exit 1
fi

echo "Testing networkx..."

nosetests networkx -v

if [ $? -ne 0 ]; then
echo >&2 "Error running self tests."
exit 1
fi

29 changes: 17 additions & 12 deletions src/sage/graphs/digraph_generators.py
Original file line number Diff line number Diff line change
Expand Up @@ -64,6 +64,7 @@
from six.moves import range
from sage.cpython.string import bytes_to_str

import sys
from sage.misc.randstate import current_randstate
from sage.graphs.digraph import DiGraph

Expand Down Expand Up @@ -1101,18 +1102,20 @@ def RandomDirectedGN(self, n, kernel=lambda x:x, seed=None):
INPUT:
- ``n`` - number of vertices.
- ``n`` - number of vertices.
- ``kernel`` - the attachment kernel
- ``kernel`` - the attachment kernel.
- ``seed`` - for the random number generator
- ``seed`` - a ``random.Random`` seed or a Python ``int`` for the random
number generator (default: ``None``).
EXAMPLES::
sage: D = digraphs.RandomDirectedGN(25)
sage: D.edges(labels=False)
[(1, 0), (2, 0), (3, 1), (4, 0), (5, 0), (6, 1), (7, 0), (8, 3), (9, 0), (10, 8), (11, 3), (12, 9), (13, 8), (14, 0), (15, 11), (16, 11), (17, 5), (18, 11), (19, 6), (20, 5), (21, 14), (22, 5), (23, 18), (24, 11)]
[(1, 0), (2, 0), (3, 2), (4, 2), (5, 4), (6, 3), (7, 0), (8, 4), (9, 4), (10, 3), (11, 4), (12, 4), (13, 3), (14, 4), (15, 4), (16, 0), (17, 2), (18, 4), (19, 6), (20, 14), (21, 4), (22, 0), (23, 22), (24, 14)] # 32-bit
[(1, 0), (2, 1), (3, 0), (4, 2), (5, 0), (6, 2), (7, 3), (8, 2), (9, 3), (10, 4), (11, 5), (12, 9), (13, 2), (14, 2), (15, 5), (16, 2), (17, 15), (18, 1), (19, 5), (20, 2), (21, 5), (22, 1), (23, 5), (24, 14)] # 64-bit
sage: D.show() # long time
REFERENCE:
Expand All @@ -1121,7 +1124,7 @@ def RandomDirectedGN(self, n, kernel=lambda x:x, seed=None):
Random Networks, Phys. Rev. E vol. 63 (2001), p. 066123.
"""
if seed is None:
seed = current_randstate().long_seed()
seed = int(current_randstate().long_seed() % sys.maxsize)
import networkx
return DiGraph(networkx.gn_graph(n, kernel, seed=seed))

Expand All @@ -1139,9 +1142,10 @@ def RandomDirectedGNC(self, n, seed=None):
INPUT:
- ``n`` - number of vertices.
- ``n`` - number of vertices.
- ``seed`` - for the random number generator
- ``seed`` - a ``random.Random`` seed or a Python ``int`` for the random
number generator (default: ``None``).
EXAMPLES::
Expand All @@ -1159,7 +1163,7 @@ def RandomDirectedGNC(self, n, seed=None):
Copying, Phys. Rev. E vol. 71 (2005), p. 036118.
"""
if seed is None:
seed = current_randstate().long_seed()
seed = int(current_randstate().long_seed() % sys.maxsize)
import networkx
return DiGraph(networkx.gnc_graph(n, seed=seed))

Expand Down Expand Up @@ -1350,11 +1354,12 @@ def RandomDirectedGNR(self, n, p, seed=None):
INPUT:
- ``n`` - number of vertices.
- ``n`` - number of vertices.
- ``p`` - redirection probability
- ``p`` - redirection probability.
- ``seed`` - for the random number generator.
- ``seed`` - a ``random.Random`` seed or a Python ``int`` for the random
number generator (default: ``None``).
EXAMPLES::
Expand All @@ -1372,7 +1377,7 @@ def RandomDirectedGNR(self, n, p, seed=None):
Random Networks, Phys. Rev. E vol. 63 (2001), p. 066123.
"""
if seed is None:
seed = current_randstate().long_seed()
seed = int(current_randstate().long_seed() % sys.maxsize)
import networkx
return DiGraph(networkx.gnr_graph(n, p, seed=seed))

Expand Down
23 changes: 14 additions & 9 deletions src/sage/graphs/generators/degree_sequence.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,6 +16,8 @@
# (at your option) any later version.
# https://www.gnu.org/licenses/
# ****************************************************************************

import sys
from sage.graphs.graph import Graph
from sage.misc.randstate import current_randstate

Expand Down Expand Up @@ -142,10 +144,11 @@ def DegreeSequenceConfigurationModel(deg_sequence, seed=None):
INPUT:
- ``deg_sequence`` - a list of integers with each
entry corresponding to the expected degree of a different vertex.
- ``deg_sequence`` - a list of integers with each entry corresponding to the
expected degree of a different vertex.
- ``seed`` - for the random number generator.
- ``seed`` - a ``random.Random`` seed or a Python ``int`` for the random
number generator (default: ``None``).
EXAMPLES::
Expand All @@ -172,7 +175,7 @@ def DegreeSequenceConfigurationModel(deg_sequence, seed=None):
networks, SIAM Review vol. 45, no. 2 (2003), pp. 167-256.
"""
if seed is None:
seed = current_randstate().long_seed()
seed = int(current_randstate().long_seed() % sys.maxsize)
import networkx
return Graph(networkx.configuration_model([int(i) for i in deg_sequence], seed=seed), loops=True, multiedges=True, sparse=True)

Expand Down Expand Up @@ -210,17 +213,19 @@ def DegreeSequenceExpected(deg_sequence, seed=None):
INPUT:
- ``deg_sequence`` - a list of integers with each
entry corresponding to the expected degree of a different vertex.
- ``deg_sequence`` - a list of integers with each entry corresponding to the
expected degree of a different vertex.
- ``seed`` - for the random number generator.
- ``seed`` - a ``random.Random`` seed or a Python ``int`` for the random
number generator (default: ``None``).
EXAMPLES::
sage: G = graphs.DegreeSequenceExpected([1,2,3,2,3])
sage: G.edges(labels=False)
[(0, 2), (0, 3), (1, 1), (1, 4), (2, 3), (2, 4), (3, 4), (4, 4)]
[(0, 3), (1, 3), (1, 4), (4, 4)] # 32-bit
[(0, 3), (1, 4), (2, 2), (2, 3), (2, 4), (4, 4)] # 64-bit
sage: G.show() # long time
REFERENCE:
Expand All @@ -230,6 +235,6 @@ def DegreeSequenceExpected(deg_sequence, seed=None):
Ann. Combinatorics (6), 2002 pp. 125-145.
"""
if seed is None:
seed = current_randstate().long_seed()
seed = int(current_randstate().long_seed() % sys.maxsize)
import networkx
return Graph(networkx.expected_degree_graph([int(i) for i in deg_sequence], seed=seed), loops=True)

0 comments on commit e9df9ef

Please sign in to comment.