def _iteritems(dict): return dict.iteritems()
def _itervalues(dict): return dict.itervalues()
+## The built-in bignum type.
+_long = long
+
## How to fix a name back into the right identifier. Alas, the rules are not
## consistent.
def _fixname(name):
class IntRat (BaseRat):
RING = MP
+ def __new__(cls, a, b):
+ if isinstance(a, float) or isinstance(b, float): return a/b
+ return super(IntRat, cls).__new__(cls, a, b)
+ def __float__(me): return float(me._n)/float(me._d)
class GFRat (BaseRat):
RING = GF
def mont(x): return MPMont(x)
def barrett(x): return MPBarrett(x)
def reduce(x): return MPReduce(x)
- def __truediv__(me, you): return IntRat(me, you)
- def __rtruediv__(me, you): return IntRat(you, me)
+ def __truediv__(me, you):
+ if isinstance(you, float): return _long(me)/you
+ else: return IntRat(me, you)
+ def __rtruediv__(me, you):
+ if isinstance(you, float): return you/_long(me)
+ else: return IntRat(you, me)
__div__ = __truediv__
__rdiv__ = __rtruediv__
_repr_pretty_ = _pp_str
_augment(Field, _tmp)
class _tmp:
- def __repr__(me): return '%s(%sL)' % (_clsname(me), me.p)
+ def __repr__(me): return '%s(%s)' % (_clsname(me), me.p)
def __hash__(me): return 0x114401de ^ hash(me.p)
def _repr_pretty_(me, pp, cyclep):
ind = _pp_bgroup_tyname(pp, me)
_augment(PrimeField, _tmp)
class _tmp:
- def __repr__(me): return '%s(%#xL)' % (_clsname(me), me.p)
+ def __repr__(me): return '%s(%#x)' % (_clsname(me), me.p)
def ec(me, a, b): return ECBinProjCurve(me, a, b)
def _repr_pretty_(me, pp, cyclep):
ind = _pp_bgroup_tyname(pp, me)