Versalign is Python package that allows you to create multiple sequence alignments for arbitrary lists of objects.
Pairwise alignment:
from versalign.motif import Motif
from versalign.pairwise import PairwiseAlignment, align_pairwise
from versalign.sequence import Sequence
class A(Motif):
def __eq__(self, other):
return isinstance(other, A)
def __str__(self):
return "A"
class B(Motif):
def __eq__(self, other):
return isinstance(other, B)
def __str__(self):
return "B"
def score_func(a, b):
if a == b:
return 1
return -1
seq_a = Sequence("seq_a", [A(), A(), A()])
seq_b = Sequence("seq_b", [B(), B(), B()])
aligned_seq_a, aligned_seq_b, score = align_pairwise(
seq_a=seq_a,
seq_b=seq_b,
score_func=score_func,
algorithm=PairwiseAlignment.NEEDLEMAN_WUNSCH,
options={"gap_penalty": 2, "end_gap_penalty": 1},
)
print(aligned_seq_a)
print(aligned_seq_b)
>> AAA---
>> ---BBB
Multiple sequence alignment:
from versalign.msa import multiple_sequence_alignment
seq_a = Sequence("seq_a", [A(), A(), A()])
seq_b = Sequence("seq_b", [B(), B(), B()])
seq_c = Sequence("seq_c", [A(), B(), B()])
result = multiple_sequence_alignment(
seqs=[seq_a, seq_b, seq_c],
gap_penalty=2,
end_gap_penalty=1,
score_func=score_func,
)
for seq in result:
print(seq)
>> ---BBB
>> --ABB-
>> AAA---
The most recent release can be installed from PyPI with:
pip install versalign
The most recent code and data can be installed directly from GitHub with:
pip install git+https://github.com/davidmeijer/versalign.git
Contributions, whether filing an issue, making a pull request, or forking, are appreciated. See CONTRIBUTING.md for more information on getting involved.
The code in this package is licensed under the MIT License.
This package was created with @audreyfeldroy's cookiecutter package using @cthoyt's cookiecutter-snekpack template.
See developer instructions
The final section of the README is for if you want to get involved by making a code contribution.
To install in development mode, use the following:
git clone git+https://github.com/davidmeijer/versalign.git
cd versalign
pip install -e .
After cloning the repository and installing tox
with pip install tox
, the unit tests in the tests/
folder can be
run reproducibly with:
tox
Additionally, these tests are automatically re-run with each commit in a GitHub Action.
After installing the package in development mode and installing
tox
with pip install tox
, the commands for making a new release are contained within the finish
environment
in tox.ini
. Run the following from the shell:
tox -e finish
This script does the following:
- Uses Bump2Version to switch the version number in the
setup.cfg
,src/versalign/version.py
, anddocs/source/conf.py
to not have the-dev
suffix - Packages the code in both a tar archive and a wheel using
build
- Uploads to PyPI using
twine
. Be sure to have a.pypirc
file configured to avoid the need for manual input at this step - Push to GitHub. You'll need to make a release going with the commit where the version was bumped.
- Bump the version to the next patch. If you made big changes and want to bump the version by minor, you can
use
tox -e bumpversion -- minor
after.