Metadata-Version: 2.4
Name: zehramsa
Version: 1.0.3
Summary: Multiple Sequence Alignment via Dynamic Programming
Requires-Python: >=3.9
Description-Content-Type: text/markdown

**Dil / Language:** [🇹🇷 Türkçe](#türkçe) · [🇬🇧 English](#english)

---

<a name="türkçe"></a>

# zehramsa — Çoklu Dizi Hizalama Kütüphanesi

zehramsa, Needleman-Wunsch dinamik programlama algoritmasına dayalı progresif hizalama yaklaşımını kullanarak birden fazla DNA dizisini hizalayan, saf Python ile yazılmış bir kütüphanedir. Harici bağımlılık gerektirmez; pip ile kurulabilir.

---

## Teknolojiler

- **Python 3.9+**
- **Needleman-Wunsch** — global pairwise hizalama (dinamik programlama)
- **Progresif MSA** — NW tabanlı adım adım çoklu dizi birleştirme
- **pyproject.toml** — pip kurulum desteği

---

## Özellikler

- İkili dizi hizalama (Needleman-Wunsch DP)
- 2+ dizi için progresif NW tabanlı MSA
- Özelleştirilebilir puanlama (match / mismatch / gap)
- Sum-of-Pairs hizalama skoru hesaplama
- Hizalama kimlik yüzdesi hesaplama
- Tip ve girdi doğrulama ile açık hata mesajları

---

## Kurulum

```bash
pip install zehramsa
```

---

## Kullanım

### Çoklu dizi hizalama

```python
from zehramsa import align, SimpleScoring

result = align(["GATTACA", "GCATGCU", "GAGTACA"])
print(result)

result = align(["ACGT", "ACCT", "AGGT"], scoring=SimpleScoring(match=2.0, mismatch=-1.0, gap=-2.0))
print(result.score)
```

### dp_align ile hizalama

```python
from zehramsa import dp_align

result = dp_align(["GAT", "GCT", "GTT"])
print(result)

result = dp_align(["ACGT", "AGT", "ACT"], scoring=SimpleScoring(match=2.0, mismatch=-1.0, gap=-2.0))
print(result.score)
```

### Needleman-Wunsch ikili hizalama

```python
from zehramsa import needleman_wunsch

pw = needleman_wunsch("GATTACA", "GCATGCU")
print(pw)
```

---

## Algoritmalar

| Fonksiyon | Yöntem | Karmaşıklık |
|---|---|---|
| `align()` / `dp_align()` | Progresif NW | O(k·n²) |
| `needleman_wunsch()` | Pairwise DP | O(n²) |

> `align()` ve `dp_align()` aynı algoritmayı çalıştırır; `align()` ek olarak `verbose` parametresi sunar.

---

## Süreç

Proje, dinamik programlama ile çoklu dizi hizalamasının sıfırdan uygulanmasına odaklanır. Önce Needleman-Wunsch algoritması ayrı bir modül olarak kuruldu; ardından 2+ dizi için progresif hizalama stratejisi entegre edildi. Her yeni dizi, referans diziye (ilk dizi) NW ile hizalanarak mevcut hizalamaya eklenir. Sum-of-Pairs skoru tüm kolon çiftleri üzerinden hesaplanır.

---

---

<a name="english"></a>

# zehramsa — Multiple Sequence Alignment Library

zehramsa is a pure Python library that aligns multiple DNA sequences using a progressive alignment approach based on the Needleman-Wunsch dynamic programming algorithm. No external dependencies required; installable via pip.

---

## Technologies

- **Python 3.9+**
- **Needleman-Wunsch** — global pairwise alignment (dynamic programming)
- **Progressive MSA** — NW-based step-by-step multi-sequence merging
- **pyproject.toml** — pip installation support

---

## Features

- Pairwise sequence alignment (Needleman-Wunsch DP)
- Progressive NW-based MSA for 2+ sequences
- Customizable scoring (match / mismatch / gap)
- Sum-of-Pairs alignment score calculation
- Alignment identity percentage calculation
- Type and input validation with clear error messages

---

## Installation

```bash
pip install zehramsa
```

---

## Usage

### Multiple sequence alignment

```python
from zehramsa import align, SimpleScoring

result = align(["GATTACA", "GCATGCU", "GAGTACA"])
print(result)

result = align(["ACGT", "ACCT", "AGGT"], scoring=SimpleScoring(match=2.0, mismatch=-1.0, gap=-2.0))
print(result.score)
```

### Align with dp_align

```python
from zehramsa import dp_align

result = dp_align(["GAT", "GCT", "GTT"])
print(result)

result = dp_align(["ACGT", "AGT", "ACT"], scoring=SimpleScoring(match=2.0, mismatch=-1.0, gap=-2.0))
print(result.score)
```

### Pairwise alignment with Needleman-Wunsch

```python
from zehramsa import needleman_wunsch

pw = needleman_wunsch("GATTACA", "GCATGCU")
print(pw)
```

---

## Algorithms

| Function | Method | Complexity |
|---|---|---|
| `align()` / `dp_align()` | Progressive NW | O(k·n²) |
| `needleman_wunsch()` | Pairwise DP | O(n²) |

> `align()` and `dp_align()` run the same algorithm; `align()` additionally offers a `verbose` parameter.

---

## The Process

The project focuses on implementing multiple sequence alignment from scratch using dynamic programming. Needleman-Wunsch was built as a standalone module first; progressive alignment strategy was then integrated for 2+ sequences. Each new sequence is aligned to the reference sequence (first sequence) via NW and merged into the existing alignment. Sum-of-Pairs score is computed over all column pairs.
