"""
setriq
======

Provides:
    1. fast computation of pairwise (immunoglobulin) sequence distances
    2. parsed BLOSUM substitution matrices

About
-----
This package is a one-trick-pony which does its trick pretty well: efficient computation of pairwise sequence distances
on CPU. There are a number of distance functions available [1]_ [2]_ [3]_ [4]_, implemented in C++ and surfaced in
Python.

Examples
--------
>>> import setriq
>>> metric = setriq.CdrDist()
>>>
>>> sequences = [
...     'CASSLKPNTEAFF',
...     'CASSAHIANYGYTF',
...     'CASRGATETQYF'
... ]
>>> distances = metric(sequences)

References
----------
.. [1] Dash, P., Fiore-Gartland, A.J., Hertz, T., Wang, G.C., Sharma, S., Souquette, A., Crawford, J.C., Clemens, E.B.,
   Nguyen, T.H., Kedzierska, K. and La Gruta, N.L., 2017. Quantifiable predictive features define epitope-specific
   T cell receptor repertoires. Nature, 547(7661), pp.89-93. (https://doi.org/10.1038/nature22383)

.. [2] Levenshtein, V.I., 1966, February. Binary codes capable of correcting deletions, insertions, and reversals. In
   Soviet physics doklady (Vol. 10, No. 8, pp. 707-710).

.. [3] python-Levenshtein (https://github.com/ztane/python-Levenshtein)

.. [4] Thakkar, N. and Bailey-Kellogg, C., 2019. Balancing sensitivity and specificity in distinguishing TCR groups by
   CDR sequence similarity. BMC bioinformatics, 20(1), pp.1-14. (https://doi.org/10.1186/s12859-019-2864-8)

"""

from .modules import (
    BLOSUM45,
    BLOSUM62,
    BLOSUM90,
    CdrDist,
    Hamming,
    Jaro,
    JaroWinkler,
    Levenshtein,
    LongestCommonSubstring,
    OptimalStringAlignment,
    SubstitutionMatrix,
    TcrDist,
    single_dispatch,
)

__all__ = [
    "BLOSUM45",
    "BLOSUM62",
    "BLOSUM90",
    "CdrDist",
    "Hamming",
    "Jaro",
    "JaroWinkler",
    "Levenshtein",
    "LongestCommonSubstring",
    "OptimalStringAlignment",
    "SubstitutionMatrix",
    "TcrDist",
    "single_dispatch",
]
