"""Type stubs for haze_library.haze_library

Auto-generated from Rust source code.
This module provides technical analysis indicators implemented in Rust.
"""

class Candle:
    """OHLCV Candle data structure."""
    timestamp: int
    open: float
    high: float
    low: float
    close: float
    volume: float
    def __init__(self, timestamp: int, open: float, high: float, low: float, close: float, volume: float) -> None: ...
    def to_dict(self) -> dict[str, float]: ...
    @property
    def typical_price(self) -> float: ...
    @property
    def median_price(self) -> float: ...
    @property
    def weighted_close(self) -> float: ...

class IndicatorResult:
    """Single indicator result container."""
    name: str
    values: list[float]
    metadata: dict[str, str]
    def __init__(self, name: str, values: list[float]) -> None: ...
    def add_metadata(self, key: str, value: str) -> None: ...
    @property
    def len(self) -> int: ...
    def is_empty(self) -> bool: ...

class MultiIndicatorResult:
    """Multiple indicator result container."""
    name: str
    series: dict[str, list[float]]
    metadata: dict[str, str]
    def __init__(self, name: str) -> None: ...
    def add_series(self, key: str, values: list[float]) -> None: ...
    def add_metadata(self, key: str, value: str) -> None: ...

class OhlcvFrame:
    """Cached OHLCV frame for fast repeated computations."""
    def __init__(
        self,
        timestamps: list[int],
        open: list[float],
        high: list[float],
        low: list[float],
        close: list[float],
        volume: list[float],
    ) -> None: ...
    def len(self) -> int: ...
    def __len__(self) -> int: ...
    def is_empty(self) -> bool: ...
    def clear_cache(self) -> None: ...
    def cached_indicators(self) -> list[str]: ...
    def get_cached(self, name: str) -> list[float] | None: ...
    def compute_common_indicators(self) -> dict[str, list[float]]: ...
    def sma(self, period: int) -> list[float]: ...
    def ema(self, period: int) -> list[float]: ...
    def wma(self, period: int) -> list[float]: ...
    def hma(self, period: int) -> list[float]: ...
    def atr(self, period: int) -> list[float]: ...
    def true_range(self) -> list[float]: ...
    def bollinger_bands(self, period: int, std_dev: float) -> tuple[list[float], list[float], list[float]]: ...
    def rsi(self, period: int) -> list[float]: ...
    def macd(self, fast: int, slow: int, signal: int) -> tuple[list[float], list[float], list[float]]: ...
    def stochastic(self, k_period: int, smooth_k: int, d_period: int) -> tuple[list[float], list[float]]: ...
    def cci(self, period: int) -> list[float]: ...
    def williams_r(self, period: int) -> list[float]: ...
    def supertrend(self, period: int, multiplier: float) -> tuple[list[float], list[float], list[float], list[float]]: ...
    def adx(self, period: int) -> tuple[list[float], list[float], list[float]]: ...
    def obv(self) -> list[float]: ...
    def vwap(self, period: int) -> list[float]: ...
    def mfi(self, period: int) -> list[float]: ...

class PyHarmonicPattern:
    """Harmonic pattern detection result."""
    pattern_type: str
    pattern_type_zh: str
    is_bullish: bool
    state: str
    x_index: int
    x_price: float
    a_index: int
    a_price: float
    b_index: int
    b_price: float
    c_index: int | None
    c_price: float | None
    d_index: int | None
    d_price: float | None
    prz_high: float | None
    prz_low: float | None
    prz_center: float | None
    probability: float
    target_prices: list[float]
    stop_loss: float | None

class SFGModel:
    """Python-accessible ML model wrapper."""
    def is_trained(self) -> bool: ...
    def features_dim(self) -> int: ...
    def predict(self, features: list[float], n_samples: int) -> list[float]: ...

# Streaming/Incremental Indicator Classes

class OnlineSMA:
    """Online Simple Moving Average calculator."""
    def __init__(self, period: int) -> None: ...
    def update(self, value: float) -> float | None: ...
    def reset(self) -> None: ...
    def is_ready(self) -> bool: ...

class OnlineEMA:
    """Online Exponential Moving Average calculator."""
    def __init__(self, period: int) -> None: ...
    def update(self, value: float) -> float | None: ...
    def reset(self) -> None: ...
    def is_ready(self) -> bool: ...

class OnlineRSI:
    """Online RSI calculator."""
    def __init__(self, period: int) -> None: ...
    def update(self, value: float) -> float | None: ...
    def reset(self) -> None: ...
    def is_ready(self) -> bool: ...

class OnlineATR:
    """Online ATR calculator."""
    def __init__(self, period: int) -> None: ...
    def update(self, high: float, low: float, close: float) -> float | None: ...
    def reset(self) -> None: ...
    def is_ready(self) -> bool: ...

class OnlineMACD:
    """Online MACD calculator. Returns (macd, signal, histogram)."""
    def __init__(self, fast: int = 12, slow: int = 26, signal: int = 9) -> None: ...
    def update(self, value: float) -> tuple[float, float, float] | None: ...
    def reset(self) -> None: ...
    def is_ready(self) -> bool: ...

class OnlineBollingerBands:
    """Online Bollinger Bands calculator. Returns (upper, middle, lower)."""
    def __init__(self, period: int = 20, std_dev: float = 2.0) -> None: ...
    def update(self, value: float) -> tuple[float, float, float] | None: ...
    def reset(self) -> None: ...
    def is_ready(self) -> bool: ...

class OnlineStochastic:
    """Online Stochastic calculator. Returns (k, d)."""
    def __init__(self, k_period: int = 14, smooth_k: int = 3, d_period: int = 3) -> None: ...
    def update(self, high: float, low: float, close: float) -> tuple[float, float] | None: ...
    def reset(self) -> None: ...
    def is_ready(self) -> bool: ...

class OnlineSuperTrend:
    """Online SuperTrend calculator. Returns (value, direction)."""
    def __init__(self, period: int = 10, multiplier: float = 3.0) -> None: ...
    def update(self, high: float, low: float, close: float) -> tuple[float, int] | None: ...
    def reset(self) -> None: ...
    def is_ready(self) -> bool: ...

class OnlineAdaptiveRSI:
    """Online Adaptive RSI calculator. Returns (rsi, period)."""
    def __init__(self, min_period: int = 7, max_period: int = 21, volatility_period: int = 10) -> None: ...
    def update(self, value: float) -> tuple[float, int] | None: ...
    def reset(self) -> None: ...
    def is_ready(self) -> bool: ...

class EnsembleResult:
    """Ensemble signal result container."""
    signal: float
    rsi_contrib: float
    macd_contrib: float
    stoch_contrib: float
    trend_contrib: float

class OnlineEnsembleSignal:
    """Online Ensemble Signal calculator."""
    def __init__(
        self,
        rsi_period: int = 14,
        macd_fast: int = 12,
        macd_slow: int = 26,
        macd_signal: int = 9,
        stoch_k: int = 14,
        stoch_smooth_k: int = 3,
        stoch_d: int = 3,
        st_period: int = 10,
        st_multiplier: float = 3.0,
        rsi_weight: float = 0.25,
        macd_weight: float = 0.25,
        stoch_weight: float = 0.25,
        st_weight: float = 0.25,
    ) -> None: ...
    @staticmethod
    def with_defaults() -> "OnlineEnsembleSignal": ...
    def update(self, high: float, low: float, close: float) -> EnsembleResult | None: ...
    def reset(self) -> None: ...
    def is_ready(self) -> bool: ...

class MLSuperTrendResult:
    """ML SuperTrend result container."""
    value: float
    confirmed_trend: float
    raw_trend: float
    confidence: float
    effective_multiplier: float

class OnlineMLSuperTrend:
    """Online ML-enhanced SuperTrend calculator."""
    def __init__(self, period: int = 10, multiplier: float = 3.0, confirmation_bars: int = 2, volatility_period: int = 10) -> None: ...
    @staticmethod
    def with_defaults() -> "OnlineMLSuperTrend": ...
    def update(self, high: float, low: float, close: float) -> MLSuperTrendResult | None: ...
    def reset(self) -> None: ...
    def is_ready(self) -> bool: ...

class AISuperTrendMLResult:
    """AI SuperTrend ML result container."""
    supertrend: float
    direction: int
    trend_offset: float
    buy_signal: bool
    sell_signal: bool
    stop_loss: float
    take_profit: float

class OnlineAISuperTrendML:
    """Online AI SuperTrend ML calculator with sliding window regression."""
    def __init__(self, st_length: int = 10, st_multiplier: float = 3.0, lookback: int = 10, train_window: int = 200) -> None: ...
    @staticmethod
    def with_defaults() -> "OnlineAISuperTrendML": ...
    def update(self, high: float, low: float, close: float) -> AISuperTrendMLResult | None: ...
    def reset(self) -> None: ...
    def is_ready(self) -> bool: ...

# Volatility Indicators

def py_aberration(high: list[float], low: list[float], close: list[float], period: int = 20, atr_period: int = 20) -> list[float]: ...
def py_atr(high: list[float], low: list[float], close: list[float], period: int = 14) -> list[float]: ...
def py_atr2_signals(high: list[float], low: list[float], close: list[float], volume: list[float], trend_length: int | None, confirmation_threshold: float | None, momentum_window: int | None) -> tuple[list[float], list[float], list[float]]: ...
def py_atr2_signals_ml(high: list[float], low: list[float], close: list[float], volume: list[float], rsi_period: int | None, atr_period: int | None, ridge_alpha: float | None, momentum_window: int | None) -> tuple[list[float], list[float], list[float], list[float], list[float], list[float]]: ...
def py_bollinger_bands(close: list[float], period: int = 20, std_multiplier: float = 2.0) -> tuple[list[float], list[float], list[float]]: ...
def py_chandelier_exit(high: list[float], low: list[float], close: list[float], period: int = 22, atr_period: int = 22, multiplier: float = 3.0) -> tuple[list[float], list[float]]: ...
def py_donchian_channel(high: list[float], low: list[float], period: int = 20) -> tuple[list[float], list[float], list[float]]: ...
def py_historical_volatility(close: list[float], period: int = 20) -> list[float]: ...
def py_keltner_channel(high: list[float], low: list[float], close: list[float], period: int = 20, atr_period: int | None = None, multiplier: float = 2.0) -> tuple[list[float], list[float], list[float]]: ...
def py_mass_index(high: list[float], low: list[float], fast: int = 9, slow: int = 25) -> list[float]: ...
def py_natr(high: list[float], low: list[float], close: list[float], period: int = 14) -> list[float]: ...
def py_prepare_atr2_features(close: list[float], atr: list[float], volume: list[float], lookback: int) -> tuple[list[float], int, int]: ...
def py_train_atr2_model(close: list[float], atr: list[float], volume: list[float], train_window: int | None, lookback: int | None, ridge_alpha: float | None) -> SFGModel: ...
def py_true_range(high: list[float], low: list[float], close: list[float], drift: int = 1) -> list[float]: ...
def py_ulcer_index(close: list[float], period: int = 14) -> list[float]: ...

# Momentum Indicators

def py_ai_momentum_index(close: list[float], k: int | None, trend_length: int | None, smooth: int | None) -> tuple[list[float], list[float]]: ...
def py_ai_momentum_index_ml(close: list[float], rsi_period: int | None, smooth_period: int | None, use_polynomial: bool | None, lookback: int | None, train_window: int | None) -> tuple[list[float], list[float], list[float], list[float], list[float], list[float]]: ...
def py_ai_supertrend(high: list[float], low: list[float], close: list[float], k: int | None, n: int | None, price_trend: int | None, predict_trend: int | None, st_length: int | None, st_multiplier: float | None) -> tuple[list[float], list[float]]: ...
def py_ai_supertrend_ml(high: list[float], low: list[float], close: list[float], st_length: int | None, st_multiplier: float | None, model_type: str | None, lookback: int | None, train_window: int | None) -> tuple[list[float], list[float], list[float], list[float], list[float], list[float]]: ...
def py_awesome_oscillator(high: list[float], low: list[float], fast_period: int = 5, slow_period: int = 34) -> list[float]: ...
def py_bias(close: list[float], period: int | None) -> list[float]: ...
def py_breaker_block_signals(open: list[float], high: list[float], low: list[float], close: list[float], lookback: int | None) -> tuple[list[float], list[float], list[float], list[float]]: ...
def py_calc_pivot_series(open: list[float], high: list[float], low: list[float], close: list[float], method: str) -> list[tuple[float, float, float, float, float, float, float, float, float]]: ...
def py_cci(high: list[float], low: list[float], close: list[float], period: int = 20) -> list[float]: ...
def py_cfo(close: list[float], period: int | None) -> list[float]: ...
def py_cmo(close: list[float], period: int = 14) -> list[float]: ...
def py_coppock(close: list[float], period1: int | None, period2: int | None, wma_period: int | None) -> list[float]: ...
def py_counterattack(open: list[float], high: list[float], low: list[float], close: list[float], tolerance: float = 0.005) -> list[float]: ...
def py_cti(close: list[float], period: int = 12) -> list[float]: ...
def py_dark_cloud_cover(open: list[float], high: list[float], close: list[float]) -> list[float]: ...
def py_detect_divergence(price: list[float], indicator: list[float], lookback: int | None, threshold: float | None) -> tuple[list[int], list[float]]: ...
def py_dynamic_macd(open: list[float], high: list[float], low: list[float], close: list[float], fast_length: int | None, slow_length: int | None, signal_smooth: int | None) -> tuple[list[float], list[float], list[float], list[float], list[float]]: ...
def py_entropy(close: list[float], period: int = 10, bins: int = 10) -> list[float]: ...
def py_er(close: list[float], period: int | None) -> list[float]: ...
def py_fibonacci_extension(start_price: float, end_price: float, retracement_price: float) -> list[tuple[str, float]]: ...
def py_fibonacci_pivots(high: float, low: float, close: float) -> tuple[float, float, float, float, float, float, float]: ...
def py_fibonacci_retracement(start_price: float, end_price: float) -> list[tuple[str, float]]: ...
def py_fisher_transform(high: list[float], low: list[float], close: list[float], period: int = 10) -> tuple[list[float], list[float]]: ...
def py_general_parameters_signals(high: list[float], low: list[float], close: list[float], ema_fast: int | None, ema_slow: int | None, atr_period: int | None, grid_multiplier: float | None) -> tuple[list[float], list[float], list[float], list[float]]: ...
def py_hammer(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_harmonics_patterns(high: list[float], low: list[float], left_bars: int | None, right_bars: int | None, include_forming: bool | None) -> list[PyHarmonicPattern]: ...
def py_ht_dcperiod(values: list[float]) -> list[float]: ...
def py_inertia(open: list[float], high: list[float], low: list[float], close: list[float], rvi_period: int | None, regression_period: int | None) -> list[float]: ...
def py_inverted_hammer(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_kdj(high: list[float], low: list[float], close: list[float], k_period: int = 9, smooth_k: int = 3, d_period: int = 3) -> tuple[list[float], list[float], list[float]]: ...
def py_kst(close: list[float], roc1: int | None, roc2: int | None, roc3: int | None, roc4: int | None, signal_period: int | None) -> tuple[list[float], list[float]]: ...
def py_ladder_bottom(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_linearreg_intercept(values: list[float], period: int) -> list[float]: ...
def py_macd(close: list[float], fast_period: int = 12, slow_period: int = 26, signal_period: int = 9) -> tuple[list[float], list[float], list[float]]: ...
def py_mom(values: list[float], period: int = 10) -> list[float]: ...
def py_percent_rank(values: list[float], period: int | None) -> list[float]: ...
def py_pgo(high: list[float], low: list[float], close: list[float], period: int | None) -> list[float]: ...
def py_piercing_pattern(open: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_prepare_momentum_features(rsi: list[float], lookback: int) -> tuple[list[float], int, int]: ...
def py_prepare_supertrend_features(close: list[float], atr: list[float], lookback: int) -> tuple[list[float], int, int]: ...
def py_psl(close: list[float], period: int | None) -> list[float]: ...
def py_qqe(close: list[float], rsi_period: int = 14, smooth: int = 5, multiplier: float = 4.236) -> tuple[list[float], list[float], list[float]]: ...
def py_qstick(open: list[float], close: list[float], period: int = 14) -> list[float]: ...
def py_roc(values: list[float], period: int = 10) -> list[float]: ...
def py_rsi(close: list[float], period: int = 14) -> list[float]: ...
def py_rvi(open: list[float], high: list[float], low: list[float], close: list[float], period: int | None, signal_period: int | None) -> tuple[list[float], list[float]]: ...
def py_smi(high: list[float], low: list[float], close: list[float], period: int | None, smooth1: int | None, smooth2: int | None) -> list[float]: ...
def py_stalled_pattern(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_standard_error(y_values: list[float], period: int) -> list[float]: ...
def py_stc(close: list[float], fast: int | None, slow: int | None, cycle: int | None) -> list[float]: ...
def py_stderr(y_values: list[float], period: int) -> list[float]: ...
def py_stoch_rsi(close: list[float], rsi_period: int = 14, stoch_period: int = 14, k_period: int = 3, d_period: int = 3) -> tuple[list[float], list[float]]: ...
def py_stochastic(high: list[float], low: list[float], close: list[float], k_period: int = 14, smooth_k: int = 3, d_period: int = 3) -> tuple[list[float], list[float]]: ...
def py_stochrsi(close: list[float], rsi_period: int = 14, stoch_period: int = 14, k_period: int = 3, d_period: int = 3) -> tuple[list[float], list[float]]: ...
def py_supertrend(high: list[float], low: list[float], close: list[float], period: int = 10, multiplier: float = 3.0) -> tuple[list[float], list[float], list[float], list[float]]: ...
def py_tdfi(close: list[float], period: int | None, smooth: int | None) -> list[float]: ...
def py_three_outside(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_three_white_soldiers(open: list[float], high: list[float], close: list[float]) -> list[float]: ...
def py_train_momentum_model(rsi: list[float], train_window: int | None, lookback: int | None) -> SFGModel: ...
def py_train_supertrend_model(close: list[float], atr: list[float], train_window: int | None, lookback: int | None, use_ridge: bool | None, ridge_alpha: float | None) -> SFGModel: ...
def py_tsi(close: list[float], long_period: int = 25, short_period: int = 13, signal_period: int = 13) -> tuple[list[float], list[float]]: ...
def py_tweezers_bottom(open: list[float], low: list[float], close: list[float], tolerance: float = 0.01) -> list[float]: ...
def py_tweezers_top(open: list[float], high: list[float], close: list[float], tolerance: float = 0.01) -> list[float]: ...
def py_ultimate_oscillator(high: list[float], low: list[float], close: list[float], period1: int = 7, period2: int = 14, period3: int = 28) -> list[float]: ...
def py_unique_3_river(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_volume_filter(volume: list[float], period: int | None) -> tuple[list[bool], list[float], list[bool]]: ...
def py_vortex(high: list[float], low: list[float], close: list[float], period: int = 14) -> tuple[list[float], list[float]]: ...
def py_williams_r(high: list[float], low: list[float], close: list[float], period: int = 14) -> list[float]: ...

# Trend Indicators

def py_adx(high: list[float], low: list[float], close: list[float], period: int = 14) -> tuple[list[float], list[float], list[float]]: ...
def py_alligator(high: list[float], low: list[float], jaw_period: int | None, teeth_period: int | None, lips_period: int | None) -> tuple[list[float], list[float], list[float]]: ...
def py_aroon(high: list[float], low: list[float], period: int = 25) -> tuple[list[float], list[float], list[float]]: ...
def py_choppiness(high: list[float], low: list[float], close: list[float], period: int = 14) -> list[float]: ...
def py_dpo(close: list[float], period: int = 20) -> list[float]: ...
def py_dx(high: list[float], low: list[float], close: list[float], period: int = 14) -> list[float]: ...
def py_linearreg_slope(values: list[float], period: int) -> list[float]: ...
def py_midpoint(values: list[float], period: int) -> list[float]: ...
def py_minus_di(high: list[float], low: list[float], close: list[float], period: int = 14) -> list[float]: ...
def py_plus_di(high: list[float], low: list[float], close: list[float], period: int = 14) -> list[float]: ...
def py_psar(high: list[float], low: list[float], close: list[float], af_init: float | None, af_increment: float = 0.02, af_max: float = 0.2) -> tuple[list[float], list[float]]: ...
def py_slope(values: list[float], period: int | None) -> list[float]: ...
def py_trix(close: list[float], period: int = 15) -> list[float]: ...
def py_vhf(close: list[float], period: int = 28) -> list[float]: ...

# Volume Indicators

def py_ad(high: list[float], low: list[float], close: list[float], volume: list[float]) -> list[float]: ...
def py_add(values1: list[float], values2: list[float]) -> list[float]: ...
def py_adosc(high: list[float], low: list[float], close: list[float], volume: list[float], fast_period: int | None, slow_period: int | None) -> list[float]: ...
def py_advance_block(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_bop(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_cmf(high: list[float], low: list[float], close: list[float], volume: list[float], period: int = 20) -> list[float]: ...
def py_efi(close: list[float], volume: list[float], period: int | None) -> list[float]: ...
def py_eom(high: list[float], low: list[float], volume: list[float], period: int | None) -> list[float]: ...
def py_force_index(close: list[float], volume: list[float], period: int = 13) -> list[float]: ...
def py_mfi(high: list[float], low: list[float], close: list[float], volume: list[float], period: int = 14) -> list[float]: ...
def py_nvi(close: list[float], volume: list[float]) -> list[float]: ...
def py_obv(close: list[float], volume: list[float]) -> list[float]: ...
def py_pvi(close: list[float], volume: list[float]) -> list[float]: ...
def py_pvt(close: list[float], volume: list[float]) -> list[float]: ...
def py_volume_oscillator(volume: list[float], short_period: int = 5, long_period: int = 10) -> list[float]: ...
def py_volume_profile(high: list[float], low: list[float], close: list[float], volume: list[float], num_bins: int | None) -> tuple[list[float], list[float], float]: ...
def py_vwap(high: list[float], low: list[float], close: list[float], volume: list[float], period: int | None) -> list[float]: ...
def py_vwma(close: list[float], volume: list[float], period: int | None) -> list[float]: ...

# Overlap/MA Indicators

def py_alma(values: list[float], period: int | None, offset: float | None, sigma: float | None) -> list[float]: ...
def py_dema(values: list[float], period: int) -> list[float]: ...
def py_demark_pivots(open: float, high: float, low: float, close: float) -> tuple[float, float, float, float, float, float, float]: ...
def py_ema(values: list[float], period: int) -> list[float]: ...
def py_frama(values: list[float], period: int | None) -> list[float]: ...
def py_hma(values: list[float], period: int) -> list[float]: ...
def py_kama(values: list[float], period: int = 10, fast_period: int = 2, slow_period: int = 30) -> list[float]: ...
def py_linreg_supply_demand_signals(high: list[float], low: list[float], close: list[float], volume: list[float], linreg_period: int | None, tolerance: float | None) -> tuple[list[float], list[float], list[float], list[float]]: ...
def py_mama(values: list[float], fast_limit: float | None, slow_limit: float | None) -> tuple[list[float], list[float]]: ...
def py_parabolic_sar(high: list[float], low: list[float], close: list[float], af_init: float = 0.02, af_increment: float = 0.02, af_max: float = 0.2) -> tuple[list[float], list[float]]: ...
def py_pwma(values: list[float], period: int | None) -> list[float]: ...
def py_rma(values: list[float], period: int) -> list[float]: ...
def py_sar(high: list[float], low: list[float], acceleration: float = 0.02, maximum: float = 0.2) -> list[float]: ...
def py_sarext(high: list[float], low: list[float], start_value: float | None, offset_on_reverse: float | None, af_init_long: float | None, af_long: float | None, af_max_long: float | None, af_init_short: float | None, af_short: float | None, af_max_short: float | None) -> list[float]: ...
def py_sinwma(values: list[float], period: int | None) -> list[float]: ...
def py_sma(values: list[float], period: int) -> list[float]: ...
def py_ssl_channel(high: list[float], low: list[float], close: list[float], period: int | None) -> tuple[list[float], list[float]]: ...
def py_swma(values: list[float], period: int | None) -> list[float]: ...
def py_t3(values: list[float], period: int = 5, vfactor: float = 0.7) -> list[float]: ...
def py_tema(values: list[float], period: int) -> list[float]: ...
def py_trima(values: list[float], period: int) -> list[float]: ...
def py_vidya(close: list[float], period: int | None) -> list[float]: ...
def py_wma(values: list[float], period: int) -> list[float]: ...
def py_zlma(values: list[float], period: int) -> list[float]: ...

# Pattern Recognition

def py_abandoned_baby(open: list[float], high: list[float], low: list[float], close: list[float], body_threshold: float = 0.1) -> list[float]: ...
def py_bearish_engulfing(open: list[float], close: list[float]) -> list[float]: ...
def py_bearish_harami(open: list[float], close: list[float]) -> list[float]: ...
def py_belthold(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_breakaway(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_bullish_engulfing(open: list[float], close: list[float]) -> list[float]: ...
def py_bullish_harami(open: list[float], close: list[float]) -> list[float]: ...
def py_closing_marubozu(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_concealing_baby_swallow(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_doji(open: list[float], high: list[float], low: list[float], close: list[float], body_threshold: float = 0.1) -> list[float]: ...
def py_doji_star(open: list[float], high: list[float], low: list[float], close: list[float], body_threshold: float = 0.1) -> list[float]: ...
def py_dragonfly_doji(open: list[float], high: list[float], low: list[float], close: list[float], body_threshold: float = 0.1) -> list[float]: ...
def py_evening_doji_star(open: list[float], high: list[float], low: list[float], close: list[float], body_threshold: float = 0.1) -> list[float]: ...
def py_evening_star(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_falling_three_methods(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_gap_sidesidewhite(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_gravestone_doji(open: list[float], high: list[float], low: list[float], close: list[float], body_threshold: float = 0.1) -> list[float]: ...
def py_hanging_man(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_harami_cross(open: list[float], high: list[float], low: list[float], close: list[float], body_threshold: float = 0.1) -> list[float]: ...
def py_harmonics(high: list[float], low: list[float], close: list[float], left_bars: int | None, right_bars: int | None, min_probability: float | None) -> tuple[list[float], list[float], list[float], list[float]]: ...
def py_highwave(open: list[float], high: list[float], low: list[float], close: list[float], body_threshold: float = 0.15) -> list[float]: ...
def py_hikkake(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_hikkake_mod(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_homing_pigeon(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_identical_three_crows(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_inneck(open: list[float], high: list[float], low: list[float], close: list[float], tolerance: float = 0.01) -> list[float]: ...
def py_kicking(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_long_legged_doji(open: list[float], high: list[float], low: list[float], close: list[float], body_threshold: float = 0.1) -> list[float]: ...
def py_long_line(open: list[float], high: list[float], low: list[float], close: list[float], lookback: int = 10) -> list[float]: ...
def py_marubozu(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_mat_hold(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_matching_low(open: list[float], high: list[float], low: list[float], close: list[float], tolerance: float = 0.01) -> list[float]: ...
def py_morning_doji_star(open: list[float], high: list[float], low: list[float], close: list[float], body_threshold: float = 0.1) -> list[float]: ...
def py_morning_star(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_onneck(open: list[float], high: list[float], low: list[float], close: list[float], tolerance: float = 0.01) -> list[float]: ...
def py_rickshaw_man(open: list[float], high: list[float], low: list[float], close: list[float], body_threshold: float = 0.1) -> list[float]: ...
def py_rising_three_methods(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_separating_lines(open: list[float], high: list[float], low: list[float], close: list[float], tolerance: float = 0.005) -> list[float]: ...
def py_shooting_star(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_short_line(open: list[float], high: list[float], low: list[float], close: list[float], lookback: int = 10) -> list[float]: ...
def py_spinning_top(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_stick_sandwich(open: list[float], high: list[float], low: list[float], close: list[float], tolerance: float = 0.01) -> list[float]: ...
def py_swing_points(high: list[float], low: list[float], left_bars: int | None, right_bars: int | None) -> list[tuple[int, float, bool]]: ...
def py_takuri(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_three_black_crows(open: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_three_inside(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_thrusting(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_tristar(open: list[float], high: list[float], low: list[float], close: list[float], body_threshold: float = 0.1) -> list[float]: ...
def py_upside_gap_two_crows(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_xside_gap_3_methods(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...

# Statistical Functions

def py_beta(asset_returns: list[float], benchmark_returns: list[float], period: int) -> list[float]: ...
def py_correl(values1: list[float], values2: list[float], period: int) -> list[float]: ...
def py_correlation(x: list[float], y: list[float], period: int) -> list[float]: ...
def py_covariance(x: list[float], y: list[float], period: int) -> list[float]: ...
def py_linear_regression(y_values: list[float], period: int) -> tuple[list[float], list[float], list[float]]: ...
def py_linearreg(values: list[float], period: int) -> list[float]: ...
def py_linearreg_angle(values: list[float], period: int) -> list[float]: ...
def py_tsf(values: list[float], period: int) -> list[float]: ...
def py_var(values: list[float], period: int) -> list[float]: ...
def py_zscore(values: list[float], period: int) -> list[float]: ...

# Price Transforms

def py_avgprice(open: list[float], high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_medprice(high: list[float], low: list[float]) -> list[float]: ...
def py_midprice(high: list[float], low: list[float], period: int) -> list[float]: ...
def py_typprice(high: list[float], low: list[float], close: list[float]) -> list[float]: ...
def py_wclprice(high: list[float], low: list[float], close: list[float]) -> list[float]: ...

# Math Operators

def py_abs(values: list[float]) -> list[float]: ...
def py_acos(values: list[float]) -> list[float]: ...
def py_asin(values: list[float]) -> list[float]: ...
def py_atan(values: list[float]) -> list[float]: ...
def py_ceil(values: list[float]) -> list[float]: ...
def py_cos(values: list[float]) -> list[float]: ...
def py_cosh(values: list[float]) -> list[float]: ...
def py_div(values1: list[float], values2: list[float]) -> list[float]: ...
def py_exp(values: list[float]) -> list[float]: ...
def py_floor(values: list[float]) -> list[float]: ...
def py_ht_sine(values: list[float]) -> tuple[list[float], list[float]]: ...
def py_ln(values: list[float]) -> list[float]: ...
def py_log10(values: list[float]) -> list[float]: ...
def py_max(values: list[float], period: int) -> list[float]: ...
def py_min(values: list[float], period: int) -> list[float]: ...
def py_minmax(values: list[float], period: int) -> tuple[list[float], list[float]]: ...
def py_minmaxindex(values: list[float], period: int) -> tuple[list[float], list[float]]: ...
def py_mult(values1: list[float], values2: list[float]) -> list[float]: ...
def py_sin(values: list[float]) -> list[float]: ...
def py_sinh(values: list[float]) -> list[float]: ...
def py_sqrt(values: list[float]) -> list[float]: ...
def py_standard_pivots(high: float, low: float, close: float) -> tuple[float, float, float, float, float, float, float]: ...
def py_sub(values1: list[float], values2: list[float]) -> list[float]: ...
def py_sum(values: list[float], period: int) -> list[float]: ...
def py_tan(values: list[float]) -> list[float]: ...
def py_tanh(values: list[float]) -> list[float]: ...

# Utility Functions

def py_apo(close: list[float], fast_period: int = 12, slow_period: int = 26) -> list[float]: ...
def py_camarilla_pivots(high: float, low: float, close: float) -> tuple[float, float, float, float, float, float, float, float, float]: ...
def py_classic_pivots(high: float, low: float, close: float) -> tuple[float, float, float, float, float, float, float]: ...
def py_cloud_color(tenkan_sen: list[float], kijun_sen: list[float], senkou_span_a: list[float], senkou_span_b: list[float], chikou_span: list[float]) -> list[float]: ...
def py_cloud_thickness(tenkan_sen: list[float], kijun_sen: list[float], senkou_span_a: list[float], senkou_span_b: list[float], chikou_span: list[float]) -> list[float]: ...
def py_detect_fib_touch(current_price: float, levels: list[tuple[str, float]], tolerance: float | None) -> str | None: ...
def py_detect_pivot_touch(current_price: float, levels: tuple[float, float, float, float, float, float, float, float, float], tolerance: float | None) -> str | None: ...
def py_dmi(high: list[float], low: list[float], close: list[float], period: int = 14) -> tuple[list[float], list[float]]: ...
def py_dynamic_fib_retracement(prices: list[float], lookback: int | None) -> list[float]: ...
def py_fib_extension(start_price: float, end_price: float, retracement_price: float) -> list[tuple[str, float]]: ...
def py_fib_fan_lines(start_index: int, end_index: int, start_price: float, end_price: float, target_index: int) -> tuple[float, float, float]: ...
def py_fib_retracement(start_price: float, end_price: float) -> list[tuple[str, float]]: ...
def py_fib_time_zones(start_index: int, max_zones: int) -> list[int]: ...
def py_ichimoku_cloud(high: list[float], low: list[float], close: list[float], tenkan_period: int | None, kijun_period: int | None, senkou_b_period: int | None) -> tuple[list[float], list[float], list[float], list[float], list[float]]: ...
def py_ichimoku_signals(close: list[float], tenkan_sen: list[float], kijun_sen: list[float], senkou_span_a: list[float], senkou_span_b: list[float], chikou_span: list[float]) -> list[int]: ...
def py_ichimoku_tk_cross(tenkan_sen: list[float], kijun_sen: list[float], senkou_span_a: list[float], senkou_span_b: list[float], chikou_span: list[float]) -> list[float]: ...
def py_pivot_zone(current_price: float, levels: tuple[float, float, float, float, float, float, float, float, float]) -> str: ...
def py_ppo(close: list[float], fast_period: int = 12, slow_period: int = 26) -> list[float]: ...
def py_trailing_stop(close: list[float], atr_values: list[float], direction: list[float], multiplier: float | None) -> list[float]: ...
def py_woodie_pivots(high: float, low: float, close: float) -> tuple[float, float, float, float, float, float, float]: ...

# Advanced Indicators

def py_calculate_stops(close: list[float], atr_values: list[float], buy_signals: list[float], sell_signals: list[float], sl_multiplier: float | None, tp_multiplier: float | None) -> tuple[list[float], list[float]]: ...
def py_combine_signals(buy1: list[float], sell1: list[float], buy2: list[float], sell2: list[float], weight1: float | None) -> tuple[list[float], list[float], list[float]]: ...
def py_fvg_signals(high: list[float], low: list[float]) -> tuple[list[float], list[float], list[float], list[float]]: ...
def py_pd_array_signals(high: list[float], low: list[float], close: list[float], swing_lookback: int | None) -> tuple[list[float], list[float], list[float], list[float]]: ...
def py_pivot_buy_sell(high: list[float], low: list[float], close: list[float], lookback: int | None) -> tuple[list[float], list[float], list[float], list[float], list[float], list[float], list[float]]: ...
def py_squeeze(high: list[float], low: list[float], close: list[float], bb_period: int = 20, bb_std: float = 2.0, kc_period: int = 20, kc_atr_period: int = 20, kc_mult: float = 1.5) -> tuple[list[float], list[float], list[float]]: ...
def py_wae(close: list[float], fast: int | None, slow: int | None, signal: int | None, bb_period: int | None, multiplier: float | None) -> tuple[list[float], list[float]]: ...

# Hilbert Transform

def py_ht_dcphase(values: list[float]) -> list[float]: ...
def py_ht_phasor(values: list[float]) -> tuple[list[float], list[float]]: ...
def py_ht_trendmode(values: list[float]) -> list[float]: ...
