diff --git a/test/fixtures/page_generation/page.py b/test/fixtures/page_generation/page.py index 4dd1198..5e9f723 100644 --- a/test/fixtures/page_generation/page.py +++ b/test/fixtures/page_generation/page.py @@ -8,11 +8,10 @@ from enum import Enum from functools import lru_cache, partial from math import sqrt from pathlib import Path -from typing import Tuple, Union, Iterable, List +from typing import Tuple, Iterable, List import albumentations as A import cv2 as cv -import matplotlib import numpy as np import pandas as pd import pytest @@ -28,7 +27,6 @@ from cv_analysis.table_parsing import isolate_vertical_and_horizontal_components from cv_analysis.utils import star, rconj, conj from cv_analysis.utils.common import normalize_to_gray_scale from cv_analysis.utils.conversion import normalize_image_format_to_array, normalize_image_format_to_pil -from cv_analysis.utils.drawing import draw_rectangles from cv_analysis.utils.merging import merge_related_rectangles from cv_analysis.utils.postprocessing import remove_overlapping, remove_included from cv_analysis.utils.spacial import area @@ -37,7 +35,8 @@ random_seed = random.randint(0, 2**32 - 1) # random_seed = 3896311122 # random_seed = 1986343479 -random_seed = 273244862 # empty large table +# random_seed = 273244862 # empty large table +random_seed = 3717442900 rnd = random.Random(random_seed) logger.info(f"Random seed: {random_seed}") @@ -533,7 +532,7 @@ class Size(Enum): # MEDIUM = sqrt((100 * 3) ** 2) # LARGE = sqrt((100 * 10) ** 2) - SMALL = 100 + SMALL = 120 MEDIUM = 180 LARGE = 300 @@ -650,7 +649,7 @@ class RecursiveRandomTable(RandomContentRectangle): logger.debug(f"Generating {choice} {size:.0f} {get_size_class(cell).name}") - if choice == "plot": + if choice == "plot" and is_square_like(cell): return generate_random_plot(cell) else: @@ -972,7 +971,7 @@ def get_fonts(path: Path = None) -> List[str]: @lru_cache(maxsize=None) def get_font_picker(**kwargs): - return RandomFontPicker(**kwargs, return_default_font=True) + return RandomFontPicker(**kwargs, return_default_font=False) @lru_cache(maxsize=None) @@ -1034,7 +1033,8 @@ class RandomPlot(RandomContentRectangle): plt_fn = rnd.choice( [ self.generate_random_line_plot, - self.generate_random_scatter_plot, + self.generate_random_histogram, + self.generate_random_bar_plot, ] ) elif is_tall(rectangle): @@ -1052,7 +1052,11 @@ class RandomPlot(RandomContentRectangle): def generate_random_bar_plot(self, rectangle: Rectangle): x = sorted(np.random.randint(low=1, high=11, size=5)) y = np.random.randint(low=1, high=11, size=5) - self.__generate_random_plot(plt.bar, rectangle, x, y) + bar_fn = partial( + plt.bar, + log=random.choice([True, False]), + ) + self.__generate_random_plot(bar_fn, rectangle, x, y) def generate_random_line_plot(self, rectangle: Rectangle): f = rnd.choice([np.sin, np.cos, np.tan, np.exp, np.log, np.sqrt, np.square]) @@ -1060,7 +1064,11 @@ class RandomPlot(RandomContentRectangle): x = np.linspace(0, 10, 100) y = f(x) - self.__generate_random_plot(plt.plot, rectangle, x, y) + plot_fn = partial( + plt.plot, + ) + + self.__generate_random_plot(plot_fn, rectangle, x, y) def generate_random_scatter_plot(self, rectangle: Rectangle): x = np.random.normal(size=100) @@ -1069,28 +1077,43 @@ class RandomPlot(RandomContentRectangle): def generate_random_histogram(self, rectangle: Rectangle): x = np.random.normal(size=100) - self.__generate_random_plot(plt.hist, rectangle, x, 10) + hist_fn = partial( + plt.hist, + orientation=random.choice(["horizontal", "vertical"]), + histtype=random.choice(["bar", "barstacked", "step", "stepfilled"]), + log=random.choice([True, False]), + stacked=random.choice([True, False]), + density=random.choice([True, False]), + cumulative=random.choice([True, False]), + ) + self.__generate_random_plot(hist_fn, rectangle, x, random.randint(5, 20)) def generate_random_pie_chart(self, rectangle: Rectangle): - x = np.random.uniform(size=10) + + n = random.randint(3, 7) + x = np.random.uniform(size=n) pie_fn = partial( plt.pie, - labels=[f"Label {i}" for i in range(10)], - autopct="%1.1f%%", shadow=True, startangle=90, pctdistance=0.85, labeldistance=1.1, colors=self.cmap(np.linspace(0, 1, 10)), ) - self.__generate_random_plot(pie_fn, rectangle, x, None, plot_kwargs=self.generate_plot_kwargs(keywords=["a"])) + self.__generate_random_plot( + pie_fn, + rectangle, + x, + np.random.uniform(0, 0.1, size=n), + plot_kwargs=self.generate_plot_kwargs(keywords=["a"]), + ) def generate_plot_kwargs(self, keywords=None): kwargs = { "color": rnd.choice(self.cmap.colors), "linestyle": rnd.choice(["-", "--", "-.", ":"]), - "linewidth": rnd.uniform(0.5, 2), + "linewidth": rnd.uniform(1, 4), } return kwargs if not keywords else {k: v for k, v in kwargs.items() if k in keywords}