99 lines
2.5 KiB
Python
Executable file
99 lines
2.5 KiB
Python
Executable file
import numpy as np
|
|
import easynn as nn
|
|
import easynn_golden as golden
|
|
import easynn_cpp as cpp
|
|
import grade
|
|
|
|
|
|
def random_kwargs(kwargs):
|
|
return {k: np.random.random(shape) if shape != None else np.random.random() for k, shape in kwargs.items()}
|
|
|
|
|
|
def is_same(p, n, **kwargs):
|
|
e0 = p.compile(golden.Builder())
|
|
e1 = p.compile(cpp.Builder())
|
|
nkwargs = [random_kwargs(kwargs) for i in range(n)]
|
|
return all([np.allclose(e0(**nkwargs[i]), e1(**nkwargs[i])) for i in range(n)])
|
|
|
|
|
|
def grade_Q1():
|
|
x = nn.Input("x")
|
|
return is_same(x, 1, x = (9,)) and is_same(x, 1, x = (9, 9))
|
|
|
|
|
|
def grade_Q2():
|
|
c1 = nn.Const(np.random.random((10,)))
|
|
c2 = nn.Const(np.random.random((10, 10)))
|
|
return is_same(c1, 1) and is_same(c2, 1)
|
|
|
|
|
|
def grade_Q3():
|
|
x = nn.Input("x")
|
|
y = nn.Input("y")
|
|
z = x+y
|
|
return all([
|
|
is_same(z, 1, x = (11,), y = (11,)),
|
|
is_same(z, 1, x = (11, 12), y = (11, 12)),
|
|
is_same(z, 1, x = (11, 12, 13), y = (11, 12, 13)),
|
|
is_same(z, 1, x = (11, 12, 13, 14), y = (11, 12, 13, 14))])
|
|
|
|
|
|
def grade_Q4():
|
|
x = nn.Input("x")
|
|
y = nn.Input("y")
|
|
z = x-y
|
|
return all([
|
|
is_same(z, 1, x = (11,), y = (11,)),
|
|
is_same(z, 1, x = (11, 12), y = (11, 12)),
|
|
is_same(z, 1, x = (11, 12, 13), y = (11, 12, 13)),
|
|
is_same(z, 1, x = (11, 12, 13, 14), y = (11, 12, 13, 14))])
|
|
|
|
|
|
def grade_Q5():
|
|
x = nn.Input("x")
|
|
y = nn.Input("y")
|
|
z = x*y
|
|
return is_same(z, 1, x = (11, 12), y = (12, 13))
|
|
|
|
|
|
def grade_Q6():
|
|
x = nn.Input("x")
|
|
y = nn.Input("y")
|
|
z = x*y
|
|
return is_same(z, 1, x = None, y = (12, 13)) and is_same(z, 1, x = (11, 12), y = None)
|
|
|
|
|
|
def grade_Q7():
|
|
x = nn.Input("x")
|
|
y = nn.Input("y")
|
|
z = nn.Input("z")
|
|
r = x+y*z
|
|
return is_same(r, 1, x = (11, 13), y = (11, 12), z = (12, 13))
|
|
|
|
|
|
def grade_Q8():
|
|
x = nn.Input("x")
|
|
y = nn.Input("y")
|
|
z = nn.Input("z")
|
|
r = (x-y)*z
|
|
return is_same(r, 1, x = (11, 12), y = (11, 12), z = (12, 13))
|
|
|
|
|
|
def grade_Q9():
|
|
x = nn.Input("x")
|
|
y = nn.Input("y")
|
|
z = nn.Input("z")
|
|
r = x*y*z
|
|
return is_same(r, 1, x = (11, 12), y = (12, 13), z = (13, 14))
|
|
|
|
|
|
def grade_Q10():
|
|
x = nn.Input("x")
|
|
y = nn.Input("y")
|
|
c1 = nn.Const(np.random.random((11, 12)))
|
|
c2 = nn.Const(np.random.random((12, 13)))
|
|
z = x*y-x*c2-c1*y+c1*c2
|
|
return is_same(z, 1, x = (11, 12), y = (12, 13))
|
|
|
|
|
|
grade.grade_all("p3", 1, 11, globals())
|