File: saml0.py

package info (click to toggle)
saml 970418-3
  • links: PTS
  • area: main
  • in suites: slink
  • size: 1,204 kB
  • ctags: 1,701
  • sloc: ansic: 17,182; sh: 2,583; yacc: 497; perl: 264; makefile: 250; python: 242
file content (93 lines) | stat: -rw-r--r-- 2,028 bytes parent folder | download | duplicates (3)
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()