Skip to main content

No project description provided

Project description

Syntopic 🌐

Continuous Integration PyPI version Rust Edition License: MIT

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

GitHub LinkedIn


⚖️ License

This project is licensed under the MIT License. See the LICENSE file for details.

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.

syntopic_aec-0.1.0-cp39-abi3-win_amd64.whl (418.3 kB view details)

Uploaded CPython 3.9+Windows x86-64

syntopic_aec-0.1.0-cp39-abi3-manylinux_2_35_x86_64.whl (611.3 kB view details)

Uploaded CPython 3.9+manylinux: glibc 2.35+ x86-64

syntopic_aec-0.1.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl (1.1 MB view details)

Uploaded CPython 3.9+macOS 10.12+ universal2 (ARM64, x86-64)macOS 10.12+ x86-64macOS 11.0+ ARM64

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

Hashes for syntopic_aec-0.1.0-cp39-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 9f5d00328b54196ed5b4b48b164283684fadb225defdc9b245f8512632a1659a
MD5 ccaeabc8ddaef19962a26e4b95fc333c
BLAKE2b-256 6cc9c6ce2333d07a7f70967717447b0ed91db683c163ee2019e3dae06b88e51a

See more details on using hashes here.

Provenance

The following attestation bundles were made for syntopic_aec-0.1.0-cp39-abi3-win_amd64.whl:

Publisher: release.yml on moaminmo90/Syntopic

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file syntopic_aec-0.1.0-cp39-abi3-manylinux_2_35_x86_64.whl.

File metadata

File hashes

Hashes for syntopic_aec-0.1.0-cp39-abi3-manylinux_2_35_x86_64.whl
Algorithm Hash digest
SHA256 6f243936162332b18fb1fc5e65a2782d17783b42f0d0ef58c651d63cab9c2d9c
MD5 9e636e28efeb4aa5d967667339f313ae
BLAKE2b-256 b88a58fbb16b9215584cabf0a111adb17c5e4907f0f57e0f735e6960fea4a4c9

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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

File hashes

Hashes for syntopic_aec-0.1.0-cp39-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl
Algorithm Hash digest
SHA256 52aabc8dfe4574129f57f553b995aa953347dbf32a72d918aa674fd9cafd342b
MD5 bfca038678bd9ff51a785d7808634fb8
BLAKE2b-256 277ca7df2b99d8cd93aa15cf42f3827cd92efed9586e3d754f58f54d663193c8

See more details on using hashes here.

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

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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