路线图#
路线图旨在针对项目中可能需要数月甚至数年开发时间的较大、基础性的变更。较小范围的项目将继续在我们的问题追踪器上进行跟踪。
这些改进的范围意味着这些变更可能会引起争议,很可能需要核心开发团队之间进行重要讨论,并且可能需要创建一个或多个 增强提案(NXEPs) 。
安装#
我们的目标是使 NetworkX 尽可能易于安装。我们的一些依赖项(例如 graphviz)可能安装起来有些棘手。我们的其他依赖项在 CPython 平台上很容易安装,但在其他平台(如 PyPy)上可能会更复杂。解决这些安装问题可能需要与外部项目合作。
可持续性#
我们的目标是降低贡献门槛,加快拉取请求(PR)审查速度,吸引新的维护者,并吸引新的开发者,以确保 NetworkX 的长期可持续性。
这包括:
改进持续集成
使代码库更易接近
创建超越志愿努力的新途径
增加维护者和领导力
提高开发者社区的多样性
性能#
提高速度、降低内存使用量以及能够并行化算法对大多数科学领域和用例都是有益的。
第一步可能包括使用类似 airspeed velocity(https://asv.readthedocs.io/en/stable/)的基准测试系统。这也可能包括审查 NetworkX 与其他软件包之间的现有比较。
可以针对性能和内存使用对单个函数进行优化。我们还有兴趣探索新技术以加速代码并减少内存使用。在采用任何新技术之前,我们需要仔细考虑其对代码可读性、构建和安装 NetworkX 的难度的影响。有关更多信息,请参阅我们的 mission_and_values 。
许多函数可以轻松地并行化。但是,我们需要决定一个 API,并可能实现一些辅助代码以使其保持一致。
文档#
我们希望改进 NetworkX 文档的内容、结构和呈现方式。一些具体目标包括:
更长的画廊示例
领域特定文档(遗传学家的 NetworkX,神经科学家的 NetworkX 等)
如何将 NetworkX 与其他软件包一起使用的示例
线性代数#
我们希望改进基于线性代数的算法。代码比较陈旧,需要审查和重构。这将包括调查 SciPy 的 csgraph。还将包括决定如何处理具有多个实现的算法(例如,某些算法在 Python、NumPy 和 SciPy 中都有实现)。
NumPy 将其 API 与执行引擎分离为 __array_function__
和 __array_ufunc__
。这将使 NumPy 的部分能够接受分布式数组。
(例如dask.array.Array)和GPU数组(例如cupy.ndarray)实现了ndarray接口。目前尚不清楚哪些算法可以直接使用,以及是否在这样做时会有显著的性能提升。
互操作性#
我们希望改进与科学Python生态系统的其他部分的互操作性。 这包括我们依赖的项目(例如NumPy、SciPy、Pandas、Matplotlib)以及我们不依赖的项目(例如Geopandas)。
例如,我们还希望能够与其他网络分析软件无缝交换图形。 另一种与其他科学Python生态系统工具集成的方法是吸收其他工具中有用的功能。我们应该开发工具来简化从这些其他工具中使用NetworkX。 改进互操作性的其他示例可能包括为节点和边视图的```__getitem__```dunder函数提供更类似于pandas的接口(NXEP 2 — 视图切片的API设计 )。 还可以开发一种通用方法,将图表示为单个序列。