Skip to main content

Shared foundational types and representation adapters for Money Ex Machina.

Project description

mxm-types

Version License Python Checked with pyright

Purpose

mxm-types provides shared foundational types and representation adapters for the Money Ex Machina ecosystem.

It defines a small, stable, representation-focused layer for:

  • cross-package type definitions
  • canonical data representations
  • explicit boundary adapters between representations

The package is intentionally domain-agnostic.
Domain models and business semantics belong in their respective packages.

Installation

pip install mxm-types

Overview

mxm-types defines:

  • Strict JSON tree types for configuration, metadata, requests, and portable data structures
  • Lightweight aliases for common cross-package patterns such as path-like values and HTTP headers
  • Micro-protocols for cross-cutting interfaces
  • A canonical MXM timestamp substrate based on np.datetime64[ns]
  • Explicit representation bridges from canonical MXM timestamps to:
    • integer epoch nanoseconds
    • strict canonical UTC strings
    • pandas Timestamp / DatetimeIndex
  • PEP 561 typing support (py.typed included in the wheel)

The package is intentionally small and stable, but it is no longer dependency-free:
the pandas boundary adapter layer depends on pandas.

Public API

The following names form the stable public API of mxm-types.
All other names are private and may change across releases.

General Types

Name Description
JSONScalar str | int | float | bool | None
JSONValue Strict recursive JSON tree
JSONLike Permissive tree for accepting general inputs
JSONObj Mapping[str, JSONValue]
JSONMap dict[str, JSONValue]
HeadersLike Canonical alias for HTTP header mappings
StrPath str | PathLike[str]

Protocols and TypedDicts

Name Description
KVReadable Minimal protocol for key-value access
CLIFormatOptions CLI output formatting hints

Canonical Timestamp Substrate

Name Description
TSNSScalar Canonical timestamp scalar (np.datetime64[ns])
TSNSArray Canonical timestamp array
Int64Array Integer array for epoch nanoseconds
TS_NS_DTYPE Canonical timestamp dtype
INT64_DTYPE Canonical integer dtype
EPOCH_TS_NS Unix epoch constant
NAT_TS_NS Canonical NaT sentinel

Timestamp Predicates and Assertions

Name Description
is_ts_ns Predicate for canonical timestamp scalars
assert_ts_ns Assert canonical timestamp scalar
is_nat Predicate for NaT
assert_not_nat Assert not NaT
is_ts_ns_array Predicate for timestamp arrays
assert_ts_ns_array Assert timestamp array
has_nat Detect NaT in array
assert_no_nat Assert no NaT
assert_monotonic_increasing_ts_ns_array Assert monotonic timestamps

Timestamp Bridges

Name Description
ts_ns_from_int From integer epoch nanoseconds
ts_ns_to_int To integer epoch nanoseconds
ts_ns_from_str From canonical string
ts_ns_to_str To canonical string

Pandas Timestamp Adapters

Name Description
is_pd_timestamp_for_ts_ns Predicate for pandas scalar
assert_pd_timestamp_for_ts_ns Assert pandas scalar
is_pd_datetimeindex_for_ts_ns_array Predicate for pandas index
assert_pd_datetimeindex_for_ts_ns_array Assert pandas index
ts_ns_from_pd_timestamp Convert from pandas
ts_ns_to_pd_timestamp Convert to pandas
ts_ns_array_from_pd_datetimeindex Convert index to array
ts_ns_array_to_pd_datetimeindex Convert array to index

Usage

General shared types

from mxm.types import JSONObj, StrPath

def load_metadata(path: StrPath) -> JSONObj:
    ...

Canonical timestamp substrate

from mxm.types import TSNSScalar, assert_not_nat, ts_ns_from_str, ts_ns_to_int

def parse_created_ts(text: str) -> int:
    ts: TSNSScalar = ts_ns_from_str(text)
    ts = assert_not_nat(ts)
    return ts_ns_to_int(ts)

Pandas boundary adapter

import pandas as pd
from mxm.types import ts_ns_array_from_pd_datetimeindex, ts_ns_to_pd_timestamp
from mxm.types.timestamps import ts_ns_from_str

idx = pd.DatetimeIndex(
    ["2026-03-25 10:14:03.123456789", "2026-03-25 10:14:04.123456789"],
    tz="Europe/Amsterdam",
)

arr = ts_ns_array_from_pd_datetimeindex(idx)

ts = ts_ns_from_str("2026-03-25T10:14:03.123456789Z")
pd_ts = ts_ns_to_pd_timestamp(ts)

Timestamp Design

MXM adopts a single canonical internal timestamp representation:

np.datetime64[ns]

Canonical timestamps:

  • are timezone-naive NumPy timestamps interpreted as UTC
  • represent instants on a linear time axis
  • have nanosecond precision
  • use explicit boundary adapters for external systems

Canonical string format:

YYYY-MM-DDTHH:MM:SS.fffffffffZ

Design Principles

  • Single canonical representation
  • Explicit boundary adapters
  • Representation-focused scope
  • Stable cross-package surface
  • Strict static typing

Development

make check

License

MIT License. See LICENSE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

mxm_types-0.2.1.tar.gz (11.5 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

mxm_types-0.2.1-py3-none-any.whl (12.0 kB view details)

Uploaded Python 3

File details

Details for the file mxm_types-0.2.1.tar.gz.

File metadata

  • Download URL: mxm_types-0.2.1.tar.gz
  • Upload date:
  • Size: 11.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mxm_types-0.2.1.tar.gz
Algorithm Hash digest
SHA256 696f67940af4516efd339d959b283478360d50573bbe2c18b7e8023182dcdede
MD5 6f906beb4adde4e1879486c900e03818
BLAKE2b-256 88e63600ef71a077d754d09898c21deb793949196326b7598a7de2847938f069

See more details on using hashes here.

Provenance

The following attestation bundles were made for mxm_types-0.2.1.tar.gz:

Publisher: release.yml on moneyexmachina/mxm-types

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file mxm_types-0.2.1-py3-none-any.whl.

File metadata

  • Download URL: mxm_types-0.2.1-py3-none-any.whl
  • Upload date:
  • Size: 12.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for mxm_types-0.2.1-py3-none-any.whl
Algorithm Hash digest
SHA256 482000d8cb64001ff098dae808baef79decd3b7e53daa2838659fd47c1d11e3b
MD5 20465a537517250fc2a9d0029ebf82ef
BLAKE2b-256 e17adbd1254118627b9a9a9c6ce01306ed99a0dffc5d42d6686a8d878b35727f

See more details on using hashes here.

Provenance

The following attestation bundles were made for mxm_types-0.2.1-py3-none-any.whl:

Publisher: release.yml on moneyexmachina/mxm-types

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page