Source code for triplemodel.store.canonicalize

"""Canonicalize quads in memory via pyoxigraph.Dataset."""

from __future__ import annotations

from collections.abc import Iterable

from pyoxigraph import CanonicalizationAlgorithm, Dataset, Quad

_DEFAULT = CanonicalizationAlgorithm.UNSTABLE


[docs] def canonicalize_quads( quads: Iterable[Quad], *, algorithm: CanonicalizationAlgorithm = _DEFAULT, ) -> list[Quad]: """Return a canonical ordering of ``quads`` using :meth:`pyoxigraph.Dataset.canonicalize`. Use for diff snapshots of in-memory data. Blank-node labels from a persistent :class:`~pyoxigraph.Store` are not stable when graph shape changes. """ dataset = Dataset() for quad in quads: dataset.add(quad) dataset.canonicalize(algorithm) return list(dataset)