open-space-toolkit-mathematics 4.5.2__py310-none-manylinux2014_aarch64.whl → 4.5.4__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.

@@ -8,10 +8,29 @@ class Composite(ostk.mathematics.geometry.d2.Object):
8
8
  __hash__: typing.ClassVar[None] = None
9
9
  @staticmethod
10
10
  def empty() -> Composite:
11
- ...
11
+ """
12
+ Create an empty 2D composite (containing no objects).
13
+
14
+ Returns:
15
+ Composite: An empty composite object.
16
+
17
+ Example:
18
+ >>> empty_composite = Composite.empty()
19
+ >>> empty_composite.is_empty() # True
20
+ >>> empty_composite.get_object_count() # 0
21
+ """
12
22
  @staticmethod
13
23
  def undefined() -> Composite:
14
- ...
24
+ """
25
+ Create an undefined 2D composite.
26
+
27
+ Returns:
28
+ Composite: An undefined composite object.
29
+
30
+ Example:
31
+ >>> undefined_composite = Composite.undefined()
32
+ >>> undefined_composite.is_defined() # False
33
+ """
15
34
  def __add__(self, arg0: Composite) -> Composite:
16
35
  ...
17
36
  def __eq__(self, arg0: Composite) -> bool:
@@ -19,7 +38,16 @@ class Composite(ostk.mathematics.geometry.d2.Object):
19
38
  def __iadd__(self, arg0: Composite) -> Composite:
20
39
  ...
21
40
  def __init__(self, object: ostk.mathematics.geometry.d2.Object) -> None:
22
- ...
41
+ """
42
+ Create a 2D composite object from a single geometric object.
43
+
44
+ Args:
45
+ object (Object): The 2D geometric object to wrap in the composite.
46
+
47
+ Example:
48
+ >>> point = Point(1.0, 2.0)
49
+ >>> composite = Composite(point)
50
+ """
23
51
  def __ne__(self, arg0: Composite) -> bool:
24
52
  ...
25
53
  def __repr__(self) -> str:
@@ -27,73 +55,403 @@ class Composite(ostk.mathematics.geometry.d2.Object):
27
55
  def __str__(self) -> str:
28
56
  ...
29
57
  def access_object_at(self, index: int) -> ostk.mathematics.geometry.d2.Object:
30
- ...
58
+ """
59
+ Access the object at a specific index in the 2D composite.
60
+
61
+ Args:
62
+ index (int): The index of the object to access.
63
+
64
+ Returns:
65
+ Object: Reference to the object at the specified index.
66
+
67
+ Raises:
68
+ IndexError: If the index is out of bounds.
69
+
70
+ Example:
71
+ >>> composite = Composite(Point(1.0, 2.0))
72
+ >>> obj = composite.access_object_at(0)
73
+ """
31
74
  @typing.overload
32
75
  def any_contains(self, object: ostk.mathematics.geometry.d2.Object) -> bool:
33
- ...
76
+ """
77
+ Check if any object in the 2D composite contains another geometric object.
78
+
79
+ Args:
80
+ object (Object): The 2D object to check containment for.
81
+
82
+ Returns:
83
+ bool: True if any object in the composite contains the object, False otherwise.
84
+
85
+ Example:
86
+ >>> polygon1 = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
87
+ >>> polygon2 = Polygon([Point(2.0, 2.0), Point(3.0, 2.0), Point(3.0, 3.0)])
88
+ >>> composite = Composite(polygon1) + Composite(polygon2)
89
+ >>> point = Point(0.5, 0.5)
90
+ >>> composite.any_contains(point) # True
91
+ """
34
92
  @typing.overload
35
93
  def any_contains(self, composite: Composite) -> bool:
36
- ...
94
+ """
95
+ Check if any object in the 2D composite contains another composite.
96
+
97
+ Args:
98
+ composite (Composite): The composite to check containment for.
99
+
100
+ Returns:
101
+ bool: True if any object in this composite contains the other composite, False otherwise.
102
+
103
+ Example:
104
+ >>> outer_polygon = Polygon([Point(0.0, 0.0), Point(3.0, 0.0), Point(3.0, 3.0)])
105
+ >>> composite1 = Composite(outer_polygon)
106
+ >>> inner_composite = Composite(Point(1.5, 1.5))
107
+ >>> composite1.any_contains(inner_composite) # True
108
+ """
37
109
  def apply_transformation(self, transformation: typing.Any) -> None:
38
- ...
110
+ """
111
+ Apply a transformation to all objects in the 2D composite in place.
112
+
113
+ Args:
114
+ transformation (Transformation): The 2D transformation to apply.
115
+
116
+ Example:
117
+ >>> composite = Composite(Point(1.0, 2.0))
118
+ >>> transformation = Translation([1.0, 1.0])
119
+ >>> composite.apply_transformation(transformation)
120
+ """
39
121
  def as_composite(self) -> Composite:
40
- ...
122
+ """
123
+ Convert the composite to a 2D Composite object.
124
+
125
+ Returns:
126
+ Composite: The composite object contained in the composite.
127
+
128
+ Raises:
129
+ RuntimeError: If the composite does not contain a Composite.
130
+
131
+ Example:
132
+ >>> inner_composite = Composite(Point(1.0, 2.0))
133
+ >>> outer_composite = Composite(inner_composite)
134
+ >>> extracted_composite = outer_composite.as_composite()
135
+ """
41
136
  def as_line(self) -> Line:
42
- ...
137
+ """
138
+ Convert the composite to a 2D Line object.
139
+
140
+ Returns:
141
+ Line: The line object contained in the composite.
142
+
143
+ Raises:
144
+ RuntimeError: If the composite does not contain a Line.
145
+
146
+ Example:
147
+ >>> line = Line(Point(0.0, 0.0), np.array([1.0, 1.0]))
148
+ >>> composite = Composite(line)
149
+ >>> extracted_line = composite.as_line()
150
+ """
43
151
  def as_line_string(self) -> LineString:
44
- ...
152
+ """
153
+ Convert the composite to a 2D LineString object.
154
+
155
+ Returns:
156
+ LineString: The line string object contained in the composite.
157
+
158
+ Raises:
159
+ RuntimeError: If the composite does not contain a LineString.
160
+
161
+ Example:
162
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0), Point(2.0, 2.0)]
163
+ >>> line_string = LineString(points)
164
+ >>> composite = Composite(line_string)
165
+ >>> extracted_line_string = composite.as_line_string()
166
+ """
45
167
  def as_point(self) -> Point:
46
- ...
168
+ """
169
+ Convert the composite to a 2D Point object.
170
+
171
+ Returns:
172
+ Point: The point object contained in the composite.
173
+
174
+ Raises:
175
+ RuntimeError: If the composite does not contain a Point.
176
+
177
+ Example:
178
+ >>> composite = Composite(Point(1.0, 2.0))
179
+ >>> point = composite.as_point()
180
+ """
47
181
  def as_point_set(self) -> PointSet:
48
- ...
182
+ """
183
+ Convert the composite to a 2D PointSet object.
184
+
185
+ Returns:
186
+ PointSet: The point set object contained in the composite.
187
+
188
+ Raises:
189
+ RuntimeError: If the composite does not contain a PointSet.
190
+
191
+ Example:
192
+ >>> point_set = PointSet([Point(1.0, 2.0), Point(3.0, 4.0)])
193
+ >>> composite = Composite(point_set)
194
+ >>> extracted_set = composite.as_point_set()
195
+ """
49
196
  def as_polygon(self) -> Polygon:
50
- ...
197
+ """
198
+ Convert the composite to a 2D Polygon object.
199
+
200
+ Returns:
201
+ Polygon: The polygon object contained in the composite.
202
+
203
+ Raises:
204
+ RuntimeError: If the composite does not contain a Polygon.
205
+
206
+ Example:
207
+ >>> vertices = [Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)]
208
+ >>> polygon = Polygon(vertices)
209
+ >>> composite = Composite(polygon)
210
+ >>> extracted_polygon = composite.as_polygon()
211
+ """
51
212
  def as_segment(self) -> Segment:
52
- ...
213
+ """
214
+ Convert the composite to a 2D Segment object.
215
+
216
+ Returns:
217
+ Segment: The segment object contained in the composite.
218
+
219
+ Raises:
220
+ RuntimeError: If the composite does not contain a Segment.
221
+
222
+ Example:
223
+ >>> segment = Segment(Point(0.0, 0.0), Point(1.0, 1.0))
224
+ >>> composite = Composite(segment)
225
+ >>> extracted_segment = composite.as_segment()
226
+ """
53
227
  @typing.overload
54
228
  def contains(self, object: ostk.mathematics.geometry.d2.Object) -> bool:
55
- ...
229
+ """
230
+ Check if the 2D composite contains another geometric object.
231
+
232
+ Args:
233
+ object (Object): The 2D object to check containment for.
234
+
235
+ Returns:
236
+ bool: True if the composite contains the object, False otherwise.
237
+
238
+ Example:
239
+ >>> composite = Composite(Polygon([Point(0.0, 0.0), Point(2.0, 0.0), Point(2.0, 2.0)]))
240
+ >>> point = Point(1.0, 1.0)
241
+ >>> composite.contains(point) # True
242
+ """
56
243
  @typing.overload
57
244
  def contains(self, composite: Composite) -> bool:
58
- ...
245
+ """
246
+ Check if the 2D composite contains another composite.
247
+
248
+ Args:
249
+ composite (Composite): The composite to check containment for.
250
+
251
+ Returns:
252
+ bool: True if this composite contains the other composite, False otherwise.
253
+
254
+ Example:
255
+ >>> outer_composite = Composite(Polygon([Point(0.0, 0.0), Point(3.0, 0.0), Point(3.0, 3.0)]))
256
+ >>> inner_composite = Composite(Polygon([Point(1.0, 1.0), Point(2.0, 1.0), Point(2.0, 2.0)]))
257
+ >>> outer_composite.contains(inner_composite) # True
258
+ """
59
259
  def get_object_count(self) -> int:
60
- ...
260
+ """
261
+ Get the number of objects contained in the 2D composite.
262
+
263
+ Returns:
264
+ int: The number of objects in the composite.
265
+
266
+ Example:
267
+ >>> composite = Composite(Point(1.0, 2.0))
268
+ >>> count = composite.get_object_count() # 1
269
+ """
61
270
  @typing.overload
62
271
  def intersects(self, object: ostk.mathematics.geometry.d2.Object) -> bool:
63
- ...
272
+ """
273
+ Check if the 2D composite intersects with another geometric object.
274
+
275
+ Args:
276
+ object (Object): The 2D object to check intersection with.
277
+
278
+ Returns:
279
+ bool: True if the composite intersects the object, False otherwise.
280
+
281
+ Example:
282
+ >>> composite = Composite(Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)]))
283
+ >>> point = Point(0.5, 0.5)
284
+ >>> composite.intersects(point) # True
285
+ """
64
286
  @typing.overload
65
287
  def intersects(self, composite: Composite) -> bool:
66
- ...
288
+ """
289
+ Check if the 2D composite intersects with another composite.
290
+
291
+ Args:
292
+ composite (Composite): The composite to check intersection with.
293
+
294
+ Returns:
295
+ bool: True if the composites intersect, False otherwise.
296
+
297
+ Example:
298
+ >>> composite1 = Composite(Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)]))
299
+ >>> composite2 = Composite(Polygon([Point(0.5, 0.5), Point(1.5, 0.5), Point(1.5, 1.5)]))
300
+ >>> composite1.intersects(composite2) # True
301
+ """
67
302
  def is_composite(self) -> bool:
68
- ...
303
+ """
304
+ Check if the composite contains another 2D Composite object.
305
+
306
+ Returns:
307
+ bool: True if the composite contains a Composite, False otherwise.
308
+
309
+ Example:
310
+ >>> inner_composite = Composite(Point(1.0, 2.0))
311
+ >>> outer_composite = Composite(inner_composite)
312
+ >>> outer_composite.is_composite() # True
313
+ """
69
314
  def is_defined(self) -> bool:
70
- ...
315
+ """
316
+ Check if the 2D composite is defined.
317
+
318
+ Returns:
319
+ bool: True if the composite is defined, False otherwise.
320
+
321
+ Example:
322
+ >>> composite = Composite(Point(1.0, 2.0))
323
+ >>> composite.is_defined() # True
324
+ """
71
325
  def is_empty(self) -> bool:
72
- ...
326
+ """
327
+ Check if the 2D composite is empty (contains no objects).
328
+
329
+ Returns:
330
+ bool: True if the composite is empty, False otherwise.
331
+
332
+ Example:
333
+ >>> empty_composite = Composite.empty()
334
+ >>> empty_composite.is_empty() # True
335
+ """
73
336
  def is_line(self) -> bool:
74
- ...
337
+ """
338
+ Check if the composite contains a 2D Line object.
339
+
340
+ Returns:
341
+ bool: True if the composite contains a Line, False otherwise.
342
+
343
+ Example:
344
+ >>> line = Line(Point(0.0, 0.0), np.array([1.0, 1.0]))
345
+ >>> composite = Composite(line)
346
+ >>> composite.is_line() # True
347
+ """
75
348
  def is_line_string(self) -> bool:
76
- ...
349
+ """
350
+ Check if the composite contains a 2D LineString object.
351
+
352
+ Returns:
353
+ bool: True if the composite contains a LineString, False otherwise.
354
+
355
+ Example:
356
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0), Point(2.0, 2.0)]
357
+ >>> line_string = LineString(points)
358
+ >>> composite = Composite(line_string)
359
+ >>> composite.is_line_string() # True
360
+ """
77
361
  def is_point(self) -> bool:
78
- ...
362
+ """
363
+ Check if the composite contains a 2D Point object.
364
+
365
+ Returns:
366
+ bool: True if the composite contains a Point, False otherwise.
367
+
368
+ Example:
369
+ >>> composite = Composite(Point(1.0, 2.0))
370
+ >>> composite.is_point() # True
371
+ """
79
372
  def is_point_set(self) -> bool:
80
- ...
373
+ """
374
+ Check if the composite contains a 2D PointSet object.
375
+
376
+ Returns:
377
+ bool: True if the composite contains a PointSet, False otherwise.
378
+
379
+ Example:
380
+ >>> point_set = PointSet([Point(1.0, 2.0), Point(3.0, 4.0)])
381
+ >>> composite = Composite(point_set)
382
+ >>> composite.is_point_set() # True
383
+ """
81
384
  def is_polygon(self) -> bool:
82
- ...
385
+ """
386
+ Check if the composite contains a 2D Polygon object.
387
+
388
+ Returns:
389
+ bool: True if the composite contains a Polygon, False otherwise.
390
+
391
+ Example:
392
+ >>> vertices = [Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)]
393
+ >>> polygon = Polygon(vertices)
394
+ >>> composite = Composite(polygon)
395
+ >>> composite.is_polygon() # True
396
+ """
83
397
  def is_segment(self) -> bool:
84
- ...
398
+ """
399
+ Check if the composite contains a 2D Segment object.
400
+
401
+ Returns:
402
+ bool: True if the composite contains a Segment, False otherwise.
403
+
404
+ Example:
405
+ >>> segment = Segment(Point(0.0, 0.0), Point(1.0, 1.0))
406
+ >>> composite = Composite(segment)
407
+ >>> composite.is_segment() # True
408
+ """
85
409
  class Line(ostk.mathematics.geometry.d2.Object):
86
410
  __hash__: typing.ClassVar[None] = None
87
411
  @staticmethod
88
412
  def points(first_point: Point, second_point: Point) -> Line:
89
- ...
413
+ """
414
+ Create a line passing through two points.
415
+
416
+ Args:
417
+ first_point (Point): The first point.
418
+ second_point (Point): The second point.
419
+
420
+ Returns:
421
+ Line: A line passing through both points.
422
+
423
+ Example:
424
+ >>> point1 = Point(0.0, 0.0)
425
+ >>> point2 = Point(1.0, 1.0)
426
+ >>> line = Line.points(point1, point2)
427
+ """
90
428
  @staticmethod
91
429
  def undefined() -> Line:
92
- ...
430
+ """
431
+ Create an undefined line.
432
+
433
+ Returns:
434
+ Line: An undefined line.
435
+
436
+ Example:
437
+ >>> undefined_line = Line.undefined()
438
+ >>> undefined_line.is_defined() # False
439
+ """
93
440
  def __eq__(self, arg0: Line) -> bool:
94
441
  ...
95
442
  def __init__(self, point: Point, direction: numpy.ndarray[numpy.float64[2, 1]]) -> None:
96
- ...
443
+ """
444
+ Create a 2D line with a point and direction vector.
445
+
446
+ Args:
447
+ point (Point): A point on the line.
448
+ direction (np.array): The direction vector of the line.
449
+
450
+ Example:
451
+ >>> point = Point(0.0, 0.0)
452
+ >>> direction = np.array([1.0, 1.0])
453
+ >>> line = Line(point, direction)
454
+ """
97
455
  def __ne__(self, arg0: Line) -> bool:
98
456
  ...
99
457
  def __repr__(self) -> str:
@@ -101,38 +459,179 @@ class Line(ostk.mathematics.geometry.d2.Object):
101
459
  def __str__(self) -> str:
102
460
  ...
103
461
  def apply_transformation(self, transformation: typing.Any) -> None:
104
- ...
462
+ """
463
+ Apply a transformation to the line in place.
464
+
465
+ Args:
466
+ transformation (Transformation): The transformation to apply.
467
+
468
+ Example:
469
+ >>> line = Line.points(Point(0.0, 0.0), Point(1.0, 0.0))
470
+ >>> transformation = Translation([1.0, 1.0])
471
+ >>> line.apply_transformation(transformation)
472
+ """
105
473
  @typing.overload
106
474
  def contains(self, point: Point) -> bool:
107
- ...
475
+ """
476
+ Check if the line contains a point.
477
+
478
+ Args:
479
+ point (Point): The point to check.
480
+
481
+ Returns:
482
+ bool: True if the line contains the point, False otherwise.
483
+
484
+ Example:
485
+ >>> line = Line.points(Point(0.0, 0.0), Point(1.0, 1.0))
486
+ >>> line.contains(Point(0.5, 0.5)) # True
487
+ """
108
488
  @typing.overload
109
489
  def contains(self, point_set: PointSet) -> bool:
110
- ...
490
+ """
491
+ Check if the line contains all points in a point set.
492
+
493
+ Args:
494
+ point_set (PointSet): The set of points to check.
495
+
496
+ Returns:
497
+ bool: True if the line contains all points in the set, False otherwise.
498
+
499
+ Example:
500
+ >>> line = Line.points(Point(0.0, 0.0), Point(1.0, 1.0))
501
+ >>> points = PointSet([Point(0.5, 0.5), Point(0.25, 0.25)])
502
+ >>> line.contains(points)
503
+ """
111
504
  def distance_to(self, point: Point) -> ostk.core.type.Real:
112
- ...
505
+ """
506
+ Calculate the distance from the line to a point.
507
+
508
+ Args:
509
+ point (Point): The point to calculate distance to.
510
+
511
+ Returns:
512
+ float: The distance from the line to the point.
513
+
514
+ Example:
515
+ >>> line = Line.points(Point(0.0, 0.0), Point(1.0, 0.0))
516
+ >>> distance = line.distance_to(Point(0.5, 1.0)) # 1.0
517
+ """
113
518
  def get_direction(self) -> numpy.ndarray[numpy.float64[2, 1]]:
114
- ...
519
+ """
520
+ Get the direction vector of the line.
521
+
522
+ Returns:
523
+ Vector2d: The direction vector of the line.
524
+
525
+ Example:
526
+ >>> line = Line.points(Point(0.0, 0.0), Point(1.0, 1.0))
527
+ >>> direction = line.get_direction()
528
+ """
115
529
  def get_origin(self) -> Point:
116
- ...
530
+ """
531
+ Get the origin point of the line.
532
+
533
+ Returns:
534
+ Point: The origin point of the line.
535
+
536
+ Example:
537
+ >>> line = Line.points(Point(1.0, 2.0), Point(3.0, 4.0))
538
+ >>> origin = line.get_origin()
539
+ """
117
540
  def intersects(self, point: Point) -> bool:
118
- ...
541
+ """
542
+ Check if the line intersects with a point.
543
+
544
+ Args:
545
+ point (Point): The point to check intersection with.
546
+
547
+ Returns:
548
+ bool: True if the line intersects with the point, False otherwise.
549
+
550
+ Example:
551
+ >>> line = Line.points(Point(0.0, 0.0), Point(1.0, 1.0))
552
+ >>> line.intersects(Point(0.5, 0.5)) # True
553
+ """
119
554
  def is_defined(self) -> bool:
120
- ...
555
+ """
556
+ Check if the line is defined.
557
+
558
+ Returns:
559
+ bool: True if the line is defined, False otherwise.
560
+
561
+ Example:
562
+ >>> line = Line.points(Point(0.0, 0.0), Point(1.0, 1.0))
563
+ >>> line.is_defined() # True
564
+ """
121
565
  class LineString(ostk.mathematics.geometry.d2.Object):
122
566
  __hash__: typing.ClassVar[None] = None
123
567
  @staticmethod
124
568
  def empty() -> LineString:
125
- ...
569
+ """
570
+ Create an empty line string.
571
+
572
+ Returns:
573
+ LineString: An empty line string.
574
+
575
+ Example:
576
+ >>> empty_line = LineString.empty()
577
+ >>> empty_line.is_empty() # True
578
+ """
126
579
  def __eq__(self, arg0: LineString) -> bool:
127
580
  ...
128
581
  def __getitem__(self, index: int) -> Point:
129
- ...
582
+ """
583
+ Access a point by index (Python indexing support).
584
+
585
+ Args:
586
+ index (int): The index of the point to access.
587
+
588
+ Returns:
589
+ Point: The point at the specified index.
590
+
591
+ Raises:
592
+ IndexError: If the index is out of range.
593
+
594
+ Example:
595
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0)]
596
+ >>> line_string = LineString(points)
597
+ >>> first_point = line_string[0] # Point(0.0, 0.0)
598
+ """
130
599
  def __init__(self, points: list[Point]) -> None:
131
- ...
600
+ """
601
+ Create a 2D line string from a sequence of points.
602
+
603
+ Args:
604
+ points (list): A list of Point objects defining the line string.
605
+
606
+ Example:
607
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0), Point(2.0, 0.0)]
608
+ >>> line_string = LineString(points)
609
+ """
132
610
  def __iter__(self) -> typing.Iterator[Point]:
133
- ...
611
+ """
612
+ Make the line string iterable (Python for loop support).
613
+
614
+ Returns:
615
+ iterator: An iterator over the points in the line string.
616
+
617
+ Example:
618
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0)]
619
+ >>> line_string = LineString(points)
620
+ >>> for point in line_string:
621
+ ... print(point)
622
+ """
134
623
  def __len__(self) -> int:
135
- ...
624
+ """
625
+ Get the number of points in the line string (Python len() function).
626
+
627
+ Returns:
628
+ int: The number of points.
629
+
630
+ Example:
631
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0)]
632
+ >>> line_string = LineString(points)
633
+ >>> len(line_string) # 2
634
+ """
136
635
  def __ne__(self, arg0: LineString) -> bool:
137
636
  ...
138
637
  def __repr__(self) -> str:
@@ -140,31 +639,142 @@ class LineString(ostk.mathematics.geometry.d2.Object):
140
639
  def __str__(self) -> str:
141
640
  ...
142
641
  def apply_transformation(self, transformation: typing.Any) -> None:
143
- ...
642
+ """
643
+ Apply a transformation to the line string in place.
644
+
645
+ Args:
646
+ transformation (Transformation): The transformation to apply.
647
+
648
+ Example:
649
+ >>> line_string = LineString(points)
650
+ >>> transformation = Transformation.translation([1.0, 0.0])
651
+ >>> line_string.apply_transformation(transformation)
652
+ """
144
653
  def get_point_closest_to(self, point: Point) -> Point:
145
- ...
654
+ """
655
+ Get the point on the line string closest to a given point.
656
+
657
+ Args:
658
+ point (Point): The reference point.
659
+
660
+ Returns:
661
+ Point: The closest point on the line string.
662
+
663
+ Example:
664
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0), Point(2.0, 0.0)]
665
+ >>> line_string = LineString(points)
666
+ >>> closest = line_string.get_point_closest_to(Point(0.5, 0.5))
667
+ """
146
668
  def get_point_count(self) -> int:
147
- ...
669
+ """
670
+ Get the number of points in the line string.
671
+
672
+ Returns:
673
+ int: The number of points.
674
+
675
+ Example:
676
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0), Point(2.0, 0.0)]
677
+ >>> line_string = LineString(points)
678
+ >>> line_string.get_point_count() # 3
679
+ """
148
680
  def is_defined(self) -> bool:
149
- ...
681
+ """
682
+ Check if the line string is defined.
683
+
684
+ Returns:
685
+ bool: True if the line string is defined, False otherwise.
686
+
687
+ Example:
688
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0)]
689
+ >>> line_string = LineString(points)
690
+ >>> line_string.is_defined() # True
691
+ """
150
692
  def is_empty(self) -> bool:
151
- ...
693
+ """
694
+ Check if the line string is empty (has no points).
695
+
696
+ Returns:
697
+ bool: True if the line string is empty, False otherwise.
698
+
699
+ Example:
700
+ >>> empty_line = LineString.empty()
701
+ >>> empty_line.is_empty() # True
702
+ """
152
703
  def is_near(self, line_string: LineString, tolerance: ostk.core.type.Real) -> bool:
153
- ...
704
+ """
705
+ Check if the line string is near another line string.
706
+
707
+ Args:
708
+ line_string (LineString): The line string to check.
709
+ tolerance (float): The tolerance.
710
+
711
+ Returns:
712
+ bool: True if the line string is near another line string, False otherwise.
713
+
714
+ Example:
715
+ >>> line_string = LineString(points)
716
+ >>> line_string.is_near(LineString(points), 0.1) # True
717
+ """
154
718
  def to_string(self, format: ostk.mathematics.geometry.d2.Object.Format = ..., precision: ostk.core.type.Integer = ...) -> ostk.core.type.String:
155
- ...
719
+ """
720
+ Convert the line string to a string representation.
721
+
722
+ Args:
723
+ format (Object.Format, optional): The output format. Defaults to Standard.
724
+ precision (int, optional): The precision for floating point numbers. Defaults to undefined.
725
+
726
+ Returns:
727
+ str: String representation of the line string.
728
+
729
+ Example:
730
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0)]
731
+ >>> line_string = LineString(points)
732
+ >>> line_string.to_string()
733
+ """
156
734
  class MultiPolygon(ostk.mathematics.geometry.d2.Object):
157
735
  __hash__: typing.ClassVar[None] = None
158
736
  @staticmethod
159
737
  def polygon(polygon: Polygon) -> MultiPolygon:
160
- ...
738
+ """
739
+ Create a multi-polygon from a single polygon.
740
+
741
+ Args:
742
+ polygon (Polygon): The polygon to wrap in a multi-polygon.
743
+
744
+ Returns:
745
+ MultiPolygon: A multi-polygon containing the single polygon.
746
+
747
+ Example:
748
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
749
+ >>> multi_polygon = MultiPolygon.polygon(polygon)
750
+ >>> multi_polygon.get_polygon_count() # 1
751
+ """
161
752
  @staticmethod
162
753
  def undefined() -> MultiPolygon:
163
- ...
754
+ """
755
+ Create an undefined multi-polygon.
756
+
757
+ Returns:
758
+ MultiPolygon: An undefined multi-polygon object.
759
+
760
+ Example:
761
+ >>> undefined_multi_polygon = MultiPolygon.undefined()
762
+ >>> undefined_multi_polygon.is_defined() # False
763
+ """
164
764
  def __eq__(self, arg0: MultiPolygon) -> bool:
165
765
  ...
166
766
  def __init__(self, polygons: list[Polygon]) -> None:
167
- ...
767
+ """
768
+ Create a multi-polygon from an array of polygons.
769
+
770
+ Args:
771
+ polygons (list): List of Polygon objects to combine into a multi-polygon.
772
+
773
+ Example:
774
+ >>> polygon1 = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
775
+ >>> polygon2 = Polygon([Point(2.0, 2.0), Point(3.0, 2.0), Point(3.0, 3.0)])
776
+ >>> multi_polygon = MultiPolygon([polygon1, polygon2])
777
+ """
168
778
  def __ne__(self, arg0: MultiPolygon) -> bool:
169
779
  ...
170
780
  def __repr__(self) -> str:
@@ -172,42 +782,196 @@ class MultiPolygon(ostk.mathematics.geometry.d2.Object):
172
782
  def __str__(self) -> str:
173
783
  ...
174
784
  def apply_transformation(self, transformation: typing.Any) -> None:
175
- ...
785
+ """
786
+ Apply a transformation to all polygons in the multi-polygon in place.
787
+
788
+ Args:
789
+ transformation (Transformation): The 2D transformation to apply.
790
+
791
+ Example:
792
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
793
+ >>> multi_polygon = MultiPolygon([polygon])
794
+ >>> transformation = Translation([1.0, 1.0])
795
+ >>> multi_polygon.apply_transformation(transformation)
796
+ """
176
797
  @typing.overload
177
798
  def contains(self, point: Point) -> bool:
178
- ...
799
+ """
800
+ Check if the multi-polygon contains a point.
801
+
802
+ Args:
803
+ point (Point): The point to check for containment.
804
+
805
+ Returns:
806
+ bool: True if any polygon in the multi-polygon contains the point, False otherwise.
807
+
808
+ Example:
809
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(2.0, 0.0), Point(2.0, 2.0)])
810
+ >>> multi_polygon = MultiPolygon([polygon])
811
+ >>> multi_polygon.contains(Point(1.0, 1.0)) # True
812
+ >>> multi_polygon.contains(Point(3.0, 3.0)) # False
813
+ """
179
814
  @typing.overload
180
815
  def contains(self, point_set: PointSet) -> bool:
181
- ...
816
+ """
817
+ Check if the multi-polygon contains all points in a point set.
818
+
819
+ Args:
820
+ point_set (PointSet): The point set to check for containment.
821
+
822
+ Returns:
823
+ bool: True if the multi-polygon contains all points in the set, False otherwise.
824
+
825
+ Example:
826
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(3.0, 0.0), Point(3.0, 3.0)])
827
+ >>> multi_polygon = MultiPolygon([polygon])
828
+ >>> points = PointSet([Point(1.0, 1.0), Point(2.0, 2.0)])
829
+ >>> multi_polygon.contains(points) # True
830
+ """
182
831
  def get_convex_hull(self) -> Polygon:
183
- ...
832
+ """
833
+ Compute the convex hull of all polygons in the multi-polygon.
834
+
835
+ Returns:
836
+ Polygon: A polygon representing the convex hull of all vertices.
837
+
838
+ Example:
839
+ >>> polygon1 = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
840
+ >>> polygon2 = Polygon([Point(2.0, 2.0), Point(3.0, 2.0), Point(3.0, 3.0)])
841
+ >>> multi_polygon = MultiPolygon([polygon1, polygon2])
842
+ >>> convex_hull = multi_polygon.get_convex_hull()
843
+ """
184
844
  def get_polygon_count(self) -> int:
185
- ...
845
+ """
846
+ Get the number of polygons in the multi-polygon.
847
+
848
+ Returns:
849
+ int: The number of polygons contained in the multi-polygon.
850
+
851
+ Example:
852
+ >>> polygon1 = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
853
+ >>> polygon2 = Polygon([Point(2.0, 2.0), Point(3.0, 2.0), Point(3.0, 3.0)])
854
+ >>> multi_polygon = MultiPolygon([polygon1, polygon2])
855
+ >>> multi_polygon.get_polygon_count() # 2
856
+ """
186
857
  def get_polygons(self) -> list[Polygon]:
187
- ...
858
+ """
859
+ Get all polygons contained in the multi-polygon.
860
+
861
+ Returns:
862
+ list: List of Polygon objects contained in the multi-polygon.
863
+
864
+ Example:
865
+ >>> polygon1 = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
866
+ >>> polygon2 = Polygon([Point(2.0, 2.0), Point(3.0, 2.0), Point(3.0, 3.0)])
867
+ >>> multi_polygon = MultiPolygon([polygon1, polygon2])
868
+ >>> polygons = multi_polygon.get_polygons()
869
+ >>> len(polygons) # 2
870
+ """
188
871
  def is_defined(self) -> bool:
189
- ...
872
+ """
873
+ Check if the multi-polygon is defined.
874
+
875
+ Returns:
876
+ bool: True if the multi-polygon is defined, False otherwise.
877
+
878
+ Example:
879
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
880
+ >>> multi_polygon = MultiPolygon([polygon])
881
+ >>> multi_polygon.is_defined() # True
882
+ """
190
883
  def to_string(self, format: ostk.mathematics.geometry.d2.Object.Format = ..., precision: ostk.core.type.Integer = ...) -> ostk.core.type.String:
191
- ...
884
+ """
885
+ Convert the multi-polygon to a string representation.
886
+
887
+ Args:
888
+ format (Object.Format, optional): The output format. Defaults to Standard.
889
+ precision (int, optional): The precision for floating point numbers. Defaults to undefined.
890
+
891
+ Returns:
892
+ str: String representation of the multi-polygon.
893
+
894
+ Example:
895
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
896
+ >>> multi_polygon = MultiPolygon([polygon])
897
+ >>> multi_polygon.to_string()
898
+ """
192
899
  def union_with(self, multipolygon: MultiPolygon) -> MultiPolygon:
193
- ...
900
+ """
901
+ Compute the union of this multi-polygon with another multi-polygon.
902
+
903
+ Args:
904
+ multipolygon (MultiPolygon): The multi-polygon to union with.
905
+
906
+ Returns:
907
+ MultiPolygon: A new multi-polygon representing the union.
908
+
909
+ Example:
910
+ >>> polygon1 = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
911
+ >>> polygon2 = Polygon([Point(0.5, 0.5), Point(1.5, 0.5), Point(1.5, 1.5)])
912
+ >>> multi1 = MultiPolygon([polygon1])
913
+ >>> multi2 = MultiPolygon([polygon2])
914
+ >>> union_result = multi1.union_with(multi2)
915
+ """
194
916
  class Point(ostk.mathematics.geometry.d2.Object):
195
917
  __hash__: typing.ClassVar[None] = None
196
918
  @staticmethod
197
919
  def origin() -> Point:
198
- ...
920
+ """
921
+ Create a point at the origin (0, 0).
922
+
923
+ Returns:
924
+ Point: A point at coordinates (0, 0).
925
+
926
+ Example:
927
+ >>> origin = Point.origin()
928
+ >>> origin.x() # 0.0
929
+ >>> origin.y() # 0.0
930
+ """
199
931
  @staticmethod
200
932
  def undefined() -> Point:
201
- ...
933
+ """
934
+ Create an undefined point.
935
+
936
+ Returns:
937
+ Point: An undefined point.
938
+
939
+ Example:
940
+ >>> undefined_point = Point.undefined()
941
+ >>> undefined_point.is_defined() # False
942
+ """
202
943
  @staticmethod
203
944
  def vector(vector: numpy.ndarray[numpy.float64[2, 1]]) -> Point:
204
- ...
945
+ """
946
+ Create a point from a 2D vector.
947
+
948
+ Args:
949
+ vector (np.array): The vector to convert to a point.
950
+
951
+ Returns:
952
+ Point: A point with coordinates from the vector.
953
+
954
+ Example:
955
+ >>> vector = np.array([1.0, 2.0])
956
+ >>> point = Point.vector(vector) # Point(1.0, 2.0)
957
+ """
205
958
  def __add__(self, arg0: numpy.ndarray[numpy.float64[2, 1]]) -> Point:
206
959
  ...
207
960
  def __eq__(self, arg0: Point) -> bool:
208
961
  ...
209
962
  def __init__(self, x: ostk.core.type.Real, y: ostk.core.type.Real) -> None:
210
- ...
963
+ """
964
+ Create a 2D point with specified coordinates.
965
+
966
+ Args:
967
+ x (float): The x-coordinate.
968
+ y (float): The y-coordinate.
969
+
970
+ Example:
971
+ >>> point = Point(1.0, 2.0)
972
+ >>> point.x() # 1.0
973
+ >>> point.y() # 2.0
974
+ """
211
975
  def __ne__(self, arg0: Point) -> bool:
212
976
  ...
213
977
  def __repr__(self) -> str:
@@ -221,36 +985,178 @@ class Point(ostk.mathematics.geometry.d2.Object):
221
985
  def __sub__(self, arg0: numpy.ndarray[numpy.float64[2, 1]]) -> Point:
222
986
  ...
223
987
  def apply_transformation(self, transformation: typing.Any) -> None:
224
- ...
988
+ """
989
+ Apply a transformation to the point in place.
990
+
991
+ Args:
992
+ transformation (Transformation): The transformation to apply.
993
+
994
+ Example:
995
+ >>> point = Point(1.0, 2.0)
996
+ >>> transformation = Translation([1.0, 1.0])
997
+ >>> point.apply_transformation(transformation)
998
+ """
225
999
  def as_vector(self) -> numpy.ndarray[numpy.float64[2, 1]]:
226
- ...
1000
+ """
1001
+ Convert the point to a 2D vector.
1002
+
1003
+ Returns:
1004
+ Vector2d: The point as a 2D vector.
1005
+
1006
+ Example:
1007
+ >>> point = Point(1.0, 2.0)
1008
+ >>> vector = point.as_vector() # np.array([1.0, 2.0])
1009
+ """
227
1010
  def distance_to(self, point: Point) -> ostk.core.type.Real:
228
- ...
1011
+ """
1012
+ Calculate the distance to another point.
1013
+
1014
+ Args:
1015
+ point (Point): The other point.
1016
+
1017
+ Returns:
1018
+ float: The distance between the points.
1019
+
1020
+ Example:
1021
+ >>> point1 = Point(0.0, 0.0)
1022
+ >>> point2 = Point(3.0, 4.0)
1023
+ >>> point1.distance_to(point2) # 5.0
1024
+ """
229
1025
  def is_defined(self) -> bool:
230
- ...
1026
+ """
1027
+ Check if the point is defined.
1028
+
1029
+ Returns:
1030
+ bool: True if the point is defined, False otherwise.
1031
+
1032
+ Example:
1033
+ >>> point = Point(1.0, 2.0)
1034
+ >>> point.is_defined() # True
1035
+ """
231
1036
  def is_near(self, point: Point, tolerance: ostk.core.type.Real) -> bool:
232
- ...
1037
+ """
1038
+ Check if this point is near another point within a tolerance.
1039
+
1040
+ Args:
1041
+ point (Point): The point to compare with.
1042
+ tolerance (float): The tolerance for comparison.
1043
+
1044
+ Returns:
1045
+ bool: True if points are within tolerance, False otherwise.
1046
+
1047
+ Example:
1048
+ >>> point1 = Point(1.0, 2.0)
1049
+ >>> point2 = Point(1.1, 2.1)
1050
+ >>> point1.is_near(point2, 0.2) # True
1051
+ """
233
1052
  def to_string(self, format: ostk.mathematics.geometry.d2.Object.Format = ..., precision: ostk.core.type.Integer = ...) -> ostk.core.type.String:
234
- ...
1053
+ """
1054
+ Convert the point to a string representation.
1055
+
1056
+ Args:
1057
+ format (Object.Format, optional): The output format. Defaults to Standard.
1058
+ precision (int, optional): The precision for floating point numbers. Defaults to undefined.
1059
+
1060
+ Returns:
1061
+ str: String representation of the point.
1062
+
1063
+ Example:
1064
+ >>> point = Point(1.0, 2.0)
1065
+ >>> point.to_string() # "(1.0, 2.0)"
1066
+ """
235
1067
  def x(self) -> ostk.core.type.Real:
236
- ...
1068
+ """
1069
+ Get the x-coordinate of the point.
1070
+
1071
+ Returns:
1072
+ float: The x-coordinate.
1073
+
1074
+ Example:
1075
+ >>> point = Point(1.0, 2.0)
1076
+ >>> point.x() # 1.0
1077
+ """
237
1078
  def y(self) -> ostk.core.type.Real:
238
- ...
1079
+ """
1080
+ Get the y-coordinate of the point.
1081
+
1082
+ Returns:
1083
+ float: The y-coordinate.
1084
+
1085
+ Example:
1086
+ >>> point = Point(1.0, 2.0)
1087
+ >>> point.y() # 2.0
1088
+ """
239
1089
  class PointSet(ostk.mathematics.geometry.d2.Object):
240
1090
  __hash__: typing.ClassVar[None] = None
241
1091
  @staticmethod
242
1092
  def empty() -> PointSet:
243
- ...
1093
+ """
1094
+ Create an empty point set.
1095
+
1096
+ Returns:
1097
+ PointSet: An empty point set containing no points.
1098
+
1099
+ Example:
1100
+ >>> empty_set = PointSet.empty()
1101
+ >>> empty_set.is_empty() # True
1102
+ >>> empty_set.get_size() # 0
1103
+ """
244
1104
  def __eq__(self, arg0: PointSet) -> bool:
245
1105
  ...
246
1106
  def __getitem__(self, arg0: int) -> Point:
247
- ...
1107
+ """
1108
+ Access a point by index (Python indexing support).
1109
+
1110
+ Args:
1111
+ index (int): The index of the point to access.
1112
+
1113
+ Returns:
1114
+ Point: The point at the specified index.
1115
+
1116
+ Raises:
1117
+ IndexError: If the index is out of range.
1118
+
1119
+ Example:
1120
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0)]
1121
+ >>> point_set = PointSet(points)
1122
+ >>> first_point = point_set[0] # Point(0.0, 0.0)
1123
+ """
248
1124
  def __init__(self, points: list[Point]) -> None:
249
- ...
1125
+ """
1126
+ Create a 2D point set from an array of points.
1127
+
1128
+ Args:
1129
+ points (list[Point]): List of Point objects to include in the set.
1130
+
1131
+ Example:
1132
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0), Point(2.0, 2.0)]
1133
+ >>> point_set = PointSet(points)
1134
+ """
250
1135
  def __iter__(self) -> typing.Iterator[Point]:
251
- ...
1136
+ """
1137
+ Make the point set iterable (Python for loop support).
1138
+
1139
+ Returns:
1140
+ iterator: An iterator over the points in the set.
1141
+
1142
+ Example:
1143
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0)]
1144
+ >>> point_set = PointSet(points)
1145
+ >>> for point in point_set:
1146
+ ... print(point)
1147
+ """
252
1148
  def __len__(self) -> int:
253
- ...
1149
+ """
1150
+ Get the number of points in the set (Python len() function).
1151
+
1152
+ Returns:
1153
+ int: The number of points in the set.
1154
+
1155
+ Example:
1156
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0)]
1157
+ >>> point_set = PointSet(points)
1158
+ >>> len(point_set) # 2
1159
+ """
254
1160
  def __ne__(self, arg0: PointSet) -> bool:
255
1161
  ...
256
1162
  def __repr__(self) -> str:
@@ -258,34 +1164,162 @@ class PointSet(ostk.mathematics.geometry.d2.Object):
258
1164
  def __str__(self) -> str:
259
1165
  ...
260
1166
  def apply_transformation(self, transformation: typing.Any) -> None:
261
- ...
1167
+ """
1168
+ Apply a transformation to all points in the set.
1169
+
1170
+ Args:
1171
+ transformation (Transformation): The 2D transformation to apply.
1172
+
1173
+ Example:
1174
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0)]
1175
+ >>> point_set = PointSet(points)
1176
+ >>> transformation = Translation([1.0, 1.0])
1177
+ >>> point_set.apply_transformation(transformation)
1178
+ """
262
1179
  def distance_to(self, point: Point) -> ostk.core.type.Real:
263
- ...
1180
+ """
1181
+ Calculate the distance from the point set to a point.
1182
+
1183
+ Args:
1184
+ point (Point): The point to calculate distance to.
1185
+
1186
+ Returns:
1187
+ float: The minimum distance from any point in the set to the given point.
1188
+
1189
+ Example:
1190
+ >>> points = [Point(0.0, 0.0), Point(2.0, 0.0)]
1191
+ >>> point_set = PointSet(points)
1192
+ >>> distance = point_set.distance_to(Point(1.0, 0.0)) # 1.0
1193
+ """
264
1194
  def get_point_closest_to(self, point: Point) -> Point:
265
- ...
1195
+ """
1196
+ Get the point in the set that is closest to a given point.
1197
+
1198
+ Args:
1199
+ point (Point): The reference point.
1200
+
1201
+ Returns:
1202
+ Point: The closest point in the set to the given point.
1203
+
1204
+ Example:
1205
+ >>> points = [Point(0.0, 0.0), Point(2.0, 0.0), Point(4.0, 0.0)]
1206
+ >>> point_set = PointSet(points)
1207
+ >>> closest = point_set.get_point_closest_to(Point(1.5, 0.0)) # Point(2.0, 0.0)
1208
+ """
266
1209
  def get_size(self) -> int:
267
- ...
1210
+ """
1211
+ Get the number of points in the set.
1212
+
1213
+ Returns:
1214
+ int: The number of points in the set.
1215
+
1216
+ Example:
1217
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0), Point(2.0, 2.0)]
1218
+ >>> point_set = PointSet(points)
1219
+ >>> point_set.get_size() # 3
1220
+ """
268
1221
  def is_defined(self) -> bool:
269
- ...
1222
+ """
1223
+ Check if the point set is defined.
1224
+
1225
+ Returns:
1226
+ bool: True if the point set is defined, False otherwise.
1227
+
1228
+ Example:
1229
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0)]
1230
+ >>> point_set = PointSet(points)
1231
+ >>> point_set.is_defined() # True
1232
+ """
270
1233
  def is_empty(self) -> bool:
271
- ...
1234
+ """
1235
+ Check if the point set is empty (contains no points).
1236
+
1237
+ Returns:
1238
+ bool: True if the point set is empty, False otherwise.
1239
+
1240
+ Example:
1241
+ >>> empty_set = PointSet.empty()
1242
+ >>> empty_set.is_empty() # True
1243
+ >>> points = [Point(0.0, 0.0)]
1244
+ >>> point_set = PointSet(points)
1245
+ >>> point_set.is_empty() # False
1246
+ """
272
1247
  def is_near(self, point_set: PointSet, tolerance: ostk.core.type.Real) -> bool:
273
- ...
1248
+ """
1249
+ Check if this point set is near another point set within tolerance.
1250
+
1251
+ Args:
1252
+ point_set (PointSet): The point set to compare with.
1253
+ tolerance (float): The tolerance for comparison.
1254
+
1255
+ Returns:
1256
+ bool: True if point sets are within tolerance, False otherwise.
1257
+
1258
+ Example:
1259
+ >>> points1 = [Point(0.0, 0.0), Point(1.0, 1.0)]
1260
+ >>> points2 = [Point(0.1, 0.1), Point(1.1, 1.1)]
1261
+ >>> set1 = PointSet(points1)
1262
+ >>> set2 = PointSet(points2)
1263
+ >>> set1.is_near(set2, 0.2) # True
1264
+ """
274
1265
  def to_string(self, format: ostk.mathematics.geometry.d2.Object.Format = ..., precision: ostk.core.type.Integer = ...) -> ostk.core.type.String:
275
- ...
1266
+ """
1267
+ Convert the point set to a string representation.
1268
+
1269
+ Args:
1270
+ format (Object.Format, optional): The output format. Defaults to Standard.
1271
+ precision (int, optional): The precision for floating point numbers. Defaults to undefined.
1272
+
1273
+ Returns:
1274
+ str: String representation of the point set.
1275
+
1276
+ Example:
1277
+ >>> points = [Point(0.0, 0.0), Point(1.0, 1.0)]
1278
+ >>> point_set = PointSet(points)
1279
+ >>> point_set.to_string()
1280
+ """
276
1281
  class Polygon(ostk.mathematics.geometry.d2.Object):
277
1282
  __hash__: typing.ClassVar[None] = None
278
1283
  @staticmethod
279
1284
  def undefined() -> Polygon:
280
- ...
1285
+ """
1286
+ Create an undefined polygon.
1287
+
1288
+ Returns:
1289
+ Polygon: An undefined polygon.
1290
+
1291
+ Example:
1292
+ >>> undefined_polygon = Polygon.undefined()
1293
+ >>> undefined_polygon.is_defined() # False
1294
+ """
281
1295
  def __eq__(self, arg0: Polygon) -> bool:
282
1296
  ...
283
1297
  @typing.overload
284
1298
  def __init__(self, outer_ring: list[Point], inner_rings: list[list[Point]]) -> None:
285
- ...
1299
+ """
1300
+ Create a polygon with outer ring and inner rings (holes).
1301
+
1302
+ Args:
1303
+ outer_ring (list[Point]): List of points defining the outer boundary.
1304
+ inner_rings (list[list[Point]]): List of lists of points defining holes.
1305
+
1306
+ Example:
1307
+ >>> outer = [Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)]
1308
+ >>> inner = [[Point(0.2, 0.2), Point(0.8, 0.2), Point(0.8, 0.8), Point(0.2, 0.8)]]
1309
+ >>> polygon = Polygon(outer, inner)
1310
+ """
286
1311
  @typing.overload
287
1312
  def __init__(self, outer_ring: list[Point]) -> None:
288
- ...
1313
+ """
1314
+ Create a simple polygon with just an outer ring.
1315
+
1316
+ Args:
1317
+ outer_ring (list[Point]): List of points defining the polygon boundary.
1318
+
1319
+ Example:
1320
+ >>> points = [Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)]
1321
+ >>> polygon = Polygon(points)
1322
+ """
289
1323
  def __ne__(self, arg0: Polygon) -> bool:
290
1324
  ...
291
1325
  def __repr__(self) -> str:
@@ -293,56 +1327,298 @@ class Polygon(ostk.mathematics.geometry.d2.Object):
293
1327
  def __str__(self) -> str:
294
1328
  ...
295
1329
  def apply_transformation(self, transformation: typing.Any) -> None:
296
- ...
1330
+ """
1331
+ Apply a transformation to the polygon in place.
1332
+
1333
+ Args:
1334
+ transformation (Transformation): The transformation to apply.
1335
+
1336
+ Example:
1337
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1338
+ >>> transformation = Translation([1.0, 1.0])
1339
+ >>> polygon.apply_transformation(transformation)
1340
+ """
297
1341
  @typing.overload
298
1342
  def contains(self, point: Point) -> bool:
299
- ...
1343
+ """
1344
+ Check if the polygon contains a point.
1345
+
1346
+ Args:
1347
+ point (Point): The point to check.
1348
+
1349
+ Returns:
1350
+ bool: True if the polygon contains the point, False otherwise.
1351
+
1352
+ Example:
1353
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1354
+ >>> polygon.contains(Point(0.5, 0.5)) # True
1355
+ """
300
1356
  @typing.overload
301
1357
  def contains(self, point_set: PointSet) -> bool:
302
- ...
1358
+ """
1359
+ Check if the polygon contains a point set.
1360
+
1361
+ Args:
1362
+ point_set (PointSet): The point set to check.
1363
+
1364
+ Returns:
1365
+ bool: True if the polygon contains the point set, False otherwise.
1366
+
1367
+ Example:
1368
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1369
+ >>> point_set = PointSet([Point(0.5, 0.5), Point(1.5, 0.5), Point(1.5, 1.5)])
1370
+ >>> polygon.contains(point_set) # True
1371
+ """
303
1372
  def difference_with(self, polygon: Polygon) -> ...:
304
- ...
1373
+ """
1374
+ Get the difference of the polygon with another polygon.
1375
+
1376
+ Args:
1377
+ polygon (Polygon): The polygon to check difference with.
1378
+
1379
+ Returns:
1380
+ Intersection: The difference of the polygon with another polygon.
1381
+
1382
+ Example:
1383
+ >>> polygon1 = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
1384
+ >>> polygon2 = Polygon([Point(0.01, 0.01), Point(1.01, 0.01), Point(1.01, 1.01)])
1385
+ >>> polygon1.difference_with(polygon2) # Intersection
1386
+ """
305
1387
  def get_convex_hull(self) -> Polygon:
306
- ...
1388
+ """
1389
+ Get the convex hull of the polygon.
1390
+
1391
+ Returns:
1392
+ Polygon: The convex hull of the polygon.
1393
+
1394
+ Example:
1395
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1396
+ >>> polygon.get_convex_hull()
1397
+ """
307
1398
  def get_edge_at(self, index: int) -> Segment:
308
- ...
1399
+ """
1400
+ Get the edge at the given index.
1401
+
1402
+ Args:
1403
+ index (int): The index of the edge.
1404
+
1405
+ Returns:
1406
+ Polygon.Edge: The edge at the given index.
1407
+
1408
+ Example:
1409
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1410
+ >>> polygon.get_edge_at(0)
1411
+ """
309
1412
  def get_edge_count(self) -> int:
310
- ...
1413
+ """
1414
+ Get the number of edges in the polygon.
1415
+
1416
+ Returns:
1417
+ int: The number of edges.
1418
+
1419
+ Example:
1420
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1421
+ >>> polygon.get_edge_count() # 4
1422
+ """
311
1423
  def get_edges(self) -> list[Segment]:
312
- ...
313
- def get_inner_ring_at(self, index: int) -> LineString:
314
- ...
1424
+ """
1425
+ Get all edges of the polygon.
1426
+
1427
+ Returns:
1428
+ list: List of all edges in the polygon.
1429
+
1430
+ Example:
1431
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1432
+ >>> polygon.get_edges()
1433
+ """
1434
+ def get_inner_ring_at(self, arg0: int) -> LineString:
1435
+ """
1436
+ Get the inner ring at the given index.
1437
+
1438
+ Args:
1439
+ index (int): The index of the inner ring.
1440
+
1441
+ Returns:
1442
+ Polygon.Ring: The inner ring at the given index.
1443
+
1444
+ Example:
1445
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1446
+ >>> polygon.get_inner_ring_at(0)
1447
+ """
315
1448
  def get_inner_ring_count(self) -> int:
316
- ...
1449
+ """
1450
+ Get the number of inner rings in the polygon.
1451
+
1452
+ Returns:
1453
+ int: The number of inner rings.
1454
+
1455
+ Example:
1456
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1457
+ >>> polygon.get_inner_ring_count() # 0
1458
+ """
317
1459
  def get_outer_ring(self) -> LineString:
318
- ...
1460
+ """
1461
+ Get the outer ring of the polygon.
1462
+
1463
+ Returns:
1464
+ Polygon.Ring: The outer ring of the polygon.
1465
+
1466
+ Example:
1467
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1468
+ >>> polygon.get_outer_ring()
1469
+ """
319
1470
  def get_vertex_at(self, index: int) -> Point:
320
- ...
1471
+ """
1472
+ Get the vertex at the given index.
1473
+
1474
+ Args:
1475
+ index (int): The index of the vertex.
1476
+
1477
+ Returns:
1478
+ Polygon.Vertex: The vertex at the given index.
1479
+
1480
+ Example:
1481
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1482
+ >>> polygon.get_vertex_at(0)
1483
+ """
321
1484
  def get_vertex_count(self) -> int:
322
- ...
1485
+ """
1486
+ Get the total number of vertices in the polygon.
1487
+
1488
+ Returns:
1489
+ int: The number of vertices.
1490
+
1491
+ Example:
1492
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1493
+ >>> polygon.get_vertex_count() # 4
1494
+ """
323
1495
  def get_vertices(self) -> list[Point]:
324
- ...
1496
+ """
1497
+ Get all vertices of the polygon.
1498
+
1499
+ Returns:
1500
+ list: List of all vertices in the polygon.
1501
+
1502
+ Example:
1503
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
1504
+ >>> vertices = polygon.get_vertices()
1505
+ """
325
1506
  def intersection_with(self, polygon: Polygon) -> ...:
326
- ...
1507
+ """
1508
+ Get the intersection of the polygon with another polygon.
1509
+
1510
+ Args:
1511
+ polygon (Polygon): The polygon to check intersection with.
1512
+
1513
+ Returns:
1514
+ Intersection: The intersection of the polygon with another polygon.
1515
+
1516
+ Example:
1517
+ >>> polygon1 = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
1518
+ >>> polygon2 = Polygon([Point(0.01, 0.01), Point(1.01, 0.01), Point(1.01, 1.01)])
1519
+ >>> polygon1.intersection_with(polygon2) # Intersection
1520
+ """
327
1521
  def intersects(self, polygon: Polygon) -> bool:
328
- ...
1522
+ """
1523
+ Check if the polygon intersects another polygon.
1524
+
1525
+ Args:
1526
+ polygon (Polygon): The polygon to check intersection with.
1527
+
1528
+ Returns:
1529
+ bool: True if the polygons intersect, False otherwise.
1530
+
1531
+ Example:
1532
+ >>> polygon1 = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
1533
+ >>> polygon2 = Polygon([Point(0.01, 0.01), Point(1.01, 0.01), Point(1.01, 1.01)])
1534
+ >>> polygon1.intersects(polygon2) # True
1535
+ """
329
1536
  def is_defined(self) -> bool:
330
- ...
1537
+ """
1538
+ Check if the polygon is defined.
1539
+
1540
+ Returns:
1541
+ bool: True if the polygon is defined, False otherwise.
1542
+
1543
+ Example:
1544
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
1545
+ >>> polygon.is_defined() # True
1546
+ """
331
1547
  def is_near(self, polygon: Polygon, tolerance: ostk.core.type.Real) -> bool:
332
- ...
1548
+ """
1549
+ Check if this polygon is near another polygon within tolerance.
1550
+
1551
+ Args:
1552
+ polygon (Polygon): The polygon to compare with.
1553
+ tolerance (float): The tolerance for comparison.
1554
+
1555
+ Returns:
1556
+ bool: True if polygons are within tolerance, False otherwise.
1557
+
1558
+ Example:
1559
+ >>> polygon1 = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0)])
1560
+ >>> polygon2 = Polygon([Point(0.01, 0.01), Point(1.01, 0.01), Point(1.01, 1.01)])
1561
+ >>> polygon1.is_near(polygon2, 0.1) # True
1562
+ """
333
1563
  def to_string(self, format: ostk.mathematics.geometry.d2.Object.Format = ..., precision: ostk.core.type.Integer = ...) -> ostk.core.type.String:
334
- ...
1564
+ """
1565
+ Get the string representation of the polygon.
1566
+
1567
+ Args:
1568
+ format (Object.Format, optional): The output format. Defaults to Standard.
1569
+ precision (int, optional): The precision for floating point numbers. Defaults to undefined.
1570
+
1571
+ Returns:
1572
+ str: String representation of the polygon.
1573
+
1574
+ Example:
1575
+ >>> polygon = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1576
+ >>> polygon.to_string()
1577
+ """
335
1578
  def union_with(self, polygon: Polygon) -> ...:
336
- ...
1579
+ """
1580
+ Get the union of the polygon with another polygon.
1581
+
1582
+ Args:
1583
+ polygon (Polygon): The polygon to union with.
1584
+
1585
+ Returns:
1586
+ Polygon: The union of the polygon with another polygon.
1587
+
1588
+ Example:
1589
+ >>> polygon1 = Polygon([Point(0.0, 0.0), Point(1.0, 0.0), Point(1.0, 1.0), Point(0.0, 1.0)])
1590
+ >>> polygon2 = Polygon([Point(0.01, 0.01), Point(1.01, 0.01), Point(1.01, 1.01), Point(0.01, 1.01)])
1591
+ >>> polygon1.union_with(polygon2)
1592
+ """
337
1593
  class Segment(ostk.mathematics.geometry.d2.Object):
338
1594
  __hash__: typing.ClassVar[None] = None
339
1595
  @staticmethod
340
1596
  def undefined() -> Segment:
341
- ...
1597
+ """
1598
+ Create an undefined segment.
1599
+
1600
+ Returns:
1601
+ Segment: An undefined segment object.
1602
+
1603
+ Example:
1604
+ >>> undefined_segment = Segment.undefined()
1605
+ >>> undefined_segment.is_defined() # False
1606
+ """
342
1607
  def __eq__(self, arg0: Segment) -> bool:
343
1608
  ...
344
1609
  def __init__(self, start_point: Point, end_point: Point) -> None:
345
- ...
1610
+ """
1611
+ Create a 2D segment defined by two endpoints.
1612
+
1613
+ Args:
1614
+ start_point (Point): The starting point of the segment.
1615
+ end_point (Point): The ending point of the segment.
1616
+
1617
+ Example:
1618
+ >>> start = Point(0.0, 0.0)
1619
+ >>> end = Point(1.0, 1.0)
1620
+ >>> segment = Segment(start, end)
1621
+ """
346
1622
  def __ne__(self, arg0: Segment) -> bool:
347
1623
  ...
348
1624
  def __repr__(self) -> str:
@@ -350,31 +1626,153 @@ class Segment(ostk.mathematics.geometry.d2.Object):
350
1626
  def __str__(self) -> str:
351
1627
  ...
352
1628
  def apply_transformation(self, transformation: typing.Any) -> None:
353
- ...
1629
+ """
1630
+ Apply a transformation to the segment in place.
1631
+
1632
+ Args:
1633
+ transformation (Transformation): The 2D transformation to apply.
1634
+
1635
+ Example:
1636
+ >>> segment = Segment(Point(0.0, 0.0), Point(1.0, 1.0))
1637
+ >>> transformation = Translation([1.0, 1.0])
1638
+ >>> segment.apply_transformation(transformation)
1639
+ """
354
1640
  @typing.overload
355
1641
  def distance_to(self, point: Point) -> ostk.core.type.Real:
356
- ...
1642
+ """
1643
+ Calculate the distance from the segment to a point.
1644
+
1645
+ Args:
1646
+ point (Point): The point to calculate distance to.
1647
+
1648
+ Returns:
1649
+ float: The minimum distance from the segment to the point.
1650
+
1651
+ Example:
1652
+ >>> segment = Segment(Point(0.0, 0.0), Point(2.0, 0.0))
1653
+ >>> distance = segment.distance_to(Point(1.0, 1.0)) # 1.0
1654
+ """
357
1655
  @typing.overload
358
1656
  def distance_to(self, point_set: PointSet) -> ostk.core.type.Real:
359
- ...
1657
+ """
1658
+ Calculate the distance from the segment to a point set.
1659
+
1660
+ Args:
1661
+ point_set (PointSet): The point set to calculate distance to.
1662
+
1663
+ Returns:
1664
+ float: The minimum distance from the segment to any point in the set.
1665
+
1666
+ Example:
1667
+ >>> segment = Segment(Point(0.0, 0.0), Point(2.0, 0.0))
1668
+ >>> points = PointSet([Point(1.0, 1.0), Point(3.0, 1.0)])
1669
+ >>> distance = segment.distance_to(points) # 1.0
1670
+ """
360
1671
  def get_center(self) -> Point:
361
- ...
1672
+ """
1673
+ Get the center (midpoint) of the segment.
1674
+
1675
+ Returns:
1676
+ Point: The center point of the segment.
1677
+
1678
+ Example:
1679
+ >>> segment = Segment(Point(0.0, 0.0), Point(2.0, 2.0))
1680
+ >>> center = segment.get_center() # Point(1.0, 1.0)
1681
+ """
362
1682
  def get_direction(self) -> numpy.ndarray[numpy.float64[2, 1]]:
363
- ...
1683
+ """
1684
+ Get the direction vector of the segment (from start to end, normalized).
1685
+
1686
+ Returns:
1687
+ Vector2d: The normalized direction vector of the segment.
1688
+
1689
+ Example:
1690
+ >>> segment = Segment(Point(0.0, 0.0), Point(3.0, 4.0))
1691
+ >>> direction = segment.get_direction() # [0.6, 0.8]
1692
+ """
364
1693
  def get_first_point(self) -> Point:
365
- ...
1694
+ """
1695
+ Get the first (starting) point of the segment.
1696
+
1697
+ Returns:
1698
+ Point: The starting point of the segment.
1699
+
1700
+ Example:
1701
+ >>> segment = Segment(Point(0.0, 0.0), Point(1.0, 1.0))
1702
+ >>> start = segment.get_first_point() # Point(0.0, 0.0)
1703
+ """
366
1704
  def get_length(self) -> ostk.core.type.Real:
367
- ...
1705
+ """
1706
+ Get the length of the segment.
1707
+
1708
+ Returns:
1709
+ float: The length of the segment.
1710
+
1711
+ Example:
1712
+ >>> segment = Segment(Point(0.0, 0.0), Point(3.0, 4.0))
1713
+ >>> length = segment.get_length() # 5.0
1714
+ """
368
1715
  def get_second_point(self) -> Point:
369
- ...
1716
+ """
1717
+ Get the second (ending) point of the segment.
1718
+
1719
+ Returns:
1720
+ Point: The ending point of the segment.
1721
+
1722
+ Example:
1723
+ >>> segment = Segment(Point(0.0, 0.0), Point(1.0, 1.0))
1724
+ >>> end = segment.get_second_point() # Point(1.0, 1.0)
1725
+ """
370
1726
  def is_defined(self) -> bool:
371
- ...
1727
+ """
1728
+ Check if the segment is defined.
1729
+
1730
+ Returns:
1731
+ bool: True if the segment is defined, False otherwise.
1732
+
1733
+ Example:
1734
+ >>> segment = Segment(Point(0.0, 0.0), Point(1.0, 1.0))
1735
+ >>> segment.is_defined() # True
1736
+ """
372
1737
  def is_degenerate(self) -> bool:
373
- ...
1738
+ """
1739
+ Check if the segment is degenerate (start and end points are the same).
1740
+
1741
+ Returns:
1742
+ bool: True if the segment is degenerate, False otherwise.
1743
+
1744
+ Example:
1745
+ >>> segment = Segment(Point(1.0, 1.0), Point(1.0, 1.0))
1746
+ >>> segment.is_degenerate() # True
1747
+ >>> segment2 = Segment(Point(0.0, 0.0), Point(1.0, 1.0))
1748
+ >>> segment2.is_degenerate() # False
1749
+ """
374
1750
  def to_line(self) -> Line:
375
- ...
1751
+ """
1752
+ Convert the segment to an infinite line.
1753
+
1754
+ Returns:
1755
+ Line: A line that passes through both endpoints of the segment.
1756
+
1757
+ Example:
1758
+ >>> segment = Segment(Point(0.0, 0.0), Point(1.0, 1.0))
1759
+ >>> line = segment.to_line()
1760
+ """
376
1761
  def to_string(self, format: ostk.mathematics.geometry.d2.Object.Format = ..., precision: ostk.core.type.Integer = ...) -> ostk.core.type.String:
377
- ...
1762
+ """
1763
+ Convert the segment to a string representation.
1764
+
1765
+ Args:
1766
+ format (Object.Format, optional): The output format. Defaults to Standard.
1767
+ precision (int, optional): The precision for floating point numbers. Defaults to undefined.
1768
+
1769
+ Returns:
1770
+ str: String representation of the segment.
1771
+
1772
+ Example:
1773
+ >>> segment = Segment(Point(0.0, 0.0), Point(1.0, 1.0))
1774
+ >>> segment.to_string()
1775
+ """
378
1776
  def set_point_2_array(arg0: list[list[Point]]) -> None:
379
1777
  ...
380
1778
  def set_point_array(arg0: list[Point]) -> None: