Skip to content

Commit 8ac7dc8

Browse files
committed
Use available (or newly created) constants to refer to SSSOM slots.
1 parent 23a8599 commit 8ac7dc8

File tree

3 files changed

+21
-15
lines changed

3 files changed

+21
-15
lines changed

src/sssom/constants.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,7 @@
8989
MAPPING_SET_SOURCE = "mapping_set_source"
9090
MAPPING_SOURCE = "mapping_source"
9191
MAPPING_CARDINALITY = "mapping_cardinality"
92+
CARDINALITY_SCOPE = "cardinality_scope"
9293
MAPPING_TOOL = "mapping_tool"
9394
MAPPING_TOOL_VERSION = "mapping_tool_version"
9495
MAPPING_DATE = "mapping_date"
@@ -109,6 +110,10 @@
109110
SUBJECT_SOURCE_ID = "subject_source_id"
110111
OBJECT_SOURCE_ID = "object_source_id"
111112

113+
# Special value for "unmapped" entities
114+
# see <https://mapping-commons.github.io/sssom/spec-model/#representing-unmapped-entities>
115+
NO_TERM_FOUND = "sssom:NoTermFound"
116+
112117
# PREDICATES
113118
OWL_EQUIVALENT_CLASS = "owl:equivalentClass"
114119
OWL_EQUIVALENT_PROPERTY = "owl:equivalentProperty"

src/sssom/util.py

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -23,12 +23,15 @@
2323
from sssom_schema import MappingSet, slots
2424

2525
from .constants import (
26+
CARDINALITY_SCOPE,
2627
COLUMN_INVERT_DICTIONARY,
2728
COMMENT,
2829
CONFIDENCE,
30+
MAPPING_CARDINALITY,
2931
MAPPING_JUSTIFICATION,
3032
MAPPING_SET_ID,
3133
MAPPING_SET_SOURCE,
34+
NO_TERM_FOUND,
3235
OBJECT_CATEGORY,
3336
OBJECT_ID,
3437
OBJECT_LABEL,
@@ -437,10 +440,7 @@ def _to_string(row, side):
437440
# We iterate over the records a first time to collect the different
438441
# objects mapped to each subject and vice versa
439442
for _, row in self.df.iterrows():
440-
if (
441-
row.get("subject_id") == "sssom:NoTermFound"
442-
or row.get("object_id") == "sssom:NoTermFound"
443-
):
443+
if row.get(SUBJECT_ID) == NO_TERM_FOUND or row.get(OBJECT_ID) == NO_TERM_FOUND:
444444
# Mappings to sssom:NoTermFound are ignored for cardinality computations
445445
continue
446446

@@ -456,12 +456,12 @@ def _to_string(row, side):
456456
cards = []
457457
for _, row in self.df.iterrows():
458458
# Special cases involving sssom:NoTermFound on either side
459-
if row.get("subject_id") == "sssom:NoTermFound":
460-
if row.get("object_id") == "sssom:NoTermFound":
459+
if row.get(SUBJECT_ID) == NO_TERM_FOUND:
460+
if row.get(OBJECT_ID) == NO_TERM_FOUND:
461461
cards.append("0:0")
462462
else:
463463
cards.append("0:1")
464-
elif row.get("object_id") == "sssom:NoTermFound":
464+
elif row.get(OBJECT_ID) == NO_TERM_FOUND:
465465
cards.append("1:0")
466466
else:
467467
# General case
@@ -480,12 +480,12 @@ def _to_string(row, side):
480480
cards.append("n:n")
481481

482482
# Add the computed values to the dataframe
483-
self.df["mapping_cardinality"] = cards
483+
self.df[MAPPING_CARDINALITY] = cards
484484
if len(scope) > 0:
485-
self.df["cardinality_scope"] = "|".join(scope)
485+
self.df[CARDINALITY_SCOPE] = "|".join(scope)
486486
else:
487487
# No scope, so remove any pre-existing "cardinality_scope" column
488-
self.df.drop(columns="cardinality_scope", inplace=True, errors="ignore")
488+
self.df.drop(columns=CARDINALITY_SCOPE, inplace=True, errors="ignore")
489489

490490

491491
def _standardize_curie_or_iri(curie_or_iri: str, *, converter: Converter) -> str:

tests/test_utils.py

Lines changed: 6 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313

1414
from sssom.constants import (
1515
CREATOR_ID,
16+
MAPPING_CARDINALITY,
1617
OBJECT_ID,
1718
OBJECT_LABEL,
1819
PREDICATE_ID,
@@ -602,10 +603,10 @@ def test_infer_cardinality(self) -> None:
602603
def _check_against_precomputed_values(filename):
603604
msdf = parse_sssom_table(f"{data_dir}/{filename}")
604605
# Expected values are already contained in the test file
605-
expected = list(msdf.df["mapping_cardinality"].values)
606-
msdf.df.drop(columns="mapping_cardinality", inplace=True)
606+
expected = list(msdf.df[MAPPING_CARDINALITY].values)
607+
msdf.df.drop(columns=MAPPING_CARDINALITY, inplace=True)
607608
msdf.infer_cardinality()
608-
self.assertEqual(expected, list(msdf.df["mapping_cardinality"].values))
609+
self.assertEqual(expected, list(msdf.df[MAPPING_CARDINALITY].values))
609610

610611
_check_against_precomputed_values("cardinality.sssom.tsv")
611612
_check_against_precomputed_values("cardinality-with-NoTermFound.sssom.tsv")
@@ -617,8 +618,8 @@ def test_infer_scoped_cardinality(self) -> None:
617618

618619
msdf.infer_cardinality(["predicate_id"])
619620
expected = ["1:n", "1:n", "1:n", "1:n", "1:1", "1:1"]
620-
self.assertEqual(expected, list(msdf.df["mapping_cardinality"].values))
621+
self.assertEqual(expected, list(msdf.df[MAPPING_CARDINALITY].values))
621622

622623
msdf.infer_cardinality(["object_source"])
623624
expected = ["1:1", "1:1", "1:1", "1:1", "1:1", "1:1"]
624-
self.assertEqual(expected, list(msdf.df["mapping_cardinality"].values))
625+
self.assertEqual(expected, list(msdf.df[MAPPING_CARDINALITY].values))

0 commit comments

Comments
 (0)