25 个版本

0.10.1 2024 年 2 月 21 日
0.9.2 2023 年 5 月 15 日
0.8.0 2023 年 3 月 24 日

#484算法

每月 49 次下载
用于 alphalpha

MIT 许可证

89KB
1.5K SLoC

LoPHAT

Lockfree Persistent Homology Algorithm Toolbox

crates.io PyPi docs.rs Read the Docs

在: 您的浏览器Google Colab

概述

LoPHAT 是一个 Rust 库,实现了用于计算持久同调(PH)的无锁算法,该算法在 [1] 中提出。Python 绑定通过 PyO3 提供,界面与使用过 PHAT 的用户熟悉 [2]

此库的主要目标是使算法对希望计算 任意滤波链复形 的 PH 的用户可用。特别是,LoPHAT 专门用于计算常见滤波或甚至滤波单纯复形的 PH。因此,您应该期望 LoPHAT 的性能不如 giotto-ph [3]oineus [4],这两者都使用了 [1] 中的算法。

[1] 中描述的算法的唯一区别是

  • 我们使用 pinboard 库进行基于纪元的矩阵内存管理。
  • 我们在内存中将 $R$ 和 $V$ 的第 $j$ 列存储在一起,允许完整的 $R=DV$ 分解(而不仅仅是计算配对)。
  • 我们还采用清除优化 [5] 并提供反传递法(以便计算持久同调)的方法。
  • 我们通过工作窃取分发块,使用 rayon 库。

警告 LoPHAT 目前处于测试阶段。实现尚未优化,API 不固定,测试有限。

Rust 中的使用

使用以下命令安装

cargo add lophat

有关使用方法,请参阅 Rust 文档

Python 中的使用

可以通过以下方式安装 Python 绑定

pip install lophat

如果失败,可能是 pip 尝试在没有 cargo 工具链的情况下从源代码安装。要强制安装二进制文件,请运行

pip install --only-binary lophat lophat

这为您提供了一个功能,即 compute_pairings 函数,该函数返回一个图,作为一对一列的集合和一对列的集合。默认情况下,它使用所有可用的线程和[1]中的无锁算法。要使用串行算法或限制线程数,请额外提供一个 LoPhatOptions 对象。

有关更多详细信息,请参阅Python 文档。例如,请参阅文件 example.py此 Google Colab 笔记本

待办事项

  • 更改每个算法的选项结构
  • 确定新的 Python 绑定
  • 增加属性测试
  • 编写单元测试
  • 编写集成测试(测试 V)
  • 基准测试
  • 抽象出矩阵特性?
  • 当 V 不维护时减少内存使用
  • 添加贡献指南
  • 修复旋转向量中的锁定
  • GitHub 操作

参考

Morozov, Dmitriy, 和 Arnur Nigmetov. "向无锁持久同伦迈进。" 第 32 届 ACM 并行算法和架构研讨会论文集。2020。

Bauer, Ulrich, 等人。 "Phat–持久同伦算法工具箱。" 符号计算杂志 78 (2017): 76-90. Bitbucket

Pérez, Julián Burella, 等人。 "giotto-ph:一个用于高性能计算 Vietoris-Rips 过滤的持久同伦的 Python 库。" arXiv 预印本 arXiv:2107.05412 (2021)。 GitHub

Nigmetov, Arnur, Morozov, Dmitriy 和 USDOE。 Oineus v1.0. 计算机软件。 https://www.osti.gov//servlets/purl/1774764。 USDOE。 2021 年 4 月 1 日。 网页。 doi:10.11578/dc.20210407.1GitHub

Bauer, Ulrich, Michael Kerber 和 Jan Reininghaus。 "清晰和压缩:分块计算持久同伦。" 数据分析和服务化 III:理论、算法和应用。Springer 国际出版,2014。

依赖关系

~3–11MB
~84K SLoC