chrislo-sourceclassifier 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (326) hide show
  1. data/Manifest +325 -0
  2. data/README.textile +51 -0
  3. data/Rakefile +64 -0
  4. data/examples/example.rb +22 -0
  5. data/lib/sourceclassifier.rb +22 -0
  6. data/lib/trainer.rb +51 -0
  7. data/sourceclassifier.gemspec +35 -0
  8. data/sources/gcc/ackermann.gcc-2.gcc +93 -0
  9. data/sources/gcc/ackermann.gcc-3.gcc +20 -0
  10. data/sources/gcc/ary.gcc +40 -0
  11. data/sources/gcc/binarytrees.gcc +136 -0
  12. data/sources/gcc/binarytrees.gcc-2.gcc +140 -0
  13. data/sources/gcc/binarytrees.gcc-3.gcc +134 -0
  14. data/sources/gcc/chameneos.gcc +117 -0
  15. data/sources/gcc/chameneos.gcc-2.gcc +134 -0
  16. data/sources/gcc/chameneos.gcc-3.gcc +120 -0
  17. data/sources/gcc/chameneosredux.gcc +306 -0
  18. data/sources/gcc/echo.gcc +144 -0
  19. data/sources/gcc/except.gcc +52 -0
  20. data/sources/gcc/fannkuch.gcc +105 -0
  21. data/sources/gcc/fannkuch.gcc-2.gcc +94 -0
  22. data/sources/gcc/fasta.gcc +158 -0
  23. data/sources/gcc/fasta.gcc-2.gcc +132 -0
  24. data/sources/gcc/fasta.gcc-3.gcc +145 -0
  25. data/sources/gcc/fasta.gcc-4.gcc +141 -0
  26. data/sources/gcc/fibo.gcc +20 -0
  27. data/sources/gcc/harmonic.gcc +22 -0
  28. data/sources/gcc/hash.gcc +31 -0
  29. data/sources/gcc/hash2.gcc +38 -0
  30. data/sources/gcc/heapsort.gcc +72 -0
  31. data/sources/gcc/hello.gcc-2.gcc +12 -0
  32. data/sources/gcc/hello.gcc-3.gcc +20 -0
  33. data/sources/gcc/knucleotide.gcc +173 -0
  34. data/sources/gcc/knucleotide.gcc-2.gcc +168 -0
  35. data/sources/gcc/lists.gcc +226 -0
  36. data/sources/gcc/magicsquares.gcc +378 -0
  37. data/sources/gcc/mandelbrot.gcc +84 -0
  38. data/sources/gcc/mandelbrot.gcc-2.gcc +63 -0
  39. data/sources/gcc/mandelbrot.gcc-3.gcc +91 -0
  40. data/sources/gcc/mandelbrot.gcc-4.gcc +78 -0
  41. data/sources/gcc/matrix.gcc +66 -0
  42. data/sources/gcc/message.gcc-2.gcc +72 -0
  43. data/sources/gcc/message.gcc-3.gcc +64 -0
  44. data/sources/gcc/methcall.gcc +89 -0
  45. data/sources/gcc/moments.gcc +120 -0
  46. data/sources/gcc/nbody.gcc +142 -0
  47. data/sources/gcc/nbody.gcc-2.gcc +143 -0
  48. data/sources/gcc/nbody.gcc-3.gcc +142 -0
  49. data/sources/gcc/nestedloop.gcc +25 -0
  50. data/sources/gcc/nsieve.gcc +35 -0
  51. data/sources/gcc/nsievebits.gcc-2.gcc +37 -0
  52. data/sources/gcc/nsievebits.gcc-3.gcc +53 -0
  53. data/sources/gcc/objinst.gcc +95 -0
  54. data/sources/gcc/partialsums.gcc +86 -0
  55. data/sources/gcc/partialsums.gcc-3.gcc +81 -0
  56. data/sources/gcc/partialsums.gcc-4.gcc +68 -0
  57. data/sources/gcc/pidigits.gcc +105 -0
  58. data/sources/gcc/primes.gcc +75 -0
  59. data/sources/gcc/prodcons.gcc +86 -0
  60. data/sources/gcc/random.gcc +29 -0
  61. data/sources/gcc/raytracer.gcc +125 -0
  62. data/sources/gcc/raytracer.gcc-2.gcc +181 -0
  63. data/sources/gcc/recursive.gcc +68 -0
  64. data/sources/gcc/recursive.gcc-2.gcc +55 -0
  65. data/sources/gcc/regexdna.gcc-2.gcc +126 -0
  66. data/sources/gcc/regexmatch.gcc +136 -0
  67. data/sources/gcc/revcomp.gcc +85 -0
  68. data/sources/gcc/revcomp.gcc-2.gcc +88 -0
  69. data/sources/gcc/revcomp.gcc-4.gcc +71 -0
  70. data/sources/gcc/reversefile.gcc +103 -0
  71. data/sources/gcc/reversefile.gcc-2.gcc +56 -0
  72. data/sources/gcc/sieve.gcc +34 -0
  73. data/sources/gcc/spectralnorm.gcc +54 -0
  74. data/sources/gcc/spellcheck.gcc +72 -0
  75. data/sources/gcc/spellcheck.gcc-2.gcc +61 -0
  76. data/sources/gcc/strcat.gcc +38 -0
  77. data/sources/gcc/sumcol.gcc-2.gcc +98 -0
  78. data/sources/gcc/sumcol.gcc-3.gcc +22 -0
  79. data/sources/gcc/sumcol.gcc-4.gcc +18 -0
  80. data/sources/gcc/sumcol.gcc-5.gcc +32 -0
  81. data/sources/gcc/takfp.gcc +23 -0
  82. data/sources/gcc/tcp-stream.gcc +122 -0
  83. data/sources/gcc/tcpecho.gcc +122 -0
  84. data/sources/gcc/tcpecho.gcc-2.gcc +136 -0
  85. data/sources/gcc/tcprequest.gcc +122 -0
  86. data/sources/gcc/threadring.gcc +73 -0
  87. data/sources/gcc/wc.gcc +52 -0
  88. data/sources/gcc/wc.gcc-2.gcc +40 -0
  89. data/sources/gcc/wc.gcc-3.gcc +46 -0
  90. data/sources/gcc/wordfreq.gcc-2.gcc +85 -0
  91. data/sources/perl/ackermann.perl +28 -0
  92. data/sources/perl/ackermann.perl-2.perl +25 -0
  93. data/sources/perl/ackermann.perl-3.perl +20 -0
  94. data/sources/perl/ackermann.perl-4.perl +18 -0
  95. data/sources/perl/ary.perl +25 -0
  96. data/sources/perl/ary.perl-2.perl +23 -0
  97. data/sources/perl/binarytrees.perl +66 -0
  98. data/sources/perl/binarytrees.perl-2.perl +71 -0
  99. data/sources/perl/chameneos.perl +67 -0
  100. data/sources/perl/echo.perl +81 -0
  101. data/sources/perl/except.perl +73 -0
  102. data/sources/perl/fannkuch.perl +44 -0
  103. data/sources/perl/fannkuch.perl-2.perl +38 -0
  104. data/sources/perl/fasta.perl +112 -0
  105. data/sources/perl/fasta.perl-2.perl +135 -0
  106. data/sources/perl/fasta.perl-4.perl +122 -0
  107. data/sources/perl/fibo.perl +15 -0
  108. data/sources/perl/fibo.perl-2.perl +0 -0
  109. data/sources/perl/fibo.perl-3.perl +0 -0
  110. data/sources/perl/harmonic.perl +7 -0
  111. data/sources/perl/hash.perl +23 -0
  112. data/sources/perl/hash.perl-2.perl +17 -0
  113. data/sources/perl/hash.perl-3.perl +24 -0
  114. data/sources/perl/hash2.perl +16 -0
  115. data/sources/perl/heapsort.perl +65 -0
  116. data/sources/perl/heapsort.perl-2.perl +0 -0
  117. data/sources/perl/hello.perl +5 -0
  118. data/sources/perl/knucleotide.perl-2.perl +30 -0
  119. data/sources/perl/lists.perl +48 -0
  120. data/sources/perl/mandelbrot.perl-2.perl +32 -0
  121. data/sources/perl/matrix.perl +59 -0
  122. data/sources/perl/matrix.perl-2.perl +0 -0
  123. data/sources/perl/matrix.perl-3.perl +0 -0
  124. data/sources/perl/message.perl +27 -0
  125. data/sources/perl/methcall.perl +66 -0
  126. data/sources/perl/moments.perl +44 -0
  127. data/sources/perl/nbody.perl +108 -0
  128. data/sources/perl/nestedloop.perl +28 -0
  129. data/sources/perl/nsieve.perl-2.perl +41 -0
  130. data/sources/perl/nsieve.perl-4.perl +43 -0
  131. data/sources/perl/nsievebits.perl +37 -0
  132. data/sources/perl/objinst.perl +73 -0
  133. data/sources/perl/partialsums.perl-3.perl +31 -0
  134. data/sources/perl/pidigits.perl +52 -0
  135. data/sources/perl/pidigits.perl-2.perl +47 -0
  136. data/sources/perl/process.perl +50 -0
  137. data/sources/perl/prodcons.perl +47 -0
  138. data/sources/perl/random.perl-4.perl +17 -0
  139. data/sources/perl/recursive.perl-2.perl +57 -0
  140. data/sources/perl/regexdna.perl +48 -0
  141. data/sources/perl/regexdna.perl-2.perl +43 -0
  142. data/sources/perl/regexdna.perl-3.perl +50 -0
  143. data/sources/perl/regexdna.perl-4.perl +49 -0
  144. data/sources/perl/regexdna.perl-5.perl +42 -0
  145. data/sources/perl/regexdna.perl-6.perl +43 -0
  146. data/sources/perl/regexmatch.perl +35 -0
  147. data/sources/perl/revcomp.perl-2.perl +34 -0
  148. data/sources/perl/reversefile.perl +8 -0
  149. data/sources/perl/reversefile.perl-2.perl +0 -0
  150. data/sources/perl/reversefile.perl-3.perl +0 -0
  151. data/sources/perl/sieve.perl +23 -0
  152. data/sources/perl/spectralnorm.perl-2.perl +54 -0
  153. data/sources/perl/spellcheck.perl +24 -0
  154. data/sources/perl/strcat.perl +13 -0
  155. data/sources/perl/strcat.perl-2.perl +0 -0
  156. data/sources/perl/sumcol.perl +8 -0
  157. data/sources/perl/takfp.perl +23 -0
  158. data/sources/perl/takfp.perl-3.perl +20 -0
  159. data/sources/perl/tcpecho.perl +61 -0
  160. data/sources/perl/tcprequest.perl +61 -0
  161. data/sources/perl/tcpstream.perl +61 -0
  162. data/sources/perl/threadring.perl +55 -0
  163. data/sources/perl/threadring.perl-2.perl +43 -0
  164. data/sources/perl/wc.perl +20 -0
  165. data/sources/perl/wc.perl-2.perl +14 -0
  166. data/sources/perl/wordfreq.perl +22 -0
  167. data/sources/perl/wordfreq.perl-3.perl +0 -0
  168. data/sources/perl/wordfreq.perl3.perl +0 -0
  169. data/sources/python/ackermann.python +21 -0
  170. data/sources/python/ary.python +19 -0
  171. data/sources/python/binarytrees.python +39 -0
  172. data/sources/python/binarytrees.python-3.python +44 -0
  173. data/sources/python/chameneos.python-6.python +73 -0
  174. data/sources/python/chameneosredux.python +126 -0
  175. data/sources/python/chameneosredux.python-2.python +122 -0
  176. data/sources/python/dispatch.python +176 -0
  177. data/sources/python/dispatch.python-2.python +136 -0
  178. data/sources/python/echo.python +64 -0
  179. data/sources/python/except.python +62 -0
  180. data/sources/python/fannkuch.python +50 -0
  181. data/sources/python/fannkuch.python-2.python +54 -0
  182. data/sources/python/fasta.python-2.python +79 -0
  183. data/sources/python/fibo.python +17 -0
  184. data/sources/python/fibo.python-2.python +0 -0
  185. data/sources/python/fibo.python-3.python +0 -0
  186. data/sources/python/harmonic.python-2.python +9 -0
  187. data/sources/python/hash.python +21 -0
  188. data/sources/python/hash.python-2.python +0 -0
  189. data/sources/python/hash2.python +30 -0
  190. data/sources/python/heapsort.python-3.python +66 -0
  191. data/sources/python/hello.python +5 -0
  192. data/sources/python/implicitode.python +231 -0
  193. data/sources/python/knucleotide.python +55 -0
  194. data/sources/python/lists.python +44 -0
  195. data/sources/python/magicsquares.python +145 -0
  196. data/sources/python/mandelbrot.python +44 -0
  197. data/sources/python/mandelbrot.python-2.python +35 -0
  198. data/sources/python/mandelbrot.python-3.python +46 -0
  199. data/sources/python/matrix.python +34 -0
  200. data/sources/python/matrix.python-2.python +23 -0
  201. data/sources/python/message.python +24 -0
  202. data/sources/python/message.python-2.python +20 -0
  203. data/sources/python/message.python-3.python +19 -0
  204. data/sources/python/meteor.python +210 -0
  205. data/sources/python/meteor.python-2.python +192 -0
  206. data/sources/python/methcall.python +51 -0
  207. data/sources/python/moments.python +65 -0
  208. data/sources/python/nbody.python +123 -0
  209. data/sources/python/nbody.python-2.python +120 -0
  210. data/sources/python/nestedloop.python +24 -0
  211. data/sources/python/nsieve.python +27 -0
  212. data/sources/python/nsieve.python-2.python +23 -0
  213. data/sources/python/nsieve.python-4.python +25 -0
  214. data/sources/python/nsievebits.python +27 -0
  215. data/sources/python/nsievebits.python-2.python +43 -0
  216. data/sources/python/objinst.python +53 -0
  217. data/sources/python/partialsums.python +37 -0
  218. data/sources/python/partialsums.python-2.python +35 -0
  219. data/sources/python/partialsums.python-3.python +48 -0
  220. data/sources/python/pidigits.python +38 -0
  221. data/sources/python/pidigits.python-3.python +63 -0
  222. data/sources/python/pidigits.python-4.python +24 -0
  223. data/sources/python/process.python +51 -0
  224. data/sources/python/process.python-2.python +133 -0
  225. data/sources/python/prodcons.python +51 -0
  226. data/sources/python/prodcons.python-2.python +0 -0
  227. data/sources/python/random.python +27 -0
  228. data/sources/python/raytracer.python +203 -0
  229. data/sources/python/recursive.python +35 -0
  230. data/sources/python/regexdna.python +39 -0
  231. data/sources/python/regexdna.python-2.python +34 -0
  232. data/sources/python/regexmatch.python +36 -0
  233. data/sources/python/revcomp.python-3.python +31 -0
  234. data/sources/python/reversefile.python +13 -0
  235. data/sources/python/reversefile.python-2.python +0 -0
  236. data/sources/python/reversefile.python-3.python +0 -0
  237. data/sources/python/sieve.python +50 -0
  238. data/sources/python/spectralnorm.python-2.python +36 -0
  239. data/sources/python/spellcheck.python +17 -0
  240. data/sources/python/strcat.python +35 -0
  241. data/sources/python/strcat.python-2.python +0 -0
  242. data/sources/python/sumcol.python-2.python +0 -0
  243. data/sources/python/sumcol.python-3.python +0 -0
  244. data/sources/python/takfp.python +19 -0
  245. data/sources/python/tcpecho.python +67 -0
  246. data/sources/python/tcprequest.python +67 -0
  247. data/sources/python/tcpstream.python +67 -0
  248. data/sources/python/threadring.python +47 -0
  249. data/sources/python/threadring.python-2.python +40 -0
  250. data/sources/python/threadring.python-3.python +34 -0
  251. data/sources/python/wc.python-2.python +19 -0
  252. data/sources/python/wordfreq.python +43 -0
  253. data/sources/python/wordfreq.python-2.python +0 -0
  254. data/sources/python/wordfreq.python-3.python +28 -0
  255. data/sources/python/wordfreq.python-4.python +38 -0
  256. data/sources/python/wordfreq.python-5.python +39 -0
  257. data/sources/ruby/ackermann.ruby +17 -0
  258. data/sources/ruby/ackermann.ruby-5.ruby +153 -0
  259. data/sources/ruby/ary.ruby +22 -0
  260. data/sources/ruby/binarytrees.ruby-2.ruby +55 -0
  261. data/sources/ruby/chameneos.ruby-2.ruby +71 -0
  262. data/sources/ruby/dispatch.ruby +114 -0
  263. data/sources/ruby/echo.ruby +41 -0
  264. data/sources/ruby/except.ruby +61 -0
  265. data/sources/ruby/except.ruby-2.ruby +61 -0
  266. data/sources/ruby/fannkuch.ruby +42 -0
  267. data/sources/ruby/fasta.ruby +81 -0
  268. data/sources/ruby/fibo.ruby +15 -0
  269. data/sources/ruby/harmonic.ruby-2.ruby +15 -0
  270. data/sources/ruby/hash.ruby +19 -0
  271. data/sources/ruby/hash2.ruby +23 -0
  272. data/sources/ruby/heapsort.ruby +55 -0
  273. data/sources/ruby/hello.ruby +6 -0
  274. data/sources/ruby/knucleotide.ruby-2.ruby +44 -0
  275. data/sources/ruby/lists.ruby +46 -0
  276. data/sources/ruby/mandelbrot.ruby-3.ruby +63 -0
  277. data/sources/ruby/matrix.ruby +40 -0
  278. data/sources/ruby/matrix.ruby-2.ruby +30 -0
  279. data/sources/ruby/message.ruby +29 -0
  280. data/sources/ruby/message.ruby-2.ruby +24 -0
  281. data/sources/ruby/meteor.ruby +386 -0
  282. data/sources/ruby/meteor.ruby-2.ruby +561 -0
  283. data/sources/ruby/methcall.ruby +58 -0
  284. data/sources/ruby/methcall.ruby-2.ruby +54 -0
  285. data/sources/ruby/moments.ruby +64 -0
  286. data/sources/ruby/nbody.ruby-2.ruby +145 -0
  287. data/sources/ruby/nestedloop.ruby +22 -0
  288. data/sources/ruby/nsieve.ruby +36 -0
  289. data/sources/ruby/nsieve.ruby-2.ruby +25 -0
  290. data/sources/ruby/nsievebits.ruby-2.ruby +42 -0
  291. data/sources/ruby/objinst.ruby +58 -0
  292. data/sources/ruby/partialsums.ruby +39 -0
  293. data/sources/ruby/pidigits.ruby +92 -0
  294. data/sources/ruby/pidigits.ruby-2.ruby +109 -0
  295. data/sources/ruby/prodcons.ruby +41 -0
  296. data/sources/ruby/random.ruby +17 -0
  297. data/sources/ruby/recursive.ruby-2.ruby +53 -0
  298. data/sources/ruby/regexdna.ruby +32 -0
  299. data/sources/ruby/regexdna.ruby-2.ruby +38 -0
  300. data/sources/ruby/regexmatch.ruby +33 -0
  301. data/sources/ruby/revcomp.ruby +28 -0
  302. data/sources/ruby/reversefile.ruby +7 -0
  303. data/sources/ruby/sieve.ruby +30 -0
  304. data/sources/ruby/spectralnorm.ruby +48 -0
  305. data/sources/ruby/spellcheck.ruby +18 -0
  306. data/sources/ruby/spellcheck.ruby-2.ruby +0 -0
  307. data/sources/ruby/strcat.ruby +12 -0
  308. data/sources/ruby/strcat.ruby-2.ruby +12 -0
  309. data/sources/ruby/sumcol.ruby +12 -0
  310. data/sources/ruby/sumcol.ruby-2.ruby +5 -0
  311. data/sources/ruby/takfp.ruby +15 -0
  312. data/sources/ruby/tcpecho.ruby +45 -0
  313. data/sources/ruby/tcprequest.ruby +45 -0
  314. data/sources/ruby/tcpstream.ruby +45 -0
  315. data/sources/ruby/threadring.ruby +61 -0
  316. data/sources/ruby/threadring.ruby-2.ruby +33 -0
  317. data/sources/ruby/wc.ruby +15 -0
  318. data/sources/ruby/wordfreq.ruby +17 -0
  319. data/sources/ruby/wordfreq.ruby2.ruby +0 -0
  320. data/test/fixtures/sources/gcc/ackermann.gcc-2.gcc +93 -0
  321. data/test/fixtures/sources/python/ackermann.python +21 -0
  322. data/test/fixtures/sources/ruby/ackermann.ruby +17 -0
  323. data/test/test_source_classifier.rb +40 -0
  324. data/test/test_trainer.rb +34 -0
  325. data/trainer.bin +1193 -0
  326. metadata +393 -0
@@ -0,0 +1,53 @@
1
+ #!/usr/bin/python
2
+ # http://www.bagley.org/~doug/shootout/
3
+
4
+ import sys
5
+
6
+ class Toggle:
7
+ def __init__(self, start_state):
8
+ self.bool = start_state
9
+ def value(self):
10
+ return(self.bool)
11
+ def activate(self):
12
+ self.bool = not self.bool
13
+ return(self)
14
+
15
+ class NthToggle(Toggle):
16
+ def __init__(self, start_state, max_counter):
17
+ Toggle.__init__(self, start_state)
18
+ self.count_max = max_counter
19
+ self.counter = 0
20
+ def activate(self):
21
+ self.counter += 1
22
+ if (self.counter >= self.count_max):
23
+ self.bool = not self.bool
24
+ self.counter = 0
25
+ return(self)
26
+
27
+
28
+ def main():
29
+ NUM = int(sys.argv[1])
30
+ if NUM < 1:
31
+ NUM = 1
32
+
33
+ toggle = Toggle(1)
34
+ for i in xrange(0,5):
35
+ if toggle.activate().value():
36
+ print "true"
37
+ else:
38
+ print "false"
39
+ for i in xrange(0,NUM):
40
+ toggle = Toggle(1)
41
+
42
+ print ""
43
+
44
+ ntoggle = NthToggle(1, 3)
45
+ for i in xrange(0,8):
46
+ if ntoggle.activate().value():
47
+ print "true"
48
+ else:
49
+ print "false"
50
+ for i in xrange(0,NUM):
51
+ ntoggle = NthToggle(1, 3)
52
+
53
+ main()
@@ -0,0 +1,37 @@
1
+ # The Computer Language Benchmarks Game
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # contributed by Josh Goldfoot
5
+ # modified by Mike Klaas
6
+ # modified by Dani Nanz 2007-08-28, also considering input from Tupteq
7
+
8
+ import sys
9
+ import math
10
+
11
+ def doit(n, sin=math.sin, cos=math.cos):
12
+
13
+ alt = -1.
14
+ twothirds = 2. / 3.
15
+ k = s0 = 1.
16
+ s1 = s2 = s3 = s4 = s5 = s6 = s7 = s8 = 0.
17
+ while k <= n:
18
+ k2 = k * k
19
+ k3 = k2 * k
20
+ ks, kc = sin(k), cos(k)
21
+ alt = -alt
22
+ s0 += twothirds ** k
23
+ s1 += k ** -.5
24
+ s2 += 1. / (k * (k + 1.))
25
+ s3 += 1. / (k3 * ks * ks)
26
+ s4 += 1. / (k3 * kc * kc)
27
+ s5 += 1. / k
28
+ s6 += 1. / k2
29
+ s7 += alt / k
30
+ s8 += alt / (k + k - 1.)
31
+ k += 1.
32
+ fmt = '\n%0.9f\t'
33
+ nms = ['(2/3)^k', 'k^-0.5', '1/k(k+1)', 'Flint Hills', 'Cookson Hills',
34
+ 'Harmonic', 'Riemann Zeta', 'Alternating Harmonic', 'Gregory']
35
+ print (fmt[1:] + fmt.join(nms)) % (s0, s1, s2, s3, s4, s5, s6, s7, s8)
36
+
37
+ doit(float(sys.argv[1]))
@@ -0,0 +1,35 @@
1
+ # The Computer Language Benchmarks Game
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # contributed by Daniel Nanz 2008-03-12
5
+
6
+
7
+ import sys
8
+ import numpy
9
+
10
+ def doit(n, np=numpy):
11
+
12
+ k = np.arange(1, n + 1)
13
+ alt = (2 * (k & 1)) - 1
14
+ k = np.double(k)
15
+ k2 = k * k
16
+ k3 = k * k2
17
+ kc = np.cos(k)
18
+ ks = np.sin(k)
19
+
20
+ sums = (((2. / 3.) ** k).sum() + 1.,
21
+ (k ** -.5).sum(),
22
+ (1. / (k * (k + 1.))).sum(),
23
+ (1. / (k3 * ks * ks)).sum(),
24
+ (1. / (k3 * kc * kc)).sum(),
25
+ (1. / k).sum(),
26
+ (1. / k2).sum(),
27
+ (alt / k).sum(),
28
+ (alt / (k + k - 1.)).sum())
29
+
30
+ fmt = '\n%0.9f\t'
31
+ nms = ['(2/3)^k', 'k^-0.5', '1/k(k+1)', 'Flint Hills', 'Cookson Hills',
32
+ 'Harmonic', 'Riemann Zeta', 'Alternating Harmonic', 'Gregory']
33
+ print (fmt[1:] + fmt.join(nms)) % sums
34
+
35
+ doit(int(sys.argv[1]))
@@ -0,0 +1,48 @@
1
+ # The Computer Language Shootout
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # contributed by Daniel Nanz 2008-03-18
5
+
6
+ import sys
7
+ import numpy
8
+
9
+ def doit(n, buf_size=50000, np=numpy):
10
+
11
+ n_low = 1
12
+ if buf_size <= n:
13
+ todo = buf_size
14
+ else:
15
+ todo = n
16
+ sums = np.zeros(9, dtype=np.double)
17
+ sums[0] += 1.
18
+ while todo > 0:
19
+ n_high = n_low + todo
20
+ k = np.arange(n_low, n_high, dtype=np.int8)
21
+ alt = (2 * (k & 1)) - 1
22
+ k = np.arange(n_low, n_high, dtype=np.double)
23
+ k2 = k * k
24
+ k3 = k * k2
25
+ ks = np.sin(k)
26
+ kc = np.cos(k)
27
+ sums += map(np.sum,
28
+ ((2. / 3.) ** k,
29
+ k ** -.5,
30
+ 1. / (k * (k + 1.)),
31
+ 1. / (k3 * ks * ks),
32
+ 1. / (k3 * kc * kc),
33
+ 1. / k,
34
+ 1. / k2,
35
+ alt / k,
36
+ alt / (k + k - 1.)))
37
+ n_low = n_high
38
+ if (n - buf_size) > n_low:
39
+ todo = buf_size
40
+ else:
41
+ todo = n - n_low + 1
42
+
43
+ fmt = '\n%0.9f\t'
44
+ nms = ['(2/3)^k', 'k^-0.5', '1/k(k+1)', 'Flint Hills', 'Cookson Hills',
45
+ 'Harmonic', 'Riemann Zeta', 'Alternating Harmonic', 'Gregory']
46
+ print (fmt[1:] + fmt.join(nms)) % tuple(sums)
47
+
48
+ doit(int(sys.argv[1]))
@@ -0,0 +1,38 @@
1
+
2
+ import sys
3
+ from itertools import *
4
+
5
+ def gen_x():
6
+ return imap(lambda k: (k, 4*k + 2, 0, 2*k + 1), count(1))
7
+
8
+ def compose((aq, ar, as_, at), (bq, br, bs, bt)):
9
+ return (aq * bq,
10
+ aq * br + ar * bt,
11
+ as_ * bq + at * bs,
12
+ as_ * br + at * bt)
13
+
14
+ def extract((q, r, s, t), j):
15
+ return (q*j + r) // (s*j + t)
16
+
17
+ def pi_digits():
18
+ z = (1, 0, 0, 1)
19
+ x = gen_x()
20
+ while 1:
21
+ y = extract(z, 3)
22
+ while y != extract(z, 4):
23
+ z = compose(z, x.next())
24
+ y = extract(z, 3)
25
+ z = compose((10, -10*y, 0, 1), z)
26
+ yield y
27
+
28
+ def main():
29
+ n = int(sys.argv[1])
30
+ digits = pi_digits()
31
+ width = 10
32
+ for i in xrange(width, n+1, width):
33
+ print "%s\t:%d" % ("".join(imap(str, islice(digits, width))), i)
34
+ if n % width > 0:
35
+ print "%s\t:%d" % ("".join(imap(str, islice(digits, n % width))).ljust(width), n)
36
+
37
+
38
+ main()
@@ -0,0 +1,63 @@
1
+ # The Computer Language Benchmarks Game
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # contributed by - not known -
5
+ # modified by Pilho Kim (first GMP version)
6
+ # modified by Dani Nanz (2007-09-14)
7
+
8
+ import sys
9
+ import itertools
10
+ import gmpy
11
+
12
+
13
+ mpz0, mpz1 = gmpy.mpz(0), gmpy.mpz(1)
14
+ mpz2, mpz3 = gmpy.mpz(2), gmpy.mpz(3)
15
+ mpz4, mpz10 = gmpy.mpz(4), gmpy.mpz(10)
16
+
17
+
18
+ def gen_x(k=mpz0):
19
+
20
+ while 1:
21
+ k += mpz1
22
+ yield (k, mpz4 * k + mpz2, mpz0, mpz2 * k + mpz1)
23
+
24
+
25
+ def compose((a, b, c, d), (e, f, g, h)):
26
+
27
+ return (a * e,
28
+ a * f + b * h,
29
+ c * e + d * g,
30
+ c * f + d * h)
31
+
32
+
33
+ def extract((a, b, c, d), j):
34
+ return (a * j + b) // (c * j + d)
35
+
36
+
37
+ def pi_digits():
38
+
39
+ z = (mpz1, mpz0, mpz0, mpz1)
40
+ x = gen_x()
41
+ while 1:
42
+ y = extract(z, mpz3)
43
+ while y != extract(z, mpz4):
44
+ z = compose(z, x.next())
45
+ y = extract(z, mpz3)
46
+ z = compose((mpz10, -mpz10 * y, mpz0, mpz1), z)
47
+ yield str(y)
48
+
49
+
50
+ def main(islice=itertools.islice):
51
+
52
+ n = int(sys.argv[1])
53
+ digits = pi_digits()
54
+ w = 10
55
+ out = []
56
+ for i in xrange(w, n+1, w):
57
+ out.extend([''.join(islice(digits, w)), i])
58
+ print ('%s\t:%d\n' * (len(out) / 2)) % tuple(out),
59
+ if n % w > 0:
60
+ print "%s\t:%d" % (''.join(islice(digits, n % w)).ljust(w), n)
61
+
62
+
63
+ main()
@@ -0,0 +1,24 @@
1
+ # The Computer Language Benchmarks Game
2
+ # http://shootout.alioth.debian.org/
3
+ #
4
+ # contributed by Dani Nanz (2007-09-21)
5
+
6
+ import sys
7
+ import gmpy
8
+
9
+ def main(n):
10
+
11
+ pi = str(gmpy.pi(int(3.35 * n)))
12
+ pi_tmp = ''.join([pi[0], pi[2:]])
13
+ pistr = pi_tmp[0 : n]
14
+ w = 10
15
+ out = []
16
+ for i in xrange(0, n - w + 1, w):
17
+ out.extend([pistr[i : i + w] , i + w])
18
+ print ('%s\t:%d\n' * (len(out) / 2)) % tuple(out),
19
+ if n % w > 0:
20
+ print "%s\t:%d" % ((pistr[-(n % w):]).ljust(w), n)
21
+
22
+
23
+ main(int(sys.argv[1]))
24
+
@@ -0,0 +1,51 @@
1
+ #!/usr/bin/python -OO
2
+ # The Computer Language Shootout Benchmarks
3
+ # http://shootout.alioth.debian.org/
4
+ #
5
+ # contributed by Kevin Carson
6
+
7
+ from threading import Thread
8
+ from Queue import Queue
9
+ from sys import argv
10
+
11
+
12
+ class link(Thread) :
13
+ def __init__(self, next) :
14
+ Thread.__init__(self)
15
+ self.next = next
16
+ self.inq = Queue(1)
17
+
18
+ def run(self) :
19
+ self.store = self.inq.get()
20
+ self.next.inq.put(self.store + 1)
21
+
22
+
23
+ class terminus(Thread) :
24
+ def __init__(self) :
25
+ Thread.__init__(self)
26
+ self.inq = Queue(1)
27
+
28
+ def run(self) :
29
+ self.sum = self.inq.get()
30
+ print "%d" % self.sum
31
+
32
+
33
+ N = int(argv[1])
34
+
35
+ # Create the chain of threads then fire them up
36
+ chain_length = N + 1
37
+ tasks = [None] * chain_length
38
+ tasks[N] = terminus()
39
+ tasks[N - 1] = link(tasks[N])
40
+
41
+ for i in xrange(N - 2, -1, -1) :
42
+ tasks[i] = link(tasks[i + 1])
43
+
44
+ for i in xrange(chain_length) :
45
+ tasks[i].start()
46
+
47
+ # Feed the chain with an integer message
48
+ tasks[0].inq.put(0)
49
+
50
+ # Wait upon the terminus process
51
+ tasks[N].join()
@@ -0,0 +1,133 @@
1
+ #!/usr/bin/python -OO
2
+ # The Computer Language Shootout Benchmarks
3
+ # http://shootout.alioth.debian.org/
4
+ #
5
+ # contributed by Antoine Pitrou
6
+
7
+ import sys
8
+
9
+ #
10
+ # A very simple cooperative threads package using generators,
11
+ #
12
+
13
+ def singleton(cls):
14
+ instance = []
15
+ def wrapper(*args, **kargs):
16
+ if not instance:
17
+ instance.append(cls(*args, **kargs))
18
+ return instance[0]
19
+ return wrapper
20
+
21
+ class WaitObject(object):
22
+ def __init__(self, switcher=None):
23
+ self.switcher = switcher or global_switcher()
24
+ self.waiters = []
25
+
26
+ def get_waiter(self):
27
+ try:
28
+ return self.waiters.pop()
29
+ except IndexError:
30
+ return None
31
+
32
+ def add_waiter(self, waiter):
33
+ self.waiters.append(waiter)
34
+
35
+ def set_ready(self, ready):
36
+ self.switcher.set_ready(self, ready)
37
+
38
+ class Queue(WaitObject):
39
+ def __init__(self):
40
+ WaitObject.__init__(self)
41
+ self.data = []
42
+
43
+ def put(self, value):
44
+ self.data.append(value)
45
+ self.set_ready(True)
46
+
47
+ def get(self):
48
+ self.set_ready(len(self.data) > 1)
49
+ return self.data.pop(0)
50
+
51
+ class _Ready(WaitObject):
52
+ def __init__(self):
53
+ WaitObject.__init__(self)
54
+ self.set_ready(True)
55
+
56
+ # Special-casing Ready as a singleton is important for scalability
57
+ Ready = singleton(_Ready)
58
+
59
+ class Thread(object):
60
+ def __init__(self, switcher=None):
61
+ self.switcher = switcher or global_switcher()
62
+ self.switcher.add_thread(self)
63
+
64
+ class Switcher(object):
65
+ def __init__(self):
66
+ self.threads = set()
67
+ self.ready_objects = set()
68
+
69
+ def add_thread(self, thread):
70
+ Ready().add_waiter(thread)
71
+ thread.runner = thread.run()
72
+ self.threads.add(thread)
73
+
74
+ def set_ready(self, wait_object, ready):
75
+ if ready:
76
+ self.ready_objects.add(wait_object)
77
+ else:
78
+ self.ready_objects.discard(wait_object)
79
+
80
+ def run(self):
81
+ while len(self.threads):
82
+ for r in self.ready_objects:
83
+ thread = r.get_waiter()
84
+ if not thread or not thread.runner:
85
+ continue
86
+ try:
87
+ wait_object = thread.runner.next()
88
+ except StopIteration:
89
+ thread.runner = None
90
+ self.threads.remove(thread)
91
+ else:
92
+ wait_object.add_waiter(thread)
93
+ break
94
+
95
+ global_switcher = singleton(Switcher)
96
+
97
+ #
98
+ # Here the problem-specific definitions
99
+ #
100
+
101
+ class Link(Thread):
102
+ def __init__(self, next):
103
+ Thread.__init__(self)
104
+ self.next = next
105
+ self.incoming = Queue()
106
+
107
+ def run(self):
108
+ yield self.incoming
109
+ self.store = self.incoming.get()
110
+ self.next.incoming.put(self.store + 1)
111
+
112
+ class Terminus(Thread):
113
+ def __init__(self):
114
+ Thread.__init__(self)
115
+ self.incoming = Queue()
116
+
117
+ def run(self):
118
+ yield self.incoming
119
+ self.sum = self.incoming.get()
120
+ print "%d" % self.sum
121
+
122
+ def main():
123
+ N = int(sys.argv[1])
124
+
125
+ # Create the chain of threads then run them all
126
+ task = Terminus()
127
+ for i in xrange(N):
128
+ task = Link(task)
129
+ task.incoming.put(0)
130
+
131
+ global_switcher().run()
132
+
133
+ main()