Skip to content

Upgrading networkx 2 to 3

Breaking2.8.8 → 3.7Breaking82Platform5Deprecated14New109Changed185Fixed186Other702

BreakingUpgrade verdict

81 breaking changes and 5 platform requirement changes.

  • Removes the deprecated _hits_scipy code.
  • The swap_d helper in the threshold module is gone.
  • The forceatlas2 layout no longer accepts a dissuade_hubs argument.
  • Two deprecated functions are gone; use the replacement d-separation APIs instead.
Top 5 of 100 that need code or config changes

Python requirement changed in 3.7rc0: >=3.8 → !=3.14.1,>=3.12.

Breaking81
Removes the deprecated _hits_scipy code.
_hits_scipy
Removes networkx.algorithms.threshold.swap_d.
networkx.algorithms.threshold.swap_d
Removes the unused dissuade_hubs kwarg from forceatlas2.
forceatlas2dissuade_hubs
Removes the expired d_separated and minimum_d_separator functions.
d_separatedminimum_d_separator
Removes the expired all_triplets deprecation.
all_triplets
Removes the expired random_triad deprecation.
random_triad
Removes the expired total_spanning_tree_weight deprecation.
total_spanning_tree_weight
Removes the deprecated create kwarg from nonisomorphic_trees.
nonisomorphic_trees
Removes the deprecated normalized param from s_metric.
s_metricnormalized
Removes the deprecated Edmonds class for 3.4.
Edmonds
Removes deprecated MultiDiGraph_EdgeKey for 3.4.
MultiDiGraph_EdgeKey
Renames LoopbackDispatcher to LoopbackBackendInterface and dispatcher to backend_interface.
LoopbackDispatcherLoopbackBackendInterfacedispatcherbackend_interface
Removes usage of __networkx_plugin__ in favor of __networkx_backend__.
__networkx_plugin____networkx_backend__
Removes the "networkx.plugins" and "networkx.plugin_info" entry-points.
networkx.pluginsnetworkx.plugin_info
Removes the deprecated maxcardinality parameter from min_weight_matching.
min_weight_matchingmaxcardinality
Removes the deprecated find_cores function.
find_cores
Removes the deprecated project function from the bipartite package.
project
Removes the deprecated function is_string_like.
is_string_like
Removes the deprecated function make_str.
make_str
Removes the unused 'name' parameter from /operators/binary.py.
Removes the deprecated function is_iterator.
is_iterator
Removes euclidean from geometric.py.
euclidean
Removes the deprecated function utils.consume.
utils.consume
Removes to_numpy_recarray.
to_numpy_recarray
Removes the deprecated function utils.empty_generator.
utils.empty_generator
Removes jit.py.
jit
Removes deprecated context managers.
Removes the deprecated function utils.to_tuple.
utils.to_tuple
Removes display_pygraphviz.
display_pygraphviz
Removes to_numpy_matrix and from_numpy_matrix.
to_numpy_matrixfrom_numpy_matrix
Removes the deprecated decorator preserve_random_state.
preserve_random_state
Removes the deprecated function is_list_of_ints.
is_list_of_ints
Removes the random_state decorator.
random_state
Removes adj_matrix from linalg/graphmatrix.py.
adj_matrix
Removes betweenness_centrality_source.
betweenness_centrality_source
Removes the deprecated simrank_similarity_numpy.
simrank_similarity_numpy
Removes the deprecated numeric_mixing_matrix function.
numeric_mixing_matrix
Removes deprecated functions make_small_graph and make_small_undirected_graph.
make_small_graphmake_small_undirected_graph
Removes _naive_greedy_modularity_communities.
_naive_greedy_modularity_communities
Updates cytoscape functions to drop the old signature.
Removes deprecated functions dict_to_numpy_array2 and dict_to_numpy_array1.
dict_to_numpy_array2dict_to_numpy_array1
Removes deprecated function utils.default_opener.
utils.default_opener
Removes deprecated function iterable.
iterable
Removes the old attr keyword from json_graph/tree.
json_graph/tree
Removes generate_unique_node.
generate_unique_node
Removes gpickle.
gpickle
Removes deprecated function extrema_bounding.
extrema_bounding
Removes coverage and performance from quality.
quality
Removes deprecated k-nearest-neighbors.
Removes the unused deprecated argument from to_pandas_edgelist.
to_pandas_edgelist
Removes the deprecated function edge_betweeness.
edge_betweeness
Removes copy methods for Filter coreviews.
Filter
Removes the deprecated function nx.info.
nx.info
Removes the deprecated n_communities argument from greedy_modularity_communities.
greedy_modularity_communitiesn_communities
Removes the deprecated functions hub_matrix and authority_matrix.
hub_matrixauthority_matrix
Removes to_scipy_sparse_matrix and from_scipy_sparse_matrix.
to_scipy_sparse_matrixfrom_scipy_sparse_matrix
Removes OrderedGraphs.
OrderedGraphOrderedDiGraphOrderedMultiGraphOrderedMultiDiGraph
Expires the random lobster dependency.
Expires deprecations of the could-be isomorphism aliases.
could_be_isomorphicfast_could_be_isomorphicfaster_could_be_isomorphic
Changes maximal_independent_set to return a set instead of a list.
maximal_independent_set
Replaces random_lobster with random_lobster_graph.
random_lobsterrandom_lobster_graph
Replaces maybe_regular_expander with maybe_regular_expander_graph.
maybe_regular_expandermaybe_regular_expander_graph
Expires the deprecation of compute_v_structures.
compute_v_structures
Expires the deprecation of the link kwarg in node_link functions.
link
Raises an exception for k_core functions when given multigraphs.
k_core
Expires the forest_str deprecation.
forest_str
Expires the random_tree deprecation.
random_tree
Expires the deprecation for strongly_connected_components_recursive.
strongly_connected_components_recursive
Expires the deprecated sort_neighbors param in generic_bfs_edges.
generic_bfs_edgessort_neighbors
Expires deprecated nx.join in favor of join_trees.
joinjoin_trees
Disallows negative number of nodes in complete_multipartite_graph.
complete_multipartite_graph
Changes return types of shortest path methods to improve consistency.
Changes the arguments list of GraphMLWriterLxml.dump().
GraphMLWriterLxml.dump()
Removes the testing submodule.
networkx.testing
Makes chordal_graph_cliques a generator.
chordal_graph_cliques
Replaces the node_classification subpackage with a module.
node_classification
Updates the return type of google_matrix to numpy.ndarray.
google_matrix
Updates the return type of attrmatrix.
attrmatrix
Makes HITS numpy and scipy functions private.
hits
Makes lazy_import private and removes its internal use.
lazy_import
Changes the signature of node_link functions for issue #5787.
node_link
Platform5
Updates minimum dependencies per SPEC 0 and drops Python 3.11 support.
Drops support for Python 3.10.
Adds support for Python 3.13.
Drops Python 3.9 support.
Adds support for Python 3.11.
Deprecated14
Proposes deprecating bfs_predecessors.
bfs_predecessors
Deprecates the p2g module.
p2g
Deprecates metric_closure.
metric_closure
Deprecates graph_could_be_isomorphic.
graph_could_be_isomorphic
Adds colliders and v_structures and deprecates compute_v_structures in dag.py.
collidersv_structurescompute_v_structures
Adds edges keyword and deprecates link keyword arguments in JSON input-output.
edgeslink
Deprecates the all_triplets one-liner.
all_triplets
Deprecates random_triad.
random_triad
Deprecates the create argument of nonisomorphic_trees.
nonisomorphic_treescreate
Adds clique examples and deprecates helper functions.
Deprecates shortest_path functions to have consistent return values in v3.3.
shortest_path
Changes PyDot PendingDeprecation to Deprecation.
PyDot
Bumps the nodelink args deprecation expiration to v3.2.
Updates deprecations.

Generated by DepDelta from published Python source. Not mixed with prose notes.

  • removed: export test
  • added: variable config
  • removed: export project
  • added: export is_tournament
  • added: function densest_subgraph(G, iterations=…, *, method=…)
  • changed: function steiner_tree(G, terminal_nodes, weight=…) → function steiner_tree(G, terminal_nodes, weight=…, method=…)
  • changed: function traveling_salesman_problem(G, weight=…, nodes=…, cycle=…, method=…) → function traveling_salesman_problem(G, weight=…, nodes=…, cycle=…, method=…, **kwargs)
  • removed: function k_nearest_neighbors(G, source=…, target=…, nodes=…, weight=…)
  • removed: function numeric_mixing_matrix(G, attribute, nodes=…, normalized=…, mapping=…)
  • added: function butterflies(G, nodes=…)
  • added: function modularity(G, communities, nodes, *, weight=…, resolution=…)
  • added: function maximal_extendability(G)
  • added: function birank(G, nodes, *, alpha=…, beta=…, top_personalization=…, bottom_personalization=…, max_iter=…, tol=…, weight=…)
  • changed: function from_biadjacency_matrix(A, create_using=…, edge_attribute=…) → function from_biadjacency_matrix(A, create_using=…, edge_attribute=…, *, row_order=…, column_order=…)
  • removed: function project(B, nodes, create_using=…)
  • added: function tree_broadcast_center(G)
  • added: function tree_broadcast_time(G, node=…)
  • removed: function edge_betweenness(G, k=…, normalized=…, weight=…, seed=…)
  • removed: function betweenness_centrality_source(G, normalized=…, weight=…, sources=…)
  • changed: function closeness_centrality(G, u=…, distance=…, wf_improved=…) → function closeness_centrality(G, u=…, distance=…, wf_improved=…, *, sp=…)
  • changed: function approximate_current_flow_betweenness_centrality(G, normalized=…, weight=…, dtype=…, solver=…, epsilon=…, kmax=…, seed=…) → function approximate_current_flow_betweenness_centrality(G, normalized=…, weight=…, dtype=…, solver=…, epsilon=…, kmax=…, seed=…, *, sample_weight=…)
  • added: function laplacian_centrality(G, normalized=…, nodelist=…, weight=…, walk_type=…, alpha=…)
  • changed: function second_order_centrality(G) → function second_order_centrality(G, weight=…)
  • changed: function subgraph_centrality(G) → function subgraph_centrality(G, *, normalized=…)
  • changed: function subgraph_centrality_exp(G) → function subgraph_centrality_exp(G, *, normalized=…)
  • removed: function cliques_containing_node(G, nodes=…, cliques=…)
  • removed: function graph_clique_number(G, cliques=…)
  • removed: function graph_number_of_cliques(G, cliques=…)
  • added: function all_triangles(G, nbunch=…)
  • added: function greedy_node_swap_bipartition(G, *, init_split=…, max_iter=…)
  • added: function kernighan_lin_bisection(G, partition=…, max_iter=…, weight=…, seed=…)
  • added: function spectral_modularity_bipartition(G)
  • added: function is_cover(G, communities)
  • added: function edge_betweenness_partition(G, number_of_sets, *, weight=…)
  • added: function edge_current_flow_betweenness_partition(G, number_of_sets, *, weight=…)
  • removed: function kernighan_lin_bisection(G, partition=…, max_iter=…, weight=…, seed=…)
  • added: function fast_label_propagation_communities(G, *, weight=…, seed=…)
  • added: function leiden_communities(G, *, weight=…, resolution=…, max_level=…, seed=…, metric=…, theta=…)
  • added: function leiden_partitions(G, *, weight=…, metric=…, resolution=…, seed=…, theta=…)
  • added: function greedy_source_expansion(G, *, source, cutoff=…, method=…)
  • changed: function louvain_communities(G, weight=…, resolution=…, threshold=…, seed=…) → function louvain_communities(G, weight=…, resolution=…, threshold=…, max_level=…, seed=…)
  • removed: variable _naive_greedy_modularity_communities
  • changed: function greedy_modularity_communities(G, weight=…, resolution=…, cutoff=…, best_n=…, n_communities=…) → function greedy_modularity_communities(G, weight=…, resolution=…, cutoff=…, best_n=…)
  • removed: function coverage(G, partition)
  • removed: function performance(G, partition)
  • added: function constant_potts_model(G, communities, weight=…, node_weight=…, resolution=…)
  • added: function overlapping_modularity(G, communities, *, weight=…, resolution=…)
  • changed: function is_semiconnected(G, topo_order=…) → function is_semiconnected(G)
  • removed: function strongly_connected_components_recursive(G)
  • removed: function find_cores(G)
  • changed: function simple_cycles(G) → function simple_cycles(G, length_bound=…)
  • added: function chordless_cycles(G, length_bound=…)
  • added: function girth(G)
  • removed: function d_separated(G, x, y, z)
  • added: function find_minimal_d_separator(G, x, y, *, included=…, restricted=…)
  • added: function is_d_separator(G, x, y, z)
  • added: function is_minimal_d_separator(G, x, y, z, *, included=…, restricted=…)
  • removed: function barycenter(G, weight=…, attr=…, sp=…)
  • removed: function extrema_bounding(G, compute=…)
  • changed: function center(G, e=…, usebounds=…) → function center(G, e=…, usebounds=…, weight=…)
  • changed: function diameter(G, e=…, usebounds=…) → function diameter(G, e=…, usebounds=…, weight=…)
  • changed: function eccentricity(G, v=…, sp=…) → function eccentricity(G, v=…, sp=…, weight=…)
  • changed: function periphery(G, e=…, usebounds=…) → function periphery(G, e=…, usebounds=…, weight=…)
  • changed: function radius(G, e=…, usebounds=…) → function radius(G, e=…, usebounds=…, weight=…)
  • changed: function resistance_distance(G, nodeA, nodeB, weight=…, invert_weight=…) → function resistance_distance(G, nodeA=…, nodeB=…, weight=…, invert_weight=…)
  • added: function centroid(G, weight=…, attr=…, sp=…)
  • added: function effective_graph_resistance(G, weight=…, invert_weight=…)
  • added: function harmonic_diameter(G, sp=…, *, weight=…)
  • added: function kemeny_constant(G, *, weight=…)
  • added: variable barycenter
  • added: function connected_dominating_set(G)
  • added: function is_connected_dominating_set(G, nbunch)
  • changed: function weisfeiler_lehman_subgraph_hashes(G, edge_attr=…, node_attr=…, iterations=…, digest_size=…) → function weisfeiler_lehman_subgraph_hashes(G, edge_attr=…, node_attr=…, iterations=…, digest_size=…, include_initial_labels=…)
  • removed: method ISMAGS.analyze_symmetry(graph, node_partitions, edge_colors)
  • added: method ISMAGS.analyze_subgraph_symmetry()
  • added: method ISMAGS.create_aligned_partitions(thing_matcher, sg_things, g_things)
  • added: method ISMAGS.is_monomorphic(symmetry=…)
  • added: method ISMAGS.monomorphisms_iter(symmetry=…)
  • changed: function could_be_isomorphic(G1, G2) → function could_be_isomorphic(G1, G2, *, properties=…)
  • added: method DiGraphMatcher.subgraph_is_isomorphic()
  • added: method DiGraphMatcher.subgraph_is_monomorphic()
  • added: method DiGraphMatcher.subgraph_isomorphisms_iter()
  • added: method DiGraphMatcher.subgraph_monomorphisms_iter()
  • added: function vf2pp_all_isomorphisms(FG, SG, node_label=…, default_label=…)
  • added: function vf2pp_all_monomorphisms(FG, SG, node_label=…, default_label=…)
  • added: function vf2pp_all_subgraph_isomorphisms(FG, SG, node_label=…, default_label=…)
  • added: function vf2pp_is_isomorphic(FG, SG, node_label=…, default_label=…)
  • added: function vf2pp_is_monomorphic(FG, SG, node_label=…, default_label=…)
  • added: function vf2pp_isomorphism(FG, SG, node_label=…, default_label=…)
  • added: function vf2pp_monomorphism(FG, SG, node_label=…, default_label=…)
  • added: function vf2pp_subgraph_is_isomorphic(FG, SG, node_label=…, default_label=…)
  • added: function vf2pp_subgraph_isomorphism(FG, SG, node_label=…, default_label=…)
  • removed: function authority_matrix(G, nodelist=…)
  • removed: function hits_numpy(G, normalized=…)
  • removed: function hits_scipy(G, max_iter=…, tol=…, nstart=…, normalized=…)
  • removed: function hub_matrix(G, nodelist=…)
  • changed: function hits(G, max_iter=…, tol=…, nstart=…, normalized=…) → function hits(G, max_iter=…, tol=…, nstart=…, normalized=…, *, method=…)
  • removed: function pagerank_numpy(G, alpha=…, personalization=…, weight=…, dangling=…)
  • removed: function pagerank_scipy(G, alpha=…, personalization=…, max_iter=…, tol=…, nstart=…, weight=…, dangling=…)
  • changed: function min_weight_matching(G, maxcardinality=…, weight=…) → function min_weight_matching(G, weight=…)
  • changed: function contracted_edge(G, edge, self_loops=…, copy=…) → function contracted_edge(G, edge, self_loops=…, copy=…, *, store_contraction_as=…)
  • changed: function contracted_nodes(G, u, v, self_loops=…, copy=…) → function contracted_nodes(G, u, v, self_loops=…, copy=…, *, store_contraction_as=…)
  • changed: function quotient_graph(G, partition, edge_relation=…, node_data=…, edge_data=…, relabel=…, create_using=…) → function quotient_graph(G, partition, edge_relation=…, node_data=…, edge_data=…, weight=…, relabel=…, create_using=…)
  • added: function harmonic_function(G, max_iter=…, label_name=…)
  • added: function local_and_global_consistency(G, alpha=…, max_iter=…, label_name=…)
  • removed: function harmonic_function(G, max_iter=…, label_name=…)
  • removed: function local_and_global_consistency(G, alpha=…, max_iter=…, label_name=…)
  • changed: function union(G, H, rename=…, name=…) → function union(G, H, rename=…)
  • added: function corona_product(G, H)
  • added: function modular_product(G, H)
  • added: function is_perfect_graph(G)
  • added: constructor PlanarEmbedding(incoming_graph_data=…, **attr)
  • added: method PlanarEmbedding.add_half_edge(start_node, end_node, *, cw=…, ccw=…)
  • added: method PlanarEmbedding.copy(as_view=…)
  • added: method PlanarEmbedding.faces()
  • added: method PlanarEmbedding.remove_edge(u, v)
  • added: method PlanarEmbedding.remove_edges_from(ebunch)
  • added: method PlanarEmbedding.remove_node(n)
  • added: method PlanarEmbedding.remove_nodes_from(nodes)
  • added: method PlanarEmbedding.to_undirected(reciprocal=…, as_view=…)
  • changed: function rich_club_coefficient(G, normalized=…, Q=…, seed=…) → function rich_club_coefficient(G, normalized=…, Q=…, seed=…, *, n_samples=…)
  • changed: function astar_path(G, source, target, heuristic=…, weight=…) → function astar_path(G, source, target, heuristic=…, weight=…, *, cutoff=…)
  • changed: function astar_path_length(G, source, target, heuristic=…, weight=…) → function astar_path_length(G, source, target, heuristic=…, weight=…, *, cutoff=…)
  • added: function floyd_warshall_tree(G, weight=…)
  • added: function all_pairs_all_shortest_paths(G, weight=…, method=…)
  • added: function single_source_all_shortest_paths(G, source, weight=…, method=…)
  • removed: function simrank_similarity_numpy(G, source=…, target=…, importance_factor=…, max_iterations=…, tolerance=…)
  • changed: function generate_random_paths(G, sample_size, path_length=…, index_map=…) → function generate_random_paths(G, sample_size, path_length=…, index_map=…, weight=…, seed=…, *, source=…)
  • changed: function panther_similarity(G, source, k=…, path_length=…, c=…, delta=…, eps=…) → function panther_similarity(G, source, k=…, path_length=…, c=…, delta=…, eps=…, weight=…, seed=…)
  • added: function panther_vector_similarity(G, source, *, D=…, k=…, path_length=…, c=…, delta=…, eps=…, weight=…, seed=…)
  • changed: function s_metric(G, normalized=…) → function s_metric(G)
  • added: function directed_edge_swap(G, *, nswap=…, max_tries=…, seed=…)
  • added: function cd_index(G, node, time_delta, *, time=…, weight=…)
  • added: function tournament_matrix(G)
  • added: function bfs_labeled_edges(G, sources)
  • added: function generic_bfs_edges(G, source, neighbors=…, depth_limit=…)
  • changed: function dfs_edges(G, source=…, depth_limit=…) → function dfs_edges(G, source=…, depth_limit=…, *, sort_neighbors=…)
  • changed: function dfs_labeled_edges(G, source=…, depth_limit=…) → function dfs_labeled_edges(G, source=…, depth_limit=…, *, sort_neighbors=…)
  • changed: function dfs_postorder_nodes(G, source=…, depth_limit=…) → function dfs_postorder_nodes(G, source=…, depth_limit=…, *, sort_neighbors=…)
  • changed: function dfs_predecessors(G, source=…, depth_limit=…) → function dfs_predecessors(G, source=…, depth_limit=…, *, sort_neighbors=…)
  • changed: function dfs_preorder_nodes(G, source=…, depth_limit=…) → function dfs_preorder_nodes(G, source=…, depth_limit=…, *, sort_neighbors=…)
  • changed: function dfs_successors(G, source=…, depth_limit=…) → function dfs_successors(G, source=…, depth_limit=…, *, sort_neighbors=…)
  • changed: function dfs_tree(G, source=…, depth_limit=…) → function dfs_tree(G, source=…, depth_limit=…, *, sort_neighbors=…)
  • removed: class Edmonds
  • removed: constructor Edmonds(G, seed=…)
  • removed: method Edmonds.find_optimum(attr=…, default=…, kind=…, style=…, preserve_attrs=…, partition=…, seed=…)
  • added: function minimal_branching(G, /, *, attr=…, default=…, preserve_attrs=…, partition=…)
  • added: function center(G)
  • added: function centroid(G)
  • added: function number_of_spanning_trees(G, *, root=…, weight=…)
  • removed: function join(rooted_trees, label_attribute=…)
  • added: function join_trees(rooted_trees, *, label_attribute=…, first_label=…)
  • removed: function all_triplets(G)
  • removed: function random_triad(G)
  • added: function number_of_walks(G, walk_length)
  • added: function random_walk(G, *, start, weight=…, seed=…)
  • added: function gutman_index(G, weight=…)
  • added: function hyper_wiener_index(G, weight=…)
  • added: function schultz_index(G, weight=…)
  • added: export reverse_view
  • added: export subgraph_view
  • removed: method FilterAdjacency.copy()
  • removed: method FilterAtlas.copy()
  • removed: method FilterMultiAdjacency.copy()
  • removed: method FilterMultiInner.copy()
  • removed: export reverse_view
  • removed: export subgraph_view
  • removed: function info(G, n=…)
  • changed: function get_edge_attributes(G, name) → function get_edge_attributes(G, name, default=…)
  • changed: function get_node_attributes(G, name) → function get_node_attributes(G, name, default=…)
  • added: function describe(G, describe_hook=…)
  • added: function remove_edge_attributes(G, *attr_names, ebunch=…)
  • added: function remove_node_attributes(G, *attr_names, nbunch=…)
  • changed: function subgraph_view(G, filter_node=…, filter_edge=…) → function subgraph_view(G, *, filter_node=…, filter_edge=…)
  • removed: class OrderedDiGraph(DiGraph)
  • removed: class OrderedGraph(Graph)
  • removed: class OrderedMultiDiGraph(MultiDiGraph)
  • removed: class OrderedMultiGraph(MultiGraph)
  • removed: constructor OrderedDiGraph(incoming_graph_data=…, **attr)
  • removed: constructor OrderedGraph(incoming_graph_data=…, **attr)
  • removed: constructor OrderedMultiDiGraph(incoming_graph_data=…, **attr)
  • removed: constructor OrderedMultiGraph(incoming_graph_data=…, **attr)
  • removed: field OrderedDiGraph.adjlist_inner_dict_factory
  • removed: field OrderedDiGraph.adjlist_outer_dict_factory
  • removed: field OrderedDiGraph.edge_attr_dict_factory
  • removed: field OrderedDiGraph.node_dict_factory
  • removed: field OrderedGraph.adjlist_inner_dict_factory
  • removed: field OrderedGraph.adjlist_outer_dict_factory
  • removed: field OrderedGraph.edge_attr_dict_factory
  • removed: field OrderedGraph.node_dict_factory
  • removed: field OrderedMultiDiGraph.adjlist_inner_dict_factory
  • removed: field OrderedMultiDiGraph.adjlist_outer_dict_factory
  • removed: field OrderedMultiDiGraph.edge_attr_dict_factory
  • removed: field OrderedMultiDiGraph.edge_key_dict_factory
  • removed: field OrderedMultiDiGraph.node_dict_factory
  • removed: field OrderedMultiGraph.adjlist_inner_dict_factory
  • removed: field OrderedMultiGraph.adjlist_outer_dict_factory
  • removed: field OrderedMultiGraph.edge_attr_dict_factory
  • removed: field OrderedMultiGraph.edge_key_dict_factory
  • removed: field OrderedMultiGraph.node_dict_factory
  • changed: class OutEdgeDataView → class OutEdgeDataView(EdgeViewABC)
  • changed: class OutEdgeView(Set, Mapping) → class OutEdgeView(Set, Mapping, EdgeViewABC)
  • changed: constructor OutEdgeDataView(viewer, nbunch=…, data=…, default=…) → constructor OutEdgeDataView(viewer, nbunch=…, data=…, *, default=…)
  • changed: constructor OutMultiEdgeDataView(viewer, nbunch=…, data=…, keys=…, default=…) → constructor OutMultiEdgeDataView(viewer, nbunch=…, data=…, *, default=…, keys=…)
  • changed: method OutMultiEdgeView.data(data=…, keys=…, default=…, nbunch=…) → method OutMultiEdgeView.data(data=…, default=…, nbunch=…, keys=…)
  • removed: variable has_ogr
  • removed: variable has_yaml
  • removed: variable needs_ogr
  • removed: variable needs_yaml
  • added: variable has_lxml
  • added: variable needs_lxml
  • removed: function from_numpy_matrix(A, parallel_edges=…, create_using=…)
  • removed: function from_scipy_sparse_matrix(A, parallel_edges=…, create_using=…, edge_attribute=…)
  • removed: function to_numpy_matrix(G, nodelist=…, dtype=…, order=…, multigraph_weight=…, weight=…, nonedge=…)
  • removed: function to_numpy_recarray(G, nodelist=…, dtype=…, order=…)
  • removed: function to_scipy_sparse_matrix(G, nodelist=…, dtype=…, weight=…, format=…)
  • changed: function from_numpy_array(A, parallel_edges=…, create_using=…) → function from_numpy_array(A, parallel_edges=…, create_using=…, edge_attr=…, *, nodelist=…, nonedge=…)
  • changed: function from_pandas_adjacency(df, create_using=…) → function from_pandas_adjacency(df, create_using=…, *, nonedge=…)
  • changed: function to_pandas_edgelist(G, source=…, target=…, nodelist=…, dtype=…, order=…, edge_key=…) → function to_pandas_edgelist(G, source=…, target=…, nodelist=…, dtype=…, edge_key=…)
  • changed: function bipartite_layout(G, nodes, align=…, scale=…, center=…, aspect_ratio=…) → function bipartite_layout(G, nodes=…, align=…, scale=…, center=…, aspect_ratio=…, store_pos_as=…)
  • changed: function circular_layout(G, scale=…, center=…, dim=…) → function circular_layout(G, scale=…, center=…, dim=…, store_pos_as=…)
  • changed: function kamada_kawai_layout(G, dist=…, pos=…, weight=…, scale=…, center=…, dim=…) → function kamada_kawai_layout(G, dist=…, pos=…, weight=…, scale=…, center=…, dim=…, store_pos_as=…)
  • changed: function multipartite_layout(G, subset_key=…, align=…, scale=…, center=…) → function multipartite_layout(G, subset_key=…, align=…, scale=…, center=…, store_pos_as=…)
  • changed: function planar_layout(G, scale=…, center=…, dim=…) → function planar_layout(G, scale=…, center=…, dim=…, store_pos_as=…)
  • changed: function random_layout(G, center=…, dim=…, seed=…) → function random_layout(G, center=…, dim=…, seed=…, store_pos_as=…)
  • changed: function shell_layout(G, nlist=…, rotate=…, scale=…, center=…, dim=…) → function shell_layout(G, nlist=…, rotate=…, scale=…, center=…, dim=…, store_pos_as=…)
  • changed: function spectral_layout(G, weight=…, scale=…, center=…, dim=…) → function spectral_layout(G, weight=…, scale=…, center=…, dim=…, store_pos_as=…)
  • changed: function spiral_layout(G, scale=…, center=…, dim=…, resolution=…, equidistant=…) → function spiral_layout(G, scale=…, center=…, dim=…, resolution=…, equidistant=…, store_pos_as=…)
  • changed: function spring_layout(G, k=…, pos=…, fixed=…, iterations=…, threshold=…, weight=…, scale=…, center=…, dim=…, seed=…) → function spring_layout(G, k=…, pos=…, fixed=…, iterations=…, threshold=…, weight=…, scale=…, center=…, dim=…, seed=…, store_pos_as=…, *, method=…, gravity=…)
  • added: function arf_layout(G, pos=…, scaling=…, a=…, etol=…, dt=…, max_iter=…, *, seed=…, store_pos_as=…)
  • added: function bfs_layout(G, start, *, align=…, scale=…, center=…, store_pos_as=…)
  • added: function forceatlas2_layout(G, pos=…, *, max_iter=…, jitter_tolerance=…, scaling_ratio=…, gravity=…, distributed_action=…, strong_gravity=…, node_mass=…, node_size=…, weight=…, linlog=…, seed=…, dim=…, store_pos_as=…)
  • added: function to_latex(Gbunch, pos=…, tikz_options=…, default_node_options=…, node_options=…, node_label=…, default_edge_options=…, edge_options=…, edge_label=…, edge_label_options=…, caption=…, latex_label=…, sub_captions=…, sub_labels=…, n_rows=…, as_document=…, document_wrapper=…, figure_wrapper=…, subfigure_wrapper=…)
  • added: function to_latex_raw(G, pos=…, tikz_options=…, default_node_options=…, node_options=…, node_label=…, default_edge_options=…, edge_options=…, edge_label=…, edge_label_options=…)
  • added: function write_latex(Gbunch, path, **options)
  • changed: function draw_networkx_edge_labels(G, pos, edge_labels=…, label_pos=…, font_size=…, font_color=…, font_family=…, font_weight=…, alpha=…, bbox=…, horizontalalignment=…, verticalalignment=…, ax=…, rotate=…, clip_on=…) → function draw_networkx_edge_labels(G, pos, edge_labels=…, label_pos=…, font_size=…, font_color=…, font_family=…, font_weight=…, alpha=…, bbox=…, horizontalalignment=…, verticalalignment=…, ax=…, rotate=…, clip_on=…, node_size=…, nodelist=…, connectionstyle=…, hide_ticks=…)
  • changed: function draw_networkx_edges(G, pos, edgelist=…, width=…, edge_color=…, style=…, alpha=…, arrowstyle=…, arrowsize=…, edge_cmap=…, edge_vmin=…, edge_vmax=…, ax=…, arrows=…, label=…, node_size=…, nodelist=…, node_shape=…, connectionstyle=…, min_source_margin=…, min_target_margin=…) → function draw_networkx_edges(G, pos, edgelist=…, width=…, edge_color=…, style=…, alpha=…, arrowstyle=…, arrowsize=…, edge_cmap=…, edge_vmin=…, edge_vmax=…, ax=…, arrows=…, label=…, node_size=…, nodelist=…, node_shape=…, connectionstyle=…, min_source_margin=…, min_target_margin=…, hide_ticks=…)
  • changed: function draw_networkx_labels(G, pos, labels=…, font_size=…, font_color=…, font_family=…, font_weight=…, alpha=…, bbox=…, horizontalalignment=…, verticalalignment=…, ax=…, clip_on=…) → function draw_networkx_labels(G, pos, labels=…, font_size=…, font_color=…, font_family=…, font_weight=…, alpha=…, bbox=…, horizontalalignment=…, verticalalignment=…, ax=…, clip_on=…, hide_ticks=…)
  • changed: function draw_networkx_nodes(G, pos, nodelist=…, node_size=…, node_color=…, node_shape=…, alpha=…, cmap=…, vmin=…, vmax=…, ax=…, linewidths=…, edgecolors=…, label=…, margins=…) → function draw_networkx_nodes(G, pos, nodelist=…, node_size=…, node_color=…, node_shape=…, alpha=…, cmap=…, vmin=…, vmax=…, ax=…, linewidths=…, edgecolors=…, label=…, margins=…, hide_ticks=…)
  • added: function apply_matplotlib_colors(G, src_attr, dest_attr, map, vmin=…, vmax=…, nodes=…)
  • added: function display(G, canvas=…, **kwargs)
  • added: function draw_bipartite(G, **kwargs)
  • added: function draw_forceatlas2(G, **kwargs)
  • added: function kneser_graph(n, k)
  • added: function tadpole_graph(m, n, create_using=…)
  • changed: function scale_free_graph(n, alpha=…, beta=…, gamma=…, delta_in=…, delta_out=…, create_using=…, seed=…, initial_graph=…) → function scale_free_graph(n, alpha=…, beta=…, gamma=…, delta_in=…, delta_out=…, seed=…, initial_graph=…)
  • changed: function duplication_divergence_graph(n, p, seed=…) → function duplication_divergence_graph(n, p, seed=…, *, create_using=…)
  • changed: function partial_duplication_graph(N, n, p, q, seed=…) → function partial_duplication_graph(N, n, p, q, seed=…, *, create_using=…)
  • added: function is_regular_expander(G, *, epsilon=…)
  • added: function maybe_regular_expander(n, d, *, create_using=…, max_tries=…, seed=…)
  • added: function maybe_regular_expander_graph(n, d, *, create_using=…, max_tries=…, seed=…)
  • added: function random_regular_expander_graph(n, d, *, epsilon=…, create_using=…, max_tries=…, seed=…)
  • changed: function geographical_threshold_graph(n, theta, dim=…, pos=…, weight=…, metric=…, p_dist=…, seed=…) → function geographical_threshold_graph(n, theta, dim=…, pos=…, weight=…, metric=…, p_dist=…, seed=…, *, pos_name=…, weight_name=…)
  • changed: function geometric_edges(G, radius, p=…) → function geometric_edges(G, radius, p=…, *, pos_name=…)
  • changed: function random_geometric_graph(n, radius, dim=…, pos=…, p=…, seed=…) → function random_geometric_graph(n, radius, dim=…, pos=…, p=…, seed=…, *, pos_name=…)
  • changed: function soft_random_geometric_graph(n, radius, dim=…, pos=…, p=…, p_dist=…, seed=…) → function soft_random_geometric_graph(n, radius, dim=…, pos=…, p=…, p_dist=…, seed=…, *, pos_name=…)
  • changed: function thresholded_random_geometric_graph(n, radius, theta, dim=…, pos=…, weight=…, p=…, seed=…) → function thresholded_random_geometric_graph(n, radius, theta, dim=…, pos=…, weight=…, p=…, seed=…, *, pos_name=…, weight_name=…)
  • changed: function waxman_graph(n, beta=…, alpha=…, L=…, domain=…, metric=…, seed=…) → function waxman_graph(n, beta=…, alpha=…, L=…, domain=…, metric=…, seed=…, *, pos_name=…)
  • added: function geometric_soft_configuration_graph(*, beta, n=…, gamma=…, mean_degree=…, kappas=…, seed=…)
  • changed: function nonisomorphic_trees(order, create=…) → function nonisomorphic_trees(order)
  • removed: function random_lobster(n, p1, p2, seed=…)
  • changed: function barabasi_albert_graph(n, m, seed=…, initial_graph=…) → function barabasi_albert_graph(n, m, seed=…, initial_graph=…, *, create_using=…)
  • changed: function connected_watts_strogatz_graph(n, k, p, tries=…, seed=…) → function connected_watts_strogatz_graph(n, k, p, tries=…, seed=…, *, create_using=…)
  • changed: function dense_gnm_random_graph(n, m, seed=…) → function dense_gnm_random_graph(n, m, seed=…, *, create_using=…)
  • changed: function dual_barabasi_albert_graph(n, m1, m2, p, seed=…, initial_graph=…) → function dual_barabasi_albert_graph(n, m1, m2, p, seed=…, initial_graph=…, *, create_using=…)
  • changed: function extended_barabasi_albert_graph(n, m, p, q, seed=…) → function extended_barabasi_albert_graph(n, m, p, q, seed=…, *, create_using=…)
  • changed: function fast_gnp_random_graph(n, p, seed=…, directed=…) → function fast_gnp_random_graph(n, p, seed=…, directed=…, *, create_using=…)
  • changed: function gnm_random_graph(n, m, seed=…, directed=…) → function gnm_random_graph(n, m, seed=…, directed=…, *, create_using=…)
  • changed: function gnp_random_graph(n, p, seed=…, directed=…) → function gnp_random_graph(n, p, seed=…, directed=…, *, create_using=…)
  • changed: function newman_watts_strogatz_graph(n, k, p, seed=…) → function newman_watts_strogatz_graph(n, k, p, seed=…, *, create_using=…)
  • changed: function powerlaw_cluster_graph(n, m, p, seed=…) → function powerlaw_cluster_graph(n, m, p, seed=…, *, create_using=…)
  • changed: function random_kernel_graph(n, kernel_integral, kernel_root=…, seed=…) → function random_kernel_graph(n, kernel_integral, kernel_root=…, seed=…, *, create_using=…)
  • changed: function random_powerlaw_tree(n, gamma=…, seed=…, tries=…) → function random_powerlaw_tree(n, gamma=…, seed=…, tries=…, *, create_using=…)
  • changed: function random_regular_graph(d, n, seed=…) → function random_regular_graph(d, n, seed=…, *, create_using=…)
  • changed: function random_shell_graph(constructor, seed=…) → function random_shell_graph(constructor, seed=…, *, create_using=…)
  • changed: function watts_strogatz_graph(n, k, p, seed=…) → function watts_strogatz_graph(n, k, p, seed=…, *, create_using=…)
  • added: function random_k_lift(G, k, seed=…)
  • added: function random_lobster_graph(n, p1, p2, seed=…, *, create_using=…)
  • removed: function make_small_graph(graph_description, create_using=…)
  • added: function generalized_petersen_graph(n, k, *, create_using=…)
  • added: function shrikhande_graph(create_using=…)
  • added: function visibility_graph(series)
  • removed: function random_tree(n, seed=…, create_using=…)
  • added: function random_labeled_rooted_forest(n, *, seed=…)
  • added: function random_labeled_rooted_tree(n, *, seed=…)
  • added: function random_labeled_tree(n, *, seed=…)
  • added: function random_unlabeled_rooted_forest(n, *, q=…, number_of_forests=…, seed=…)
  • added: function random_unlabeled_rooted_tree(n, *, number_of_trees=…, seed=…)
  • added: function random_unlabeled_tree(n, *, number_of_trees=…, seed=…)
  • added: function spectral_bisection(G, weight=…, normalized=…, tol=…, method=…, seed=…)
  • removed: variable adj_matrix
  • changed: function adjacency_matrix(G, nodelist=…, dtype=…, weight=…) → function adjacency_matrix(G, nodelist=…, dtype=…, weight=…, *, format=…)
  • changed: function incidence_matrix(G, nodelist=…, edgelist=…, oriented=…, weight=…) → function incidence_matrix(G, nodelist=…, edgelist=…, oriented=…, weight=…, *, dtype=…)
  • removed: function total_spanning_tree_weight(G, weight=…)
  • added: function magnetic_laplacian_matrix(G, *, nodelist=…, normalized=…, q=…, weight=…)
  • added: function magnetic_spectrum(G, *, q=…, weight=…, normalized=…)
  • removed: function read_gpickle(path)
  • removed: function write_gpickle(G, path, protocol=…)
  • changed: function cytoscape_data(G, attrs=…, name=…, ident=…) → function cytoscape_data(G, name=…, ident=…)
  • changed: function cytoscape_graph(data, attrs=…, name=…, ident=…) → function cytoscape_graph(data, name=…, ident=…)
  • removed: function jit_data(G, indent=…, default=…)
  • removed: function jit_graph(data, create_using=…)
  • changed: function node_link_data(G, attrs=…, *, source=…, target=…, name=…, key=…, link=…) → function node_link_data(G, *, source=…, target=…, name=…, key=…, edges=…, nodes=…)
  • changed: function node_link_graph(data, directed=…, multigraph=…, attrs=…, *, source=…, target=…, name=…, key=…, link=…) → function node_link_graph(data, directed=…, multigraph=…, *, source=…, target=…, name=…, key=…, edges=…, nodes=…)
  • changed: function tree_data(G, root, attrs=…, ident=…, children=…) → function tree_data(G, root, ident=…, children=…)
  • changed: function tree_graph(data, attrs=…, ident=…, children=…) → function tree_graph(data, ident=…, children=…)
  • removed: function read_shp(path, simplify=…, geom_attrs=…, strict=…)
  • removed: function write_shp(G, outdir)
  • removed: function forest_str(graph, with_labels=…, sources=…, write=…, ascii_only=…)
  • added: function generate_network_text(graph, with_labels=…, sources=…, max_depth=…, ascii_only=…, vertical_chains=…)
  • added: function write_network_text(graph, path=…, with_labels=…, sources=…, max_depth=…, ascii_only=…, end=…, vertical_chains=…)
  • added: class _dispatchable
  • added: function _dispatchable(func=…, **kwargs)
  • added: class Config
  • added: method Config.get(key, default=…)
  • added: method Config.items()
  • added: method Config.keys()
  • added: method Config.values()
  • removed: function reversed(G)
  • removed: function preserve_random_state(func)
  • removed: function random_state(random_state_argument)
  • removed: function consume(iterator)
  • removed: function default_opener(filename)
  • removed: function dict_to_numpy_array1(d, mapping=…)
  • removed: function dict_to_numpy_array2(d, mapping=…)
  • removed: function empty_generator()
  • removed: function generate_unique_node()
  • removed: function is_iterator(obj)
  • removed: function is_list_of_ints(intlist)
  • removed: function is_string_like(obj)
  • removed: function iterable(obj)
  • removed: function make_str(x)
  • removed: function to_tuple(x)
  • changed: function edges_equal(edges1, edges2) → function edges_equal(edges1, edges2, *, directed=…)
  • added: class PythonRandomViaNumpyBits(random.Random)
  • added: constructor PythonRandomViaNumpyBits(rng=…)
  • added: function _clear_cache(G)
  • added: method PythonRandomViaNumpyBits.getrandbits(k)
  • added: method PythonRandomViaNumpyBits.getstate()
  • added: method PythonRandomViaNumpyBits.random()
  • added: method PythonRandomViaNumpyBits.seed(*args, **kwds)
  • added: method PythonRandomViaNumpyBits.setstate(state)
  • added: function is_valid_tree_degree_sequence(degree_sequence)