def test_sqrt_constant_results(): a = ef.sqrt(5) assert a == np.sqrt(5) b = ef.sqrt(0) assert b == np.sqrt(0) # Value undefined when x < 0 with pytest.warns(RuntimeWarning): c = ef.sqrt(-5) assert np.isnan(c)
def test_sqrt_ad_results(): # Positive reals x = Dual(0.5, 2.0) f = ef.sqrt(x) assert f.Real == np.array([[np.sqrt(0.5)]]) assert f.Dual == np.array([[0.5 * 0.5**(-0.5) * 2.0]]) # Realue defined but Dualivative undefined when x == 0 with pytest.warns(RuntimeWarning): y = Dual(0, 2) f = ef.sqrt(y) assert f.Real == np.array([[0]]) assert np.isinf(f.Dual) # Realue and Dualivative undefined when x < 0 with pytest.warns(RuntimeWarning): z = Dual(-0.5, 2) f = ef.sqrt(z) assert np.isnan(f.Real) assert np.isnan(f.Dual)
def test_sqrt_ad_results(): # Positive reals x = AutoDiff(0.5, 2.0) f = ef.sqrt(x) assert f.val == np.array([[np.sqrt(0.5)]]) assert f.der == np.array([[0.5 * 0.5 ** (-0.5) * 2.0]]) assert f.jacobian == np.array([[0.5 * 0.5 ** (-0.5) * 1]]) # Value defined but derivative undefined when x == 0 with pytest.warns(RuntimeWarning): y = AutoDiff(0, 2) f = ef.sqrt(y) assert f.val == np.array([[0]]) assert np.isinf(f.der[0][0]) assert np.isinf(f.jacobian[0][0]) # Value and derivative undefined when x < 0 with pytest.warns(RuntimeWarning): z = AutoDiff(-0.5, 2) f = ef.sqrt(z) assert np.isnan(f.val[0][0]) assert np.isnan(f.der[0][0]) assert np.isnan(f.jacobian[0][0])
def test_sqrt_types(): with pytest.raises(TypeError): ef.sqrt('x') with pytest.raises(TypeError): ef.sqrt("1234")