k-nucleotide Python 3 #8 program
source code
# The Computer Language Benchmarks Game
# https://salsa.debian.org/benchmarksgame-team/benchmarksgame/
#
# submitted by Ian Osgood
# modified by Sokolov Yura
# modified by bearophile
# modified by xfm for parallelization
# modified by Justin Peel
from sys import stdin
from collections import defaultdict
from multiprocessing import Pool
def gen_freq(frame) :
global sequence
frequences = defaultdict(int)
if frame != 1:
for ii in range(len(sequence)-frame+1) :
frequences[sequence[ii:ii+frame]] += 1
else:
for nucleo in sequence:
frequences[nucleo] += 1
return frequences
def sort_seq(length):
frequences = gen_freq(length)
n= sum(frequences.values())
l = sorted(list(frequences.items()), reverse=True, key=lambda seq_freq: (seq_freq[1],seq_freq[0]))
return '\n'.join("%s %.3f" % (st, 100.0*fr/n) for st,fr in l)
def find_seq(s):
t = gen_freq(len(s))
return (s,t.get(s,0))
def prepare(f=stdin) :
for line in f:
if line[0] in ">;":
if line[1:3] == "TH":
break
seq = []
app = seq.append
for line in f:
if line[0] in ">;":
break
app( line )
return "".join(seq).upper().replace('\n','')
def init(arg):
global sequence
sequence = arg
def main():
global sequence
sequence = prepare()
p=Pool()
res2 = p.map_async(find_seq,reversed("GGT GGTA GGTATT GGTATTTTAATT GGTATTTTAATTTATAGT".split()))
res1 = p.map_async(sort_seq,(1,2))
for s in res1.get() : print (s+'\n')
res2 = reversed([r for r in res2.get()])
print ("\n".join("{1:d}\t{0}".format(*s) for s in res2))
if __name__=='__main__' :
main()
notes, command-line, and program output
NOTES:
64-bit Ubuntu quad core
Python 3.8.0
Mon, 11 May 2020 01:48:09 GMT
MAKE:
mv knucleotide.python3-8.python3 knucleotide.python3-8.py
mypy .
There are no .py[i] files in directory '.'
make: [/home/dunham/8000-benchmarksgame/nanobench/makefiles/u64q.programs.Makefile:352: knucleotide.python3-8.python3_run] Error 2 (ignored)
3.50s to complete and log all make actions
COMMAND LINE:
/opt/src/Python-3.8.0/bin/python3 -OO knucleotide.python3-8.py 0 < knucleotide-input25000000.txt
PROGRAM OUTPUT:
A 30.295
T 30.151
C 19.800
G 19.754
AA 9.177
TA 9.132
AT 9.131
TT 9.091
CA 6.002
AC 6.001
AG 5.987
GA 5.984
CT 5.971
TC 5.971
GT 5.957
TG 5.956
CC 3.917
GC 3.911
CG 3.909
GG 3.902
1471758 GGT
446535 GGTA
47336 GGTATT
893 GGTATTTTAATT
893 GGTATTTTAATTTATAGT