summaryrefslogtreecommitdiff
path: root/doc/release/release_3.0.rst
diff options
context:
space:
mode:
Diffstat (limited to 'doc/release/release_3.0.rst')
-rw-r--r--doc/release/release_3.0.rst324
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