open-space-toolkit-mathematics 4.6.0__py39-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.
- open_space_toolkit_mathematics-4.6.0.dist-info/METADATA +28 -0
- open_space_toolkit_mathematics-4.6.0.dist-info/RECORD +68 -0
- open_space_toolkit_mathematics-4.6.0.dist-info/WHEEL +5 -0
- open_space_toolkit_mathematics-4.6.0.dist-info/top_level.txt +1 -0
- open_space_toolkit_mathematics-4.6.0.dist-info/zip-safe +1 -0
- ostk/__init__.py +1 -0
- ostk/mathematics/OpenSpaceToolkitMathematicsPy.cpython-39-aarch64-linux-gnu.so +0 -0
- ostk/mathematics/__init__.py +5 -0
- ostk/mathematics/__init__.pyi +11 -0
- ostk/mathematics/curve_fitting/__init__.pyi +155 -0
- ostk/mathematics/curve_fitting/interpolator.pyi +243 -0
- ostk/mathematics/geometry/__init__.pyi +504 -0
- ostk/mathematics/geometry/d2/__init__.pyi +809 -0
- ostk/mathematics/geometry/d2/object.pyi +1779 -0
- ostk/mathematics/geometry/d3/__init__.pyi +1032 -0
- ostk/mathematics/geometry/d3/object.pyi +3709 -0
- ostk/mathematics/geometry/d3/transformation/__init__.pyi +3 -0
- ostk/mathematics/geometry/d3/transformation/rotation.pyi +1358 -0
- ostk/mathematics/libopen-space-toolkit-mathematics.so.4 +0 -0
- ostk/mathematics/object.pyi +387 -0
- ostk/mathematics/solver.pyi +342 -0
- ostk/mathematics/test/__init__.py +1 -0
- ostk/mathematics/test/curve_fitting/__init__.py +1 -0
- ostk/mathematics/test/curve_fitting/interpolator/__init__.py +1 -0
- ostk/mathematics/test/curve_fitting/interpolator/test_barycentric_rational.py +44 -0
- ostk/mathematics/test/curve_fitting/interpolator/test_cubic_spline.py +55 -0
- ostk/mathematics/test/curve_fitting/interpolator/test_interpolator.py +71 -0
- ostk/mathematics/test/curve_fitting/interpolator/test_linear.py +45 -0
- ostk/mathematics/test/geometry/__init__.py +1 -0
- ostk/mathematics/test/geometry/d2/__init__.py +1 -0
- ostk/mathematics/test/geometry/d2/conftest.py +79 -0
- ostk/mathematics/test/geometry/d2/object/__init__.py +1 -0
- ostk/mathematics/test/geometry/d2/object/test_composite.py +93 -0
- ostk/mathematics/test/geometry/d2/object/test_line.py +57 -0
- ostk/mathematics/test/geometry/d2/object/test_linestring.py +174 -0
- ostk/mathematics/test/geometry/d2/object/test_multipolygon.py +94 -0
- ostk/mathematics/test/geometry/d2/object/test_point.py +213 -0
- ostk/mathematics/test/geometry/d2/object/test_point_set.py +100 -0
- ostk/mathematics/test/geometry/d2/object/test_polygon.py +370 -0
- ostk/mathematics/test/geometry/d2/object/test_segment.py +104 -0
- ostk/mathematics/test/geometry/d2/test_object.py +25 -0
- ostk/mathematics/test/geometry/d2/test_transformation.py +84 -0
- ostk/mathematics/test/geometry/d3/__init__.py +1 -0
- ostk/mathematics/test/geometry/d3/object/__init__.py +1 -0
- ostk/mathematics/test/geometry/d3/object/test_composite.py +262 -0
- ostk/mathematics/test/geometry/d3/object/test_cuboid.py +20 -0
- ostk/mathematics/test/geometry/d3/object/test_line.py +68 -0
- ostk/mathematics/test/geometry/d3/object/test_linestring.py +168 -0
- ostk/mathematics/test/geometry/d3/object/test_point.py +234 -0
- ostk/mathematics/test/geometry/d3/object/test_point_set.py +113 -0
- ostk/mathematics/test/geometry/d3/object/test_polygon.py +141 -0
- ostk/mathematics/test/geometry/d3/object/test_segment.py +120 -0
- ostk/mathematics/test/geometry/d3/objects/test_cuboid.py +20 -0
- ostk/mathematics/test/geometry/d3/test_intersection.py +3 -0
- ostk/mathematics/test/geometry/d3/test_object.py +3 -0
- ostk/mathematics/test/geometry/d3/test_transformation.py +3 -0
- ostk/mathematics/test/geometry/d3/transformation/__init__.py +1 -0
- ostk/mathematics/test/geometry/d3/transformation/rotation/__init__.py +1 -0
- ostk/mathematics/test/geometry/d3/transformation/rotation/test_euler_angle.py +138 -0
- ostk/mathematics/test/geometry/d3/transformation/rotation/test_quaternion.py +189 -0
- ostk/mathematics/test/geometry/d3/transformation/rotation/test_rotation_matrix.py +40 -0
- ostk/mathematics/test/geometry/d3/transformation/rotation/test_rotation_vector.py +47 -0
- ostk/mathematics/test/geometry/test_angle.py +345 -0
- ostk/mathematics/test/object/__init__.py +1 -0
- ostk/mathematics/test/object/test_interval.py +515 -0
- ostk/mathematics/test/object/test_vector.py +5 -0
- ostk/mathematics/test/solver/test_numerical_solver.py +176 -0
- ostk/mathematics/test/test_object.py +24 -0
|
@@ -0,0 +1,345 @@
|
|
|
1
|
+
# Apache License 2.0
|
|
2
|
+
|
|
3
|
+
import pytest
|
|
4
|
+
|
|
5
|
+
import math
|
|
6
|
+
|
|
7
|
+
import ostk.mathematics as mathematics
|
|
8
|
+
|
|
9
|
+
|
|
10
|
+
Angle = mathematics.geometry.Angle
|
|
11
|
+
Unit = Angle.Unit
|
|
12
|
+
|
|
13
|
+
|
|
14
|
+
def test_angle_unit():
|
|
15
|
+
enum_members = Unit.__members__
|
|
16
|
+
|
|
17
|
+
list_keys = ["Undefined", "Radian", "Degree", "Arcminute", "Arcsecond", "Revolution"]
|
|
18
|
+
|
|
19
|
+
list_values = [
|
|
20
|
+
Unit.Undefined,
|
|
21
|
+
Unit.Radian,
|
|
22
|
+
Unit.Degree,
|
|
23
|
+
Unit.Arcminute,
|
|
24
|
+
Unit.Arcsecond,
|
|
25
|
+
Unit.Revolution,
|
|
26
|
+
]
|
|
27
|
+
|
|
28
|
+
assert list(enum_members.keys()) == list_keys
|
|
29
|
+
assert list(enum_members.values()) == list_values
|
|
30
|
+
|
|
31
|
+
|
|
32
|
+
def test_angle_default_constructor():
|
|
33
|
+
# Default constructor with Degree Unit
|
|
34
|
+
angle: Angle = Angle(12.34, Unit.Degree)
|
|
35
|
+
|
|
36
|
+
assert angle is not None
|
|
37
|
+
assert isinstance(angle, Angle)
|
|
38
|
+
assert angle.in_degrees() == 12.34
|
|
39
|
+
|
|
40
|
+
angle: Angle = Angle(-12.34, Unit.Degree)
|
|
41
|
+
|
|
42
|
+
assert angle is not None
|
|
43
|
+
assert isinstance(angle, Angle)
|
|
44
|
+
assert angle.in_degrees() == -12.34
|
|
45
|
+
|
|
46
|
+
angle: Angle = Angle(365.34, Unit.Degree)
|
|
47
|
+
|
|
48
|
+
assert angle is not None
|
|
49
|
+
assert isinstance(angle, Angle)
|
|
50
|
+
assert angle.in_degrees() == 365.34
|
|
51
|
+
|
|
52
|
+
angle: Angle = Angle(-4000.34, Unit.Degree)
|
|
53
|
+
|
|
54
|
+
assert angle is not None
|
|
55
|
+
assert isinstance(angle, Angle)
|
|
56
|
+
assert angle.in_degrees() == -4000.34
|
|
57
|
+
|
|
58
|
+
# Default constructor with Radian Unit
|
|
59
|
+
angle: Angle = Angle(3.4, Unit.Radian)
|
|
60
|
+
|
|
61
|
+
assert angle is not None
|
|
62
|
+
assert isinstance(angle, Angle)
|
|
63
|
+
assert angle.in_radians() == 3.4
|
|
64
|
+
|
|
65
|
+
# Default constructor with Arcminute Unit
|
|
66
|
+
angle: Angle = Angle(3600.0, Unit.Arcminute)
|
|
67
|
+
|
|
68
|
+
assert angle is not None
|
|
69
|
+
assert isinstance(angle, Angle)
|
|
70
|
+
assert angle.in_arcminutes() == 3600.0
|
|
71
|
+
|
|
72
|
+
# Default constructor with Arcsecond Unit
|
|
73
|
+
angle: Angle = Angle(3600.0, Unit.Arcsecond)
|
|
74
|
+
|
|
75
|
+
assert angle is not None
|
|
76
|
+
assert isinstance(angle, Angle)
|
|
77
|
+
assert angle.in_arcseconds() == 3600.0
|
|
78
|
+
|
|
79
|
+
# Default constructor with Revolution Unit
|
|
80
|
+
angle: Angle = Angle(18.0, Unit.Revolution)
|
|
81
|
+
|
|
82
|
+
assert angle is not None
|
|
83
|
+
assert isinstance(angle, Angle)
|
|
84
|
+
assert angle.in_revolutions() == 18.0
|
|
85
|
+
|
|
86
|
+
# Invalid construction
|
|
87
|
+
with pytest.raises(TypeError):
|
|
88
|
+
angle: Angle = Angle(45, Unit.Degree)
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def test_angle_undefined_constructor():
|
|
92
|
+
angle: Angle = Angle.undefined()
|
|
93
|
+
|
|
94
|
+
assert angle is not None
|
|
95
|
+
assert isinstance(angle, Angle)
|
|
96
|
+
assert angle.is_defined() is False
|
|
97
|
+
|
|
98
|
+
|
|
99
|
+
def test_angle_zero_constructor():
|
|
100
|
+
angle: Angle = Angle.zero()
|
|
101
|
+
|
|
102
|
+
assert angle is not None
|
|
103
|
+
assert isinstance(angle, Angle)
|
|
104
|
+
assert angle.is_defined() is True
|
|
105
|
+
assert angle.get_unit() == Unit.Radian
|
|
106
|
+
assert angle.is_zero() is True
|
|
107
|
+
assert angle.in_radians() == 0.0
|
|
108
|
+
assert angle.in_degrees() == 0.0
|
|
109
|
+
assert angle.in_arcminutes() == 0.0
|
|
110
|
+
assert angle.in_arcseconds() == 0.0
|
|
111
|
+
assert angle.in_revolutions() == 0.0
|
|
112
|
+
|
|
113
|
+
|
|
114
|
+
def test_angle_pi_constructors():
|
|
115
|
+
angle: Angle = Angle.half_pi()
|
|
116
|
+
|
|
117
|
+
assert angle is not None
|
|
118
|
+
assert isinstance(angle, Angle)
|
|
119
|
+
assert angle.is_defined()
|
|
120
|
+
assert angle.get_unit() == Unit.Radian
|
|
121
|
+
assert angle.in_radians() == math.pi / 2
|
|
122
|
+
|
|
123
|
+
angle: Angle = Angle.pi()
|
|
124
|
+
|
|
125
|
+
assert angle is not None
|
|
126
|
+
assert isinstance(angle, Angle)
|
|
127
|
+
assert angle.is_defined()
|
|
128
|
+
assert angle.get_unit() == Unit.Radian
|
|
129
|
+
assert angle.in_radians() == math.pi
|
|
130
|
+
|
|
131
|
+
angle: Angle = Angle.two_pi()
|
|
132
|
+
|
|
133
|
+
assert angle is not None
|
|
134
|
+
assert isinstance(angle, Angle)
|
|
135
|
+
assert angle.is_defined()
|
|
136
|
+
assert angle.get_unit() == Unit.Radian
|
|
137
|
+
assert angle.in_radians() == 2 * math.pi
|
|
138
|
+
|
|
139
|
+
|
|
140
|
+
def test_angle_unit_constructors():
|
|
141
|
+
# Radian
|
|
142
|
+
angle: Angle = Angle.radians(3.4)
|
|
143
|
+
|
|
144
|
+
assert angle is not None
|
|
145
|
+
assert isinstance(angle, Angle)
|
|
146
|
+
assert angle.is_defined()
|
|
147
|
+
assert angle.get_unit() == Unit.Radian
|
|
148
|
+
assert angle.in_radians() == 3.4
|
|
149
|
+
|
|
150
|
+
# Degree
|
|
151
|
+
angle: Angle = Angle.degrees(-45.0)
|
|
152
|
+
|
|
153
|
+
assert angle is not None
|
|
154
|
+
assert isinstance(angle, Angle)
|
|
155
|
+
assert angle.is_defined()
|
|
156
|
+
assert angle.get_unit() == Unit.Degree
|
|
157
|
+
assert angle.in_degrees() == -45.0
|
|
158
|
+
|
|
159
|
+
# Arcminutes
|
|
160
|
+
angle: Angle = Angle.arcminutes(60.5)
|
|
161
|
+
|
|
162
|
+
assert angle is not None
|
|
163
|
+
assert isinstance(angle, Angle)
|
|
164
|
+
assert angle.is_defined()
|
|
165
|
+
assert angle.get_unit() == Unit.Arcminute
|
|
166
|
+
assert angle.in_arcminutes() == 60.5
|
|
167
|
+
|
|
168
|
+
# Arcseconds
|
|
169
|
+
angle: Angle = Angle.arcseconds(60.5)
|
|
170
|
+
|
|
171
|
+
assert angle is not None
|
|
172
|
+
assert isinstance(angle, Angle)
|
|
173
|
+
assert angle.is_defined()
|
|
174
|
+
assert angle.get_unit() == Unit.Arcsecond
|
|
175
|
+
assert angle.in_arcseconds() == 60.5
|
|
176
|
+
|
|
177
|
+
# Revolutions
|
|
178
|
+
angle: Angle = Angle.revolutions(3.9)
|
|
179
|
+
|
|
180
|
+
assert angle is not None
|
|
181
|
+
assert isinstance(angle, Angle)
|
|
182
|
+
assert angle.is_defined()
|
|
183
|
+
assert angle.get_unit() == Unit.Revolution
|
|
184
|
+
assert angle.in_revolutions() == 3.9
|
|
185
|
+
|
|
186
|
+
|
|
187
|
+
def test_angle_unit_conversion():
|
|
188
|
+
angle: Angle = Angle(60.0, Unit.Degree)
|
|
189
|
+
|
|
190
|
+
assert angle.in_degrees() == 60.0
|
|
191
|
+
assert angle.in_radians() == (math.pi * 60.0 / 180.0)
|
|
192
|
+
assert angle.in_arcminutes() == 60.0 * 60.0
|
|
193
|
+
assert (angle.in_arcseconds() - 60.0 * 3600.0) <= 1e-10
|
|
194
|
+
|
|
195
|
+
|
|
196
|
+
def test_angle_comparators():
|
|
197
|
+
angle_deg: Angle = Angle(60.0, Unit.Degree)
|
|
198
|
+
angle_rad: Angle = Angle(60.0 * math.pi / 180.0, Unit.Radian)
|
|
199
|
+
|
|
200
|
+
assert angle_deg == angle_deg
|
|
201
|
+
assert angle_rad == angle_rad
|
|
202
|
+
assert angle_deg == angle_rad
|
|
203
|
+
assert angle_deg != Angle(59.0, Unit.Degree)
|
|
204
|
+
|
|
205
|
+
|
|
206
|
+
def test_angle_operators():
|
|
207
|
+
angle: Angle = Angle(30.0, Unit.Degree)
|
|
208
|
+
half_angle: Angle = angle / 2.0
|
|
209
|
+
double_angle: Angle = angle * 2.0
|
|
210
|
+
sum_angle: Angle = angle + angle
|
|
211
|
+
diff_angle: Angle = angle - angle
|
|
212
|
+
positive_angle: Angle = +angle
|
|
213
|
+
negative_angle: Angle = -angle
|
|
214
|
+
|
|
215
|
+
assert half_angle is not None
|
|
216
|
+
assert isinstance(half_angle, Angle)
|
|
217
|
+
assert double_angle is not None
|
|
218
|
+
assert isinstance(double_angle, Angle)
|
|
219
|
+
assert sum_angle is not None
|
|
220
|
+
assert isinstance(sum_angle, Angle)
|
|
221
|
+
assert diff_angle is not None
|
|
222
|
+
assert isinstance(diff_angle, Angle)
|
|
223
|
+
assert positive_angle is not None
|
|
224
|
+
assert isinstance(positive_angle, Angle)
|
|
225
|
+
assert negative_angle is not None
|
|
226
|
+
assert isinstance(negative_angle, Angle)
|
|
227
|
+
|
|
228
|
+
assert half_angle.in_degrees() == 15.0
|
|
229
|
+
assert double_angle.in_degrees() == 60.0
|
|
230
|
+
assert sum_angle.in_degrees() == 60.0
|
|
231
|
+
assert diff_angle.in_degrees() == 0.0
|
|
232
|
+
assert diff_angle.is_zero()
|
|
233
|
+
assert positive_angle.in_degrees() == +30.0
|
|
234
|
+
assert negative_angle.in_degrees() == -30.0
|
|
235
|
+
|
|
236
|
+
angle_deg: Angle = Angle(90.0, Unit.Degree)
|
|
237
|
+
angle_rad: Angle = Angle(math.pi / 2, Unit.Radian)
|
|
238
|
+
|
|
239
|
+
sum_angle: Angle = angle_rad + angle_deg
|
|
240
|
+
assert sum_angle is not None
|
|
241
|
+
assert isinstance(sum_angle, Angle)
|
|
242
|
+
assert (sum_angle.in_degrees() - 180.0) <= 1e-10
|
|
243
|
+
|
|
244
|
+
angle: Angle = Angle(90.0, Unit.Degree)
|
|
245
|
+
|
|
246
|
+
angle *= 3.0
|
|
247
|
+
assert angle is not None
|
|
248
|
+
assert isinstance(angle, Angle)
|
|
249
|
+
assert angle.get_unit() == Unit.Degree
|
|
250
|
+
assert angle.in_degrees() == 270.0
|
|
251
|
+
|
|
252
|
+
angle /= 3.0
|
|
253
|
+
assert angle is not None
|
|
254
|
+
assert isinstance(angle, Angle)
|
|
255
|
+
assert angle.get_unit() == Unit.Degree
|
|
256
|
+
assert angle.in_degrees() == 90.0
|
|
257
|
+
|
|
258
|
+
|
|
259
|
+
# def test_angle_between_vector2d ():
|
|
260
|
+
|
|
261
|
+
# def test_angle_between_vector3d ():
|
|
262
|
+
|
|
263
|
+
# def test_angle_to_string ():
|
|
264
|
+
|
|
265
|
+
|
|
266
|
+
def test_angle_string_from_unit():
|
|
267
|
+
assert Angle.string_from_unit(Unit.Degree) == "Degree"
|
|
268
|
+
assert Angle.string_from_unit(Unit.Radian) == "Radian"
|
|
269
|
+
assert Angle.string_from_unit(Unit.Arcminute) == "Arcminute"
|
|
270
|
+
assert Angle.string_from_unit(Unit.Arcsecond) == "Arcsecond"
|
|
271
|
+
assert Angle.string_from_unit(Unit.Revolution) == "Revolution"
|
|
272
|
+
|
|
273
|
+
|
|
274
|
+
def test_angle_string_symbol_from_unit():
|
|
275
|
+
assert Angle.symbol_from_unit(Unit.Degree) == "deg"
|
|
276
|
+
assert Angle.symbol_from_unit(Unit.Radian) == "rad"
|
|
277
|
+
assert Angle.symbol_from_unit(Unit.Arcminute) == "amin"
|
|
278
|
+
assert Angle.symbol_from_unit(Unit.Arcsecond) == "asec"
|
|
279
|
+
assert Angle.symbol_from_unit(Unit.Revolution) == "rev"
|
|
280
|
+
|
|
281
|
+
|
|
282
|
+
def test_angle_in_radians_reduction():
|
|
283
|
+
angle: Angle = Angle(math.pi * 3 / 2, Unit.Radian)
|
|
284
|
+
assert angle.in_radians(lower_bound=-math.pi, upper_bound=math.pi) == -math.pi / 2
|
|
285
|
+
|
|
286
|
+
angle: Angle = Angle(math.pi / 2, Unit.Radian)
|
|
287
|
+
assert angle.in_radians(lower_bound=-math.pi, upper_bound=math.pi) == math.pi / 2
|
|
288
|
+
|
|
289
|
+
angle: Angle = Angle(-math.pi, Unit.Radian)
|
|
290
|
+
assert angle.in_radians(-math.pi, math.pi) == -math.pi
|
|
291
|
+
|
|
292
|
+
angle: Angle = Angle(math.pi, Unit.Radian)
|
|
293
|
+
assert angle.in_radians(-math.pi, math.pi) == -math.pi
|
|
294
|
+
|
|
295
|
+
|
|
296
|
+
def test_angle_in_degrees_reduction():
|
|
297
|
+
angle: Angle = Angle(359.0, Unit.Degree)
|
|
298
|
+
assert angle.in_degrees(lower_bound=-180.0, upper_bound=180.0) == -1.0
|
|
299
|
+
|
|
300
|
+
angle: Angle = Angle(1.0, Unit.Degree)
|
|
301
|
+
assert angle.in_degrees(lower_bound=-180.0, upper_bound=180.0) == 1.0
|
|
302
|
+
|
|
303
|
+
angle: Angle = Angle(-180.0, Unit.Degree)
|
|
304
|
+
assert angle.in_degrees(-180.0, 180.0) == -180.0
|
|
305
|
+
|
|
306
|
+
angle: Angle = Angle(180.0, Unit.Degree)
|
|
307
|
+
assert angle.in_degrees(-180.0, 180.0) == -180.0
|
|
308
|
+
|
|
309
|
+
|
|
310
|
+
def test_angle_in_arcminutes_reduction():
|
|
311
|
+
angle: Angle = Angle(359.0 * 60.0, Unit.Arcminute)
|
|
312
|
+
assert (
|
|
313
|
+
angle.in_arcminutes(lower_bound=-180.0 * 60.0, upper_bound=180.0 * 60.0) == -60.0
|
|
314
|
+
)
|
|
315
|
+
|
|
316
|
+
angle: Angle = Angle(60.0, Unit.Arcminute)
|
|
317
|
+
assert (
|
|
318
|
+
angle.in_arcminutes(lower_bound=-180.0 * 60.0, upper_bound=180.0 * 60.0) == 60.0
|
|
319
|
+
)
|
|
320
|
+
|
|
321
|
+
angle: Angle = Angle(-180.0 * 60.0, Unit.Arcminute)
|
|
322
|
+
assert angle.in_arcminutes(-180.0 * 60.0, 180.0 * 60.0) == -180.0 * 60.0
|
|
323
|
+
|
|
324
|
+
angle: Angle = Angle(180.0 * 60.0, Unit.Arcminute)
|
|
325
|
+
assert angle.in_arcminutes(-180.0 * 60.0, 180.0 * 60.0) == -180.0 * 60.0
|
|
326
|
+
|
|
327
|
+
|
|
328
|
+
def test_angle_in_arcseconds_reduction():
|
|
329
|
+
angle: Angle = Angle(359.0 * 3600.0, Unit.Arcsecond)
|
|
330
|
+
assert (
|
|
331
|
+
angle.in_arcseconds(lower_bound=-180.0 * 3600.0, upper_bound=180.0 * 3600.0)
|
|
332
|
+
== -3600.0
|
|
333
|
+
)
|
|
334
|
+
|
|
335
|
+
angle: Angle = Angle(3600.0, Unit.Arcsecond)
|
|
336
|
+
assert (
|
|
337
|
+
angle.in_arcseconds(lower_bound=-180.0 * 3600.0, upper_bound=180.0 * 3600.0)
|
|
338
|
+
== 3600.0
|
|
339
|
+
)
|
|
340
|
+
|
|
341
|
+
angle: Angle = Angle(-180 * 3600.0, Unit.Arcsecond)
|
|
342
|
+
assert angle.in_arcseconds(-180.0 * 3600.0, 180.0 * 3600.0) == -180.0 * 3600.0
|
|
343
|
+
|
|
344
|
+
angle: Angle = Angle(180.0 * 3600.0, Unit.Arcsecond)
|
|
345
|
+
assert angle.in_arcseconds(-180.0 * 3600.0, 180.0 * 3600.0) == -180.0 * 3600.0
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
# Apache License 2.0
|