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.6-cp313-cp313-win_amd64.whl (324.2 kB view details)

Uploaded CPython 3.13Windows x86-64

spatio-0.1.6-cp313-cp313-manylinux_2_35_x86_64.whl (423.1 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.35+ x86-64

spatio-0.1.6-cp313-cp313-macosx_11_0_arm64.whl (363.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

spatio-0.1.6-cp313-cp313-macosx_10_12_x86_64.whl (400.5 kB view details)

Uploaded CPython 3.13macOS 10.12+ x86-64

spatio-0.1.6-cp312-cp312-win_amd64.whl (324.2 kB view details)

Uploaded CPython 3.12Windows x86-64

spatio-0.1.6-cp312-cp312-manylinux_2_35_x86_64.whl (423.2 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

spatio-0.1.6-cp312-cp312-macosx_11_0_arm64.whl (363.5 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

spatio-0.1.6-cp312-cp312-macosx_10_12_x86_64.whl (400.5 kB view details)

Uploaded CPython 3.12macOS 10.12+ x86-64

spatio-0.1.6-cp311-cp311-win_amd64.whl (325.4 kB view details)

Uploaded CPython 3.11Windows x86-64

spatio-0.1.6-cp311-cp311-manylinux_2_35_x86_64.whl (423.2 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.35+ x86-64

spatio-0.1.6-cp311-cp311-macosx_11_0_arm64.whl (364.0 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

spatio-0.1.6-cp311-cp311-macosx_10_12_x86_64.whl (400.6 kB view details)

Uploaded CPython 3.11macOS 10.12+ x86-64

spatio-0.1.6-cp310-cp310-win_amd64.whl (325.6 kB view details)

Uploaded CPython 3.10Windows x86-64

spatio-0.1.6-cp310-cp310-manylinux_2_35_x86_64.whl (423.4 kB view details)

Uploaded CPython 3.10manylinux: glibc 2.35+ x86-64

spatio-0.1.6-cp310-cp310-macosx_11_0_arm64.whl (364.1 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

spatio-0.1.6-cp310-cp310-macosx_10_12_x86_64.whl (400.7 kB view details)

Uploaded CPython 3.10macOS 10.12+ x86-64

spatio-0.1.6-cp39-cp39-win_amd64.whl (325.8 kB view details)

Uploaded CPython 3.9Windows x86-64

spatio-0.1.6-cp39-cp39-manylinux_2_35_x86_64.whl (423.5 kB view details)

Uploaded CPython 3.9manylinux: glibc 2.35+ x86-64

spatio-0.1.6-cp39-cp39-macosx_11_0_arm64.whl (364.2 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

spatio-0.1.6-cp39-cp39-macosx_10_12_x86_64.whl (400.9 kB view details)

Uploaded CPython 3.9macOS 10.12+ x86-64

File details

Details for the file spatio-0.1.6-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: spatio-0.1.6-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 324.2 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.6-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 27a11ee246f65762e60ab59bc3e314d265ac33394bc99837de949874a589d590
MD5 f0960f887c6d17431e5cf9166d7b937d
BLAKE2b-256 b26c3231e54547bcf5e8384574b887bfabdb23e24fe30897b17800cec84ad0a5

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp313-cp313-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp313-cp313-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 38cf5b242a6f33f893b294715da678fe77d98bd369c4d1ea9ae13592e753315f
MD5 8686b05e1c868b10e50990123fe5f4c7
BLAKE2b-256 5f3fade342ee9795a72082960f40ac28cafe2ea96609b8f91baa4d617e8d41ff

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f35ce2ff846a7bffdab639d6552a4316f5bb9b747de11144f1f15932cd52488b
MD5 3698e191d70d3259c50c085c0cf954a1
BLAKE2b-256 ae32a834e615d62c64b2b58fc944a1486f3331e4903d4acaca16ec35e8520d5b

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp313-cp313-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 d8dfc506562089d7368ba44ca5c3575b158980429dd64783faa1bd766bc2720d
MD5 dbe2f6eb511b7cfd68790e12be289a9b
BLAKE2b-256 a72a8ae5cad08950e3c0d564555028e05ec3e4ef87d936829815aa7c0ca1510e

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: spatio-0.1.6-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 324.2 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.6-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 d9b2d520c704b325b49457e3f5aa4075533c65c1d67b15f048bc283f14ef2f46
MD5 c675882040e4e1f00a3c28618407be3e
BLAKE2b-256 61890a3fecba0f8f6236dda70ccd2b9f39137777b2db18fd9089b713215c0696

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp312-cp312-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp312-cp312-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 0455b63fb9b4d0beea328ca0e42078036a54837e317d14cb83ef93f154cd271a
MD5 75df4a55f0c36b9fdf42067b812524f2
BLAKE2b-256 2bc56857cd157c8be20ade3879ad9bd3607086e8b4ea57759b961fa4075daed1

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 62e978212fcb6343025dd7a04ea7a1e3f2ca908982f9927b722a5d344bc8c942
MD5 7a2679ebbe20f33f14b2dd11d4815278
BLAKE2b-256 e4c15d16eba95d4834de227aae7a3527e2f3dd69bb98d28fbf57bcc6ea73d5d7

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp312-cp312-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 3ae22696011c6e23178c66ddae74e8b83c0cb8882da77e6f0b922a80e87f2c6f
MD5 5b6872c08a69a354164ccffd50fd9741
BLAKE2b-256 425e9a2e02f8519df7a6bdb97bf8b0ec1b2baa1e0ed04d4474bdccd495dad05e

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: spatio-0.1.6-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 325.4 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.6-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 d539efd259127e826dbf623811735d71b2a44a736d1e123362f0f06bc009be14
MD5 1fe1e4b9cd7ba46fc3f6326a95b8535e
BLAKE2b-256 17808fd0a1c2c1182616950e77cd60eafbab3305245c8b24f195968d323ebc43

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp311-cp311-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp311-cp311-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 822c4ba110e54507822657ba0e16325efdd0fd62898005b00f79c1af4214121e
MD5 bb6e31992a58a5e32300c48e60d1c937
BLAKE2b-256 024a08a779c325690e78c4669c30a80ac4d4154fd2cce2ac9fb22d9e80faba63

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 86b3dcf43cc1138f1b478eb6cceef05cbb4d173ba5bf8b3ae2c7163fac7fcb98
MD5 b83cc12fc6665372d157a07aeadddbcd
BLAKE2b-256 594e31b9ecace7c197687df4a972ac3fa67f21786af76dea5508b91075ad92cd

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp311-cp311-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2a74e40df6e3d4bf7f1187a322b6c8ba864f0d566af940af334963ae670c8da3
MD5 bef0d4ac284cc120f896bd325dd1c4ab
BLAKE2b-256 dbd20b3abd0f33816e323f1e5b753a44fb0daa34fc59ac6a99e634f2cb0065a5

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: spatio-0.1.6-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 325.6 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.6-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 60eb4a5035dad91d0059e4f5253b203c9fa1d54e0917dc8a1d099cdc07f42db3
MD5 c574920891360cf3268cc0144ba6b816
BLAKE2b-256 24af3649c0dca524eb86743a6dde823ec869edf31775a343d6881da8d976fa20

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp310-cp310-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 57fcfebe5d5352f4b03814f0a66763e4a0538ce821d05049d9a351e3bfe19154
MD5 d44753ecc414f81ada22364a441f9308
BLAKE2b-256 bd4df3defba692b455c5925f99ff28a6614b766f1f7a815d20aafa74c59316a2

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 60ca67b22be24c009256b83382c0cdb59841929bf9c6f3609d85de8dbdcaa1ee
MD5 a289eedb7a31106982a46c39bc6096db
BLAKE2b-256 209917b42617acfed8ab4f2fadb8912f4102df3af3813b01c554d0f7540c5e07

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp310-cp310-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 4bdd9cb8bb0f6f497c7e2b11376c58302f8c10dc1494bb0eca7cfe43bafe7bf3
MD5 cf31ccfca0c591f394bdf702960f713b
BLAKE2b-256 98da1440880de9742b8e95b9dc36ed56ad2215578d52e1b3d42ff2717afc01f7

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: spatio-0.1.6-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 325.8 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.6-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 1406bf6f162ce64fdc7653a30f004ef32cd05210c94b3e1fd4f7ebe07152543f
MD5 a9e5696649e555752e613a9a8aef554f
BLAKE2b-256 5f26d2954f527995a6a575a5f09cb3fd19135b6682251b37f65193844e402d33

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp39-cp39-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp39-cp39-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 e53183904ad7c1f8d227760495bc89568298fe59cc18c4b67e48e868c909e19e
MD5 b40467cf57d6f70a09dab08c31dc2911
BLAKE2b-256 f0cae5047673f64bb0707d1afd4da0e262e774fb37e7a5909c813b038b0bedf3

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b41097c9d7bf1c4dfb52831cc9e80a8093d1dabb61aec1f8582c8f3532d1ab54
MD5 16c7ae8475763d04feeb3de387166635
BLAKE2b-256 8cea4acfb5043dac4abef640be3100c543bf82cc3ff110bd937e9d98f43c4c39

See more details on using hashes here.

File details

Details for the file spatio-0.1.6-cp39-cp39-macosx_10_12_x86_64.whl.

File metadata

File hashes

Hashes for spatio-0.1.6-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 63236e487c40202fb1987f7018ce8a4532dfc1883a13876b53187689acd0f81f
MD5 5a59d5c0cfd804d6e00e92868a211a65
BLAKE2b-256 9c4cba8e7660b48053b3584840bc52c529765f896dd7e9a70d979a7dc6a744ab

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