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, ))
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)
def context() -> Context: return get_context()
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))
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)
def test_connection_with_get_context(context: Context) -> None: set_context(context) assert get_context() is context