# coding:utf-8 | |
import itertools | |
def expo(base=2, factor=1, max_value=None): | |
"""Generator for exponential decay. | |
Args: | |
base: The mathematical base of the exponentiation operation | |
factor: Factor to multiply the exponentation by. | |
max_value: The maximum value to yield. Once the value in the | |
true exponential sequence exceeds this, the value | |
of max_value will forever after be yielded. | |
""" | |
n = 0 | |
while True: | |
a = factor * base ** n | |
if max_value is None or a < max_value: | |
yield a | |
n += 1 | |
else: | |
yield max_value | |
def fibo(max_value=None): | |
"""Generator for fibonaccial decay. | |
Args: | |
max_value: The maximum value to yield. Once the value in the | |
true fibonacci sequence exceeds this, the value | |
of max_value will forever after be yielded. | |
""" | |
a = 1 | |
b = 1 | |
while True: | |
if max_value is None or a < max_value: | |
yield a | |
a, b = b, a + b | |
else: | |
yield max_value | |
def constant(interval=1): | |
"""Generator for constant intervals. | |
Args: | |
interval: A constant value to yield or an iterable of such values. | |
""" | |
try: | |
itr = iter(interval) | |
except TypeError: | |
itr = itertools.repeat(interval) | |
for val in itr: | |
yield val | |