###--------------------------------------------------------------------------
### Utilities.
+def _excval():
+ """Return the most recent exception object."""
+ return SYS.exc_info()[1]
+
class ExpectedError (Exception):
"""
I represent an expected error, which should be reported in a friendly way.
pass
def prod(ff, one = 1):
- """
- Return ONE times the product of the elements of FF.
-
- This is not done very efficiently.
- """
- return reduce(lambda prod, f: prod*f, ff, one)
+ """Return ONE times the product of the elements of FF."""
+ return C.MPMul().factor(one).factor(ff).done()
def parse_label(line):
"""
## Figure out the number of bits in a (nonnegative) primitive `int'. We'll
## use a list of these as our sieve.
+ try: _MAX = SYS.maxint
+ except AttributeError: _MAX = SYS.maxsize
_NBIT = 15
- while type(1 << (_NBIT + 1)) == int: _NBIT += 1
+ while 1 << (_NBIT + 1) < _MAX: _NBIT += 1
def __init__(me, limit):
"""
me.limit = limit
## Calculate the size of sieve we'll need and initialize the bit list.
- n = (limit - 2)/2
- sievesz = (n + me._NBIT - 1)/me._NBIT
+ n = (limit - 2)//2
+ sievesz = (n + me._NBIT - 1)//me._NBIT
me._sievemax = sievesz*me._NBIT
me._bits = sievesz*[0]
global SIEVE
if SIEVE is not None: raise ValueError('sieve already defined')
if sievebits < 6: sievebits = 6
- SIEVE = Sieve(1 << (sievebits + 1)/2)
+ SIEVE = Sieve(1 << (sievebits + 1)//2)
###--------------------------------------------------------------------------
### Primality checking.
if p.nbits != nb:
raise ExpectedError('check failed: nbits(%s) = %d /= %d' % \
(label, p.nbits, nb))
- if VERBOSITY: print ';; %s = %d [%d]' % (label, p, nb)
+ if VERBOSITY: print(';; %s = %d [%d]' % (label, p, nb))
def setsievebits(pp, line):
"""
if step is not None:
me.addstep(step)
lastp = step.p
- except ExpectedError, e:
- raise ExpectedError('%s:%d: %s' % (file.name, lno, e.message))
+ except ExpectedError:
+ raise ExpectedError('%s:%d: %s' %
+ (file.name, lno, _excval().message))
return lastp
###--------------------------------------------------------------------------
Give it the LABEL, and report progress to P.
"""
- if SIEVE.limit >> (nbits + 1)/2: g = gen_small
+ if SIEVE.limit >> (nbits + 1)//2: g = gen_small
else: g = gen_pock
return g(nbits, label = label, p = p)
## Prepare an option parser.
op = OP.OptionParser(
usage = '''\
-pock [-qv] CMD ARGS...
+pock [-qv] [-s SIEVEBITS] CMD ARGS...
gen NBITS
ll NBITS NSUBBITS
check [FILE]''',
if __name__ == '__main__':
prog = OS.path.basename(argv[0])
try: __main__()
- except ExpectedError, e: exit('%s: %s' % (prog, e.message))
- except IOError, e: exit('%s: %s' % (prog, e))
+ except ExpectedError: exit('%s: %s' % (prog, _excval().message))
+ except IOError: exit('%s: %s' % (prog, _excval()))
###----- That's all, folks --------------------------------------------------