Spaces:
Running
on
Zero
Running
on
Zero
File size: 1,926 Bytes
d1ed09d |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 |
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
|