Beispiel #1
0
from typing import (Any, Callable, Iterable, List, Optional, Sequence, Tuple,
                    TypeVar)

from ground.base import (Location, Orientation, Relation, get_context)
from ground.hints import Scalar
from hypothesis import strategies
from hypothesis.strategies import SearchStrategy

from orient.core.utils import (flatten, to_sorted_pair)
from orient.hints import Multiregion

Domain = TypeVar('Domain')
Range = TypeVar('Range')
Key = Callable[[Domain], Any]
Strategy = SearchStrategy
context = get_context()
Point = context.point_cls
Segment = context.segment_cls
Multisegment = context.multisegment_cls
Contour = context.contour_cls
Polygon = context.polygon_cls
Multipolygon = context.multipolygon_cls

LINEAR_LOCATIONS = Location.EXTERIOR, Location.BOUNDARY
SHAPED_LOCATIONS = LINEAR_LOCATIONS + (Location.INTERIOR, )
SYMMETRIC_LINEAR_RELATIONS = (Relation.DISJOINT, Relation.TOUCH,
                              Relation.CROSS, Relation.OVERLAP)
ASYMMETRIC_LINEAR_RELATIONS = Relation.COMPONENT, Relation.COMPOSITE
LINEAR_RELATIONS = SYMMETRIC_LINEAR_RELATIONS + ASYMMETRIC_LINEAR_RELATIONS
SYMMETRIC_SAME_LINEAR_RELATIONS = (SYMMETRIC_LINEAR_RELATIONS +
                                   (Relation.EQUAL, ))
Beispiel #2
0
def check_for_self_intersection(pts):
    context = get_context()
    Point, Contour = context.point_cls, context.contour_cls
    ctr = [ Point(a,b) for [a,b] in pts ]
    curve = Contour(ctr)
    return edges_intersect(curve)
Beispiel #3
0
def context() -> Context:
    return get_context()
Beispiel #4
0
from functools import partial
from typing import Tuple

from ground.base import get_context
from ground.hints import Scalar
from hypothesis import strategies
from hypothesis_geometry import planar

from tests.strategies import coordinates_strategies
from tests.utils import (Multisegment, Point, Polygon, Strategy)

contexts = strategies.just(get_context())
multisegments = coordinates_strategies.flatmap(planar.multisegments)


def to_multisegments_with_points(
        coordinates: Strategy[Scalar]) -> Strategy[Tuple[Multisegment, Point]]:
    return strategies.tuples(planar.multisegments(coordinates),
                             planar.points(coordinates))


multisegments_with_points = (
    coordinates_strategies.flatmap(to_multisegments_with_points))
polygons = coordinates_strategies.flatmap(planar.polygons)


def to_polygons_with_points(
        coordinates: Strategy[Scalar]) -> Strategy[Tuple[Polygon, Point]]:
    return strategies.tuples(planar.polygons(coordinates),
                             planar.points(coordinates))
Beispiel #5
0
def segments_relation(first_start, first_end, second_start, second_end):
    context = get_context()
    return context.segments_relation(first_start, first_end, second_start,
                                     second_end)
Beispiel #6
0
def test_connection_with_get_context(context: Context) -> None:
    set_context(context)

    assert get_context() is context