Coverage for Adifpy/differentiate/forward_mode.py: 58%

12 statements  

« prev     ^ index     » next       coverage.py v6.5.0, created at 2022-11-22 19:44 -0500

1from Adifpy.differentiate import elementary_functions as ef 

2from Adifpy.differentiate.dual_number import DualNumber 

3 

4 

5def forward_mode(func, pt, seed_vector): 

6 """Compute the value and directional derivative at a point, for a given function 

7 

8 Forward mode AD calculates the derivative of function at point, 

9 with respect to some seed vector at machine precision. 

10 

11 NOTE: The current implementation only supports functions from R -> R, 

12 (so the seed vector should always be an array-like with a single number). 

13 

14 Args: 

15 pt (float | ndarray): the point at which to evaluate 

16 seed_vector (ndarray): the direction in which to evaluate 

17 

18 Returns: 

19 tuple: the value and directional derivative at the given point 

20 

21 >>> func = lambda x: x^2 + 3x 

22 >>> forward_mode(func, 1, [1]) 

23 (4, 5) 

24 """ 

25 

26 passed: DualNumber = func(DualNumber(pt, seed_vector)) 

27 

28 if not isinstance(passed, DualNumber): 

29 return (passed, 0) 

30 else: 

31 return (passed.real, passed.dual) 

32 

33if __name__ == "__main__": 

34 

35 def f(x): 

36 return ef.arctanh(x) / (ef.exp(x) ** 2 + ef.arcsin(x)) 

37 

38 print(f"Output: {forward_mode(f,0.45,1)}") 

39 

40 

41 print(forward_mode(lambda x : 0, 1, 1))