Space Curves (spacecurves, Uzay Eğrileri): Uzay Dolduran Eğriler Modülü
Project description
Space Curves (spacecurves, Uzay Eğrileri) 
| PyPI |
|
| Conda |
|
| DOI |
|
| License: AGPL |
|
Space Curves (spacecurves, Uzay Eğrileri)
# Space Curves (spacecurves) / Uzay Eğrileri
[](LICENSE)
[](https://www.python.org/)
[]()
> **English** | [Türkçe](#türkçe)
---
## English
### 📌 Overview
**Space Curves (spacecurves)** is a comprehensive Python module for space-filling curves, providing a complete implementation of Hilbert curves and other space-filling curves with advanced features.
### ✨ Features
- **Multi-dimensional support**: 1-5 dimensions
- **Configurable depth**: 1-10 iterations (2^p grid size)
- **3 curve types**: Hilbert, Morton, Moore
- **High performance**: LRU cache support, batch operations
- **Neighbor search**: Find neighbors in Hilbert space
- **Image compression**: Hilbert curve-based image compression
- **Dimension reduction**: High-dimensional data → 2D visualization
- **Hilbert ordering**: Spatial data organization
- **Grid system**: Hilbert-based data structure
- **Path optimization**: TSP-like route optimization
- Görselleştirme araçları (HilbertVisualizer)
- Yaklaşık kümeleme (HilbertClustering)
### 🚀 Quick Start
```python
from spacecurves import SpaceFillingCurve, CurveType
# Create a 2D Hilbert curve (16x16 grid)
curve = SpaceFillingCurve(p=4, n=2)
# Transform: distance → coordinates
point = curve[42] # [7, 0]
# Inverse transform: coordinates → distance
distance = curve.inverse([7, 0]) # 42
# Batch transform
distances = [0, 10, 20, 30, 40]
points = curve.batch_transform(distances)
# Find neighbors
neighbors = curve.get_neighbors([5, 5], radius=2)
📦 Installation
pip install spacecurves
Or directly from source:
git clone https://github.com/yourusername/spacecurves.git
cd spacecurves
pip install -e .
📚 Examples
1. GPS Coordinate Indexing
from spacecurves import SpaceFillingCurve
curve = SpaceFillingCurve(p=8, n=2)
# City coordinates (latitude, longitude)
cities = {
'Istanbul': [41.0082, 28.9784],
'Ankara': [39.9334, 32.8597],
}
# Convert to Hilbert index
for name, coord in cities.items():
x = int((coord[0] - 36) / 6 * 255)
y = int((coord[1] - 26) / 15 * 255)
idx = curve.inverse([x, y])
print(f"{name}: {idx}")
2. Image Compression
import numpy as np
from spacecurves import HilbertImageCompressor
# Create test image
image = np.random.randint(0, 256, (256, 256), dtype=np.uint8)
# Compress
compressor = HilbertImageCompressor(image)
compressed = compressor.compress(keep_ratio=0.2) # Keep 20% of pixels
3. Dimension Reduction
from spacecurves import HilbertDimensionReducer
# 10D data → 2D visualization
reducer = HilbertDimensionReducer(target_dim=2, p=6)
reduced = reducer.fit_transform(high_dim_data)
4. Route Optimization
from spacecurves import HilbertPathOptimizer
curve = SpaceFillingCurve(p=8, n=2)
optimizer = HilbertPathOptimizer(curve)
# Optimize delivery route
optimized_route = optimizer.optimize_order(delivery_points)
5. Hilbert Grid
from spacecurves import HilbertGrid
grid = HilbertGrid(curve)
grid[[10, 20]] = "Value A"
grid[[30, 40]] = "Value B"
print(grid[[10, 20]]) # Value A
🔧 API Reference
SpaceFillingCurve(p, n, curve_type=CurveType.HILBERT, use_cache=True)
| Parameter | Type | Default | Description |
|---|---|---|---|
p |
int | required | Iteration count (2^p grid size), 1-10 |
n |
int | required | Number of dimensions, 1-5 |
curve_type |
CurveType | HILBERT | Curve type |
use_cache |
bool | True | Enable caching |
Methods:
| Method | Description |
|---|---|
transform(distance) |
Convert distance to coordinates |
inverse(point) |
Convert coordinates to distance |
batch_transform(distances) |
Batch conversion |
batch_inverse(points) |
Batch inverse conversion |
get_neighbors(point, radius) |
Find neighbors |
sample(n_points, method) |
Sample points along curve |
Curve Types
| Type | Description | Best For |
|---|---|---|
HILBERT |
Classic Hilbert curve | General purpose |
MORTON |
Z-order curve | Fast indexing |
MOORE |
Moore curve (Hilbert variant) | Closed loops |
ALTAIR |
Hybrid curve | Speed/locality balance |
📊 Performance
- Transform speed: ~2.6M ops/sec (2D, p=4)
- Cache hit rate: >95% with repeated queries
- Grid access: ~0.01ms per operation
📄 License
This project is licensed under the GNU Affero General Public License v3.0 (AGPL-3.0-or-later).
👤 Author
Mehmet Keçeci
Email: mkececi@yaani.com
Türkçe
📌 Genel Bakış
Space Curves (spacecurves), uzay dolduran eğriler için kapsamlı bir Python modülüdür. Hilbert eğrisi ve diğer uzay dolduran eğrilerin tam bir implementasyonunu gelişmiş özelliklerle sunar.
✨ Özellikler
- Çok boyutlu destek: 1-5 boyut
- Ayarlanabilir derinlik: 1-16 iterasyon (2^p grid boyutu)
- 3 eğri tipi: Hilbert, Morton, Moore
- Yüksek performans: LRU önbellek, toplu işlemler
- Komşuluk arama: Hilbert uzayında komşu bulma
- Görüntü sıkıştırma: Hilbert eğrisi tabanlı görüntü sıkıştırma
- Boyut indirgeme: Yüksek boyutlu veri → 2D görselleştirme
- Hilbert sıralama: Mekansal veri düzenleme
- Grid sistemi: Hilbert tabanlı veri yapısı
- Rota optimizasyonu: TSP benzeri rota optimizasyonu
- Görselleştirme araçları (HilbertVisualizer)
- Yaklaşık kümeleme (HilbertClustering)
🚀 Hızlı Başlangıç
from spacecurves import SpaceFillingCurve, CurveType
# 2D Hilbert eğrisi oluştur (16x16 grid)
curve = SpaceFillingCurve(p=4, n=2)
# Dönüşüm: mesafe → koordinat
point = curve[42] # [7, 0]
# Ters dönüşüm: koordinat → mesafe
distance = curve.inverse([7, 0]) # 42
# Toplu dönüşüm
distances = [0, 10, 20, 30, 40]
points = curve.batch_transform(distances)
# Komşu bulma
neighbors = curve.get_neighbors([5, 5], radius=2)
📦 Kurulum
pip install spacecurves
Veya doğrudan kaynaktan:
git clone https://github.com/WhiteSymmetry/spacecurves.git
cd spacecurves
pip install -e .
📚 Örnekler
1. GPS Koordinat İndeksleme
from spacecurves import SpaceFillingCurve
curve = SpaceFillingCurve(p=8, n=2)
# Şehir koordinatları (enlem, boylam)
sehirler = {
'İstanbul': [41.0082, 28.9784],
'Ankara': [39.9334, 32.8597],
}
# Hilbert indeksine dönüştür
for ad, koord in sehirler.items():
x = int((koord[0] - 36) / 6 * 255)
y = int((koord[1] - 26) / 15 * 255)
idx = curve.inverse([x, y])
print(f"{ad}: {idx}")
2. Görüntü Sıkıştırma
import numpy as np
from spacecurves import HilbertImageCompressor
# Test görüntüsü oluştur
gorsel = np.random.randint(0, 256, (256, 256), dtype=np.uint8)
# Sıkıştır
sikistirici = HilbertImageCompressor(gorsel)
sikistirilmis = sikistirici.compress(keep_ratio=0.2) # Piksellerin %20'sini tut
3. Boyut İndirgeme
from spacecurves import HilbertDimensionReducer
# 10D veri → 2D görselleştirme
indirgeyici = HilbertDimensionReducer(target_dim=2, p=6)
indirgenmis = indirgeyici.fit_transform(yuksek_boyutlu_veri)
4. Rota Optimizasyonu
from spacecurves import HilbertPathOptimizer
curve = SpaceFillingCurve(p=8, n=2)
optimizer = HilbertPathOptimizer(curve)
# Teslimat rotasını optimize et
optimize_rota = optimizer.optimize_order(teslimat_noktalari)
5. Hilbert Grid
from spacecurves import HilbertGrid
grid = HilbertGrid(curve)
grid[[10, 20]] = "Değer A"
grid[[30, 40]] = "Değer B"
print(grid[[10, 20]]) # Değer A
🔧 API Referansı
SpaceFillingCurve(p, n, curve_type=CurveType.HILBERT, use_cache=True)
| Parametre | Tip | Varsayılan | Açıklama |
|---|---|---|---|
p |
int | gerekli | İterasyon sayısı (2^p grid boyutu), 1-10 |
n |
int | gerekli | Boyut sayısı, 1-5 |
curve_type |
CurveType | HILBERT | Eğri tipi |
use_cache |
bool | True | Önbellek kullanımı |
Metotlar:
| Metot | Açıklama |
|---|---|
transform(distance) |
Mesafeyi koordinata dönüştürür |
inverse(point) |
Koordinatı mesafeye dönüştürür |
batch_transform(distances) |
Toplu dönüşüm |
batch_inverse(points) |
Toplu ters dönüşüm |
get_neighbors(point, radius) |
Komşuları bulur |
sample(n_points, method) |
Eğri boyunca örnek noktalar |
Eğri Tipleri
| Tip | Açıklama | En İyi Kullanım Alanı |
|---|---|---|
HILBERT |
Klasik Hilbert eğrisi | Genel amaçlı |
MORTON |
Z-order eğrisi | Hızlı indeksleme |
MOORE |
Moore eğrisi (Hilbert varyantı) | Kapalı döngüler |
ALTAIR |
Hibrid eğri | Hız/lokalite dengesi |
📊 Performans
- Dönüşüm hızı: ~2.6M işlem/saniye (2D, p=4)
- Önbellek isabet oranı: Tekrarlı sorgularda >%95
- Grid erişimi: ~0.01ms işlem başına
📄 Lisans
Bu proje GNU Affero General Public License v3.0 (AGPL-3.0-or-later) ile lisanslanmıştır.
👤 Yazar
Mehmet Keçeci
Acknowledgments / Teşekkürler
- Hilbert curve algorithm based on the work of David Hilbert (1891)
- Morton order (Z-order curve) by Guy Macdonald Morton (1966)
- Moore curve by E. H. Moore (1900)
---
# Pixi:
[](https://prefix.dev/channels/bilgi)
pixi init spacecurves
cd spacecurves
pixi workspace channel add [https://prefix.dev/channels/bilgi](https://prefix.dev/channels/bilgi) --prepend
✔ Added https://prefix.dev/channels/bilgi
pixi add spacecurves
✔ Added spacecurves >=...,<1
pixi install
pixi shell
pixi run python -c "import spacecurves; print(spacecurves.__version__)"
### Çıktı:
pixi remove spacecurves
conda install -c https://prefix.dev/channels/bilgi spacecurves
pixi run python -c "import spacecurves; print(spacecurves.__version__)"
### Çıktı:
pixi run pip list | grep spacecurves
### spacecurves
pixi run pip show spacecurves
Name: spacecurves
Version:
Summary: Keçeci Numbers: Keçeci Sayıları (Keçeci Conjecture)
Home-page: https://github.com/WhiteSymmetry/spacecurves
Author: Mehmet Keçeci
Author-email: Mehmet Keçeci <...>
License: GNU AFFERO GENERAL PUBLIC LICENSE
Copyright (c) 2025-2026 Mehmet Keçeci
----
1. https://pypi.org/project/spacecurves/
2. https://anaconda.org/bilgi/spacecurves
3. https://prefix.dev/channels/bilgi/packages/spacecurves
---
## License / Lisans
This project is licensed under the AGPL3.0 or Later License. See the `LICENSE` file for details.
## Citation
If this library was useful to you in your research, please cite us. Following the [GitHub citation standards](https://docs.github.com/en/github/creating-cloning-and-archiving-repositories/creating-a-repository-on-github/about-citation-files), here is the recommended citation.
### BibTeX
```bibtex
@misc{kececi_2026_19672791,
author = {Keçeci, Mehmet},
title = {spacecurves},
month = apr,
year = 2026,
publisher = {Zenodo},
version = {0.1.3},
doi = {10.5281/zenodo.19672791},
url = {https://doi.org/10.5281/zenodo.19672791},
}
APA
Keçeci, M. (2026). spacecurves (0.1.3). Open Science Articles (OSAs), Zenodo. https://doi.org/10.5281/zenodo.19672791
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file spacecurves-0.1.4.tar.gz.
File metadata
- Download URL: spacecurves-0.1.4.tar.gz
- Upload date:
- Size: 38.0 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
74bc6a933f5705cd5f79de052d10e39cf08c1bbf0b0f2adc5d9662d6b7c4404d
|
|
| MD5 |
dab51883c23ed764039c7e98c2c64034
|
|
| BLAKE2b-256 |
f20b8772849a9824db4e1f0ad89eb7d6decbe11173171598c4721f19d13ba919
|
File details
Details for the file spacecurves-0.1.4-py3-none-any.whl.
File metadata
- Download URL: spacecurves-0.1.4-py3-none-any.whl
- Upload date:
- Size: 33.1 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.15
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8b49c5a92e25c6f213199077e70ce99dc3730c8352ca11fb479edd1a83dc3e30
|
|
| MD5 |
f90b4c80197c3438821cde5bf6724d9e
|
|
| BLAKE2b-256 |
f708f3314301663043b2a72028a7a1ed2ecd2f1e396b409e857deb775910ec44
|