def i_memberOf(ss: Substrate, crorwc: crOrWildCard) -> Sctids_or_Error: # TODO -- this function executes queries - need to redo ? refsetids = ss.i_conceptReference(crorwc.cr) if crorwc.inran('cr') else \ Sctids_or_Error(ok=ss.descendants(refset_concept)) if refsetids.inran('error'): return refsetids refsets = result_sctids(refsetids) refset_members = [ss.i_refsetId(sctid) for sctid in refsets] rval = refset_members[0] if refset_members else Sctids_or_Error(ok=ss.equivalent_concepts(None)) for m in refset_members[1:]: rval = rval.union(m) return rval
def i_groupAttribute(ss: Substrate, att: attribute) -> sctIdGroups_or_Error: att_sctids = i_attributeOperator(ss, att.attrOper, ss.i_attributeName(att.name)) if att_sctids.inran('error'): return sctIdGroups_or_Error(gerror=att_sctids.error) elif att.opValue.inran('attrib_expr'): expr_interp = i_expressionComparisonOperator(ss, att.rf, result_sctids(att_sctids), att.opValue.attrib_expr) return i_att_group_cardinality(ss, att.card, expr_interp) elif att.opValue.inran('attrib_num'): num_interp = i_numericComparsionOperator(ss, att.rf, result_sctids(att_sctids), att.opValue.attrib_num) return i_att_group_cardinality(ss, att.card, num_interp) else: str_interp = i_stringComparisonOperator(ss, att.rf, result_sctids(att_sctids), att.opValue.attrib_str) return i_att_group_cardinality(ss, att.card, str_interp)
def i_attribute(ss: Substrate, att: attribute) -> Sctids_or_Error: att_sctids = i_attributeOperator(ss, att.attrOper, ss.i_attributeName(att.name)) return att_sctids if att_sctids.inran('error') else \ i_att_cardinality(ss, att.card, i_expressionComparisonOperator(ss, att.rf, result_sctids(att_sctids), att.opValue.attrib_expr)) if \ att.opValue.inran('attrib_expr') else \ i_att_cardinality(ss, att.card, i_numericComparsionOperator(ss, att.rf, result_sctids(att_sctids), att.opValue.attrib_num)) if \ att.opValue.inran('attrib_num') else \ i_att_cardinality(ss, att.card, i_stringComparisonOperator(ss, att.rf, result_sctids(att_sctids), att.opValue.attrib_str))
def i_focusConcept(ss: Substrate, fc: focusConcept) -> Sctids_or_Error: return ss.i_conceptReference(fc.focusConcept_c.cr) if fc.inran('focusConcept_c') and fc.focusConcept_c.inran('cr') else \ Sctids_or_Error(ok=ss.concepts) if fc.inran('focusConcept_c') and fc.focusConcept_c.inran('wc') else \ i_memberOf(ss, fc.focusConcept_m)