路线图#

路线图旨在规划项目的更大型、更基础性的变更,这些变更可能需要数月甚至数年的开发者时间。范围较小的项目将继续在我们的问题追踪器上进行追踪。

这些改进的范围意味着这些变更可能存在争议,可能需要核心开发团队进行大量讨论,并且可能需要创建一个或多个增强提案 (NXEPs)

安装#

我们的目标是让 NetworkX 尽可能易于安装。我们的一些依赖项(例如 graphviz)可能安装起来比较麻烦。我们的其他依赖项在 CPython 平台上易于安装,但在其他平台(如 PyPy)上可能更复杂。解决这些安装问题可能需要与外部项目合作。

可持续性#

我们的目标是减少贡献障碍,加快拉取请求 (PR) 审查速度,引入新的维护者,并吸引新的开发者,以确保 NetworkX 的长期可持续性。

这包括

  • 改进持续集成

  • 使代码库更易于理解

  • 创建超越志愿工作的全新途径

  • 培养维护者和领导力

  • 增加开发者社区的多样性

性能#

提高速度、降低内存使用量以及并行化算法的能力对大多数科学领域和使用场景都有益。

第一步可能包括使用 airspeed velocity(https://asv.readthedocs.io/en/stable/)等工具实现基准测试系统。它还可能包括审查 NetworkX 与其他包之间的现有比较。

可以优化单个函数以提高性能和降低内存使用量。我们还对探索新技术以加速代码和降低内存使用量感兴趣。在采用任何新技术之前,我们需要仔细考虑其对代码可读性以及构建和安装 NetworkX 的难度的影响。欲了解更多信息,请参阅我们的使命与价值观

许多函数可以很容易地并行化。但是,我们需要确定一个 API,并可能实现一些辅助代码以使其保持一致。

文档#

我们希望改进 NetworkX 文档的内容、结构和呈现方式。一些具体目标包括

  • 更长的图库示例

  • 领域特定文档(面向遗传学家的 NetworkX、面向神经科学家的 NetworkX 等)

  • 如何将 NetworkX 与其他包一起使用的示例

线性代数#

我们希望改进基于线性代数的算法。代码比较陈旧,需要审查和重构。这包括研究 SciPy 的 csgraph。这也包括决定如何处理具有多种实现的算法(例如,某些算法在 Python、NumPy 和 SciPy 中都有实现)。

NumPy 已通过 __array_function____array_ufunc__ 将其 API 与执行引擎分离。这将使 NumPy 的部分功能能够接受实现 ndarray 接口的分布式数组(例如 dask.array.Array)和 GPU 数组(例如 cupy.ndarray)。目前尚不清楚哪些算法可以直接使用,以及在使用它们时是否存在显著的性能提升。

互操作性#

我们希望提高与科学 Python 生态系统其余部分的互操作性。这包括我们依赖的项目(例如 NumPy、SciPy、Pandas、Matplotlib)以及我们不依赖的项目(例如 Geopandas)。

例如,我们还希望能够与其他网络分析软件无缝交换图。与科学 Python 生态系统中其他工具集成的另一种方法是采用其他工具中有用的功能。我们还应该开发工具,以便在这些其他工具中轻松使用 NetworkX。互操作性改进的其他示例可能包括为节点和边视图的 `__getitem__` dunder 函数提供更类似于 pandas 的接口(NXEP 2 — 视图切片的 API 设计)。此外,开发一种通用方法,将图表示为 `nodes_and_edges` 对象的一个序列,允许属性字典、节点和边,正如在图生成器讨论中所述

可视化#

可视化不是 NetworkX 的重点,但对许多用户来说是一个主要功能。我们需要增强 NetworkX 的绘图工具。