跳转到主要内容

Cython绑定和Python接口到FastANI,一种快速全基因组相似性估计方法。

项目描述

🐍⏩🧬 PyFastANI Stars

Cython 绑定和Python接口到 FastANI,一种用于快速全基因组相似性估计的方法。 现在支持多线程!

Actions Coverage License PyPI Bioconda AUR Wheel Python Versions Python Implementations Source Mirror Issues Docs Changelog Downloads Talk

🗺️ 概述

FastANI是2018年由 Chirag Jain 等人发表的一种方法,用于高通量计算全基因组的 平均核苷酸身份 (ANI)。它使用 MashMap 来计算直系同源映射,无需昂贵的对齐。

pyfastani 是一个 Python 模块,使用 Cython 语言实现,提供了对 FastANI 的绑定。它直接与 FastANI 的内部结构交互,相较于 CLI 包装器有以下优点

  • 更简单的编译:FastANI 需要几个额外的库,这使得编译原始二进制文件变得复杂。在 PyFastANI 中,所需的用于线程或 I/O 的库作为存根提供,Boost::math 头文件被转售,这样您就可以无需麻烦地构建软件包。或者,更好的是,只需安装提供的轮子即可!
  • 单一依赖:如果您的软件或分析流程以 Python 软件包的形式分发,您可以将 pyfastani 添加到项目中作为依赖项,并停止担心 FastANI 二进制文件是否存在于最终用户机器上。
  • 无 I/O:所有操作都在内存中完成,在您控制的 Python 对象中完成,这使得在没有将序列写入临时文件的情况下将序列传递给 FastANI 更加容易。
  • 多线程:基因组查询通过并行处理片段映射步骤,即使在单个基因组的情况下,也能缩短查询时间。

这个库仍在开发中,处于实验阶段,但它应该已经包含足够的功能,可以用于标准流程。

🔧 安装

PyFastANI 可以直接从 PyPI 安装,该网站托管一些预构建的 x86-64 Unix 平台的 CPython 轮子,以及用于使用 Cython 从源代码编译所需的代码。

$ pip install pyfastani

如果您必须从源代码编译软件包,所有必需的库都包含在源代码发行版中,因此您只需要一个 C/C++ 编译器。

否则,PyFastANI 也作为 Bioconda 软件包提供。

$ conda install -c bioconda pyfastani

💡 示例

以下片段显示了如何计算两个基因组之间的 ANI,其中参考基因组是一个草图基因组。对于一对一或一对多搜索,只需在索引之前使用 m.add_draft 添加额外的参考即可。请注意,可以为参考序列命名任何名称,这只会影响查询返回的命中项的 name 属性。

🔬 Biopython

Biopython 不允许我们直接访问序列,因此我们需要使用内置的 bytes 函数将其转换为字节。对于 Biopython 的旧版本(1.79 之前),请使用 record.seq.encode() 而不是 bytes(record.seq)

import pyfastani
import Bio.SeqIO

sketch = pyfastani.Sketch()

# add a single draft genome to the mapper, and index it
ref = list(Bio.SeqIO.parse("vendor/FastANI/data/Shigella_flexneri_2a_01.fna", "fasta"))
sketch.add_draft("S. flexneri", (bytes(record.seq) for record in ref))

# index the sketch and get a mapper
mapper = sketch.index()

# read the query and query the mapper
query = Bio.SeqIO.read("vendor/FastANI/data/Escherichia_coli_str_K12_MG1655.fna", "fasta")
hits = mapper.query_sequence(bytes(query.seq))

for hit in hits:
    print("E. coli K12 MG1655", hit.name, hit.identity, hit.matches, hit.fragments)

🧪 Scikit-bio

Scikit-bio 允许我们直接将序列作为 numpy 数组访问,但默认情况下将值显示为字节字符串。为了使它们可读为 char(与 C 代码兼容),必须使用 seq.values.view('B') 进行类型转换。

import pyfastani
import skbio.io

sketch = pyfastani.Sketch()

ref = list(skbio.io.read("vendor/FastANI/data/Shigella_flexneri_2a_01.fna", "fasta"))
sketch.add_draft("Shigella_flexneri_2a_01", (seq.values.view('B') for seq in ref))

mapper = sketch.index()

# read the query and query the mapper
query = next(skbio.io.read("vendor/FastANI/data/Escherichia_coli_str_K12_MG1655.fna", "fasta"))
hits = mapper.query_genome(query.values.view('B'))

for hit in hits:
    print("E. coli K12 MG1655", hit.name, hit.identity, hit.matches, hit.fragments)

⏱️ 基准测试

在原始 FastANI 工具中,多线程仅用于提高一对多搜索的性能:每个线程都会有一块参考基因组,查询将针对每个参考并行进行。然而,对于少量参考基因组,可能不足以让所有线程工作,因此它不能随着线程数量的增加而扩展。此外,这会导致相同的查询基因组被哈希多次,这不是最佳选择。在 pyfastani 中,多线程用于计算查询基因组片段的哈希和映射。这使得在只有少量参考基因组可用的情况下,并行性仍然有用。

以下基准测试显示了使用可变数量的线程查询单个基因组(使用 Mapper.query_draft)所需的时间。基准测试在运行 @1.80GHz 的 i7-8550U CPU(4 个物理核心/8 个逻辑核心)上,使用来自 proGenomes 数据库的 50 个细菌基因组进行。为了清晰起见,第二张图上只显示了随机选择的 5 个基因组。每次运行重复 3 次。

Benchmarks

🔖 引用

PyFastANI 是一款科学软件;它在 ECCB 2022 期间与其它优化软件一同在 欧洲学生委员会研讨会(ESCS)2022 上展出。如果您在学术工作中使用 PyFastANI,例如将其作为 PyFastANIFastANI 的引用,请务必引用这两者。

PyFastANI (Larralde, 2022),一个与 FastANI (Jain 等,2018) 优化绑定的 Python 库。

🔎 相关

计算宏基因组序列的 ANI?您可能对使用 skani 方法(由 Jim ShawYun William Yu 开发)的 pyskani,一个用于计算 ANI 的 Python 包)感兴趣。

💭 反馈

⚠️ 问题追踪器

发现错误?有增强请求?如果您需要报告或询问某些问题,请访问 GitHub 问题追踪器。如果您正在提交错误报告,请尽可能提供有关问题的详细信息,并尝试在简单、易于复现的情况下重现相同的错误。

🏗️ 贡献

欢迎贡献!有关更多详细信息,请参阅 CONTRIBUTING.md

⚖️ 许可证

此库根据 MIT 许可证 提供。

FastANI 代码由 Chirag Jain 编写,并按 Apache License 2.0 的条款分发,除非在供应商源中另有说明。有关更多信息,请参阅 vendor/FastANI/LICENSEcpu_features 代码由 Guillaume Chatelet 编写,并按 Apache License 2.0 的条款分发。有关更多信息,请参阅 vendor/cpu_features/LICENSEBoost::math 头文件由 Boost Libraries 贡献者编写,并按 Boost 软件许可证 的条款分发。有关更多信息,请参阅 vendor/boost-math/LICENSE

本项目与 原始 FastANI 作者 无任何关联、赞助或其它形式的背书。该项目由 Martin Larralde 在欧洲分子生物学实验室(EMBL)的 Zeller 团队 的博士项目期间开发。

项目详情


下载文件

下载适用于您平台的文件。如果您不确定选择哪个,请了解更多关于 安装包 的信息。

源代码分发

pyfastani-0.5.1.tar.gz (4.6 MB 查看散列值)

上传时间 源代码

构建分发

pyfastani-0.5.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB 查看散列值)

上传于 PyPy manylinux: glibc 2.17+ x86-64

pyfastani-0.5.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.2 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

pyfastani-0.5.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl (3.2 MB 查看哈希值)

上传于 PyPy macOS 10.12+ x86-64

pyfastani-0.5.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ x86-64

pyfastani-0.5.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.2 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

pyfastani-0.5.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl (3.2 MB 查看哈希值)

上传于 PyPy macOS 10.12+ x86-64

pyfastani-0.5.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ x86-64

pyfastani-0.5.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.2 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

pyfastani-0.5.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl (3.2 MB 查看哈希值)

上传于 PyPy macOS 10.12+ x86-64

pyfastani-0.5.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.2 MB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ x86-64

pyfastani-0.5.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.2 MB 查看哈希值)

上传时间: PyPy manylinux: glibc 2.17+ ARM64

pyfastani-0.5.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl (3.2 MB 查看哈希值)

上传时间: PyPy macOS 10.12+ x86-64

pyfastani-0.5.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.1 MB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ x86-64

pyfastani-0.5.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.1 MB 查看哈希值)

上传时间: CPython 3.12 manylinux: glibc 2.17+ ARM64

pyfastani-0.5.1-cp312-cp312-macosx_11_0_arm64.whl (3.2 MB 查看哈希值)

上传时间: CPython 3.12 macOS 11.0+ ARM64

pyfastani-0.5.1-cp312-cp312-macosx_10_12_x86_64.whl (3.3 MB 查看哈希值)

上传时间: CPython 3.12 macOS 10.12+ x86-64

pyfastani-0.5.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.1 MB 查看哈希值)

上传时间: CPython 3.11 manylinux: glibc 2.17+ x86-64

pyfastani-0.5.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.1 MB 查看哈希值)

上传时间: CPython 3.11 manylinux: glibc 2.17+ ARM64

pyfastani-0.5.1-cp311-cp311-macosx_11_0_arm64.whl (3.2 MB 查看哈希值)

上传时间: CPython 3.11 macOS 11.0+ ARM64

pyfastani-0.5.1-cp311-cp311-macosx_10_12_x86_64.whl (3.3 MB 查看哈希值)

上传时间: CPython 3.11 macOS 10.12+ x86-64

pyfastani-0.5.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ x86-64

pyfastani-0.5.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.0 MB 查看哈希值)

上传时间 CPython 3.10 manylinux: glibc 2.17+ ARM64

pyfastani-0.5.1-cp310-cp310-macosx_11_0_arm64.whl (3.2 MB 查看哈希值)

上传时间 CPython 3.10 macOS 11.0+ ARM64

pyfastani-0.5.1-cp310-cp310-macosx_10_12_x86_64.whl (3.3 MB 查看哈希值)

上传时间 CPython 3.10 macOS 10.12+ x86-64

pyfastani-0.5.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ x86-64

pyfastani-0.5.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.0 MB 查看哈希值)

上传时间 CPython 3.9 manylinux: glibc 2.17+ ARM64

pyfastani-0.5.1-cp39-cp39-macosx_11_0_arm64.whl (3.2 MB 查看哈希值)

上传时间 CPython 3.9 macOS 11.0+ ARM64

pyfastani-0.5.1-cp39-cp39-macosx_10_12_x86_64.whl (3.3 MB 查看哈希值)

上传时间 CPython 3.9 macOS 10.12+ x86-64

pyfastani-0.5.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.1 MB 查看哈希值)

上传时间 CPython 3.8 manylinux: glibc 2.17+ x86-64

pyfastani-0.5.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.0 MB 查看哈希值)

上传于 CPython 3.8 manylinux: glibc 2.17+ ARM64

pyfastani-0.5.1-cp38-cp38-macosx_11_0_arm64.whl (3.2 MB 查看哈希值)

上传于 CPython 3.8 macOS 11.0+ ARM64

pyfastani-0.5.1-cp38-cp38-macosx_10_12_x86_64.whl (3.3 MB 查看哈希值)

上传于 CPython 3.8 macOS 10.12+ x86-64

pyfastani-0.5.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ x86-64

pyfastani-0.5.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (5.0 MB 查看哈希值)

上传于 CPython 3.7m manylinux: glibc 2.17+ ARM64

pyfastani-0.5.1-cp37-cp37m-macosx_10_12_x86_64.whl (3.3 MB 查看哈希值)

上传于 CPython 3.7m macOS 10.12+ x86-64

pyfastani-0.5.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (5.0 MB 查看哈希值)

上传于 CPython 3.6m manylinux: glibc 2.17+ x86-64

pyfastani-0.5.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (4.9 MB 查看哈希值)

上传于 CPython 3.6m manylinux: glibc 2.17+ ARM64

pyfastani-0.5.1-cp36-cp36m-macosx_10_12_x86_64.whl (3.3 MB 查看哈希值)

上传于 CPython 3.6m macOS 10.12+ x86-64

支持者