Skip to content

Fix callbacks #214

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 2 commits into from
Jun 6, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion frouros/callbacks/batch/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
class BaseCallbackBatch(BaseCallback):
"""Callback batch class."""

def on_compare_start(self) -> None:
def on_compare_start(self, **kwargs) -> None:
"""On compare start method."""

def on_compare_end(self, **kwargs) -> None:
Expand Down
5 changes: 2 additions & 3 deletions frouros/callbacks/streaming/base.py
Original file line number Diff line number Diff line change
@@ -1,18 +1,17 @@
"""Base callback streaming module."""

import abc
from typing import Union

from frouros.callbacks.base import BaseCallback


class BaseCallbackStreaming(BaseCallback):
"""Callback streaming class."""

def on_update_start(self, value: Union[int, float], **kwargs) -> None:
def on_update_start(self, **kwargs) -> None:
"""On update start method."""

def on_update_end(self, value: Union[int, float], **kwargs) -> None:
def on_update_end(self, **kwargs) -> None:
"""On update end method."""

# FIXME: set_detector method as a workaround to # pylint: disable=fixme
Expand Down
12 changes: 4 additions & 8 deletions frouros/callbacks/streaming/history.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
"""History callback module."""

from typing import Any, Dict, List, Optional, Union
from typing import Any, Dict, List, Optional

from frouros.callbacks.streaming.base import BaseCallbackStreaming
from frouros.utils.stats import BaseStat
Expand Down Expand Up @@ -32,13 +32,9 @@ def add_additional_vars(self, vars_: List[str]) -> None:
self.additional_vars.extend(vars_)
self.history = {**self.history, **{var: [] for var in self.additional_vars}}

def on_update_end(self, value: Union[int, float], **kwargs) -> None:
"""On update end method.

:param value: value to update detector
:type value: int
"""
self.history["value"].append(value)
def on_update_end(self, **kwargs) -> None:
"""On update end method."""
self.history["value"].append(kwargs["value"])
self.history["num_instances"].append(
self.detector.num_instances # type: ignore
)
Expand Down
10 changes: 3 additions & 7 deletions frouros/callbacks/streaming/msprt.py
Original file line number Diff line number Diff line change
Expand Up @@ -139,13 +139,9 @@ def on_fit_end(self, **kwargs) -> None:
self.mean = CircularMean(size=self.detector.window_size) # type: ignore
self.theta = self.detector.compare(X=kwargs["X"])[0].distance # type: ignore

def on_update_end(self, value: Union[int, float], **kwargs) -> None:
"""On update end method.

:param value: value to update detector
:type value: int
"""
self.mean.update(value=value) # type: ignore
def on_update_end(self, **kwargs) -> None:
"""On update end method."""
self.mean.update(value=kwargs["value"]) # type: ignore
self.p_value, likelihood = self._calculate_p_value()

self.logs.update(
Expand Down
12 changes: 4 additions & 8 deletions frouros/callbacks/streaming/warning_samples.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
"""Warning samples buffer callback module."""

import copy
from typing import Any, List, Optional, Union
from typing import Any, List, Optional

from frouros.callbacks.streaming.base import BaseCallbackStreaming

Expand All @@ -20,16 +20,12 @@ def __init__(self, name: Optional[str] = None) -> None:
self.y: List[Any] = []
self._start_warning = False

def on_update_start(self, value: Union[int, float], **kwargs) -> None:
def on_update_start(self, **kwargs) -> None:
"""On update start method."""
self._start_warning = not self.detector.warning # type: ignore

def on_update_end(self, value: Union[int, float], **kwargs) -> None:
"""On update end method.

:param value: value to update detector
:type value: int
"""
def on_update_end(self, **kwargs) -> None:
"""On update end method."""
self.logs = {
"X": copy.deepcopy(self.X),
"y": copy.deepcopy(self.y),
Expand Down
16 changes: 12 additions & 4 deletions frouros/detectors/concept_drift/base.py
Original file line number Diff line number Diff line change
Expand Up @@ -4,8 +4,9 @@
from typing import Any, Dict, List, Optional, Union

from frouros.callbacks import History
from frouros.callbacks.base import BaseCallback
from frouros.callbacks.streaming.base import BaseCallbackStreaming
from frouros.detectors.base import BaseDetector
from frouros.utils.checks import check_callbacks


class BaseConceptDriftConfig(abc.ABC):
Expand Down Expand Up @@ -64,16 +65,23 @@ class BaseConceptDrift(BaseDetector):
def __init__(
self,
config: Optional[BaseConceptDriftConfig] = None,
callbacks: Optional[Union[BaseCallback, List[BaseCallback]]] = None,
callbacks: Optional[
Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]
] = None,
) -> None:
"""Init method.

:param config: configuration parameters
:type config: Optional[BaseConceptDriftConfig]
:param callbacks: callbacks
:type callbacks: Optional[Union[BaseCallback, List[Callback]]]
:type callbacks: Optional[Union[BaseCallbackStreaming,
List[BaseCallbackStreaming]]]
"""
super().__init__(callbacks=callbacks)
check_callbacks(
callbacks=callbacks,
expected_cls=BaseCallbackStreaming, # type: ignore
)
super().__init__(callbacks=callbacks) # type: ignore
self.config = config # type: ignore
self.additional_vars = None

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@
import abc
from typing import List, Optional, Union

from frouros.callbacks.base import BaseCallback
from frouros.callbacks.streaming.base import BaseCallbackStreaming
from frouros.detectors.concept_drift.streaming.base import (
BaseConceptDriftStreaming,
BaseConceptDriftStreamingConfig,
Expand Down Expand Up @@ -132,14 +132,17 @@ class BaseCUSUM(BaseConceptDriftStreaming):
def __init__(
self,
config: Optional[BaseCUSUMConfig] = None,
callbacks: Optional[Union[BaseCallback, List[BaseCallback]]] = None,
callbacks: Optional[
Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]
] = None,
) -> None:
"""Init method.

:param config: configuration parameters
:type config: Optional[BaseCUSUMConfig]
:param callbacks: callbacks
:type callbacks: Optional[Union[BaseCallback, List[Callback]]]
:type callbacks: Optional[Union[BaseCallbackStreaming,
List[BaseCallbackStreaming]]]
"""
super().__init__(
config=config,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import numpy as np # type: ignore

from frouros.callbacks.base import BaseCallback
from frouros.callbacks.streaming.base import BaseCallbackStreaming
from frouros.detectors.concept_drift.exceptions import InvalidAverageRunLengthError
from frouros.detectors.concept_drift.streaming.base import (
BaseConceptDriftStreamingConfig,
Expand Down Expand Up @@ -90,14 +90,17 @@ class BaseSPC(BaseConceptDriftStreaming):
def __init__(
self,
config: Optional[BaseSPCConfig] = None,
callbacks: Optional[Union[BaseCallback, List[BaseCallback]]] = None,
callbacks: Optional[
Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]
] = None,
) -> None:
"""Init method.

:param config: configuration parameters
:type config: Optional[BaseSPCConfig]
:param callbacks: callbacks
:type callbacks: Optional[Union[Callback, List[BaseCallback]]]
:type callbacks: Optional[Union[BaseCallbackStreaming,
List[BaseCallbackStreaming]]]
"""
super().__init__(
config=config,
Expand Down Expand Up @@ -153,14 +156,17 @@ class BaseSPCError(BaseSPC):
def __init__(
self,
config: Optional[BaseSPCConfig] = None,
callbacks: Optional[Union[BaseCallback, List[BaseCallback]]] = None,
callbacks: Optional[
Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]
] = None,
) -> None:
"""Init method.

:param config: configuration parameters
:type config: Optional[BaseSPCConfig]
:param callbacks: callbacks
:type callbacks: Optional[Union[Callback, List[BaseCallback]]]
:type callbacks: Optional[Union[BaseCallbackStreaming,
List[BaseCallbackStreaming]]]
"""
super().__init__(
config=config,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@

import numpy as np # type: ignore

from frouros.callbacks.base import BaseCallback
from frouros.callbacks.streaming.base import BaseCallbackStreaming
from frouros.detectors.concept_drift.streaming.statistical_process_control.base import (
BaseSPC,
BaseECDDConfig,
Expand Down Expand Up @@ -38,14 +38,17 @@ class ECDDWT(BaseSPC):
def __init__(
self,
config: Optional[ECDDWTConfig] = None,
callbacks: Optional[Union[BaseCallback, List[BaseCallback]]] = None,
callbacks: Optional[
Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]
] = None,
) -> None:
"""Init method.

:param config: configuration parameters
:type config: Optional[ECDDWTConfig]
:param callbacks: callbacks
:type callbacks: Optional[Union[Callback, List[BaseCallback]]]
:type callbacks: Optional[Union[BaseCallbackStreaming,
List[BaseCallbackStreaming]]]
"""
super().__init__(
config=config, # type: ignore
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import numpy as np # type: ignore

from frouros.callbacks.base import BaseCallback
from frouros.callbacks.streaming.base import BaseCallbackStreaming
from frouros.detectors.concept_drift.streaming.statistical_process_control.base import (
BaseSPCConfig,
BaseSPC,
Expand Down Expand Up @@ -148,14 +148,17 @@ class EDDM(BaseSPC):
def __init__(
self,
config: Optional[EDDMConfig] = None,
callbacks: Optional[Union[BaseCallback, List[BaseCallback]]] = None,
callbacks: Optional[
Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]
] = None,
) -> None:
"""Init method.

:param config: configuration parameters
:type config: Optional[EDDMConfig]
:param callbacks: callbacks
:type callbacks: Optional[Union[BaseCallback, List[Callback]]]
:type callbacks: Optional[Union[BaseCallbackStreaming,
List[BaseCallbackStreaming]]]
"""
# mean_distance_error = 0.0
super().__init__(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import numpy as np # type: ignore

from frouros.callbacks.base import BaseCallback
from frouros.callbacks.streaming.base import BaseCallbackStreaming
from frouros.detectors.concept_drift.streaming.statistical_process_control.base import (
BaseSPCConfig,
BaseSPC,
Expand Down Expand Up @@ -334,14 +334,17 @@ class HDDMA(BaseSPC):
def __init__(
self,
config: Optional[HDDMAConfig] = None,
callbacks: Optional[Union[BaseCallback, List[BaseCallback]]] = None,
callbacks: Optional[
Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]
] = None,
) -> None:
"""Init method.

:param config: configuration parameters
:type config: Optional[HDDMAConfig]
:param callbacks: callbacks
:type callbacks: Optional[Union[BaseCallback, List[Callback]]]
:type callbacks: Optional[Union[BaseCallbackStreaming,
List[BaseCallbackStreaming]]]
"""
super().__init__(
config=config,
Expand Down Expand Up @@ -630,14 +633,17 @@ class HDDMW(BaseSPC):
def __init__(
self,
config: Optional[HDDMWConfig] = None,
callbacks: Optional[Union[BaseCallback, List[BaseCallback]]] = None,
callbacks: Optional[
Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]
] = None,
) -> None:
"""Init method.

:param config: configuration parameters
:type config: Optional[HDDMWConfig]
:param callbacks: callbacks
:type callbacks: Optional[Union[BaseCallback, List[Callback]]]
:type callbacks: Optional[Union[BaseCallbackStreaming,
List[BaseCallbackStreaming]]]
"""
super().__init__(
config=config,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@

from typing import List, Optional, Union

from frouros.callbacks.base import BaseCallback
from frouros.callbacks.streaming.base import BaseCallbackStreaming
from frouros.detectors.concept_drift.streaming.statistical_process_control.base import (
BaseSPCConfig,
BaseSPCError,
Expand Down Expand Up @@ -125,14 +125,17 @@ class RDDM(BaseSPCError):
def __init__(
self,
config: Optional[RDDMConfig] = None,
callbacks: Optional[Union[BaseCallback, List[BaseCallback]]] = None,
callbacks: Optional[
Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]
] = None,
) -> None:
"""Init method.

:param config: configuration parameters
:type config: Optional[RDDMConfig]
:param callbacks: callbacks
:type callbacks: Optional[Union[BaseCallback, List[Callback]]]
:type callbacks: Optional[Union[BaseCallbackStreaming,
List[BaseCallbackStreaming]]]
"""
super().__init__(
config=config,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@

import numpy as np # type: ignore

from frouros.callbacks.base import BaseCallback
from frouros.callbacks.streaming.base import BaseCallbackStreaming
from frouros.detectors.concept_drift.streaming.window_based.base import (
BaseWindowConfig,
BaseWindow,
Expand Down Expand Up @@ -295,14 +295,17 @@ class ADWIN(BaseWindow):
def __init__(
self,
config: Optional[ADWINConfig] = None,
callbacks: Optional[Union[BaseCallback, List[BaseCallback]]] = None,
callbacks: Optional[
Union[BaseCallbackStreaming, List[BaseCallbackStreaming]]
] = None,
) -> None:
"""Init method.

:param config: configuration parameters
:type config: Optional[ADWINConfig]
:param callbacks: callbacks
:type callbacks: Optional[Union[Callback, List[BaseCallback]]]
:type callbacks: Optional[Union[BaseCallbackStreaming,
List[BaseCallbackStreaming]]]
"""
super().__init__(
config=config,
Expand Down
Loading