diff --git a/test/conftest.py b/test/conftest.py index 7461849..71cb18f 100644 --- a/test/conftest.py +++ b/test/conftest.py @@ -9,7 +9,7 @@ from operator import itemgetter import fpdf import numpy as np import pytest -from funcy import rcompose, merge +from funcy import rcompose from image_prediction.exceptions import ( UnknownLabelFormat, @@ -24,16 +24,16 @@ from test.utils.generation.pdf import add_image, pdf_stream from test.utils.label import map_labels pytest_plugins = [ - 'test.fixtures.model', - 'test.fixtures.model_store', - 'test.fixtures.image', - 'test.fixtures.input', - 'test.fixtures.parameters', - 'test.fixtures.label', + "test.fixtures.image", + "test.fixtures.input", + "test.fixtures.label", + "test.fixtures.metadata", + "test.fixtures.model", + "test.fixtures.model_store", + "test.fixtures.parameters", ] - @pytest.fixture(autouse=True) def mute_logger(): logger = get_logger() @@ -124,53 +124,11 @@ def expected_predictions_mapped_and_formatted(expected_predictions_mapped): return [{k.value: v for k, v in epm.items()} for epm in expected_predictions_mapped] -@pytest.fixture -def metadata(images, info_label_map): - page_idx = 0 - - def current_page_idx(): - nonlocal page_idx - page_idx += random.randint(0, 3) - return min(page_idx, len(images) - 1) - - def build_image_metadata(image): - width, height = image.size - page_width = 595 - page_height = 842 - x1 = random.randint(0, page_width - width) - x2 = x1 + width - y1 = random.randint(0, page_height - height) - y2 = y1 + height - metadata = { - info_label_map.PAGE_WIDTH: page_width, - info_label_map.PAGE_HEIGHT: page_height, - info_label_map.PAGE_IDX: current_page_idx(), - info_label_map.WIDTH: width, - info_label_map.HEIGHT: height, - info_label_map.X1: x1, - info_label_map.X2: x2, - info_label_map.Y1: y1, - info_label_map.Y2: y2, - info_label_map.ALPHA: image.mode == "RGBA", - } - return metadata - - return list(map(build_image_metadata, images)) - - @pytest.fixture def info_label_map(): return Info -@pytest.fixture -def metadata_formatted(metadata): - def format_metadata(metadata): - return {key.value: val for key, val in metadata.items()} - - return list(map(format_metadata, metadata)) - - @pytest.fixture def image_metadata_pairs(images, metadata): return list(starmap(ImageMetadataPair, zip(images, metadata))) @@ -202,22 +160,3 @@ def real_expected_service_response(): def pipeline(): pipeline = load_pipeline(verbose=False) return pipeline - - -def get_base_position_metadata(width, height, page_width, page_height): - return { - Info.WIDTH: width, - Info.HEIGHT: height, - Info.PAGE_IDX: 0, - Info.PAGE_WIDTH: page_width, - Info.PAGE_HEIGHT: page_height, - } - - -@pytest.fixture -def base_patch_metadata(width, height, page_width, page_height): - metadata = get_base_position_metadata(width, height, page_width, page_height) - metadata = merge(metadata, {Info.X1: 0, Info.Y1: 0, Info.X2: width, Info.Y2: height}) - return metadata - - diff --git a/test/fixtures/metadata.py b/test/fixtures/metadata.py new file mode 100644 index 0000000..7cd2b9f --- /dev/null +++ b/test/fixtures/metadata.py @@ -0,0 +1,56 @@ +import random + +import pytest +from funcy import merge + +from image_prediction.info import Info +from test.utils.metadata import get_base_position_metadata + + +@pytest.fixture +def metadata(images, info_label_map): + page_idx = 0 + + def current_page_idx(): + nonlocal page_idx + page_idx += random.randint(0, 3) + return min(page_idx, len(images) - 1) + + def build_image_metadata(image): + width, height = image.size + page_width = 595 + page_height = 842 + x1 = random.randint(0, page_width - width) + x2 = x1 + width + y1 = random.randint(0, page_height - height) + y2 = y1 + height + metadata = { + info_label_map.PAGE_WIDTH: page_width, + info_label_map.PAGE_HEIGHT: page_height, + info_label_map.PAGE_IDX: current_page_idx(), + info_label_map.WIDTH: width, + info_label_map.HEIGHT: height, + info_label_map.X1: x1, + info_label_map.X2: x2, + info_label_map.Y1: y1, + info_label_map.Y2: y2, + info_label_map.ALPHA: image.mode == "RGBA", + } + return metadata + + return list(map(build_image_metadata, images)) + + +@pytest.fixture +def metadata_formatted(metadata): + def format_metadata(metadata): + return {key.value: val for key, val in metadata.items()} + + return list(map(format_metadata, metadata)) + + +@pytest.fixture +def base_patch_metadata(width, height, page_width, page_height): + metadata = get_base_position_metadata(width, height, page_width, page_height) + metadata = merge(metadata, {Info.X1: 0, Info.Y1: 0, Info.X2: width, Info.Y2: height}) + return metadata \ No newline at end of file diff --git a/test/unit_tests/coordinate_transformer_test.py b/test/unit_tests/coordinate_transformer_test.py index 935c95e..1d39ca8 100644 --- a/test/unit_tests/coordinate_transformer_test.py +++ b/test/unit_tests/coordinate_transformer_test.py @@ -12,7 +12,7 @@ from image_prediction.info import Info from image_prediction.transformer.transformers.coordinate.fitz import FitzCoordinateTransformer from image_prediction.transformer.transformers.coordinate.fpdf import FPDFCoordinateTransformer from image_prediction.transformer.transformers.coordinate.pdfnet import PDFNetCoordinateTransformer -from test.conftest import get_base_position_metadata +from test.utils.metadata import get_base_position_metadata from test.utils.generation.image import array_to_image from test.utils.generation.pdf import add_image from test.utils.comparison import transform_equal diff --git a/test/unit_tests/image_stitching_test.py b/test/unit_tests/image_stitching_test.py index 677b4ee..edf7923 100644 --- a/test/unit_tests/image_stitching_test.py +++ b/test/unit_tests/image_stitching_test.py @@ -30,9 +30,9 @@ from image_prediction.stitching.utils import ( make_coord_getter, make_length_getter, ) -from test.utils.generation.pdf import add_image -from test.utils.generation.image import random_single_color_image_from_metadata, gray_image_from_metadata from test.utils.comparison import images_equal +from test.utils.generation.image import random_single_color_image_from_metadata, gray_image_from_metadata +from test.utils.generation.pdf import add_image from test.utils.stitching import BoxSplitter x1_getter, y1_getter, x2_getter, y2_getter = map(make_coord_getter, ("x1", "y1", "x2", "y2")) diff --git a/test/utils/metadata.py b/test/utils/metadata.py new file mode 100644 index 0000000..92bd58d --- /dev/null +++ b/test/utils/metadata.py @@ -0,0 +1,11 @@ +from image_prediction.info import Info + + +def get_base_position_metadata(width, height, page_width, page_height): + return { + Info.WIDTH: width, + Info.HEIGHT: height, + Info.PAGE_IDX: 0, + Info.PAGE_WIDTH: page_width, + Info.PAGE_HEIGHT: page_height, + } \ No newline at end of file