Skip to main content

No project description provided

Project description

PyPI version Python versions 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.

Citation

If you use Graph ID in your research, please cite:

Muraoka, K., Tanimoto, T., Munekata, T. & Nakayama, A. Universal graph-based identifiers of chemical structures for linking large material databases. Nature Communications 17, 5409 (2026). https://doi.org/10.1038/s41467-026-74536-5

@article{muraoka2026graphid,
  title   = {Universal graph-based identifiers of chemical structures for linking large material databases},
  author  = {Muraoka, Koki and Tanimoto, Taku and Munekata, Tsubasa and Nakayama, Akira},
  journal = {Nature Communications},
  volume  = {17},
  number  = {1},
  pages   = {5409},
  year    = {2026},
  doi     = {10.1038/s41467-026-74536-5}
}

Developer's notes

This repo is managed by poetry.

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 install
poetry run pytest

If you have made changes to the C++ code, run poetry run pip install -e --force-reinstall to apply the changes before running the tests.

Releasing

  • Bump version in pyproject.toml.
  • Create a new PR from main branch to release branch.

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.21.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.21-cp313-cp313-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl (306.9 kB view details)

Uploaded CPython 3.13manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

graph_id_core-0.1.21-cp313-cp313-macosx_11_0_arm64.whl (262.1 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

graph_id_core-0.1.21-cp312-cp312-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl (306.9 kB view details)

Uploaded CPython 3.12manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

graph_id_core-0.1.21-cp312-cp312-macosx_11_0_arm64.whl (262.1 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

graph_id_core-0.1.21-cp311-cp311-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl (307.6 kB view details)

Uploaded CPython 3.11manylinux: glibc 2.27+ x86-64manylinux: glibc 2.28+ x86-64

graph_id_core-0.1.21-cp311-cp311-macosx_11_0_arm64.whl (262.6 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

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

File hashes

Hashes for graph_id_core-0.1.21.tar.gz
Algorithm Hash digest
SHA256 e86e761329f6ce51c184c95b7a909088c9da7408f7f571fcbcb269cfb17ba196
MD5 3d5a429a89f1640e1e516a4ccc538d77
BLAKE2b-256 b1837e0084f8ff8b8aceaa3c78ecae0ca6d8d2473cff44cd64cf3376faacde3b

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.21.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.21-cp313-cp313-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.21-cp313-cp313-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 9c3e73f4629ad8dc6de9f8dd56b9f7b175fe91a9b695ecdbb0b4a11bafc09b06
MD5 35b9d540909fc2eef49106e94ae90952
BLAKE2b-256 0bd56959c8ea313dfd24f56df2992b8fe655b13f4f1b546efef2ee1aee351778

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.21-cp313-cp313-manylinux_2_28_x86_64.manylinux_2_27_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.21-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.21-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 7e607a8033f5c20aa3ab49be4689e0a2b928a3d4aa82fff3bf652030942ec65e
MD5 b614a806dad88c0b5d45f64c4b0b21c8
BLAKE2b-256 6af3d4b6c1c01de16b565deec9c283cf50854e3d3a9c5da9902f1e227ec71a09

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.21-cp313-cp313-macosx_11_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.21-cp312-cp312-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.21-cp312-cp312-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 50b8736b9bfe81796f575c41a7632e6a97fc4c1dca39886662845371a784f0b4
MD5 af9d5ff0347547ad125d9239b788c8c4
BLAKE2b-256 06385605788171701b71255bc2949859ff3fef37955a88bc208538d32523db03

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.21-cp312-cp312-manylinux_2_28_x86_64.manylinux_2_27_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.21-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.21-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 5c2ef0c0ebc10f09c64e53b4a25fc8a3cd4fc2da4e1eb49e83e7a1b20146f2a8
MD5 facd342c54403f794fca724e95b82ad6
BLAKE2b-256 6706d5ec0947107cb2c963a6c0a2a8e16754463fbcb60c2df5fe8dd3c97d6d40

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.21-cp312-cp312-macosx_11_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.21-cp311-cp311-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.21-cp311-cp311-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 e993313ee7e2a6873e99a77945cd54bf33063f56b4ada56693acb80b7a5b1759
MD5 d834f0abb0cdd50b07623e2c25230ec2
BLAKE2b-256 33723e49e437b63b77ab0e1f2a738799b76eb04b684a1d16786abc84fa774827

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.21-cp311-cp311-manylinux_2_28_x86_64.manylinux_2_27_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.21-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.21-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8abf49725e285d6f98054334a886f5e29f8bcdc067500cb8f9dd5f27beafffc5
MD5 9f675b0043cbdf392bca24c1292da974
BLAKE2b-256 b1102f9f5d4ebb536227e4d26badc87b3189f1ca52c375250d4bc99c3e3d8ce8

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.21-cp311-cp311-macosx_11_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