Skip to main content

ContextGraph

PyPI version Python Support License: MIT Tests

A powerful graph database with Cypher query support and advanced visualization capabilities, built on igraph.

🚀 Features

  • 🔍 Cypher Query Language: Full support for Cypher queries including MATCH, CREATE, WHERE, RETURN, and more
  • 📊 Advanced Visualization: Multiple backends (matplotlib, plotly, graphviz) with interactive capabilities
  • 🔗 Variable-Length Paths: Support for path queries with depth limits (*1..3, *2, *)
  • 🔤 String Operations: Comprehensive string search and manipulation functions
  • 💾 Data Import/Export: High-performance CSV import and multiple serialization formats
  • ⚡ Transactions: ACID-compliant transaction support with rollback capabilities
  • 🎯 High Performance: Built on igraph for efficient graph operations
  • 🐍 Pythonic API: Clean, intuitive Python interface

📦 Installation

Basic Installation

pip install contextgraph

With Visualization Support

pip install contextgraph[visualization]

With All Optional Dependencies

pip install contextgraph[all]

Development Installation

git clone https://github.com/yourusername/contextgraph.git
cd contextgraph
pip install -e .[dev]

🏃‍♂️ Quick Start

from contextgraph import GraphDB

# Create a new graph database
db = GraphDB()

# Create nodes
alice_id = db.create_node(['Person'], {'name': 'Alice', 'age': 30})
bob_id = db.create_node(['Person'], {'name': 'Bob', 'age': 25})
company_id = db.create_node(['Company'], {'name': 'TechCorp'})

# Create relationships
db.create_relationship(alice_id, bob_id, 'KNOWS', {'since': 2020})
db.create_relationship(alice_id, company_id, 'WORKS_FOR')

# Query with Cypher
result = db.execute("""
    MATCH (p:Person)-[:KNOWS]->(friend:Person)
    WHERE p.age > 25
    RETURN p.name, friend.name, p.age
""")

for record in result:
    print(f"{record['p.name']} knows {record['friend.name']}")

# Visualize the graph
db.visualize(node_labels=True, node_color_property='age')

📚 Documentation

Core Operations

Creating Nodes and Relationships

# Create nodes with labels and properties
person_id = db.create_node(['Person', 'Employee'], {
    'name': 'Alice',
    'age': 30,
    'department': 'Engineering'
})

# Create relationships with properties
rel_id = db.create_relationship(
    source_id=alice_id,
    target_id=bob_id,
    relationship_type='MANAGES',
    properties={'since': '2023-01-01', 'level': 'senior'}
)

Cypher Queries

# Basic pattern matching
result = db.execute("""
    MATCH (manager:Person)-[:MANAGES]->(employee:Person)
    WHERE manager.department = 'Engineering'
    RETURN manager.name, employee.name
""")

# Variable-length paths
result = db.execute("""
    MATCH (start:Person)-[:KNOWS*1..3]->(end:Person)
    WHERE start.name = 'Alice'
    RETURN start.name, end.name
""")

# String operations
result = db.execute("""
    MATCH (p:Person)
    WHERE p.name CONTAINS 'Ali' AND p.email =~ '.*@company\\.com'
    RETURN UPPER(p.name) as name, LENGTH(p.name) as name_length
""")

Advanced Features

Transactions

# Using transactions for data consistency
with db.transaction():
    node1 = db.create_node(['Person'], {'name': 'Charlie'})
    node2 = db.create_node(['Person'], {'name': 'Diana'})
    db.create_relationship(node1, node2, 'FRIENDS')
    # Automatically committed on success, rolled back on exception

CSV Import

# High-performance CSV import
stats = db.import_nodes_from_csv(
    'people.csv',
    labels=['Person'],
    property_columns=['name', 'age', 'email']
)

stats = db.import_relationships_from_csv(
    'relationships.csv',
    relationship_type='KNOWS',
    source_column='person1_id',
    target_column='person2_id'
)

Visualization

# Basic visualization
db.visualize(
    node_labels=True,
    layout='spring',
    title='My Graph'
)

# Advanced styling
db.visualize(
    backend='plotly',  # Interactive visualization
    node_size_property='age',
    node_color_property='department',
    edge_width_property='strength',
    layout='circular'
)

# Query result visualization
from contextgraph import GraphVisualizer
viz = GraphVisualizer(db)
viz.plot_query_result("""
    MATCH (p:Person)-[:WORKS_FOR]->(c:Company)
    RETURN p, c
""")

🔧 Supported Cypher Features

Query Clauses

  • ✅ MATCH - Pattern matching
  • ✅ CREATE - Node and relationship creation
  • ✅ WHERE - Filtering conditions
  • ✅ RETURN - Result projection
  • ✅ ORDER BY - Result sorting
  • ✅ LIMIT - Result limiting
  • ✅ WITH - Query chaining

Pattern Matching

  • ✅ Node patterns: (n:Label {property: value})
  • ✅ Relationship patterns: -[:TYPE {property: value}]->
  • ✅ Variable-length paths: -[:TYPE*1..3]->
  • ✅ Optional patterns and complex matching

Functions and Operators

  • ✅ String functions: UPPER(), LOWER(), TRIM(), SUBSTRING(), etc.
  • ✅ String operators: CONTAINS, STARTS WITH, ENDS WITH, =~ (regex)
  • ✅ Aggregate functions: COUNT(), SUM(), AVG(), MIN(), MAX()
  • ✅ Comparison operators: =, <>, <, >, <=, >=

📊 Visualization Backends

Backend Type Features
matplotlib Static Publication-quality plots, customizable styling
plotly Interactive Web-ready, hover details, zoom/pan
graphviz Vector High-quality layouts, perfect for documentation

🔄 Data Import/Export

Supported Formats

  • CSV: High-performance bulk import
  • JSON: Human-readable serialization
  • Pickle: Fast binary serialization with full Python object support

Performance

  • CSV Import: 10,000+ nodes/relationships per second
  • Query Performance: Optimized for complex graph traversals
  • Memory Efficient: Streaming operations for large datasets

🧪 Testing

Run the test suite:

# Run all tests
pytest

# Run with coverage
pytest --cov=igraph_cypher_db

# Run specific test categories
pytest -m "not slow"  # Skip slow tests
pytest tests/test_cypher.py  # Specific test file

🤝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

Development Setup

git clone https://github.com/yourusername/contextgraph.git
cd contextgraph
pip install -e .[dev]
pre-commit install

Code Quality

# Format code
black igraph_cypher_db tests

# Lint code
flake8 igraph_cypher_db tests

# Type checking
mypy igraph_cypher_db

📈 Performance Benchmarks

Operation Performance
Node Creation 50,000+ nodes/sec
Relationship Creation 25,000+ relationships/sec
CSV Import 10,000+ records/sec
Simple Queries 1,000+ queries/sec
Complex Path Queries 100+ queries/sec

🗺️ Roadmap

  • Query Optimization: Advanced query planning and optimization
  • Distributed Queries: Support for distributed graph operations
  • Graph Algorithms: Built-in graph analysis algorithms
  • Schema Validation: Optional schema enforcement
  • REST API: HTTP interface for remote access
  • Streaming: Real-time graph updates and queries

📄 License

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

🙏 Acknowledgments

📞 Support


Made with ❤️ for the graph database community

Metadata

Release files for contextgraph 0.3.1

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for contextgraph 0.3.1
File Size Uploaded Provenance Actions
contextgraph-0.3.1.tar.gz 97.4 kB Without provenance Details for contextgraph-0.3.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for contextgraph 0.3.1
File Interpreter ABI Platform Actions
contextgraph-0.3.1-py3-none-any.whl Python 3 none any Details for contextgraph-0.3.1-py3-none-any.whl

Total release size: 135.4 kB

Release files / contextgraph-0.3.1.tar.gz

Download URL contextgraph-0.3.1.tar.gz
Size 97.4 kB
Tags Source
SHA-256 checksum
How to use checksums
ad2644b8bea1cc3a7111811c69358396dc7d6503d472cc76715e8bb88dd14f36
BLAKE2b-256 checksum
How to use checksums
9bd6cc7faf7c4354392a63872c93b2c2b807e92046d62025a4ebcf99fa5eae6d
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Release files / contextgraph-0.3.1-py3-none-any.whl

Download URL contextgraph-0.3.1-py3-none-any.whl
Size 38.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
70aa7d29edb43c3e356afbabb37a2eb78b206a38cd8e596290e140d229089e27
BLAKE2b-256 checksum
How to use checksums
c384595499d4b22e3d6c899ceb816a6622179a924f1c39d4145450ba01b78b38
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.9.6

Security for contextgraph 0.3.1

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page