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.
- data/Manifest +325 -0
- data/README.textile +51 -0
- data/Rakefile +64 -0
- data/examples/example.rb +22 -0
- data/lib/sourceclassifier.rb +22 -0
- data/lib/trainer.rb +51 -0
- data/sourceclassifier.gemspec +35 -0
- data/sources/gcc/ackermann.gcc-2.gcc +93 -0
- data/sources/gcc/ackermann.gcc-3.gcc +20 -0
- data/sources/gcc/ary.gcc +40 -0
- data/sources/gcc/binarytrees.gcc +136 -0
- data/sources/gcc/binarytrees.gcc-2.gcc +140 -0
- data/sources/gcc/binarytrees.gcc-3.gcc +134 -0
- data/sources/gcc/chameneos.gcc +117 -0
- data/sources/gcc/chameneos.gcc-2.gcc +134 -0
- data/sources/gcc/chameneos.gcc-3.gcc +120 -0
- data/sources/gcc/chameneosredux.gcc +306 -0
- data/sources/gcc/echo.gcc +144 -0
- data/sources/gcc/except.gcc +52 -0
- data/sources/gcc/fannkuch.gcc +105 -0
- data/sources/gcc/fannkuch.gcc-2.gcc +94 -0
- data/sources/gcc/fasta.gcc +158 -0
- data/sources/gcc/fasta.gcc-2.gcc +132 -0
- data/sources/gcc/fasta.gcc-3.gcc +145 -0
- data/sources/gcc/fasta.gcc-4.gcc +141 -0
- data/sources/gcc/fibo.gcc +20 -0
- data/sources/gcc/harmonic.gcc +22 -0
- data/sources/gcc/hash.gcc +31 -0
- data/sources/gcc/hash2.gcc +38 -0
- data/sources/gcc/heapsort.gcc +72 -0
- data/sources/gcc/hello.gcc-2.gcc +12 -0
- data/sources/gcc/hello.gcc-3.gcc +20 -0
- data/sources/gcc/knucleotide.gcc +173 -0
- data/sources/gcc/knucleotide.gcc-2.gcc +168 -0
- data/sources/gcc/lists.gcc +226 -0
- data/sources/gcc/magicsquares.gcc +378 -0
- data/sources/gcc/mandelbrot.gcc +84 -0
- data/sources/gcc/mandelbrot.gcc-2.gcc +63 -0
- data/sources/gcc/mandelbrot.gcc-3.gcc +91 -0
- data/sources/gcc/mandelbrot.gcc-4.gcc +78 -0
- data/sources/gcc/matrix.gcc +66 -0
- data/sources/gcc/message.gcc-2.gcc +72 -0
- data/sources/gcc/message.gcc-3.gcc +64 -0
- data/sources/gcc/methcall.gcc +89 -0
- data/sources/gcc/moments.gcc +120 -0
- data/sources/gcc/nbody.gcc +142 -0
- data/sources/gcc/nbody.gcc-2.gcc +143 -0
- data/sources/gcc/nbody.gcc-3.gcc +142 -0
- data/sources/gcc/nestedloop.gcc +25 -0
- data/sources/gcc/nsieve.gcc +35 -0
- data/sources/gcc/nsievebits.gcc-2.gcc +37 -0
- data/sources/gcc/nsievebits.gcc-3.gcc +53 -0
- data/sources/gcc/objinst.gcc +95 -0
- data/sources/gcc/partialsums.gcc +86 -0
- data/sources/gcc/partialsums.gcc-3.gcc +81 -0
- data/sources/gcc/partialsums.gcc-4.gcc +68 -0
- data/sources/gcc/pidigits.gcc +105 -0
- data/sources/gcc/primes.gcc +75 -0
- data/sources/gcc/prodcons.gcc +86 -0
- data/sources/gcc/random.gcc +29 -0
- data/sources/gcc/raytracer.gcc +125 -0
- data/sources/gcc/raytracer.gcc-2.gcc +181 -0
- data/sources/gcc/recursive.gcc +68 -0
- data/sources/gcc/recursive.gcc-2.gcc +55 -0
- data/sources/gcc/regexdna.gcc-2.gcc +126 -0
- data/sources/gcc/regexmatch.gcc +136 -0
- data/sources/gcc/revcomp.gcc +85 -0
- data/sources/gcc/revcomp.gcc-2.gcc +88 -0
- data/sources/gcc/revcomp.gcc-4.gcc +71 -0
- data/sources/gcc/reversefile.gcc +103 -0
- data/sources/gcc/reversefile.gcc-2.gcc +56 -0
- data/sources/gcc/sieve.gcc +34 -0
- data/sources/gcc/spectralnorm.gcc +54 -0
- data/sources/gcc/spellcheck.gcc +72 -0
- data/sources/gcc/spellcheck.gcc-2.gcc +61 -0
- data/sources/gcc/strcat.gcc +38 -0
- data/sources/gcc/sumcol.gcc-2.gcc +98 -0
- data/sources/gcc/sumcol.gcc-3.gcc +22 -0
- data/sources/gcc/sumcol.gcc-4.gcc +18 -0
- data/sources/gcc/sumcol.gcc-5.gcc +32 -0
- data/sources/gcc/takfp.gcc +23 -0
- data/sources/gcc/tcp-stream.gcc +122 -0
- data/sources/gcc/tcpecho.gcc +122 -0
- data/sources/gcc/tcpecho.gcc-2.gcc +136 -0
- data/sources/gcc/tcprequest.gcc +122 -0
- data/sources/gcc/threadring.gcc +73 -0
- data/sources/gcc/wc.gcc +52 -0
- data/sources/gcc/wc.gcc-2.gcc +40 -0
- data/sources/gcc/wc.gcc-3.gcc +46 -0
- data/sources/gcc/wordfreq.gcc-2.gcc +85 -0
- data/sources/perl/ackermann.perl +28 -0
- data/sources/perl/ackermann.perl-2.perl +25 -0
- data/sources/perl/ackermann.perl-3.perl +20 -0
- data/sources/perl/ackermann.perl-4.perl +18 -0
- data/sources/perl/ary.perl +25 -0
- data/sources/perl/ary.perl-2.perl +23 -0
- data/sources/perl/binarytrees.perl +66 -0
- data/sources/perl/binarytrees.perl-2.perl +71 -0
- data/sources/perl/chameneos.perl +67 -0
- data/sources/perl/echo.perl +81 -0
- data/sources/perl/except.perl +73 -0
- data/sources/perl/fannkuch.perl +44 -0
- data/sources/perl/fannkuch.perl-2.perl +38 -0
- data/sources/perl/fasta.perl +112 -0
- data/sources/perl/fasta.perl-2.perl +135 -0
- data/sources/perl/fasta.perl-4.perl +122 -0
- data/sources/perl/fibo.perl +15 -0
- data/sources/perl/fibo.perl-2.perl +0 -0
- data/sources/perl/fibo.perl-3.perl +0 -0
- data/sources/perl/harmonic.perl +7 -0
- data/sources/perl/hash.perl +23 -0
- data/sources/perl/hash.perl-2.perl +17 -0
- data/sources/perl/hash.perl-3.perl +24 -0
- data/sources/perl/hash2.perl +16 -0
- data/sources/perl/heapsort.perl +65 -0
- data/sources/perl/heapsort.perl-2.perl +0 -0
- data/sources/perl/hello.perl +5 -0
- data/sources/perl/knucleotide.perl-2.perl +30 -0
- data/sources/perl/lists.perl +48 -0
- data/sources/perl/mandelbrot.perl-2.perl +32 -0
- data/sources/perl/matrix.perl +59 -0
- data/sources/perl/matrix.perl-2.perl +0 -0
- data/sources/perl/matrix.perl-3.perl +0 -0
- data/sources/perl/message.perl +27 -0
- data/sources/perl/methcall.perl +66 -0
- data/sources/perl/moments.perl +44 -0
- data/sources/perl/nbody.perl +108 -0
- data/sources/perl/nestedloop.perl +28 -0
- data/sources/perl/nsieve.perl-2.perl +41 -0
- data/sources/perl/nsieve.perl-4.perl +43 -0
- data/sources/perl/nsievebits.perl +37 -0
- data/sources/perl/objinst.perl +73 -0
- data/sources/perl/partialsums.perl-3.perl +31 -0
- data/sources/perl/pidigits.perl +52 -0
- data/sources/perl/pidigits.perl-2.perl +47 -0
- data/sources/perl/process.perl +50 -0
- data/sources/perl/prodcons.perl +47 -0
- data/sources/perl/random.perl-4.perl +17 -0
- data/sources/perl/recursive.perl-2.perl +57 -0
- data/sources/perl/regexdna.perl +48 -0
- data/sources/perl/regexdna.perl-2.perl +43 -0
- data/sources/perl/regexdna.perl-3.perl +50 -0
- data/sources/perl/regexdna.perl-4.perl +49 -0
- data/sources/perl/regexdna.perl-5.perl +42 -0
- data/sources/perl/regexdna.perl-6.perl +43 -0
- data/sources/perl/regexmatch.perl +35 -0
- data/sources/perl/revcomp.perl-2.perl +34 -0
- data/sources/perl/reversefile.perl +8 -0
- data/sources/perl/reversefile.perl-2.perl +0 -0
- data/sources/perl/reversefile.perl-3.perl +0 -0
- data/sources/perl/sieve.perl +23 -0
- data/sources/perl/spectralnorm.perl-2.perl +54 -0
- data/sources/perl/spellcheck.perl +24 -0
- data/sources/perl/strcat.perl +13 -0
- data/sources/perl/strcat.perl-2.perl +0 -0
- data/sources/perl/sumcol.perl +8 -0
- data/sources/perl/takfp.perl +23 -0
- data/sources/perl/takfp.perl-3.perl +20 -0
- data/sources/perl/tcpecho.perl +61 -0
- data/sources/perl/tcprequest.perl +61 -0
- data/sources/perl/tcpstream.perl +61 -0
- data/sources/perl/threadring.perl +55 -0
- data/sources/perl/threadring.perl-2.perl +43 -0
- data/sources/perl/wc.perl +20 -0
- data/sources/perl/wc.perl-2.perl +14 -0
- data/sources/perl/wordfreq.perl +22 -0
- data/sources/perl/wordfreq.perl-3.perl +0 -0
- data/sources/perl/wordfreq.perl3.perl +0 -0
- data/sources/python/ackermann.python +21 -0
- data/sources/python/ary.python +19 -0
- data/sources/python/binarytrees.python +39 -0
- data/sources/python/binarytrees.python-3.python +44 -0
- data/sources/python/chameneos.python-6.python +73 -0
- data/sources/python/chameneosredux.python +126 -0
- data/sources/python/chameneosredux.python-2.python +122 -0
- data/sources/python/dispatch.python +176 -0
- data/sources/python/dispatch.python-2.python +136 -0
- data/sources/python/echo.python +64 -0
- data/sources/python/except.python +62 -0
- data/sources/python/fannkuch.python +50 -0
- data/sources/python/fannkuch.python-2.python +54 -0
- data/sources/python/fasta.python-2.python +79 -0
- data/sources/python/fibo.python +17 -0
- data/sources/python/fibo.python-2.python +0 -0
- data/sources/python/fibo.python-3.python +0 -0
- data/sources/python/harmonic.python-2.python +9 -0
- data/sources/python/hash.python +21 -0
- data/sources/python/hash.python-2.python +0 -0
- data/sources/python/hash2.python +30 -0
- data/sources/python/heapsort.python-3.python +66 -0
- data/sources/python/hello.python +5 -0
- data/sources/python/implicitode.python +231 -0
- data/sources/python/knucleotide.python +55 -0
- data/sources/python/lists.python +44 -0
- data/sources/python/magicsquares.python +145 -0
- data/sources/python/mandelbrot.python +44 -0
- data/sources/python/mandelbrot.python-2.python +35 -0
- data/sources/python/mandelbrot.python-3.python +46 -0
- data/sources/python/matrix.python +34 -0
- data/sources/python/matrix.python-2.python +23 -0
- data/sources/python/message.python +24 -0
- data/sources/python/message.python-2.python +20 -0
- data/sources/python/message.python-3.python +19 -0
- data/sources/python/meteor.python +210 -0
- data/sources/python/meteor.python-2.python +192 -0
- data/sources/python/methcall.python +51 -0
- data/sources/python/moments.python +65 -0
- data/sources/python/nbody.python +123 -0
- data/sources/python/nbody.python-2.python +120 -0
- data/sources/python/nestedloop.python +24 -0
- data/sources/python/nsieve.python +27 -0
- data/sources/python/nsieve.python-2.python +23 -0
- data/sources/python/nsieve.python-4.python +25 -0
- data/sources/python/nsievebits.python +27 -0
- data/sources/python/nsievebits.python-2.python +43 -0
- data/sources/python/objinst.python +53 -0
- data/sources/python/partialsums.python +37 -0
- data/sources/python/partialsums.python-2.python +35 -0
- data/sources/python/partialsums.python-3.python +48 -0
- data/sources/python/pidigits.python +38 -0
- data/sources/python/pidigits.python-3.python +63 -0
- data/sources/python/pidigits.python-4.python +24 -0
- data/sources/python/process.python +51 -0
- data/sources/python/process.python-2.python +133 -0
- data/sources/python/prodcons.python +51 -0
- data/sources/python/prodcons.python-2.python +0 -0
- data/sources/python/random.python +27 -0
- data/sources/python/raytracer.python +203 -0
- data/sources/python/recursive.python +35 -0
- data/sources/python/regexdna.python +39 -0
- data/sources/python/regexdna.python-2.python +34 -0
- data/sources/python/regexmatch.python +36 -0
- data/sources/python/revcomp.python-3.python +31 -0
- data/sources/python/reversefile.python +13 -0
- data/sources/python/reversefile.python-2.python +0 -0
- data/sources/python/reversefile.python-3.python +0 -0
- data/sources/python/sieve.python +50 -0
- data/sources/python/spectralnorm.python-2.python +36 -0
- data/sources/python/spellcheck.python +17 -0
- data/sources/python/strcat.python +35 -0
- data/sources/python/strcat.python-2.python +0 -0
- data/sources/python/sumcol.python-2.python +0 -0
- data/sources/python/sumcol.python-3.python +0 -0
- data/sources/python/takfp.python +19 -0
- data/sources/python/tcpecho.python +67 -0
- data/sources/python/tcprequest.python +67 -0
- data/sources/python/tcpstream.python +67 -0
- data/sources/python/threadring.python +47 -0
- data/sources/python/threadring.python-2.python +40 -0
- data/sources/python/threadring.python-3.python +34 -0
- data/sources/python/wc.python-2.python +19 -0
- data/sources/python/wordfreq.python +43 -0
- data/sources/python/wordfreq.python-2.python +0 -0
- data/sources/python/wordfreq.python-3.python +28 -0
- data/sources/python/wordfreq.python-4.python +38 -0
- data/sources/python/wordfreq.python-5.python +39 -0
- data/sources/ruby/ackermann.ruby +17 -0
- data/sources/ruby/ackermann.ruby-5.ruby +153 -0
- data/sources/ruby/ary.ruby +22 -0
- data/sources/ruby/binarytrees.ruby-2.ruby +55 -0
- data/sources/ruby/chameneos.ruby-2.ruby +71 -0
- data/sources/ruby/dispatch.ruby +114 -0
- data/sources/ruby/echo.ruby +41 -0
- data/sources/ruby/except.ruby +61 -0
- data/sources/ruby/except.ruby-2.ruby +61 -0
- data/sources/ruby/fannkuch.ruby +42 -0
- data/sources/ruby/fasta.ruby +81 -0
- data/sources/ruby/fibo.ruby +15 -0
- data/sources/ruby/harmonic.ruby-2.ruby +15 -0
- data/sources/ruby/hash.ruby +19 -0
- data/sources/ruby/hash2.ruby +23 -0
- data/sources/ruby/heapsort.ruby +55 -0
- data/sources/ruby/hello.ruby +6 -0
- data/sources/ruby/knucleotide.ruby-2.ruby +44 -0
- data/sources/ruby/lists.ruby +46 -0
- data/sources/ruby/mandelbrot.ruby-3.ruby +63 -0
- data/sources/ruby/matrix.ruby +40 -0
- data/sources/ruby/matrix.ruby-2.ruby +30 -0
- data/sources/ruby/message.ruby +29 -0
- data/sources/ruby/message.ruby-2.ruby +24 -0
- data/sources/ruby/meteor.ruby +386 -0
- data/sources/ruby/meteor.ruby-2.ruby +561 -0
- data/sources/ruby/methcall.ruby +58 -0
- data/sources/ruby/methcall.ruby-2.ruby +54 -0
- data/sources/ruby/moments.ruby +64 -0
- data/sources/ruby/nbody.ruby-2.ruby +145 -0
- data/sources/ruby/nestedloop.ruby +22 -0
- data/sources/ruby/nsieve.ruby +36 -0
- data/sources/ruby/nsieve.ruby-2.ruby +25 -0
- data/sources/ruby/nsievebits.ruby-2.ruby +42 -0
- data/sources/ruby/objinst.ruby +58 -0
- data/sources/ruby/partialsums.ruby +39 -0
- data/sources/ruby/pidigits.ruby +92 -0
- data/sources/ruby/pidigits.ruby-2.ruby +109 -0
- data/sources/ruby/prodcons.ruby +41 -0
- data/sources/ruby/random.ruby +17 -0
- data/sources/ruby/recursive.ruby-2.ruby +53 -0
- data/sources/ruby/regexdna.ruby +32 -0
- data/sources/ruby/regexdna.ruby-2.ruby +38 -0
- data/sources/ruby/regexmatch.ruby +33 -0
- data/sources/ruby/revcomp.ruby +28 -0
- data/sources/ruby/reversefile.ruby +7 -0
- data/sources/ruby/sieve.ruby +30 -0
- data/sources/ruby/spectralnorm.ruby +48 -0
- data/sources/ruby/spellcheck.ruby +18 -0
- data/sources/ruby/spellcheck.ruby-2.ruby +0 -0
- data/sources/ruby/strcat.ruby +12 -0
- data/sources/ruby/strcat.ruby-2.ruby +12 -0
- data/sources/ruby/sumcol.ruby +12 -0
- data/sources/ruby/sumcol.ruby-2.ruby +5 -0
- data/sources/ruby/takfp.ruby +15 -0
- data/sources/ruby/tcpecho.ruby +45 -0
- data/sources/ruby/tcprequest.ruby +45 -0
- data/sources/ruby/tcpstream.ruby +45 -0
- data/sources/ruby/threadring.ruby +61 -0
- data/sources/ruby/threadring.ruby-2.ruby +33 -0
- data/sources/ruby/wc.ruby +15 -0
- data/sources/ruby/wordfreq.ruby +17 -0
- data/sources/ruby/wordfreq.ruby2.ruby +0 -0
- data/test/fixtures/sources/gcc/ackermann.gcc-2.gcc +93 -0
- data/test/fixtures/sources/python/ackermann.python +21 -0
- data/test/fixtures/sources/ruby/ackermann.ruby +17 -0
- data/test/test_source_classifier.rb +40 -0
- data/test/test_trainer.rb +34 -0
- data/trainer.bin +1193 -0
- metadata +393 -0
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
# http://www.bagley.org/~doug/shootout/
|
|
3
|
+
|
|
4
|
+
import sys
|
|
5
|
+
|
|
6
|
+
HI = 0
|
|
7
|
+
LO = 0
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
class Hi_exception:
|
|
11
|
+
def __init__(self, value):
|
|
12
|
+
self.value = value
|
|
13
|
+
def __str__(self):
|
|
14
|
+
return `self.value`
|
|
15
|
+
|
|
16
|
+
|
|
17
|
+
class Lo_exception:
|
|
18
|
+
def __init__(self, value):
|
|
19
|
+
self.value = value
|
|
20
|
+
def __str__(self):
|
|
21
|
+
return `self.value`
|
|
22
|
+
|
|
23
|
+
|
|
24
|
+
def some_function(num):
|
|
25
|
+
try:
|
|
26
|
+
hi_function(num)
|
|
27
|
+
except:
|
|
28
|
+
raise "We shouldn't get here (%s)" % sys.exc_info()[0]
|
|
29
|
+
|
|
30
|
+
|
|
31
|
+
def hi_function(num):
|
|
32
|
+
global HI
|
|
33
|
+
try:
|
|
34
|
+
lo_function(num)
|
|
35
|
+
except Hi_exception, ex:
|
|
36
|
+
HI += 1
|
|
37
|
+
#print 'Hi_exception occurred, value:', ex.value
|
|
38
|
+
|
|
39
|
+
|
|
40
|
+
def lo_function(num):
|
|
41
|
+
global LO
|
|
42
|
+
try:
|
|
43
|
+
blowup(num)
|
|
44
|
+
except Lo_exception, ex:
|
|
45
|
+
LO += 1
|
|
46
|
+
#print 'Lo_exception occurred, value:', ex.value
|
|
47
|
+
|
|
48
|
+
|
|
49
|
+
def blowup(num):
|
|
50
|
+
raise (((num & 1) and Lo_exception) or Hi_exception)(num)
|
|
51
|
+
|
|
52
|
+
def main():
|
|
53
|
+
global LO, HI
|
|
54
|
+
NUM = int(sys.argv[1])
|
|
55
|
+
if NUM < 1:
|
|
56
|
+
NUM = 1
|
|
57
|
+
for i in xrange(NUM-1,-1,-1):
|
|
58
|
+
some_function(i)
|
|
59
|
+
print "Exceptions: HI=%d / LO=%d" % (HI, LO)
|
|
60
|
+
|
|
61
|
+
|
|
62
|
+
main()
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# The Computer Language Shootout
|
|
2
|
+
# http://shootout.alioth.debian.org/
|
|
3
|
+
#
|
|
4
|
+
# Contributed by Sokolov Yura
|
|
5
|
+
|
|
6
|
+
from sys import argv
|
|
7
|
+
def fannkuch(n):
|
|
8
|
+
count = range(1,n+1)
|
|
9
|
+
maxFlipsCount, m, r, check = 0, n-1, n, 0
|
|
10
|
+
|
|
11
|
+
perm1 = range(n)
|
|
12
|
+
perm = range(n)
|
|
13
|
+
perm1_ins = perm1.insert
|
|
14
|
+
perm1_pop = perm1.pop
|
|
15
|
+
while True:
|
|
16
|
+
if check < 30:
|
|
17
|
+
print "".join(`i+1` for i in perm1)
|
|
18
|
+
check += 1;
|
|
19
|
+
|
|
20
|
+
while r != 1:
|
|
21
|
+
count[r-1] = r
|
|
22
|
+
r -= 1
|
|
23
|
+
|
|
24
|
+
if perm1[0] != 0 and perm1[m] != m:
|
|
25
|
+
perm[:]=perm1
|
|
26
|
+
flipsCount = 0
|
|
27
|
+
k = perm[0]
|
|
28
|
+
while k:
|
|
29
|
+
perm[:k+1] = perm[k::-1]
|
|
30
|
+
flipsCount += 1
|
|
31
|
+
k = perm[0]
|
|
32
|
+
|
|
33
|
+
if flipsCount > maxFlipsCount:
|
|
34
|
+
maxFlipsCount = flipsCount
|
|
35
|
+
maxPerm = list(perm1)
|
|
36
|
+
|
|
37
|
+
while True:
|
|
38
|
+
if r == n: return maxFlipsCount
|
|
39
|
+
perm1_ins(r,perm1_pop(0))
|
|
40
|
+
count[r] -= 1
|
|
41
|
+
if count[r] > 0: break
|
|
42
|
+
r += 1
|
|
43
|
+
|
|
44
|
+
def main():
|
|
45
|
+
n = int(argv and argv[1] or 1)
|
|
46
|
+
print "Pfannkuchen(%d) = %d\n"%(n,fannkuch(n)),
|
|
47
|
+
|
|
48
|
+
if __name__=="__main__":
|
|
49
|
+
main()
|
|
50
|
+
|
|
@@ -0,0 +1,54 @@
|
|
|
1
|
+
# The Computer Language Benchmarks Game
|
|
2
|
+
# http://shootout.alioth.debian.org/
|
|
3
|
+
#
|
|
4
|
+
# contributed by Sokolov Yura
|
|
5
|
+
# modified by Tupteq
|
|
6
|
+
|
|
7
|
+
def fannkuch(n):
|
|
8
|
+
count = range(1, n+1)
|
|
9
|
+
max_flips = 0
|
|
10
|
+
m = n-1
|
|
11
|
+
r = n
|
|
12
|
+
check = 0
|
|
13
|
+
perm1 = range(n)
|
|
14
|
+
perm = range(n)
|
|
15
|
+
perm1_ins = perm1.insert
|
|
16
|
+
perm1_pop = perm1.pop
|
|
17
|
+
|
|
18
|
+
while 1:
|
|
19
|
+
if check < 30:
|
|
20
|
+
print "".join(str(i+1) for i in perm1)
|
|
21
|
+
check += 1
|
|
22
|
+
|
|
23
|
+
while r != 1:
|
|
24
|
+
count[r-1] = r
|
|
25
|
+
r -= 1
|
|
26
|
+
|
|
27
|
+
if perm1[0] != 0 and perm1[m] != m:
|
|
28
|
+
perm = perm1[:]
|
|
29
|
+
flips_count = 0
|
|
30
|
+
k = perm[0]
|
|
31
|
+
while k:
|
|
32
|
+
perm[:k+1] = perm[k::-1]
|
|
33
|
+
flips_count += 1
|
|
34
|
+
k = perm[0]
|
|
35
|
+
|
|
36
|
+
if flips_count > max_flips:
|
|
37
|
+
max_flips = flips_count
|
|
38
|
+
|
|
39
|
+
while r != n:
|
|
40
|
+
perm1_ins(r, perm1_pop(0))
|
|
41
|
+
count[r] -= 1
|
|
42
|
+
if count[r] > 0:
|
|
43
|
+
break
|
|
44
|
+
r += 1
|
|
45
|
+
else:
|
|
46
|
+
return max_flips
|
|
47
|
+
|
|
48
|
+
def main():
|
|
49
|
+
from sys import argv
|
|
50
|
+
n = int(argv and argv[1] or 1)
|
|
51
|
+
print "Pfannkuchen(%d) = %d\n" % (n, fannkuch(n)),
|
|
52
|
+
|
|
53
|
+
if __name__=="__main__":
|
|
54
|
+
main()
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# The Computer Language Benchmarks Game
|
|
2
|
+
# http://shootout.alioth.debian.org/
|
|
3
|
+
#
|
|
4
|
+
# modified by Ian Osgood
|
|
5
|
+
# modified again by Heinrich Acker
|
|
6
|
+
|
|
7
|
+
import sys, bisect
|
|
8
|
+
|
|
9
|
+
alu = (
|
|
10
|
+
'GGCCGGGCGCGGTGGCTCACGCCTGTAATCCCAGCACTTTGG'
|
|
11
|
+
'GAGGCCGAGGCGGGCGGATCACCTGAGGTCAGGAGTTCGAGA'
|
|
12
|
+
'CCAGCCTGGCCAACATGGTGAAACCCCGTCTCTACTAAAAAT'
|
|
13
|
+
'ACAAAAATTAGCCGGGCGTGGTGGCGCGCGCCTGTAATCCCA'
|
|
14
|
+
'GCTACTCGGGAGGCTGAGGCAGGAGAATCGCTTGAACCCGGG'
|
|
15
|
+
'AGGCGGAGGTTGCAGTGAGCCGAGATCGCGCCACTGCACTCC'
|
|
16
|
+
'AGCCTGGGCGACAGAGCGAGACTCCGTCTCAAAAA')
|
|
17
|
+
|
|
18
|
+
iub = zip('acgtBDHKMNRSVWY', [0.27, 0.12, 0.12, 0.27] + [0.02]*11)
|
|
19
|
+
|
|
20
|
+
homosapiens = [
|
|
21
|
+
('a', 0.3029549426680),
|
|
22
|
+
('c', 0.1979883004921),
|
|
23
|
+
('g', 0.1975473066391),
|
|
24
|
+
('t', 0.3015094502008),
|
|
25
|
+
]
|
|
26
|
+
|
|
27
|
+
|
|
28
|
+
def genRandom(lim, ia = 3877, ic = 29573, im = 139968):
|
|
29
|
+
seed = 42
|
|
30
|
+
imf = float(im)
|
|
31
|
+
while 1:
|
|
32
|
+
seed = (seed * ia + ic) % im
|
|
33
|
+
yield lim * seed / imf
|
|
34
|
+
|
|
35
|
+
Random = genRandom(1.)
|
|
36
|
+
|
|
37
|
+
def makeCumulative(table):
|
|
38
|
+
P = []
|
|
39
|
+
C = []
|
|
40
|
+
prob = 0.
|
|
41
|
+
for char, p in table:
|
|
42
|
+
prob += p
|
|
43
|
+
P += [prob]
|
|
44
|
+
C += [char]
|
|
45
|
+
return (P, C)
|
|
46
|
+
|
|
47
|
+
def repeatFasta(src, n):
|
|
48
|
+
width = 60
|
|
49
|
+
r = len(src)
|
|
50
|
+
s = src + src + src[:n % r]
|
|
51
|
+
for j in xrange(n // width):
|
|
52
|
+
i = j*width % r
|
|
53
|
+
print s[i:i+width]
|
|
54
|
+
if n % width:
|
|
55
|
+
print s[-(n % width):]
|
|
56
|
+
|
|
57
|
+
def randomFasta(table, n):
|
|
58
|
+
width = 60
|
|
59
|
+
r = xrange(width)
|
|
60
|
+
gR = Random.next
|
|
61
|
+
bb = bisect.bisect
|
|
62
|
+
jn = ''.join
|
|
63
|
+
probs, chars = makeCumulative(table)
|
|
64
|
+
for j in xrange(n // width):
|
|
65
|
+
print jn([chars[bb(probs, gR())] for i in r])
|
|
66
|
+
if n % width:
|
|
67
|
+
print jn([chars[bb(probs, gR())] for i in xrange(n % width)])
|
|
68
|
+
|
|
69
|
+
|
|
70
|
+
n = int(sys.argv[1])
|
|
71
|
+
|
|
72
|
+
print '>ONE Homo sapiens alu'
|
|
73
|
+
repeatFasta(alu, n*2)
|
|
74
|
+
|
|
75
|
+
print '>TWO IUB ambiguity codes'
|
|
76
|
+
randomFasta(iub, n*3)
|
|
77
|
+
|
|
78
|
+
print '>THREE Homo sapiens frequency'
|
|
79
|
+
randomFasta(homosapiens, n*5)
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
# $Id: fibo.python,v 1.3 2005-04-25 19:01:38 igouy-guest Exp $
|
|
3
|
+
# http://www.bagley.org/~doug/shootout/
|
|
4
|
+
|
|
5
|
+
import sys
|
|
6
|
+
|
|
7
|
+
def fib(n):
|
|
8
|
+
if (n < 2):
|
|
9
|
+
return(1)
|
|
10
|
+
return( fib(n-2) + fib(n-1) )
|
|
11
|
+
|
|
12
|
+
def main():
|
|
13
|
+
N = int(sys.argv[1])
|
|
14
|
+
#sys.setrecursionlimit(3000)
|
|
15
|
+
print fib(N)
|
|
16
|
+
|
|
17
|
+
main()
|
|
File without changes
|
|
File without changes
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
# $Id: hash.python,v 1.1.1.1 2004-05-19 18:09:55 bfulgham Exp $
|
|
3
|
+
# http://www.bagley.org/~doug/shootout/
|
|
4
|
+
# with help from from Gustavo Niemeyer
|
|
5
|
+
|
|
6
|
+
import sys
|
|
7
|
+
#sys.setcheckinterval(10000)
|
|
8
|
+
|
|
9
|
+
def main():
|
|
10
|
+
n = int(sys.argv[1])
|
|
11
|
+
X = {}
|
|
12
|
+
myhex = hex
|
|
13
|
+
for i in xrange(1,n+1):
|
|
14
|
+
X[myhex(i)[2:]] = i
|
|
15
|
+
c = 0
|
|
16
|
+
has_key = X.has_key
|
|
17
|
+
for i in xrange(n, 0, -1):
|
|
18
|
+
c += has_key(`i`)
|
|
19
|
+
print c
|
|
20
|
+
|
|
21
|
+
main()
|
|
File without changes
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
# $Id: hash2.python,v 1.2 2004-11-30 07:10:03 bfulgham Exp $
|
|
3
|
+
# http://shootout.alioth.debian.org
|
|
4
|
+
# Contributed by Antoine Pitrou, based on code by Mark Baker
|
|
5
|
+
#
|
|
6
|
+
# 1. Put critical code in a function -- otherwise the local variable
|
|
7
|
+
# optimizations by the interpreter don't work.
|
|
8
|
+
# 2. Iterator versions of common functions are often a bit faster than
|
|
9
|
+
# other methods (e.g., iterkeys() instead of keys() ).
|
|
10
|
+
|
|
11
|
+
import sys
|
|
12
|
+
|
|
13
|
+
def main():
|
|
14
|
+
n = int(sys.argv[1])
|
|
15
|
+
hash1 = {}
|
|
16
|
+
for i in xrange(10000):
|
|
17
|
+
hash1['foo_' + `i`] = i
|
|
18
|
+
|
|
19
|
+
hash2 = {}
|
|
20
|
+
for i in xrange(n):
|
|
21
|
+
for k in hash1.iterkeys():
|
|
22
|
+
try:
|
|
23
|
+
hash2[k] += hash1[k]
|
|
24
|
+
except KeyError:
|
|
25
|
+
hash2[k] = hash1[k]
|
|
26
|
+
|
|
27
|
+
print hash1['foo_1'], hash1['foo_9999'], hash2['foo_1'], hash2['foo_9999']
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
main()
|
|
@@ -0,0 +1,66 @@
|
|
|
1
|
+
#!/usr/bin/python -O
|
|
2
|
+
# $Id: heapsort.python-3.python,v 1.1 2005-03-27 19:43:21 igouy-guest Exp $
|
|
3
|
+
#
|
|
4
|
+
# The Great Computer Language Shootout
|
|
5
|
+
# http://shootout.alioth.debian.org/
|
|
6
|
+
#
|
|
7
|
+
# Updated by Valentino Volonghi for Python 2.4
|
|
8
|
+
# Reworked by Kevin Carson to produce correct results and same intent
|
|
9
|
+
|
|
10
|
+
import sys
|
|
11
|
+
|
|
12
|
+
IM = 139968
|
|
13
|
+
IA = 3877
|
|
14
|
+
IC = 29573
|
|
15
|
+
|
|
16
|
+
LAST = 42
|
|
17
|
+
def gen_random(max) :
|
|
18
|
+
global LAST
|
|
19
|
+
LAST = (LAST * IA + IC) % IM
|
|
20
|
+
return( (max * LAST) / IM )
|
|
21
|
+
|
|
22
|
+
def heapsort(n, ra) :
|
|
23
|
+
ir = n
|
|
24
|
+
l = (n >> 1) + 1
|
|
25
|
+
|
|
26
|
+
while True :
|
|
27
|
+
if l > 1 :
|
|
28
|
+
l -= 1
|
|
29
|
+
rra = ra[l]
|
|
30
|
+
else :
|
|
31
|
+
rra = ra[ir]
|
|
32
|
+
ra[ir] = ra[1]
|
|
33
|
+
ir -= 1
|
|
34
|
+
if ir == 1 :
|
|
35
|
+
ra[1] = rra
|
|
36
|
+
return
|
|
37
|
+
|
|
38
|
+
i = l
|
|
39
|
+
j = l << 1
|
|
40
|
+
while j <= ir :
|
|
41
|
+
if (j < ir) and (ra[j] < ra[j + 1]) :
|
|
42
|
+
j += 1
|
|
43
|
+
|
|
44
|
+
if rra < ra[j] :
|
|
45
|
+
ra[i] = ra[j]
|
|
46
|
+
i = j
|
|
47
|
+
j += j
|
|
48
|
+
else :
|
|
49
|
+
j = ir + 1;
|
|
50
|
+
ra[i] = rra;
|
|
51
|
+
|
|
52
|
+
def main() :
|
|
53
|
+
if len(sys.argv) == 2 :
|
|
54
|
+
N = int(sys.argv[1])
|
|
55
|
+
else :
|
|
56
|
+
N = 1
|
|
57
|
+
|
|
58
|
+
ary = [None]*(N + 1)
|
|
59
|
+
for i in xrange(1, N + 1) :
|
|
60
|
+
ary[i] = gen_random(1.0)
|
|
61
|
+
|
|
62
|
+
heapsort(N, ary)
|
|
63
|
+
|
|
64
|
+
print "%.10f" % ary[N]
|
|
65
|
+
|
|
66
|
+
main()
|
|
@@ -0,0 +1,231 @@
|
|
|
1
|
+
#!/usr/bin/env python
|
|
2
|
+
#
|
|
3
|
+
# The Great Computer Language Shootout
|
|
4
|
+
# http://shootout.alioth.debian.org/
|
|
5
|
+
#
|
|
6
|
+
# Contributed by Sebastien Loisel
|
|
7
|
+
#
|
|
8
|
+
# OVERVIEW: In this test, we solve an ordinary differential equation
|
|
9
|
+
# u'=f(t,u)
|
|
10
|
+
# using the Trapezoid numerical method, which can be written as
|
|
11
|
+
# (u[k+1]-u[k])=(f(t[k],u[k])+f(t[k]+dt,u[k+1]))*dt/2,
|
|
12
|
+
# where t[k], u[k], dt and the function f are known and u[k+1] is the
|
|
13
|
+
# unknown.
|
|
14
|
+
#
|
|
15
|
+
# Since u[k+1] appears on both sides of the equation, we use an iterative
|
|
16
|
+
# solver called the newton iteration to compute u[k+1]. The newton iteration
|
|
17
|
+
# computes the solution to
|
|
18
|
+
# h(x)=0
|
|
19
|
+
# where h is a known function and x is the unknown 0 of h, using the method
|
|
20
|
+
# x[k+1]=x[k]-f(x[k])/f'(x[k]).
|
|
21
|
+
# Here, f' denotes the derivative of f.
|
|
22
|
+
#
|
|
23
|
+
# To compute f' from the definition of f alone, we use a technique called
|
|
24
|
+
# automatic differentiation. This works by replacing all floating point
|
|
25
|
+
# variables by a special type we call ad (for automatic differentiation.)
|
|
26
|
+
# If the python program for f is called with parameter x of type ad,
|
|
27
|
+
# it will do the same work as if it were called with the equivalent parameter
|
|
28
|
+
# of type floating point, but will also return f'. That's why it's called
|
|
29
|
+
# "automatic."
|
|
30
|
+
#
|
|
31
|
+
# To shake things up, we also have another type, fl (for "float") which
|
|
32
|
+
# works exactly like a double precision floating point, but with much
|
|
33
|
+
# less precision.
|
|
34
|
+
#
|
|
35
|
+
# Summary of classes:
|
|
36
|
+
#
|
|
37
|
+
# ad -- automatic differentiation type
|
|
38
|
+
# fl -- low precision floating point type
|
|
39
|
+
# mycomplex -- complex numbers whose real and imaginary parts can be fl
|
|
40
|
+
# trapezoid_method_rooter -- implements the function that the trapezoid method
|
|
41
|
+
# must solve
|
|
42
|
+
|
|
43
|
+
import sys
|
|
44
|
+
from math import log,exp,floor,fabs
|
|
45
|
+
|
|
46
|
+
def sqr(x):
|
|
47
|
+
"""sqr(x): a helper function that computes the square of any "number" x."""
|
|
48
|
+
return x*x
|
|
49
|
+
|
|
50
|
+
def pwr(x,k):
|
|
51
|
+
"""pwr(x,k): a helper function that computes the kth power of any
|
|
52
|
+
"number" x."""
|
|
53
|
+
if k<=0:
|
|
54
|
+
return 1
|
|
55
|
+
elif (k&1):
|
|
56
|
+
return x*pwr(x,k-1)
|
|
57
|
+
return sqr(pwr(x,k/2))
|
|
58
|
+
|
|
59
|
+
def pr(x):
|
|
60
|
+
"""Print a value depending on its type."""
|
|
61
|
+
if isinstance(x,float):
|
|
62
|
+
return "%.12e"%x
|
|
63
|
+
elif isinstance(x,complex):
|
|
64
|
+
return "%.12e %.12e"%(x.real,x.imag)
|
|
65
|
+
else:
|
|
66
|
+
return x.pr()
|
|
67
|
+
|
|
68
|
+
class fl:
|
|
69
|
+
"""A low-precision floating point class."""
|
|
70
|
+
def pr(x):
|
|
71
|
+
return "%.2e"%x.a
|
|
72
|
+
def __init__(x,a=0):
|
|
73
|
+
global count
|
|
74
|
+
if a==0:
|
|
75
|
+
x.a=0.0
|
|
76
|
+
else:
|
|
77
|
+
k=int(log(fabs(a)))
|
|
78
|
+
x.a=floor(a*exp(-k+6)+0.5)*exp(k-6)
|
|
79
|
+
def __add__(x,y):
|
|
80
|
+
return fl(x.a+y.a)
|
|
81
|
+
def __radd__(y,x):
|
|
82
|
+
return x+y
|
|
83
|
+
def __sub__(x,y):
|
|
84
|
+
return fl(x.a-y.a)
|
|
85
|
+
def __mul__(x,y):
|
|
86
|
+
return fl(x.a*y.a)
|
|
87
|
+
def __rmul__(y,x):
|
|
88
|
+
return x*y
|
|
89
|
+
def __div__(x,y):
|
|
90
|
+
return fl(x.a/y.a)
|
|
91
|
+
def __coerce__(x,y):
|
|
92
|
+
if isinstance(y,fl):
|
|
93
|
+
return (x,y)
|
|
94
|
+
return (x,fl(y))
|
|
95
|
+
|
|
96
|
+
class mycomplex:
|
|
97
|
+
"""A complex type so that the type of the real or imaginary part can be
|
|
98
|
+
any kind of number."""
|
|
99
|
+
def __init__(x,a=0,b=0):
|
|
100
|
+
x.real,x.imag=a,b
|
|
101
|
+
def __add__(a,b):
|
|
102
|
+
return mycomplex(a.real+b.real,a.imag+b.imag)
|
|
103
|
+
def __radd__(b,a):
|
|
104
|
+
return a+b
|
|
105
|
+
def __sub__(a,b):
|
|
106
|
+
return mycomplex(a.real-b.real,a.imag-b.imag)
|
|
107
|
+
def __mul__(a,b):
|
|
108
|
+
return mycomplex(a.real*b.real-a.imag*b.imag,
|
|
109
|
+
a.real*b.imag+a.imag*b.real)
|
|
110
|
+
def __rmul__(b,a):
|
|
111
|
+
return a*b
|
|
112
|
+
def __div__(a,b):
|
|
113
|
+
mag=b.real*b.real+b.imag*b.imag
|
|
114
|
+
return mycomplex((a.real*b.real+a.imag*b.imag)/mag,
|
|
115
|
+
(a.imag*b.real-a.real*b.imag)/mag)
|
|
116
|
+
def __coerce__(a,b):
|
|
117
|
+
if isinstance(b,mycomplex):
|
|
118
|
+
return (a,b)
|
|
119
|
+
return (a,mycomplex(b))
|
|
120
|
+
def pr(a):
|
|
121
|
+
return pr(a.real)+' '+pr(a.imag)
|
|
122
|
+
|
|
123
|
+
def one(x):
|
|
124
|
+
if isinstance(x,float):
|
|
125
|
+
return 1.0
|
|
126
|
+
if isinstance(x,complex):
|
|
127
|
+
return 1.0+0.0j
|
|
128
|
+
if isinstance(x,fl):
|
|
129
|
+
return fl(1.0)
|
|
130
|
+
if isinstance(x,mycomplex):
|
|
131
|
+
return mycomplex(one(x.real),0.0)
|
|
132
|
+
|
|
133
|
+
class ad:
|
|
134
|
+
"""Automatic differentiation type. An ad has two attributes, x and dx."""
|
|
135
|
+
def __init__(self,x=0,dx=0):
|
|
136
|
+
self.x,self.dx=x,dx
|
|
137
|
+
def __add__(a,b):
|
|
138
|
+
"""ad's add like vectors."""
|
|
139
|
+
return ad(a.x+b.x,a.dx+b.dx)
|
|
140
|
+
def __sub__(a,b):
|
|
141
|
+
"""ad's subtract like vectors."""
|
|
142
|
+
return ad(a.x-b.x,a.dx-b.dx)
|
|
143
|
+
def __mul__(a,b):
|
|
144
|
+
"""The product of ad's is given by the "product rule" of differentation:
|
|
145
|
+
(x,dx)*(y,dy)=(xy,xdy+ydx)."""
|
|
146
|
+
return ad(a.x*b.x,a.dx*b.x+a.x*b.dx)
|
|
147
|
+
def __div__(a,b):
|
|
148
|
+
"""The quotient rule of differentiation gives
|
|
149
|
+
(x,dx)/(y,dy)=(x/y,(ydx-xdy)/(y*y))."""
|
|
150
|
+
return ad(a.x/b.x,(a.dx*b.x-a.x*b.dx)/(b.x*b.x))
|
|
151
|
+
def __coerce__(self,other):
|
|
152
|
+
if isinstance(other,ad):
|
|
153
|
+
return (self,other)
|
|
154
|
+
return (self,ad(other))
|
|
155
|
+
def pr(a):
|
|
156
|
+
return pr(a.x)+' '+pr(a.dx)
|
|
157
|
+
|
|
158
|
+
def rat(x):
|
|
159
|
+
"""This is just a quotient of two polynomials p/q, with degree p=11 and
|
|
160
|
+
degree q=7."""
|
|
161
|
+
return (x*2+pwr(x,2)*3+pwr(x,6)*7+pwr(x,11)*5+1)/(x*5-pwr(x,3)*6-pwr(x,7)*3+2)
|
|
162
|
+
|
|
163
|
+
def newton(x0,n,g):
|
|
164
|
+
"""The newton iteration computes the zero of g starting with initial guess
|
|
165
|
+
x0. This implementation iterates n times and then returns the answer."""
|
|
166
|
+
for i in range(n):
|
|
167
|
+
val=g(ad(x0,one(x0)))
|
|
168
|
+
x0=x0-val.x/val.dx
|
|
169
|
+
return x0
|
|
170
|
+
|
|
171
|
+
def mysqrt(x):
|
|
172
|
+
"""This isn't actually a square root. However, newton(1,10,mysqrt) should
|
|
173
|
+
return the square root of 2 (1.4142...)."""
|
|
174
|
+
return sqr(x)-ad(2)
|
|
175
|
+
|
|
176
|
+
class trapezoid_method_rooter:
|
|
177
|
+
"""The trapezoid method (see below) works by computing the solution of some
|
|
178
|
+
problem of the form h(x)=0. This class implements the function h needed
|
|
179
|
+
in the trapezoid method."""
|
|
180
|
+
def __init__(self,g,y0,t0,t1):
|
|
181
|
+
self.g,self.y0,self.t0,self.t1=g,y0,t0,t1
|
|
182
|
+
self.g0=g(t0,y0)
|
|
183
|
+
def __call__(self,y1):
|
|
184
|
+
"""The function is (g(t1,y1)-g(t0,y0))*(t1-t0)/2+y0-y1. The parameters
|
|
185
|
+
t0,y0,t1,g are set at construction time, so the only parameter left is
|
|
186
|
+
y1."""
|
|
187
|
+
# raz=(self.g(ad(self.t1),y1))
|
|
188
|
+
ret=(self.g(ad(self.t1),y1)+self.g0)*((self.t1-self.t0)/2)+ad(self.y0)-y1
|
|
189
|
+
# print "t0",pr(self.t0),"t1",pr(self.t1),"y0",pr(self.y0),"g0",pr(self.g0),"y1",pr(y1),"ret",pr(ret),"raz",pr(raz)
|
|
190
|
+
return ret
|
|
191
|
+
|
|
192
|
+
def trapezoid_method(t0,dt,y0,g,numsteps):
|
|
193
|
+
"""This function will approximate the solution of y'=g(t,y) at time
|
|
194
|
+
t0+numsteps*dt with initial value y(t0)=y0 using the trapezoid method
|
|
195
|
+
of numerical integration."""
|
|
196
|
+
for i in range(numsteps):
|
|
197
|
+
foo=trapezoid_method_rooter(g,y0,t0,t0+dt)
|
|
198
|
+
y0=newton(y0,10,foo)
|
|
199
|
+
t0=t0+dt
|
|
200
|
+
return y0
|
|
201
|
+
|
|
202
|
+
def sqrintegrand(t,y):
|
|
203
|
+
"""This is a version of sqr which has the correct signature so that it can
|
|
204
|
+
be passed to trapezoid_method. The first parameter, t, is ignored.
|
|
205
|
+
The second parameter, y, is passed on to sqr."""
|
|
206
|
+
return sqr(y)
|
|
207
|
+
def ratintegrand(t,y):
|
|
208
|
+
"""This is a version of the rational function rat above that can be passed
|
|
209
|
+
to trapezoid_method. In this instance, we do use the t parameter."""
|
|
210
|
+
return rat(y)-t
|
|
211
|
+
|
|
212
|
+
def integrate_functions(t0,x0,dt,n):
|
|
213
|
+
"""Integrate sqrintegrand and ratintegrand with given initial value.
|
|
214
|
+
Depending on the type of initial value, this will result in float, complex,
|
|
215
|
+
iv or complex iv integration."""
|
|
216
|
+
print ('i1 '+pr(trapezoid_method(t0,dt,x0,sqrintegrand,n)))
|
|
217
|
+
print ('i2 '+pr(trapezoid_method(t0,dt,x0,ratintegrand,n)))
|
|
218
|
+
|
|
219
|
+
try:
|
|
220
|
+
N = int(sys.argv[1])
|
|
221
|
+
except:
|
|
222
|
+
N = 50
|
|
223
|
+
print ('rational_taylor_series: '+pr(rat(ad(0.25,1))))
|
|
224
|
+
print ('newton-sqrt_2: '+pr(newton(1.0,10,mysqrt)))
|
|
225
|
+
x=newton(-1.0,6,rat)
|
|
226
|
+
print ('newton-rat: '+pr(x))
|
|
227
|
+
integrate_functions(1.0,0.02,1.0/(4*N),4*N)
|
|
228
|
+
integrate_functions(fl(1.0),fl(0.02),fl(1.0)/fl(float(N)),N)
|
|
229
|
+
integrate_functions(1.0+0.0j,0.02+0.02j,1.0/N,N)
|
|
230
|
+
integrate_functions(mycomplex(fl(1.0),fl(0.0)),mycomplex(fl(0.02),fl(0.02)),mycomplex(fl(1.0))/mycomplex(fl(float(N))),N)
|
|
231
|
+
|