跳转到主要内容

Cython绑定和Python接口,用于Opal,一个SIMD加速的成对比对器。

项目描述

🐍🌈🪨 PyOpal Stars

Cython 绑定和Python接口,用于Opal,一个SIMD加速的数据库搜索比对器。

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

🗺️ 概述

Opal 是一个序列比对器,它使用 Smith-Waterman、半全局或 Needleman-Wunsch 算法之一,实现快速序列相似性搜索。它是 SW#db 方法[1] 的一部分,用于在 CPU 上将查询序列与多个数据库序列进行比对,使用 SWIPE[2] 中描述的多序列向量化方法。

PyOpal 是一个 Python 模块,它使用 CythonOpal 提供绑定。它实现了用户友好的、Pythonic 的接口,用于查询序列数据库并访问搜索结果。它与 Opal 接口交互,而不是与 CLI 交互,具有以下优点

  • 无二进制依赖:PyOpal 以 Python 包的形式发布,因此您可以将其作为依赖项添加到项目中,并无需担心 Opal 二进制文件是否存在于最终用户的机器上。
  • 无中间文件:所有操作都在内存中进行,在您控制的 Python 对象中进行,因此您无需使用子进程和临时文件来调用 Opal CLI。
  • 更好的可移植性:Opal 使用 SIMD 加速比对得分计算,但不支持动态派发,因此必须在本地机器上编译才能使用本地 CPU 的全部功能。PyOpal 包含多个版本的 Opal,每个版本都使用不同的目标功能编译,并在运行时为本地平台选择最佳版本。
  • 更广泛的平台支持:Opal 代码已回滚到使用 SSE2 而不是 SSE4.1,这使得 PyOpal 可以在较旧的 x86 CPU 上运行(自 2003 年以来,所有 x86 CPU 都支持它)。此外,如果 Armv7 和 Aarch64 CPU 实现了 NEON 扩展,则也支持这些 CPU。最后,Opal 的 C++ 代码已修改,以便在 Windows 上编译。

🔧 安装

PyOpal 可用于所有现代版本(3.6+),可选地依赖于轻量级 Python 包 archspec 以进行运行时 CPU 特性检测。

可以从 PyPI 直接安装,它托管了 Linux、MacOS 和 Windows 的预构建 x86-64 轮子,Linux 和 MacOS 的 Aarch64 轮子,以及使用 Cython 编译源代码所需的代码。

$ pip install pyopal

否则,PyOpal 还可以作为 Bioconda 包提供。

$ conda install -c bioconda pyopal

有关在您的机器上安装 PyOpal 的其他方法,请参阅文档的 安装 页面

💡 示例

所有类都导入到主命名空间 pyopal

import pyopal

pyopal 可以与作为 Python 字符串传递的序列一起工作,也可以与 bytes 对象中的 ASCII 字符串一起工作

query = "MAGFLKVVQLLAKYGSKAVQWAWANKGKILDWLNAGQAIDWVVSKIKQILGIK"
database = [
    "MESILDLQELETSEEESALMAASTVSNNC",
    "MKKAVIVENKGCATCSIGAACLVDGPIPDFEIAGATGLFGLWG",
    "MAGFLKVVQILAKYGSKAVQWAWANKGKILDWINAGQAIDWVVEKIKQILGIK",
    "MTQIKVPTALIASVHGEGQHLFEPMAARCTCTTIISSSSTF",
]

如果您计划在多个查询中重用数据库,则可以将它存储在 Database 中,它将根据 Alphabet 对序列进行编码

database = pyopal.Database(database)

顶层函数 pyopal.align 可以用于将查询序列与数据库进行比对,使用多线程并行处理数据库的块

for result in pyopal.align(query, database):
    print(result.score, result.target_index, database[result.target_index])

有关更多示例,包括如何使用内部 API 以及参数和结果类型的详细参考,请参阅 API 文档

🧶 线程安全

Database 对象通过 C++17 读写锁 实现线程安全,该锁防止在搜索数据库时进行修改。此外,Aligner.align 方法是可重入的,并且可以在不同线程中使用不同查询并行查询同一数据库

import multiprocessing.pool
import pyopal
import Bio.SeqIO

queries = [
    "MEQQIELDVLEISDLIAGAGENDDLAQVMAASCTTSSVSTSSSSSSS",
    "MTQIKVPTALIASVHGEGQHLFEPMAARCTCTTIISSSSTF",
    "MGAIAKLVAKFGWPIVKKYYKQIMQFIGEGWAINKIIDWIKKHI",
    "MGPVVVFDCMTADFLNDDPNNAELSALEMEELESWGAWDGEATS",
]

database = pyopal.Database([
    str(record.seq)
    for record in Bio.SeqIO.parse("vendor/opal/test_data/db/uniprot_sprot12071.fasta", "fasta")
])

aligner = pyopal.Aligner()
with multiprocessing.pool.ThreadPool() as pool:
    hits = dict(pool.map(lambda q: (q, aligner.align(q, database)), queries))

💭 反馈

⚠️ 问题跟踪器

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

🏗️ 贡献

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

📋 更新日志

此项目遵循语义化版本控制,并提供了更新日志,格式遵循Keep a Changelog

⚖️ 许可证

此库根据MIT许可证提供。Opal由Martin Šošić开发,并在MIT许可证的条款下分发。更多信息请参阅vendor/opal/LICENSE

本项目与Opal作者无关,未获得赞助或认可。它由Martin Larralde欧洲分子生物学实验室Zeller团队的博士项目中开发。

📚 参考文献

项目详情


下载文件

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

源分发

pyopal-0.6.1.tar.gz (70.6 kB 查看散列)

上传时间

构建分发

pyopal-0.6.1-pp310-pypy310_pp73-win_amd64.whl (432.7 kB 查看散列)

上传于 PyPy Windows x86-64

pyopal-0.6.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (660.4 kB 查看哈希值)

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

pyopal-0.6.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (371.2 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

pyopal-0.6.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl (447.9 kB 查看哈希值)

上传于 PyPy macOS 10.12+ x86-64

pyopal-0.6.1-pp39-pypy39_pp73-win_amd64.whl (432.1 kB 查看哈希值)

上传于 PyPy Windows x86-64

pyopal-0.6.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (659.8 kB 查看哈希值)

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

pyopal-0.6.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (370.6 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

pyopal-0.6.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl (446.9 kB 查看哈希值)

上传于 PyPy macOS 10.12+ x86-64

pyopal-0.6.1-pp38-pypy38_pp73-win_amd64.whl (430.6 kB 查看哈希值)

上传于 PyPy Windows x86-64

pyopal-0.6.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (663.1 kB 查看哈希值)

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

pyopal-0.6.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (375.5 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

pyopal-0.6.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl (446.1 kB 查看哈希值)

上传于 PyPy macOS 10.12+ x86-64

pyopal-0.6.1-pp37-pypy37_pp73-win_amd64.whl (430.5 kB 查看哈希值)

上传于 PyPy Windows x86-64

pyopal-0.6.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (664.0 kB 查看哈希值)

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

pyopal-0.6.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (375.8 kB 查看哈希值)

上传于 PyPy manylinux: glibc 2.17+ ARM64

pyopal-0.6.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl (446.2 kB 查看哈希值)

上传于 PyPy macOS 10.12+ x86-64

pyopal-0.6.1-cp312-cp312-win_amd64.whl (477.7 kB 查看哈希值)

上传于 CPython 3.12 Windows x86-64

pyopal-0.6.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.7 MB 查看哈希值)

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

pyopal-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.1 MB 查看哈希值)

上传于 CPython 3.12 manylinux: glibc 2.17+ ARM64

pyopal-0.6.1-cp312-cp312-macosx_11_0_arm64.whl (326.0 kB 查看哈希值)

上传于 CPython 3.12 macOS 11.0+ ARM64

pyopal-0.6.1-cp312-cp312-macosx_10_12_x86_64.whl (612.2 kB 查看哈希值)

上传于 CPython 3.12 macOS 10.12+ x86-64

pyopal-0.6.1-cp311-cp311-win_amd64.whl (473.8 kB 查看哈希值)

上传时间 CPython 3.11 Windows x86-64

pyopal-0.6.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.7 MB 查看哈希值)

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

pyopal-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.1 MB 查看哈希值)

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

pyopal-0.6.1-cp311-cp311-macosx_11_0_arm64.whl (325.8 kB 查看哈希值)

上传时间 CPython 3.11 macOS 11.0+ ARM64

pyopal-0.6.1-cp311-cp311-macosx_10_12_x86_64.whl (610.1 kB 查看哈希值)

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

pyopal-0.6.1-cp310-cp310-win_amd64.whl (472.5 kB 查看哈希值)

上传时间 CPython 3.10 Windows x86-64

pyopal-0.6.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB 查看哈希值)

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

pyopal-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB 查看哈希值)

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

pyopal-0.6.1-cp310-cp310-macosx_11_0_arm64.whl (326.1 kB 查看哈希值)

上传时间 CPython 3.10 macOS 11.0+ ARM64

pyopal-0.6.1-cp310-cp310-macosx_10_12_x86_64.whl (610.9 kB 查看哈希值)

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

pyopal-0.6.1-cp39-cp39-win_amd64.whl (474.3 kB 查看哈希值)

上传时间 CPython 3.9 Windows x86-64

pyopal-0.6.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.5 MB 查看哈希值)

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

pyopal-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB 查看哈希值)

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

pyopal-0.6.1-cp39-cp39-macosx_11_0_arm64.whl (327.2 kB 查看哈希值)

上传时间 CPython 3.9 macOS 11.0+ ARM64

pyopal-0.6.1-cp39-cp39-macosx_10_12_x86_64.whl (613.0 kB 查看哈希值)

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

pyopal-0.6.1-cp38-cp38-win_amd64.whl (475.4 kB 查看哈希值)

上传时间 CPython 3.8 Windows x86-64

pyopal-0.6.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.6 MB 查看哈希值)

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

pyopal-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (2.0 MB 查看哈希值)

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

pyopal-0.6.1-cp38-cp38-macosx_11_0_arm64.whl (323.8 kB 查看哈希值)

上传时间 CPython 3.8 macOS 11.0+ ARM64

pyopal-0.6.1-cp38-cp38-macosx_10_12_x86_64.whl (608.3 kB 查看哈希值)

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

pyopal-0.6.1-cp37-cp37m-win_amd64.whl (472.3 kB 查看哈希值)

上传于 CPython 3.7m Windows x86-64

pyopal-0.6.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB 查看哈希值)

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

pyopal-0.6.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.9 MB 查看哈希值)

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

pyopal-0.6.1-cp37-cp37m-macosx_10_12_x86_64.whl (608.5 kB 查看哈希值)

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

pyopal-0.6.1-cp36-cp36m-win_amd64.whl (527.5 kB 查看哈希值)

上传于 CPython 3.6m Windows x86-64

pyopal-0.6.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (3.4 MB 查看哈希值)

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

pyopal-0.6.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.9 MB 查看哈希值)

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

pyopal-0.6.1-cp36-cp36m-macosx_10_12_x86_64.whl (599.2 kB 查看哈希值)

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

由以下机构支持