invert

invert(mapping: MappingTypeVar, *, converter: Converter, justification_policy: InversionJustificationPolicy | None = None) MappingTypeVar[source]

Invert a mapping.

Parameters:
  • mapping – A semantic mapping record

  • converter – A converter function hashing the mapping to fill the “derives_from” field

  • justification_policy – The policy for how the original evidence is mutated during inversion. Defaults to InversionDerivationPolicy.retain, where the original justification is retained

Returns:

An inverted mapping. Mapping inversion clears the record field if present.

>>> from curies import NamableReference, Converter
>>> from curies.vocabulary import charlie, manual_mapping_curation, exact_match
>>> from sssom_pydantic import SemanticMapping, hash_triple_to_reference
>>> converter = Converter.from_prefix_map(
...     {
...         "CHEBI": "http://purl.obolibrary.org/obo/CHEBI_",
...         "mesh": "http://id.nlm.nih.gov/mesh/",
...         "skos": "http://www.w3.org/2004/02/skos/core#",
...         "semapv": "https://w3id.org/semapv/vocab/",
...     }
... )
>>> mapping = SemanticMapping(
...     subject=NamableReference(prefix="mesh", identifier="C000089", name="ammeline"),
...     predicate=exact_match,
...     object=NamableReference(prefix="CHEBI", identifier="28646", name="ammeline"),
...     justification=manual_mapping_curation,
...     authors=[charlie],
...     mapping_date="2026-04-21",
... )
>>> hash_triple_to_reference(mapping, converter)
Reference(prefix='mapping', identifier='36a1f9244ea7641a90987c82f33c25c0c13712ee8f48207b2a0825f8a4e4e26a')
>>> mapping_inv = invert(mapping, converter=converter)
>>> mapping_inv.subject
NamableReference(prefix='CHEBI', identifier='28646', name='ammeline')
>>> mapping_inv.object
NamableReference(prefix='mesh', identifier='C000089', name='ammeline')
>>> mapping_inv.derived_from
[Reference(prefix='mapping', identifier='36a1f9244ea7641a90987c82f33c25c0c13712ee8f48207b2a0825f8a4e4e26a')]