Skip to content

Commit 8cdd8bd

Browse files
tychedeliacatilac
authored andcommitted
Changes for parity.
1 parent 4ae9cee commit 8cdd8bd

1 file changed

Lines changed: 58 additions & 5 deletions

File tree

  • crates/processing_pyo3/mewnala

crates/processing_pyo3/mewnala/math.py

Lines changed: 58 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
"""Processing math methods and vector/quaternion types."""
2+
import math as _math
23
from .mewnala import math as _native_math
34
from math import (
45
sin, cos, tan,
5-
asin, acos, atan, atan2,
6-
sqrt, exp, log,
6+
atan, atan2,
77
ceil, floor,
88
degrees, radians,
99
)
@@ -18,13 +18,66 @@
1818
vec4 = _native_math.vec4
1919
quat = _native_math.quat
2020

21+
_NAN = float("nan")
22+
_INF = float("inf")
23+
24+
25+
def _safe_div(num, den):
26+
if den == 0:
27+
if num == 0:
28+
return _NAN
29+
return _INF if num > 0 else -_INF
30+
return num / den
31+
2132

2233
def sq(x):
2334
return x * x
2435

2536

2637
def pow(base, exponent):
27-
return base ** exponent
38+
if base < 0 and not float(exponent).is_integer():
39+
return _NAN
40+
try:
41+
return base ** exponent
42+
except (OverflowError, ZeroDivisionError):
43+
return _INF
44+
45+
46+
def sqrt(x):
47+
if x < 0:
48+
return _NAN
49+
return _math.sqrt(x)
50+
51+
52+
def exp(x):
53+
try:
54+
return _math.exp(x)
55+
except OverflowError:
56+
return _INF
57+
58+
59+
def log(x):
60+
if x == 0:
61+
return -_INF
62+
if x < 0:
63+
return _NAN
64+
return _math.log(x)
65+
66+
67+
def asin(x):
68+
if x < -1 or x > 1:
69+
return _NAN
70+
return _math.asin(x)
71+
72+
73+
def acos(x):
74+
if x < -1 or x > 1:
75+
return _NAN
76+
return _math.acos(x)
77+
78+
79+
def round(x):
80+
return _math.floor(x + 0.5)
2881

2982

3083
def constrain(value, low, high):
@@ -40,11 +93,11 @@ def lerp(start, stop, amt):
4093

4194

4295
def norm(value, start, stop):
43-
return (value - start) / (stop - start)
96+
return _safe_div(value - start, stop - start)
4497

4598

4699
def remap(value, start1, stop1, start2, stop2, within_bounds=False):
47-
mapped = start2 + (stop2 - start2) * ((value - start1) / (stop1 - start1))
100+
mapped = start2 + (stop2 - start2) * _safe_div(value - start1, stop1 - start1)
48101
if not within_bounds:
49102
return mapped
50103
if start2 < stop2:

0 commit comments

Comments
 (0)