NetworkX 3.0#

发布日期:2023 年 1 月 7 日

支持 Python 3.8、3.9、3.10 和 3.11。

NetworkX 是一个用于创建、操作和研究复杂网络结构、动力学和功能的 Python 包。

欲了解更多信息,请访问我们的网站和我们的示例集。请将意见和问题发送至networkx-discuss 邮件列表

亮点#

此版本是 41 位贡献者经过 8 个月工作,进行 180 多项更改的结果。我们还为从 NetworkX 2.X 迁移到 NetworkX 3.0 的用户提供了指南。亮点包括

  • 对于有向图 G,G._succ 和 G._adj 之间更好地同步。并且所有核心邻接数据结构的速度略有提升。G.adj 现在是一个 cached_property,同时在 G._adj 设置为新的字典时缓存会被重置(这不常发生)。注意:我们一直假设 G._succ 和 G._adj 指向同一个对象。但我们并没有很好地强制执行这一点。如果您通过某种方式绕过了我们的尝试,并且依赖于由于我们之前代码中的漏洞而允许这些私有属性彼此不同,那么您将不得不在我们的新代码中寻找其他漏洞(或子类化 DiGraph 以明确允许此行为)。

  • 如果您的代码将 G._succ 或 G._adj 设置为新的字典式对象,则不再需要同时设置它们。设置其中一个将确保另一个也设置。并且 cached_properties G.adj 和 G.succ 也将相应地重置。

  • 如果您使用属性 _adj 的存在作为对象是 Graph 实例的标准,则该代码可能需要更新。图类本身现在具有属性 _adj。因此,您检查的可能是一个类而不是一个实例。我们建议您检查属性 _adj 以验证它是否类似于 NetworkX 图对象或类型,然后使用 type(obj) is type 检查它是否是一个类。

  • 我们添加了一个实验性插件功能,允许用户选择 GraphBLAS、CuGraph 等替代后端进行计算。这是一个选择加入的功能,可能会在未来的版本中发生变化。

  • 改进了与通用科学计算 Python 生态系统的集成。

  • 新增了将 NetworkX 图绘制到 TeX/LaTeX 的 TikZ 库的功能(模块和测试)。基本接口是使用 nx.to_latex(G, pos, **options) 构建 LaTeX 代码字符串,或使用 nx.write_latex(G, filename, as_document=True, **options) 将字符串写入文件。

  • 添加了名为 VF2++ 的改进子图同构算法。

改进#

  • [#5663] 为有向图实现了边的交换。

  • [#5883] 将 lowest_common_ancestorall_pairs_lowest_common_ancestor 的实现替换为“朴素”算法,以修复几个错误并提高性能。

  • [#5912] relabel_nodes 函数的 mapping 参数可以是一个映射或一个创建映射的函数。relabel_nodes 首先检查 mapping 是否可调用 - 如果是,则将其用作函数。这修复了一个与 mapping=str 相关的错误,并且可能会改变实现了 __getitem____call__ 的其他 mapping 参数的行为。

  • [#5898] 实现了计算和检查两个节点之间的最小 d-分隔符。还为 DAG 添加了计算 v 结构的功能。

  • [#5943] 当 path 参数包含不在图中的节点时,is_path 曾经会引发 KeyError。该行为已更新,在这种情况下 is_path 返回 False 而不是引发异常。

  • [#6003] 如果提供的图是有向图但不是强连通图,avg_shortest_path_length 现在会引发异常。之前的测试(弱连通)是错误的;在这种情况下,返回值是无意义的。

API 更改#

  • [#5813] OrderedGraph 和其他有序类被 Graph 替换,因为 Python 字典(以及 NetworkX 图)现在保持顺序。

  • [#5899] json_graph/node_link 函数的 attrs 关键字参数将被替换为仅关键字参数 sourcetargetnamekeylink

弃用#

  • [#5723] 如果 pydot 未积极维护,nx.nx_pydot.* 将来会被弃用。建议用户改用 pygraphviz。

  • [#5899] json_graph/node_link 函数的 attrs 关键字参数将被替换为仅关键字参数 sourcetargetnamekeylink

合并的 PR#

  • 提升发布版本

  • 将特征多项式示例添加到 polynomials 文档中 (#5730)

  • 移除已弃用的函数 is_string_like (#5738)

  • 移除已弃用的函数 make_str (#5739)

  • union 中移除未使用的 ‘name’ 参数 (#5741)

  • 移除已弃用的函数 is_iterator (#5740)

  • 从 geometric.py 中移除已弃用的 euclidean (#5744)

  • 移除已弃用的函数 utils.consume (#5745)

  • 移除 to_numpy_recarray (#5737)

  • 移除已弃用的函数 utils.empty_generator (#5748)

  • 移除 jit.py (#5751)

  • 移除已弃用的上下文管理器 (#5752)

  • 移除已弃用的函数 utils.to_tuple (#5755)

  • 移除已弃用的 display_pygraphviz (#5754)

  • 移除 to_numpy_matrix 和 from_numpy_matrix (#5746)

  • 移除已弃用的装饰器 preserve_random_state (#5768)

  • 移除已弃用的函数 is_list_of_ints (#5743)

  • 移除装饰器 random_state (#5770)

  • linalg/graphmatrix.py 移除 adj_matrix (#5753)

  • 移除 betweenness_centrality_source (#5786)

  • 移除已弃用的 simrank_similarity_numpy (#5783)

  • 移除 networkx.testing 子包 (#5782)

  • 将 PyDot PendingDeprecation 更改为 Deprecation (#5781)

  • 移除已弃用的 numeric_mixing_matrix (#5777)

  • 移除已弃用的函数 make_small_graph 和 make_small_undirected_graph (#5761)

  • 移除 _naive_greedy_modularity_communities (#5760)

  • 将 chordal_graph_cliques 设为生成器 (#5758)

  • 更新 cytoscape 函数以删除旧签名 (#5784)

  • 移除已弃用的函数 dict_to_numpy_array2 和 dict_to_numpy_array1 (#5756)

  • 移除已弃用的函数 utils.default_opener (#5747)

  • 移除已弃用的函数 iterable (#5742)

  • 从 json_graph/tree 移除旧的 attr 关键字 (#5785)

  • 移除 generate_unique_node (#5780)

  • 将 node_classification 子包替换为模块 (#5774)

  • 移除 gpickle (#5773)

  • 移除已弃用的函数 extrema_bounding (#5757)

  • 从 quality 移除 coverage 和 performance (#5775)

  • 将 google_matrix 的返回类型更新为 numpy.ndarray (#5762)

  • 移除已弃用的 k-nearest-neighbors (#5769)

  • 移除 gdal 依赖项 (#5766)

  • 更新 attrmatrix 的返回类型 (#5764)

  • 从 to_pandas_edgelist 移除未使用的已弃用参数 (#5778)

  • 移除已弃用的函数 edge_betweenness (#5765)

  • 移除 pyyaml 依赖项 (#5763)

  • 移除 Filter* coreviews 的复制方法 (#5776)

  • 移除已弃用的函数 nx.info (#5759)

  • 从 greedy_modularity_communities 移除已弃用的 n_communities 参数 (#5789)

  • 移除已弃用的函数 hub_matrix 和 authority_matrix (#5767)

  • 将 HITS numpy 和 scipy 函数设为私有 (#5771)

  • 添加 Triad 示例图 (#5528)

  • 添加使用多种布局可视化 DAG 的图库示例 (#5432)

  • 将 pagerank numpy 和 scipy 函数设为私有 (#5772)

  • 实现有向边交换 (#5663)

  • 更新 relabel.py 以保留节点顺序 (#5258)

  • 修改 DAG 示例以显示拓扑布局。 (#5835)

  • 为自祖先/后代添加文档字符串示例 (#5802)

  • 更新 precommit 检查器 (#5839)

  • 移除 to/from_scipy_sparse_matrix (#5779)

  • 清理 PR #5779 的后续工作 (#5841)

  • Corona 乘积 (#5223)

  • 添加指向 github networkx 组织赞助的直接链接 (#5843)

  • 将示例添加到 efficiency_measures.py (#5643)

  • 将示例添加到 regular.py (#5642)

  • 将示例添加到 degree_alg.py (#5644)

  • 为 triads 函数添加文档字符串示例 (#5522)

  • 修复文档构建警告:is_string_like 已移除,以及 corona product 中的缩进问题 (#5845)

  • 使用 py_random_state 控制 random_triad 的随机性 (#5847)

  • 移除 OrderedGraphs (#5813)

  • 放弃对 NumPy 1.19 的支持 (#5856)

  • 通过不在路径中添加根节点来稍微加快 unionfind (#5844)

  • 细微的文档修复 (#5868)

  • 尝试解决 cached_property 需要 hasattr 导致的性能下降 (#5836)

  • 将 lazy_import 设为私有并移除其内部使用 (#5878)

  • strategy_saturation_largest_first 现在接受部分着色 (#5888)

  • 添加权重距离度量 (#5305)

  • 更新 uniondisjoint_unioncompose 的文档字符串 (#5892)

  • 更新 precommit 钩子 (#5923)

  • 移除旧的 Appveyor 残留 (#5924)

  • node_link 函数的签名更改:针对 issue #5787 (#5899)

  • 将 LCA 替换为朴素实现 (#5883)

  • 将 nodelink 参数弃用过期时间推迟到 v3.2 (#5933)

  • 更新 relabel_nodes 中的映射逻辑 (#5912)

  • 更新 pygraphviz (#5934)

  • strategy_saturation_largest_first 的进一步改进 (#5935)

  • Arf 布局 (#5910)

  • [ENH] 在 DAG 中查找并验证最小 D-分隔集 (#5898)

  • 添加 Mehlhorn Steiner 近似算法 (#5629)

  • 初步 VF2++ 实现 (#5788)

  • is_path 进行细微的文档字符串修改和测试重构 (#5967)

  • 将 vf2pp_helpers 切换为相对导入 (#5973)

  • 将 vf2pp_helpers 子包添加到 wheel 中 (#5975)

  • 增强双连通分量以避免索引 (#5974)

  • 更新指导项目列表 (#5985)

  • 添加并发钩子以在新推送时取消作业 (#5986)

  • 使 all.py 对生成器友好 (#5984)

  • 仅在主仓库中运行计划的 pytest-randomly 作业 (#5993)

  • 修复 steiner tree 测试 (#5999)

  • 更新文档要求 (#6008)

  • 有向图的 VF2++ (#5972)

  • 修复 MappedQueue 的缺陷并更新文档,与 gh-5681 相关 (#5939)

  • 更新 pydata-sphinx-theme (#6012)

  • 更新 numpydoc (#6022)

  • 修复有向图平均最短路径的测试 (#6003)

  • 在 3.0 弃用冲刺后更新弃用项 (#6031)

  • 使用 scipy.sparse 数组数据结构 (#6037)

  • 指定 3.0b1 版本

  • 提升发布版本

  • 使用 org funding.yml

  • 更新支持 cutoff 参数的流函数 (#6085)

  • 更新 GML 解析/写入以允许将空列表/元组作为节点属性 (#6093)

  • 对仅适用于 FancyArrowPatch 边的未使用的可视化 kwargs 发出警告 (#6098)

  • 修复 DAG 最长路径算法中的加权 MultiDiGraphs + 添加附加测试 (#5988)

  • 圆形中心节点布局 (#6114)

  • 修复 connectivity.py 和 disjoint_paths.py 中与 cutoff 相关的文档不一致问题 (#6113)

  • 从 min_weight_matching 移除已弃用的 maxcardinality 参数 (#6146)

  • 移除已弃用的 find_cores (#6139)

  • 从 bipartite 包中移除已弃用的 project 函数 (#6147)

  • 提高 voterank 算法的测试覆盖率 (#6161)

  • 基于插件的后端基础设施,用于使用多个计算后端 (#6000)

  • dispersion 中未记录的参数 (#6183)

  • Swap.py 覆盖率达到 100 (#6176)

  • 提高 current_flow_betweenness 模块的测试覆盖率 (#6143)

  • 完成 community.py 中的测试,解决 issue #6184 (#6185)

  • 向 algebraic_connectivity 添加了一个示例 (#6153)

  • 向 Multi*Graph 的文档字符串添加 ThinGraph 示例 (#6160)

  • 修复 eulerize 中的缺陷,替换倒数边权重 (#6145)

  • 针对 issue #6030,增加 beamsearch.py 中算法的测试覆盖率 (#6087)

  • 提高扩展器随机图生成器的测试覆盖率 (#6073)

  • 更新开发者要求 (#6194)

  • 指定 3.0rc1 版本

  • 提升发布版本

  • 在 test_centrality.py 中添加测试 (#6200)

  • 添加 laplacian_spectrum 示例 (#6169)

  • 针对 issue #6033 的 PR,提高 betweenness_subset.py 中算法的测试覆盖率 #6033 (#6083)

  • 有向图边文档修复 (#6108)

  • 提高 core.py 的覆盖率 (#6116)

  • 添加 clear edges 方法作为 nx.freeze 冻结的方法 (#6190)

  • 添加来自 gh-4458 的自祖先的 LCA 测试用例 (#6218)

  • 细微的 Python 2 清理 (#6219)

  • 添加拉普拉斯矩阵示例 (#6168)

  • 撤销 6219 并删除注释 (#6222)

  • 修复错误消息中的措辞 (#6228)

  • 移除 connected edge swap 的错误测试用例 (#6223)

  • connected_double_edge_swap 调用的函数添加缺失的 seed (#6231)

  • 在 A* 中隐藏权重为 None 的边 (#5945)

  • 添加 dfs_labeled_edges 报告因 depth_limit 导致的逆向边 (#6240)

  • 警告用户生成器函数输入中的重复节点 (#6237)

  • 重新启用地理空间示例 (#6252)

  • 起草 3.0 发布说明 (#6232)

  • 添加 2.8.x 发布说明 (#6255)

  • 文档:澄清使用 nx.draw_networkx_edges 时允许的 alpha (#6254)

  • 添加一位贡献者 (#6256)

  • 允许 MultiDiGraphs 用于 LCA (#6234)

  • 更新 simple_paths.py 以提高 BFS 的可读性 (#6273)

  • 文档:更新在 add/remove_edges_from 提供当前图的迭代器时的文档 (#6268)

  • 修复 bug vf2pp 是同构的 issue 6257 (#6270)

  • 提高 Eigenvector centrality 的测试覆盖率 (#6227)

  • 修复 swap 中的 bug:directed_edge_swap 和 double_edge_swap (#6149)

  • 添加测试以验证调用 n… 时是否引发 NetworkXError (#6265)

  • 锁定 sphinx 版本为 5.2.3 (#6277)

  • 更新 pre-commit 钩子 (#6278)

  • 更新 GH actions (#6280)

  • 修复发布说明中的链接 (#6281)

  • 修复 smallworld.py 中的 bug:random_reference 和 lattice_reference (#6151)

  • [DOC] 在 barbell_graph 文档中遵循 numpydoc 标准 (#6286)

  • 更新 simple_paths.py:当路径包含不在图中的节点时,is_simple_path 行为一致 (#6272)

  • 在发布说明中正确指向 2.8.8 (#6298)

  • 改进 Isomorphism 文档 (#6295)

  • 改进 line.py 并增加测试覆盖率 (#6215)

  • 修复 Katz centrality 注释中的错别字 (#6310)

  • isomorphism 文档中的断链 (#6296)

  • 将版权年份更新到 2023 (#6322)

  • 修复 make doctest 的警告 (#6323)

  • 修复 test_internet_as_graph 中的空白问题 (#6324)

  • 为 networkx 创建 Tikz latex 绘图功能 (#6238)

  • 修复文档字符串 (#6329)

  • 修复文档部署 (#6330)

  • 修复指向迁移指南的链接 (#6331)

  • 修复指向迁移指南的链接 (#6331)

  • 修复 readme 文件中的错别字 (#6312)

  • 修复 networkx 代码库中的错别字 (#6335)

  • 重构 vf2pp 模块和测试文件 (#6334)

贡献者#

  • 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

  • Erik Welch

  • George Watkins

  • Guy Aglionby

  • Isaac Western

  • Jarrod Millman

  • Jim Kitchen

  • 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