mirror of
https://github.com/docling-project/docling-core.git
synced 2026-05-17 13:10:44 +00:00
* fix: fix `BoundingRectanble.angle` and `BoundingRectanble.angle_360` computation Signed-off-by: Clément Doumouro <clement.doumouro@gmail.com> * fix: compute page bounding rectangle angle between (0-2pi) / (0-360) Signed-off-by: Clément Doumouro <clement.doumouro@gmail.com> --------- Signed-off-by: Clément Doumouro <clement.doumouro@gmail.com> Co-authored-by: Christoph Auer <60343111+cau-git@users.noreply.github.com>
80 lines
1.8 KiB
Python
80 lines
1.8 KiB
Python
import math
|
|
|
|
import numpy as np
|
|
import pytest
|
|
|
|
from docling_core.types.doc.page import BoundingRectangle
|
|
|
|
SQRT_2 = math.sqrt(2)
|
|
|
|
R_0 = BoundingRectangle(r_x0=0, r_y0=0, r_x1=1, r_y1=0, r_x2=1, r_y2=1, r_x3=0, r_y3=1)
|
|
R_45 = BoundingRectangle(
|
|
r_x0=0,
|
|
r_y0=0,
|
|
r_x1=SQRT_2 / 2,
|
|
r_y1=SQRT_2 / 2,
|
|
r_x2=0,
|
|
r_y2=SQRT_2,
|
|
r_x3=-SQRT_2 / 2,
|
|
r_y3=SQRT_2 / 2,
|
|
)
|
|
R_90 = BoundingRectangle(
|
|
r_x0=0, r_y0=0, r_x1=0, r_y1=1, r_x2=-1, r_y2=1, r_x3=-1, r_y3=0
|
|
)
|
|
R_135 = BoundingRectangle(
|
|
r_x0=0,
|
|
r_y0=0,
|
|
r_x1=-SQRT_2 / 2,
|
|
r_y1=SQRT_2 / 2,
|
|
r_x2=-SQRT_2,
|
|
r_y2=0,
|
|
r_x3=-SQRT_2 / 2,
|
|
r_y3=-SQRT_2 / 2,
|
|
)
|
|
R_180 = BoundingRectangle(
|
|
r_x0=0, r_y0=0, r_x1=-0, r_y1=0, r_x2=-1, r_y2=-1, r_x3=0, r_y3=-1
|
|
)
|
|
R_MINUS_135 = BoundingRectangle(
|
|
r_x0=0,
|
|
r_y0=0,
|
|
r_x1=-SQRT_2 / 2,
|
|
r_y1=-SQRT_2 / 2,
|
|
r_x2=0,
|
|
r_y2=-SQRT_2,
|
|
r_x3=SQRT_2 / 2,
|
|
r_y3=-SQRT_2 / 2,
|
|
)
|
|
R_MINUS_90 = BoundingRectangle(
|
|
r_x0=0, r_y0=0, r_x1=0, r_y1=-1, r_x2=1, r_y2=-1, r_x3=1, r_y3=0
|
|
)
|
|
R_MINUS_45 = BoundingRectangle(
|
|
r_x0=0,
|
|
r_y0=0,
|
|
r_x1=SQRT_2 / 2,
|
|
r_y1=-SQRT_2 / 2,
|
|
r_x2=SQRT_2,
|
|
r_y2=0,
|
|
r_x3=SQRT_2 / 2,
|
|
r_y3=SQRT_2 / 2,
|
|
)
|
|
|
|
|
|
@pytest.mark.parametrize(
|
|
("rectangle", "expected_angle", "expected_angle_360"),
|
|
[
|
|
(R_0, 0, 0.0),
|
|
(R_45, np.pi / 4, 45),
|
|
(R_90, np.pi / 2, 90),
|
|
(R_135, 3 * np.pi / 4, 135),
|
|
(R_180, np.pi, 180),
|
|
(R_MINUS_135, 5 * np.pi / 4, 225),
|
|
(R_MINUS_90, 3 * np.pi / 2, 270),
|
|
(R_MINUS_45, 7 * np.pi / 4, 315),
|
|
],
|
|
)
|
|
def test_bounding_rectangle_angle(
|
|
rectangle: BoundingRectangle, expected_angle: float, expected_angle_360: int
|
|
):
|
|
assert pytest.approx(rectangle.angle, abs=1e-6) == expected_angle
|
|
assert pytest.approx(rectangle.angle_360, abs=1e-6) == expected_angle_360
|