Source code for src.config

#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
Provides a centralised, immutable container for all simulation parameters.
 
:module: config
:author: Le Bars, Yoann
"""


from __future__ import annotations


# Defines the public names of this module.
__all__ = ['SimulationConfig']


from dataclasses import dataclass
from src import constants
from src.args import CmdLineArgs


[docs] @dataclass(frozen=True) class SimulationConfig: """ A centralised, immutable container for all simulation parameters. This object is created from command-line arguments and passed to the simulation engine, decoupling the core logic from argument parsing. The `frozen=True` attribute makes instances of this class immutable, preventing accidental modification of parameters during the simulation. :ivar int n_iter: Number of simulation iterations. :ivar int n_bodies: Number of bodies to simulate. :ivar float dens: Density of the bodies. :ivar float universal_g: Universal gravitational constant. :ivar float epsilon: Softening factor for force calculations. :ivar int seed: Seed for random number generation. :ivar int log_freq: Frequency of energy log output. :ivar float target_dx: Heuristic for adaptive time-stepping. :ivar float max_dt: Maximum allowed time step. :ivar float dt_damping_factor: Damping factor for time step smoothing. :ivar float coeff_restitution: Coefficient of restitution for collisions. :ivar float coeff_friction: Coefficient of kinetic friction. :ivar float positional_correction_factor: Factor for Baumgarte stabilisation. :ivar float coeff_static_friction: Coefficient of static friction. :ivar float linear_damping: Damping factor for linear velocity. :ivar float angular_damping: Damping factor for angular velocity. """ # Core simulation parameters n_iter: int n_bodies: int dens: float universal_g: float epsilon: float seed: int log_freq: int # Algorithmic and physics tuning parameters target_dx: float = constants.TARGET_DX max_dt: float = constants.MAX_DT dt_damping_factor: float = constants.DT_DAMPING_FACTOR coeff_restitution: float = constants.COEFF_RESTITUTION coeff_friction: float = constants.COEFF_FRICTION positional_correction_factor: float = constants.POSITIONAL_CORRECTION_FACTOR coeff_static_friction: float = constants.COEFF_STATIC_FRICTION linear_damping: float = constants.LINEAR_DAMPING angular_damping: float = constants.ANGULAR_DAMPING # Display options show_torque_arrow: bool = False show_alpha_arrow: bool = False
[docs] @classmethod def from_args(cls, args: CmdLineArgs) -> 'SimulationConfig': """ Factory method to create a SimulationConfig instance from parsed command-line arguments. :param CmdLineArgs args: The parsed command-line arguments. :returns: An initialised SimulationConfig object. :rtype: 'SimulationConfig' """ return cls( n_iter=args.n_iter, n_bodies=args.n_bodies, dens=args.dens, universal_g=args.universal_g, epsilon=args.epsilon, seed=args.seed, log_freq=args.log_freq, coeff_restitution=args.restitution, coeff_friction=args.friction, coeff_static_friction=args.static_friction, linear_damping=args.linear_damping, angular_damping=args.angular_damping, show_torque_arrow=args.show_torque_arrow, show_alpha_arrow=args.show_alpha_arrow )