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.

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

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

graph_id_core-0.1.19-cp313-cp313-macosx_11_0_arm64.whl (261.9 kB view details)

Uploaded CPython 3.13macOS 11.0+ ARM64

graph_id_core-0.1.19-cp312-cp312-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl (306.8 kB view details)

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

graph_id_core-0.1.19-cp312-cp312-macosx_11_0_arm64.whl (261.9 kB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

graph_id_core-0.1.19-cp311-cp311-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl (307.5 kB view details)

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

graph_id_core-0.1.19-cp311-cp311-macosx_11_0_arm64.whl (262.4 kB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

File details

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

File metadata

  • Download URL: graph_id_core-0.1.19.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.19.tar.gz
Algorithm Hash digest
SHA256 b4f9c5a9486677bf22ae842e7f77eff06779b4c5b977483334eea687f9fccb72
MD5 ee46461e85afa90bbad14a170d714621
BLAKE2b-256 52dc0b81a321dbe6fe87bf68a7ee44ae8c77a9b886e75705ebb81dd6ee5242d4

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for graph_id_core-0.1.19-cp313-cp313-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 39fe2326e9f8686b67da233e0de8ab71deed10b68cdcccb579542e01969f2b70
MD5 d291399e47e62d924429fc015f44d463
BLAKE2b-256 46523b7a5ff18d797bc7227809849a3bc356e2d46357a4721f1fc06d0c5bcc7a

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.19-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.19-cp313-cp313-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.19-cp313-cp313-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 8f0c76d5a9651c714c78cad116e1d56bf8725a26958da771a74df3099c62e906
MD5 1883dc4fcaa9627dec64d2fe82665c89
BLAKE2b-256 519a3769849689e6d199ef94a522277d50b9852c3b52a9d90162ce46e45b41ea

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.19-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.19-cp312-cp312-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.19-cp312-cp312-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 ad76e28a68353120360c592997a6afacd844f61679ad9de12d6b719dbd3a1793
MD5 f0d970dad63d631a483f2834b480181c
BLAKE2b-256 ab8e46d28e4291c0d0937d83b94c4ed4e8ed1c08ad4b4c80a82b08f45928d4b9

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.19-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.19-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.19-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1acf6142372cd66e7832a06ac2ed4bd637de7dfa18342bc5141d37f069808103
MD5 7c3a3ea5d8f2be55a29e7e36bcb3a3a8
BLAKE2b-256 c15bc877dae0189322c99857c23b0473dea4950630ca1dd3d90db8ffac68c1d5

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.19-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.19-cp311-cp311-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.19-cp311-cp311-manylinux_2_28_x86_64.manylinux_2_27_x86_64.whl
Algorithm Hash digest
SHA256 f854398ac6d7c5d00f4ff90a18b81323401cec7f1f9c72efeec4d0da71a33b0b
MD5 e5582cd836a1d6cc501cfa1c6da8b01a
BLAKE2b-256 fa9eaaf13b4e4e654e3106ef51ba37e4c9f4ed616e62138ab85db784029590ba

See more details on using hashes here.

Provenance

The following attestation bundles were made for graph_id_core-0.1.19-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.19-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for graph_id_core-0.1.19-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 b593c71a499256d47966bcd4c19b7e6284456efeede590dcae200ef9299883dd
MD5 8f4e18f2baf5720d4b08e00c3505326f
BLAKE2b-256 372202e70f504ff3b5a4ed4f56976f37f17ba1f39fe90ca0157552276dd1182b

See more details on using hashes here.

Provenance

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