pycsamt.ai.geology.benchmark#

Seeded geological families for two-dimensional EM benchmarks.

Functions

generate_benchmark_geology(grid, family, *, ...)

Generate one deterministic ID or structural-OOD geology.

Classes

BenchmarkGeology(family, regime, seed, grid, ...)

One generated benchmark resistivity model with provenance.

class pycsamt.ai.geology.benchmark.BenchmarkGeology(family, regime, seed, grid, resistivity_ohm_m, parameters)[source]

Bases: object

One generated benchmark resistivity model with provenance.

Parameters:
  • family (str) – Frozen geological family name.

  • regime ({"id", "ood"}) – Whether the realization belongs to the in-distribution or structural out-of-distribution family set.

  • seed (int) – Root geology seed.

  • grid (GeologyGrid) – Shared regular 2-D grid.

  • resistivity_ohm_m (ndarray) – Positive finite resistivity shaped like grid.

  • parameters (mapping) – Concrete sampled geological parameters.

family: str
regime: str
seed: int
grid: GeologyGrid
resistivity_ohm_m: ndarray
parameters: Mapping[str, Any]
property model_hash: str[source]

Return a SHA-256 covering model values and provenance.

Returns:

Platform-stable hexadecimal model digest.

Return type:

str

to_dict()[source]

Return JSON-compatible generation provenance.

Returns:

Family, regime, seed, grid, and concrete sampled parameters.

Return type:

dict

pycsamt.ai.geology.benchmark.generate_benchmark_geology(grid, family, *, seed, configuration, regime='id')[source]

Generate one deterministic ID or structural-OOD geology.

Parameters:
  • grid (GeologyGrid) – Regular 2-D benchmark grid.

  • family (str) – Family from ID_BENCHMARK_FAMILIES or OOD_BENCHMARK_FAMILIES.

  • seed (int) – Explicit root seed.

  • configuration (mapping) – Frozen mapping containing base_layered, id_families, and ood_families sections.

  • regime ({"id", "ood"}, default="id") – Distribution regime.

Returns:

Positive resistivity model and concrete sampled provenance.

Return type:

BenchmarkGeology

Examples

>>> grid = GeologyGrid.regular_2d(nx=8, nz=6, dx_m=200, dz_m=100)
>>> config = {
...     "base_layered": {...},
...     "id_families": {...},
...     "ood_families": {...},
... }
>>> model = generate_benchmark_geology(
...     grid, "layered", seed=0, configuration=config
... )
>>> model.resistivity_ohm_m.shape
(6, 8)