You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
|
|
|
from typing import Optional, List, Dict
|
|
|
|
|
|
|
|
from analytic_types.segment import AnomalyDetectorSegment
|
|
|
|
from analytic_types.detector import Bound
|
|
|
|
|
|
|
|
from utils.meta import JSONClass, SerializableList
|
|
|
|
|
|
|
|
@JSONClass
|
|
|
|
class AnomalyCache:
|
|
|
|
def __init__(
|
|
|
|
self,
|
|
|
|
alpha: float,
|
|
|
|
confidence: float,
|
|
|
|
enable_bounds: str,
|
|
|
|
seasonality: Optional[int] = None,
|
|
|
|
segments: Optional[List[Dict]] = None,
|
|
|
|
time_step: Optional[int] = None,
|
|
|
|
):
|
|
|
|
self.alpha = alpha
|
|
|
|
self.confidence = confidence
|
|
|
|
self.enable_bounds = enable_bounds
|
|
|
|
if seasonality != None and seasonality < 0:
|
|
|
|
raise ValueError(f'Can`t create AnomalyCache: got invalid seasonality {seasonality}')
|
|
|
|
self.seasonality = seasonality
|
|
|
|
self.time_step = time_step
|
|
|
|
if segments != None:
|
|
|
|
anomaly_segments = map(AnomalyDetectorSegment.from_json, segments)
|
|
|
|
self.segments = SerializableList(anomaly_segments)
|
|
|
|
else:
|
|
|
|
self.segments = []
|
|
|
|
|
|
|
|
def set_segments(self, segments: List[AnomalyDetectorSegment]):
|
|
|
|
if len(segments) > 0:
|
|
|
|
self.segments = SerializableList(segments)
|
|
|
|
|
|
|
|
def get_enabled_bounds(self) -> Bound:
|
|
|
|
#TODO: use class with to_json()
|
|
|
|
return Bound(self.enable_bounds)
|