def test_log_constant_results(): a = ef.log(0.5) assert a == np.log(0.5) with pytest.warns(RuntimeWarning): b = ef.log(0) assert np.isneginf(b) with pytest.warns(RuntimeWarning): b = ef.log(-0.5) assert np.isnan(b)
def test_log_results(): # Realue defined at positive real numbers x > 0 # Dualivative defined at real numbers x ≠ 0 X = Dual(0.5, 2) f = ef.log(X) assert f.Real == np.log(0.5) assert f.Dual == np.array([[2 / 0.5]]) # Dualivative not defined at x = 0 Y = Dual(0, 2) f = ef.log(Y) assert np.isneginf(f.Real) assert np.isinf(f.Dual) # Realue not defined at x < 0, Dualivative defined with pytest.warns(RuntimeWarning): Y = Dual(-0.5, 2) f = ef.log(Y) assert np.isnan(f.Real) assert f.Dual == np.array([[2 / -0.5]])
def test_log_results(): # value defined at positive real numbers x > 0 # derivative defined at real numbers x ≠ 0 X = AutoDiff(0.5, 2) f = ef.log(X) assert f.val == np.log(0.5) assert f.der == np.array([[2/0.5]]) assert f.jacobian == np.array([[1/0.5]]) # derivative not defined at x = 0 with pytest.warns(RuntimeWarning): Y = AutoDiff(0, 2) f = ef.log(Y) assert np.isneginf(f.val) assert np.isinf(f.der) assert np.isinf(f.jacobian) # value not defined at x < 0, derivative defined with pytest.warns(RuntimeWarning): Y = AutoDiff(-0.5, 2) f = ef.log(Y) assert np.isnan(f.val) assert f.der == np.array([[2/-0.5]]) assert f.jacobian == np.array([[1/-0.5]])
def test_log_types(): with pytest.raises(TypeError): ef.log('x') with pytest.raises(TypeError): ef.log("1234")