open-space-toolkit-mathematics 3.0.2__py310-none-manylinux2014_aarch64.whl → 3.1.0__py310-none-manylinux2014_aarch64.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of open-space-toolkit-mathematics might be problematic. Click here for more details.
- {open_space_toolkit_mathematics-3.0.2.dist-info → open_space_toolkit_mathematics-3.1.0.dist-info}/METADATA +1 -1
- {open_space_toolkit_mathematics-3.0.2.dist-info → open_space_toolkit_mathematics-3.1.0.dist-info}/RECORD +16 -15
- ostk/mathematics/OpenSpaceToolkitMathematicsPy.cpython-310-aarch64-linux-gnu.so +0 -0
- ostk/mathematics/libopen-space-toolkit-mathematics.so.3 +0 -0
- ostk/mathematics/test/curve_fitting/interpolator/test_barycentric_rational.py +1 -1
- ostk/mathematics/test/curve_fitting/interpolator/test_cubic_spline.py +1 -1
- ostk/mathematics/test/curve_fitting/interpolator/test_linear.py +1 -2
- ostk/mathematics/test/geometry/d3/object/test_linestring.py +3 -1
- ostk/mathematics/test/geometry/d3/transformation/rotation/test_euler_angle.py +138 -0
- ostk/mathematics/test/geometry/d3/transformation/rotation/test_quaternion.py +9 -8
- ostk/mathematics/test/geometry/d3/transformation/rotation/test_rotation_matrix.py +21 -22
- ostk/mathematics/test/geometry/d3/transformation/rotation/test_rotation_vector.py +36 -23
- ostk/mathematics/test/solver/test_numerical_solver.py +1 -1
- {open_space_toolkit_mathematics-3.0.2.dist-info → open_space_toolkit_mathematics-3.1.0.dist-info}/WHEEL +0 -0
- {open_space_toolkit_mathematics-3.0.2.dist-info → open_space_toolkit_mathematics-3.1.0.dist-info}/top_level.txt +0 -0
- {open_space_toolkit_mathematics-3.0.2.dist-info → open_space_toolkit_mathematics-3.1.0.dist-info}/zip-safe +0 -0
|
@@ -1,15 +1,15 @@
|
|
|
1
1
|
ostk/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
|
2
|
-
ostk/mathematics/OpenSpaceToolkitMathematicsPy.cpython-310-aarch64-linux-gnu.so,sha256=
|
|
2
|
+
ostk/mathematics/OpenSpaceToolkitMathematicsPy.cpython-310-aarch64-linux-gnu.so,sha256=eALYqQlT8m1t6hdSdQOE9L7UIEaZ7s0GUQJFGrNnblw,1447616
|
|
3
3
|
ostk/mathematics/__init__.py,sha256=U81I6jh2hIPyuT4dtZjNcLi-CQ8yXIvtFn32tVK1YCY,92
|
|
4
|
-
ostk/mathematics/libopen-space-toolkit-mathematics.so.3,sha256=
|
|
4
|
+
ostk/mathematics/libopen-space-toolkit-mathematics.so.3,sha256=oG3upafmZ8bFZwfVBJoT2urOovqUPJFU9IRdkiePiMU,2544152
|
|
5
5
|
ostk/mathematics/test/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
|
6
6
|
ostk/mathematics/test/test_object.py,sha256=WtksTu9zz8_UNkQYKLO64nNBFDBkRWM_DXFuAWTdKUM,1027
|
|
7
7
|
ostk/mathematics/test/curve_fitting/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
|
8
8
|
ostk/mathematics/test/curve_fitting/interpolator/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
|
9
|
-
ostk/mathematics/test/curve_fitting/interpolator/test_barycentric_rational.py,sha256=
|
|
10
|
-
ostk/mathematics/test/curve_fitting/interpolator/test_cubic_spline.py,sha256=
|
|
9
|
+
ostk/mathematics/test/curve_fitting/interpolator/test_barycentric_rational.py,sha256=T2aqrwvb48GrIsNzH2tZpwM5Pc7HQfPx73yvxx-0A6o,1117
|
|
10
|
+
ostk/mathematics/test/curve_fitting/interpolator/test_cubic_spline.py,sha256=h2u0_0neNHKzgh4-i25VWSGZLJe6bzP2waZ-GRy8thc,1378
|
|
11
11
|
ostk/mathematics/test/curve_fitting/interpolator/test_interpolator.py,sha256=46px5NKN8TJO9L9KbopsK9pixq0j3_Xu7PchDQTSEPQ,2093
|
|
12
|
-
ostk/mathematics/test/curve_fitting/interpolator/test_linear.py,sha256=
|
|
12
|
+
ostk/mathematics/test/curve_fitting/interpolator/test_linear.py,sha256=9axYpdxqQksp5SNEDdDgq2NMLyBO_q0Y-HYhEbsb9wY,1111
|
|
13
13
|
ostk/mathematics/test/geometry/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
|
14
14
|
ostk/mathematics/test/geometry/test_angle.py,sha256=HOzlWUApgN6LN0g0Zts0cFQ6In_nmbYpFb3CnWWHVR0,10136
|
|
15
15
|
ostk/mathematics/test/geometry/d2/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
|
@@ -33,7 +33,7 @@ ostk/mathematics/test/geometry/d3/object/__init__.py,sha256=epnVn2PwdQkUDZ1msqBR
|
|
|
33
33
|
ostk/mathematics/test/geometry/d3/object/test_composite.py,sha256=03wi6k35a2lwyM29q5STjqX4CHL1IofYm2hBzERQlzU,7710
|
|
34
34
|
ostk/mathematics/test/geometry/d3/object/test_cuboid.py,sha256=xJp6ImRnkNw_k6Tt8RaSXlsGnSqM-SlQSBfbm7SwJuA,470
|
|
35
35
|
ostk/mathematics/test/geometry/d3/object/test_line.py,sha256=d-CvDjXeH1WQcleCU2yt4FdHLhWgy45NGzn3mEwy6xE,1690
|
|
36
|
-
ostk/mathematics/test/geometry/d3/object/test_linestring.py,sha256=
|
|
36
|
+
ostk/mathematics/test/geometry/d3/object/test_linestring.py,sha256=L2gEJGDOaP17RgbLbX0-kBjskW_MrPLxVyf_l9yyxag,5938
|
|
37
37
|
ostk/mathematics/test/geometry/d3/object/test_point.py,sha256=-5Cjy3Pru3UWbMO7vBDNiJYfUkqVVxxZtDgsMYYaosc,6611
|
|
38
38
|
ostk/mathematics/test/geometry/d3/object/test_point_set.py,sha256=p5A1gM9UfB_-GgEavN-7Z8IgFc4qp1nAnHRYKTecvS0,3506
|
|
39
39
|
ostk/mathematics/test/geometry/d3/object/test_polygon.py,sha256=7ZjucWMsNzppN3pptxHgGgOtOGv1grseT7VnctgOJP4,4262
|
|
@@ -41,15 +41,16 @@ ostk/mathematics/test/geometry/d3/object/test_segment.py,sha256=HWg-BCJoa74EgWlv
|
|
|
41
41
|
ostk/mathematics/test/geometry/d3/objects/test_cuboid.py,sha256=uIDwPbkygXFIopKc2kayKYgadNfOKD_zxf3w2J4DfTY,471
|
|
42
42
|
ostk/mathematics/test/geometry/d3/transformation/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
|
43
43
|
ostk/mathematics/test/geometry/d3/transformation/rotation/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
|
44
|
-
ostk/mathematics/test/geometry/d3/transformation/rotation/
|
|
45
|
-
ostk/mathematics/test/geometry/d3/transformation/rotation/
|
|
46
|
-
ostk/mathematics/test/geometry/d3/transformation/rotation/
|
|
44
|
+
ostk/mathematics/test/geometry/d3/transformation/rotation/test_euler_angle.py,sha256=eTIxAqUfCQj6eZfoQgNu-1xFg0O4sbKk4n8XHQwXD2E,4393
|
|
45
|
+
ostk/mathematics/test/geometry/d3/transformation/rotation/test_quaternion.py,sha256=CFau3zwBUWj-KELNdjhCd88teUh8U9f0wpNDDeObr60,6867
|
|
46
|
+
ostk/mathematics/test/geometry/d3/transformation/rotation/test_rotation_matrix.py,sha256=Vwk-yiyxOav3glx1m-xAfAp-DOpDwT6Yl9xpjmRKPvI,819
|
|
47
|
+
ostk/mathematics/test/geometry/d3/transformation/rotation/test_rotation_vector.py,sha256=ngzrvqH_0QRGwNsWc2RupUkpsTU5vZI-eoh5q2BkKRQ,1568
|
|
47
48
|
ostk/mathematics/test/object/__init__.py,sha256=epnVn2PwdQkUDZ1msqBRO5nEZIOUBIq-IfK3IlNPijE,21
|
|
48
49
|
ostk/mathematics/test/object/test_interval.py,sha256=yZT4eo5kM4iBE1GBoOxlESaUl5QL3xdsZwrG-6fA7ME,17941
|
|
49
50
|
ostk/mathematics/test/object/test_vector.py,sha256=5MG3s8vhgoGKAIc5GzswlZObyIrJDIPNtsEd5wNORPU,76
|
|
50
|
-
ostk/mathematics/test/solver/test_numerical_solver.py,sha256=
|
|
51
|
-
open_space_toolkit_mathematics-3.0.
|
|
52
|
-
open_space_toolkit_mathematics-3.0.
|
|
53
|
-
open_space_toolkit_mathematics-3.0.
|
|
54
|
-
open_space_toolkit_mathematics-3.0.
|
|
55
|
-
open_space_toolkit_mathematics-3.0.
|
|
51
|
+
ostk/mathematics/test/solver/test_numerical_solver.py,sha256=YJo-z97w1tkRFJOAWjjvPywkBVCfCr9MJzuNi_cVIBg,5674
|
|
52
|
+
open_space_toolkit_mathematics-3.1.0.dist-info/METADATA,sha256=C_vG9FCjM6rXW17aseLQIv2fnAcHSzRixyvN9yMZmfg,1804
|
|
53
|
+
open_space_toolkit_mathematics-3.1.0.dist-info/WHEEL,sha256=uB5vyLu5FjXBtaffidQd32CfRXuOj_Nofldz4r8m62s,112
|
|
54
|
+
open_space_toolkit_mathematics-3.1.0.dist-info/top_level.txt,sha256=zOR18699uDYnafgarhL8WU_LmTZY_5NVqutv-flp_x4,5
|
|
55
|
+
open_space_toolkit_mathematics-3.1.0.dist-info/zip-safe,sha256=AbpHGcgLb-kRsJGnwFEktk7uzpZOCcBY74-YBdrKVGs,1
|
|
56
|
+
open_space_toolkit_mathematics-3.1.0.dist-info/RECORD,,
|
|
Binary file
|
|
Binary file
|
|
@@ -14,7 +14,7 @@ def interpolator() -> BarycentricRational:
|
|
|
14
14
|
|
|
15
15
|
|
|
16
16
|
class TestBarycentricRational:
|
|
17
|
-
def
|
|
17
|
+
def test_constructor_success(self, interpolator: BarycentricRational):
|
|
18
18
|
assert interpolator is not None
|
|
19
19
|
assert isinstance(interpolator, Interpolator)
|
|
20
20
|
assert isinstance(interpolator, BarycentricRational)
|
|
@@ -16,7 +16,7 @@ def interpolator() -> CubicSpline:
|
|
|
16
16
|
|
|
17
17
|
|
|
18
18
|
class TestCubicSpline:
|
|
19
|
-
def
|
|
19
|
+
def test_constructor_success(self, interpolator: CubicSpline):
|
|
20
20
|
assert interpolator is not None
|
|
21
21
|
assert isinstance(interpolator, Interpolator)
|
|
22
22
|
assert isinstance(interpolator, CubicSpline)
|
|
@@ -12,12 +12,11 @@ def interpolator() -> Linear:
|
|
|
12
12
|
|
|
13
13
|
|
|
14
14
|
class TestLinear:
|
|
15
|
-
def
|
|
15
|
+
def test_constructor_success(self, interpolator: Linear):
|
|
16
16
|
assert interpolator is not None
|
|
17
17
|
assert isinstance(interpolator, Interpolator)
|
|
18
18
|
assert isinstance(interpolator, Linear)
|
|
19
19
|
|
|
20
|
-
|
|
21
20
|
def test_evaluate(self):
|
|
22
21
|
interpolator = Linear(
|
|
23
22
|
x=[0.0, 1.0, 2.0, 4.0, 5.0, 6.0], y=[0.0, 3.0, 6.0, 9.0, 17.0, 5.0]
|
|
@@ -41,7 +41,9 @@ class TestLineString:
|
|
|
41
41
|
assert linestring.is_defined()
|
|
42
42
|
|
|
43
43
|
# Construction with Array of Points using python numpy array
|
|
44
|
-
linestring: LineString = LineString(
|
|
44
|
+
linestring: LineString = LineString(
|
|
45
|
+
np.array((point_1, point_2, point_3, point_4))
|
|
46
|
+
)
|
|
45
47
|
|
|
46
48
|
assert linestring is not None
|
|
47
49
|
assert isinstance(linestring, LineString)
|
|
@@ -0,0 +1,138 @@
|
|
|
1
|
+
# Apache License 2.0
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
import numpy as np
|
|
6
|
+
|
|
7
|
+
from ostk.mathematics.geometry import Angle
|
|
8
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import Quaternion
|
|
9
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import RotationVector
|
|
10
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import RotationMatrix
|
|
11
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import EulerAngle
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
@pytest.fixture
|
|
15
|
+
def euler_angle() -> EulerAngle:
|
|
16
|
+
return EulerAngle.unit()
|
|
17
|
+
|
|
18
|
+
|
|
19
|
+
class TestEulerAngle:
|
|
20
|
+
def test_constructor_success(self):
|
|
21
|
+
EulerAngle(
|
|
22
|
+
phi=Angle.zero(),
|
|
23
|
+
theta=Angle.zero(),
|
|
24
|
+
psi=Angle.zero(),
|
|
25
|
+
axis_sequence=EulerAngle.AxisSequence.ZYX,
|
|
26
|
+
)
|
|
27
|
+
|
|
28
|
+
EulerAngle(
|
|
29
|
+
vector=(0.0, 0.0, 0.0),
|
|
30
|
+
angle_unit=Angle.Unit.Degree,
|
|
31
|
+
axis_sequence=EulerAngle.AxisSequence.ZYX,
|
|
32
|
+
)
|
|
33
|
+
|
|
34
|
+
def test_operators_success(self, euler_angle: EulerAngle):
|
|
35
|
+
assert (euler_angle == euler_angle) is True
|
|
36
|
+
assert (euler_angle != euler_angle) is False
|
|
37
|
+
|
|
38
|
+
def test_str_success(self, euler_angle: EulerAngle):
|
|
39
|
+
assert str(euler_angle) is not None
|
|
40
|
+
|
|
41
|
+
def test_repr_success(self, euler_angle: EulerAngle):
|
|
42
|
+
assert repr(euler_angle) is not None
|
|
43
|
+
|
|
44
|
+
def test_is_defined_success(self, euler_angle: EulerAngle):
|
|
45
|
+
assert euler_angle.is_defined()
|
|
46
|
+
|
|
47
|
+
def test_is_unitary_success(self, euler_angle: EulerAngle):
|
|
48
|
+
assert euler_angle.is_unitary()
|
|
49
|
+
|
|
50
|
+
def test_is_near_success(self, euler_angle: EulerAngle):
|
|
51
|
+
assert euler_angle.is_near(
|
|
52
|
+
euler_angle=euler_angle,
|
|
53
|
+
angular_tolerance=Angle.zero(),
|
|
54
|
+
)
|
|
55
|
+
|
|
56
|
+
def test_properties_success(self, euler_angle: EulerAngle):
|
|
57
|
+
assert euler_angle.phi == Angle.degrees(0.0)
|
|
58
|
+
assert euler_angle.theta == Angle.degrees(0.0)
|
|
59
|
+
assert euler_angle.psi == Angle.degrees(0.0)
|
|
60
|
+
assert euler_angle.axis_sequence == EulerAngle.AxisSequence.ZYX
|
|
61
|
+
|
|
62
|
+
def test_to_vector_success(self, euler_angle: EulerAngle):
|
|
63
|
+
assert np.array_equal(
|
|
64
|
+
euler_angle.to_vector(angle_unit=Angle.Unit.Degree), np.array((0.0, 0.0, 0.0))
|
|
65
|
+
)
|
|
66
|
+
|
|
67
|
+
def test_to_string_success(self, euler_angle: EulerAngle):
|
|
68
|
+
assert euler_angle.to_string() == "[0, 0, 0] (ZYX)"
|
|
69
|
+
assert euler_angle.to_string(angle_unit=Angle.Unit.Degree) == "[0, 0, 0] (ZYX)"
|
|
70
|
+
|
|
71
|
+
def test_undefined_success(self):
|
|
72
|
+
assert not EulerAngle.undefined().is_defined()
|
|
73
|
+
|
|
74
|
+
def test_unit_success(self, euler_angle: EulerAngle):
|
|
75
|
+
assert EulerAngle.unit() == euler_angle
|
|
76
|
+
|
|
77
|
+
def test_xyz_success(self):
|
|
78
|
+
assert EulerAngle.xyz(
|
|
79
|
+
phi=Angle.zero(),
|
|
80
|
+
theta=Angle.zero(),
|
|
81
|
+
psi=Angle.zero(),
|
|
82
|
+
) == EulerAngle(
|
|
83
|
+
phi=Angle.zero(),
|
|
84
|
+
theta=Angle.zero(),
|
|
85
|
+
psi=Angle.zero(),
|
|
86
|
+
axis_sequence=EulerAngle.AxisSequence.XYZ,
|
|
87
|
+
)
|
|
88
|
+
|
|
89
|
+
def test_zxy_success(self):
|
|
90
|
+
assert EulerAngle.zxy(
|
|
91
|
+
phi=Angle.zero(),
|
|
92
|
+
theta=Angle.zero(),
|
|
93
|
+
psi=Angle.zero(),
|
|
94
|
+
) == EulerAngle(
|
|
95
|
+
phi=Angle.zero(),
|
|
96
|
+
theta=Angle.zero(),
|
|
97
|
+
psi=Angle.zero(),
|
|
98
|
+
axis_sequence=EulerAngle.AxisSequence.ZXY,
|
|
99
|
+
)
|
|
100
|
+
|
|
101
|
+
def test_zyx_success(self):
|
|
102
|
+
assert EulerAngle.zyx(
|
|
103
|
+
phi=Angle.zero(),
|
|
104
|
+
theta=Angle.zero(),
|
|
105
|
+
psi=Angle.zero(),
|
|
106
|
+
) == EulerAngle(
|
|
107
|
+
phi=Angle.zero(),
|
|
108
|
+
theta=Angle.zero(),
|
|
109
|
+
psi=Angle.zero(),
|
|
110
|
+
axis_sequence=EulerAngle.AxisSequence.ZYX,
|
|
111
|
+
)
|
|
112
|
+
|
|
113
|
+
def test_quaternion_success(self):
|
|
114
|
+
assert (
|
|
115
|
+
EulerAngle.quaternion(
|
|
116
|
+
quaternion=Quaternion.unit(),
|
|
117
|
+
axis_sequence=EulerAngle.AxisSequence.ZYX,
|
|
118
|
+
)
|
|
119
|
+
== EulerAngle.unit()
|
|
120
|
+
)
|
|
121
|
+
|
|
122
|
+
def test_rotation_vector_success(self):
|
|
123
|
+
assert (
|
|
124
|
+
EulerAngle.rotation_vector(
|
|
125
|
+
rotation_vector=RotationVector.unit(),
|
|
126
|
+
axis_sequence=EulerAngle.AxisSequence.ZYX,
|
|
127
|
+
)
|
|
128
|
+
== EulerAngle.unit()
|
|
129
|
+
)
|
|
130
|
+
|
|
131
|
+
def test_rotation_matrix_success(self):
|
|
132
|
+
assert (
|
|
133
|
+
EulerAngle.rotation_matrix(
|
|
134
|
+
rotation_matrix=RotationMatrix.unit(),
|
|
135
|
+
axis_sequence=EulerAngle.AxisSequence.ZYX,
|
|
136
|
+
)
|
|
137
|
+
== EulerAngle.unit()
|
|
138
|
+
)
|
|
@@ -4,13 +4,11 @@ import pytest
|
|
|
4
4
|
|
|
5
5
|
import numpy as np
|
|
6
6
|
|
|
7
|
-
from ostk.mathematics import
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
RotationVector = geometry.d3.transformation.rotation.RotationVector
|
|
13
|
-
RotationMatrix = geometry.d3.transformation.rotation.RotationMatrix
|
|
7
|
+
from ostk.mathematics.geometry import Angle
|
|
8
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import Quaternion
|
|
9
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import RotationVector
|
|
10
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import RotationMatrix
|
|
11
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import EulerAngle
|
|
14
12
|
|
|
15
13
|
|
|
16
14
|
@pytest.fixture
|
|
@@ -19,7 +17,7 @@ def quaternion() -> Quaternion:
|
|
|
19
17
|
|
|
20
18
|
|
|
21
19
|
class TestQuaternion:
|
|
22
|
-
def
|
|
20
|
+
def test_constructor_success(self, quaternion: Quaternion):
|
|
23
21
|
assert Quaternion(0.0, 0.0, 0.0, 1.0, Quaternion.Format.XYZS) == quaternion
|
|
24
22
|
assert (
|
|
25
23
|
Quaternion(np.array((0.0, 0.0, 0.0, 1.0)), Quaternion.Format.XYZS)
|
|
@@ -160,6 +158,9 @@ class TestQuaternion:
|
|
|
160
158
|
def test_rotation_matrix_success(self, quaternion: Quaternion):
|
|
161
159
|
assert Quaternion.rotation_matrix(RotationMatrix.rz(Angle.zero())) == quaternion
|
|
162
160
|
|
|
161
|
+
def test_euler_angle_success(self, quaternion: Quaternion):
|
|
162
|
+
assert Quaternion.euler_angle(EulerAngle.unit()) == quaternion
|
|
163
|
+
|
|
163
164
|
def test_parse_success(self, quaternion: Quaternion):
|
|
164
165
|
assert (
|
|
165
166
|
Quaternion.parse("[0.0, 0.0, 0.0, 1.0]", Quaternion.Format.XYZS) == quaternion
|
|
@@ -1,24 +1,23 @@
|
|
|
1
1
|
# Apache License 2.0
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
# RotationVector
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import Quaternion
|
|
6
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import RotationMatrix
|
|
7
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import EulerAngle
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
@pytest.fixture
|
|
11
|
+
def rotation_matrix() -> RotationMatrix:
|
|
12
|
+
return RotationMatrix.unit()
|
|
13
|
+
|
|
14
|
+
|
|
15
|
+
class TestRotationMatrix:
|
|
16
|
+
def test_is_defined_success(self, rotation_matrix: RotationMatrix):
|
|
17
|
+
assert rotation_matrix.is_defined() is True
|
|
18
|
+
|
|
19
|
+
def test_quaternion_success(self, rotation_matrix: RotationMatrix):
|
|
20
|
+
assert RotationMatrix.quaternion(Quaternion.unit()) == rotation_matrix
|
|
21
|
+
|
|
22
|
+
def test_euler_angle_success(self, rotation_matrix: RotationMatrix):
|
|
23
|
+
assert RotationMatrix.euler_angle(EulerAngle.unit()) == rotation_matrix
|
|
@@ -1,34 +1,47 @@
|
|
|
1
1
|
# Apache License 2.0
|
|
2
2
|
|
|
3
|
-
import
|
|
3
|
+
import pytest
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import numpy as np
|
|
6
6
|
|
|
7
|
+
from ostk.mathematics.geometry import Angle
|
|
8
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import Quaternion
|
|
9
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import RotationVector
|
|
10
|
+
from ostk.mathematics.geometry.d3.transformation.rotation import EulerAngle
|
|
7
11
|
|
|
8
|
-
Angle = geometry.Angle
|
|
9
|
-
Quaternion = geometry.d3.transformation.rotation.Quaternion
|
|
10
|
-
RotationVector = geometry.d3.transformation.rotation.RotationVector
|
|
11
12
|
|
|
13
|
+
@pytest.fixture
|
|
14
|
+
def rotation_vector() -> RotationVector:
|
|
15
|
+
return RotationVector.unit()
|
|
12
16
|
|
|
13
|
-
def test_geometry_d3_transformation_rotation_rotation_vector():
|
|
14
|
-
rv: RotationVector = RotationVector(
|
|
15
|
-
numpy.array([[0.0], [0.0], [1.0]], dtype=float), Angle.zero()
|
|
16
|
-
)
|
|
17
17
|
|
|
18
|
-
|
|
19
|
-
|
|
18
|
+
class TestRotationVector:
|
|
19
|
+
def test_constructor_success(self):
|
|
20
|
+
RotationVector(
|
|
21
|
+
axis=(0.0, 0.0, 1.0),
|
|
22
|
+
angle=Angle.zero(),
|
|
23
|
+
)
|
|
20
24
|
|
|
21
|
-
|
|
25
|
+
RotationVector(
|
|
26
|
+
vector=(0.0, 0.0, 1.0),
|
|
27
|
+
angle_unit=Angle.Unit.Degree,
|
|
28
|
+
)
|
|
22
29
|
|
|
23
|
-
|
|
24
|
-
|
|
30
|
+
def test_operators_success(self, rotation_vector: RotationVector):
|
|
31
|
+
assert (rotation_vector == rotation_vector) is True
|
|
32
|
+
assert (rotation_vector != rotation_vector) is False
|
|
25
33
|
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
34
|
+
def test_get_angle_success(self, rotation_vector: RotationVector):
|
|
35
|
+
assert rotation_vector.get_angle() == Angle.zero()
|
|
36
|
+
|
|
37
|
+
def test_is_defined_success(self, rotation_vector: RotationVector):
|
|
38
|
+
assert rotation_vector.is_defined() is True
|
|
39
|
+
|
|
40
|
+
def test_is_defined_success(self, rotation_vector: RotationVector):
|
|
41
|
+
rotation_vector.rectify()
|
|
42
|
+
|
|
43
|
+
def test_quaternion_success(self, rotation_vector: RotationVector):
|
|
44
|
+
assert RotationVector.quaternion(Quaternion.unit()) == rotation_vector
|
|
45
|
+
|
|
46
|
+
def test_euler_angle_success(self, rotation_vector: RotationVector):
|
|
47
|
+
assert RotationVector.euler_angle(EulerAngle.unit()) == rotation_vector
|
|
@@ -59,7 +59,7 @@ def numerical_solver_conditional() -> NumericalSolver:
|
|
|
59
59
|
|
|
60
60
|
|
|
61
61
|
class TestNumericalSolver:
|
|
62
|
-
def
|
|
62
|
+
def test_constructor_success(self, numerical_solver: NumericalSolver):
|
|
63
63
|
assert numerical_solver is not None
|
|
64
64
|
assert isinstance(numerical_solver, NumericalSolver)
|
|
65
65
|
assert numerical_solver.is_defined()
|
|
File without changes
|
|
File without changes
|
|
File without changes
|