Exemplo n.º 1
0
def test_distribution_over_union(multipolygons_triplet: MultipolygonsTriplet
                                 ) -> None:
    (left_multipolygon, mid_multipolygon,
     right_multipolygon) = multipolygons_triplet

    result = intersect_multipolygons(left_multipolygon,
                                     unite_multipolygons(mid_multipolygon,
                                                         right_multipolygon))

    assert result == unite_multipolygons(
            intersect_multipolygons(left_multipolygon, mid_multipolygon),
            intersect_multipolygons(left_multipolygon, right_multipolygon))
Exemplo n.º 2
0
def test_equivalents(multipolygons_pair: MultipolygonsPair) -> None:
    left_multipolygon, right_multipolygon = multipolygons_pair

    result = symmetric_subtract_multipolygons(left_multipolygon,
                                              right_multipolygon)

    assert result == unite_multipolygons(
        subtract_multipolygons(left_multipolygon, right_multipolygon),
        subtract_multipolygons(right_multipolygon, left_multipolygon))
    assert result == subtract_multipolygons(
        unite_multipolygons(left_multipolygon, right_multipolygon),
        intersect_multipolygons(right_multipolygon, left_multipolygon))
Exemplo n.º 3
0
def test_associativity(multipolygons_triplet: MultipolygonsTriplet) -> None:
    (left_multipolygon, mid_multipolygon,
     right_multipolygon) = multipolygons_triplet

    result = unite_multipolygons(unite_multipolygons(left_multipolygon,
                                                     mid_multipolygon),
                                 right_multipolygon)

    assert are_multipolygons_similar(
            result,
            unite_multipolygons(left_multipolygon,
                                unite_multipolygons(mid_multipolygon,
                                                    right_multipolygon)))
Exemplo n.º 4
0
def test_difference_operand(multipolygons_triplet: MultipolygonsTriplet
                            ) -> None:
    (left_multipolygon, mid_multipolygon,
     right_multipolygon) = multipolygons_triplet

    result = unite_multipolygons(subtract_multipolygons(left_multipolygon,
                                                        mid_multipolygon),
                                 right_multipolygon)

    assert are_multipolygons_similar(
            result,
            subtract_multipolygons(unite_multipolygons(left_multipolygon,
                                                       right_multipolygon),
                                   subtract_multipolygons(mid_multipolygon,
                                                          right_multipolygon)))
Exemplo n.º 5
0
def test_distribution_over_intersection(multipolygons_triplet
                                        : MultipolygonsTriplet) -> None:
    (left_multipolygon, mid_multipolygon,
     right_multipolygon) = multipolygons_triplet

    result = unite_multipolygons(left_multipolygon,
                                 intersect_multipolygons(mid_multipolygon,
                                                         right_multipolygon))

    assert are_multipolygons_similar(
            result,
            intersect_multipolygons(unite_multipolygons(left_multipolygon,
                                                        mid_multipolygon),
                                    unite_multipolygons(left_multipolygon,
                                                        right_multipolygon)))
Exemplo n.º 6
0
def test_right_neutral_element(empty_multipolygon_with_multipolygon
                               : MultipolygonsPair) -> None:
    empty_multipolygon, multipolygon = empty_multipolygon_with_multipolygon

    result = unite_multipolygons(multipolygon, empty_multipolygon)

    assert are_multipolygons_similar(result, multipolygon)
Exemplo n.º 7
0
def test_absorption_identity(multipolygons_pair: MultipolygonsPair) -> None:
    left_multipolygon, right_multipolygon = multipolygons_pair

    result = intersect_multipolygons(left_multipolygon,
                                     unite_multipolygons(left_multipolygon,
                                                         right_multipolygon))

    assert are_multipolygons_similar(result, left_multipolygon)
Exemplo n.º 8
0
def test_absorption_identity(multipolygons_pair: MultipolygonsPair) -> None:
    left_multipolygon, right_multipolygon = multipolygons_pair

    result = complete_intersect_multipolygons(
        left_multipolygon,
        unite_multipolygons(left_multipolygon, right_multipolygon))

    assert mix_similar_to_multipolygon(result, left_multipolygon)
Exemplo n.º 9
0
def test_reversals(multipolygons_pair: MultipolygonsPair) -> None:
    left_multipolygon, right_multipolygon = multipolygons_pair

    result = unite_multipolygons(left_multipolygon, right_multipolygon)

    assert are_multipolygons_similar(
            result,
            unite_multipolygons(reverse_multipolygon(left_multipolygon),
                                right_multipolygon))
    assert are_multipolygons_similar(
            result,
            unite_multipolygons(left_multipolygon,
                                reverse_multipolygon(right_multipolygon)))
    assert are_multipolygons_similar(
            result, unite_multipolygons(
                    reverse_multipolygon_borders(left_multipolygon),
                    right_multipolygon))
    assert are_multipolygons_similar(
            result, unite_multipolygons(
                    left_multipolygon,
                    reverse_multipolygon_borders(right_multipolygon)))
    assert are_multipolygons_similar(
            result,
            unite_multipolygons(reverse_multipolygon_holes(left_multipolygon),
                                right_multipolygon))
    assert are_multipolygons_similar(
            result, unite_multipolygons(left_multipolygon,
                                        reverse_multipolygon_holes(
                                                right_multipolygon)))
    assert are_multipolygons_similar(
            result, unite_multipolygons(
                    reverse_multipolygon_holes_contours(left_multipolygon),
                    right_multipolygon))
    assert are_multipolygons_similar(
            result, unite_multipolygons(
                    left_multipolygon,
                    reverse_multipolygon_holes_contours(right_multipolygon)))
Exemplo n.º 10
0
    def __or__(self, other: Compound[Coordinate]) -> Compound[Coordinate]:
        """
        Returns union of the multipolygon with the other geometry.

        Time complexity:
            ``O(vertices_count * log vertices_count)``
        Memory complexity:
            ``O(vertices_count)``

        where
            
            .. code-block:: python

                vertices_count = sum(len(polygon.border.vertices)
                                     + sum(len(hole.vertices)
                                           for hole in polygon.holes)
                                     for polygon in self.polygons)

        >>> from gon.base import Contour, Multipolygon, Point, Polygon
        >>> multipolygon = Multipolygon(
        ...         [Polygon(Contour([Point(0, 0), Point(14, 0), Point(14, 14),
        ...                           Point(0, 14)]),
        ...                  [Contour([Point(2, 2), Point(2, 12),
        ...                            Point(12, 12), Point(12, 2)])]),
        ...          Polygon(Contour([Point(4, 4), Point(10, 4), Point(10, 10),
        ...                           Point(4, 10)]),
        ...                  [Contour([Point(6, 6), Point(6, 8), Point(8, 8),
        ...                            Point(8, 6)])])])
        >>> multipolygon | multipolygon == multipolygon
        True
        """
        return (self._unite_with_multipoint(other) if isinstance(
            other, Multipoint) else
                (unite_segment_with_multipolygon(
                    other, self, context=self._context) if isinstance(
                        other, Segment) else
                 (unite_multisegment_with_multipolygon(
                     other, self, context=self._context) if isinstance(
                         other, Linear) else
                  (unite_polygon_with_multipolygon(
                      other, self, context=self._context
                  ) if isinstance(other, Polygon) else
                   (unite_multipolygons(self, other, context=self._context)
                    if isinstance(other, Multipolygon) else NotImplemented)))))
Exemplo n.º 11
0
def test_commutativity(multipolygons_pair: MultipolygonsPair) -> None:
    left_multipolygon, right_multipolygon = multipolygons_pair

    result = unite_multipolygons(left_multipolygon, right_multipolygon)

    assert result == unite_multipolygons(right_multipolygon, left_multipolygon)
Exemplo n.º 12
0
def test_idempotence(multipolygon: Multipolygon) -> None:
    result = unite_multipolygons(multipolygon, multipolygon)

    assert are_multipolygons_similar(result, multipolygon)
Exemplo n.º 13
0
def test_basic(multipolygons_pair: MultipolygonsPair) -> None:
    left_multipolygon, right_multipolygon = multipolygons_pair

    result = unite_multipolygons(left_multipolygon, right_multipolygon)

    assert is_multipolygon(result)