No project description provided
Project description
Syntopic 🌐
An ultra-high-performance, parallel 3D spatial topology, non-manifold cell complex, and Spatial GraphRAG compiler for the Architecture, Engineering, and Construction (AEC) industry. Built in pure Rust and exposed natively to Python with Stable ABI.
⚡ The Syntopic Computational Value Proposition
Traditional topological modeling tools wrap heavyweight, single-threaded C++ kernels (like Open CASCADE or CGAL) in python layers, introducing heavy memory translation overheads and UI freezes in CAD systems.
Syntopic solves this bottleneck with:
- Scaleless Spatial Pruning: Uses bulk-loaded $O(\log N)$ R*-Trees for parallel multi-mesh intersection sweeps.
- Robust Input Sanitization: Employs an $O(N)$ spatial hashing Weld Filter to automatically repair dirty vertices and duplicate collinear faces common in Rhino/BIM models.
- BIM-to-GraphRAG Compiler: Generates native Neo4j Cypher queries and Graph Neural Network (GML) structures directly within Rust's parallel execution memory, bypassing GIL locks.
- Möller-Trumbore Ray Tracing: Incorporates micro-perturbed 3D vertical ray tracers to accurately check 1D-3D elements (columns inside rooms) without diagonal boundary errors.
🏗 System Architecture & Topology Hierarchy
[Raw CAD / BIM IFC Stream]
│
▼ (Weld & Clean Filter - O(N))
[Sanitized Meshes]
│
▼ (R*-Tree Broad Phase Spatial Index)
┌───────────┴───────────┐
▼ ▼
[3D Freeform Slicing] [Exact 2D Boolean Intersection]
│ │
│ ▼ (Apertures/Windows subtracted)
│ [Adjacency Matrix]
│ │
└───────────┬───────────┘
▼ (Main Thread GIL Serialization)
[Spatial Graph] ──► (Dijkstra Solver / Cypher Compiler)
Topological Hierarchy Entity Mapping
Cell (3D Volume/Room) ──► Shell (Boundary) ──► Face (2D Wall/Slab) ──► Wire (1D Column) ──► Vertex (3D Point)
🚀 Installation & Build
1. Simple Installation (via PyPI)
For standard use inside Python 3.9+ environments (including Rhino 8 & 9):
pip install syntopic-aec
2. Compile From Source (For Developers)
To compile the raw Rust code for maximum local optimization:
# Clone the repository
git clone https://github.com/moaminmo90/Syntopic.git
cd Syntopic
# Setup a virtual environment
python -m venv .venv
source .venv/bin/activate # On Windows: .venv\Scripts\activate
# Install maturín build system and compile in release mode
pip install maturin
maturin develop --release
⚡ Quick Start: Freeform Spatial Graph & Neo4j Ingest
Create a file run.py and execute the following complete GraphRAG compilation:
import syntopic
# 1. Define closed room geometries
room_cube_verts = [
syntopic.Vector3D(0, 0, 0), syntopic.Vector3D(4, 0, 0),
syntopic.Vector3D(4, 4, 0), syntopic.Vector3D(0, 4, 0),
syntopic.Vector3D(0, 0, 2), syntopic.Vector3D(4, 0, 2),
syntopic.Vector3D(4, 4, 2), syntopic.Vector3D(0, 4, 2)
]
room_cube_faces = [[3, 2, 1, 0], [4, 5, 6, 7], [0, 1, 5, 4], [1, 2, 6, 5], [2, 3, 7, 6], [3, 0, 4, 7]]
cube_room = syntopic.Mesh(room_cube_verts, room_cube_faces)
room_pyramid_verts = [
syntopic.Vector3D(1, 1, 2), syntopic.Vector3D(3, 1, 2),
syntopic.Vector3D(3, 3, 2), syntopic.Vector3D(1, 3, 2),
syntopic.Vector3D(2, 2, 4)
]
room_pyramid_faces = [[3, 2, 1, 0], [0, 1, 4], [1, 2, 4], [2, 3, 4], [3, 0, 4]]
pyramid_room = syntopic.Mesh(room_pyramid_verts, room_pyramid_faces)
# 2. Build spatial registry and compile Adjacency Dual-Graph
registry = syntopic.SpatialRegistry([cube_room, pyramid_room], [], [])
graph = registry.build_spatial_graph(0.001)
# 3. Attach Semantic BIM properties inside Rust memory
graph.nodes[0].set_attribute("zone_name", "Main_Hall_Floor")
graph.nodes[1].set_attribute("zone_name", "Glass_Dome_Ceiling")
# 4. Compile database-ready Cypher queries for Neo4j / GraphRAG ingestion
cypher_payload = graph.to_cypher_queries()
for query in cypher_payload:
print(query)
🔌 AEC Ecosystem Integrations
1. Rhino 8 / 9 & Grasshopper Component
Inside the new Python 3 (CPython) script component in Grasshopper, append the library path and execute:
import sys
import Rhino.Geometry as rg
# Append virtual environment directory where syntopic is installed
sys.path.append(r"D:\programming\grasshopper\Syntopic\.venv\Lib\site-packages")
import syntopic
# Convert native Rhino meshes to Syntopic Rust Mesh
verts = [syntopic.Vector3D(v.X, v.Y, v.Z) for v in RhinoMesh.Vertices]
faces = [[f.A, f.B, f.C, f.D] if f.IsQuad else [f.A, f.B, f.C] for f in RhinoMesh.Faces]
rust_mesh = syntopic.Mesh(verts, faces).clean(0.001)
print("Syntopic successfully parsed Rhino Common geometry!")
2. ETH Zürich COMPAS Framework Integration
Directly convert COMPAS mesh objects to high-precision Syntopic structures utilizing our bridge connector:
import compas.geometry
from syntopic.compas_bridge import from_compas_mesh
# Create standard COMPAS mesh
compas_mesh = compas.geometry.Mesh.from_polyhedron(4)
# Translate to native Rust topology mesh
syntopic_mesh = from_compas_mesh(compas_mesh)
print(f"Bridges: Extracted {len(syntopic_mesh.vertices)} vertices from COMPAS Mesh!")
👨💻 Author
Developed with passion by Moamin
⚖️ License
This project is licensed under the MIT License. See the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
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 syntopic_aec-0.1.0-cp39-abi3-win_amd64.whl.
File metadata
- Download URL: syntopic_aec-0.1.0-cp39-abi3-win_amd64.whl
- Upload date:
- Size: 418.3 kB
- Tags: CPython 3.9+, Windows x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9f5d00328b54196ed5b4b48b164283684fadb225defdc9b245f8512632a1659a
|
|
| MD5 |
ccaeabc8ddaef19962a26e4b95fc333c
|
|
| BLAKE2b-256 |
6cc9c6ce2333d07a7f70967717447b0ed91db683c163ee2019e3dae06b88e51a
|
Provenance
The following attestation bundles were made for syntopic_aec-0.1.0-cp39-abi3-win_amd64.whl:
Publisher:
release.yml on moaminmo90/Syntopic
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
syntopic_aec-0.1.0-cp39-abi3-win_amd64.whl -
Subject digest:
9f5d00328b54196ed5b4b48b164283684fadb225defdc9b245f8512632a1659a - Sigstore transparency entry: 2106272512
- Sigstore integration time:
-
Permalink:
moaminmo90/Syntopic@1b92f40b004d33180cc795562b2c2173eb684319 -
Branch / Tag:
refs/tags/v0.1.0-alpha - Owner: https://github.com/moaminmo90
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1b92f40b004d33180cc795562b2c2173eb684319 -
Trigger Event:
push
-
Statement type:
File details
Details for the file syntopic_aec-0.1.0-cp39-abi3-manylinux_2_35_x86_64.whl.
File metadata
- Download URL: syntopic_aec-0.1.0-cp39-abi3-manylinux_2_35_x86_64.whl
- Upload date:
- Size: 611.3 kB
- Tags: CPython 3.9+, manylinux: glibc 2.35+ x86-64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6f243936162332b18fb1fc5e65a2782d17783b42f0d0ef58c651d63cab9c2d9c
|
|
| MD5 |
9e636e28efeb4aa5d967667339f313ae
|
|
| BLAKE2b-256 |
b88a58fbb16b9215584cabf0a111adb17c5e4907f0f57e0f735e6960fea4a4c9
|
Provenance
The following attestation bundles were made for syntopic_aec-0.1.0-cp39-abi3-manylinux_2_35_x86_64.whl:
Publisher:
release.yml on moaminmo90/Syntopic
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
syntopic_aec-0.1.0-cp39-abi3-manylinux_2_35_x86_64.whl -
Subject digest:
6f243936162332b18fb1fc5e65a2782d17783b42f0d0ef58c651d63cab9c2d9c - Sigstore transparency entry: 2106272253
- Sigstore integration time:
-
Permalink:
moaminmo90/Syntopic@1b92f40b004d33180cc795562b2c2173eb684319 -
Branch / Tag:
refs/tags/v0.1.0-alpha - Owner: https://github.com/moaminmo90
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1b92f40b004d33180cc795562b2c2173eb684319 -
Trigger Event:
push
-
Statement type:
File details
Details for the file syntopic_aec-0.1.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl.
File metadata
- Download URL: syntopic_aec-0.1.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
- Upload date:
- Size: 1.1 MB
- Tags: CPython 3.9+, macOS 10.12+ universal2 (ARM64, x86-64), macOS 10.12+ x86-64, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
52aabc8dfe4574129f57f553b995aa953347dbf32a72d918aa674fd9cafd342b
|
|
| MD5 |
bfca038678bd9ff51a785d7808634fb8
|
|
| BLAKE2b-256 |
277ca7df2b99d8cd93aa15cf42f3827cd92efed9586e3d754f58f54d663193c8
|
Provenance
The following attestation bundles were made for syntopic_aec-0.1.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl:
Publisher:
release.yml on moaminmo90/Syntopic
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
syntopic_aec-0.1.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl -
Subject digest:
52aabc8dfe4574129f57f553b995aa953347dbf32a72d918aa674fd9cafd342b - Sigstore transparency entry: 2106272862
- Sigstore integration time:
-
Permalink:
moaminmo90/Syntopic@1b92f40b004d33180cc795562b2c2173eb684319 -
Branch / Tag:
refs/tags/v0.1.0-alpha - Owner: https://github.com/moaminmo90
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
release.yml@1b92f40b004d33180cc795562b2c2173eb684319 -
Trigger Event:
push
-
Statement type: