Skip to main content

Blazingly fast spatio-temporal database library

Project description

Spatio: Python Bindings for High-Performance Spatio-Temporal Database

PyPI version Python 3.8+ License: MIT

Python bindings for Spatio, a high-performance, embedded spatio-temporal database written in Rust. Spatio brings spatial operations and geographic data management to Python with minimal overhead.

Features

  • High Performance: Built on Rust for maximum speed and memory efficiency
  • Spatio-Temporal Operations: Geographic point storage with automatic spatial indexing and optional time filters
  • Advanced Spatial Queries: Distance calculations (4 metrics), K-nearest-neighbors, polygon queries, bounding box operations
  • Trajectory Tracking: Store and query movement data over time
  • TTL Support: Automatic data expiration with time-to-live
  • Thread-Safe: Concurrent access (atomic operations coming soon for Python)
  • Persistent Storage: Optional file-based persistence

Installation

From PyPI (Recommended)

pip install spatio

📦 PyPI Repository: https://pypi.org/project/spatio

From Source

# Clone the repository
git clone https://github.com/pkvartsianyi/spatio.git
cd spatio/py-spatio

# Build and install
pip install maturin
maturin develop

Quick Start

import spatio

# Create an in-memory database
db = spatio.Spatio.memory()

# Store simple key-value data
db.insert(b"user:123", b"John Doe")
user = db.get(b"user:123")
print(f"User: {user.decode()}")  # User: John Doe

# Store geographic points with automatic spatial indexing
# Note: Point uses (latitude, longitude) order in Python
nyc = spatio.Point(40.7128, -74.0060)
london = spatio.Point(51.5074, -0.1278)

db.insert_point("cities", nyc, b"New York City")
db.insert_point("cities", london, b"London")

# Find nearby points within 6000km
nearby = db.query_within_radius("cities", nyc, 6000000.0, 10)
for point, city_name, distance in nearby:
    print(f"{city_name.decode()}: {distance/1000:.0f}km away")

Core Classes

Spatio

The main database class for all operations.

# Create databases
db = spatio.Spatio.memory()                    # In-memory
db = spatio.Spatio.open("data.db")             # Persistent
db = spatio.Spatio.memory_with_config(config)  # With custom config

# Basic operations
db.insert(key, value, options=None)
value = db.get(key)
old_value = db.delete(key)

# Spatial operations
db.insert_point(prefix, point, value, options=None)
nearby = db.query_within_radius(prefix, center, radius_meters, limit)
count = db.count_within_radius(prefix, center, radius_meters)

# Advanced spatial operations
distance = db.distance_between(point1, point2, metric)
nearest = db.knn(prefix, center, k, max_radius, metric)
in_polygon = db.query_within_polygon(prefix, polygon_coords, limit)

# Trajectory operations
db.insert_trajectory(object_id, trajectory, options=None)
path = db.query_trajectory(object_id, start_time, end_time)

Point

Represents a geographic coordinate.

Note: Python uses (latitude, longitude) order for user convenience, but internally converts to geo crate's (longitude, latitude) format.

# Create points (latitude, longitude order in Python)
point = spatio.Point(latitude, longitude)
print(f"Location: {point.lat}, {point.lon}")

# Calculate distance (uses Haversine by default)
distance = point1.distance_to(point2)  # Returns meters

DistanceMetric

Distance calculation methods for spatial operations.

# Available metrics
metric = spatio.DistanceMetric("haversine")  # Fast spherical (default)
metric = spatio.DistanceMetric("geodesic")   # Accurate ellipsoidal (Karney 2013)
metric = spatio.DistanceMetric("rhumb")      # Constant bearing (navigation)
metric = spatio.DistanceMetric("euclidean")  # Planar coordinates only

SetOptions

Configure data storage options.

# TTL (time-to-live)
opts = spatio.SetOptions.with_ttl(300.0)  # 5 minutes
db.insert(b"session", b"data", opts)

# Absolute expiration
import time
future = time.time() + 300
opts = spatio.SetOptions.with_expiration(future)

Config

Database configuration.

# Custom geohash precision (1-12, default: 8)
config = spatio.Config.with_geohash_precision(10)  # ~61cm accuracy
db = spatio.Spatio.memory_with_config(config)

# Manual configuration
config = spatio.Config()
config.geohash_precision = 6  # ~610m accuracy

Usage Examples

Basic Spatial Queries

import spatio

db = spatio.Spatio.memory()

# Insert city data
# Note: Python Point uses (latitude, longitude) order
cities = [
    (spatio.Point(40.7128, -74.0060), b"New York"),
    (spatio.Point(51.5074, -0.1278), b"London"),
    (spatio.Point(35.6762, 139.6503), b"Tokyo"),
    (spatio.Point(48.8566, 2.3522), b"Paris"),
]

for point, name in cities:
    db.insert_point("cities", point, name)

# Find cities within 6000km of New York
nyc = spatio.Point(40.7128, -74.0060)
nearby = db.query_within_radius("cities", nyc, 6000000.0, 10)

print(f"Cities within 6000km of NYC:")
for point, name, distance in nearby:
    print(f"  {name.decode()}: {distance/1000:.0f}km")

Advanced Spatial Operations

import spatio

db = spatio.Spatio.memory()

# Insert cities
db.insert_point("cities", spatio.Point(40.7128, -74.0060), b"NYC")
db.insert_point("cities", spatio.Point(34.0522, -118.2437), b"LA")
db.insert_point("cities", spatio.Point(41.8781, -87.6298), b"Chicago")

# Distance calculation with multiple metrics
nyc = spatio.Point(40.7128, -74.0060)
la = spatio.Point(34.0522, -118.2437)
metric = spatio.DistanceMetric("haversine")
distance = db.distance_between(nyc, la, metric)
print(f"NYC to LA: {distance / 1000:.2f} km")

# K-nearest-neighbors
query = spatio.Point(40.0, -75.0)
nearest = db.knn("cities", query, 2, 500_000.0, metric)
for point, data, dist in nearest:
    print(f"{data.decode()}: {dist / 1000:.2f} km away")

# Polygon queries (coordinates as list of (lon, lat) tuples)
polygon = [
    (-90.0, 35.0),
    (-70.0, 35.0),
    (-70.0, 45.0),
    (-90.0, 45.0),
    (-90.0, 35.0),  # Close the polygon
]
in_region = db.query_within_polygon("cities", polygon, 100)
print(f"Cities in region: {len(in_region)}")

Trajectory Tracking

import spatio
import time

db = spatio.Spatio.memory()

# Create a trajectory (list of (Point, timestamp) tuples)
trajectory = [
    (spatio.Point(40.7128, -74.0060), 1640995200),  # NYC
    (spatio.Point(40.7580, -73.9855), 1640995800),  # Central Park
    (spatio.Point(40.6892, -74.0445), 1640996400),  # Brooklyn
]

# Store trajectory
db.insert_trajectory("vehicle:truck001", trajectory)

# Query trajectory for specific time range
path = db.query_trajectory("vehicle:truck001", 1640995200, 1640996400)

print(f"Vehicle path ({len(path)} points):")
for point, timestamp in path:
    print(f"  {timestamp}: ({point.lat:.4f}, {point.lon:.4f})")

TTL and Expiration

import spatio
import time

db = spatio.Spatio.memory()

# Data that expires in 5 seconds
opts = spatio.SetOptions.with_ttl(5.0)
db.insert(b"session:temp", b"temporary_data", opts)

print("Immediate:", db.get(b"session:temp"))  # b'temporary_data'
time.sleep(6)
print("After TTL:", db.get(b"session:temp"))  # None

Sequential Operations

import spatio

db = spatio.Spatio.memory()

# Sequential operations (atomic operations coming in future version)
db.insert(b"user:1", b"Alice")
db.insert(b"user:2", b"Bob")

point = spatio.Point(40.7128, -74.0060)
db.insert_point("locations", point, b"NYC Office")

print("Operations completed")

# Verify all operations were applied
print(db.get(b"user:1"))  # b'Alice'
nearby = db.query_within_radius("locations", spatio.Point(40.7128, -74.0060), 1000, 10)
print(len(nearby))  # 1

Bounding Box Queries

import spatio

db = spatio.Spatio.memory()

# Insert points across different regions
# Note: Python Point uses (latitude, longitude) order
points = [
    (spatio.Point(40.7128, -74.0060), b"NYC"),      # North America
    (spatio.Point(51.5074, -0.1278), b"London"),    # Europe
    (spatio.Point(35.6762, 139.6503), b"Tokyo"),    # Asia
]

for point, name in points:
    db.insert_point("cities", point, name)

# Find cities in Europe (rough bounding box)
european_cities = db.find_within_bounds(
    "cities",
    40.0, -10.0,  # min_lat, min_lon
    60.0, 10.0,   # max_lat, max_lon
    10            # limit
)

print("European cities:")
for point, name in european_cities:
    print(f"  {name.decode()} at ({point.lat:.2f}, {point.lon:.2f})")

Performance

Spatio-Py is built for high performance:

  • Fast spatial indexing using geohash and R-tree algorithms
  • Memory efficient storage with zero-copy operations where possible
  • Concurrent access with minimal locking overhead
  • Optimized distance calculations using efficient approximation algorithms

Benchmarks

Basic performance characteristics (your results may vary):

  • Key-value operations: ~1.6M ops/sec (600ns per operation)
  • Spatial insertions: ~1.9M points/sec (530ns per operation)
  • Spatial queries: ~225K queries/sec (4.4μs per operation)
  • Memory usage: Efficient in-memory storage with spatial indexing

Development

Development Tools

This project uses just as the primary task runner for all development workflows. Just provides a more powerful and expressive alternative to Make.

# Install just (if not already installed)
cargo install just

# See all available commands
just --list

# Common development tasks
just setup          # Set up development environment
just build           # Build the package
just test            # Run tests
just check           # Run all quality checks (lint, format, typecheck)
just ci              # Run full CI pipeline locally

Building from Source

# Prerequisites
pip install maturin pytest

# Clone and build
git clone https://github.com/pkvartsianyi/spatio.git
cd spatio/py-spatio

# Development build
maturin develop

# Run tests
just test

# Run examples
python examples/basic_usage.py

Building Multi-Platform Wheels

The project uses cibuildwheel to build wheels for all major platforms and Python versions (3.9-3.13):

Supported Platforms:

  • Linux: x86_64, aarch64 (manylinux)
  • macOS: x86_64 (Intel), arm64 (Apple Silicon)
  • Windows: AMD64

Automated Builds:

  • Wheels are automatically built on every release via GitHub Actions
  • All wheels are tested before publishing to PyPI
  • The workflow generates 40+ wheel files covering all platform/Python combinations

Manual Build:

# Install cibuildwheel
pip install cibuildwheel

# Build wheels for your platform
cibuildwheel --platform linux  # or macos, windows

# Build for specific Python versions
CIBW_BUILD="cp311-* cp312-*" cibuildwheel

# Output wheels will be in ./wheelhouse/

For more details, see .github/workflows/wheels.yml

Testing

# Run all tests
just test

# Run with coverage
just coverage

# Run performance tests
just bench

Code Formatting

# Format Python code
just fmt

# Type checking
just typecheck

# Run all checks
just check

API Reference

Database Operations

Method Description
Spatio.memory() Create in-memory database
Spatio.open(path) Open/create persistent database
insert(key, value, options=None) Store key-value pair
get(key) Retrieve value by key
delete(key) Remove key and return old value
(atomic operations coming soon) Execute operations atomically
sync() Force sync to disk
stats() Get database statistics

Spatial Operations

Method Description
insert_point(prefix, point, value, options=None) Store geographic point
query_within_radius(prefix, center, radius_meters, limit) Find points within radius
contains_point(prefix, center, radius_meters) Check if any points exist in radius
count_within_radius(prefix, center, radius_meters) Count points within radius
intersects_bounds(prefix, min_lat, min_lon, max_lat, max_lon) Check if any points in bounding box
find_within_bounds(prefix, min_lat, min_lon, max_lat, max_lon, limit) Find points in bounding box
distance_between(point1, point2, metric) Calculate distance with specified metric
knn(prefix, center, k, max_radius, metric) Find K nearest neighbors
query_within_polygon(prefix, polygon_coords, limit) Find points within polygon boundary

Trajectory Operations

Method Description
insert_trajectory(object_id, trajectory, options=None) Store trajectory data
query_trajectory(object_id, start_time, end_time) Query trajectory for time range

Error Handling

Spatio-Py uses standard Python exceptions:

import spatio

try:
    # Invalid coordinates
    point = spatio.Point(91.0, 0.0)  # Raises ValueError
except ValueError as e:
    print(f"Invalid point: {e}")

try:
    db = spatio.Spatio.open("/invalid/path/db.spatio")
except RuntimeError as e:
    print(f"Database error: {e}")

Project Status

Spatio-Python is in alpha development:

  • Core spatial operations implemented
  • Advanced spatial features (distance, KNN, polygon queries) powered by georust/geo
  • Complete Python API via PyO3 bindings
  • TTL and persistence support
  • Multi-platform wheels (Linux, macOS, Windows)
  • Python 3.8-3.13 support

Current version: 0.1.0-alpha.10

Coordinate Convention

Important: Coordinate ordering differs between Python and Rust for user convenience:

  • Python API: Point(latitude, longitude) - familiar order for most users
  • Rust/geo: Point::new(longitude, latitude) - standard (x, y) cartesian convention

The Python bindings automatically convert between these formats, so you don't need to worry about it!

# Python: latitude first (user-friendly)
nyc = spatio.Point(40.7128, -74.0060)
print(nyc.lat)  # 40.7128
print(nyc.lon)  # -74.0060

Platform Support

Pre-built wheels are available for:

  • Linux: x86_64, aarch64 (manylinux)
  • macOS: x86_64 (Intel), arm64 (Apple Silicon)
  • Windows: AMD64
  • Python: 3.9, 3.10, 3.11, 3.12, 3.13

License

This project is licensed under the MIT License - see the LICENSE file for details.

Contributing

Contributions are welcome! Please see CONTRIBUTING.md for guidelines.

Spatial Features Documentation

For comprehensive documentation on all spatial operations:

Links

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.

spatio-0.1.5a2-cp313-cp313-win_amd64.whl (316.8 kB view details)

Uploaded CPython 3.13Windows x86-64

spatio-0.1.5a2-cp313-cp313-manylinux_2_35_x86_64.whl (417.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.35+ x86-64

spatio-0.1.5a2-cp313-cp313-macosx_11_0_arm64.whl (357.7 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

spatio-0.1.5a2-cp313-cp313-macosx_10_12_x86_64.whl (395.0 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

spatio-0.1.5a2-cp312-cp312-win_amd64.whl (316.8 kB view details)

Uploaded CPython 3.12Windows x86-64

spatio-0.1.5a2-cp312-cp312-manylinux_2_35_x86_64.whl (417.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

spatio-0.1.5a2-cp312-cp312-macosx_11_0_arm64.whl (357.7 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

spatio-0.1.5a2-cp312-cp312-macosx_10_12_x86_64.whl (395.0 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

spatio-0.1.5a2-cp311-cp311-win_amd64.whl (317.9 kB view details)

Uploaded CPython 3.11Windows x86-64

spatio-0.1.5a2-cp311-cp311-manylinux_2_35_x86_64.whl (417.0 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ x86-64

spatio-0.1.5a2-cp311-cp311-macosx_11_0_arm64.whl (358.5 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

spatio-0.1.5a2-cp311-cp311-macosx_10_12_x86_64.whl (395.4 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

spatio-0.1.5a2-cp310-cp310-win_amd64.whl (318.0 kB view details)

Uploaded CPython 3.10Windows x86-64

spatio-0.1.5a2-cp310-cp310-manylinux_2_35_x86_64.whl (417.3 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ x86-64

spatio-0.1.5a2-cp310-cp310-macosx_11_0_arm64.whl (358.4 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

spatio-0.1.5a2-cp310-cp310-macosx_10_12_x86_64.whl (395.4 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

spatio-0.1.5a2-cp39-cp39-win_amd64.whl (318.2 kB view details)

Uploaded CPython 3.9Windows x86-64

spatio-0.1.5a2-cp39-cp39-manylinux_2_35_x86_64.whl (417.5 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.35+ x86-64

spatio-0.1.5a2-cp39-cp39-macosx_11_0_arm64.whl (358.7 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

spatio-0.1.5a2-cp39-cp39-macosx_10_12_x86_64.whl (395.6 kB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

File details

Details for the file spatio-0.1.5a2-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: spatio-0.1.5a2-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 316.8 kB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for spatio-0.1.5a2-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 e82da410001f3d257373f3489c1bf251ef28a6974355610cfadca18297734a57
MD5 fbd5496111a7c5ac9589833dccf99c31
BLAKE2b-256 d3cf6c30a053ccd737d22f5d7b16f5ef4ee54cd65b2f051b51ccc6747694a57e

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp313-cp313-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp313-cp313-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 ea5639e6b6a0e6d9fecbb88e78952100fe58a857debebefc2fbed3cf33cbaba3
MD5 98618858e4c37e98fc6033ce56aad1b8
BLAKE2b-256 11db8a47e64d9ab5f5be8b8d7518f93b18138c8d9ac5823cd73cdf304ea6834f

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 76c67714d16cea358973cda05a1a226232e6f6d3df3e9f3b0a366977484109dd
MD5 d752ec7abf934d31a50cebe386fbbac7
BLAKE2b-256 8c27992bb99a8abe20023140fc8e26f3c4e99f6c0ecee450533acd1931fb4330

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3bc869df665bf88ca0398f316f2f684fa365fce487b1e98c334a2544466785fa
MD5 3f3f7240580a8309228cc6b11e637782
BLAKE2b-256 c383bbb5215723c053676cf879cdc9ac5d540595df23c386c0835e2439394f9b

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: spatio-0.1.5a2-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 316.8 kB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for spatio-0.1.5a2-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 c04f24006120af4f8e4ac5b29a0604dc28cb1cd5c27227ce7192a4def0ed23db
MD5 ac9e3f7a5ab407294c20da537e837c91
BLAKE2b-256 53f2acb11eb6412c4c4a594f723388e55d68b46770d72987ed9e9f0f977ce23d

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp312-cp312-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp312-cp312-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 aa59920eda0f3ba67255dbde69911950c29a0057ded93a3732f2fcd909565695
MD5 91dd9c5214ae238843de7de52fb2b6ac
BLAKE2b-256 c5d5dc60d1c083811b61ec1a2530c49cbcf204af368f50e612eeca7916793873

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 e3a387028c995ae65276983842b4d0ee115d6a6317d48fcfce5a50a1125aedd3
MD5 4add69be54bfa3d2f0ba9752fa8c081a
BLAKE2b-256 1e35dbd05eade8e4ce4903f384e75228106c4bf6bbff2808ab93e8013022f26d

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 c8c020247c32a1455dccebc49c8abbe7fd497e15e6c2984dbdab56f0ff285378
MD5 1206fab00213f1fe716876c41cb66082
BLAKE2b-256 a1ec866b82998036a7db5bc468927f77cb95286be1b66a9ac7654aa06b9f2363

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: spatio-0.1.5a2-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 317.9 kB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for spatio-0.1.5a2-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 16d45ba722e6d8e99dd6691459abb7c615773bd781bb0bb38c448fefe45be24b
MD5 f1440075fed807471662b16f592d0d34
BLAKE2b-256 f8154115b47b9b88edb1d39b3eff55ca5c8e741e2c844c67a792e2e97b9fab20

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp311-cp311-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp311-cp311-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 ecd63874e970e6b39053d5385b69ab6c99ef195e024bc746b91885a50f6b9c1d
MD5 df45fe91768f1a333b5ad7d97a08afa1
BLAKE2b-256 92bdb217330a5551396f1054cdd6694a45f91b050927707add0518e52b7c2bb7

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4caefa161e55232482f98f2d28ff7155fa761d96dc536e1b9570deb91eeaef5b
MD5 19b0ec8684dbb7090eeb93ae975cbc44
BLAKE2b-256 0b90488081ee73b8fcc15879f99c8be05b410b80ee2d9222be90df06e02beb9f

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 540e6905d69351e953c57149c07ac879a458bb9286e8cb1d07ad7648b1b26b78
MD5 166272bfc1b386206f2e31cf297be7c8
BLAKE2b-256 ab16757893b17810175c69480d6dff7ad25cbf15d5f8a59a68ff34a57593d4a2

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: spatio-0.1.5a2-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 318.0 kB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for spatio-0.1.5a2-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 7d23fb92c1f1516878274304fa031acdc1f9c9c94a330d55b069b5595fa9a576
MD5 5d6ad4209e4f7fc856b4b9b38410effa
BLAKE2b-256 2cc362d518f38de2b251e4df96a94fbf5c973df02b3932111e2ceb7d2803ad3b

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp310-cp310-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 acf0431fea1e82d6f0484593655b22bb7674ca55cab9e954e9bf6b93e8d86320
MD5 39332ee615efb515b32aabd2e525ef19
BLAKE2b-256 7def753ad6c301bae1a15282ec1998c1c68d0229a963cd32cff62a134c3a4e38

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8c8c1c773b05839c14720d16ed31309b6958783e8a4b83d9ec3e759a60b05785
MD5 3ce6c3281784e56a85d07e38bab45bbe
BLAKE2b-256 200a5afd7492ccb20d1e8920280197715ab35fbd57929aed8a93f6a225f632fd

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 6a9bd46d32c275aa11cd2a49adef678581d6123a62e2e72a67ef1194263ad4cf
MD5 53fe8fbb7ad6ebdb36f88a9d8f341158
BLAKE2b-256 3a534c2e1e241f257aa6d3862bef095c375dbc59aaa1b757db47cd8e70adfb2b

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: spatio-0.1.5a2-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 318.2 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for spatio-0.1.5a2-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 d8c654ac872fec627bb7c1555984a49c4dc9f177807d7d5a6d4b3489ebf50e7d
MD5 941719ecdda1b4ac7039d77a4cd8a177
BLAKE2b-256 2e96e21630b40a79a8989ceada7c049b81ab5a00c622bb3eca13a25768a1f6df

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp39-cp39-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp39-cp39-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 ab82742ef5bbbf96eb7b27f691545f228517e83e761ab745f42c190235505002
MD5 9002bbac940a057a58195e096609ecbe
BLAKE2b-256 f4a8c5127ce5edab67394db9489d66181443d68e6ec102c0fe61e7ffbf7023e6

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 9f7a9ec306ff6030e0cf1cccc43465faec7dac0df880199d2c72c15b874048d7
MD5 55b2ae87ac32949c78dd177648b755ff
BLAKE2b-256 f60c8c5e8ba7364f39a430c189f3053bf0e2b395520330f99d08b56112d3cd4c

See more details on using hashes here.

File details

Details for the file spatio-0.1.5a2-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.5a2-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 9a9d6b4cf09e0fe99443d76483ff160ff96de9a23e94a5ec47ab558528abd16a
MD5 b307163d47e3d200b9d7e06af2b1cada
BLAKE2b-256 2185896fa080ef0b18177f3214807519956069de9634ea3835144b3e8ded0b71

See more details on using hashes here.

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