A Lightweight Hypergraph Database with hypergraph visualization.
Project description
Hypergraph-DB
A Lightweight, Fast, and Modern Hypergraph Database with Hypergraph Visualization.
Features • Quick Start • Installation • Documentation • Examples
🚀 About
Hypergraph-DB is a lightweight, flexible, and high-performance Python library for modeling and managing hypergraphs — advanced graph structures where edges (hyperedges) can connect any number of vertices. Unlike traditional graphs that only support pairwise relationships, hypergraphs naturally represent complex multi-way relationships found in real-world scenarios.
🎯 Why Hypergraphs?
Traditional graphs can only model pairwise relationships:
Alice ←→ Bob, Bob ←→ Charlie, Alice ←→ Charlie (3 separate edges)
Hypergraphs naturally model group relationships:
{Alice, Bob, Charlie} — working together on a project (1 hyperedge)
🌟 Perfect for
- 📚 Academic Collaborations: Research papers with multiple co-authors
- 👥 Social Networks: Group activities and multi-party interactions
- 🛒 E-commerce: Shopping baskets with multiple items
- 🧬 Bioinformatics: Protein interactions and genetic networks
- 🏗️ Knowledge Graphs: Complex entity relationships
✨ Features
| Feature | Description |
|---|---|
| 🚀 High Performance | Handle millions of vertices and edges efficiently |
| 🔗 Native Hypergraph Support | True multi-way relationships, not decomposed binary edges |
| 💾 Persistence | Save/load with pickle, JSON, or custom formats |
| 🎨 Interactive Visualization | Built-in web-based visualization with D3.js |
| 🔍 Rich Queries | Neighbor queries, degree calculations, community detection |
| 📊 Flexible Attributes | Rich metadata for both vertices and hyperedges |
| 🛠️ Developer Friendly | Modern Python with type hints, comprehensive docs |
| ⚡ Modern Tooling | Built with uv, tested, and well-documented |
📈 Performance
To demonstrate the performance of Hypergraph-DB, let’s consider an example:
- Suppose we want to construct a hypergraph with 1,000,000 vertices and 200,000 hyperedges.
- Using Hypergraph-DB, it takes approximately:
- 1.75 seconds to add 1,000,000 vertices.
- 1.82 seconds to add 200,000 hyperedges.
- Querying this hypergraph:
- Retrieving information for 400,000 vertices takes 0.51 seconds.
- Retrieving information for 400,000 hyperedges takes 2.52 seconds.
This example demonstrates the efficiency of Hypergraph-DB, even when working with large-scale hypergraphs. Below is a detailed table showing how the performance scales as the size of the hypergraph increases.
Detailed Performance Results
The following table shows the results of stress tests performed on Hypergraph-DB with varying scales. The tests measure the time taken to add vertices, add hyperedges, and query vertices and hyperedges.
| Number of Vertices | Number of Hyperedges | Add Vertices (s) | Add Edges (s) | Query Vertices (s/queries) | Query Edges (s/queries) | Total Time (s) |
|---|---|---|---|---|---|---|
| 5,000 | 1,000 | 0.01 | 0.01 | 0.00/2,000 | 0.01/2,000 | 0.02 |
| 10,000 | 2,000 | 0.01 | 0.01 | 0.00/4,000 | 0.02/4,000 | 0.05 |
| 25,000 | 5,000 | 0.03 | 0.04 | 0.01/10,000 | 0.05/10,000 | 0.13 |
| 50,000 | 10,000 | 0.06 | 0.07 | 0.02/20,000 | 0.12/20,000 | 0.26 |
| 100,000 | 20,000 | 0.12 | 0.17 | 0.04/40,000 | 0.24/40,000 | 0.58 |
| 250,000 | 50,000 | 0.35 | 0.40 | 0.11/100,000 | 0.61/100,000 | 1.47 |
| 500,000 | 100,000 | 0.85 | 1.07 | 0.22/200,000 | 1.20/200,000 | 3.34 |
| 1,000,000 | 200,000 | 1.75 | 1.82 | 0.51/400,000 | 2.52/400,000 | 6.60 |
Key Observations:
-
Scalability:
Hypergraph-DB scales efficiently with the number of vertices and hyperedges. The time to add vertices and hyperedges grows linearly with the size of the hypergraph. -
Query Performance:
Querying vertices and hyperedges remains fast, even for large-scale hypergraphs. For instance:- Querying 200,000 vertices takes only 0.22 seconds.
- Querying 200,000 hyperedges takes only 1.20 seconds.
-
Total Time:
The total time to construct and query a hypergraph with 1,000,000 vertices and 200,000 hyperedges is only 6.60 seconds, showcasing the overall efficiency of Hypergraph-DB.
This performance makes Hypergraph-DB a great choice for applications requiring fast and scalable hypergraph data management.
✨ Features
| 🏗️ Feature | 📖 Description |
|---|---|
| 🎯 Flexible Structure | Support for complex hypergraphs with vertices and multi-way connections |
| ⚡ High Performance | Linear scaling with optimized operations for large datasets |
| 🎨 Interactive Viz | Beautiful web-based visualization with real-time interaction |
| 💾 Persistent Storage | Efficient save/load with data integrity guarantees |
| 🔍 Smart Queries | Fast neighbor discovery and relationship exploration |
| 🛠️ Developer Friendly | Modern Python with type hints and comprehensive documentation |
Core Capabilities
- 🎯 Hypergraph Management: Full CRUD operations for vertices and hyperedges
- 🔗 Relationship Queries: Efficient neighbor and incident edge discovery
- 📊 Data Persistence: Reliable serialization with pickle support
- 🎨 Visual Exploration: Interactive web interface for graph visualization
- ⚙️ Extensible Design: Built on dataclasses for easy customization
🚀 Installation
Quick Start with uv (Recommended)
uv is the fastest Python package manager - 10-100x faster than pip!
# Install uv (one-time setup)
curl -LsSf https://astral.sh/uv/install.sh | sh # macOS/Linux
# or: powershell -c "irm https://astral.sh/uv/install.ps1 | iex" # Windows
# Install Hypergraph-DB
uv pip install hypergraph-db
Traditional Installation
pip install hypergraph-db
Development Setup
# Clone the repository
git clone https://github.com/iMoonLab/Hypergraph-DB.git
cd Hypergraph-DB
# Quick setup with uv
uv sync --extra dev
# Or with traditional tools
pip install -e ".[dev]"
Development Commands
Once you have the project set up, use these convenient commands:
| 🛠️ Command | Windows | Unix/Linux/macOS |
|---|---|---|
| Install dev deps | dev.bat install-dev |
make install-dev |
| Run tests | dev.bat test |
make test |
| Format code | dev.bat format |
make format |
| Build docs | dev.bat docs |
make docs |
🚀 Quick Start
Ready to build hypergraphs? Here's how to get started with Hypergraph-DB!
1. Create a Hypergraph
from hyperdb import HypergraphDB
# Initialize the hypergraph
hg = HypergraphDB()
# Add vertices
hg.add_v(1, {"name": "Alice", "age": 30, "city": "New York"})
hg.add_v(2, {"name": "Bob", "age": 24, "city": "Los Angeles"})
hg.add_v(3, {"name": "Charlie", "age": 28, "city": "Chicago"})
hg.add_v(4, {"name": "David", "age": 35, "city": "Miami"})
hg.add_v(5, {"name": "Eve", "age": 22, "city": "Seattle"})
hg.add_v(6, {"name": "Frank", "age": 29, "city": "Houston"})
hg.add_v(7, {"name": "Grace", "age": 31, "city": "Phoenix"})
hg.add_v(8, {"name": "Heidi", "age": 27, "city": "San Francisco"})
hg.add_v(9, {"name": "Ivan", "age": 23, "city": "Denver"})
hg.add_v(10, {"name": "Judy", "age": 26, "city": "Boston"})
# Add hyperedges
hg.add_e((1, 2, 3), {"type": "friendship", "duration": "5 years"})
hg.add_e((1, 4), {"type": "mentorship", "topic": "career advice"})
hg.add_e((2, 5, 6), {"type": "collaboration", "project": "AI Research"})
hg.add_e((4, 5, 7, 9), {"type": "team", "goal": "community service"})
hg.add_e((3, 8), {"type": "partnership", "status": "ongoing"})
hg.add_e((9, 10), {"type": "neighbors", "relationship": "friendly"})
hg.add_e((1, 2, 3, 7), {"type": "collaboration", "field": "music"})
hg.add_e((2, 6, 9), {"type": "classmates", "course": "Data Science"})
2. Query Vertices and Hyperedges
# Get all vertices and hyperedges
print(hg.all_v) # Output: {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
print(hg.all_e) # Output: {(4, 5, 7, 9), (9, 10), (3, 8), (1, 2, 3), (2, 6, 9), (1, 4), (1, 2, 3, 7), (2, 5, 6)}
# Query a specific vertex
print(hg.v(1)) # Output: {'name': 'Alice', 'age': 30, 'city': 'New York'}
# Query a specific hyperedge
print(hg.e((1, 2, 3))) # Output: {'type': 'friendship', 'duration': '5 years'}
3. Update and Remove Vertices/Hyperedges
# Update a vertex
hg.update_v(1, {"name": "Smith"})
print(hg.v(1)) # Output: {'name': 'Smith', 'age': 30, 'city': 'New York'}
# Remove a vertex
hg.remove_v(3)
print(hg.all_v) # Output: {1, 2, 4, 5, 6, 7, 8, 9, 10}
print(hg.all_e) # Output: {(4, 5, 7, 9), (9, 10), (1, 2, 7), (1, 2), (2, 6, 9), (1, 4), (2, 5, 6)}
# Remove a hyperedge
hg.remove_e((1, 4))
print(hg.all_e) # Output: {(4, 5, 7, 9), (9, 10), (1, 2, 7), (1, 2), (2, 6, 9), (2, 5, 6)}
4. Calculate Degrees
# Get the degree of a vertex
print(hg.degree_v(1)) # Example Output: 2
# Get the degree of a hyperedge
print(hg.degree_e((2, 5, 6))) # Example Output: 3
5. Neighbor Queries
# Get neighbors of a vertex
print(hg.nbr_v(1)) # Example Output: {2, 7}
hg.add_e((1, 4, 6), {"relation": "team"})
print(hg.nbr_v(1)) # Example Output: {2, 4, 6, 7}
# Get incident hyperedges of a vertex
print(hg.nbr_e_of_v(1)) # Example Output: {(1, 2, 7), (1, 2), (1, 4, 6)}
6. Persistence (Save and Load)
# Save the hypergraph to a file
hg.save("my_hypergraph.hgdb")
# Load the hypergraph from a file
hg2 = HypergraphDB(storage_file="my_hypergraph.hgdb")
print(hg2.all_v) # Output: {1, 2, 4, 5, 6, 7, 8, 9, 10}
print(hg2.all_e) # Output: {(4, 5, 7, 9), (9, 10), (1, 2, 7), (1, 2), (2, 6, 9), (1, 4, 6), (2, 5, 6)}
7. 🎨 Interactive Visualization
Explore your hypergraphs visually with the built-in web-based visualization tool:
# Launch interactive visualization
hg.draw()
✨ Visualization Features:
- 🌐 Real-time Web Interface: Automatic browser launch with local server
- 🔍 Interactive Exploration: Navigate vertices and hyperedges with ease
- 📊 Rich Information Display: View properties, degrees, and relationships
- 🎯 Smart Sorting: Vertices ordered by degree for quick insights
- 📱 Responsive Design: Works on desktop and mobile browsers
💡 Pro Tip: The visualization reflects your hypergraph's current state in real-time!
Interactive hypergraph visualization showing vertex relationships and properties
📄 License
This project is licensed under the Apache License 2.0 - see the LICENSE file for details.
🤝 Contributing
We welcome contributions! Please feel free to submit issues, feature requests, or pull requests.
💬 Contact & Support
Maintained by iMoon-Lab, Tsinghua University
📧 Contact: Yifan Feng
Made with ❤️ by Yifan Feng and Xizhe Yu
⭐ Star us on GitHub • 📖 Read the Docs • 🐛 Report Issues
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 hypergraph_db-0.2.0.tar.gz.
File metadata
- Download URL: hypergraph_db-0.2.0.tar.gz
- Upload date:
- Size: 201.2 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ba424b24016e8d05dad1f52ce1b7b7942de9f91843aa82776a3ab6eb0e1ed7d8
|
|
| MD5 |
980c30b11c54352fe0b32e3dc97380a9
|
|
| BLAKE2b-256 |
604dd612c0e02b68de1082f521e07090cbe24d75f8a58e4e22ce69ad0f3e11f5
|
File details
Details for the file hypergraph_db-0.2.0-py3-none-any.whl.
File metadata
- Download URL: hypergraph_db-0.2.0-py3-none-any.whl
- Upload date:
- Size: 23.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.8.5
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1585fa0c45911b6f9a815465cdc5a58f3cec5f4fef0eef28ecd7a318dfa58658
|
|
| MD5 |
d1d9f270c0bfc96713b767eea9dfb3c4
|
|
| BLAKE2b-256 |
662f9527b507fc2f705e33e55d38c7fce458dcf37fa65a90dc691e46d3a6fad3
|