from JyModule import *
from math import *

def g(x, k):
    s = 0
    for n in range(1, k+1):
        s += 4/pi*sin(pi*(2*n-1)*x)/(2*n-1)
    return s

def square(x):
    while x < 0:
        x += 2
    while x > 2:
        x -= 2
    if x < 1:
        return 1
    return -1

n = 1
def draw():
    beginpage()
    center()
    scale(50)

    gsave()
    newpath()
    moveto(-4,0)
    lineto(4, 0)
    setlinewidth(2)
    stroke()
    grestore()

    gsave()
    newpath()
    graph(square, -4, 4, 400)
    stroke(0.5,0,0)
    grestore()

    gsave()
    newpath()
    graph(lambda x: g(x, n), -4, 4, 400)
    stroke(0, 0, 1)
    grestore()

    endpage()

def step():
    global n
    n += 1
    refresh()
def reset():
    global n
    n = 1
    refresh()
addbutton("Next", step)
addbutton("Reset", reset)
openframe(400, 135, draw)
    
