"""Scalar activation arithmetic, no Keras model execution."""
import math,json
def sigmoid(x):return 1/(1+math.exp(-x))
if __name__=="__main__":
    xs=[-2,-1,0,1,2]
    rows=[{"x":x,"relu":max(0,x),"sigmoid":sigmoid(x),"tanh":math.tanh(x)} for x in xs]
    assert rows[2]=={"x":0,"relu":0,"sigmoid":.5,"tanh":0.0}
    for row in rows:
        x=row['x'];s=row['sigmoid'];t=row['tanh']
        assert 0<s<1 and -1<t<1
        assert math.isclose(sigmoid(-x),1-s,abs_tol=1e-14)
        assert math.isclose(math.tanh(-x),-t,abs_tol=1e-14)
    plain=3*(2*(-1)+1)+4
    relu_middle=3*max(0,2*(-1)+1)+4
    assert plain==1 and relu_middle==4
    print(json.dumps({"values":rows,"two_affine_layers_at_minus_one":plain,"with_relu_between":relu_middle,"trained_network":False},indent=2))
