WolfDavid's picture
Upload folder using huggingface_hub
8e5ba9e verified
"""Abstract base class for analytical structural solvers.
Every solver implements exact closed-form solutions from classical mechanics.
No numerical approximation — these are the ground truth the neural surrogate
learns to approximate.
"""
from abc import ABC, abstractmethod
from typing import Any
from src.data.schema import SolutionResult
class AnalyticalSolver(ABC):
"""Base class for all analytical structural solvers.
Each subclass implements solve() for a specific structural element
(beam, plate, pressure vessel) using exact closed-form equations.
"""
@abstractmethod
def solve(self, params: dict[str, Any]) -> SolutionResult:
"""Compute analytical solution for given parameters.
Args:
params: Dictionary of input parameters (geometry, material, loading).
Returns:
SolutionResult with max_stress, max_deflection, safety_factor,
and safety_category.
"""
@property
@abstractmethod
def config_id(self) -> str:
"""Unique identifier for this solver configuration."""
@property
@abstractmethod
def problem_family(self) -> str:
"""Problem family: 'beam', 'plate', or 'vessel'."""