Skip to main content

No project description provided

Project description

codecov

Graph ID

Graph ID is a universal identifier system for atomistic structures including crystals and molecules. It generates unique, deterministic identifiers based on the topological and compositional properties of atomic structures, enabling efficient structure comparison, database indexing, and materials discovery.

Overview

Graph ID works by:

  1. Converting atomic structures into graph representations where atoms are nodes and bonds are edges
  2. Analyzing the local chemical environment around each atom using compositional sequences
  3. Computing a hash-based identifier that captures both topology and composition
  4. Supporting various modes including topology-only comparisons and Wyckoff position analysis

Features

  • Universal Structure Identification: Generate unique IDs for any crystal or molecular structure
  • Topological Analysis: Option to generate topology-only IDs for structure type comparison
  • Wyckoff Position Support: Include crystallographic symmetry information in ID generation
  • Distance Clustering: Advanced clustering-based analysis for complex structures
  • C++ Performance: High-performance C++ backend with Python bindings
  • Multiple Neighbor Detection: Support for various neighbor-finding algorithms (MinimumDistanceNN, CrystalNN, etc.)

Installation

From PyPI

pip install graph-id-core
pip install graph-id-db  # optional database component

From Source

git clone https://github.com/kmu/graph-id-core.git
cd graph-id-core
git submodule update --init --recursive
pip install -e .

Quick Start

Basic Usage

from pymatgen.core import Structure, Lattice
from graph_id import GraphIDMaker

# Create a structure (NaCl)
structure = Structure.from_spacegroup(
    "Fm-3m",
    Lattice.cubic(5.692),
    ["Na", "Cl"],
    [[0, 0, 0], [0.5, 0.5, 0.5]]
)

# Generate Graph ID
maker = GraphIDMaker()
graph_id = maker.get_id(structure)
print(graph_id)  # Output: NaCl-88c8e156db1b0fd9

Loading from Files

from pymatgen.core import Structure
from graph_id_cpp import GraphIDGenerator

# Load structure from file
structure = Structure.from_file("path/to/structure.cif")
generator = GraphIDGenerator()
graph_id = generator.get_id(structure)

Advanced Configuration

from graph_id_cpp import GraphIDGenerator
from pymatgen.analysis.local_env import CrystalNN

# Topology-only comparison (ignores composition)
topo_gen = GraphIDGenerator(topology_only=True)
topo_id = topo_gen.get_id(structure)

# Include Wyckoff positions
wyckoff_gen = GraphIDGenerator(wyckoff=True)
wyckoff_id = wyckoff_gen.get_id(structure)

# Use different neighbor detection
crystal_gen = GraphIDGenerator(nn=CrystalNN())  # Faster CrystalNN using C++ is also available
crystal_id = crystal_gen.get_id(structure)

Search Structures from Database

Use graph-id-db to search structures in the Materials Project using precomputed Graph ID stored in graph-id-db

# pip install graph-id-db
from graph_id_cpp import GraphIDGenerator

from pymatgen.core import Structure, Lattice

structure = Structure.from_spacegroup(
    "Fm-3m",
    Lattice.cubic(5.692),
    ["Na", "Cl"],
    [[0, 0, 0], [0.5, 0.5, 0.5]]
).get_primitive_structure()
gen = GraphIDGenerator()
graph_id = gen.get_id(structure)
print(f"Graph ID of NaCl is {graph_id}")

from graph_id_db import Finder

# Search for structures in graph-id-db using GraphID
finder = Finder()
finder.find(graph_id)

Examples

More comprehensive examples can be found in the tests/ and examples/ directories.

Applications

Graph ID is particularly useful for:

  • Materials Databases: Efficient indexing and deduplication of structure databases
  • High-throughput Screening: Rapid identification of unique structures in computational workflows
  • Polymorph Identification: Distinguishing between different polymorphs of the same composition

Web Service (experimental)

You can search materials using Graph ID at matfinder.net.

Developer's notes

Installation

  1. Clone the repository:
git clone https://github.com/kmu/graph-id-core.git
cd graph-id-core
  1. Initialize git submodules (required for the C++ build):
git submodule update --init --recursive
  1. Install the package and dependencies using Poetry:
poetry install
  1. Install pre-commit
pre-commit install

Note: The git submodules (library/pybind11, library/eigen, library/gtl) are required for building the C++ extension. Without them, the installation will fail during the CMake build step.

Testing

poetry run pytest

If you changed C++ codes, poetry install again to reflect the changes.

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

graph_id_core-0.1.12.1.tar.gz (5.6 MB view details)

Uploaded Source

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

graph_id_core-0.1.12.1-cp312-cp312-win_amd64.whl (261.6 kB view details)

Uploaded CPython 3.12Windows x86-64

graph_id_core-0.1.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (304.8 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

graph_id_core-0.1.12.1-cp312-cp312-macosx_15_0_arm64.whl (251.6 kB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

graph_id_core-0.1.12.1-cp311-cp311-win_amd64.whl (261.0 kB view details)

Uploaded CPython 3.11Windows x86-64

graph_id_core-0.1.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (306.4 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

graph_id_core-0.1.12.1-cp311-cp311-macosx_15_0_arm64.whl (252.2 kB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

File details

Details for the file graph_id_core-0.1.12.1.tar.gz.

File metadata

  • Download URL: graph_id_core-0.1.12.1.tar.gz
  • Upload date:
  • Size: 5.6 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for graph_id_core-0.1.12.1.tar.gz
Algorithm Hash digest
SHA256 da57401f99ea52251055c6597a4aabc5a2e35e9a5be4b5251d458033232d3dd0
MD5 358951f43114407bd4812c01dbe2cb08
BLAKE2b-256 c344241a96b234f4ac9d77fd41178daea391375dbadba1cf6f029b407b49f275

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.12.1.tar.gz:

Publisher: release.yml on kmu/graph-id-core

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

File details

Details for the file graph_id_core-0.1.12.1-cp312-cp312-win_amd64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.12.1-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 471a49446688ff08f7afd09051fa76c682ceb33c741ffbefcc7c20e2f8d728b7
MD5 9c7f6ab0d9b427e1f33a680cc5adf4b5
BLAKE2b-256 ff0b9ffaaf8c5e9f5fae89e4d4bb614b7173a48ed7675e25eb94089254cc7d62

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.12.1-cp312-cp312-win_amd64.whl:

Publisher: release.yml on kmu/graph-id-core

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

File details

Details for the file graph_id_core-0.1.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 e3f53f120d6c2319aac29969a96a051fc720e2f80bebace4fb9c6eb325f67aab
MD5 83f504b892f37933aed90f22a246367c
BLAKE2b-256 de9b76acc3accfff2be001b409018644facdd66c0aa45b0bbd29aa340130bdb2

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.12.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on kmu/graph-id-core

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

File details

Details for the file graph_id_core-0.1.12.1-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.12.1-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 8d97a615c669e50b5cf68a8f7b21ddd5f9641c84485093e9b7131ad8f7c3c58c
MD5 c5eaa53c4d51b8e9378858b4b539aaf9
BLAKE2b-256 73aa6e47aa081a5e47b3574c4a74a11a841f99a10745198627efa140ea05453d

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.12.1-cp312-cp312-macosx_15_0_arm64.whl:

Publisher: release.yml on kmu/graph-id-core

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

File details

Details for the file graph_id_core-0.1.12.1-cp311-cp311-win_amd64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.12.1-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 70d82e39454dbdc28e979737bd5255fff2e845c2fc60aa66790ae84d1eea86ed
MD5 d5776e4a487e930b2e93ee7e9a660a22
BLAKE2b-256 18aa5a76344dba95757aa6c40c679ecf04a7ebeebd1ee3a45b868eb30d0f7c43

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.12.1-cp311-cp311-win_amd64.whl:

Publisher: release.yml on kmu/graph-id-core

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

File details

Details for the file graph_id_core-0.1.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 f54497bc16fc7c7df4938ca763471eee67680f0d2506b2311e09de3193251bca
MD5 cf8116d00fd804b78401ccf3e7cc9b42
BLAKE2b-256 a59b62d7f214cad1f37ff8d7c8b6f21c648e6f4be34c1dc526b26ad43083e321

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.12.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl:

Publisher: release.yml on kmu/graph-id-core

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

File details

Details for the file graph_id_core-0.1.12.1-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.12.1-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 c50e4dc7f0ece7ec36c6624221d4ad255e04258b16867950a0109a2ee77ed76f
MD5 90c89ae472b264a41bc488d6dbe6f1dd
BLAKE2b-256 f33d1a292753d1ac081eabc93247bb974c0f50d850fc73296c4bf1d594110493

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.12.1-cp311-cp311-macosx_15_0_arm64.whl:

Publisher: release.yml on kmu/graph-id-core

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