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.
38 lines
1.3 KiB
38 lines
1.3 KiB
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)
|
|
|