diff options
Diffstat (limited to 'doc/release/release_3.0.rst')
-rw-r--r-- | doc/release/release_3.0.rst | 324 |
1 files changed, 324 insertions, 0 deletions
diff --git a/doc/release/release_3.0.rst b/doc/release/release_3.0.rst new file mode 100644 index 00000000..e6e2f87d --- /dev/null +++ b/doc/release/release_3.0.rst @@ -0,0 +1,324 @@ +NetworkX 3.0 +============ + +Release date: 7 January 2023 + +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 +---------- + +This release is the result of 8 months of work with over 180 changes by +41 contributors. We also have a `guide for people moving from NetworkX 2.X +to NetworkX 3.0 <https://networkx.org/documentation/latest/release/migration_guide_from_2.x_to_3.0.html>`_. Highlights include: + +- Better syncing between G._succ and G._adj for directed G. + And slightly better speed from all the core adjacency data structures. + G.adj is now a cached_property while still having the cache reset when + G._adj is set to a new dict (which doesn't happen very often). + Note: We have always assumed that G._succ and G._adj point to the same + object. But we did not enforce it well. If you have somehow worked + around our attempts and are relying on these private attributes being + allowed to be different from each other due to loopholes in our previous + code, you will have to look for other loopholes in our new code + (or subclass DiGraph to explicitly allow this). +- If your code sets G._succ or G._adj to new dictionary-like objects, you no longer + have to set them both. Setting either will ensure the other is set as well. + And the cached_properties G.adj and G.succ will be rest accordingly too. +- If you use the presence of the attribute `_adj` as a criteria for the object + being a Graph instance, that code may need updating. The graph classes + themselves now have an attribute `_adj`. So, it is possible that whatever you + are checking might be a class rather than an instance. We suggest you check + for attribute `_adj` to verify it is like a NetworkX graph object or type and + then `type(obj) is type` to check if it is a class. +- We have added an `experimental plugin feature <https://github.com/networkx/networkx/pull/6000>`_, + which let users choose alternate backends like GraphBLAS, CuGraph for computation. This is an + opt-in feature and may change in future releases. +- Improved integration with the general `Scientific Python ecosystem <https://networkx.org/documentation/latest/release/migration_guide_from_2.x_to_3.0.html#improved-integration-with-scientific-python>`_. +- New drawing feature (module and tests) from NetworkX graphs to the TikZ library of TeX/LaTeX. + The basic interface is ``nx.to_latex(G, pos, **options)`` to construct a string of latex code or + ``nx.write_latex(G, filename, as_document=True, **options)`` to write the string to a file. +- Added an improved subgraph isomorphism algorithm called VF2++. + +Improvements +------------ +- [`#5663 <https://github.com/networkx/networkx/pull/5663>`_] + Implements edge swapping for directed graphs. +- [`#5883 <https://github.com/networkx/networkx/pull/5883>`_] + Replace the implementation of ``lowest_common_ancestor`` and + ``all_pairs_lowest_common_ancestor`` with a "naive" algorithm to fix + several bugs and improve performance. +- [`#5912 <https://github.com/networkx/networkx/pull/5912>`_] + The ``mapping`` argument of the ``relabel_nodes`` function can be either a + mapping or a function that creates a mapping. ``relabel_nodes`` first checks + whether the ``mapping`` is callable - if so, then it is used as a function. + This fixes a bug related for ``mapping=str`` and may change the behavior for + other ``mapping`` arguments that implement both ``__getitem__`` and + ``__call__``. +- [`#5898 <https://github.com/networkx/networkx/pull/5898>`_] + Implements computing and checking for minimal d-separators between two nodes. + Also adds functionality to DAGs for computing v-structures. +- [`#5943 <https://github.com/networkx/networkx/pull/5943>`_] + ``is_path`` used to raise a `KeyError` when the ``path`` argument contained + a node that was not in the Graph. The behavior has been updated so that + ``is_path`` returns `False` in this case rather than raising the exception. +- [`#6003 <https://github.com/networkx/networkx/pull/6003>`_] + ``avg_shortest_path_length`` now raises an exception if the provided + graph is directed but not strongly connected. The previous test (weak + connecting) was wrong; in that case, the returned value was nonsensical. + +API Changes +----------- + +- [`#5899 <https://github.com/networkx/networkx/pull/5899>`_] + The `attrs` keyword argument will be replaced with keyword only arguments + `source`, `target`, `name`, `key` and `link` for `json_graph/node_link` functions. + +Deprecations +------------ + +- [`#5723 <https://github.com/networkx/networkx/issues/5723>`_] + ``nx.nx_pydot.*`` will be deprecated in the future if pydot isn't being + actively maintained. Users are recommended to use pygraphviz instead. +- [`#5899 <https://github.com/networkx/networkx/pull/5899>`_] + The `attrs` keyword argument will be replaced with keyword only arguments + `source`, `target`, `name`, `key` and `link` for `json_graph/node_link` functions. + +Merged PRs +---------- + +- Bump release version +- Add characteristic polynomial example to polynomials docs (#5730) +- Remove deprecated function is_string_like (#5738) +- Remove deprecated function make_str (#5739) +- Remove unused 'name' parameter from `union` (#5741) +- Remove deprecated function is_iterator (#5740) +- Remove deprecated `euclidean` from geometric.py (#5744) +- Remove deprecated function utils.consume (#5745) +- Rm `to_numpy_recarray` (#5737) +- Remove deprecated function utils.empty_generator (#5748) +- Rm jit.py (#5751) +- Remove deprecated context managers (#5752) +- Remove deprecated function utils.to_tuple (#5755) +- Remove deprecated display_pygraphviz (#5754) +- Remove to_numpy_matrix & from_numpy_matrix (#5746) +- Remove deprecated decorator preserve_random_state (#5768) +- Remove deprecated function is_list_of_ints (#5743) +- Remove decorator random_state (#5770) +- remove `adj_matrix` from `linalg/graphmatrix.py` (#5753) +- Remove betweenness_centrality_source (#5786) +- Remove deprecated simrank_similarity_numpy (#5783) +- Remove networkx.testing subpackage (#5782) +- Change PyDot PendingDeprecation to Deprecation (#5781) +- Remove deprecated numeric_mixing_matrix (#5777) +- Remove deprecated functions make_small_graph and make_small_undirected_graph (#5761) +- Remove _naive_greedy_modularity_communities (#5760) +- Make chordal_graph_cliques a generator (#5758) +- update cytoscape functions to drop old signature (#5784) +- Remove deprecated functions dict_to_numpy_array2 and dict_to_numpy_array1 (#5756) +- Remove deprecated function utils.default_opener (#5747) +- Remove deprecated function iterable (#5742) +- remove old attr keyword from json_graph/tree (#5785) +- Remove generate_unique_node (#5780) +- Replace node_classification subpackage with a module (#5774) +- Remove gpickle (#5773) +- Remove deprecated function extrema_bounding (#5757) +- Remove coverage and performance from quality (#5775) +- Update return type of google_matrix to numpy.ndarray (#5762) +- Remove deprecated k-nearest-neighbors (#5769) +- Remove gdal dependency (#5766) +- Update return type of attrmatrix (#5764) +- Remove unused deprecated argument from to_pandas_edgelist (#5778) +- Remove deprecated function edge_betweeness (#5765) +- Remove pyyaml dependency (#5763) +- Remove copy methods for Filter* coreviews (#5776) +- Remove deprecated function nx.info (#5759) +- Remove deprecated n_communities argument from greedy_modularity_communities (#5789) +- Remove deprecated functions hub_matrix and authority_matrix (#5767) +- Make HITS numpy and scipy private functions (#5771) +- Add Triad example plot (#5528) +- Add gallery example visualizing DAG with multiple layouts (#5432) +- Make pagerank numpy and scipy private functions (#5772) +- Implement directed edge swap (#5663) +- Update relabel.py to preserve node order (#5258) +- Modify DAG example to show topological layout. (#5835) +- Add docstring example for self-ancestors/descendants (#5802) +- Update precommit linters (#5839) +- remove to/from_scipy_sparse_matrix (#5779) +- Clean up from PR #5779 (#5841) +- Corona Product (#5223) +- Add direct link to github networkx org sponsorship (#5843) +- added examples to efficiency_measures.py (#5643) +- added examples to regular.py (#5642) +- added examples to degree_alg.py (#5644) +- Add docstring examples for triads functions (#5522) +- Fix docbuild warnings: is_string_like is removed and identation in corona product (#5845) +- Use py_random_state to control randomness of random_triad (#5847) +- Remove OrderedGraphs (#5813) +- Drop NumPy 1.19 (#5856) +- Speed up unionfind a bit by not adding root node in the path (#5844) +- Minor doc fixups (#5868) +- Attempt to reverse slowdown from hasattr needed for cached_property (#5836) +- make lazy_import private and remove its internal use (#5878) +- strategy_saturation_largest_first now accepts partial colorings (#5888) +- Add weight distance metrics (#5305) +- docstring updates for `union`, `disjoint_union`, and `compose` (#5892) +- Update precommit hooks (#5923) +- Remove old Appveyor cruft (#5924) +- signature change for `node_link` functions: for issue #5787 (#5899) +- Replace LCA with naive implementations (#5883) +- Bump nodelink args deprecation expiration to v3.2 (#5933) +- Update mapping logic in `relabel_nodes` (#5912) +- Update pygraphviz (#5934) +- Further improvements to strategy_saturation_largest_first (#5935) +- Arf layout (#5910) +- [ENH] Find and verify a minimal D-separating set in DAG (#5898) +- Add Mehlhorn Steiner approximations (#5629) +- Preliminary VF2++ Implementation (#5788) +- Minor docstring touchups and test refactor for `is_path` (#5967) +- Switch to relative import for vf2pp_helpers. (#5973) +- Add vf2pp_helpers subpackage to wheel (#5975) +- Enhance biconnected components to avoid indexing (#5974) +- Update mentored projects list (#5985) +- Add concurrency hook to cancel jobs on new push. (#5986) +- Make all.py generator friendly (#5984) +- Only run scheduled pytest-randomly job in main repo. (#5993) +- Fix steiner tree test (#5999) +- Update doc requirements (#6008) +- VF2++ for Directed Graphs (#5972) +- Fix defect and update docs for MappedQueue, related to gh-5681 (#5939) +- Update pydata-sphinx-theme (#6012) +- Update numpydoc (#6022) +- Fixed test for average shortest path in the case of directed graphs (#6003) +- Update deprecations after 3.0 dep sprint (#6031) +- Use scipy.sparse array datastructure (#6037) +- Designate 3.0b1 release +- Bump release version +- Use org funding.yml +- Update which flow functions support the cutoff argument (#6085) +- Update GML parsing/writing to allow empty lists/tuples as node attributes (#6093) +- Warn on unused visualization kwargs that only apply to FancyArrowPatch edges (#6098) +- Fix weighted MultiDiGraphs in DAG longest path algorithms + add additional tests (#5988) +- Circular center node layout (#6114) +- Fix doc inconsistencies related to cutoff in connectivity.py and disjoint_paths.py (#6113) +- Remove deprecated maxcardinality parameter from min_weight_matching (#6146) +- Remove deprecated `find_cores` (#6139) +- Remove deprecated project function from bipartite package. (#6147) +- Improve test coverage for voterank algorithm (#6161) +- plugin based backend infrastructure to use multiple computation backends (#6000) +- Undocumented parameters in dispersion (#6183) +- Swap.py coverage to 100 (#6176) +- Improve test coverage for current_flow_betweenness module (#6143) +- Completed Testing in community.py resolves issue #6184 (#6185) +- Added an example to algebraic_connectivity (#6153) +- Add ThinGraph example to Multi*Graph doc_strings (#6160) +- Fix defect in eulerize, replace reciprocal edge weights (#6145) +- For issue #6030 Add test coverage for algorithms in beamsearch.py (#6087) +- Improve test coverage expanders stochastic graph generators (#6073) +- Update developer requirements (#6194) +- Designate 3.0rc1 release +- Bump release version +- Tests added in test_centrality.py (#6200) +- add laplacian_spectrum example (#6169) +- PR for issue #6033 Improve test coverage for algorithms in betweenness_subset.py #6033 (#6083) +- Di graph edges doc fix (#6108) +- Improve coverage for core.py (#6116) +- Add clear edges method as a method to be frozen by nx.freeze (#6190) +- Adds LCA test case for self-ancestors from gh-4458. (#6218) +- Minor Python 2 cleanup (#6219) +- Add example laplacian matrix (#6168) +- Revert 6219 and delete comment. (#6222) +- fix wording in error message (#6228) +- Rm incorrect test case for connected edge swap (#6223) +- add missing `seed` to function called by `connected_double_edge_swap` (#6231) +- Hide edges with a weight of None in A*. (#5945) +- Add dfs_labeled_edges reporting of reverse edges due to depth_limit. (#6240) +- Warn users about duplicate nodes in generator function input (#6237) +- Reenable geospatial examples (#6252) +- Draft 3.0 release notes (#6232) +- Add 2.8.x release notes (#6255) +- doc: clarify allowed `alpha` when using nx.draw_networkx_edges (#6254) +- Add a contributor (#6256) +- Allow MultiDiGraphs for LCA (#6234) +- Update simple_paths.py to improve readability of the BFS. (#6273) +- doc: update documentation when providing an iterator over current graph to add/remove_edges_from. (#6268) +- Fix bug vf2pp is isomorphic issue 6257 (#6270) +- Improve test coverage for Eigenvector centrality (#6227) +- Bug fix in swap: directed_edge_swap and double_edge_swap (#6149) +- Adding a test to verify that a NetworkXError is raised when calling n… (#6265) +- Pin to sphinx 5.2.3 (#6277) +- Update pre-commit hooks (#6278) +- Update GH actions (#6280) +- Fix links in release notes (#6281) +- bug fix in smallworld.py: random_reference and lattice_reference (#6151) +- [DOC] Follow numpydoc standard in barbell_graph documentation (#6286) +- Update simple_paths.py: consistent behaviour for `is_simple_path` when path contains nodes not in the graph. (#6272) +- Correctly point towards 2.8.8 in release notes (#6298) +- Isomorphism improve documentation (#6295) +- Improvements and test coverage for `line.py` (#6215) +- Fix typo in Katz centrality comment (#6310) +- Broken link in isomorphism documentation (#6296) +- Update copyright years to 2023 (#6322) +- fix warnings for make doctest (#6323) +- fix whitespace issue in test_internet_as_graph (#6324) +- Create a Tikz latex drawing feature for networkx (#6238) +- Fix docstrings (#6329) +- Fix documentation deployment (#6330) +- Fix links to migration guide (#6331) +- Fix links to migration guide (#6331) +- Fix typo in readme file (#6312) +- Fix typos in the networkx codebase (#6335) +- Refactor vf2pp modules and test files (#6334) + +Contributors +------------ + +- 0ddoe_s +- Abangma Jessika +- Adam Li +- Adam Richardson +- Ali Faraji +- Alimi Qudirah +- Anurag Bhat +- Ben Heil +- Brian Hou +- Casper van Elteren +- danieleades +- Dan Schult +- ddelange +- Dilara Tekinoglu +- Dimitrios Papageorgiou +- Douglas K. G. Araujo +- George Watkins +- Guy Aglionby +- Isaac Western +- Jarrod Millman +- Juanita Gomez +- Kevin Brown +- Konstantinos Petridis +- ladykkk +- Lucas H. McCabe +- Ludovic Stephan +- Lukong123 +- Matt Schwennesen +- Michael Holtz +- Morrison Turnansky +- Mridul Seth +- nsengaw4c +- Okite chimaobi Samuel +- Paula Pérez Bianchi +- Radoslav Fulek +- reneechebbo +- Ross Barnowski +- Sebastiano Vigna +- stevenstrickler +- Sultan Orazbayev +- Tina Oberoi |