From cefb3d6c806b806d3ebf0672765bd365109b7355 Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Mon, 4 Mar 2024 20:14:39 -0800 Subject: [PATCH 1/2] optimize get_classes_by_slot to just iterate over slot named, not induce them --- linkml_runtime/utils/schemaview.py | 19 +++++++------------ 1 file changed, 7 insertions(+), 12 deletions(-) diff --git a/linkml_runtime/utils/schemaview.py b/linkml_runtime/utils/schemaview.py index 442ee53e..31ca39c2 100644 --- a/linkml_runtime/utils/schemaview.py +++ b/linkml_runtime/utils/schemaview.py @@ -1542,18 +1542,13 @@ def get_classes_by_slot( :return: list of slots, either direct, or both direct and induced """ classes_set = set() # use set to avoid duplicates - all_classes = self.all_classes() - - for c_name, c in all_classes.items(): - if slot.name in c.slots: - classes_set.add(c_name) - - if include_induced: - for c_name in all_classes: - induced_slot_names = [ - ind_slot.name for ind_slot in self.class_induced_slots(c_name) - ] - if slot.name in induced_slot_names: + for c_name, c in self.all_classes().items(): + if include_induced: + for c_slot in self.class_slots(c_name): + if slot.name == c_slot: + classes_set.add(c_name) + else: + if slot.name in c.slots: classes_set.add(c_name) return list(classes_set) From ee4e4b2f8a2d8568d41482b543cfaefc575bf34a Mon Sep 17 00:00:00 2001 From: sneakers-the-rat Date: Mon, 4 Mar 2024 20:43:43 -0800 Subject: [PATCH 2/2] break early --- linkml_runtime/utils/schemaview.py | 2 ++ 1 file changed, 2 insertions(+) diff --git a/linkml_runtime/utils/schemaview.py b/linkml_runtime/utils/schemaview.py index 31ca39c2..ed9e24ca 100644 --- a/linkml_runtime/utils/schemaview.py +++ b/linkml_runtime/utils/schemaview.py @@ -1547,9 +1547,11 @@ def get_classes_by_slot( for c_slot in self.class_slots(c_name): if slot.name == c_slot: classes_set.add(c_name) + break else: if slot.name in c.slots: classes_set.add(c_name) + break return list(classes_set)