# Next Release¶

Release date: TBD

Supports Python 3.7, 3.8, and 3.9.

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 X of work with over X pull requests by X contributors. Highlights include:

Dropped support for Python 3.6.

NumPy, SciPy, Matplotlib, and pandas are now default requirements.

Improved example gallery

Removed code for supporting Jython/IronPython

The

`__str__`

method for graph objects is more informative and concise.Improved import time

Improved test coverage

New documentation theme

Add functionality for drawing self-loop edges

Add approximation algorithms for Traveling Salesman Problem

New functions:

Panther algorithm

maximum cut heuristics

equivalence_classes

dedensification

random_ordered_tree

forest_str

snap_aggregation

networkx.approximation.diameter

partition_quality

prominent_group

prefix_tree_recursive

topological_generations

## NXEPs¶

**N**etwork**X** **E**nhancement **P**roposals capture changes
that are larger in scope than typical pull requests, such as changes to
fundamental data structures.
The following proposals have come under consideration since the previous
release:

## Improvements¶

[#3886] Adds the Panther algorithm for top-k similarity search.

[#4138] Adds heuristics for approximating solution to the maximum cut problem.

[#4183] Adds

`equivalence_classes`

to public API.[#4193]

`nx.info`

is more concise.[#4198] Improve performance of

`transitivity`

.[#4206] UnionFind.union selects the heaviest root as the new root

[#4240] Adds

`dedensification`

function in a new`summarization`

module.[#4294] Adds

`forest_str`

for string representation of trees.[#4319] pagerank uses scipy by default now.

[#4841] simrank_similarity uses numpy by default now.

[#4317] New

`source`

argument to`has_eulerian_path`

to look for path starting at source.[#4356] Use

`bidirectional_djikstra`

in`shortest_path`

for weighted graphs to improve performance.[#4361] Adds

`nodelist`

argument to`triadic_census`

[#4435] Improve

`group_betweenness_centrality`

.[#4446] Add

`sources`

parameter to allow computing`harmonic_centrality`

from a subset of nodes.[#4463] Adds the

`snap`

summarization algorithm.[#4476] Adds the

`diameter`

function for approximating the lower bound on the diameter of a graph.[#4519] Handle negative weights in clustering algorithms.

[#4528] Improved performance of

`edge_boundary`

.[#4560] Adds

`prominent_group`

function to find prominent group of size k in G according to group_betweenness_centrality.[#4588] Graph intersection now works when input graphs don’t have the same node sets.

[#4607] Adds approximation algorithms for solving the traveling salesman problem, including

`christofides`

,`greedy_tsp`

,`simulated_annealing_tsp`

, and`threshold_accepting_tsp`

.[#4640]

`prefix_tree`

now uses a non-recursive algorithm. The original recursive algorithm is still available via`prefix_tree_recursive`

.[#4659] New

`initial_graph`

argument to`barabasi_albert_graph`

and`dual_barabasi_albert_graph`

to supply an initial graph to the model.[#4690]

`modularity_max`

now supports edge weights.[#4727] Improved performance of

`scale_free_graph`

.[#4757] Adds

`topological_generations`

function for DAG stratification.[#4768] Improved reproducibility of geometric graph generators.

[#4769] Adds

`margins`

keyword to`draw_networkx_nodes`

to control node clipping in images with large node sizes.[#4812] Use

`scipy`

implementation for`hits`

algorithm to improve performance.[#4847] Improve performance of

`scipy`

implementation of`hits`

algorithm.

## API Changes¶

[#4183]

`partition`

argument of`quotient_graph`

now accepts dicts[#4190] Removed

`tracemin_chol`

. Use`tracemin_lu`

instead.[#4216] In

`to_*_array/matrix`

, nodes in nodelist but not in G now raise an exception. Use G.add_nodes_from(nodelist) to add them to G before converting.[#4360] Internally

`nx_pylab.draw_networkx_edges`

now always generates a list of`matplotlib.patches.FancyArrowPatch`

rather than using a`matplotlib.collections.LineCollection`

for un-directed graphs. This unifies interface for all types of graphs. In addition to the API change this may cause a performance regression for large graphs.[#4384] Added

`edge_key`

parameter for MultiGraphs in to_pandas_edgelist[#4461] Added

`create_using`

parameter to`binomial_tree`

[#4466]

`relabel_nodes`

used to raise a KeyError for a key in`mapping`

that is not a node in the graph, but it only did this when`copy`

was`False`

. Now any keys in`mapping`

which are not in the graph are ignored.[#4502] Moves

`maximum_independent_set`

to the`clique`

module in`approximation`

.[#4536] Deprecate

`performance`

and`coverage`

in favor of`partition_quality`

, which computes both metrics simultaneously and is more efficient.[#4573]

`label_propagation_communities`

returns a`dict_values`

object of community sets of nodes instead of a generator of community sets. It is still iterable, so likely will still work in most user code and a simple fix otherwise: e.g., add`iter( ... )`

surrounding the function call.[#4545]

`prefix_tree`

used to return`tree, root`

but root is now always 0 instead of a UUID generate string. So the function returns`tree`

.[#4545] The variable

`NIL`

=”NIL” has been removed from`networkx.generators.trees`

[#3620] The function

`naive_greedy_modularity_communities`

now returns a list of communities (like`greedy_modularity_communities`

) instead of a generator of communities.[#4786] Deprecate the

`attrs`

keyword argument in favor of explicit keyword arguments in the`json_graph`

module.[#4843] The unused

`normalized`

parameter has been removed from`communicability_betweeness_centrality`

[#4850] Added

`dtype`

parameter to adjacency_matrix[#4867] The function

`spring_layout`

now ignores ‘fixed’ nodes not in the graph

## Deprecations¶

[#4238] Deprecate

`to_numpy_matrix`

and`from_numpy_matrix`

.[#4279] Deprecate

`networkx.utils.misc.is_iterator`

. Use`isinstance(obj, collections.abc.Iterator)`

instead.[#4280] Deprecate

`networkx.utils.misc.is_list_of_ints`

as it is no longer used. See`networkx.utils.misc.make_list_of_ints`

for related functionality.[#4281] Deprecate

`read_yaml`

and`write_yaml`

.[#4282] Deprecate

`read_gpickle`

and`write_gpickle`

.[#4298] Deprecate

`read_shp`

,`edges_from_line`

, and`write_shp`

.[#4319] Deprecate

`pagerank_numpy`

,`pagerank_scipy`

.[#4355] Deprecate

`copy`

method in the coreview Filtered-related classes.[#4384] Deprecate unused

`order`

parameter in to_pandas_edgelist.[#4428] Deprecate

`jit_data`

and`jit_graph`

.[#4449] Deprecate

`consume`

.[#4448] Deprecate

`iterable`

.[#4536] Deprecate

`performance`

and`coverage`

in favor of`parition_quality`

.[#4545] Deprecate

`generate_unique_node`

.[#4599] Deprecate

`empty_generator`

.[#4600] Deprecate

`default_opener`

.[#4617] Deprecate

`hub_matrix`

and`authority_matrix`

[#4629] Deprecate the

`Ordered`

graph classes.[#4802] The

`nx_yaml`

function has been removed along with the dependency on`pyyaml`

. Removal implemented via module`__getattr__`

to patch security warnings related to`pyyaml.Loader`

.[#4826] Deprecate

`preserve_random_state`

.[#4827] Deprecate

`almost_equal`

.[#4833] Deprecate

`run`

.[#4829] Deprecate

`assert_nodes_equal`

,`assert_edges_equal`

, and`assert_graphs_equal`

.[#4850] Deprecate

`adj_matrix`

.[#4841] Deprecate

`simrank_similarity_numpy`

.

## Contributors¶

<output of contribs.py>

## Merged PRs¶

<output of contribs.py>