"""Initialization constants."""

from __future__ import annotations

import math
from dataclasses import asdict

from ..compat.dataclass import dataclass
from ..constants.canonical import CONFIG_INIT_VF_MEAN_CANONICAL, CONFIG_INIT_VF_STD_CANONICAL


@dataclass(frozen=True, slots=True)
class InitDefaults:
    """Default parameters for node initialisation.

    The fields are collected into :data:`INIT_DEFAULTS` and may therefore
    appear unused to tools like Vulture.
    """

    INIT_RANDOM_PHASE: bool = True
    INIT_THETA_MIN: float = -math.pi
    INIT_THETA_MAX: float = math.pi
    INIT_VF_MODE: str = "uniform"
    INIT_VF_MIN: float | None = None
    INIT_VF_MAX: float | None = None
    INIT_VF_MEAN: float = CONFIG_INIT_VF_MEAN_CANONICAL
    INIT_VF_STD: float = CONFIG_INIT_VF_STD_CANONICAL
    INIT_VF_CLAMP_TO_LIMITS: bool = True
    INIT_SI_MIN: float = 0.4
    INIT_SI_MAX: float = 0.7
    INIT_EPI_VALUE: float = 0.0


INIT_DEFAULTS = asdict(InitDefaults())
