import math

def recurrent(xs, initial=0.0):
    h = initial
    result = []
    for x in xs:
        h = math.tanh(0.8*x+0.5*h+0.1)
        result.append(h)
    return result
xs = [1.0, 0.0, -1.0]
forward = recurrent(xs)
reverse = recurrent(xs[::-1])
reset_each = [recurrent([x])[0] for x in xs]
print('sequence', [round(x, 6) for x in forward])
print('reversed', [round(x, 6) for x in reverse])
print('reset every item', [round(x, 6) for x in reset_each])
assert abs(forward[0]-0.7162978701990244) < 1e-12
assert abs(forward[-1]+0.450807140833709) < 1e-12
assert abs(forward[-1]-reverse[-1]) > 0.5
assert forward[1] != reset_each[1]
