import timeit

import biotite.structure as struc
import biotite.structure.io as strucio
import biotite.sequence as seq
import biotite.sequence.align as align

from Bio.PDB.MMCIFParser import MMCIFParser
from Bio.PDB.Superimposer import Superimposer
from Bio.Seq import Seq
from Bio import pairwise2

parser = MMCIFParser()
structure = parser.get_structure("1aki", "1aki.cif")
def biopython_superimpose():
    fixed = list(structure.get_atoms())
    moving = list(structure.get_atoms())
    imposer = Superimposer()
    imposer.set_atoms(fixed, moving)
    imposer.apply(moving)
print("1000x Biopython coordinate superimposition:",
      timeit.timeit(biopython_superimpose, number=1000),
      "s")

array = strucio.get_structure_from("1aki.cif")
def biotite_superimpose():
    imposed, transform = struc.superimpose(array, array, ca_only=False)
    rmsd = struc.rmsd(array, imposed)
print("1000x Biotite coordinate superimposition:",
      timeit.timeit(biotite_superimpose, number=1000),
      "s")


poly_ala_1 = Seq("A" * 1000)
poly_ala_2 = Seq("A" * 1000)
def biopython_align():
    pairwise2.align.globalxx(poly_ala_1, poly_ala_2)
print("100x Biopython pairwise global alignment:",
      timeit.timeit(biopython_align, number=100),
      "s")

poly_ala_1 = seq.ProteinSequence("A" * 1000)
poly_ala_2 = seq.ProteinSequence("A" * 1000)
matrix = align.SubstitutionMatrix.std_protein_matrix()
def biotite_align():
    align.align_optimal(poly_ala_1, poly_ala_2, matrix)
print("100x Biotite pairwise global alignment:",
      timeit.timeit(biotite_align, number=100),
      "s")