import numpy as np
def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.75
    y = np.sum(w*x) + b
    if y <= 0:
        return 0
    else:
        return 1

def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.75
    y = np.sum(w*x) + b
    if y <= 0:
        return 0
    else:
        return 1

def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.25
    y = np.sum(w*x) + b
    if y <= 0:
        return 0
    else:
        return 1

def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y


"""
import numpy as np
import matplotlib.pylab as plt
def step_function(x):
    return np.array(x > 0, dtype = np.int)


x = np.arange(-3.0, 3.0, 0.1)
y = step_function(x)
plt.plot(x, y)
plt.ylim(-0.1, 1.1) # y axis range
plt.show()
"""
