Skip to main content

Cython bindings and Python interface to trimAl, a tool for automated alignment trimming.

Project description

🐍✂️ PytrimAl Stars

Cython bindings and Python interface to trimAl, a tool for automated alignment trimming.

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

⚠️ This package is based on the release candidate of trimAl 2.0, and results may not be consistent across versions or with the trimAl 1.4 results.

🗺️ Overview

PytrimAl is a Python module that provides bindings to trimAl using Cython. It implements a user-friendly, Pythonic interface to use one of the different trimming methods from trimAl and access results directly. It interacts with the trimAl internals, which has the following advantages:

  • single dependency: PytrimAl is distributed as a Python package, so you can add it as a dependency to your project, and stop worrying about the trimAl binary being present on the end-user machine.
  • no intermediate files: Everything happens in memory, in a Python object you control, so you don't have to invoke the trimAl CLI using a sub-process and temporary files. Alignment objects can be created directly from Python code.
  • friendly interface: The different trimming methods are implement as Python classes that can be configured independently.
  • error management: Errors occuring in trimAl are converted transparently into Python exceptions, including an informative error message.

📋 Roadmap

The following features are available or considered for implementation:

  • automatic trimming: Support for trimming alignments using one of the automatic heuristics implemented in trimAl.
  • manual trimming: Support for trimming alignments using manually defined conservation and gap thresholds for each residue position.
  • overlap trimming: Trimming sequences using residue and sequence overlaps to exclude regions with minimal conservation.
  • alignment loading from disk: Load an alignment from disk given a filename.
  • alignment loading from a file-like object: Load an alignment from disk given a file object.
  • aligment creation from Python: Create an alignment from a collection of sequences stored in Python strings.
  • reverse-translation: Back-translate a protein alignment to align the sequences in genomic space.
  • alternative similarity matrix: Specify an alternative similarity matrix for the alignment (instead of BLOSUM62).
  • similarity matrix creation: Create a similarity matrix from scratch from Python code.
  • windows for manual methods: Use a sliding window for computing statistics in manual methods.

🔧 Installing

pytrimal can be installed directly from PyPI, which hosts some pre-built wheels for the x86-64 architecture (Linux/OSX) and the Aarch64 architecture (Linux only), as well as the code required to compile from source with Cython:

$ pip install pytrimal

💡 Example

Let's load an Alignment from a file on the disk, and use the strictplus method to trim it, before printing the TrimmedAlignment as a Clustal block:

from pytrimal import Alignment, AutomaticTrimmer

ali = Alignment.load("pytrimal/tests/data/example.001.AA.clw")
trimmer = AutomaticTrimmer(method="strictplus")

trimmed = trimmer.trim(ali)
for name, seq in zip(trimmed.names, trimmed.sequences):
    print(name.decode().rjust(6), seq)

This should output the following:

Sp8    GIVLVWLFPWNGLQIHMMGII
Sp10   VIMLEWFFAWLGLEINMMVII
Sp26   GLFLAAANAWLGLEINMMAQI
Sp6    GIYLSWYLAWLGLEINMMAII
Sp17   GFLLTWFQLWQGLDLNKMPVF
Sp33   GLHMAWFQAWGGLEINKQAIL

🧶 Thread-safety

Trimmer objects are thread-safe, and the trim method is re-entrant. This means you can batch-process alignments in parallel using a ThreadPool with a single trimmer object:

import glob
import multiprocessing.pool
from pytrimal import Alignment, AutomaticTrimmer

trimmer = AutomaticTrimmer()
alignments = map(Alignment.load, glob.iglob("pytrimal/tests/data/*.fasta"))

with multiprocessing.pool.ThreadPool() as pool:
    trimmed_alignments = pool.map(trimmer.trim, alignments)

💭 Feedback

⚠️ Issue Tracker

Found a bug ? Have an enhancement request ? Head over to the GitHub issue tracker if you need to report or ask something. If you are filing in on a bug, please include as much information as you can about the issue, and try to recreate the same bug in a simple, easily reproducible situation.

🏗️ Contributing

Contributions are more than welcome! See CONTRIBUTING.md for more details.

📋 Changelog

This project adheres to Semantic Versioning and provides a changelog in the Keep a Changelog format.

⚖️ License

This library is provided under the GNU General Public License v3.0. trimAl is developed by the trimAl team and is distributed under the terms of the GPLv3 as well. See vendor/trimal/LICENSE for more information.

This project is in no way not affiliated, sponsored, or otherwise endorsed by the trimAl authors. It was developed by Martin Larralde during his PhD project at the European Molecular Biology Laboratory in the Zeller team.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pytrimal-0.1.2.tar.gz (8.5 MB view hashes)

Uploaded Source

Built Distributions

pytrimal-0.1.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl (461.1 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

pytrimal-0.1.2-pp38-pypy38_pp73-macosx_10_9_x86_64.whl (461.5 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

pytrimal-0.1.2-pp37-pypy37_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (522.6 kB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ x86-64

pytrimal-0.1.2-pp37-pypy37_pp73-macosx_10_9_x86_64.whl (461.5 kB view hashes)

Uploaded PyPy macOS 10.9+ x86-64

pytrimal-0.1.2-pp36-pypy36_pp73-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (522.7 kB view hashes)

Uploaded PyPy manylinux: glibc 2.12+ x86-64

pytrimal-0.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.0 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.17+ ARM64

pytrimal-0.1.2-cp310-cp310-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.8 MB view hashes)

Uploaded CPython 3.10 manylinux: glibc 2.12+ x86-64

pytrimal-0.1.2-cp310-cp310-macosx_10_15_x86_64.whl (509.8 kB view hashes)

Uploaded CPython 3.10 macOS 10.15+ x86-64

pytrimal-0.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.0 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.17+ ARM64

pytrimal-0.1.2-cp39-cp39-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.8 MB view hashes)

Uploaded CPython 3.9 manylinux: glibc 2.12+ x86-64

pytrimal-0.1.2-cp39-cp39-macosx_10_15_x86_64.whl (510.3 kB view hashes)

Uploaded CPython 3.9 macOS 10.15+ x86-64

pytrimal-0.1.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.0 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.17+ ARM64

pytrimal-0.1.2-cp38-cp38-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.8 MB view hashes)

Uploaded CPython 3.8 manylinux: glibc 2.12+ x86-64

pytrimal-0.1.2-cp38-cp38-macosx_10_15_x86_64.whl (508.5 kB view hashes)

Uploaded CPython 3.8 macOS 10.15+ x86-64

pytrimal-0.1.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.0 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.17+ ARM64

pytrimal-0.1.2-cp37-cp37m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.7 MB view hashes)

Uploaded CPython 3.7m manylinux: glibc 2.12+ x86-64

pytrimal-0.1.2-cp37-cp37m-macosx_10_15_x86_64.whl (507.8 kB view hashes)

Uploaded CPython 3.7m macOS 10.15+ x86-64

pytrimal-0.1.2-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (3.0 MB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.17+ ARM64

pytrimal-0.1.2-cp36-cp36m-manylinux_2_12_x86_64.manylinux2010_x86_64.whl (2.7 MB view hashes)

Uploaded CPython 3.6m manylinux: glibc 2.12+ x86-64

pytrimal-0.1.2-cp36-cp36m-macosx_10_14_x86_64.whl (510.9 kB view hashes)

Uploaded CPython 3.6m macOS 10.14+ x86-64

pytrimal-0.1.2-cp35-cp35m-manylinux2010_x86_64.whl (2.7 MB view hashes)

Uploaded CPython 3.5m manylinux: glibc 2.12+ x86-64

pytrimal-0.1.2-cp35-cp35m-macosx_10_14_x86_64.whl (506.6 kB view hashes)

Uploaded CPython 3.5m macOS 10.14+ x86-64

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page