test_seq

Testing Seq
===========
TCAAAAGGATGCATCATG
18
T
G
AA
Reverse using -1 stride: Seq('GTACTACGTAGGAAAACT', IUPACUnambiguousDNA())
Extract every third nucleotide (slicing with stride 3):
Seq('TAGTAA', IUPACUnambiguousDNA())
Seq('CAGGTT', IUPACUnambiguousDNA())
Seq('AAACCG', IUPACUnambiguousDNA())
GATC
IUPACUnambiguousDNA()
19
expected error, and got it
IUPACAmbiguousDNA()

Testing MutableSeq
==================
Testing creating MutableSeqs in multiple ways
MutableSeq('TCAAAAGGATGCATCATG', IUPACAmbiguousDNA())
TCAAAAGGATGCATCATG
18
Seq('TCAAAAGGATGCATCATG', IUPACAmbiguousDNA())
T
MutableSeq('CAAA', IUPACAmbiguousDNA())
Set slice with string: MutableSeq('TGATAAAGGATGCATCATG', IUPACAmbiguousDNA())
Set slice with MutableSeq: MutableSeq('TAATAAAGGATGCATCATG', IUPACAmbiguousDNA())
Set slice with array: MutableSeq('TGATTAAAGGATGCATCATG', IUPACAmbiguousDNA())
Set item: MutableSeq('TGAGTAAAGGATGCATCATG', IUPACAmbiguousDNA())
Delete slice: MutableSeq('TGAGAAAGGATGCATCATG', IUPACAmbiguousDNA())
Delete item: MutableSeq('TGAAAAGGATGCATCATG', IUPACAmbiguousDNA())
Append: MutableSeq('TGAAAAGGATGCATCATGC', IUPACAmbiguousDNA())
Insert: MutableSeq('TGAAGAAGGATGCATCATGC', IUPACAmbiguousDNA())
Pop off the last item: C
Removed Gs: MutableSeq('TAAGAAGGATGCATCATG', IUPACAmbiguousDNA())
Expected value error and got it
A count: 7
A index: 1
Reversed Seq: MutableSeq('GTACTACGTAGGAAGAAT', IUPACAmbiguousDNA())
Reverse using -1 stride: MutableSeq('TAAGAAGGATGCATCATG', IUPACAmbiguousDNA())
Extended Seq: MutableSeq('GTACTACGTAGGAAGAATGATTTT', IUPACAmbiguousDNA())
Delete stride slice: MutableSeq('GTACTACGTAGGAAGAATGATTTT', IUPACAmbiguousDNA())
Extract every third nucleotide (slicing with stride 3):
MutableSeq('GCCAAAGT', IUPACAmbiguousDNA())
MutableSeq('TTGGAAAT', IUPACAmbiguousDNA())
MutableSeq('AATGGTTT', IUPACAmbiguousDNA())
Setting wobble codon to N (set slice with stride 3):
MutableSeq('GTNCTNCGNAGNAANAANGANTTN', IUPACAmbiguousDNA())

Testing Seq addition
====================
Gapped(RNAAlphabet(), '-') + Gapped(RNAAlphabet(), '.')
-> More than one gap character present
Gapped(RNAAlphabet(), '.') + Gapped(RNAAlphabet(), '-')
-> More than one gap character present
Gapped(IUPACProtein(), '.') + Gapped(IUPACProtein(), '-')
-> More than one gap character present
Gapped(IUPACProtein(), '.') + Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-')
-> More than one gap character present
Gapped(IUPACProtein(), '.') + Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-')
-> More than one gap character present
Gapped(IUPACProtein(), '.') + HasStopCodon(Gapped(ExtendedIUPACProtein(), '-'), '@')
-> More than one gap character present
Gapped(IUPACProtein(), '.') + HasStopCodon(Gapped(IUPACProtein(), '-'), '@')
-> More than one gap character present
Gapped(IUPACProtein(), '-') + Gapped(IUPACProtein(), '.')
-> More than one gap character present
Gapped(IUPACProtein(), '-') + Gapped(HasStopCodon(ExtendedIUPACProtein(), '@'), '.')
-> More than one gap character present
Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-') + Gapped(IUPACProtein(), '.')
-> More than one gap character present
Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-') + HasStopCodon(Gapped(ExtendedIUPACProtein(), '-'), '@')
-> More than one stop symbol present
Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-') + HasStopCodon(Gapped(IUPACProtein(), '-'), '@')
-> More than one stop symbol present
Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-') + Gapped(HasStopCodon(ExtendedIUPACProtein(), '@'), '.')
-> More than one gap character present
Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-') + Gapped(IUPACProtein(), '.')
-> More than one gap character present
Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-') + HasStopCodon(Gapped(ExtendedIUPACProtein(), '-'), '@')
-> More than one stop symbol present
Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-') + HasStopCodon(Gapped(IUPACProtein(), '-'), '@')
-> More than one stop symbol present
Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-') + Gapped(HasStopCodon(ExtendedIUPACProtein(), '@'), '.')
-> More than one gap character present
HasStopCodon(Gapped(ExtendedIUPACProtein(), '-'), '@') + Gapped(IUPACProtein(), '.')
-> More than one gap character present
HasStopCodon(Gapped(ExtendedIUPACProtein(), '-'), '@') + Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-')
-> More than one stop symbol present
HasStopCodon(Gapped(ExtendedIUPACProtein(), '-'), '@') + Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-')
-> More than one stop symbol present
HasStopCodon(Gapped(ExtendedIUPACProtein(), '-'), '@') + Gapped(HasStopCodon(ExtendedIUPACProtein(), '@'), '.')
-> More than one gap character present
HasStopCodon(Gapped(IUPACProtein(), '-'), '@') + Gapped(IUPACProtein(), '.')
-> More than one gap character present
HasStopCodon(Gapped(IUPACProtein(), '-'), '@') + Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-')
-> More than one stop symbol present
HasStopCodon(Gapped(IUPACProtein(), '-'), '@') + Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-')
-> More than one stop symbol present
HasStopCodon(Gapped(IUPACProtein(), '-'), '@') + Gapped(HasStopCodon(ExtendedIUPACProtein(), '@'), '.')
-> More than one gap character present
Gapped(HasStopCodon(ExtendedIUPACProtein(), '@'), '.') + Gapped(IUPACProtein(), '-')
-> More than one gap character present
Gapped(HasStopCodon(ExtendedIUPACProtein(), '@'), '.') + Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-')
-> More than one gap character present
Gapped(HasStopCodon(ExtendedIUPACProtein(), '@'), '.') + Gapped(HasStopCodon(ExtendedIUPACProtein(), '*'), '-')
-> More than one gap character present
Gapped(HasStopCodon(ExtendedIUPACProtein(), '@'), '.') + HasStopCodon(Gapped(ExtendedIUPACProtein(), '-'), '@')
-> More than one gap character present
Gapped(HasStopCodon(ExtendedIUPACProtein(), '@'), '.') + HasStopCodon(Gapped(IUPACProtein(), '-'), '@')
-> More than one gap character present

Testing Seq string methods
==========================

Checking ambiguous complements
==============================

DNA Ambiguity mapping: {'A': 'A', 'B': 'CGT', 'C': 'C', 'D': 'AGT', 'G': 'G', 'H': 'ACT', 'K': 'GT', 'M': 'AC', 'N': 'GATC', 'R': 'AG', 'S': 'CG', 'T': 'T', 'V': 'ACG', 'W': 'AT', 'X': 'GATC', 'Y': 'CT'}
DNA Complement mapping: {'A': 'T', 'B': 'V', 'C': 'G', 'D': 'H', 'G': 'C', 'H': 'D', 'K': 'M', 'M': 'K', 'N': 'N', 'R': 'Y', 'S': 'S', 'T': 'A', 'V': 'B', 'W': 'W', 'X': 'X', 'Y': 'R'}
A={A} --> {T}=T
B={CGT} --> {GCA}=V
C={C} --> {G}=G
D={AGT} --> {TCA}=H
G={G} --> {C}=C
H={ACT} --> {TGA}=D
K={GT} --> {CA}=M
M={AC} --> {TG}=K
N={GATC} --> {CTAG}=N
R={AG} --> {TC}=Y
S={CG} --> {GC}=S
T={T} --> {A}=A
V={ACG} --> {TGC}=B
W={AT} --> {TA}=W
X={GATC} --> {CTAG}=X
Y={CT} --> {GA}=R

RNA Ambiguity mapping: {'A': 'A', 'B': 'CGU', 'C': 'C', 'D': 'AGU', 'G': 'G', 'H': 'ACU', 'K': 'GU', 'M': 'AC', 'N': 'GAUC', 'R': 'AG', 'S': 'CG', 'U': 'U', 'V': 'ACG', 'W': 'AU', 'X': 'GAUC', 'Y': 'CU'}
RNA Complement mapping: {'A': 'U', 'B': 'V', 'C': 'G', 'D': 'H', 'G': 'C', 'H': 'D', 'K': 'M', 'M': 'K', 'N': 'N', 'R': 'Y', 'S': 'S', 'U': 'A', 'V': 'B', 'W': 'W', 'X': 'X', 'Y': 'R'}
A={A} --> {U}=U
B={CGU} --> {GCA}=V
C={C} --> {G}=G
D={AGU} --> {UCA}=H
G={G} --> {C}=C
H={ACU} --> {UGA}=D
K={GU} --> {CA}=M
M={AC} --> {UG}=K
N={GAUC} --> {CUAG}=N
R={AG} --> {UC}=Y
S={CG} --> {GC}=S
U={U} --> {A}=A
V={ACG} --> {UGC}=B
W={AU} --> {UA}=W
X={GAUC} --> {CUAG}=X
Y={CU} --> {GA}=R

Reverse complements:
Seq('ABCDGHKMNRSUVWXY', Alphabet()) -> Seq('RXWBASYNKMDCHGVU', Alphabet())
Seq('ABCDGHKMNRSTVWXY', Alphabet()) -> Seq('RXWBASYNKMDCHGVT', Alphabet())
Seq('ABCDGHKMNRSUVWXY', RNAAlphabet()) -> Seq('RXWBASYNKMDCHGVU', RNAAlphabet())
Seq('ABCDGHKMNRSTVWXY', DNAAlphabet()) -> Seq('RXWBASYNKMDCHGVT', DNAAlphabet())
Seq('ABCDGHKMNRSUVWY', IUPACAmbiguousRNA()) -> Seq('RWBASYNKMDCHGVU', IUPACAmbiguousRNA())
Seq('ABCDGHKMNRSTVWY', IUPACAmbiguousDNA()) -> Seq('RWBASYNKMDCHGVT', IUPACAmbiguousDNA())
Seq('AWGAARCKG', Alphabet()) -> Seq('CMGYTTCWT', Alphabet())


Transcribe DNA into RNA
=======================
Seq('TCAAAAGGATGCATCATG', IUPACUnambiguousDNA()) -> Seq('UCAAAAGGAUGCAUCAUG', IUPACUnambiguousRNA())
Seq('T', IUPACAmbiguousDNA()) -> Seq('U', IUPACAmbiguousRNA())
Seq('TCAAAAGGATGCATCATGT', IUPACAmbiguousDNA()) -> Seq('UCAAAAGGAUGCAUCAUGU', IUPACAmbiguousRNA())
Seq('ATGAAACTG', Alphabet()) -> Seq('AUGAAACUG', RNAAlphabet())
'ATGAAACtg' -> 'AUGAAACug'
Seq('AUGAAACUG', RNAAlphabet()) -> RNA cannot be transcribed!
Seq('ATGAAACTG', IUPACUnambiguousDNA()) -> Seq('AUGAAACUG', IUPACUnambiguousRNA())
Seq('ATGAAA-CTG', Gapped(IUPACUnambiguousDNA(), '-')) -> Seq('AUGAAA-CUG', RNAAlphabet())
Seq('ATGAAACTGWN', IUPACAmbiguousDNA()) -> Seq('AUGAAACUGWN', IUPACAmbiguousRNA())
Seq('AUGAAACUG', RNAAlphabet()) -> RNA cannot be transcribed!
Seq('AUGAAA==CUG', Gapped(RNAAlphabet(), '=')) -> RNA cannot be transcribed!
Seq('AUGAAACUG', IUPACUnambiguousRNA()) -> RNA cannot be transcribed!
Seq('AUGAAACUGWN', IUPACAmbiguousRNA()) -> RNA cannot be transcribed!
Seq('ATGAAACTG', NucleotideAlphabet()) -> Seq('AUGAAACUG', RNAAlphabet())
Seq('AUGAAACTG', NucleotideAlphabet()) -> Seq('AUGAAACUG', RNAAlphabet())
MutableSeq('ATGAAACTG', DNAAlphabet()) -> Seq('AUGAAACUG', RNAAlphabet())
MutableSeq('AUGaaaCUG', IUPACUnambiguousRNA()) -> RNA cannot be transcribed!
Seq('ACTGTCGTCT', ProteinAlphabet()) -> Proteins cannot be transcribed!

Back-transcribe RNA into DNA
============================
Seq('TCAAAAGGATGCATCATG', IUPACUnambiguousDNA()) -> DNA cannot be back transcribed!
Seq('T', IUPACAmbiguousDNA()) -> DNA cannot be back transcribed!
Seq('TCAAAAGGATGCATCATGT', IUPACAmbiguousDNA()) -> DNA cannot be back transcribed!
Seq('ATGAAACTG', Alphabet()) -> Seq('ATGAAACTG', DNAAlphabet())
'ATGAAACtg' -> 'ATGAAACtg'
Seq('AUGAAACUG', RNAAlphabet()) -> Seq('ATGAAACTG', DNAAlphabet())
Seq('ATGAAACTG', IUPACUnambiguousDNA()) -> DNA cannot be back transcribed!
Seq('ATGAAA-CTG', Gapped(IUPACUnambiguousDNA(), '-')) -> DNA cannot be back transcribed!
Seq('ATGAAACTGWN', IUPACAmbiguousDNA()) -> DNA cannot be back transcribed!
Seq('AUGAAACUG', RNAAlphabet()) -> Seq('ATGAAACTG', DNAAlphabet())
Seq('AUGAAA==CUG', Gapped(RNAAlphabet(), '=')) -> Seq('ATGAAA==CTG', DNAAlphabet())
Seq('AUGAAACUG', IUPACUnambiguousRNA()) -> Seq('ATGAAACTG', IUPACUnambiguousDNA())
Seq('AUGAAACUGWN', IUPACAmbiguousRNA()) -> Seq('ATGAAACTGWN', IUPACAmbiguousDNA())
Seq('ATGAAACTG', NucleotideAlphabet()) -> Seq('ATGAAACTG', DNAAlphabet())
Seq('AUGAAACTG', NucleotideAlphabet()) -> Seq('ATGAAACTG', DNAAlphabet())
MutableSeq('ATGAAACTG', DNAAlphabet()) -> DNA cannot be back transcribed!
MutableSeq('AUGaaaCUG', IUPACUnambiguousRNA()) -> Seq('ATGaaaCTG', IUPACUnambiguousDNA())
Seq('ACTGTCGTCT', ProteinAlphabet()) -> Proteins cannot be back transcribed!

Reverse Complement
==================
Seq('TCAAAAGGATGCATCATG', IUPACUnambiguousDNA())
-> Seq('CATGATGCATCCTTTTGA', IUPACUnambiguousDNA())
Seq('T', IUPACAmbiguousDNA())
-> Seq('A', IUPACAmbiguousDNA())
Seq('TCAAAAGGATGCATCATGT', IUPACAmbiguousDNA())
-> Seq('ACATGATGCATCCTTTTGA', IUPACAmbiguousDNA())
Seq('ATGAAACTG', Alphabet())
-> Seq('CAGTTTCAT', Alphabet())
'ATGAAACtg'
-> 'caGTTTCAT'
Seq('AUGAAACUG', RNAAlphabet())
-> Seq('CAGUUUCAU', RNAAlphabet())
Seq('ATGAAACTG', IUPACUnambiguousDNA())
-> Seq('CAGTTTCAT', IUPACUnambiguousDNA())
Seq('ATGAAA-CTG', Gapped(IUPACUnambiguousDNA(), '-'))
-> Seq('CAG-TTTCAT', Gapped(IUPACUnambiguousDNA(), '-'))
Seq('ATGAAACTGWN', IUPACAmbiguousDNA())
-> Seq('NWCAGTTTCAT', IUPACAmbiguousDNA())
Seq('AUGAAACUG', RNAAlphabet())
-> Seq('CAGUUUCAU', RNAAlphabet())
Seq('AUGAAA==CUG', Gapped(RNAAlphabet(), '='))
-> Seq('CAG==UUUCAU', Gapped(RNAAlphabet(), '='))
Seq('AUGAAACUG', IUPACUnambiguousRNA())
-> Seq('CAGUUUCAU', IUPACUnambiguousRNA())
Seq('AUGAAACUGWN', IUPACAmbiguousRNA())
-> Seq('NWCAGUUUCAU', IUPACAmbiguousRNA())
Seq('ATGAAACTG', NucleotideAlphabet())
-> Seq('CAGTTTCAT', NucleotideAlphabet())
Seq('AUGAAACTG', NucleotideAlphabet())
-> Mixed RNA/DNA found
MutableSeq('ATGAAACTG', DNAAlphabet())
-> Seq('CAGTTTCAT', DNAAlphabet())
MutableSeq('AUGaaaCUG', IUPACUnambiguousRNA())
-> Seq('CAGuuuCAU', IUPACUnambiguousRNA())
Seq('ACTGTCGTCT', ProteinAlphabet())
-> Proteins do not have complements!

Translating
===========
Seq('TCAAAAGGATGCATCATG', IUPACUnambiguousDNA())
-> Seq('SKGCIM', IUPACProtein())
Seq('T', IUPACAmbiguousDNA())
-> Seq('', ExtendedIUPACProtein())
Seq('TCAAAAGGATGCATCATGT', IUPACAmbiguousDNA())
-> Seq('SKGCIM', ExtendedIUPACProtein())
Seq('ATGAAACTG', Alphabet())
-> Seq('MKL', ExtendedIUPACProtein())
'ATGAAACtg'
-> 'MKL'
Seq('AUGAAACUG', RNAAlphabet())
-> Seq('MKL', ExtendedIUPACProtein())
Seq('ATGAAACTG', IUPACUnambiguousDNA())
-> Seq('MKL', IUPACProtein())
Seq('ATGAAA-CTG', Gapped(IUPACUnambiguousDNA(), '-'))
-> Codon '-CT' is invalid
Seq('ATGAAACTGWN', IUPACAmbiguousDNA())
-> Seq('MKL', ExtendedIUPACProtein())
Seq('AUGAAACUG', RNAAlphabet())
-> Seq('MKL', ExtendedIUPACProtein())
Seq('AUGAAA==CUG', Gapped(RNAAlphabet(), '='))
-> Codon '==C' is invalid
Seq('AUGAAACUG', IUPACUnambiguousRNA())
-> Seq('MKL', IUPACProtein())
Seq('AUGAAACUGWN', IUPACAmbiguousRNA())
-> Seq('MKL', ExtendedIUPACProtein())
Seq('ATGAAACTG', NucleotideAlphabet())
-> Seq('MKL', ExtendedIUPACProtein())
Seq('AUGAAACTG', NucleotideAlphabet())
-> Seq('MKL', ExtendedIUPACProtein())
MutableSeq('ATGAAACTG', DNAAlphabet())
-> Seq('MKL', ExtendedIUPACProtein())
MutableSeq('AUGaaaCUG', IUPACUnambiguousRNA())
-> Seq('MKL', IUPACProtein())
Seq('ACTGTCGTCT', ProteinAlphabet())
-> Proteins cannot be translated!

Seq's .complement() method
==========================
Seq('TCAAAAGGATGCATCATG', IUPACUnambiguousDNA()) -> Seq('AGTTTTCCTACGTAGTAC', IUPACUnambiguousDNA())
Seq('T', IUPACAmbiguousDNA()) -> Seq('A', IUPACAmbiguousDNA())
Seq('TCAAAAGGATGCATCATGT', IUPACAmbiguousDNA()) -> Seq('AGTTTTCCTACGTAGTACA', IUPACAmbiguousDNA())
Seq('ATGAAACTG', Alphabet()) -> Seq('TACTTTGAC', Alphabet())
Seq('AUGAAACUG', RNAAlphabet()) -> Seq('UACUUUGAC', RNAAlphabet())
Seq('ATGAAACTG', IUPACUnambiguousDNA()) -> Seq('TACTTTGAC', IUPACUnambiguousDNA())
Seq('ATGAAA-CTG', Gapped(IUPACUnambiguousDNA(), '-')) -> Seq('TACTTT-GAC', Gapped(IUPACUnambiguousDNA(), '-'))
Seq('ATGAAACTGWN', IUPACAmbiguousDNA()) -> Seq('TACTTTGACWN', IUPACAmbiguousDNA())
Seq('AUGAAACUG', RNAAlphabet()) -> Seq('UACUUUGAC', RNAAlphabet())
Seq('AUGAAA==CUG', Gapped(RNAAlphabet(), '=')) -> Seq('UACUUU==GAC', Gapped(RNAAlphabet(), '='))
Seq('AUGAAACUG', IUPACUnambiguousRNA()) -> Seq('UACUUUGAC', IUPACUnambiguousRNA())
Seq('AUGAAACUGWN', IUPACAmbiguousRNA()) -> Seq('UACUUUGACWN', IUPACAmbiguousRNA())
Seq('ATGAAACTG', NucleotideAlphabet()) -> Seq('TACTTTGAC', NucleotideAlphabet())
Seq('AUGAAACTG', NucleotideAlphabet()) -> Mixed RNA/DNA found
Seq('ACTGTCGTCT', ProteinAlphabet()) -> Proteins do not have complements!

Seq's .reverse_complement() method
==================================
Seq('TCAAAAGGATGCATCATG', IUPACUnambiguousDNA()) -> Seq('CATGATGCATCCTTTTGA', IUPACUnambiguousDNA())
Seq('T', IUPACAmbiguousDNA()) -> Seq('A', IUPACAmbiguousDNA())
Seq('TCAAAAGGATGCATCATGT', IUPACAmbiguousDNA()) -> Seq('ACATGATGCATCCTTTTGA', IUPACAmbiguousDNA())
Seq('ATGAAACTG', Alphabet()) -> Seq('CAGTTTCAT', Alphabet())
Seq('AUGAAACUG', RNAAlphabet()) -> Seq('CAGUUUCAU', RNAAlphabet())
Seq('ATGAAACTG', IUPACUnambiguousDNA()) -> Seq('CAGTTTCAT', IUPACUnambiguousDNA())
Seq('ATGAAA-CTG', Gapped(IUPACUnambiguousDNA(), '-')) -> Seq('CAG-TTTCAT', Gapped(IUPACUnambiguousDNA(), '-'))
Seq('ATGAAACTGWN', IUPACAmbiguousDNA()) -> Seq('NWCAGTTTCAT', IUPACAmbiguousDNA())
Seq('AUGAAACUG', RNAAlphabet()) -> Seq('CAGUUUCAU', RNAAlphabet())
Seq('AUGAAA==CUG', Gapped(RNAAlphabet(), '=')) -> Seq('CAG==UUUCAU', Gapped(RNAAlphabet(), '='))
Seq('AUGAAACUG', IUPACUnambiguousRNA()) -> Seq('CAGUUUCAU', IUPACUnambiguousRNA())
Seq('AUGAAACUGWN', IUPACAmbiguousRNA()) -> Seq('NWCAGUUUCAU', IUPACAmbiguousRNA())
Seq('ATGAAACTG', NucleotideAlphabet()) -> Seq('CAGTTTCAT', NucleotideAlphabet())
Seq('AUGAAACTG', NucleotideAlphabet()) -> Mixed RNA/DNA found
Seq('ACTGTCGTCT', ProteinAlphabet()) -> Proteins do not have complements!
