def i_constraintOperator(ss: Substrate, oco: Optional(constraintOperator), input_: Sctids_or_Error) -> Sctids_or_Error: if input_.inran('error') or oco.is_empty: return input_ input_ = input_.ok # TODO: Because we aren't doing equivalence, we can be sure (?) that the targets are always a singleton if oco.head == descendantOrSelfOf: rval = input_ | descendants_of(input_) # return Sctids_or_Error(ok=Set.SetInstance.bigcup(Set(sctId), [ss.descendants(id_) for id_ in # result_sctids(input_)]).union(result_sctids(input_))) elif oco.head == descendantOf: rval = descendants_of(input_) # return Sctids_or_Error(ok=Set.SetInstance.bigcup(Set(sctId), ss.descendants(result_sctids(input_)))) elif oco.head == ancestorOrSelfOf: rval = input_ | ancestors_of(input_) # return Sctids_or_Error(ok=Set.SetInstance.bigcup(Set(sctId), [ss.ancestors(id_) for id_ in # result_sctids(input_)]).union(result_sctids(input_))) else: rval = ancestors_of(input_) # return Sctids_or_Error(ok=Set.SetInstance.bigcup(Set(sctId), [ss.ancestors(id_) for id_ in result_sctids(input_)])) return Sctids_or_Error(ok=rval)
def test_attribute_and_attribute_group_cardinalities_1(self): # < 404684003 |clinical finding|: # [0..0] {[2..*] 363698007 |finding site| = < 91723000 |anatomical structure|} ai = Sctids(363698007) dos = descendants_of(Sctids(91723000)) b = Quads(rf=False, atts=ai, eq=True, ecv=dos) bic = b.i_required_att_group_cardinality(2, many, False) self.assertEqual("SELECT DISTINCT idg.id, idg.gid FROM (SELECT DISTINCT rac_1.sourceId AS id, rac_1.gid FROM" " (SELECT sourceId, gid, count(rid) AS cnt FROM (SELECT id AS rid, sourceId AS id, typeId, " "destinationId, gid FROM relationship_ss_ext WHERE typeId IN (SELECT id FROM concept_ss WHERE" " active=1 AND locked = 0 AND (id IN (363698007))) AND destinationId IN (SELECT DISTINCT " "tt1.child AS id FROM transitive_ss AS tt1 JOIN (SELECT id FROM concept_ss WHERE active=1 AND" " locked = 0 AND (id IN (91723000))) AS tt2 ON tt1.parent = tt2.id WHERE tt1.locked = 0) AND " "active=1 AND locked=0) AS rac_2 GROUP BY sourceId, gid) AS rac_1 WHERE rac_1.cnt >= 2 ) " "AS idg", bic.as_sql())
def test_opt_cardinality(self): # # [0..1] 127489000 |has active ingredient| = < 105590001 |substance| att_i = Sctids(127489000) # active ingredient desc_of_subst = descendants_of(Sctids(105590001)) # substance ais_i = Quads(rf=False, atts=att_i, eq=True, ecv=desc_of_subst) # has active ingredient desc substance universe = Sctids() # all active concepts self.assertEqual(313015, len(universe)) # as of 20150131 self.assertEqual(15419, len(ais_i.to_sctids())) universe_minus_ais_i = universe - ais_i.to_sctids() # all concepts w/o active ingredient of substance self.assertEqual(313015 - 15419, len(universe_minus_ais_i)) all_ais_i_minus_passing = ais_i.to_sctids() - ais_i.i_required_cardinality(0, unlimitedNat(num=1), False) self.assertEqual(2302, len(ais_i.i_required_cardinality(2, many, False))) # Concepts with 2 or more self.assertEqual(2302, len(all_ais_i_minus_passing)) # all concepts minus at most one bi_should_be = universe - all_ais_i_minus_passing # everything except those with at most 1 self.assertEqual(313015 - 2302, len(bi_should_be)) bi = ais_i.i_optional_cardinality(None, unlimitedNat(num=1), False) self.assertEqual(313015 - 2302, len(bi))