Source code for codeviking.random.primitive

[docs]class PrimitiveRandomNumberGenerator(object): """ Abstract Base Class for primitive random number generators. Subclasses need to implement the :py:meth:`~.next_int` method, and provide the correct value for `int_bound` in the constructor. """
[docs] def __init__(self, int_bound): """ :param int_bound: one greater than the maximum value that next_int can return. :type int_bound: int """ self._int_bound = int_bound self._scale = 1.0 / int_bound
@property def int_bound(self): """ :return: one greater than the maximum value returned by next_int() :rtype: int """ return self._int_bound @property def scale(self): """ :return: the number to multiply values returned by :py:meth:`~.next_int` to get a float in the range [0.0, 1.0) :rtype: float """ return self._scale
[docs] def next_int(self): """ Implement this member in concrete subclasses. :return: this generator's next random integer :rtype: int """ pass
[docs] def next_bool(self): """ :return: a random boolean :rtype: bool """ return (self.next_int() % 2 == 1)
[docs] def next_float(self): """ :return: a random float in the range [0, 1.0) :rtype: float """ return self.next_int() * self.scale