Beispiel #1
0
def test_reverse_mul():
	x1 = sad.AutoDiffReverse(4, 'x1')
	x2 = sad.AutoDiffReverse(3, 'x2')
	
	f = x1 * 2
	assert f.der['x1'] ==  pytest.approx(2.0)

	f = 2 * x1
	assert f.der['x1'] ==  pytest.approx(2.0)

	f = x1 * x2
	assert f.der['x1'] ==  pytest.approx(3.0)
	assert f.der['x2'] ==  pytest.approx(4.0)
Beispiel #2
0
def test_reverse_backpass():
	# Currently this test is implemented to raise KeyError
	# the test passes when run outside pytest, but with pytest
	# there is some problem we weren't able to fix.
	with pytest.raises(KeyError):
	    x1 = sad.AutoDiffReverse(4, 'x1')
	    x2 = sad.AutoDiffReverse(7, 'x2')
	    x3 = sad.AutoDiffReverse(3, 'x3')
	    f = x1+2*x2-x3*4
	    assert f.val == 6
	    testdic = sad.reversepass(f.pass_table(),["x1","x2","x3"])
	    assert testdic ==  {'x1': 1, 'x2': 2, 'x3': -4}
	    f.clear_table()
Beispiel #3
0
def test_reverse_add():
	x1 = sad.AutoDiffReverse(4, 'x1')
	x2 = sad.AutoDiffReverse(3, 'x2')
	
	f = x1 + 1
	assert f.der['x1'] ==  pytest.approx(1.0)

	f = 1 + x1
	assert f.der['x1'] ==  pytest.approx(1.0)

	f = x1 + x2
	assert f.der['x1'] ==  pytest.approx(1.0)
	assert f.der['x2'] ==  pytest.approx(1.0)
Beispiel #4
0
def test_reverse_div():
	x1 = sad.AutoDiffReverse(4, 'x1')
	x2 = sad.AutoDiffReverse(3, 'x2')
	
	f = x1 / 2
	assert f.der['x1'] ==  pytest.approx(0.5)

	f = 2 / x1
	assert f.der['x1'] ==  pytest.approx(-2.0/(4**2))

	f = x1 / x2
	assert f.der['x1'] ==  pytest.approx(1/3)
	assert f.der['x2'] ==  pytest.approx(-4/(3**2))
Beispiel #5
0
def test_reverse_sub():
	x1 = sad.AutoDiffReverse(4, 'x1')
	x2 = sad.AutoDiffReverse(3, 'x2')
	
	f = x1 - 1
	assert f.der['x1'] ==  pytest.approx(1.0)

	f = 1 - x1
	assert f.der['x1'] ==  pytest.approx(-1.0)

	f = x1 - x2
	assert f.der['x1'] ==  pytest.approx(1.0)
	assert f.der['x2'] ==  pytest.approx(-1.0)
Beispiel #6
0
def test_reverse_pow():
	x1 = sad.AutoDiffReverse(4, 'x1')
	
	f = x1 ** 2
	assert f.der['x1'] ==  pytest.approx(8.0)

	f = 2 ** x1
	assert f.der['x1'] ==  pytest.approx(2.0**4*np.log(2))
Beispiel #7
0
def _arccosR(x):
    """Returns the arccsine of the AutoDiffReverse object"""

    der = {x.var: 1 / -np.sqrt(1 - x.val**2)}
    return sad.AutoDiffReverse(np.arccos(x.val), None, der)
Beispiel #8
0
def _tanR(x):
    """Returns the rangent of the AutoDiffReverse object"""

    der = {x.var: 1 / (np.cos(x.val)**2)}
    return sad.AutoDiffReverse(np.tan(x.val), None, der)
Beispiel #9
0
def test_reverse_sin():
	x1 = sad.AutoDiffReverse(4, 'x1')
	
	f = sad.sin(x1)
	assert f.der['x1'] ==  pytest.approx(np.cos(4))
Beispiel #10
0
def test_reverse_arccos():
	x1 = sad.AutoDiffReverse(0.5, 'x1')
	
	f = sad.arccos(x1)
	assert f.der['x1'] ==  pytest.approx(1 / -np.sqrt(1 - 0.5 ** 2))
Beispiel #11
0
def _logR(x, base=math.e):
    """Returns the log of the AutoDiffReverse object"""

    der = {x.var: 1 / (x.val * math.log(base))}
    return sad.AutoDiffReverse(math.log(x.val, base), None, der)
Beispiel #12
0
def test_reverse_log10():
	x1 = sad.AutoDiffReverse(4, 'x1')
	
	f = sad.log(x1, base=10)
	assert f.der['x1'] ==  pytest.approx(1 / (4 * math.log(10)))
Beispiel #13
0
def test_reverse_sqrt():
	x1 = sad.AutoDiffReverse(4, 'x1')
	
	f = sad.sqrt(x1)
	assert f.der['x1'] ==  pytest.approx(1/4)
Beispiel #14
0
def test_reverse_log():
	x1 = sad.AutoDiffReverse(4, 'x1')
	
	f = sad.log(x1)
	assert f.der['x1'] ==  pytest.approx(1 / (4 * math.log(math.e)))
Beispiel #15
0
def test_reverse_exp():
	x1 = sad.AutoDiffReverse(4, 'x1')
	
	f = sad.exp(x1)
	assert f.der['x1'] ==  pytest.approx(np.exp(4))
Beispiel #16
0
def test_reverse_arctan():
	x1 = sad.AutoDiffReverse(4, 'x1')
	
	f = sad.arctan(x1)
	assert f.der['x1'] ==  pytest.approx(1 / (1 + 4 * 4))
Beispiel #17
0
def _arctanR(x):
    """Returns the arctangent of the AutoDiffReverse object"""

    der = {x.var: 1 / (1 + x.val * x.val)}
    return sad.AutoDiffReverse(np.arctan(x.val), None, der)
Beispiel #18
0
def _tanhR(x):
    """Returns the sin_h of the AutoDiffReverse object"""
    der = {x.var: 1 / (cosh(x.val)**2)}
    der = Counter(der)
    return sad.AutoDiffReverse(np.tanh(x.val), None, der)
Beispiel #19
0
def _expR(x):
    """Returns the exp of the AutoDiffReverse object"""

    der = {x.var: np.exp(x.val)}
    return sad.AutoDiffReverse(np.exp(x.val), None, der)
Beispiel #20
0
def test_reverse_cosh():
	x1 = sad.AutoDiffReverse(4, 'x1')
	
	f = sad.cosh(x1)
	assert f.der['x1'] ==  pytest.approx(-np.sinh(4))
Beispiel #21
0
def _coshR(x):
    """Returns the cos_h of the AutoDiffReverse object"""
    der = {x.var: -np.sinh(x.val)}
    der = Counter(der)
    return sad.AutoDiffReverse(np.cosh(x.val), None, der)
Beispiel #22
0
def test_reverse_tanh():
	x1 = sad.AutoDiffReverse(4, 'x1')
	f = sad.tanh(x1)
	assert f.der['x1'] ==  pytest.approx(1 / (np.cosh(4) ** 2))
Beispiel #23
0
def _sinR(x):
    """Returns the sine of the AutoDiffReverse object"""
    der = {x.var: np.cos(x.val)}
    der = Counter(der)
    return sad.AutoDiffReverse(np.sin(x.val), None, der)
Beispiel #24
0
def test_reverse_neg():
	x1 = sad.AutoDiffReverse(4, 'x1')
	
	f = -x1
	assert f.der['x1'] ==  pytest.approx(-1.0)