def seperate_parents_and_children(feature_db, parent_types_to_lift): c = feature_db.conn.cursor() relations = [ list(feature) for feature in c.execute( '''SELECT * FROM relations join features as a on a.id = relations.parent join features as b on b.id = relations.child''') if feature[0] != feature[1] ] all_ids = [ list(feature)[0] for feature in c.execute('''SELECT * FROM features''') ] all_children_ids = [relation[1] for relation in relations] all_parent_ids = [relation[0] for relation in relations] lowest_children = np.setdiff1d(all_ids, all_parent_ids) highest_parents = np.setdiff1d(all_ids, all_children_ids) intermediates = set(all_children_ids).intersection(set(all_parent_ids)) parent_dict, child_dict, intermediate_dict = {}, {}, {} add_parents(parent_dict, child_dict, highest_parents, parent_types_to_lift, feature_db) add_children(parent_dict, child_dict, lowest_children, feature_db) add_intermediates(intermediates, intermediate_dict, feature_db) parent_order = liftoff_utils.find_parent_order([ parent for parent in list(parent_dict.values()) if parent is not None ]) ref_feature_hierarchy = feature_hierarchy.feature_hierarchy( parent_dict, intermediate_dict, child_dict) return ref_feature_hierarchy, parent_order
def seperate_parents_and_children(feature_db, parent_types_to_lift): parent_dict, child_dict, intermediate_dict = {}, {}, {} feature_types = feature_db.featuretypes() parent_types, child_types, intermediate_types = find_feature_type_hierarchy(feature_types, feature_db) filtered_parents = [parent for parent in parent_types if parent in parent_types_to_lift] for parent_type in filtered_parents: for parent in feature_db.features_of_type(featuretype=parent_type): add_parent(parent_dict, parent, child_dict) add_children(child_types, parent, feature_db, child_dict) add_intermediates(intermediate_types, intermediate_dict, feature_db) parent_order = liftoff_utils.find_parent_order( [parent for parent in list(parent_dict.values()) if parent is not None]) ref_feature_hierarchy = feature_hierarchy.feature_hierarchy(parent_dict, intermediate_dict, child_dict) return ref_feature_hierarchy, parent_order