Skip to main content
`Ctrl`+`K`

# NetworkX 2.4

Release date: 16 October 2019

Supports Python 3.5, 3.6, 3.7, and 3.8. This is the last release to support Python 3.5.

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 and our gallery of examples. Please send comments and questions to the networkx-discuss mailing list.

## Highlights

This release is the result of 6 months of work with over 200 commits by 67 contributors. Highlights include:

- Remove deprecated code from 1.x

- Support for Python 3.8

- Switched to pytest for testing

- Last release to support Python 3.5

New Functions:

- barycenter functions

- Bethe Hessian matrix function

- Eulerian Path methods

- group centrality measures

- subgraph monomorphisms

- k-truss algorithms

- onion decomposition

- resistance distance

- asteroidal triples

- non-randomness measures

- linear prufing

- minimum weight bipartite matching

- Incremental closeness centrality

- ISMAGS subgraph isomorphism algorithm

- create chordal graph of a graph

New generators

- Binomial tree generator

- Directed joint degree generator

- Random internet AS graph generator

New for Layouts

- spiral node layout routine

- support for 3d layouts

## Improvements

- allow average shortest path to use Floyd-Warshall method

- improve read/write of GML, GEXF, GraphML

- allow string or json object as input to jit_graph

- attempt to allow numpy.array input in place of lists in more places

- faster strongly connected components

- faster Floyd-Warshall Optimization

- faster global efficiency

- faster transitive closure

- fix unionfind; betweenness_subset; lexico-topo-sort; A*; inverse_line_graph; async label propagation; edgelist reading; Gomory-Hu flow method; label_propagation; partial_duplication; shell_layout with 1 node in shell; from_pandas_edgelist

- Documentation improvement and fixes

## API Changes

A utility function is_list_of_ints became is_bunch_of_ints and now tests int(item)==item instead of isinstance(_, int) This allows e.g. floats whose values are integer.

Added utility make_list_of_ints to convert containers of integer values to lists of integers

## Deprecations

Removed functions (marked as deprecated in NetworkX 2.1):

- attracting_component_subgraphs

- connected_component_subgraphs

- weakly_connected_component_subgraphs

- strongly_connected_component_subgraphs

- biconnected_component_subgraphs

- See docs for component functions for how to get subgraphs.

Graph Object methods removed (marked as deprecated 2.1)

- G.add_path

- G.add_cycle

- G.add_star

- G.nodes_with_selfloops

- G.number_of_selfloops

- G.selfloop_edges

- These are now NetworkX functions, e.g. nx.add_star(G, 5)

- G.node –> use G.nodes

- G.fresh_copy –> use G.__class__

Remove old names for graphview functions.

- ReverseView

- SubGraph

- SubMultiGraph

- SubMultiDiGraph

- SubDiGraph

- GraphView

- DiGraphView

- MultiGraphView

- MultiDiGraphView

- MultiReverseView

- Use reverse_view, subgraph_view and generic_graph_view.

## Merged PRs

A total of 205 changes have been committed.

- Bump release version

- algorithms/traversal/edgebfs name fix (#3397)

- Add see also links (#3403)

- Add the reference for the Harary graph generators (#3407)

- typo: swap source and target (#3413)

- Fix spring_layout bug with fixed nodes (#3415)

- Move LFR_benchmark to generators (#3411)

- Add barycenter algorithm (#2939)

- Add bethe hessian matrix (#3401)

- Binomial trees generator (#3409)

- Fix edge_color inconsistency with node_color and description. (#3395)

- Adding module for group centrality measures (#3421)

- Improve edgelist See Also (#3423)

- Typo fix (#3424)

- Add doc warning about self-loops for adamic_adar_index (#3427)

- Fix UnionFind set extraction (#3224)

- add required argument to `write_graphml` example (#3429)

- Fix centrality betweenness subset (#3425)

- Add two versions of Simrank similarity (#3222)

- Fixed typo

- Merge pull request #3436 from nandahkrishna/fix-typo-betweenness-centrality-subset-test

- Reorder and complete doc (#3438)

- added topo_order parameter to functions that rely on topological_sort (#3447)

- Implemented subgraph monomorphism (#3435)

- Set seed in random_degree_sequence_graph docstring test (#3451)

- Replace cb.iterable with np.iterable (#3458)

- don’t remove ticks of other pyplot axes (#3476)

- Fix typo in “G>raph Modelling Language” (#3468)

- Naive k-truss algorithm implementation. (#3462)

- Adding onion decomposition (#3461)

- New Feature - Resistance Distance (#3385)

- No multigraphs for betweenness (#3454)

- Wheels are python 3 only

- Fix deprecation warning with Python 3.7 (#3487)

- Fix dfs_preorder_nodes docstring saying “edges” instead of “nodes” (#3484)

- Added group closeness and group degree centralities (#3437)

- Fixed incorrect docs (#3495)

- Fixes Issue #3493 - Bug in lexicographical_topological_sort() (#3494)

- AT-free graph recognition (#3377)

- Update introduction.rst (#3504)

- Full join operation and cograph generator (#3503)

- Optimize the strongly connected components algorithm. (#3516)

- Adding non-randomness measures for graphs (#3515)

- Added safeguards (input graph G) for non-randomness measures (#3526)

- Optimize the strongly connected components algorithm - Take 2 (#3519)

- Small fix for bug found @ issue #3524 (#3529)

- Restore checking PyPy3 (#3514)

- Linear prufer coding (#3535)

- Fix inverse_line_graph. (#3507)

- Fix A* returning wrong solution (#3508)

- Implement minimum weight full matching of bipartite graphs (#3527)

- Get chordal graph for #1054 (#3353)

- Faster transitive closure computation for DAGs (#3445)

- Write mixed-type attributes correctly in write_graphml_lxml (#3536)

- Fixes some edge cases for inverse_line_graph(). (#3538)

- explicitly stated i.j convention in to_numpy_array

- Incremental Closeness Centrality (undirected, unweighted graphs) (#3444)

- Implement ISMAGS subgraph isomorphism algorithm (#3312)

- Fixes bug in networkx.algorithms.community.label_propagation.asyn_lpa_communities (#3545)

- When exporting to GML, write non 32-bit numbers as strings. (#3540)

- Try to bug Fix #3552 (#3554)

- add Directed Joint Degree Graph generator (#3551)

- typo (#3557)

- Fix a few documentation issues for the bipartite algorithm reference (#3555)

- i,j convention in adj mat i/o in relevant funcs

- Merge pull request #3542 from malch2/doc/update

- Add 3.8-dev to travis

- Fix dict iteration for Py3.8

- Ignore other failures for now

- Fix a typo in docstring for get_edge_data (#3564)

- Fix wrong title (#3566)

- Fix typo in docstring (#3568)

- Fix and Improve docstrings in graph.py (#3569)

- Improved graph class selection table (#3570)

- Add spiral layout for graph drawing (#3534)

- #3575 return coordinates of 3d layouts (#3576)

- Handle k==n within the Watts-Strogatz graph generator (#3579)

- Floyd-Warshall Optimization (#3400)

- Use Sphinx 2.2

- Add missing link to asteroidal docs

- Fix Sphinx warnings

- Fix Sphinx latexpdf build

- Updated Contributor list (#3592)

- Prim from list to set (#3512)

- Fix issue 3491 (#3588)

- Make Travis fail on Python 3.8 failures

- Fix test_gexf to handle default serialisation order of the XML attributes

- Remove future imports needed by Py2

- add internet_as_graph generator (#3574)

- remove cyclical references from OutEdgeDataView (#3598)

- Add minimum source and target margin to draw_networkx_edges. (#3390)

- fix to_directed function (#3599)

- Fixes #3573:GEXF output problem (#3606)

- Global efficiency attempt to speed up (#3604)

- Bugfix: Added flexibility in reading values for label and id (#3603)

- Add method floyd-warshall to average_shortest_path_length (#3267)

- Replaced is with == and minor pycodestyle fixes (#3608)

- Fix many documentation based Issues (#3609)

- Resolve many documentation issues (#3611)

- Fixes #3187 transitive_closure now returns self-loops when cycles present (#3613)

- Add support for initializing pagerank_scipy (#3183)

- Add last 7 lines of Gomory-hu algorithm Fixes #3293 (#3614)

- Implemented Euler Path functions (#3399)

- Fix the direction of edges in label_propagation.py (#3619)

- Removed unused import of random module (#3620)

- Fix operation order in partial_duplication_graph (#3626)

- Keep shells with 1 node away from origin in shell_layout (#3629)

- Allow jit_graph to read json string or json object (#3628)

- Fix typo within incode documentation (#3621)

- pycodestyle and update docs for greedy_coloring.py+tests (#3631)

- Add version badges

- Load long description from README

- Add missing code block (#3630)

- Change is_list_of_ints to make_list_of_ints (#3617)

- Handle edgeattr in from_pandas_edgelist when no columns match request (#3634)

- Make draft of release notes for v2.4

- Shift notes from dev to v2.4 filename.

- Use recent pypy

- Test Py 3.8 on macos

- add check of attr type before converting inf/nan in GEXF (#3636)

- Fix sphinx errors And add links to single_source_dijkstra in docs for dijkstra_path/length (#3638)

- Document subgraph_view (#3627)

- First round of pytest fixes

- Use class methods for class setup/teardown

- Have CIs use pytest

- Use class methods for class setup/teardown, cont.

- Do less testing (until we get it working)

- replace idiom from networkx import * in test files

- Fix assert funcs override

- Fix static methods in link_prediction

- Partially fix v2userfunc tests

- Fix graph/digraph tests

- Fix multigraph checks

- Fix multidigraph checks

- Fix test_function checks

- Fix distance_measures tests

- Fix decorators tests

- Fix some raises in test_mst

- Fix clique tests

- Fix yaml tests

- Fix tests in reportviews

- Fix vf2 tests

- Fix mst tests

- Fix gdal tests

- Convert nose.tools.assert_* functions into asserts

- Remove unused imports

- Fix some warnings

- Update testing instructions

- Re-enable all test platforms

- Fix some __init__ warnings

- replace nose yield tests in test_coloring.py

- Add testing, coverage, and dev environment info

- Try pytestimportorskip

- Another pair of variations on pytest.importorskip

- fix typo and try again

- Remove deprecated weakly_connected_component_subgraphs

- replace assert_almost_equal and raises in algorithms/tests

- set places=0 on tests that use old almost_equal

- Update nx.test()

- Have pytest run doctests / not sphinx

- Revert “Remove deprecated weakly_connected_component_subgraphs”

- remove warnings for using deprecated function

- Remove deprecated functions and methods. add to release notes.

- Fix subgraph_view testing

- remove tests of deprecated views and fix use of deprecated G.node

- tracking down use of deprecated functions

- Fix deprecated use of add_path/star/cycle

- reduce warnings for deprecated functions

- skirt issues with raises in test_harmonic

- reduce the number of warnings by removing deprecated functions

- convert_matrix demo of one way to get doctests to work

- Remove deprecated from examples

- Changes to convert_matrix and others that depend on np.matrix

- clean up doctest deprecated code

- More doctest corrections

- Fix examples

- Remove nose from generators

- Remove nose from utils

- Remove nose from classes

- Replace nose.assert_raises with pytest.raises

- Replace nose.raises with pytest.raises context manager

- Replace `eq_`, `ok_` with assert

- Use pytest for doctest

- Highlight switch to pytest in release notes

- Remove `from nose.tools import *`

- Remove nose.tools.SkipTest

- Finalize transition to pytest

- Merge pull request #3639 from stefanv/pytest-port

- Test Python 3.8 with AppVeyor

- Merge pull request #3648 from jarrodmillman/windows-py3.8

- Remove deprecated weakly_connected_component_subgraphs

- Update release notes

- Update README

- Announce Python 3.8 support

- Designate 2.4rc1 release

- Bump release version

- Remove remaining SkipTests

- fix documentation notes (#3644) (#3645)

- Test Py 3.8.0 on AppVeyor

- Speed up AppVeyor

- Cleanup travis config

- Improve CI caching

- Update Py 3.8 on travis

- Merge pull request #3652 from jarrodmillman/speedup-appveyor

- Finalize release notes

It contained the following 5 merges:

- Fixed typo in betweenness centrality subset test (#3436)

- explicitly stated i.j convention in to_numpy_array (#3542)

- pytest port (#3639)

- Test Python 3.8 with AppVeyor (#3648)

- Cleanup and speedup CI (#3652)

## Contributors

- Rajendra Adhikari

- Antoine Allard

- Antoine

- Salim BELHADDAD

- Luca Baldesi

- Tamás Bitai

- Tobias Blass

- Malayaja Chutani

- Peter Cock

- Almog Cohen

- Diogo Cruz

- Martin Darmüntzel

- Elan Ernest

- Jacob Jona Fahlenkamp

- Michael Fedell

- Andy Garfield

- Ramiro Gómez

- Haakon

- Alex Henrie

- Steffen Hirschmann

- Martin James McHugh III

- Jacob

- Søren Fuglede Jørgensen

- Omer Katz

- Julien Klaus

- Matej Klemen

- Nanda H Krishna

- Peter C Kroon

- Anthony Labarre

- Anton Lodder

- MCer4294967296

- Eric Ma

- Fil Menczer

- Erwan Le Merrer

- Alexander Metz

- Jarrod Millman

- Subhendu Ranajn Mishra

- Jamie Morton

- James Myatt

- Kevin Newman

- Aaron Opfer

- Aditya Pal

- Pascal-Ortiz

- Peter

- Jose Pinilla

- Alexios Polyzos

- Michael Recachinas

- Efraim Rodrigues

- Adam Rosenthal

- Dan Schult

- William Schwartz

- Weisheng Si

- Kanishk Tantia

- Ivan Tham

- George Valkanas

- Stefan van der Walt

- Hsi-Hsuan Wu

- Haochen Wu

- Xiangyu Xu

- Jean-Gabriel Young

- bkief

- daniel-karl

- michelb7398

- mikedeltalima

- nandahkrishna

- skhiuk

- tbalint