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 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93
|
#!/usr/bin/python
#
# Copyright 1997 Thierry Bousch
# Licensed under the Gnu Public License, Version 2
#
# $Id: saml0.py,v 1.2 1997/04/15 21:08:59 bousch Exp $
#
# Python bindings to the saml utility programs
#
import sys, string, os, popen2
class samuel:
def __init__(self, sparse=0, integers=0, tensors=0, debug=0):
cmdname = 'exec samuel -b'
if integers:
cmdname = cmdname + ' -Z'
if tensors:
cmdname = cmdname + ' -t'
if sparse:
cmdname = cmdname + ' --sparse'
(self.rfd,self.wfd) = popen2.popen2(cmdname)
self.debug = debug
def send(self, string):
if self.debug:
sys.stderr.write('S> ' + command)
self.wfd.write(string)
self.wfd.flush()
def read(self):
if self.debug:
sys.stderr.write('S< ')
answer = self.rfd.readline()
if self.debug:
sys.stderr.write(answer)
return answer[:-1]
def assign(self, varname, expr):
self.send('%s = %s;\n' % (varname, expr))
def compute(self, expr):
self.send(expr + ';\n')
return self.read()
def __getitem__(self, var):
return self.compute('?'+var)
def __setitem__(self, var, value):
self.assign(var, value)
#
# End of class definitions
#
def isprime(number):
p = os.popen('exec factorint -t -- '+number, 'r')
answer = p.readline()
if answer == 'prime\n':
return 1
else:
return 0
def factorize(number):
p = os.popen('exec factorint -- '+number, 'r')
answer = p.readline()[:-1]
a = []
if answer[0] == '-':
a = [('-1',1)]
answer = answer[1:]
for ne in string.split(answer, '.'):
arr = string.split(ne, '^')
if len(arr)==2:
a.append((arr[0],string.atoi(arr[1])))
elif ne<>'1':
a.append((ne,1))
return a
def test():
debug = 0
if len(sys.argv)==2 and sys.argv[1]=='-d':
debug = 1
s = samuel(debug)
s.assign('fact', '1')
for i in xrange(201):
if i:
s.assign('fact', '?fact * '+`i`)
fact = s.compute('?fact')
print '%d\t%s' % (i,fact)
if __name__ == '__main__':
test()
|