def test_interval(): i = Interval(1, 2, axis="y", canvas_height=30, canvas_width=400) i.to_rectangle() i.to_quadrilateral() assert i.shift(1) == Interval(2, 3, axis="y", canvas_height=30, canvas_width=400) assert i.area == 1 * 400 i = Interval(1, 2, axis="x") assert i.shift([1, 2]) == Interval(2, 3, axis="x") assert i.scale([2, 1]) == Interval(2, 4, axis="x") assert i.pad(left=10, right=20) == Interval(0, 22, axis="x") # Test the safe_mode assert i.pad(left=10, right=20, safe_mode=False) == Interval(-9, 22, axis="x") assert i.area == 0 img = np.random.randint(12, 24, (40, 40)) img[:, 10:20] = 0 i = Interval(5, 11, axis="x") assert np.unique(i.crop_image(img)[:, -1]) == np.array([0])
def test_layout(): i = Interval(4, 5, axis="y") q = Quadrilateral(np.array([[2, 2], [6, 2], [6, 7], [2, 5]])) r = Rectangle(3, 3, 5, 6) t = TextBlock(i, id=1, type=2, text="12") l = Layout([i, q, r]) l.get_texts() l.condition_on(i) l.relative_to(q) l.filter_by(t) l.is_in(r) assert l.get_homogeneous_blocks() == [ i.to_quadrilateral(), q, r.to_quadrilateral() ] i2 = TextBlock(i, id=1, type=2, text="12") r2 = TextBlock(r, id=1, type=2, parent="a") q2 = TextBlock(q, id=1, type=2, next="a") l2 = Layout([i2, r2, q2], page_data={"width": 200, "height": 200}) l2.get_texts() l2.get_info("next") l2.condition_on(i) l2.relative_to(q) l2.filter_by(t) l2.is_in(r) l2.scale(4) l2.shift(4) l2.pad(left=2) # Test slicing function homogeneous_blocks = l2[:2].get_homogeneous_blocks() assert homogeneous_blocks[0].block == i.to_rectangle() assert homogeneous_blocks[1].block == r # Test appending and extending assert l + [i2] == Layout([i, q, r, i2]) assert l + l == Layout([i, q, r] * 2) l.append(i) assert l == Layout([i, q, r, i]) l2.extend([q]) assert l2 == Layout([i2, r2, q2, q], page_data={ "width": 200, "height": 200 }) # Test addition l + l2 with pytest.raises(ValueError): l.page_data = {"width": 200, "height": 400} l + l2 # Test sort l = Layout([i, i.shift(2)]) l.sort(key=lambda x: x.coordinates[1], reverse=True) assert l == Layout([i.shift(2), i]) l = Layout([q, r, i], page_data={"width": 200, "height": 400}) assert l.sort(key=lambda x: x.coordinates[0], inplace=False) == Layout([i, q, r], page_data={ "width": 200, "height": 400 }) l = Layout([q, t]) assert l.sort(key=lambda x: x.coordinates[0], inplace=False) == Layout([q, t])