Source code for scpn_fusion.core.deeponet_training_contracts
# SPDX-License-Identifier: AGPL-3.0-or-later
# Commercial license available
# © Concepts 1996–2026 Miroslav Šotek. All rights reserved.
# © Code 2020–2026 Miroslav Šotek. All rights reserved.
# ORCID: 0009-0009-3560-0851
# Contact: www.anulum.li | protoscience@anulum.li
# SCPN Fusion Core — DeepONet Training Contracts
"""Typed configuration and prepared-data contracts for DeepONet training."""
from __future__ import annotations
from dataclasses import dataclass
from pathlib import Path
from typing import Any, TypeAlias, TypedDict
import numpy as np
from numpy.typing import NDArray
from scpn_fusion.io.machine_conditioned_surrogate_training import (
MachineConditionedSplit,
MachineConditionedTrainingData,
)
FloatArray: TypeAlias = NDArray[np.float64]
IndexArray: TypeAlias = NDArray[np.int64]
[docs]
class RuntimeBackendParity(TypedDict):
"""JSON-safe Rust-versus-NumPy evidence over an authenticated split."""
evaluated: bool
native_backend: str
reference_backend: str
sample_count: int
relative_tolerance: float
absolute_tolerance: float
max_absolute_difference: float | None
max_tolerance_ratio: float | None
max_ulp_difference: int | None
within_tolerance: bool | None
[docs]
@dataclass(frozen=True)
class TrainingConfig:
"""Immutable configuration for one local DeepONet run.
Paths identify authenticated input, local candidate/report outputs, and
recovery custody. Split fractions assign held-out roles. Network widths,
minibatch sizes, AdamW parameters, evaluation cadence, and the seed fully
define the optimisation trajectory. ``resume`` permits only an exact
identity match.
"""
dataset_dir: Path
output_path: Path
report_path: Path
checkpoint_dir: Path
steps: int
seed: int
validation_fraction: float
calibration_fraction: float
test_fraction: float
branch_hidden: tuple[int, ...]
trunk_hidden: tuple[int, ...]
basis_width: int
shot_batch_size: int
coordinate_batch_size: int
validation_probe_shots: int
validation_probe_coordinates: int
learning_rate: float
weight_decay: float
gradient_clip: float
statistics_chunk_rows: int
evaluation_every: int
checkpoint_every: int
early_stopping_patience: int
resume: bool
[docs]
@dataclass(frozen=True)
class PreparedTraining:
"""Training-only transforms, validation probe, and recovery identity.
This value binds the authenticated cohort, four disjoint split roles,
metre-valued coordinate grid, training-only control/field scaling,
relative-field weights, fixed validation probe, source hashes, and the
running evidence report passed between orchestration stages.
"""
data: MachineConditionedTrainingData
split: MachineConditionedSplit
split_hashes: dict[str, str]
coordinates: FloatArray
coordinate_mean: FloatArray
coordinate_std: FloatArray
normalised_coordinates: FloatArray
input_mean: FloatArray
input_std: FloatArray
normalised_inputs: FloatArray
field_mean: FloatArray
field_scale: float
field_norm_reference: float
train_sample_weights: FloatArray
probe_indices: IndexArray
probe_coordinate_indices: IndexArray
probe_arrays: tuple[FloatArray, FloatArray, FloatArray, FloatArray]
identity: dict[str, Any]
report: dict[str, Any]
__all__ = [
"FloatArray",
"IndexArray",
"PreparedTraining",
"RuntimeBackendParity",
"TrainingConfig",
]