def test_associativity(multisegments_triplet: MultisegmentsTriplet) -> None: first, second, third = multisegments_triplet first_second_intersection = intersect_multisegments(first, second) second_third_intersection = intersect_multisegments(second, third) assert (not is_multisegment(first_second_intersection) or not is_multisegment(second_third_intersection) or (intersect_multisegments(first_second_intersection, third) == intersect_multisegments(first, second_third_intersection)))
def test_difference_operand(multisegments_triplet: MultisegmentsTriplet ) -> None: first, second, third = multisegments_triplet first_second_difference = subtract_multisegments(first, second) first_third_intersection = intersect_multisegments(first, third) assert (not is_multisegment(first_second_difference) or not is_multisegment(first_third_intersection) or (intersect_multisegments(first_second_difference, third) == subtract_multisegments(first_third_intersection, second)))
def test_intersection_minuend( multisegments_triplet: MultisegmentsTriplet) -> None: first, second, third = multisegments_triplet first_second_intersection = intersect_multisegments(first, second) second_third_difference = subtract_multisegments(second, third) assert (not is_multisegment(first_second_intersection) or not is_multisegment(second_third_difference) or (subtract_multisegments(first_second_intersection, third) == intersect_multisegments(first, second_third_difference)))
def test_equivalents(multisegments_pair: MultisegmentsPair) -> None: first, second = multisegments_pair result = unite_multisegments(first, second) first_second_symmetric_difference = symmetric_subtract_multisegments( first, second) first_second_intersection = intersect_multisegments(first, second) assert (not is_multisegment(first_second_symmetric_difference) or not is_multisegment(first_second_intersection) or result == symmetric_subtract_multisegments( first_second_symmetric_difference, first_second_intersection))
def test_difference_operand( multisegments_triplet: MultisegmentsTriplet) -> None: first, second, third = multisegments_triplet first_second_difference = subtract_multisegments(first, second) second_third_difference = subtract_multisegments(second, third) assert (not is_multisegment(first_second_difference) or not is_multisegment(second_third_difference) or are_multisegments_equivalent( unite_multisegments(first_second_difference, third), subtract_multisegments(unite_multisegments(first, third), second_third_difference)))
def test_union_subtrahend(multisegments_triplet: MultisegmentsTriplet) -> None: first, second, third = multisegments_triplet first_second_difference = subtract_multisegments(first, second) first_third_difference = subtract_multisegments(first, third) assert (not is_multisegment(first_second_difference) or not is_multisegment(first_third_difference) or are_compounds_similar( subtract_multisegments(first, unite_multisegments( second, third)), intersect_multisegments(first_second_difference, first_third_difference)))
def test_distribution_over_union(multisegments_triplet: MultisegmentsTriplet ) -> None: first, second, third = multisegments_triplet first_second_intersection = intersect_multisegments(first, second) first_third_intersection = intersect_multisegments(first, third) assert (not is_multisegment(first_second_intersection) or not is_multisegment(first_third_intersection) or are_multisegments_equivalent( intersect_multisegments(first, unite_multisegments(second, third)), unite_multisegments(first_second_intersection, first_third_intersection)))
def test_intersection_subtrahend( multisegments_triplet: MultisegmentsTriplet) -> None: first, second, third = multisegments_triplet first_second_difference = subtract_multisegments(first, second) first_third_difference = subtract_multisegments(first, third) second_third_intersection = intersect_multisegments(second, third) assert (not is_multisegment(first_second_difference) or not is_multisegment(first_third_difference) or not is_multisegment(second_third_intersection) or are_multisegments_equivalent( subtract_multisegments(first, second_third_intersection), unite_multisegments(first_second_difference, first_third_difference)))
def test_repeated(multisegments_triplet: MultisegmentsTriplet) -> None: first, second, third = multisegments_triplet first_second_symmetric_difference = symmetric_subtract_multisegments( first, second) second_third_symmetric_difference = symmetric_subtract_multisegments( second, third) assert (not is_multisegment(first_second_symmetric_difference) or not is_multisegment(second_third_symmetric_difference) or are_multisegments_equivalent( symmetric_subtract_multisegments( first_second_symmetric_difference, second_third_symmetric_difference), symmetric_subtract_multisegments(first, third)))
def test_basic(multisegments_pair: MultisegmentsPair) -> None: left_multisegment, right_multisegment = multisegments_pair result = symmetric_subtract_multisegments(left_multisegment, right_multisegment) assert is_multisegment(result)
def test_absorption_identity(multisegments_pair: MultisegmentsPair) -> None: first, second = multisegments_pair first_second_intersection = intersect_multisegments(first, second) assert (not is_multisegment(first_second_intersection) or are_multisegments_equivalent( unite_multisegments(first, first_second_intersection), first))
def test_validity(multisegment_with_segment: MultisegmentWithSegment) -> None: multisegment, segment = multisegment_with_segment result = symmetric_subtract_multisegment_from_segment( segment, multisegment) assert not is_multisegment(result) or is_multisegment_valid(result)
def test_properties(data: DataObject, coordinates_limits_type_pair: Tuple[ScalarsLimitsType, ScalarsLimitsType], sizes_pair: SizesPair) -> None: (x_coordinates_limits_type, y_coordinates_limits_type) = coordinates_limits_type_pair ((x_coordinates, (min_x_value, max_x_value)), x_type) = x_coordinates_limits_type ((y_coordinates, (min_y_value, max_y_value)), y_type) = y_coordinates_limits_type min_size, max_size = sizes_pair strategy = multisegments(x_coordinates, y_coordinates, min_size=min_size, max_size=max_size) result = data.draw(strategy) assert is_multisegment(result) assert has_valid_size(result.segments, min_size=min_size, max_size=max_size) assert multisegment_has_coordinates_types(result, x_type=x_type, y_type=y_type) assert multisegment_has_coordinates_in_range(result, min_x_value=min_x_value, max_x_value=max_x_value, min_y_value=min_y_value, max_y_value=max_y_value) assert segments_do_not_cross_or_overlap(result.segments)
def test_basic( multipolygon_with_multisegment: MultipolygonWithMultisegment) -> None: multipolygon, multisegment = multipolygon_with_multisegment result = intersect_multisegment_with_multipolygon(multisegment, multipolygon) assert is_multisegment(result)
def test_basic( multipolygon_with_multisegment: MultipolygonWithMultisegment) -> None: multipolygon, multisegment = multipolygon_with_multisegment result = subtract_multipolygon_from_multisegment(multisegment, multipolygon) assert is_multisegment(result)
def test_properties(multisegment_with_segment: MultisegmentWithSegment ) -> None: multisegment, segment = multisegment_with_segment result = unite_segment_with_multisegment(segment, multisegment) relation = segment_in_multisegment(segment, multisegment) assert equivalence(is_multisegment(result), relation in (Relation.DISJOINT, Relation.TOUCH, Relation.CROSS, Relation.OVERLAP, Relation.COMPONENT)) assert equivalence(is_segment(result), relation is Relation.EQUAL or relation is Relation.COMPOSITE)
def test_properties(multisegment_with_segment: MultisegmentWithSegment ) -> None: multisegment, segment = multisegment_with_segment result = subtract_multisegment_from_segment(segment, multisegment) relation = segment_in_multisegment(segment, multisegment) assert equivalence(is_empty(result), relation is Relation.EQUAL or relation is Relation.COMPONENT) assert implication(is_multisegment(result), relation in (Relation.TOUCH, Relation.CROSS, Relation.COMPOSITE, Relation.OVERLAP)) assert implication(is_segment(result), relation in (Relation.DISJOINT, Relation.TOUCH, Relation.CROSS, Relation.COMPOSITE, Relation.OVERLAP))
def test_same_coordinates(data: DataObject, coordinates_limits_type: ScalarsLimitsType, sizes_pair: SizesPair) -> None: (coordinates, (min_value, max_value)), type_ = coordinates_limits_type min_size, max_size = sizes_pair strategy = multisegments(coordinates, min_size=min_size, max_size=max_size) result = data.draw(strategy) assert is_multisegment(result) assert has_valid_size(result.segments, min_size=min_size, max_size=max_size) assert multisegment_has_coordinates_types(result, x_type=type_, y_type=type_) assert multisegment_has_coordinates_in_range(result, min_x_value=min_value, max_x_value=max_value, min_y_value=min_value, max_y_value=max_value) assert segments_do_not_cross_or_overlap(result.segments)
def test_validity(multisegment_with_segment: MultisegmentWithSegment) -> None: multisegment, segment = multisegment_with_segment result = unite_segment_with_multisegment(segment, multisegment) assert not is_multisegment(result) or is_multisegment_valid(result)
def test_validity(segments: List[Segment]) -> None: result = segments_to_multisegment(segments) assert not is_multisegment(result) or is_multisegment_valid(result)
def test_basic(segments: List[Segment]) -> None: result = segments_to_multisegment(segments) assert is_multisegment(result)
def test_basic(multisegments_pair: MultisegmentsPair) -> None: left_multisegment, right_multisegment = multisegments_pair result = unite_multisegments(left_multisegment, right_multisegment) assert is_multisegment(result)
def test_basic(multisegments_pair: MultisegmentsPair) -> None: first, second = multisegments_pair result = unite_multisegments(first, second) assert is_multisegment(result)