NetworkX 3.0#

发布日期:2023年1月7日

支持Python 3.8、3.9、3.10和3.11。

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

更多信息,请访问我们的 网站 和我们的:ref:示例库 。 请将评论和问题发送至 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 的实现,以修复多个bug并提高性能。

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

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

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

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

API变更#

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

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

弃用#

  • [ #5723 ] 如果pydot没有得到积极维护,将来将弃用 nx.nx_pydot.* 。建议用户改用pygraphviz。

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

已合并的PRs#

  • 升级发布版本

  • 在多项式文档中添加特征多项式示例(#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)

  • 为self-ancestors/descendants添加文档字符串示例 (#5802)

  • 更新precommit linters (#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)

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

  • 修复docbuild警告:移除is_string_like并调整corona product的缩进 (#5845)

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

  • 移除OrderedGraphs (#5813)

  • 删除NumPy 1.19 (#5856)

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

  • 对文档进行轻微修正 (#5868)

  • 尝试逆转hasattr导致的速度下降,这对cached_property是必要的 (#5836)

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

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

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

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

  • 更新precommit钩子 (#5923)

  • 移除旧的Appveyor杂项 (#5924)

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

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

  • 将nodelink参数弃用期限提高到v3.2 (#5933)

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

  • 更新pygraphviz (#5934)

  • 进一步改进strategy_saturation_largest_first (#5935)

  • Arf布局 (#5910)

  • [增强] 在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树测试 (#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中完成了测试,解决了问题#6184(#6185)

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

  • 将ThinGraph示例添加到Multi*Graph doc_strings中(#6160)

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

  • 为问题#6030在beamsearch.py中的算法添加了测试覆盖率(#6087)

  • 改进了扩展器随机图生成器的测试覆盖率(#6073)

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

  • 指定3.0rc1版本发布

  • 提升发布版本号

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

  • 添加了laplacian_spectrum示例(#6169)

  • 为问题#6033在betweenness_subset.py中的算法改进了测试覆盖率(#6083)

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

  • 改进了core.py的覆盖率(#6116)

  • 将清除边缘方法添加为nx.freeze冻结的方法之一(#6190)

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

  • 小的Python 2清理(#6219)

  • 添加laplacian矩阵示例(#6168)

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

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

  • 删除连接边缘交换的不正确测试用例(#6223)

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

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

  • 添加dfs_labeled_edges报告由于深度限制而产生的反向边缘(#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同构问题6257(#6270)

  • 改进了特征向量中心性的测试覆盖率(#6227)

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

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

  • 固定到sphinx 5.2.3(#6277)

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

  • 更新GH操作(#6280)

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

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

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

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

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

  • 同构改进文档(#6295)

  • line.py 进行改进和测试覆盖率(#6215)

  • 修正Katz中心性注释中的拼写错误(#6310)

  • 同构文档中的链接错误(#6296)

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

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

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

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

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

  • 修复文档部署(#6330)

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

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

  • 修复自述文件中的拼写错误(#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