Coverage for Adifpy/differentiate/elementary_functions.py: 54%

28 statements  

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

1"""Elementary functions for Dual Numbers, to be used by the user in passed-in functions""" 

2 

3import numpy as np 

4 

5from Adifpy.differentiate.dual_number import DualNumber 

6 

7 

8def exp(self: DualNumber): 

9 """Exponential function e^x""" 

10 return DualNumber(np.exp(self.real), 

11 np.exp(self.real) * self.dual) 

12 

13# Trigonometric Functions 

14def sin(self: DualNumber): 

15 return DualNumber(np.sin(self.real), 

16 np.cos(self.real) * self.dual) 

17 

18def cos(self: DualNumber): 

19 return DualNumber(np.cos(self.real), 

20 -np.sin(self.real) * self.dual) 

21 

22def tan(self: DualNumber): 

23 return DualNumber(np.tan(self.real), 

24 (1 / pow(np.cos(self.real), 2)) * self.dual) 

25 

26# Inverse Trigonometric Functions 

27def arcsin(self: DualNumber): 

28 return DualNumber(np.arcsin(self.real), 

29 pow(1 - pow(self.real,2), -1 / 2) * self.dual) 

30 

31def arccos(self: DualNumber): 

32 return DualNumber(np.arccos(self.real), 

33 -pow(1 - pow(self.real,2), -1 / 2)) * self.dual 

34 

35def arctan(self: DualNumber): 

36 return DualNumber(np.arctan(self.real), 

37 1 / (1 + pow(self.real, 2)) * self.dual) 

38 

39# Hyperbolic Trigonometric Functions 

40def sinh(self: DualNumber): 

41 return DualNumber(np.sinh(self.real), 

42 np.cosh(self.real) * self.dual) 

43 

44def cosh(self: DualNumber): 

45 return DualNumber(np.cosh(self.real), 

46 np.sinh(self.real) * self.dual) 

47 

48def tanh(self: DualNumber): 

49 return DualNumber(np.tanh(self.real), 

50 1 - pow(np.tanh(self.real), 2) * self.dual) 

51 

52# Inverse Hyperbolic Trigonometric Functions 

53def arcsinh(self): 

54 return DualNumber(np.arcsinh(self.real), 

55 pow(pow(self.real,2) + 1, -1 / 2) * self.dual) 

56 

57def arccosh(self): 

58 return DualNumber(np.arccosh(self.real), 

59 pow(pow(self.real,2) - 1, -1 / 2) * self.dual) 

60 

61def arctanh(self): 

62 return DualNumber(np.arctanh(self.real), 

63 pow(1 - pow(self.real,2), -1) * self.dual)