Source code for gempy_engine.core.data.kernel_classes.faults

import dataclasses
from typing import Optional, Callable

import numpy as np
from pydantic import Field

from ..encoders.converters import short_array_type
from ..transforms import Transform


@dataclasses.dataclass
class FiniteFaultData:
    implicit_function: Callable | None =  Field(exclude=True, default=None)#, default=None)
    implicit_function_transform: Transform = Field()
    pivot: short_array_type = Field()

    def apply(self, points: np.ndarray) -> np.ndarray:
        transformed_points = self.implicit_function_transform.apply_inverse_with_pivot(
            points=points,
            pivot=self.pivot
        )
        if self.implicit_function is None:
            raise ValueError("No implicit function defined. This can happen after deserializing (loading).")
        
        scalar_block = self.implicit_function(transformed_points)
        return scalar_block 
        


[docs] @dataclasses.dataclass class FaultsData: fault_values_everywhere: short_array_type | None = None fault_values_on_sp: short_array_type | None = None fault_values_ref: short_array_type | None = None fault_values_rest: short_array_type | None = None # User given data: thickness: Optional[float] = None finite_fault_data: Optional[FiniteFaultData] = None def __hash__(self): i = hash(self.__repr__()) return i @classmethod def from_user_input(cls, thickness: Optional[float]) -> "FaultsData": return cls( fault_values_everywhere=np.zeros(0), fault_values_on_sp=np.zeros(0), thickness=thickness, fault_values_ref=np.zeros(0), fault_values_rest=np.zeros(0) ) @property def finite_faults_defined(self) -> bool: return self.finite_fault_data is not None @property def n_faults(self): return self.fault_values_on_sp.shape[0]