Package: pard
PARD (Physicochemical Amino acid Replacement Distances)OverviewAmino acid replacements (also referred to as substitutions) are changes from one amino acid to a different one in a
protein - and there are different ways to assess the difference between the two amino acids that come into play in an
amino acid replacement.One can look at one or several properties' discrepancy between two amino acids.
To list only a few: polarity[1][3][4][8],
molecular volume / relative sizes of amino-acid side chains[1][3][4],
mean number of lone pair electrons on the side-chain[2],
maximum moment of inertia for rotation at the α―β bond[2]or at the β―γ bond[2]or at the γ―δ bond[2],
presence of a pyrrolidine ring (proline (P))[2],
experimental protein activity and stability after exchanging one amino acid into another[5], Chou-Fasman alpha helical[8], beta strand[8]and/or reverse turn
propensity parameters[8], etc.pardis a package designed to make thosePhysicochemicalAmino acidReplacementDistances calculations
straightforward with Python.One typical use is to establish a 'distance' between a wild-type protein and its mutated version. Sometimes, rather
than a distance, a similarity is outputted (e.g. withthe Conformational similarity weight matrix[7]orEMPAR[8]). The higher the distance, the more
different the two amino acids are. The higher the similarity, the more similar the two amino acids are. Whenever
a distance is not outputted but rather a similarity, a warning (that the user can turn off) will be raised.Getting startedInstall from PyPI (recommended)To usepard, runpip install pardin your terminal.Usage## Importsfrompard.granthamimportgranthamfrompard.sneathimportsneathfrompard.experimental_exchangeabilityimportexperimental_exchangeabilityfrompard.koshi_goldsteinimportkoshi_goldstein,MatrixType## Basic examplesamino_acid_1:str="W"# Tryptophanamino_acid_2:str="L"# Leucinedistance_grantham:int=grantham(amino_acid_1,amino_acid_2)print(distance_grantham)distance_sneath:int=sneath(amino_acid_1,amino_acid_2)print(distance_sneath)distance_ee:float=experimental_exchangeability(amino_acid_1,amino_acid_2,False,warning=True)print(distance_ee)## More subtle examples# Koshi-Goldstein has several scores and can estimate the likelihood of InDelsdistance_koshi_goldstein_all:float=koshi_goldstein("-","A",MatrixType.ALL_RESIDUES,False,warning=True)print(distance_koshi_goldstein_all)or equivalently## Importsimportpard## Basic examplesamino_acid_1:str="W"# Tryptophanamino_acid_2:str="L"# Leucinedistance_grantham:int=pard.grantham.grantham(amino_acid_1,amino_acid_2)print(distance_grantham)distance_sneath:int=pard.sneath.sneath(amino_acid_1,amino_acid_2)print(distance_sneath)distance_ee:float=pard.experimental_exchangeability.experimental_exchangeability(amino_acid_1,amino_acid_2,False,warning=True)print(distance_ee)## More subtle examples# Koshi-Goldstein has several scores and can estimate the likelihood of InDelsdistance_koshi_goldstein_all:float=pard.koshi_goldstein.koshi_goldstein("-","A",pard.koshi_goldstein.MatrixType.ALL_RESIDUES,False,warning=True)print(distance_koshi_goldstein_all)will output:>>> 61
>>> 30
>>> 177
>>> 1.6which are the correct values[1][2][5][6].Exit codes:- 1: Argument amino_acid_1 or amino_acid_2 is neither of length 1 nor length 3. See error message.About the source codeFollowsPEP8Style Guidelines.All functions are unit-tested withpytest.All variables are correctly type-hinted, reviewed withstatic type checkermypy.All functions are documented withdocstrings.Unit tests detailsCoverageName                                         Stmts   Miss  Cover
----------------------------------------------------------------
pard\__init__.py                                 3      0   100%
pard\_handling_3_letter_code_decorator.py       18      2    89%
pard\_raw_python_dictionaries.py                71      0   100%
pard\empar.py                                    8      0   100%
pard\epstein.py                                  7      0   100%
pard\experimental_exchangeability.py            10      0   100%
pard\grantham.py                                 5      0   100%
pard\kolaskar.py                                 8      0   100%
pard\koshi_goldstein.py                         55      2    96%
pard\miyata.py                                   5      0   100%
pard\sneath.py                                   5      0   100%
tests\__init__.py                                0      0   100%
tests\test_empar.py                             26      0   100%
tests\test_epstein.py                           46      0   100%
tests\test_experimental_exchangeability.py      30      0   100%
tests\test_grantham.py                          25      0   100%
tests\test_kolaskar.py                          26      0   100%
tests\test_koshi_goldstein.py                  108      0   100%
tests\test_miyata.py                            25      0   100%
tests\test_pard.py                               3      0   100%
tests\test_raw_python_dictionaries.py           24      0   100%
tests\test_sneath.py                            21      0   100%
unit_tests_simple.py                             5      0   100%
----------------------------------------------------------------
TOTAL                                          534      4    99%pytestplatform win32 -- Python 3.11.1, pytest-7.2.0, pluggy-1.0.0
plugins: anyio-3.6.2, mypy-0.10.3
collected 16 items

tests\test_empar.py .                                     [  6%] 
tests\test_epstein.py .                                   [ 12%] 
tests\test_experimental_exchangeability.py .              [ 18%] 
tests\test_grantham.py .                                  [ 25%]
tests\test_kolaskar.py .                                  [ 31%] 
tests\test_koshi_goldstein.py .......                     [ 75%]
tests\test_miyata.py .                                    [ 81%] 
tests\test_pard.py .                                      [ 87%] 
tests\test_raw_python_dictionaries.py .                   [ 93%] 
tests\test_sneath.py .                                    [100%] 

====================== 16 passed in 0.11s ======================mypy detail================================== mypy ==================================
Success: no issues found in 24 source filesUseful links:Corresponding GitHub repositoryCorresponding PyPI pageCitationIf you use this software, please cite it as below.APA:Lhotte, R. & Taupin, J. (2022). Physicochemical Amino acid Replacement Distances (PARD) package (Version 0.7.0.1) [Computer software]. https://doi.org/10.5281/zenodo.7013169BibTeX:@software{lhotte_pard_2022,
    author = {Lhotte, Romain and Taupin, Jean-Luc},
    doi = {10.5281/zenodo.7013169},
    month = {8},
    title = {{Physicochemical Amino acid Replacement Distances (PARD) package}},
    version = {0.7.0.1},
    year = {2022}
}References[1] Grantham, R., 1974. Amino acid difference formula to help explain protein evolution. science, 185(4154),
pp.862-864.[2] Sneath, P.H.A., 1966. Relations between chemical structure and biological activity in peptides. Journal of
theoretical biology, 12(2), pp.157-195.[3] Epstein, C.J., 1967. Non-randomness of ammo-acid changes in the evolution of homologous proteins. Nature,
215(5099), pp.355-359.[4] Miyata, T., Miyazawa, S. and Yasunaga, T., 1979. Two types of amino acid substitutions in protein evolution.
Journal of molecular evolution, 12(3), pp.219-236.[5] Yampolsky, L.Y. and Stoltzfus, A., 2005. The exchangeability of amino acids in proteins. Genetics, 170(4),
pp.1459-1472.[6] Koshi, J.M. and Goldstein, R.A., 1995. Context-dependent optimal substitution matrices. Protein Engineering,
Design and Selection, 8(7), pp.641-645.[7] Kolaskar, A.S. and Kulkarni-Kale, U., 1992. Sequence alignment approach to pick up conformationally similar
protein fragments. Journal of molecular biology, 223(4), pp.1053-1061.[8] Rao, J.M., 1987. New scoring matrix for amino acid residue exchanges based on residue characteristic physical
parameters. International Journal of Peptide and Protein Research, 29(2), pp.276-281.