Mostly by providing a "numpy shim" for CircuitPython, try to make the numpy tests run on all three systems. (a "scipy shim" might also be useful?) However, there are test failures. Is it worth working through them and getting this to a point where it could be included?
150 lines
4.9 KiB
Python
150 lines
4.9 KiB
Python
import math
|
|
try:
|
|
import numpy as np
|
|
except:
|
|
import ulab as np
|
|
|
|
try:
|
|
from scipy.special import erf, erfc, gamma, gammaln
|
|
except:
|
|
from ulab.vector import erf, erfc, gamma
|
|
from ulab.vector import lgamma as gammaln
|
|
|
|
try:
|
|
from math import isclose
|
|
except ImportError:
|
|
def isclose(a, b, *, rel_tol=1e-9, abs_tol=0):
|
|
return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
|
|
|
|
result = (np.sin(np.pi/2))
|
|
ref_result = 1.0
|
|
print(isclose(result, ref_result, rel_tol=1E-6, abs_tol=1E-6))
|
|
|
|
result = (np.cos(np.pi/2))
|
|
ref_result = 0.0
|
|
print(isclose(result, ref_result, rel_tol=1E-6, abs_tol=1E-6))
|
|
|
|
result = (np.tan(np.pi/2))
|
|
ref_result = 1.633123935319537e+16
|
|
print(isclose(result, ref_result, rel_tol=1E-6, abs_tol=1E-6))
|
|
|
|
result = (np.sinh(np.pi/2))
|
|
ref_result = 2.3012989023072947
|
|
print(isclose(result, ref_result, rel_tol=1E-6, abs_tol=1E-6))
|
|
|
|
result = (np.cosh(np.pi/2))
|
|
ref_result = 2.5091784786580567
|
|
print(isclose(result, ref_result, rel_tol=1E-6, abs_tol=1E-6))
|
|
|
|
result = (np.tanh(np.pi/2))
|
|
ref_result = 0.9171523356672744
|
|
print(isclose(result, ref_result, rel_tol=1E-6, abs_tol=1E-6))
|
|
|
|
ref_result = np.pi/2
|
|
result = (np.arcsin(np.sin(np.pi/2)))
|
|
print(isclose(result, ref_result, rel_tol=1E-6, abs_tol=1E-6))
|
|
|
|
result = (np.arccos(np.cos(np.pi/2)))
|
|
print(isclose(result, ref_result, rel_tol=1E-6, abs_tol=1E-6))
|
|
|
|
result = (np.arctan(np.tan(np.pi/2)))
|
|
print(isclose(result, ref_result, rel_tol=1E-6, abs_tol=1E-6))
|
|
|
|
result = (np.cosh(np.arccosh(np.pi/2)))
|
|
print(isclose(result, ref_result, rel_tol=1E-6, abs_tol=1E-6))
|
|
|
|
result = np.sinh((np.arcsinh(np.pi/2)))
|
|
print(isclose(result, ref_result, rel_tol=1E-6, abs_tol=1E-6))
|
|
|
|
print(np.degrees(np.pi))
|
|
print(np.radians(np.degrees(np.pi)))
|
|
print(np.floor(np.pi))
|
|
print(np.ceil(np.pi))
|
|
print(np.sqrt(np.pi))
|
|
print(np.exp(1))
|
|
print(np.log(np.exp(1)))
|
|
|
|
print(np.log2(2**1))
|
|
|
|
print(np.log10(10**1))
|
|
print(np.exp(1) - np.expm1(1))
|
|
|
|
x = np.array([-1, +1, +1, -1])
|
|
y = np.array([-1, -1, +1, +1])
|
|
result = (np.arctan2(y, x) * 180 / np.pi)
|
|
ref_result = np.array([-135.0, -45.0, 45.0, 135.0], dtype=np.float)
|
|
cmp_result = []
|
|
for i in range(len(x)):
|
|
cmp_result.append(isclose(result[i], ref_result[i], rel_tol=1E-9, abs_tol=1E-9))
|
|
print(cmp_result)
|
|
|
|
x = np.linspace(-2*np.pi, 2*np.pi, 5)
|
|
result = np.sin(x)
|
|
ref_result = np.array([2.4492936e-16, -1.2246468e-16, 0.0000000e+00, 1.2246468e-16, -2.4492936e-16], dtype=np.float)
|
|
cmp_result = []
|
|
for i in range(len(x)):
|
|
cmp_result.append(isclose(result[i], ref_result[i], rel_tol=1E-9, abs_tol=1E-9))
|
|
print(cmp_result)
|
|
|
|
result = np.cos(x)
|
|
ref_result = np.array([1., -1., 1., -1., 1.], dtype=np.float)
|
|
cmp_result = []
|
|
for i in range(len(x)):
|
|
cmp_result.append(isclose(result[i], ref_result[i], rel_tol=1E-9, abs_tol=1E-9))
|
|
print(cmp_result)
|
|
|
|
result = np.tan(x)
|
|
ref_result = np.array([2.4492936e-16, 1.2246468e-16, 0.0000000e+00, -1.2246468e-16, -2.4492936e-16], dtype=np.float)
|
|
cmp_result = []
|
|
for i in range(len(x)):
|
|
cmp_result.append(isclose(result[i], ref_result[i], rel_tol=1E-9, abs_tol=1E-9))
|
|
print(cmp_result)
|
|
|
|
result = np.sinh(x)
|
|
ref_result = np.array([-267.74489404, -11.54873936, 0., 11.54873936, 267.74489404], dtype=np.float)
|
|
cmp_result = []
|
|
for i in range(len(x)):
|
|
cmp_result.append(isclose(result[i], ref_result[i], rel_tol=1E-9, abs_tol=1E-9))
|
|
print(cmp_result)
|
|
|
|
result = np.cosh(x)
|
|
ref_result = np.array([267.74676148, 11.59195328, 1.0, 11.59195328, 267.74676148], dtype=np.float)
|
|
cmp_result = []
|
|
for i in range(len(x)):
|
|
cmp_result.append(isclose(result[i], ref_result[i], rel_tol=1E-9, abs_tol=1E-9))
|
|
print(cmp_result)
|
|
|
|
result = np.tanh(x)
|
|
ref_result = np.array([-0.9999930253396107, -0.99627207622075, 0.0, 0.99627207622075, 0.9999930253396107], dtype=np.float)
|
|
cmp_result = []
|
|
for i in range(len(x)):
|
|
cmp_result.append(isclose(result[i], ref_result[i], rel_tol=1E-9, abs_tol=1E-9))
|
|
print(cmp_result)
|
|
|
|
result = (erf(np.linspace(-3, 3, num=5)))
|
|
ref_result = np.array([-0.9999779095030014, -0.9661051464753108, 0.0, 0.9661051464753108, 0.9999779095030014], dtype=np.float)
|
|
cmp_result = []
|
|
for i in range(ref_result.size):
|
|
cmp_result.append(isclose(result[i], ref_result[i], rel_tol=1E-9, abs_tol=1E-9))
|
|
print(cmp_result)
|
|
|
|
result = (erfc(np.linspace(-3, 3, num=5)))
|
|
ref_result = np.array([1.99997791e+00, 1.96610515e+00, 1.00000000e+00, 3.38948535e-02, 2.20904970e-05], dtype=np.float)
|
|
cmp_result = []
|
|
for i in range(ref_result.size):
|
|
cmp_result.append(isclose(result[i], ref_result[i], rel_tol=1E-6, abs_tol=1E-6))
|
|
print(cmp_result)
|
|
|
|
result = (gamma(np.array([0, 0.5, 1, 5])))
|
|
ref_result = np.array([1.77245385, 1.0, 24.0])
|
|
cmp_result = []
|
|
cmp_result.append(math.isinf(result[0]))
|
|
for i in range(ref_result.size):
|
|
cmp_result.append(isclose(result[i+1], ref_result[i], rel_tol=1E-9, abs_tol=1E-9))
|
|
print(cmp_result)
|
|
|
|
result = (gammaln([0, -1, -2, -3, -4]))
|
|
cmp_result = []
|
|
for i in range(result.size):
|
|
cmp_result.append(math.isinf(result[i]))
|
|
print(cmp_result)
|