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.3.0.tar.gz (12.0 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.3.0-py3-none-any.whl (12.6 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: mxm_types-0.3.0.tar.gz
  • Upload date:
  • Size: 12.0 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.3.0.tar.gz
Algorithm Hash digest
SHA256 ace686f24d817798396622e51d1db954b4e32bb9c46282d11bc53e53b52c838b
MD5 2d0ba88362e35c4aa274c018ec4ac056
BLAKE2b-256 fd27645286ded7fa7ea3b6af5f70b2a3f8adb56433a5f3c7046937436397197a

See more details on using hashes here.

Provenance

The following attestation bundles were made for mxm_types-0.3.0.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.3.0-py3-none-any.whl.

File metadata

  • Download URL: mxm_types-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 12.6 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.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 cda94a4a7402a94320d9832b2a06b9750717028d828a373a10519222e5b8ceab
MD5 b72bb315776a584dee009e69f8d1569b
BLAKE2b-256 afcb18b981958c007a1c1f3738b241be4d7c1937bcfb920c697b4a6ee2843149

See more details on using hashes here.

Provenance

The following attestation bundles were made for mxm_types-0.3.0-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