Skip to content

Commit 5490672

Browse files
authored
Reconcile rules for predicate_id (#302)
* Reconcile rules for `predicate_id` * added new test file for reconclie * Predicate_list for hierarchies and implementation * refactgor and reformat * typo fix * fixes #304 * corrected variable return * switched to using constants * changed tests * retained earlier test and added for basic7.tsv * update test_merge * reconcile=False by default
1 parent 5046de4 commit 5490672

File tree

8 files changed

+224
-41
lines changed

8 files changed

+224
-41
lines changed

sssom/cli.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -168,7 +168,7 @@ def convert(input: str, output: TextIO, output_format: str):
168168
)
169169
@click.option(
170170
"-E",
171-
"--embedded-mode",
171+
"--embedded-mode / --non-embedded-mode",
172172
default=True,
173173
is_flag=True,
174174
help="If False, the resultant SSSOM file will be saved\
@@ -484,7 +484,7 @@ def correlations(input: str, output: TextIO, transpose: bool, fields: Tuple):
484484
help="Boolean indicating the need for reconciliation of the SSSOM tsv file.",
485485
)
486486
@output_option
487-
def merge(inputs: str, output: TextIO, reconcile: bool = True):
487+
def merge(inputs: str, output: TextIO, reconcile: bool = False):
488488
"""Merge multiple MappingSetDataFrames into one .
489489
490490
if reconcile=True, then dedupe(remove redundant lower confidence mappings) and

sssom/cliques.py

Lines changed: 19 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,17 @@
1111
# from .sssom_datamodel import Mapping
1212
from sssom_schema import Mapping
1313

14+
from sssom.constants import (
15+
OWL_DIFFERENT_FROM,
16+
OWL_EQUIVALENT_CLASS,
17+
RDFS_SUBCLASS_OF,
18+
SKOS_BROAD_MATCH,
19+
SKOS_CLOSE_MATCH,
20+
SKOS_EXACT_MATCH,
21+
SKOS_NARROW_MATCH,
22+
SSSOM_SUPERCLASS_OF,
23+
)
24+
1425
from .parsers import to_mapping_set_document
1526
from .sssom_document import MappingSetDocument
1627
from .util import MappingSetDataFrame
@@ -31,24 +42,22 @@ def to_digraph(msdf: MappingSetDataFrame) -> nx.DiGraph:
3142

3243
pi = None
3344

34-
if p == "owl:equivalentClass":
45+
if p == OWL_EQUIVALENT_CLASS:
3546
pi = 2
36-
elif p == "skos:exactMatch":
47+
elif p == SKOS_EXACT_MATCH:
3748
pi = 2
38-
elif p == "skos:closeMatch":
49+
elif p == SKOS_CLOSE_MATCH:
3950
# TODO: consider distributing
4051
pi = 2
41-
elif p == "owl:subClassOf":
52+
elif p == RDFS_SUBCLASS_OF:
4253
pi = 0
43-
elif p == "skos:broadMatch":
54+
elif p == SKOS_BROAD_MATCH:
4455
pi = 0
45-
elif p == "inverseOf(owl:subClassOf)":
56+
elif p == SSSOM_SUPERCLASS_OF:
4657
pi = 1
47-
elif p == "skos:narrowMatch":
58+
elif p == SKOS_NARROW_MATCH:
4859
pi = 1
49-
elif p == "owl:differentFrom":
50-
pi = 3
51-
elif p == "dbpedia-owl:different":
60+
elif p == OWL_DIFFERENT_FROM:
5261
pi = 3
5362

5463
if pi == 0:

sssom/constants.py

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -118,6 +118,38 @@
118118
SUBJECT_SOURCE_ID = "subject_source_id"
119119
OBJECT_SOURCE_ID = "object_source_id"
120120

121+
# PREDICATES
122+
OWL_EQUIVALENT_CLASS = "owl:equivalentClass"
123+
OWL_EQUIVALENT_PROPERTY = "owl:equivalentProperty"
124+
OWL_DIFFERENT_FROM = "owl:differentFrom"
125+
RDFS_SUBCLASS_OF = "rdfs:subClassOf"
126+
RDFS_SUBPROPERTY_OF = "rdfs:subPropertyOf"
127+
OWL_SAME_AS = "owl:sameAs"
128+
SKOS_EXACT_MATCH = "skos:exactMatch"
129+
SKOS_CLOSE_MATCH = "skos:closeMatch"
130+
SKOS_BROAD_MATCH = "skos:broadMatch"
131+
SKOS_NARROW_MATCH = "skos:narrowMatch"
132+
OBO_HAS_DB_XREF = "oboInOwl:hasDbXref"
133+
SKOS_RELATED_MATCH = "skos:relatedMatch"
134+
RDF_SEE_ALSO = "rdfs:seeAlso"
135+
SSSOM_SUPERCLASS_OF = "inverseOf(owl:subClassOf)"
136+
137+
PREDICATE_LIST = [
138+
OWL_EQUIVALENT_CLASS,
139+
OWL_EQUIVALENT_PROPERTY,
140+
RDFS_SUBCLASS_OF,
141+
SSSOM_SUPERCLASS_OF,
142+
RDFS_SUBPROPERTY_OF,
143+
OWL_SAME_AS,
144+
SKOS_EXACT_MATCH,
145+
SKOS_CLOSE_MATCH,
146+
SKOS_BROAD_MATCH,
147+
SKOS_NARROW_MATCH,
148+
OBO_HAS_DB_XREF,
149+
SKOS_RELATED_MATCH,
150+
RDF_SEE_ALSO,
151+
]
152+
121153

122154
class SEMAPV(Enum):
123155
"""SEMAPV Enum containing different mapping_justification."""

sssom/util.py

Lines changed: 97 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -50,13 +50,24 @@
5050
OBJECT_ID,
5151
OBJECT_LABEL,
5252
OBJECT_SOURCE,
53+
OBO_HAS_DB_XREF,
54+
OWL_DIFFERENT_FROM,
55+
OWL_EQUIVALENT_CLASS,
5356
PREDICATE_ID,
57+
PREDICATE_LIST,
5458
PREDICATE_MODIFIER,
5559
PREDICATE_MODIFIER_NOT,
5660
PREFIX_MAP_MODES,
61+
RDFS_SUBCLASS_OF,
5762
SCHEMA_DICT,
5863
SCHEMA_YAML,
5964
SEMAPV,
65+
SKOS_BROAD_MATCH,
66+
SKOS_CLOSE_MATCH,
67+
SKOS_EXACT_MATCH,
68+
SKOS_NARROW_MATCH,
69+
SKOS_RELATED_MATCH,
70+
SSSOM_SUPERCLASS_OF,
6071
SUBJECT_CATEGORY,
6172
SUBJECT_ID,
6273
SUBJECT_LABEL,
@@ -289,13 +300,83 @@ def filter_redundant_rows(
289300
# will be removed from pandas in a future version.
290301
# Use pandas.concat instead.
291302
# return_df = df.append(nan_df).drop_duplicates()
292-
return_df = pd.concat([df, nan_df]).drop_duplicates()
303+
confidence_reconciled_df = pd.concat([df, nan_df]).drop_duplicates()
304+
305+
# Reconciling dataframe rows based on the predicates with equal confidence.
306+
if PREDICATE_MODIFIER in confidence_reconciled_df.columns:
307+
tmp_df = confidence_reconciled_df[
308+
[SUBJECT_ID, OBJECT_ID, PREDICATE_ID, CONFIDENCE, PREDICATE_MODIFIER]
309+
]
310+
tmp_df = tmp_df[tmp_df[PREDICATE_MODIFIER] != PREDICATE_MODIFIER_NOT].drop(
311+
PREDICATE_MODIFIER, axis=1
312+
)
313+
else:
314+
tmp_df = confidence_reconciled_df[
315+
[SUBJECT_ID, OBJECT_ID, PREDICATE_ID, CONFIDENCE]
316+
]
317+
tmp_df_grp = tmp_df.groupby(
318+
[SUBJECT_ID, OBJECT_ID, CONFIDENCE], as_index=False
319+
).count()
320+
tmp_df_grp = tmp_df_grp[tmp_df_grp[PREDICATE_ID] > 1].drop(PREDICATE_ID, axis=1)
321+
non_predicate_reconciled_df = (
322+
confidence_reconciled_df.merge(
323+
tmp_df_grp, on=list(tmp_df_grp.columns), how="left", indicator=True
324+
)
325+
.query('_merge == "left_only"')
326+
.drop(columns="_merge")
327+
)
328+
329+
multiple_predicate_df = (
330+
confidence_reconciled_df.merge(
331+
tmp_df_grp, on=list(tmp_df_grp.columns), how="right", indicator=True
332+
)
333+
.query('_merge == "both"')
334+
.drop(columns="_merge")
335+
)
336+
337+
return_df = non_predicate_reconciled_df
338+
for _, row in tmp_df_grp.iterrows():
339+
logic_df = multiple_predicate_df[list(tmp_df_grp.columns)] == row
340+
concerned_row_index = (
341+
logic_df[logic_df[list(tmp_df_grp.columns)]].dropna().index
342+
)
343+
concerned_df = multiple_predicate_df.iloc[concerned_row_index]
344+
# Go down the hierarchical list of PREDICATE_LIST and grab the first match
345+
return_df = pd.concat(
346+
[get_row_based_on_hierarchy(concerned_df), return_df], axis=0
347+
).drop_duplicates()
293348

294349
if return_df[CONFIDENCE].isnull().all():
295350
return_df = return_df.drop(columns=[CONFIDENCE], axis=1)
296351
return return_df
297352

298353

354+
def get_row_based_on_hierarchy(df: pd.DataFrame):
355+
"""Get row based on hierarchy of predicates.
356+
357+
The hierarchy is as follows:
358+
# owl:equivalentClass
359+
# owl:equivalentProperty
360+
# rdfs:subClassOf
361+
# rdfs:subPropertyOf
362+
# owl:sameAs
363+
# skos:exactMatch
364+
# skos:closeMatch
365+
# skos:broadMatch
366+
# skos:narrowMatch
367+
# oboInOwl:hasDbXref
368+
# skos:relatedMatch
369+
# rdfs:seeAlso
370+
371+
:param df: Dataframe containing multiple predicates for same subject and object.
372+
:return: Dataframe with a single row which ranks higher in the hierarchy.
373+
"""
374+
for pred in PREDICATE_LIST:
375+
hierarchical_df = df[df[PREDICATE_ID] == pred]
376+
if not hierarchical_df.empty:
377+
return hierarchical_df
378+
379+
299380
def assign_default_confidence(
300381
df: pd.DataFrame,
301382
) -> Tuple[pd.DataFrame, pd.DataFrame]:
@@ -430,29 +511,27 @@ def dataframe_to_ptable(df: pd.DataFrame, *, inverse_factor: float = None):
430511
residual_confidence = (1 - (confidence + inverse_confidence)) / 2.0
431512

432513
predicate = row[PREDICATE_ID]
433-
if predicate == "owl:equivalentClass":
514+
if predicate == OWL_EQUIVALENT_CLASS:
434515
predicate_type = PREDICATE_EQUIVALENT
435-
elif predicate == "skos:exactMatch":
516+
elif predicate == SKOS_EXACT_MATCH:
436517
predicate_type = PREDICATE_EQUIVALENT
437-
elif predicate == "skos:closeMatch":
518+
elif predicate == SKOS_CLOSE_MATCH:
438519
# TODO: consider distributing
439520
predicate_type = PREDICATE_EQUIVALENT
440-
elif predicate == "owl:subClassOf":
521+
elif predicate == RDFS_SUBCLASS_OF:
441522
predicate_type = PREDICATE_SUBCLASS
442-
elif predicate == "skos:broadMatch":
523+
elif predicate == SKOS_BROAD_MATCH:
443524
predicate_type = PREDICATE_SUBCLASS
444-
elif predicate == "inverseOf(owl:subClassOf)":
525+
elif predicate == SSSOM_SUPERCLASS_OF:
445526
predicate_type = PREDICATE_SUPERCLASS
446-
elif predicate == "skos:narrowMatch":
527+
elif predicate == SKOS_NARROW_MATCH:
447528
predicate_type = PREDICATE_SUPERCLASS
448-
elif predicate == "owl:differentFrom":
449-
predicate_type = PREDICATE_SIBLING
450-
elif predicate == "dbpedia-owl:different":
529+
elif predicate == OWL_DIFFERENT_FROM:
451530
predicate_type = PREDICATE_SIBLING
452531
# * Added by H2 ############################
453-
elif predicate == "oboInOwl:hasDbXref":
532+
elif predicate == OBO_HAS_DB_XREF:
454533
predicate_type = PREDICATE_HAS_DBXREF
455-
elif predicate == "skos:relatedMatch":
534+
elif predicate == SKOS_RELATED_MATCH:
456535
predicate_type = PREDICATE_RELATED_MATCH
457536
# * ########################################
458537
else:
@@ -538,7 +617,7 @@ def sha256sum(path: str) -> str:
538617

539618
def merge_msdf(
540619
*msdfs: MappingSetDataFrame,
541-
reconcile: bool = True,
620+
reconcile: bool = False,
542621
) -> MappingSetDataFrame:
543622
"""Merge multiple MappingSetDataFrames into one.
544623
@@ -573,7 +652,10 @@ def merge_msdf(
573652
merged_msdf.df = df_merged
574653
if reconcile:
575654
merged_msdf.df = filter_redundant_rows(merged_msdf.df)
576-
if PREDICATE_MODIFIER in merged_msdf.df.columns:
655+
if (
656+
PREDICATE_MODIFIER in merged_msdf.df.columns
657+
and PREDICATE_MODIFIER_NOT in merged_msdf.df[PREDICATE_MODIFIER]
658+
):
577659
merged_msdf.df = deal_with_negation(merged_msdf.df) # deals with negation
578660

579661
# TODO: Add default values for license and mapping_set_id.

tests/data/basic.tsv

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -154,7 +154,7 @@ z:region REGION owl:equivalentClass y:region regions semapv:ManualMappingCurati
154154
z:tissue TISSUE owl:equivalentClass x:tissue tissue semapv:ManualMappingCuration z:example x:example rdf_matcher 0.840714406 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity tissu .
155155
z:tissue TISSUE owl:equivalentClass x:tissue tissue semapv:LexicalMatching z:example x:example rdf_matcher 0.881856236 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity tissue .
156156
z:tissue TISSUE owl:equivalentClass y:tissue tissues semapv:ManualMappingCuration z:example y:example rdf_matcher 0.840714406 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity tissu .
157-
a:something XXXXX owl:subClassOf b:something xxxxxx semapv:LexicalMatching a:example b:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
157+
a:something XXXXX rdfs:subClassOf b:something xxxxxx semapv:LexicalMatching a:example b:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
158158
c:something YYYYY owl:equivalentClass d:something yyyyyy semapv:LexicalMatching c:example d:example rdf_matcher 0.81 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
159159
d:something YYYYY owl:equivalentClass Not a:something yyyyyy semapv:LexicalMatching d:example a:example rdf_matcher 0.82 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
160160
a:something XYXYX owl:equivalentClass c:something xyxyxy semapv:LexicalMatching a:example c:example rdf_matcher 0.83 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data

tests/data/basic7.tsv

Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
#license: "https://creativecommons.org/publicdomain/zero/1.0/"
2+
#mapping_set_id: https://w3id.org/sssom/mapping/tests/data/basic3.tsv
3+
#mapping_tool: "https://github.com/cmungall/rdf_matcher"
4+
#creator_id:
5+
# - "orcid:1234"
6+
#mapping_date: "2020-05-30"
7+
#curie_map:
8+
# a: "http://example.org/a/"
9+
# b: "http://example.org/b/"
10+
# c: "http://example.org/c/"
11+
# d: "http://example.org/d/"
12+
# rdfs: "http://www.w3.org/2000/01/rdf-schema#"
13+
# owl: "http://www.w3.org/2002/07/owl#"
14+
# orcid: "https://orcid.org/my-orcid?orcid="
15+
# semapv: "https://w3id.org/semapv/"
16+
# skos: "http://www.w3.org/2004/02/skos/core#"
17+
subject_id subject_label predicate_id predicate_modifier object_id object_label mapping_justification subject_source object_source mapping_tool confidence subject_match_field object_match_field subject_category object_category match_string comment
18+
a:something YYYYY owl:equivalentClass b:something yyyyyy semapv:LexicalMatching c:example d:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
19+
a:something YYYYY owl:equivalentProperty b:something yyyyyy semapv:LexicalMatching c:example d:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
20+
b:something XXXXX owl:equivalentProperty c:something xxxxxx semapv:LexicalMatching b:example a:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
21+
b:something XXXXX rdfs:subClassOf c:something xxxxxx semapv:LexicalMatching b:example a:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
22+
c:something YXYXY rdfs:subClassOf d:something yxyxyx semapv:ManualMappingCuration c:example b:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
23+
c:something YXYXY rdfs:subPropertyOf d:something yxyxyx semapv:ManualMappingCuration c:example b:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
24+
d:something YYYYY rdfs:subPropertyOf c:something yyyyyy semapv:LexicalMatching d:example a:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
25+
d:something YYYYY owl:sameAs c:something yyyyyy semapv:LexicalMatching d:example a:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
26+
c:something YXYXY owl:sameAs b:something yxyxyx semapv:ManualMappingCuration c:example b:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
27+
c:something YXYXY skos:exactMatch b:something yxyxyx semapv:ManualMappingCuration c:example b:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
28+
b:something XXXXX skos:exactMatch a:something xxxxxx semapv:LexicalMatching b:example a:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
29+
b:something XXXXX skos:closeMatch a:something xxxxxx semapv:LexicalMatching b:example a:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
30+
a:something YYYYY skos:closeMatch c:something yyyyyy semapv:LexicalMatching c:example d:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
31+
a:something YYYYY skos:broadMatch c:something yyyyyy semapv:LexicalMatching c:example d:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
32+
b:something XXXXX skos:broadMatch d:something xxxxxx semapv:LexicalMatching b:example a:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
33+
b:something XXXXX skos:narrowMatch d:something xxxxxx semapv:LexicalMatching b:example a:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
34+
c:something YXYXY skos:narrowMatch a:something yxyxyx semapv:ManualMappingCuration c:example b:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
35+
c:something YXYXY oboInOwl:hasDbXref a:something yxyxyx semapv:ManualMappingCuration c:example b:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
36+
d:something YYYYY oboInOwl:hasDbXref b:something yyyyyy semapv:LexicalMatching d:example a:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
37+
d:something YYYYY skos:relatedMatch b:something yyyyyy semapv:LexicalMatching d:example a:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
38+
a:something YYYYY skos:relatedMatch d:something yyyyyy semapv:LexicalMatching c:example d:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
39+
a:something YYYYY rdfs:seeAlso d:something yyyyyy semapv:LexicalMatching c:example d:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
40+
d:something YYYYY rdfs:seeAlso a:something yyyyyy semapv:LexicalMatching d:example a:example rdf_matcher 0.82 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
41+
d:something YYYYY owl:equivalentClass Not a:something yyyyyy semapv:LexicalMatching d:example a:example rdf_matcher 0.82 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
42+
a:something XYXYX owl:equivalentClass c:something xyxyxy semapv:LexicalMatching a:example c:example rdf_matcher 0.83 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
43+
c:something YXYXY owl:equivalentClass b:something yxyxyx semapv:ManualMappingCuration c:example b:example rdf_matcher 0.845 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
44+
b:something XXXXX owl:equivalentClass a:something xxxxxx semapv:LexicalMatching b:example a:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
45+
c:something YYYYY owl:equivalentClass d:something yyyyyy semapv:LexicalMatching c:example d:example rdf_matcher 0.81 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
46+
c:something YXYXY owl:equivalentClass Not b:something yxyxyx semapv:ManualMappingCuration c:example b:example rdf_matcher 0.845 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
47+
d:something XYXYX owl:equivalentClass b:something xyxyxy semapv:LexicalMatching d:example b:example rdf_matcher 0.83 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
48+
a:something XXXXX owl:subClassOf b:something xxxxxx semapv:LexicalMatching a:example b:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
49+
d:something YYYYY owl:equivalentClass a:something yyyyyy semapv:ManualMappingCuration d:example a:example rdf_matcher 0.82 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data
50+
a:something XXXXX owl:subClassOf Not b:something xxxxxx semapv:LexicalMatching a:example b:example rdf_matcher 0.8 rdfs:label rdfs:label biolink:AnatomicalEntity biolink:AnatomicalEntity xxxxx mock data

tests/test_merge.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,8 @@ def setUp(self) -> None:
2121
def test_merge_multiple_inputs(self):
2222
"""Test merging of multiple msdfs."""
2323
merged_msdf = merge_msdf(*self.msdfs)
24-
self.assertEqual(123, len(merged_msdf.df))
24+
self.assertEqual(275, len(merged_msdf.df))
2525

2626
def test_merge_single_input(self):
2727
"""Test merging when a single msdf is provided."""
28-
self.assertEqual(93, len(merge_msdf(self.msdf).df))
28+
self.assertEqual(141, len(merge_msdf(self.msdf).df))

0 commit comments

Comments
 (0)