#! /usr/bin/env python # -*- coding: utf-8 -*- from typing import Any, Optional from numbers import Number import numpy as np import pandas as pd from lib.types import PandasLike, ArrayLike, T class BaseFlagger: def __init__(self, no_flag: T, flag: T): self.no_flag: T = no_flag self.flag: T = flag def setFlag(self, flags: PandasLike, flag: Optional[T] = None, **kwargs: Any) -> PandasLike: if flag is None: flag = self.flag flags[:] = flag return flags def emptyFlags(self, data: pd.DataFrame, value: Optional[Number] = np.nan) -> pd.DataFrame: out = data.copy() out[:] = value return out def isFlagged(self, flags: ArrayLike, flag: T = None) -> ArrayLike: if flag is None: return (pd.notnull(flags) & (flags != self.no_flag)) return flags == flag def nextTest(self): pass