From 91ac35004db88ac463a9e7162cbbe66e0a4e95ff Mon Sep 17 00:00:00 2001 From: Tom Gillespie Date: Wed, 15 Jan 2025 11:43:18 -0800 Subject: [PATCH] neurons orders work around broken runtime type checking in rdflib see https://github.com/RDFLib/rdflib/issues/3037 --- neurondm/neurondm/orders.py | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/neurondm/neurondm/orders.py b/neurondm/neurondm/orders.py index e0e063c6..d7ae4ef9 100644 --- a/neurondm/neurondm/orders.py +++ b/neurondm/neurondm/orders.py @@ -11,11 +11,13 @@ def nst_to_adj(l): second = [p for r in l[1:] if r for p in nst_to_adj(r)] return tuple(first + second) + def assoc(k, ass): for a, b in ass: if a == k: return a, b + def dvals(k, ass): pair = assoc(k, ass) mem = ass[ass.index(pair):] if pair in ass else False @@ -215,7 +217,9 @@ def from_rdf(g, linker, to_python=False): def getlist(g, bn0, to_python=False): def f(node, g): o = None - for o in g[node:rdf.first:]: + + #for o in g[node:rdf.first:]: + for o in g.objects(node, rdf.first): if isinstance(o, rdflib.BNode): # unfortunately we have to branch on the result type # or have to look ahead to see if the list continues @@ -234,15 +238,17 @@ def f(node, g): else: yield o - for o in g[node:rdf.rest:]: + #for o in g[node:rdf.rest:]: + for o in g.objects(node, rdf.rest): if o != rdf.nil: yield from getlist(g, o, to_python=to_python) if o is None and isinstance(node, rdflib.BNode): # [ :a :b ] case - for p, o in g[node:]: + #for p, o in g[node:]: + for p, o in g.predicate_objects(node): if to_python: yield rl((p.toPython() if isinstance(p, rdflib.Literal) else p), - (o.toPython() if isinstance(o, rdflib.Literal) else o),) + (o.toPython() if isinstance(o, rdflib.Literal) else o),) else: yield rl(p, o)