Skip to content

aimbat._types

Custom types used in AIMBAT.

Type Aliases:

Name Description
EventParameterBool

TypeAlias for AimbatEvent attributes with bool values.

EventParameterFloat

TypeAlias for AimbatEvent attributes with float values.

EventParameterTimedelta

TypeAlias for AimbatEvent attributes with [Timedelta][pandas.Timedelta] values.

Classes:

Name Description
EventParameter

AimbatEvent enum class for typing.

SAPandasTimedelta

SQLAlchemy TypeDecorator for pandas.Timedelta.

SAPandasTimestamp

SQLAlchemy TypeDecorator for pandas.Timestamp.

SeismogramParameter

AimbatSeismograParameters enum class for typing.

EventParameterBool

EventParameterBool = Literal[COMPLETED, BANDPASS_APPLY]

TypeAlias for AimbatEvent attributes with bool values.

EventParameterFloat

EventParameterFloat = Literal[
    MIN_CCNORM, BANDPASS_FMIN, BANDPASS_FMAX
]

TypeAlias for AimbatEvent attributes with float values.

EventParameterTimedelta

EventParameterTimedelta = Literal[WINDOW_PRE, WINDOW_POST]

TypeAlias for AimbatEvent attributes with [Timedelta][pandas.Timedelta] values.

EventParameter

Bases: StrEnum

AimbatEvent enum class for typing.

This enum class is used for typing, cli args etc. The attributes must be the same as in the AimbatEvent model.

Source code in src/aimbat/_types/_event.py
class EventParameter(StrEnum):
    """[`AimbatEvent`][aimbat.models.AimbatEvent] enum class for typing.

    This enum class is used for typing, cli args etc. The attributes must be
    the same as in the [`AimbatEvent`][aimbat.models.AimbatEvent] model.
    """

    COMPLETED = auto()
    MIN_CCNORM = auto()
    WINDOW_PRE = auto()
    WINDOW_POST = auto()
    BANDPASS_APPLY = auto()
    BANDPASS_FMIN = auto()
    BANDPASS_FMAX = auto()

SAPandasTimedelta

Bases: TypeDecorator

SQLAlchemy TypeDecorator for pandas.Timedelta. Stores duration as an integer of nanoseconds for maximum precision.

Source code in src/aimbat/_types/_sqlalchemy.py
class SAPandasTimedelta(TypeDecorator):
    """
    SQLAlchemy TypeDecorator for pandas.Timedelta.
    Stores duration as an integer of nanoseconds for maximum precision.
    """

    impl = BigInteger
    cache_ok = True

    def process_bind_param(self, value: Any, dialect: Dialect) -> int | None:
        if value is None:
            return None

        td = value if isinstance(value, Timedelta) else Timedelta(value)
        # Explicit int cast for safety with some SQL drivers
        return int(td.value)

    def process_result_value(self, value: Any, dialect: Dialect) -> Timedelta | None:
        if value is None:
            return None
        # Construct pd.Timedelta from the nanosecond integer
        return Timedelta(value).as_unit("ns")

SAPandasTimestamp

Bases: TypeDecorator

SQLAlchemy TypeDecorator for pandas.Timestamp. Ensures timezone-aware UTC storage in a DateTime column.

Source code in src/aimbat/_types/_sqlalchemy.py
class SAPandasTimestamp(TypeDecorator):
    """
    SQLAlchemy TypeDecorator for pandas.Timestamp.
    Ensures timezone-aware UTC storage in a DateTime column.
    """

    impl = DateTime(timezone=True)
    cache_ok = True

    def process_bind_param(self, value: Any, dialect: Dialect) -> datetime | None:
        if value is None:
            return None

        ts = value if isinstance(value, Timestamp) else Timestamp(value)

        # If naive (no TZ), localize to UTC. If aware, convert to UTC.
        if ts.tzinfo is None:
            ts = ts.tz_localize(timezone.utc)
        else:
            ts = ts.tz_convert(timezone.utc)

        # Truncate to microseconds: datetime lacks nanosecond precision.
        return ts.floor("us").to_pydatetime()

    def process_result_value(self, value: Any, dialect: Dialect) -> Timestamp | None:
        if value is None:
            return None

        ts = Timestamp(value)
        # Ensure the returned pandas object is always UTC aware
        if ts.tzinfo is None:
            return ts.tz_localize(timezone.utc)
        return ts.tz_convert(timezone.utc)

SeismogramParameter

Bases: StrEnum

AimbatSeismograParameters enum class for typing.

This enum class is used for typing, cli args etc. The attributes must be the same as in the [AimbatParameters][aimbat.models.AimbatParameters] model.

Source code in src/aimbat/_types/_seismogram.py
class SeismogramParameter(StrEnum):
    """[`AimbatSeismograParameters`][aimbat.models.AimbatSeismogramParameters] enum class for typing.

    This enum class is used for typing, cli args etc. The attributes must be
    the same as in the [`AimbatParameters`][aimbat.models.AimbatParameters] model.
    """

    SELECT = auto()
    FLIP = auto()
    T1 = auto()