1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| #!/usr/bin/env python3
# coding: utf-8
import random
import timeit
from functools import partial
import re
# Initialisation random
random.seed()
def svear(sequence, motifs):
for i in range(len(sequence)):
for m in motifs:
if sequence[i:i+len(m)] == m:
return (i, m)
# for
# for
# svear()
def tyrtamos(sequence, motifs):
# liste des index des motifs trouvés dans sequence
inds = [sequence.find(motif) for motif in motifs]
# trouver le motif le plus proche du début de sequence
ind0, motif0 = max(inds), ''
for i in range(0, len(motifs)):
if inds[i]>-1 and inds[i]<ind0:
ind0, motif0 = inds[i], motifs[i]
return (ind0, motif0)
# tyrtamos()
def wiztricks(sequence, motifs):
res=re.search("(%s)" % "|".join(motifs), sequence)
return (res.span()[0], res.group())
# wiztricks()
def ypcman(sequence, motifs):
res=sorted(
[(m,sequence.find(m)) for m in motifs if sequence.find(m) !=-1], key= lambda t:t[1]
)[0]
return (res[1], res[0])
# ypcman()
# Les fonctions à tester
fct={
"svear" : svear,
"tyrtamos" : tyrtamos,
"wiztricks" : wiztricks,
"ypcman" : ypcman,
}
# Les données à traiter
sequence = 'TTATATATTATATATTTATGATGGGGTTAGATGGGATTGAAAA'
motifs = ['TAA', 'TAG', 'TGA']
# Vérifications fonctions donnent toutes un même résultat
assert(len(set(tuple(f(sequence, motifs)) for f in fct.values())) == 1)
print("Vérification fonctions ok")
# Le nombre de répétitions (les moyennes se feront sur cette valeur)
repeat=20
# Appel des fonctions dans un ordre aléatoire et affichage du chrono
print("taille data=(%d, %d), repeat=%d" % (len(sequence), len(motifs), repeat))
for (k, v) in random.sample(tuple(fct.items()), len(fct)):
t=timeit.Timer(partial(v, sequence, motifs)).repeat(repeat=repeat, number=100000)
print("%s: min=%f, max=%f, avg=%f" % (k, min(t), max(t), sum(t)/len(t)))
# for |
Partager