NetworkX 2.7#

发布日期:2022年2月28日

支持Python 3.8、3.9和3.10

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

更多信息,请访问我们的 网站 和我们的 示例库 。 请将评论和问题发送至 networkx-discuss 邮件列表

亮点#

此版本是经过7个月的工作,由33位贡献者提交了超过166个拉取请求而发布的。亮点包括:

Warning

由于错误修复,在版本2.7中观察到的哈希值在 weisfeiler_lehman_graph_hash 的输出中已更改。有关详细信息,请参见 gh-4946。 这意味着比较使用不同版本的NetworkX(即版本2.7之前和之后)计算的相同图的哈希可能错误地导致同构测试失败(同构图始终具有匹配的Weisfeiler-Lehman哈希)。 建议用户在升级时重新计算可能存在的任何存储的图哈希。

  • 放弃对Python 3.7的支持。

  • 添加了解决非对称旅行推销员问题的Asadpour算法: asadpour_atsp

  • 添加了Louvain社区检测算法: louvain_communitieslouvain_partitions

  • 删除了对 numpy.matrix 类的所有内部使用,并对所有返回 numpy.matrix 实例的函数添加了一个 FutureWarningnumpy.matrix 类将在NetworkX 3.0中被2D numpy.ndarray 实例取代。

  • 添加了对 scipy.sparse 数组接口的支持。这包括 to_scipy_sparse_arrayfrom_scipy_sparse_array 。在NetworkX 3.0中, 稀疏数组将取代稀疏矩阵成为 scipy.sparse 的主要接口。新代码应该使用 to_scipy_sparse_arrayfrom_scipy_sparse_array ,而不是它们的矩阵对应物。 此外,许多当前返回稀疏矩阵的函数现在会引发 FutureWarning ,以指示它们将在NetworkX 3.0中返回稀疏数组。

  • to_numpy_array 中添加了通用dtype支持。 这增加了对通用属性的支持,例如带有复杂权重的邻接矩阵。这还为处理多图权重中的通用减少函数提供了支持,例如 meanmedian 。最后,这还包括对结构化dtype的支持,这使得可以创建多属性邻接矩阵,并取代不太通用的 to_numpy_recarray

  • 添加了对多图上计算介数中心性的支持。

  • greedy_modularity_communities 中添加了对有向图和多重图的支持。

GSoC PRs#

我们添加了四个Google暑期编程活动项目的工作:

改进#

  • [ #4740 ] 添加Asadpour算法来解决非对称旅行商问题。

  • [ #4897 ] 改进 nx.is_matchingnx.is_maximal_matchingnx.is_perfect_matching 的验证和性能。

  • [ #4924 ] 修复计算 nx.common_neighbor_centrality 时处理断开图的问题。

  • [ #4929 ] 添加Louvain社区检测。

  • [ #4946 ] 添加Weisfeiler-Lehman哈希子图哈希。

  • [ #4950 ] 在 greedy_modularity_communities 中添加一个 n_communities 参数,以在找到所需数量的社区时终止搜索。

  • [ #4965 ] 和 [ #4996 ] 修复 greedy_modularity_communities 中重新标记节点的处理。

  • [ #4976 ] 为多重图添加介数中心性。

  • [ #4999 ] 修复有向图的 degree_assortativity_coefficient

  • [ #5007 ] 为 greedy_modularity_communities 添加对有向图和多重图的支持。

  • [ #5017 ] 改进 descendantsancestors 的实现和文档。

  • [ #5019 ] 改进有向无环图模块的文档和测试。

  • [ #5029 ] 改进 descendants_at_distance 的文档和测试。

  • [ #5032 ] 改进 complement_edges 的性能。

  • [ #5045 ] 将 geometric_edges 添加到 nx 命名空间。

  • [ #5051 ] 为使用 read_edgelist 读取数据添加注释字符的支持。

  • [ #5052 ] 改进 transitive_closure 的性能,并添加对无向图和多重图的支持。

  • [ #5058 ] 改进以GraphML格式写入数据时的异常处理。

  • [ #5065 ] 改进 greedy_modularity_communities 对浮点权重和分辨率值的支持。

  • [ #5077 ] 修复有向图中 fast_gnp_random_graph 中的边概率。

  • [ #5086 ] 修复 lowest_common_ancestors 中的缺陷。

  • [ #5089 ] 添加 find_negative_cycle 以在加权图中查找负循环。

  • [ #5099 ] 改进二元操作符的文档和测试。

  • [ #5104 ] 添加对自环边的支持,并改进 vertex_cover 的性能。

  • [ #5121 ] 改进 *_all 二元操作符的性能。

  • [ #5131 ] 允许在为DiGraphs绘制边时 edge_style 为样式列表。

  • [ #5139 ] 添加对 scipy.sparse 数组接口的支持。

  • [ #5144 ] 改进 node_classification 函数的可读性。

  • [ #5145 ] 采用Python 3.8中添加的 math.hypot

  • [ #5153 ] 修复具有非数值节点的图中的 multipartite_layout

  • [ #5154 ]

允许 arrowsize 成为绘制边缘箭头大小的列表。 - [ #5172 ]

添加 nodes 关键字参数到 find_cliques ,以支持查找仅包含一组节点的最大团。

  • [ #5197 ] 通过高级索引改进 resistance_distance

  • [ #5216 ] 使 omega() 更接近已发布的算法。该值略有变化。 lattice_reference() 中的 niter 参数默认值从1更改为5, omega 中从100更改为5。

  • [ #5217 ] 提高 betweenness_centrality 的性能和可读性。

  • [ #5232 ] 为双向Dijkstra算法添加对 None 边权重的支持。

  • [ #5247 ] 提高用于社区检测的异步标签传播算法 asyn_lpa_communities 的性能。

  • [ #5250 ] 为 to_numpy_array 添加通用dtype支持。

  • [ #5285 ] 通过从原始出版物更新到加权版本,改进 karate_club_graph

  • [ #5287 ] 改进 json_graph 的输入验证。

  • [ #5288 ] 提高 strongly_connected_components 的性能。

  • [ #5324 ] 为 to_numpy_array 添加对结构化dtype的支持。

  • [ #5336 ] 为随机数生成添加对 numpy.random.Generator 接口的支持。

API更改#

  • rescale_layout_dict 返回的字典中的值现在是 numpy.ndarray 对象,而不是元组。这使得 rescale_layout_dict 的返回类型与所有其他布局函数的返回类型一致。

  • google_matrix 中添加了 FutureWarning ,指示在NetworkX 3.0中返回类型将从 numpy.matrix 对象更改为 numpy.ndarray

  • attr_matrix 中添加了 FutureWarning ,指示在NetworkX 3.0中返回类型将从 numpy.matrix 对象更改为 numpy.ndarray 对象。

  • is_*_matching 函数现在对不在G中的节点引发异常。

弃用#

  • [ #5055 ] 弃用 random_state 别名,改用 np_random_state

  • [ #5114 ] 弃用 union 中的 name 关键字参数,因为它未被使用。

  • [ #5143 ]

废弃 euclidean ,推荐使用 math.dist 。 - [ #5166 ]

废弃 node_classification 中的 hmnlgc 模块。

  • [ #5262 ] 废弃 to_scipy_sparse_matrixfrom_scipy_sparse_matrix ,推荐分别使用 to_scipy_sparse_arrayfrom_scipy_sparse_array

  • [ #5283 ] 从 networkx.generators.small 模块中废弃 make_small_graphmake_small_undirected_graph

  • [ #5330 ] 废弃 to_numpy_recarray ,推荐使用带有结构化dtype的 to_numpy_array

  • [ #5341 ] 废弃冗余的 info

已合并的PR#

共提交了166次更改。

  • 在读取/解析edgelist时支持 comments=None (#5051)

  • 在gml文档字符串中添加参考链接到de/stringizers。 (#5053)

  • 添加weisfeiler lehman子图哈希 (#4946)

  • 废弃 random_state 装饰器 (#5055)

  • 问题#5023的bug修复:single_source_dijkstra中的特殊情况bug (#5033)

  • 更具信息量的GraphML异常 (#5058)

  • tutorial.rst的微小更新并为nodes/edges的data方法添加文档字符串 (#5039)

  • 文档 geometric_edges 并将其添加到主命名空间 (#5045)

  • 修复 trophic_levels 文档中的小错误 (#5087)

  • 重构 transitive_closure (#5052)

  • 修复有向图的fast_gnp_random_graph(问题#3389) (#5077)

  • 通过调用正确的方法获取边的数量 (#5095)

  • 更新文档中的指导项目部分 (#5056)

  • 为最短路径节点检查测试参数化 (#5078)

  • 创建FUNDING.yml

  • 废弃union名称参数 (#5114)

  • 更新FUNDING.yml

  • vertex_cover:为自循环节点添加支持 (#5104)

  • 更新核心开发团队 (#5119)

  • 算法/operators/all.py中更快的运算符 (#5121)

  • 文档:为已完成项目的提案添加链接 (#5122)

  • rescale_layout和rescale_layout_dict的字典输出中保持一致的返回类型 (#5091)

  • 将异常变量名e更改为err (#5130)

  • assortativity文档和代码中的微小调整 (#5129)

  • 允许边样式为有向图的样式列表 (#5131)

  • 为operators/binary.py添加示例和微小的文档重构 (#5099)

  • 为gnp生成器的随机图测试套件改进(问题#5092) (#5115)

  • 添加关于检查路径存在性的说明到all_simple_paths。 (#5059)

  • 修复装饰器中引发异常的消息。 (#5136)

  • 为FancyArrowPatches的linestyle测试进行重构。 (#5132)

  • 放弃Py37 (#5143)

  • 使用math.hypot (#5145)

  • 将pyupgrade添加到pre-commit (#5146)

  • 在Python 3.10上进行测试 (#4807)

  • 使用black 21.9b0 (#5148)

  • 使用sphinx 4.2 (#5150)

  • 更新示例要求 (#5151)

  • 更新nx_pylab绘制边颜色和宽度测试 (#5134)

  • 重构node_classification以提高简洁性和可读性 (#5144)

  • 添加临时的pyparsing固定版本以修复CI。(#5156)

  • 添加箭头大小为列表的选项。(#5154)

  • 列出策略。(#5159)

  • 修复问题5123的bug。(#5153)

  • 在py3.10上测试scipy和pandas。(#5174)

  • 弃用 node_classification 包中的 hmnlgc 模块。(#5166)

  • 删除将ax.transOffset传递给LineCollection的部分。(#5173)

  • 添加使用bellman_ford查找负循环的函数。(#5089)

  • 在贡献者FAQ中添加关于算法接受政策的问答。(#5177)

  • 文档:修复加权最短路径文档中的拼写错误。(#5181)

  • 撤销“添加临时的pyparsing固定版本以修复CI。(#5156)” (#5180)

  • 仅在使用时计算最短路径长度。(#5183)

  • 添加Mypy类型检查基础设施。(#5127)

  • xfail pydot测试。(#5187)

  • 从algebraicconnectivity中删除未使用的内部求解器。(#5190)

  • 删除scipy 1.1行为的检查/注释。(#5191)

  • 在Python 3.10上进行测试。(#5185)

  • 为具有undir的祖先/后代添加回归测试。(#5188)

  • 删除内部函数,改用高级索引。(#5197)

  • 修复laplacian函数中的缺失导入和测试。(#5194)

  • 调查预发布测试失败。(#5208)

  • 放弃断言方法,改用assert语句。(#5214)

  • 在mycielski.py中删除未使用的变量。(#5210)

  • 使用队列而不是普通列表。(#5217)

  • 添加关于矩阵->数组输出的FutureWarning到 google_matrix 中。(#5219)

  • 一些 np.matrix 清理。(#5218)

  • 放弃内部laplacian,改用laplacian_matrix。(#5196)

  • [MRG] 创建plot_subgraphs.py示例。(#5165)

  • 在示例库中添加旅行推销员问题。(#4874)

  • 修复DiGraph.edges()中nbunch参数的不一致文档。(#5037)

  • 从与numpy/scipy/pytest rc的测试中更新兼容性。(#5226)

  • math.isclose 替换内部的 close 函数。(#5224)

  • 修复Python 3.10中整数除法的弃用警告。(#5231)

  • 对子图库示例进行润色和建议。(#5225)

  • 使用新的包名称。(#5234)

  • 允许在双向Dijkstra的权重函数中使用None边。(#5232)

  • 添加关于分配问题的FAQ。(#5182)

  • 更新开发依赖。(#5243)

  • 使用tex符号更新文档中的次要问题。(#5244)

  • 加快用于社区检测的异步标签传播的微小更改。(#5247)

  • small.py模块的文档字符串。(#5240)

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

  • 更新sphinx。(#5272)

  • 更新年份。(#5273)

  • 更新额外依赖项。(#5263)

  • 在文档中更新gexf网站链接。(#5275)

  • 更新numpydoc。(#5274)

  • 懒加载函数的初始设置。(#4909)

  • 弃用scipy稀疏矩阵转换函数。(#5262)

  • 修复lowest_common_ancestors(问题#4942)。(#5086)

  • 使小图生成器节点测试更具体。(#5282)

  • 在generators.small中使用from_dict_of_lists而不是make_small_graph。(#5267)

  • 用高级索引重构 to_numpy_array 。(#5250)

  • 修复:更新louvain_partitions以适应阈值(在每个级别中将mod更新为new_mod)。(#5284)

  • 添加对未连接图的异常。(#5287)

  • 修复Tarjan的强连通分量算法实现,使其时间复杂度为 O(|E|+|V|) ,而不是 O(|V|^3) 。(#5288)

  • 为空手道俱乐部图添加权重 (#5285)

  • 修复出现在变量 __all__ 中但文档中未提及的函数,适用于NX2.7 (#5289)

  • 更新到black的稳定版本 (#5296)

  • attr_matrix 中添加FutureWarning,通知用户返回类型的更改 (#5300)

  • 文档:将NXEP2的状态更改为已接受,添加决议 (#5297)

  • 更新测试要求 (#5304)

  • 更新scipy (#5276)

  • 文档:更新文档以包括权重参数的可调用函数 (#5307)

  • 更新pygraphviz (#5314)

  • to_numpy_recarray 文档字符串中记录默认dtype。 (#5315)

  • 删除未使用的AbstractSet。 (#5317)

  • 废弃 make_small_graphmake_small_undirected_graph (#5283)

  • 使用使用示例更新 draw_ 文档字符串 (#5264)

  • 为NX2.7进行更多的numpy.matrix清理 (#5319)

  • 维护:清理同配性模块,删除未使用的变量 (#5301)

  • 为绘制多边标签添加信息性异常。 (#5316)

  • 可能是文档中函数的完整路径的解决方案 (#5049)

  • 维护:清理链接分析模块,删除未使用的变量 (#5306)

  • 使用pytest-mpl (#4579)

  • 将omega保持在[-1, 1]范围内 (#5216)

  • 添加支持以包含一组节点的最大团 (#5172)

  • 维护:删除不必要的辅助函数,使用内置方法生成线图 (#5327)

  • 不推荐从dict_keys对象中抽样。 (#5337)

  • 添加对 numpy.random.Generator 的支持 (#5336)

  • 更新匹配函数以进行错误验证和加快速度 (#4897)

  • 更新发布要求 (#5338)

  • to_numpy_array 添加结构化dtype (#5324)

  • 废弃 to_numpy_recarray (#5330)

  • 第一次2.7版本发布说明。 (#5342)

  • 添加pickle和yaml迁移信息 (#5345)

  • 废弃info (#5341)

  • 修复pandas警告 (#5346)

  • 在3.11-dev上进行测试 (#5339)

  • 指定2.7rc1版本发布

  • 提升发布版本

  • 更新发布流程 (#5348)

  • 使用预期时间承诺更新指导项目信息 (#5349)

  • 在示例中使用np.random.default_rng + 其他更新。 (#5356)

  • 删除conda不支持的内容 (#5361)

  • 在equidistant=True时修复spiral_layout (#5354)

  • 修复文档 (#5364)

贡献者#

  • Will Badart

  • Ross Barnowski

  • Mathieu Bastian

  • Martin Becker

  • Anutosh Bhat

  • Alejandro Candioti

  • Divyansh

  • Andrew Eckart

  • Yossi Eliaz

  • Casper van Elteren

  • Simone Gasperini

  • Daniel Haden

  • Leo Klarner

  • Andrew Knyazev

  • Fabrizio Kuruc

  • Paarth Madan

  • Jarrod Millman

  • Achille Nazaret

  • NikHoh

  • Sultan Orazbayev

  • Dimitrios Papageorgiou

  • Aishwarya Ramasethu

  • Ryuki

  • Katalin Schmidt

  • Dan Schult

  • Mridul Seth

  • Cirus Thenter

  • James Trimble

  • Vadim

  • Hnatiuk Vladyslav

  • Aaron Z

  • eskountis

  • kpberry