Spaces:
Running
on
Zero
Running
on
Zero
| from __future__ import annotations | |
| from enum import Enum | |
| from typing import NamedTuple, TYPE_CHECKING | |
| # Enum used to specify how the second stage aggregation is performed | |
| # for 2-stage antialiased lines. | |
| class AntialiasCombination(Enum): | |
| SUM_1AGG = 1 | |
| SUM_2AGG = 2 | |
| MIN = 3 | |
| MAX = 4 | |
| FIRST = 5 | |
| LAST = 6 | |
| class AntialiasStage2(NamedTuple): | |
| """Configuration for second-stage combination of a single antialiased reduction.""" | |
| combination: AntialiasCombination | |
| zero: float | |
| n_reduction: bool = False | |
| categorical: bool = False | |
| if TYPE_CHECKING: | |
| UnzippedAntialiasStage2 = \ | |
| tuple[tuple[AntialiasCombination], tuple[float], tuple[bool], tuple[bool]] | |
| def two_stage_agg(antialias_stage_2: UnzippedAntialiasStage2 | None): | |
| """Information used to perform the correct stage 2 aggregation.""" | |
| if not antialias_stage_2: | |
| # Not using antialiased lines, doesn't matter what is returned. | |
| return False, False | |
| aa_combinations = antialias_stage_2[0] | |
| # A single combination in (SUM_2AGG, FIRST, LAST, MIN) means that a 2-stage | |
| # aggregation will be used, otherwise use a 1-stage aggregation that is | |
| # faster. | |
| use_2_stage_agg = False | |
| for comb in aa_combinations: | |
| if comb in (AntialiasCombination.SUM_2AGG, AntialiasCombination.MIN, | |
| AntialiasCombination.FIRST, AntialiasCombination.LAST): | |
| use_2_stage_agg = True | |
| break | |
| # Boolean overwrite flag is used in _full_antialias() is True to overwrite | |
| # pixel values (using max of previous and new values) or False for the more | |
| # complicated correction algorithm. Prefer overwrite=True for speed, but | |
| # any SUM_1AGG implies overwrite=False. | |
| overwrite = True | |
| for comb in aa_combinations: | |
| if comb == AntialiasCombination.SUM_1AGG: | |
| overwrite = False | |
| break | |
| return overwrite, use_2_stage_agg | |