Source code for lrdbenchmark.models.data_models

"""
Data models package containing implementations of stochastic processes.

This package provides classes for generating synthetic data from various
stochastic models including ARFIMA, fBm, fGn, and MRW.
"""

from .base_model import BaseModel

# Import all model classes
try:
    from .alpha_stable_model import AlphaStableModel
    from .arfima_model import ARFIMAModel
    from .fbm_model import FractionalBrownianMotion
    from .fgn_model import FractionalGaussianNoise
    from .mrw_model import MultifractalRandomWalk

    # Create shortened aliases for convenience
    FBMModel = FractionalBrownianMotion
    FGNModel = FractionalGaussianNoise
    ARFIMAModel = ARFIMAModel  # Keep as is since it's already short
    MRWModel = MultifractalRandomWalk
    AlphaStableModel = AlphaStableModel  # Keep as is since it's already descriptive

except ImportError as e:
    print(f"Warning: Could not import data models: {e}")

    # Create placeholder classes
    class FBMModel:
        def __init__(self, H=0.6, **kwargs):
            self.H = H

        def generate(self, length=1000, **kwargs):
            import numpy as np

            t = np.linspace(0, 1, length)
            dt = t[1] - t[0]
            increments = np.random.normal(0, 1, length) * (dt**self.H)
            return np.cumsum(increments)

    class FGNModel:
        def __init__(self, H=0.6, **kwargs):
            self.H = H

        def generate(self, length=1000, **kwargs):
            import numpy as np

            t = np.linspace(0, 1, length)
            dt = t[1] - t[0]
            return np.random.normal(0, 1, length) * (dt**self.H)

    class ARFIMAModel:
        def __init__(self, d=0.2, **kwargs):
            self.d = d

        def generate(self, length=1000, **kwargs):
            import numpy as np

            return np.random.normal(0, 1, length)

    class MRWModel:
        def __init__(self, H=0.6, **kwargs):
            self.H = H

        def generate(self, length=1000, **kwargs):
            import numpy as np

            return np.random.normal(0, 1, length)

    class AlphaStableModel:
        def __init__(self, alpha=1.5, beta=0.0, **kwargs):
            self.alpha = alpha
            self.beta = beta

        def generate(self, length=1000, **kwargs):
            import numpy as np

            return np.random.normal(0, 1, length)


# Convenience functions with default parameters
[docs] def create_fbm_model(H=0.7, sigma=1.0): """Create FBMModel with default parameters""" return FBMModel(H=H, sigma=sigma)
[docs] def create_fgn_model(H=0.6, sigma=1.0): """Create FGNModel with default parameters""" return FGNModel(H=H, sigma=sigma)
[docs] def create_arfima_model(d=0.2, sigma=1.0): """Create ARFIMAModel with default parameters""" return ARFIMAModel(d=d, sigma=sigma)
[docs] def create_mrw_model(H=0.7, lambda_param=0.1, sigma=1.0): """Create MRWModel with default parameters""" return MRWModel(H=H, lambda_param=lambda_param, sigma=sigma)
def create_alpha_stable_model(alpha=1.5, beta=0.0, sigma=1.0, mu=0.0): """Create AlphaStableModel with default parameters""" return AlphaStableModel(alpha=alpha, beta=beta, sigma=sigma, mu=mu) __all__ = [ "BaseModel", "FractionalBrownianMotion", "FractionalGaussianNoise", "ARFIMAModel", "MultifractalRandomWalk", "AlphaStableModel", "FBMModel", "FGNModel", "MRWModel", "create_fbm_model", "create_fgn_model", "create_arfima_model", "create_mrw_model", "create_alpha_stable_model", ]