Source code for pycsamt.ai

# Author: LKouadio <etanoyau@gmail.com>
# License: LGPL-3.0
"""Artificial intelligence and machine learning for EM processing and inversion.

Phase 2 additions
-----------------
* :class:`~pycsamt.ai.inversion.inv1d.EMInverter1D` — full 1-D inversion
  pipeline (data loading → normalisation → training → prediction)
* :mod:`~pycsamt.ai.nets` — CNN1D, ResNet1D, FCN1D architectures
* :mod:`~pycsamt.ai.training` — EMDataset, EMTrainer, metrics
* :mod:`~pycsamt.ai.plot` — EMStyle, plot_compare, plot_convergence

Quick start (requires PyTorch)
------------------------------
>>> from pycsamt.forward.batch import generate_dataset
>>> from pycsamt.ai.inversion import EMInverter1D
>>> ds = generate_dataset(n_samples=2_000, seed=0, n_layers=5)
>>> inv = EMInverter1D(arch="resnet", n_layers=5)
>>> inv.fit(ds, epochs=30)
>>> # Predict on new Z objects or ForwardResponse
>>> y_pred = inv.predict(X_test)
"""

from ._base import BaseEMNet, BaseEMProcessor, EMCheckpoint
from ._zoo import (
    download_checkpoint,
    get_pretrained_info,
    list_pretrained,
)
from .inversion import (
    ConformalPredictor,
    EMInverter1D,
    EMInverter2D,
    EnsembleInverter,
    GCNInverter3D,
    JointInverter,
    PosteriorCalibrator,
)
from .nets import (
    CNN1DNet,
    DRCNNNet,
    FCN1DNet,
    GCNNet,
    ResNet1DNet,
    UNet2DNet,
    build_adjacency,
)
from .plot import (
    EM_CMAPS,
    EM_COLORS,
    EM_FIGSIZE,
    EMStyle,
    add_colorbar,
    em_context,
    plot_compare,
    plot_confusion_matrix,
    plot_convergence,
    plot_feature_importance,
    plot_layer_errors,
    plot_lr_schedule,
    plot_profile_pair,
    plot_pseudo_section,
    plot_residuals,
    plot_section,
    plot_section_pair,
    plot_uncertainty_bands,
)
from .processing import (
    AnomalyDetector,
    DimensionalityClassifier,
    EMDenoiser,
    EMQCScorer,
    prepare_z_features,
)
from .training import (
    AugmentFreqDrop,
    AugmentMixup,
    AugmentNoise,
    AugmentStaticShift,
    Compose,
    EMDataset,
    EMTrainer,
    Normalizer,
    RandomApply,
    depth_rmse,
    layer_rmse,
    mae,
    masked_mse_loss,
    r2,
    relative_rmse,
    rmse,
    summarise,
)

__all__ = [
    # base
    "BaseEMNet",
    "BaseEMProcessor",
    "EMCheckpoint",
    # inversion
    "EMInverter1D",
    "EMInverter2D",
    "GCNInverter3D",
    "JointInverter",
    "EnsembleInverter",
    # calibrated UQ
    "ConformalPredictor",
    "PosteriorCalibrator",
    # model zoo
    "list_pretrained",
    "get_pretrained_info",
    "download_checkpoint",
    # nets
    "CNN1DNet",
    "ResNet1DNet",
    "FCN1DNet",
    "UNet2DNet",
    "DRCNNNet",
    "GCNNet",
    "build_adjacency",
    # training
    "Normalizer",
    "EMDataset",
    "EMTrainer",
    "rmse",
    "mae",
    "r2",
    "relative_rmse",
    "depth_rmse",
    "layer_rmse",
    "masked_mse_loss",
    "summarise",
    # augmentation (Phase 5)
    "AugmentNoise",
    "AugmentStaticShift",
    "AugmentFreqDrop",
    "AugmentMixup",
    "Compose",
    "RandomApply",
    # plot
    "EMStyle",
    "EM_COLORS",
    "EM_CMAPS",
    "EM_FIGSIZE",
    "em_context",
    "add_colorbar",
    "plot_compare",
    "plot_profile_pair",
    "plot_convergence",
    "plot_lr_schedule",
    # section & diagnostics (Phase 4)
    "plot_section",
    "plot_section_pair",
    "plot_pseudo_section",
    "plot_confusion_matrix",
    "plot_residuals",
    "plot_layer_errors",
    "plot_uncertainty_bands",
    "plot_feature_importance",
    # processing (Phase 3)
    "EMDenoiser",
    "prepare_z_features",
    "EMQCScorer",
    "AnomalyDetector",
    "DimensionalityClassifier",
]