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
« 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
5def forward_mode(func, pt, seed_vector):
6 """Compute the value and directional derivative at a point, for a given function
8 Forward mode AD calculates the derivative of function at point,
9 with respect to some seed vector at machine precision.
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).
14 Args:
15 pt (float | ndarray): the point at which to evaluate
16 seed_vector (ndarray): the direction in which to evaluate
18 Returns:
19 tuple: the value and directional derivative at the given point
21 >>> func = lambda x: x^2 + 3x
22 >>> forward_mode(func, 1, [1])
23 (4, 5)
24 """
26 passed: DualNumber = func(DualNumber(pt, seed_vector))
28 if not isinstance(passed, DualNumber):
29 return (passed, 0)
30 else:
31 return (passed.real, passed.dual)
33if __name__ == "__main__":
35 def f(x):
36 return ef.arctanh(x) / (ef.exp(x) ** 2 + ef.arcsin(x))
38 print(f"Output: {forward_mode(f,0.45,1)}")
41 print(forward_mode(lambda x : 0, 1, 1))