Python bindings for Spart library
Project description
PySpart
Python bindings for the Spart library.
Installation
pip install pyspart
Examples
Below are some examples of how to use the different trees in PySpart.
Quadtree (2D)
from pyspart import Quadtree, Point2D
# Define the bounding area for the Quadtree.
boundary = {"x": 0.0, "y": 0.0, "width": 10.0, "height": 10.0}
# Create a new Quadtree with a maximum capacity of 3 points per node.
tree = Quadtree(boundary, 3)
# Define some 2D points.
point1 = Point2D(1.0, 2.0, "Point1")
point2 = Point2D(3.0, 4.0, "Point2")
point3 = Point2D(5.0, 6.0, "Point3")
point4 = Point2D(7.0, 8.0, "Point4")
point5 = Point2D(2.0, 3.0, "Point5")
# Insert points into the Quadtree.
tree.insert(point1)
tree.insert(point2)
tree.insert(point3)
tree.insert(point4)
tree.insert(point5)
# Perform a k-nearest neighbor (kNN) search.
neighbors = tree.knn_search(point1, 2)
print(f"kNN search results for {point1}: {neighbors}")
# Perform a range search with a radius of 5.0.
range_points = tree.range_search(point1, 5.0)
print(f"Range search results for {point1}: {range_points}")
# Remove a point from the tree.
tree.delete(point1)
Octree (3D)
from pyspart import Octree, Point3D
# Define the bounding area for the Octree.
boundary = {"x": 0.0, "y": 0.0, "z": 0.0, "width": 10.0, "height": 10.0, "depth": 10.0}
# Create a new Octree with a maximum capacity of 3 points per node.
tree = Octree(boundary, 3)
# Define some 3D points.
point1 = Point3D(1.0, 2.0, 3.0, "Point1")
point2 = Point3D(3.0, 4.0, 5.0, "Point2")
point3 = Point3D(5.0, 6.0, 7.0, "Point3")
point4 = Point3D(7.0, 8.0, 9.0, "Point4")
point5 = Point3D(2.0, 3.0, 4.0, "Point5")
# Insert points into the Octree.
tree.insert(point1)
tree.insert(point2)
tree.insert(point3)
tree.insert(point4)
tree.insert(point5)
# Perform a kNN search.
neighbors = tree.knn_search(point1, 2)
print(f"kNN search results for {point1}: {neighbors}")
# Perform a range search with a radius of 5.0.
range_points = tree.range_search(point1, 5.0)
print(f"Range search results for {point1}: {range_points}")
# Remove a point from the tree.
tree.delete(point1)
Kd-tree (3D)
from pyspart import KdTree3D, Point3D
# Create a new Kd-tree for 3D points.
tree = KdTree3D()
# Define some 3D points.
point1 = Point3D(1.0, 2.0, 3.0, "Point1")
point2 = Point3D(3.0, 4.0, 5.0, "Point2")
point3 = Point3D(5.0, 6.0, 7.0, "Point3")
point4 = Point3D(7.0, 8.0, 9.0, "Point4")
point5 = Point3D(2.0, 3.0, 4.0, "Point5")
# Insert points into the Kd-tree.
tree.insert(point1)
tree.insert(point2)
tree.insert(point3)
tree.insert(point4)
tree.insert(point5)
# Perform a kNN search.
neighbors = tree.knn_search(point1, 2)
print(f"kNN search results for {point1}: {neighbors}")
# Perform a range search with a radius of 5.0.
range_points = tree.range_search(point1, 5.0)
print(f"Range search results for {point1}: {range_points}")
# Remove a point from the tree.
tree.delete(point1)
R-tree (3D)
from pyspart import RTree3D, Point3D
# Create a new R-tree with a maximum capacity of 4 points per node.
tree = RTree3D(4)
# Define some 3D points.
point1 = Point3D(1.0, 2.0, 3.0, "Point1")
point2 = Point3D(3.0, 4.0, 5.0, "Point2")
point3 = Point3D(5.0, 6.0, 7.0, "Point3")
point4 = Point3D(7.0, 8.0, 9.0, "Point4")
point5 = Point3D(2.0, 3.0, 4.0, "Point5")
# Insert points into the R-tree.
tree.insert(point1)
tree.insert(point2)
tree.insert(point3)
tree.insert(point4)
tree.insert(point5)
# Perform a kNN search.
neighbors = tree.knn_search(point1, 2)
print(f"kNN search results for {point1}: {neighbors}")
# Perform a range search with a radius of 5.0.
range_points = tree.range_search(point1, 5.0)
print(f"Range search results for {point1}: {range_points}")
# Remove a point from the tree.
tree.delete(point1)
R*-tree (3D)
from pyspart import RStarTree3D, Point3D
# Create a new R*-tree with a maximum capacity of 4 points per node.
tree = RStarTree3D(4)
# Define some 3D points.
point1 = Point3D(1.0, 2.0, 3.0, "Point1")
point2 = Point3D(3.0, 4.0, 5.0, "Point2")
point3 = Point3D(5.0, 6.0, 7.0, "Point3")
point4 = Point3D(7.0, 8.0, 9.0, "Point4")
point5 = Point3D(2.0, 3.0, 4.0, "Point5")
# Insert points into the R*-tree.
tree.insert(point1)
tree.insert(point2)
tree.insert(point3)
tree.insert(point4)
tree.insert(point5)
# Perform a kNN search.
neighbors = tree.knn_search(point1, 2)
print(f"kNN search results for {point1}: {neighbors}")
# Perform a range search with a radius of 5.0.
range_points = tree.range_search(point1, 5.0)
print(f"Range search results for {point1}: {range_points}")
# Remove a point from the tree.
tree.delete(point1)
Check out the examples directory for more examples.
Serialization
In Python, you can use the save and load methods to serialize and deserialize the tree to and from a file:
from pyspart import Quadtree, Point2D
# Create a Quadtree and insert some points
boundary = {"x": 0.0, "y": 0.0, "width": 100.0, "height": 100.0}
qt = Quadtree(boundary, 4)
qt.insert(Point2D(10.0, 20.0, "point1"))
qt.insert(Point2D(50.0, 50.0, "point2"))
# Save the tree to a file
qt.save("quadtree.spart")
# Load the tree from the file
loaded_qt = Quadtree.load("quadtree.spart")
License
PySpart is licensed under the MIT License.
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
Built Distributions
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 pyspart-0.5.1-cp310-abi3-win_amd64.whl.
File metadata
- Download URL: pyspart-0.5.1-cp310-abi3-win_amd64.whl
- Upload date:
- Size: 388.7 kB
- Tags: CPython 3.10+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
bad96a12d42bfa66a1756e09330dfddfd82f0f9bca7ea0968773d6a7ad3b32f4
|
|
| MD5 |
79bba7bef301f2f45f114fb8f840480b
|
|
| BLAKE2b-256 |
93814e3da9f9b229df00dd8d291a7ed08b149f54ff01d61c5f754467242176bb
|
File details
Details for the file pyspart-0.5.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: pyspart-0.5.1-cp310-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 480.3 kB
- Tags: CPython 3.10+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29685843b5f20df0333e8ea4cd4380efa16968d1903e12b83fa3f20d1dca3456
|
|
| MD5 |
3e93cbebd17c2b0cb63aef220ab618c3
|
|
| BLAKE2b-256 |
0d699a17e7923eb4011c5b69579429aa12a0b8efe6573a13630fe5761571fe4c
|
File details
Details for the file pyspart-0.5.1-cp310-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: pyspart-0.5.1-cp310-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 429.1 kB
- Tags: CPython 3.10+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.10.19
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1eaa503f733b1c6cb12cd53d663794ab31f66ded744318ad15379c404897c2d1
|
|
| MD5 |
857d5feb347d902e4d03826da97a087f
|
|
| BLAKE2b-256 |
29294e602ae334386f34809599790731bc4b2e3a82308412a7ea15b791ce6aab
|