{"id":16917006,"url":"https://github.com/althonos/pyhmmer","last_synced_at":"2026-01-22T01:01:51.210Z","repository":{"id":37410470,"uuid":"308752997","full_name":"althonos/pyhmmer","owner":"althonos","description":"Cython bindings and Python interface to HMMER3.","archived":false,"fork":false,"pushed_at":"2025-08-18T21:56:58.000Z","size":11150,"stargazers_count":147,"open_issues_count":19,"forks_count":13,"subscribers_count":9,"default_branch":"master","last_synced_at":"2025-09-05T19:12:57.779Z","etag":null,"topics":["bioinformatics","cython-library","hidden-markov-model","hmmer","hmmer3","python-bindings","python-library","sequence-analysis"],"latest_commit_sha":null,"homepage":"https://pyhmmer.readthedocs.io","language":"Cython","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/althonos.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":"CONTRIBUTING.md","funding":null,"license":"COPYING","code_of_conduct":null,"threat_model":null,"audit":null,"citation":"CITATION.cff","codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2020-10-30T22:01:18.000Z","updated_at":"2025-09-02T07:08:09.000Z","dependencies_parsed_at":"2023-10-11T11:31:44.372Z","dependency_job_id":"f2a7acb4-d4b6-4db1-a410-f05515ffc076","html_url":"https://github.com/althonos/pyhmmer","commit_stats":{"total_commits":1121,"total_committers":8,"mean_commits":140.125,"dds":0.2774308652988403,"last_synced_commit":"3689e77e8e30676d568d230c6dd8ecb61939a654"},"previous_names":[],"tags_count":66,"template":false,"template_full_name":null,"purl":"pkg:github/althonos/pyhmmer","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/althonos%2Fpyhmmer","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/althonos%2Fpyhmmer/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/althonos%2Fpyhmmer/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/althonos%2Fpyhmmer/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/althonos","download_url":"https://codeload.github.com/althonos/pyhmmer/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/althonos%2Fpyhmmer/sbom","scorecard":{"id":3718,"data":{"date":"2025-08-11","repo":{"name":"github.com/althonos/pyhmmer","commit":"ca0a51ae5a5f67b609ca3b3586adbe675d1f426e"},"scorecard":{"version":"v5.2.1-40-gf6ed084d","commit":"f6ed084d17c9236477efd66e5b258b9d4cc7b389"},"score":3.4,"checks":[{"name":"Dangerous-Workflow","score":10,"reason":"no dangerous workflow patterns detected","details":null,"documentation":{"short":"Determines if the project's GitHub Action workflows avoid dangerous patterns.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#dangerous-workflow"}},{"name":"Code-Review","score":0,"reason":"Found 0/30 approved changesets -- score normalized to 0","details":null,"documentation":{"short":"Determines if the project requires human code review before pull requests (aka merge requests) are merged.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#code-review"}},{"name":"Token-Permissions","score":0,"reason":"detected GitHub workflow tokens with excessive permissions","details":["Warn: no topLevel permission defined: .github/workflows/package.yml:1","Warn: no topLevel permission defined: .github/workflows/test.yml:1","Info: no jobLevel write permissions found"],"documentation":{"short":"Determines if the project's workflows follow the principle of least privilege.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#token-permissions"}},{"name":"Maintained","score":5,"reason":"2 commit(s) and 4 issue activity found in the last 90 days -- score normalized to 5","details":null,"documentation":{"short":"Determines if the project is \"actively maintained\".","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#maintained"}},{"name":"CII-Best-Practices","score":0,"reason":"no effort to earn an OpenSSF best practices badge detected","details":null,"documentation":{"short":"Determines if the project has an OpenSSF (formerly CII) Best Practices Badge.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#cii-best-practices"}},{"name":"Binary-Artifacts","score":10,"reason":"no binaries found in the repo","details":null,"documentation":{"short":"Determines if the project has generated executable (binary) artifacts in the source repository.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#binary-artifacts"}},{"name":"Security-Policy","score":0,"reason":"security policy file not detected","details":["Warn: no security policy file detected","Warn: no security file to analyze","Warn: no security file to analyze","Warn: no security file to analyze"],"documentation":{"short":"Determines if the project has published a security policy.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#security-policy"}},{"name":"License","score":10,"reason":"license file detected","details":["Info: project has a license file: COPYING:0","Info: FSF or OSI recognized license: MIT License: COPYING:0"],"documentation":{"short":"Determines if the project has defined a license.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#license"}},{"name":"SAST","score":0,"reason":"no SAST tool detected","details":["Warn: no pull requests merged into dev branch"],"documentation":{"short":"Determines if the project uses static code analysis.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#sast"}},{"name":"Fuzzing","score":0,"reason":"project is not fuzzed","details":["Warn: no fuzzer integrations found"],"documentation":{"short":"Determines if the project uses fuzzing.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#fuzzing"}},{"name":"Pinned-Dependencies","score":0,"reason":"dependency not pinned by hash detected -- score normalized to 0","details":["Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:74: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/package.yml:78: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:85: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:119: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:123: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:149: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:155: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/package.yml:162: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:34: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/package.yml:38: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:45: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:95: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:99: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:107: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:173: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/package.yml:175: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:189: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:193: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:197: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/package.yml:209: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:14: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/package.yml:18: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:25: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:54: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/package.yml:58: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/package.yml:65: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/package.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:46: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:50: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/test.yml/master?enable=pin","Warn: third-party GitHubAction not pinned by hash: .github/workflows/test.yml:67: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:141: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/test.yml/master?enable=pin","Warn: GitHub-owned GitHubAction not pinned by hash: .github/workflows/test.yml:145: update your workflow using https://app.stepsecurity.io/secureworkflow/althonos/pyhmmer/test.yml/master?enable=pin","Warn: pipCommand not pinned by hash: .github/workflows/package.yml:104","Warn: pipCommand not pinned by hash: .github/workflows/package.yml:129","Warn: pipCommand not pinned by hash: .github/workflows/package.yml:131","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:57","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:59","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:61","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:63","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:152","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:154","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:156","Warn: pipCommand not pinned by hash: .github/workflows/test.yml:158","Info:   0 out of  23 GitHub-owned GitHubAction dependencies pinned","Info:   0 out of   8 third-party GitHubAction dependencies pinned","Info:   0 out of  11 pipCommand dependencies pinned"],"documentation":{"short":"Determines if the project has declared and pinned the dependencies of its build process.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#pinned-dependencies"}},{"name":"Packaging","score":10,"reason":"packaging workflow detected","details":["Info: Project packages its releases by way of GitHub Actions.: .github/workflows/package.yml:134"],"documentation":{"short":"Determines if the project is published as a package that others can easily download, install, easily update, and uninstall.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#packaging"}},{"name":"Branch-Protection","score":0,"reason":"branch protection not enabled on development/release branches","details":["Warn: branch protection not enabled for branch 'master'"],"documentation":{"short":"Determines if the default and release branches are protected with GitHub's branch protection settings.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#branch-protection"}},{"name":"Signed-Releases","score":-1,"reason":"no releases found","details":null,"documentation":{"short":"Determines if the project cryptographically signs release artifacts.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#signed-releases"}},{"name":"Vulnerabilities","score":0,"reason":"16 existing vulnerabilities detected","details":["Warn: Project is vulnerable to: PYSEC-2019-41 / GHSA-qfc5-mcwq-26q8","Warn: Project is vulnerable to: GHSA-29gw-9793-fvw7","Warn: Project is vulnerable to: PYSEC-2022-12 / GHSA-pq7m-3gw7-gq5x","Warn: Project is vulnerable to: PYSEC-2021-140 / GHSA-9w8r-397f-prfh","Warn: Project is vulnerable to: PYSEC-2023-117 / GHSA-mrwq-x4v8-fh7p","Warn: Project is vulnerable to: PYSEC-2021-141 / GHSA-pq64-v7f5-gqh8","Warn: Project is vulnerable to: PYSEC-2025-49 / GHSA-5rjg-fvgr-3xxf","Warn: Project is vulnerable to: GHSA-cx63-2mw6-8hw5","Warn: Project is vulnerable to: PYSEC-2022-43012 / GHSA-r9hx-vwmv-q579","Warn: Project is vulnerable to: PYSEC-2018-34 / GHSA-2fc2-6r4j-p65h","Warn: Project is vulnerable to: PYSEC-2021-856 / GHSA-5545-2q6w-2gh6","Warn: Project is vulnerable to: PYSEC-2019-108 / GHSA-9fq2-x9r6-wfmf","Warn: Project is vulnerable to: PYSEC-2018-33 / GHSA-cw6w-4rcx-xphc","Warn: Project is vulnerable to: PYSEC-2021-857 / GHSA-f7c7-j99h-c22f","Warn: Project is vulnerable to: GHSA-fpfv-jqm9-f5jm","Warn: Project is vulnerable to: PYSEC-2017-1 / GHSA-frgw-fgh6-9g52"],"documentation":{"short":"Determines if the project has open, known unfixed vulnerabilities.","url":"https://github.com/ossf/scorecard/blob/f6ed084d17c9236477efd66e5b258b9d4cc7b389/docs/checks.md#vulnerabilities"}}]},"last_synced_at":"2025-08-14T13:06:43.426Z","repository_id":37410470,"created_at":"2025-08-14T13:06:43.426Z","updated_at":"2025-08-14T13:06:43.426Z"},"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273813835,"owners_count":25172892,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-05T02:00:09.113Z","response_time":402,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bioinformatics","cython-library","hidden-markov-model","hmmer","hmmer3","python-bindings","python-library","sequence-analysis"],"created_at":"2024-10-13T19:32:02.853Z","updated_at":"2026-01-22T01:01:51.198Z","avatar_url":"https://github.com/althonos.png","language":"Cython","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🐍🟡♦️🟦 PyHMMER [![Stars](https://img.shields.io/github/stars/althonos/pyhmmer.svg?style=social\u0026maxAge=3600\u0026label=Star)](https://github.com/althonos/pyhmmer/stargazers)\n\n*[Cython](https://cython.org/) bindings and Python interface to [HMMER3](http://hmmer.org/).*\n\n[![Actions](https://img.shields.io/github/actions/workflow/status/althonos/pyhmmer/test.yml?branch=master\u0026logo=github\u0026style=flat-square\u0026maxAge=300)](https://github.com/althonos/pyhmmer/actions)\n[![Coverage](https://img.shields.io/codecov/c/gh/althonos/pyhmmer?logo=codecov\u0026style=flat-square\u0026maxAge=3600)](https://codecov.io/gh/althonos/pyhmmer/)\n[![PyPI](https://img.shields.io/pypi/v/pyhmmer.svg?logo=pypi\u0026style=flat-square\u0026maxAge=3600)](https://pypi.org/project/pyhmmer)\n[![Bioconda](https://img.shields.io/conda/vn/bioconda/pyhmmer?logo=anaconda\u0026style=flat-square\u0026maxAge=3600)](https://anaconda.org/bioconda/pyhmmer)\n[![AUR](https://img.shields.io/aur/version/python-pyhmmer?logo=archlinux\u0026style=flat-square\u0026maxAge=3600)](https://aur.archlinux.org/packages/python-pyhmmer)\n[![Wheel](https://img.shields.io/pypi/wheel/pyhmmer.svg?style=flat-square\u0026maxAge=3600)](https://pypi.org/project/pyhmmer/#files)\n[![Python Versions](https://img.shields.io/pypi/pyversions/pyhmmer.svg?logo=python\u0026style=flat-square\u0026maxAge=3600)](https://pypi.org/project/pyhmmer/#files)\n[![Python Implementations](https://img.shields.io/pypi/implementation/pyhmmer.svg?logo=python\u0026style=flat-square\u0026maxAge=3600\u0026label=impl)](https://pypi.org/project/pyhmmer/#files)\n[![License](https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square\u0026maxAge=2678400)](https://choosealicense.com/licenses/mit/)\n[![Source](https://img.shields.io/badge/source-GitHub-303030.svg?maxAge=2678400\u0026style=flat-square)](https://github.com/althonos/pyhmmer/)\n[![Mirror](https://img.shields.io/badge/mirror-EMBL-009f4d?style=flat-square\u0026maxAge=2678400)](https://git.embl.de/larralde/pyhmmer/)\n[![GitHub issues](https://img.shields.io/github/issues/althonos/pyhmmer.svg?style=flat-square\u0026maxAge=600)](https://github.com/althonos/pyhmmer/issues)\n[![Docs](https://img.shields.io/readthedocs/pyhmmer/latest?style=flat-square\u0026maxAge=600)](https://pyhmmer.readthedocs.io)\n[![Changelog](https://img.shields.io/badge/keep%20a-changelog-8A0707.svg?maxAge=2678400\u0026style=flat-square)](https://github.com/althonos/pyhmmer/blob/master/CHANGELOG.md)\n[![Downloads](https://img.shields.io/badge/dynamic/regex?url=https%3A%2F%2Fpepy.tech%2Fprojects%2Fpyhmmer\u0026search=%5B0-9%5D%2B.%5B0-9%5D%2B(k%7CM)\u0026style=flat-square\u0026label=downloads\u0026color=303f9f\u0026cacheSeconds=86400)](https://pepy.tech/project/pyhmmer)\n[![Paper](https://img.shields.io/badge/paper-Bioinformatics-teal.svg?style=flat-square\u0026maxAge=3600)](https://doi.org/10.1093/bioinformatics/btad214)\n[![Citations](https://img.shields.io/badge/dynamic/json?url=https%3A%2F%2Fbadge.dimensions.ai%2Fdetails%2Fid%2Fpub.1157360482%2Fmetadata.json\u0026query=%24.times_cited\u0026style=flat-square\u0026label=citations\u0026maxAge=86400)](https://badge.dimensions.ai/details/id/pub.1157360482)\n\n\n## 🗺️ Overview\n\nHMMER is a biological sequence analysis tool that uses profile hidden Markov\nmodels to search for sequence homologs. HMMER3 is developed and maintained by\nthe [Eddy/Rivas Laboratory](http://eddylab.org/) at Harvard University.\n\n`pyhmmer` is a Python package, implemented using the [Cython](https://cython.org/)\nlanguage, that provides bindings to HMMER3. It directly interacts with the\nHMMER internals, which has the following advantages over CLI wrappers:\n\n- **single dependency**: If your software or your analysis pipeline is\n  distributed as a Python package, you can add `pyhmmer` as a dependency to\n  your project, and stop worrying about the HMMER binaries being properly\n  setup on the end-user machine.\n- **no intermediate files**: Everything happens in memory, in Python objects\n  you have control on, making it easier to pass your inputs to HMMER without\n  needing to write them to a temporary file. Output retrieval is also done\n  in memory, via instances of the\n  [`pyhmmer.plan7.TopHits`](https://pyhmmer.readthedocs.io/en/stable/api/plan7/results.html#pyhmmer.plan7.TopHits)\n  class.\n- **no input formatting**: The Easel object model is exposed in the\n  [`pyhmmer.easel`](https://pyhmmer.readthedocs.io/en/stable/api/easel/index.html)\n  module, and you have the possibility to build a\n  [`DigitalSequence`](https://pyhmmer.readthedocs.io/en/stable/api/easel/seq.html#pyhmmer.easel.DigitalSequence)\n  object yourself to pass to the HMMER pipeline. This is useful if your sequences are already\n  loaded in memory, for instance because you obtained them from another\n  Python library (such as [Pyrodigal](https://github.com/althonos/pyrodigal)\n  or [Biopython](https://biopython.org/)).\n- **no output parsing**: HMMER3 is notorious for its numerous output files\n  and its fixed-width tabular output, which is hard to parse (even\n  [`Bio.SearchIO.HmmerIO`](https://biopython.org/docs/dev/api/Bio.SearchIO.HmmerIO.html)\n  is struggling on some sequences).\n- **efficient**: Using `pyhmmer` to launch `hmmsearch` on sequences\n  and HMMs in disk storage is typically as fast as directly using the\n  `hmmsearch` binary (see the [Benchmarks section](#%EF%B8%8F-benchmarks)).\n  [`pyhmmer.hmmer.hmmsearch`](https://pyhmmer.readthedocs.io/en/stable/api/hmmer/profile.html#pyhmmer.hmmer.hmmsearch)\n  uses a different parallelisation strategy compared to\n  the `hmmsearch` binary from HMMER, which can help getting the most of\n  multiple CPUs when annotating smaller sequence databases.\n\n*This library is still a work-in-progress. It follows [semantic-versioning](https://semver.org/),\nso API changes will be documented, but past `v0.10` the API has been more or\nless stable. It should already pack enough features to run biological analyses\nor workflows involving `hmmsearch`, `hmmscan`, `nhmmer`, `phmmer`, `hmmbuild`\nand `hmmalign`.*\n\n\n## 🔧 Installing\n\n`pyhmmer` can be installed from [PyPI](https://pypi.org/project/pyhmmer/),\nwhich hosts some pre-built CPython wheels for Linux and MacOS on x86-64 and Arm64, as well as the code required to compile from source with Cython:\n```console\n$ pip install pyhmmer\n```\n\nCompilation for UNIX PowerPC is not tested in CI, but should work out of the\nbox. Note than non-UNIX operating systems (such as Windows) are not\nsupported by HMMER.\n\nA [Bioconda](https://bioconda.github.io/) package is also available:\n```console\n$ conda install -c bioconda pyhmmer\n```\n\nSee the [`Installation page`](https://pyhmmer.readthedocs.io/en/stable/guide/install.html)\nof the documentation to find other ways to install ``pyhmmer``.\n\n## 🔖 Citation\n\nPyHMMER is scientific software, with a\n[published paper](https://doi.org/10.1093/bioinformatics/btad214)\nin the [Bioinformatics](https://academic.oup.com/bioinformatics). Please\ncite both [PyHMMER](https://doi.org/10.21105/joss.04296)\nand [HMMER](http://hmmer.org) if you are using it in\nan academic work, for instance as:\n\n\u003e PyHMMER (Larralde *et al.*, 2023), a Python library binding to HMMER (Eddy, 2011).\n\nDetailed references are available on the [Publications page](https://pyhmmer.readthedocs.io/en/stable/guide/publications.html) of the\n[online documentation](https://pyhmmer.readthedocs.io/).\n\n\n## 📖 Documentation\n\nA complete [API reference](https://pyhmmer.readthedocs.io/en/stable/api/) can\nbe found in the [online documentation](https://pyhmmer.readthedocs.io/), or\ndirectly from the command line using\n[`pydoc`](https://docs.python.org/3/library/pydoc.html):\n```console\n$ pydoc pyhmmer.easel\n$ pydoc pyhmmer.plan7\n```\n\n## 💡 Example\n\nUse `pyhmmer` to run `hmmsearch` to search for Type 2 PKS domains\n([`t2pks.hmm`](https://raw.githubusercontent.com/althonos/pyhmmer/v0.7.0/pyhmmer/tests/data/hmms/txt/t2pks.hmm))\ninside proteins extracted from the genome of *Anaerococcus provencensis*\n([`938293.PRJEB85.HG003687.faa`](https://raw.githubusercontent.com/althonos/pyhmmer/v0.7.0/pyhmmer/tests/data/seqs/938293.PRJEB85.HG003687.faa)).\nThis will produce an iterable over\n[`TopHits`] that can be used for further sorting/querying in Python.\nProcessing happens in parallel using Python threads, and a [`TopHits`]\nobject is yielded for every [`HMM`] passed in the input iterable.\n\n[`HMM`]: https://pyhmmer.readthedocs.io/en/stable/api/plan7/hmms.html#pyhmmer.plan7.HMM\n[`TopHits`]: https://pyhmmer.readthedocs.io/en/stable/api/plan7/results.html#pyhmmer.plan7.TopHits\n\n```python\nimport pyhmmer\n\nwith pyhmmer.easel.SequenceFile(\"pyhmmer/tests/data/seqs/938293.PRJEB85.HG003687.faa\", digital=True) as seq_file:\n    sequences = seq_file.read_block()\n\nwith pyhmmer.plan7.HMMFile(\"pyhmmer/tests/data/hmms/txt/t2pks.hmm\") as hmm_file:\n    for hits in pyhmmer.hmmsearch(hmm_file, sequences, cpus=4):\n      print(f\"HMM {hits.query.name.decode()} found {len(hits)} hits in the target sequences\")\n```\n\nHave a look at more in-depth examples such as [building a HMM from an alignment](https://pyhmmer.readthedocs.io/en/stable/examples/msa_to_hmm.html),\n[analysing the active site of a hit](https://pyhmmer.readthedocs.io/en/stable/examples/active_site.html),\nor [fetching marker genes from a genome](https://pyhmmer.readthedocs.io/en/stable/examples/fetchmgs.html)\nin the [Examples](https://pyhmmer.readthedocs.io/en/stable/examples/index.html)\npage of the [online documentation](https://pyhmmer.readthedocs.io/).\n\n\n## 💭 Feedback\n\n### ⚠️ Issue Tracker\n\nFound a bug ? Have an enhancement request ? Head over to the [GitHub issue\ntracker](https://github.com/althonos/pyhmmer/issues) if you need to report\nor ask something. If you are filing in on a bug, please include as much\ninformation as you can about the issue, and try to recreate the same bug\nin a simple, easily reproducible situation.\n\n### 🏗️ Contributing\n\nContributions are more than welcome! See [`CONTRIBUTING.md`](https://github.com/althonos/pyhmmer/blob/master/CONTRIBUTING.md) for more details.\n\n\n## ⏱️ Benchmarks\n\nBenchmarks were run on a [i7-10710U CPU](https://ark.intel.com/content/www/us/en/ark/products/196448/intel-core-i7-10710u-processor-12m-cache-up-to-4-70-ghz.html) running @1.10GHz with 6 physical / 12\nlogical cores, using a FASTA file containing 4,489 protein sequences extracted\nfrom the genome of *Escherichia coli*\n([`562.PRJEB4685`](https://progenomes.embl.de/genome.cgi))\nand the version 33.1 of the [Pfam](https://pfam.xfam.org/) HMM library containing\n18,259 domains. Commands were run 3 times on a warm SSD. *Plain lines show\nthe times for pressed HMMs, and dashed-lines the times for HMMs in text format.*\n\n![Benchmarks](https://raw.github.com/althonos/pyhmmer/master/benches/v0.7.0/plot.svg)\n\nRaw numbers can be found in the [`benches` folder](https://github.com/althonos/pyhmmer/blob/master/benches/).\nThey suggest that `phmmer` should be run with the number of *logical* cores,\nwhile `hmmsearch` should be run with the number of *physical* cores (or less).\nA possible explanation for this observation would be that HMMER\nplatform-specific code requires too many [SIMD](https://en.wikipedia.org/wiki/SIMD)\nregisters per thread to benefit from [simultaneous multi-threading](https://en.wikipedia.org/wiki/Simultaneous_multithreading).\n\nTo read more about how PyHMMER achieves better parallelism than HMMER for\nmany-to-many searches, have a look at the [Performance page](https://pyhmmer.readthedocs.io/en/stable/guide/performance.html)\nof the documentation.\n\n\n## 🔍 See Also\n\nBuilding a HMM from scratch? Then you may be interested in the [`pyfamsa`](https://pypi.org/project/pyfamsa/)\npackage, providing bindings to [FAMSA](https://github.com/refresh-bio/FAMSA),\na very fast multiple sequence aligner. In addition, you may want to trim alignments:\nin that case, consider [`pytrimal`](https://pypi.org/project/pytrimal), which\nwraps [trimAl 2.0](https://github.com/inab/trimal/tree/2.0_RC).\n\n## ⚖️ License\n\nThis library is provided under the [MIT License](https://choosealicense.com/licenses/mit/).\nThe HMMER3 and Easel code is available under the\n[BSD 3-clause](https://choosealicense.com/licenses/bsd-3-clause/) license.\nSee `vendor/hmmer/LICENSE` and `vendor/easel/LICENSE` for more information.\n\nThe PyHMMER logo and figures are available under the [Creative Commons Attribution 4.0 (CC-BY 4.0)](https://creativecommons.org/licenses/by/4.0/)\nlicense. The PyHMMER logo was derived from [Twemoji](https://github.com/twitter/twemoji)\nassets under the [Creative Commons Attribution 4.0 (CC-BY 4.0)](https://creativecommons.org/licenses/by/4.0/)\nlicense as well.\n\n*This project is in no way affiliated, sponsored, or otherwise endorsed by\nthe [original HMMER authors](http://hmmer.org/). It was developed by\n[Martin Larralde](https://github.com/althonos/pyhmmer) during his PhD project\nat the [European Molecular Biology Laboratory](https://www.embl.de/) in\nthe [Zeller team](https://zellerlab.org/).*\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falthonos%2Fpyhmmer","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falthonos%2Fpyhmmer","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falthonos%2Fpyhmmer/lists"}