from pathlib import Path from typing import Any, List, Optional, Union import pandas as pd class BaseSolution: """Base class for any competition solution.""" def __init__(self, config: Optional[dict] = None): self.models: List[Any] = [] def fit(self, X: pd.DataFrame, y: pd.DataFrame, **kwargs): raise NotImplementedError(f"Abstract class {type(self).__name__} is used") def predict(self, X: pd.DataFrame) -> pd.DataFrame: raise NotImplementedError(f"Abstract class {type(self).__name__} is used") def save(self, directory: Union[str, Path]) -> None: """Stores model to the directory. The directory must be empty. """ raise NotImplementedError(f"Abstract class {type(self).__name__} is used") def load(self, directory: Union[str, Path]) -> None: """Loads model from the directory. Initializes the solution correctly even if the config dict wasn't specified in the constructor. The directory should not contain files other than those produced by the `save` method of the same class. """ raise NotImplementedError(f"Abstract class {type(self).__name__} is used")