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]])
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")