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_ancestor和all_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变更#
弃用#
已合并的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)
对
union、disjoint_union和compose进行文档字符串更新 (#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