Source code for pycsamt.forward

# Author: LKouadio <etanoyau@gmail.com>
# License: LGPL-3.0
"""Physics-based EM forward solvers and synthetic training-data generation.

The package provides 1-D electromagnetic forward solvers and synthetic
dataset generation for AI/ML training.

This package has **no machine-learning dependencies** — only NumPy and
SciPy are required.  It provides the building blocks consumed by
:mod:`pycsamt.ai` for training data generation.

Submodules
----------
em1d
    Three 1-D solvers: :class:`~pycsamt.forward.em1d.MT1DForward`,
    :class:`~pycsamt.forward.em1d.TEM1DForward`,
    :class:`~pycsamt.forward.em1d.CSAMT1DForward`.

synthetic
    :class:`~pycsamt.forward.synthetic.LayeredModel` — the central data
    object for all 1-D models, with ``random``, ``blocky``, ``smooth``,
    and ``from_geology`` constructors.

noise
    Noise models for synthetic data:
    :class:`~pycsamt.forward.noise.GaussianNoise`,
    :class:`~pycsamt.forward.noise.FieldRealisticNoise`,
    :class:`~pycsamt.forward.noise.MultiplicativeNoise`.

batch
    :func:`~pycsamt.forward.batch.generate_dataset` — parallelised
    (model, response) pair generation for large training sets.

Quick start
-----------
>>> import numpy as np
>>> from pycsamt.forward import MT1DForward, LayeredModel
>>> model = LayeredModel([100, 10, 500], [300, 800])
>>> resp = MT1DForward(np.logspace(-3, 4, 30)).run(model)
>>> resp.rho_a.shape
(30,)
"""

from .batch import (
    ForwardDataset,
    SurveyDataset3D,
    generate_dataset,
    generate_dataset_3d,
)
from .config import ForwardConfig
from .config2d import ForwardConfig2D
from .config3d import ForwardConfig3D
from .em1d import (
    CSAMT1DForward,
    ForwardResponse,
    MT1DForward,
    TEM1DForward,
)
from .em2d import ForwardResponse2D, MT2DForward
from .em3d import ForwardResponse3D, MT3DForward
from .grid2d import Grid2D, make_padding
from .grid3d import Grid3D
from .noise import (
    FieldRealisticNoise,
    GaussianNoise,
    MultiplicativeNoise,
    add_gaussian_noise,
    add_noise,
)
from .plot import (
    plot_model_1d,
    plot_model_2d,
    plot_model_3d,
    plot_pseudosection_2d,
    plot_response_1d,
    plot_response_and_model_1d,
    plot_response_map_3d,
    plot_response_profiles,
    plot_response_section_3d,
    plot_tensor_components_3d,
)
from .synthetic import GEOLOGY_PRIORS, LayeredModel

__all__ = [
    # solvers 1-D
    "MT1DForward",
    "TEM1DForward",
    "CSAMT1DForward",
    "ForwardResponse",
    # solvers 2-D
    "MT2DForward",
    "ForwardResponse2D",
    # models
    "LayeredModel",
    "GEOLOGY_PRIORS",
    "Grid2D",
    "make_padding",
    # noise
    "GaussianNoise",
    "FieldRealisticNoise",
    "MultiplicativeNoise",
    "add_gaussian_noise",
    "add_noise",
    # batch 1-D
    "generate_dataset",
    "ForwardDataset",
    # batch 3-D
    "generate_dataset_3d",
    "SurveyDataset3D",
    # 3-D grid and solver
    "Grid3D",
    "MT3DForward",
    "ForwardResponse3D",
    # configuration
    "ForwardConfig",
    "ForwardConfig2D",
    "ForwardConfig3D",
    # plotting — 1-D / 2-D
    "plot_response_1d",
    "plot_model_1d",
    "plot_response_and_model_1d",
    "plot_model_2d",
    "plot_pseudosection_2d",
    "plot_response_profiles",
    # plotting — 3-D
    "plot_model_3d",
    "plot_response_map_3d",
    "plot_response_section_3d",
    "plot_tensor_components_3d",
]