Coverage for geometry/tests/test_ellipse.py: 100%

1"""Define the unit tests for the :mod:`colour.geometry.ellipse` module."""

2

3 from __future__ import annotations

4

5 import numpy as np

6

7 from colour.constants import TOLERANCE_ABSOLUTE_TESTS

8 from colour.geometry import (

9 ellipse_coefficients_canonical_form,

10 ellipse_coefficients_general_form,

11 ellipse_fitting_Halir1998,

12 point_at_angle_on_ellipse,

13)

14

15 __author__ = "Colour Developers"

16 __copyright__ = "Copyright 2013 Colour Developers"

17 __license__ = "BSD-3-Clause - https://opensource.org/licenses/BSD-3-Clause"

18 __maintainer__ = "Colour Developers"

19 __email__ = "colour-developers@colour-science.org"

20 __status__ = "Production"

21

22 __all__ = [

23 "TestEllipseCoefficientsCanonicalForm",

24 "TestEllipseCoefficientsGeneralForm",

25 "TestPointAtAngleOnEllipse",

26 "TestEllipseFittingHalir1998",

27]

28

29

30 class TestEllipseCoefficientsCanonicalForm:

31 """

32 Define :func:`colour.geometry.ellipse.ellipse_coefficients_canonical_form`

33 definition unit tests methods.

34 """

35

36 def test_ellipse_coefficients_canonical_form(self) -> None:

37 """

38 Test :func:`colour.geometry.ellipse.\

39 ellipse_coefficients_canonical_form` definition.

40 """

41

42 np.testing.assert_allclose(

43 ellipse_coefficients_canonical_form(

44 np.array([2.5, -3.0, 2.5, -1.0, -1.0, -3.5])

45 ),

46 np.array([0.5, 0.5, 2, 1, 45]),

47 atol=TOLERANCE_ABSOLUTE_TESTS,

48 )

49

50 np.testing.assert_allclose(

51 ellipse_coefficients_canonical_form(

52 np.array([1.0, 0.0, 1.0, 0.0, 0.0, -1.0])

53 ),

54 np.array([0.0, 0.0, 1, 1, 0]),

55 atol=TOLERANCE_ABSOLUTE_TESTS,

56 )

57

58

59 class TestEllipseCoefficientsGeneralForm:

60 """

61 Define :func:`colour.geometry.ellipse.ellipse_coefficients_general_form`

62 definition unit tests methods.

63 """

64

65 def test_ellipse_coefficients_general_form(self) -> None:

66 """

67 Test :func:`colour.geometry.ellipse.ellipse_coefficients_general_form`

68 definition.

69 """

70

71 np.testing.assert_allclose(

72 ellipse_coefficients_general_form(np.array([0.5, 0.5, 2, 1, 45])),

73 np.array([2.5, -3.0, 2.5, -1.0, -1.0, -3.5]),

74 atol=TOLERANCE_ABSOLUTE_TESTS,

75 )

76

77 np.testing.assert_allclose(

78 ellipse_coefficients_general_form(np.array([0.0, 0.0, 1, 1, 0])),

79 np.array([1.0, 0.0, 1.0, 0.0, 0.0, -1.0]),

80 atol=TOLERANCE_ABSOLUTE_TESTS,

81 )

82

83

84 class TestPointAtAngleOnEllipse:

85 """

86 Define :func:`colour.geometry.ellipse.point_at_angle_on_ellipse`

87 definition unit tests methods.

88 """

89

90 def test_point_at_angle_on_ellipse(self) -> None:

91 """

92 Test :func:`colour.geometry.ellipse.point_at_angle_on_ellipse`

93 definition.

94 """

95

96 np.testing.assert_allclose(

97 point_at_angle_on_ellipse(

98 np.array([0, 90, 180, 270]), np.array([0.0, 0.0, 2, 1, 0])

99 ),

100 np.array([[2, 0], [0, 1], [-2, 0], [0, -1]]),

101 atol=TOLERANCE_ABSOLUTE_TESTS,

102 )

103

104 np.testing.assert_allclose(

105 point_at_angle_on_ellipse(

106 np.linspace(0, 360, 10), np.array([0.5, 0.5, 2, 1, 45])

107 ),

108 np.array(

109 [

110 [1.91421356, 1.91421356],

111 [1.12883096, 2.03786992],

112 [0.04921137, 1.44193985],

113 [-0.81947922, 0.40526565],

114 [-1.07077081, -0.58708129],

115 [-0.58708129, -1.07077081],

116 [0.40526565, -0.81947922],

117 [1.44193985, 0.04921137],

118 [2.03786992, 1.12883096],

119 [1.91421356, 1.91421356],

120 ]

121 ),

122 atol=TOLERANCE_ABSOLUTE_TESTS,

123 )

124

125

126 class TestEllipseFittingHalir1998:

127 """

128 Define :func:`colour.geometry.ellipse.ellipse_fitting_Halir1998`

129 definition unit tests methods.

130 """

131

132 def test_ellipse_fitting_Halir1998(self) -> None:

133 """

134 Test :func:`colour.geometry.ellipse.ellipse_fitting_Halir1998`

135 definition.

136 """

137

138 np.testing.assert_allclose(

139 ellipse_fitting_Halir1998(np.array([[2, 0], [0, 1], [-2, 0], [0, -1]])),

140 np.array(

141 [

142 0.24253563,

143 0.00000000,

144 0.97014250,

145 0.00000000,

146 0.00000000,

147 -0.97014250,

148 ]

149 ),

150 atol=TOLERANCE_ABSOLUTE_TESTS,

151 )