Skip to main content

High-performance bitemporal data processing for Python

Project description

PyTemporal

High-performance bitemporal data processing for Python

PyTemporal is a Rust-powered library for processing bitemporal timeseries data with world-class performance (157,000+ rows/second). Perfect for financial services, audit systems, and applications requiring immutable data trails with both business and system time dimensions.

Quick Start

# Install from source
git clone <your-repo>
cd pytemporal
uv run maturin develop --release
import pandas as pd
from pytemporal import BitemporalTimeseriesProcessor

# Initialize processor
processor = BitemporalTimeseriesProcessor(
    id_columns=['id'],
    value_columns=['price']
)

# Process temporal updates
result = processor.process_updates(
    current_state=current_df,
    updates=updates_df, 
    system_date='2025-01-27'
)

print(f"Updated {len(result.to_insert)} records")

Key Features

  • ๐Ÿš€ World-Class Performance: 157,000+ rows/second throughput
  • ๐Ÿ”„ Bitemporal Processing: Track both business time and system time
  • ๐Ÿ Python-First: High-level DataFrame API with pandas integration
  • โšก Zero-Copy: Apache Arrow columnar format for memory efficiency
  • ๐Ÿ”ง Flexible Schema: Configure ID and value columns dynamically
  • ๐ŸŽฏ Two Update Modes: Delta updates or full state replacement
  • ๐Ÿ”€ Smart Conflation: Optional merging of consecutive records with identical values
  • ๐Ÿ—๏ธ Production Ready: Comprehensive test coverage and clean architecture

Documentation

What is Bitemporal Data?

Bitemporal data tracks two time dimensions:

  • Effective Time: When events occurred in the real world
  • As-Of Time: When information was recorded in the system

This enables powerful queries like "What did we think the price was on Jan 15th, as of Jan 20th?"

Use Cases

  • Financial Services: Price histories, portfolio valuations, risk calculations
  • Audit Systems: Immutable change tracking with full reconstruction capability
  • Regulatory Compliance: Time-accurate reporting for compliance requirements
  • Data Warehousing: Slowly changing dimensions with full history preservation

Performance

Dataset Size Processing Time Throughput Memory
800k ร— 80 cols 5.4 seconds 157k rows/sec ~14GB
100k ร— 20 cols 0.6 seconds 167k rows/sec ~2GB

Benchmarked on modern hardware with optimized settings

Architecture

โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”    โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Python DataFrameโ”‚โ”€โ”€โ”€โ–ถโ”‚ PyTemporal (Rust)โ”‚โ”€โ”€โ”€โ–ถโ”‚ Processed Resultsโ”‚
โ”‚ (Pandas)        โ”‚    โ”‚ โ€ข Arrow Columnar โ”‚    โ”‚ (DataFrame)     โ”‚  
โ”‚                 โ”‚    โ”‚ โ€ข Parallel Proc  โ”‚    โ”‚                 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜    โ”‚ โ€ข Timeline Logic โ”‚    โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜
                       โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”˜

Built With:

  • Rust: Core processing engine for maximum performance
  • Apache Arrow: Columnar data format for zero-copy operations
  • PyO3: Seamless Rust-Python integration
  • Rayon: Data parallelism for multi-core performance

Development

# Run tests
cargo test                                    # Rust tests
uv run python -m pytest tests/ -v           # Python tests

# Performance benchmarks  
cargo bench                                  # Detailed benchmarks
uv run python validate_refactoring.py       # End-to-end validation

# Build release
uv run maturin develop --release

Contributing

  1. Fork the repository
  2. Create a feature branch: git checkout -b feature-name
  3. Make changes and add tests
  4. Run the test suite: cargo test && uv run pytest
  5. Submit a pull request

License

This project is licensed under either of

at your option.

Contribution

Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in PyTemporal by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.

Acknowledgments

Built with modern Rust performance engineering and extensive profiling to achieve world-class bitemporal processing speeds while maintaining clean, maintainable code.

Project details


Download files

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

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

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

pytemporal-1.4.16-cp312-cp312-manylinux_2_34_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.34+ x86-64

pytemporal-1.4.16-cp311-cp311-manylinux_2_34_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.34+ x86-64

pytemporal-1.4.16-cp310-cp310-manylinux_2_34_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.34+ x86-64

pytemporal-1.4.16-cp39-cp39-manylinux_2_34_x86_64.whl (2.5 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.34+ x86-64

File details

Details for the file pytemporal-1.4.16-cp312-cp312-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for pytemporal-1.4.16-cp312-cp312-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 1c700b1a35d6b7be5c39b8b5213656c8167ca57d817c498b5302ea9e9815b630
MD5 6a8c8d8d2b845d799055ac743ffce49c
BLAKE2b-256 410157fb53e49155cbb95a10c4809c8ac4c47ad52606976bd3f008fdca486e99

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytemporal-1.4.16-cp312-cp312-manylinux_2_34_x86_64.whl:

Publisher: build-wheels.yml on gingermike/pytemporal

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

File details

Details for the file pytemporal-1.4.16-cp311-cp311-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for pytemporal-1.4.16-cp311-cp311-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 016ef187ec9bf42792becb1047b6338d6f66f29e38f5f1298ea897da613b4e0e
MD5 0451c754792ab5d3b1fc45dd6e8e7d05
BLAKE2b-256 fbff69f7cd9aec9021e9f2ea4286ad79678af6d95179f5f101c973b868647b90

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytemporal-1.4.16-cp311-cp311-manylinux_2_34_x86_64.whl:

Publisher: build-wheels.yml on gingermike/pytemporal

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

File details

Details for the file pytemporal-1.4.16-cp310-cp310-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for pytemporal-1.4.16-cp310-cp310-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 8628db2d35538dc1c7e99c00b41e152073a09bf5c648c37ad045d24efe613a57
MD5 c33b100c720d7a27681d4035981f2e65
BLAKE2b-256 3ae6a535f53dbaeda032016adb7e0d88c1c13ab7b21c9c17b79a37f8583c84da

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytemporal-1.4.16-cp310-cp310-manylinux_2_34_x86_64.whl:

Publisher: build-wheels.yml on gingermike/pytemporal

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

File details

Details for the file pytemporal-1.4.16-cp39-cp39-manylinux_2_34_x86_64.whl.

File metadata

File hashes

Hashes for pytemporal-1.4.16-cp39-cp39-manylinux_2_34_x86_64.whl
Algorithm Hash digest
SHA256 740e7f290b0e9a3201fe295e130e3d5abf456c00bd1d450002fbc185c7bbf305
MD5 c3dbf27c9fbefbacc674bb4c7d68e807
BLAKE2b-256 cc67a6fedfa3b9449efafc9e8a6f04b4af1d211897d9151451775fbe4045de36

See more details on using hashes here.

Provenance

The following attestation bundles were made for pytemporal-1.4.16-cp39-cp39-manylinux_2_34_x86_64.whl:

Publisher: build-wheels.yml on gingermike/pytemporal

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