
import math

def OUT_CIRC (t, b, c, d):
    t=float(t)
    b=float(b)
    c=float(c)
    d=float(d)
    t = t/d -1
    return c * math.sqrt(1 - t*t) + b;

def OUT_QUART(t, b, c, d):
    t=float(t)
    b=float(b)
    c=float(c)
    d=float(d)
    t = t/d -1
    return -c * ((t)*t*t*t - 1) + b;

def INOUT_CIRC(t, b, c, d):
    t=float(t)
    b=float(b)
    c=float(c)
    d=float(d)
    t1 = t / (d / 2)

    if ((t / (d/2)) < 1):
        return -c/2 * (math.sqrt(1 - (t/(d/2))**2) - 1) + b
    return c/2 * (math.sqrt(1 - (t1-2)**2) + 1) + b;

def IN_CUBIC (t, b, c, d):
    t=float(t)
    b=float(b)
    c=float(c)
    d=float(d)
    t = t/d
    return c*t*t*t + b

def OUT_QUAD (t, b, c, d):
    t=float(t)
    b=float(b)
    c=float(c)
    d=float(d)

    t/=d

    return -c *(t)*(t-2) + b

def OUT_BOUNCE (t, b, c, d):
    t=float(t)
    b=float(b)
    c=float(c)
    d=float(d)

    t/=d

    if ((t) < (1/2.75)):
        return c*(7.5625*t*t) + b
    else:
        if (t < (2/2.75)):
            t-=(1.5/2.75)
            return c*(7.5625*t*t + .75) + b
        else:
            if (t < (2.5/2.75)):
                t-=(2.25/2.75)
                return c*(7.5625*(t)*t + .9375) + b
            else:
                t-=(2.625/2.75)
                return c*(7.5625*(t)*t + .984375) + b

def INOUT_EXP(t, b, c, d):
    t=float(t)
    b=float(b)
    c=float(c)
    d=float(d)
    t1 = t / (d/2)
    if t==0:
         return b
    if t==d:
         return b+c
    if (t1) < 1:
         return c/2 * math.pow(2, 10 * (t1 - 1)) + b - c * 0.0005
    return c/2 * 1.0005 * (-math.pow(2, -10 * (t1-1)) + 2) + b
