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

Uploaded CPython 3.13Windows x86-64

spatio-0.1.5-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.5-cp313-cp313-macosx_11_0_arm64.whl (363.5 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

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

Uploaded CPython 3.13macOS 10.12+ x86-64

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

Uploaded CPython 3.12Windows x86-64

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

Uploaded CPython 3.12manylinux: glibc 2.35+ x86-64

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

Uploaded CPython 3.12macOS 11.0+ ARM64

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

Uploaded CPython 3.12macOS 10.12+ x86-64

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

Uploaded CPython 3.11Windows x86-64

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

Uploaded CPython 3.11manylinux: glibc 2.35+ x86-64

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

Uploaded CPython 3.11macOS 11.0+ ARM64

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

Uploaded CPython 3.11macOS 10.12+ x86-64

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

Uploaded CPython 3.10Windows x86-64

spatio-0.1.5-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.5-cp310-cp310-macosx_11_0_arm64.whl (364.3 kB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

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

Uploaded CPython 3.10macOS 10.12+ x86-64

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

Uploaded CPython 3.9Windows x86-64

spatio-0.1.5-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.5-cp39-cp39-macosx_11_0_arm64.whl (364.5 kB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

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

Uploaded CPython 3.9macOS 10.12+ x86-64

File details

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

File metadata

  • Download URL: spatio-0.1.5-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 324.5 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.5-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 bc14e3cb2f9382e070a85b6e34d7e772fa31acbc60445afd5d51fef331d1be8c
MD5 303d80262df12e30c267c83c4c93f8d4
BLAKE2b-256 3b31ced9cceb206086ac58df29c8665b657d7f3cc86874a3727de1d611c24534

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp313-cp313-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 0d3314ebd8e6e23fb7e6f0869e95f8a0100751a6b3d9f7fb97d697d4a33ab63e
MD5 d3cbb06b341b49f890a5aeb15eed5152
BLAKE2b-256 bd0bffb1cf661a5d72b8d15f3bd690bca6c9ee2a5f4a188c25283cf24890606e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 0b4eb654e9dd27ae2bdb00119b25a5fe8bb3c4647e1db505f1de8d07aa8c8994
MD5 1f36afc3777bf5f1da97cccbc565f7f5
BLAKE2b-256 8126c72f3fc9e2a01c107ce77ea23aa22c4fb25798f9099907b6610bd74d8cb8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp313-cp313-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 397b9ef71ff4b4c871d756648c45e48bed3e50048762ca0652a77a9f5db98873
MD5 a5c6991348dd28aaa5cd0339835ae964
BLAKE2b-256 b077d39def7367e60a5c07b5179acf1ee31be808a554e835aa9d0448d82e04c5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: spatio-0.1.5-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 324.5 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.5-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 de79e3bc9d03025a35d878ed51ba916f79a6436bc979140735cca4271321523f
MD5 f17f2f42dbb23673bd84731996c84f03
BLAKE2b-256 e32434ff394eb1023a1f2d12eb7977e0226b3a403fcb3e719a0661a56de1597a

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp312-cp312-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 97936a083ba30c6530470efb602bc5acdbb2e12861fc3270e414be7c837cad40
MD5 f74dd769622bbc22463ee7512bce5a5e
BLAKE2b-256 d373b834bf13b1d9d258c8d90a9262c18f72940fa45a32ae1128941e1320fef8

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 4103677946db2f4825f1bd136724114163455ea4e62ec9eb837b9ec75b284d1f
MD5 1a76b6aab496bff0c6de8efb199ffd77
BLAKE2b-256 e3b3737420300f9846ba5e911faa13b2077e9caee97a86b4cf6387b900cc9a9f

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp312-cp312-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 2ff3966eaf7c74312a022f017ed9123cf0d2cd11d08b874c30965c72f386a7a3
MD5 a788c4e0d7c3d40ccff6c82e703e6d3f
BLAKE2b-256 582166c444337e6c6908663008a5798ae993f297dd76919c4b3c166b28533444

See more details on using hashes here.

File details

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

File metadata

  • Download URL: spatio-0.1.5-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 325.7 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.5-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 a40de521634c4634709939353242eb1d56b608587b8fd3938dc37201327e4fd2
MD5 e4632af7a2ed6776fa37e6138eea4ed4
BLAKE2b-256 762452da1b1328101a07df8ac2279c3ae3384bb1c2365a5c7e6453beb08c75f9

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp311-cp311-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 fc717f7852a202ba4e856ca7f3994bce50d28d6e995f1a633b125b53c8495e5a
MD5 0f5ca810b7ea746924a8d3a13a275a17
BLAKE2b-256 c13118f6dfb49d67eb0646a2c140f0e76150db1ec368e28e9e9562104230bfbb

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 839fffc0c9c1357190d1327a8e3de1c86c7405c29c909da4e67037610cf113cf
MD5 af91b16044f2f1fd098314655425aa4a
BLAKE2b-256 fbb8fe29372c201a4963731e6273042d06fb6fb0435a017192bbfcd46cbf51d7

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp311-cp311-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 39d69ece9d9359fbe367643791c0979db7bc5d54f633d8f7fbf802ce92cd6421
MD5 cf3fb4d56b9976d25611942ff0aad251
BLAKE2b-256 a6e8d7faca09522e07d472a241f06996b7cdcef397839b072706068a65cee9a1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: spatio-0.1.5-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 325.8 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.5-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 b74f43acd34863b45296b741f61fdbb64fca09bf5b507d780aef6ac4241665ac
MD5 3b153bb6203d7b4d63679438eeb9e770
BLAKE2b-256 bbf10ad9743926f22d30dcd5424db479b7e12717e87fec3ab3b8f5a4cf1d7c7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp310-cp310-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 7a3c1a825de6f8b1589918d6c8573f7d029bafffcea9ed799cb06e4c5e081f60
MD5 f769ad19bccece11ca7fca1092d3a812
BLAKE2b-256 e17407391d33f109210979ec98ee499c79ce6fb2c96a12a736096a195535b653

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 67e847b70bfa6d87b96547f965f1ddee0b608adda7c02a4965e445b0f824628e
MD5 a86a880739f426fd355a0ab568c9c42a
BLAKE2b-256 72dd2650f91f2924362e459524068a48881245426034d91685d49ac2d362579c

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp310-cp310-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 62262f5fdb78e81fb195b5948c992ea2556adca3f2ffcec1ecc16f597c8b3c29
MD5 7350a1bf2a50d005c8b201470c3e7397
BLAKE2b-256 25224a06d9bf3b519b6b54e0d2ad34920a185c5008de29ffd904b70e7920f8bb

See more details on using hashes here.

File details

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

File metadata

  • Download URL: spatio-0.1.5-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 326.0 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.5-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 4fb0e7e9ce3ecd2ebd66af5c91464a96ab2415930baf557b8c14a0991c1663ed
MD5 beca56f7cb767fbc628373d260110eeb
BLAKE2b-256 aca43a2cace128cc4919f81f6fb0c500e49062e3fa8a05e0a0615482cb8bac4e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp39-cp39-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 57a2fe1a0708250964f1532747dd785581106b3ea921941ed0aff71a4bff7dc0
MD5 195e70ba2ea11fa74170aa4106ac8def
BLAKE2b-256 8ca75fc0405a7ff929bcd06fcf13e5c9b9dd344a8ce78de1c2207e37a71cfc3d

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f64737f4b236c50f7bfcdec6df938595e5e17548ea784365774f953a40fff77
MD5 1811449c3938f52eb16e61f5be07ee20
BLAKE2b-256 0e96dfce04b4c75c90c82625ab28f5529d993032ae82fe9ffefed2d7d6526b6e

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for spatio-0.1.5-cp39-cp39-macosx_10_12_x86_64.whl
Algorithm Hash digest
SHA256 540874bb426b43aae0d3a99667b67732733765d130c228c5a5f81e55d4e3453a
MD5 d6f69106b2a535f2ac16d16f9988f8bd
BLAKE2b-256 f63ad307b2810eb6c5161ba5444dc1675c773f16387751f7acb4c224e45a21ac

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