def test_arcsin_ad_results():
	# positive real numbers
	x = AutoDiff(0.5, 2)
	f = ef.arcsin(x)
	assert f.val == np.array([[np.arcsin(0.5)]])
	assert f.der == np.array([[2/np.sqrt(1-0.5**2)]])
	assert f.jacobian == np.array([[1/np.sqrt(1-0.5**2)]])

	# out of bounds - undefined sqrt
	with pytest.warns(RuntimeWarning):
		y = AutoDiff(-2, 2)
		f = ef.arcsin(y)
		assert np.isnan(f.val[0][0])
		assert np.isnan(f.der[0][0])
		assert np.isnan(f.jacobian[0][0])

	# out of bounds - div by zero
	with pytest.warns(RuntimeWarning):
		y = AutoDiff(1, 2)
		f = ef.arcsin(y)
		assert f.val == np.array([[np.arcsin(1)]])
		assert np.isinf(f.der[0][0])
		assert np.isinf(f.jacobian[0][0])

	# zero
	z = AutoDiff(0, 2)
	f = ef.arcsin(z)
	assert f.val == np.array([[0.0]])
	assert f.der == np.array([[2.0]])
	assert f.jacobian == np.array([[1.0]])
예제 #2
0
def test_arcsin_ad_results():
    # positive real numbers
    x = Dual(0.5, 2)
    f = ef.arcsin(x)
    assert f.Real == np.array([[np.arcsin(0.5)]])
    assert f.Dual == np.array([[2 / np.sqrt(1 - 0.5**2)]])

    # out of bounds - undefined sqrt
    with pytest.warns(RuntimeWarning):
        y = Dual(-2, 2)
        f = ef.arcsin(y)
        assert np.isnan(f.Real)
        assert np.isnan(f.Dual)

    # out of bounds - div by zero
    with pytest.warns(RuntimeWarning):
        y = Dual(1, 2)
        f = ef.arcsin(y)
        assert f.Real == np.array([[np.arcsin(1)]])
        assert np.isinf(f.Dual)

    # zero
    z = Dual(0, 2)
    f = ef.arcsin(z)
    assert f.Real == np.array([[0.0]])
    assert f.Dual == np.array([[2.0]])
def test_arcsin_constant_results():
	a = ef.arcsin(0.7)
	assert a == np.arcsin(0.7)

	b = ef.arcsin(0)
	assert b == np.arcsin(0)

	with pytest.warns(RuntimeWarning):
		c = ef.arcsin(-5)
		assert np.isnan(c)
def test_arcsin_types():
	with pytest.raises(TypeError):
		ef.arcsin('x')
	with pytest.raises(TypeError):
		ef.arcsin("1234")