1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
|
"""
Wrapper functions to more user-friendly calling of certain math functions
whose output is different than the input in certain domains of the input.
"""
__all__ = ['sqrt', 'log', 'log2','logn','log10', 'power', 'arccos',
'arcsin', 'arctanh']
import numerix as _nx
from numerix import *
from type_check import isreal, asarray
__all__.extend([key for key in dir(_nx.fastumath) \
if key[0]!='_' and key not in __all__])
def _tocomplex(arr):
if arr.typecode() in ['f', 's', 'b', '1','w']:
return arr.astype('F')
else:
return arr.astype('D')
def _fix_real_lt_zero(x):
x = asarray(x)
if any(isreal(x) & (x<0)):
x = _tocomplex(x)
return asscalar(x)
def _fix_real_abs_gt_1(x):
x = asarray(x)
if any(isreal(x) & (abs(x)>1)):
x = _tocomplex(x)
return x
def sqrt(x):
x = _fix_real_lt_zero(x)
return fastumath.sqrt(x)
def log(x):
x = _fix_real_lt_zero(x)
return fastumath.log(x)
def log10(x):
x = _fix_real_lt_zero(x)
return fastumath.log10(x)
def logn(n,x):
""" Take log base n of x.
"""
x = _fix_real_lt_zero(x)
n = _fix_real_lt_zero(n)
return fastumath.log(x)/fastumath.log(n)
def log2(x):
""" Take log base 2 of x.
"""
x = _fix_real_lt_zero(x)
return fastumath.log(x)/fastumath.log(2)
def power(x, p):
x = _fix_real_lt_zero(x)
return fastumath.power(x, p)
def arccos(x):
x = _fix_real_abs_gt_1(x)
return fastumath.arccos(x)
def arcsin(x):
x = _fix_real_abs_gt_1(x)
return fastumath.arcsin(x)
def arctanh(x):
x = _fix_real_abs_gt_1(x)
return fastumath.arctanh(x)
|