Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion cherab/core/math/function/float/function6d/arg.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -21,7 +21,7 @@
from cherab.core.math.function.float.function6d.base cimport Function6D

cdef enum ArgLabel:
X, Y, Z, U, W, V
X, Y, Z, U, V, W

cdef class Arg6D(Function6D):
cdef ArgLabel _argument
24 changes: 12 additions & 12 deletions cherab/core/math/function/float/function6d/arg.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -28,7 +28,7 @@ cdef class Arg6D(Function6D):
This is used to pass coordinates through to other functions in the
function framework which expect a Function6D object.

Valid options for argument are "x", "y", "z", "u", "w", or "v".
Valid options for argument are "x", "y", "z", "u", "v", or "w".

>>> argx = Arg6D("x")
>>> argx(2, 3, 5, 7, 11, 13)
Expand All @@ -42,14 +42,14 @@ cdef class Arg6D(Function6D):
>>> argu = Arg6D("u")
>>> argu(2, 3, 5, 7, 11, 13)
7.0
>>> argw = Arg6D("w")
>>> argw(2, 3, 5, 7, 11, 13)
11.0
>>> argv = Arg6D("v")
>>> argv(2, 3, 5, 7, 11, 13)
11.0
>>> argw = Arg6D("w")
>>> argw(2, 3, 5, 7, 11, 13)
13.0

:param str argument: either "x", "y", "z", "u", "w", or "v", the argument to return
:param str argument: either "x", "y", "z", "u", "v", or "w", the argument to return
"""
def __init__(self, object argument):
if argument == "x":
Expand All @@ -60,14 +60,14 @@ cdef class Arg6D(Function6D):
self._argument = Z
elif argument == "u":
self._argument = U
elif argument == "w":
self._argument = W
elif argument == "v":
self._argument = V
elif argument == "w":
self._argument = W
else:
raise ValueError("The argument to Arg6D must be either 'x', 'y', 'z', 'u', 'w' or 'v'")
raise ValueError("The argument to Arg6D must be either 'x', 'y', 'z', 'u', 'v' or 'w'")

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:
if self._argument == X:
return x
elif self._argument == Y:
Expand All @@ -76,7 +76,7 @@ cdef class Arg6D(Function6D):
return z
elif self._argument == U:
return u
elif self._argument == W:
return w
else: # V
elif self._argument == V:
return v
else: # W
return w
4 changes: 2 additions & 2 deletions cherab/core/math/function/float/function6d/autowrap.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -46,8 +46,8 @@ cdef class PythonFunction6D(Function6D):
def __init__(self, object function):
self.function = function

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
return self.function(x, y, z, u, w, v)
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:
return self.function(x, y, z, u, v, w)


cdef Function6D autowrap_function6d(object obj):
Expand Down
2 changes: 1 addition & 1 deletion cherab/core/math/function/float/function6d/base.pxd
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ from raysect.core.math.function.float.base cimport FloatFunction


cdef class Function6D(FloatFunction):
cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999


cdef class AddFunction6D(Function6D):
Expand Down
124 changes: 62 additions & 62 deletions cherab/core/math/function/float/function6d/base.pyx

Large diffs are not rendered by default.

14 changes: 7 additions & 7 deletions cherab/core/math/function/float/function6d/blend.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ cdef class Blend6D(Function6D):
this function is as follows:

.. math::
v = (1 - f_m(x, y, z, u, w, v)) f_1(x, y, z, u, w, v) + f_m(x, y, z, u, w, v) f_2(x, y, z, u, w, v)
v = (1 - f_m(x, y, z, u, v, w)) f_1(x, y, z, u, v, w) + f_m(x, y, z, u, v, w) f_2(x, y, z, u, v, w)

The value of the mask function is clamped to the range [0, 1] if the sampled
value exceeds the required range.
Expand All @@ -48,18 +48,18 @@ cdef class Blend6D(Function6D):
self._f2 = autowrap_function6d(f2)
self._mask = autowrap_function6d(mask)

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:

cdef double t = clamp(self._mask.evaluate(x, y, z, u, w, v), 0.0, 1.0)
cdef double t = clamp(self._mask.evaluate(x, y, z, u, v, w), 0.0, 1.0)

# sample endpoints directly
if t == 0:
return self._f1.evaluate(x, y, z, u, w, v)
return self._f1.evaluate(x, y, z, u, v, w)

if t == 1:
return self._f2.evaluate(x, y, z, u, w, v)
return self._f2.evaluate(x, y, z, u, v, w)

# lerp between function values
cdef double f1 = self._f1.evaluate(x, y, z, u, w, v)
cdef double f2 = self._f2.evaluate(x, y, z, u, w, v)
cdef double f1 = self._f1.evaluate(x, y, z, u, v, w)
cdef double f2 = self._f2.evaluate(x, y, z, u, v, w)
return (1 - t) * f1 + t * f2
42 changes: 21 additions & 21 deletions cherab/core/math/function/float/function6d/cmath.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -32,8 +32,8 @@ cdef class Exp6D(Function6D):
def __init__(self, object function):
self._function = autowrap_function6d(function)

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
return cmath.exp(self._function.evaluate(x, y, z, u, w, v))
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:
return cmath.exp(self._function.evaluate(x, y, z, u, v, w))


cdef class Sin6D(Function6D):
Expand All @@ -45,8 +45,8 @@ cdef class Sin6D(Function6D):
def __init__(self, object function):
self._function = autowrap_function6d(function)

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
return cmath.sin(self._function.evaluate(x, y, z, u, w, v))
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:
return cmath.sin(self._function.evaluate(x, y, z, u, v, w))


cdef class Cos6D(Function6D):
Expand All @@ -58,8 +58,8 @@ cdef class Cos6D(Function6D):
def __init__(self, object function):
self._function = autowrap_function6d(function)

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
return cmath.cos(self._function.evaluate(x, y, z, u, w, v))
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:
return cmath.cos(self._function.evaluate(x, y, z, u, v, w))


cdef class Tan6D(Function6D):
Expand All @@ -71,8 +71,8 @@ cdef class Tan6D(Function6D):
def __init__(self, object function):
self._function = autowrap_function6d(function)

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
return cmath.tan(self._function.evaluate(x, y, z, u, w, v))
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:
return cmath.tan(self._function.evaluate(x, y, z, u, v, w))


cdef class Asin6D(Function6D):
Expand All @@ -84,8 +84,8 @@ cdef class Asin6D(Function6D):
def __init__(self, object function):
self._function = autowrap_function6d(function)

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
cdef double val = self._function.evaluate(x, y, z, u, w, v)
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:
cdef double val = self._function.evaluate(x, y, z, u, v, w)
if -1.0 <= val <= 1.0:
return cmath.asin(val)
raise ValueError("The function returned a value outside of the arcsine domain of [-1, 1].")
Expand All @@ -100,8 +100,8 @@ cdef class Acos6D(Function6D):
def __init__(self, object function):
self._function = autowrap_function6d(function)

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
cdef double val = self._function.evaluate(x, y, z, u, w, v)
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:
cdef double val = self._function.evaluate(x, y, z, u, v, w)
if -1.0 <= val <= 1.0:
return cmath.acos(val)
raise ValueError("The function returned a value outside of the arccosine domain of [-1, 1].")
Expand All @@ -116,8 +116,8 @@ cdef class Atan6D(Function6D):
def __init__(self, object function):
self._function = autowrap_function6d(function)

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
return cmath.atan(self._function.evaluate(x, y, z, u, w, v))
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:
return cmath.atan(self._function.evaluate(x, y, z, u, v, w))


cdef class Atan4Q6D(Function6D):
Expand All @@ -134,9 +134,9 @@ cdef class Atan4Q6D(Function6D):
self._numerator = autowrap_function6d(numerator)
self._denominator = autowrap_function6d(denominator)

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
return cmath.atan2(self._numerator.evaluate(x, y, z, u, w, v),
self._denominator.evaluate(x, y, z, u, w, v))
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:
return cmath.atan2(self._numerator.evaluate(x, y, z, u, v, w),
self._denominator.evaluate(x, y, z, u, v, w))


cdef class Sqrt6D(Function6D):
Expand All @@ -148,8 +148,8 @@ cdef class Sqrt6D(Function6D):
def __init__(self, object function):
self._function = autowrap_function6d(function)

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
cdef double f = self._function.evaluate(x, y, z, u, w, v)
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:
cdef double f = self._function.evaluate(x, y, z, u, v, w)
if f < 0: # complex values are not supported
raise ValueError("Math domain error in sqrt({0}). Sqrt of a negative value is not supported.".format(f))
return cmath.sqrt(f)
Expand All @@ -164,5 +164,5 @@ cdef class Erf6D(Function6D):
def __init__(self, object function):
self._function = autowrap_function6d(function)

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
return cmath.erf(self._function.evaluate(x, y, z, u, w, v))
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:
return cmath.erf(self._function.evaluate(x, y, z, u, v, w))
2 changes: 1 addition & 1 deletion cherab/core/math/function/float/function6d/constant.pyx
Original file line number Diff line number Diff line change
Expand Up @@ -45,5 +45,5 @@ cdef class Constant6D(Function6D):
def __init__(self, double value):
self._value = value

cdef double evaluate(self, double x, double y, double z, double u, double w, double v) except? -1e999:
cdef double evaluate(self, double x, double y, double z, double u, double v, double w) except? -1e999:
return self._value
18 changes: 9 additions & 9 deletions cherab/core/math/function/float/function6d/tests/test_arg.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,19 +31,19 @@ class TestArg6D(unittest.TestCase):

def test_arg(self):
testvals = [-1e10, -7, -0.001, 0.0, 0.00003, 10, 2.3e49]
for (x, y, z, u, w, v) in itertools.product(testvals, repeat=6):
for (x, y, z, u, v, w) in itertools.product(testvals, repeat=6):
argx = Arg6D("x")
argy = Arg6D("y")
argz = Arg6D("z")
argu = Arg6D("u")
argw = Arg6D("w")
argv = Arg6D("v")
self.assertEqual(argx(x, y, z, u, w, v), x, "Arg6D('x') call did not match reference value.")
self.assertEqual(argy(x, y, z, u, w, v), y, "Arg6D('y') call did not match reference value.")
self.assertEqual(argz(x, y, z, u, w, v), z, "Arg6D('z') call did not match reference value.")
self.assertEqual(argu(x, y, z, u, w, v), u, "Arg6D('u') call did not match reference value.")
self.assertEqual(argw(x, y, z, u, w, v), w, "Arg6D('w') call did not match reference value.")
self.assertEqual(argv(x, y, z, u, w, v), v, "Arg6D('v') call did not match reference value.")
argw = Arg6D("v")
argv = Arg6D("w")
self.assertEqual(argx(x, y, z, u, v, w), x, "Arg6D('x') call did not match reference value.")
self.assertEqual(argy(x, y, z, u, v, w), y, "Arg6D('y') call did not match reference value.")
self.assertEqual(argz(x, y, z, u, v, w), z, "Arg6D('z') call did not match reference value.")
self.assertEqual(argu(x, y, z, u, v, w), u, "Arg6D('u') call did not match reference value.")
self.assertEqual(argw(x, y, z, u, v, w), v, "Arg6D('v') call did not match reference value.")
self.assertEqual(argv(x, y, z, u, v, w), w, "Arg6D('w') call did not match reference value.")

def test_invalid_inputs(self):
with self.assertRaises(ValueError, msg="Arg6D did not raise ValueError with incorrect string."):
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,5 +33,5 @@ def test_constant(self):
self.assertIsInstance(function, Constant6D, "Autowrapped scalar float is not a Constant6D.")

def test_python_function(self):
function = _autowrap_function6d(lambda x, y, z, u, w, v: 10*x + 5*y + 2*z + u + 3*w + 4*v)
function = _autowrap_function6d(lambda x, y, z, u, v, w: 10*x + 5*y + 2*z + u + 3*v + 4*w)
self.assertIsInstance(function, PythonFunction6D, "Autowrapped function is not a PythonFunction6D.")
Loading
Loading