def visitCardinality(self, ctx): # cardinality : '[' NONNEGATIVEINTEGERVALUE TO (NONNEGATIVEINTEGERVALUE | MANY) ']' ; # NONNEGATIVEINTEGERVALUE : '0' | DIGITNONZERO DIGIT* ; # min_ = int(str(ctxNONNEGATIVEINTEGERVALUE())) # max_ = self.visit(ctx.getChild(1)) # max_ = unlimitedNat(num=N(int(str(max_v)))) if max_v != many else unlimitedNat(many=None) min_ = int(str(ctx.getChild(1))) mx = str(ctx.getChild(3)) max_ = unlimitedNat(num=int(mx)) if N.has_member(mx) else unlimitedNat(many=None) return cardinality(min_=min_, max_=max_)
def test_2(self): cardinality = z.Schema(min_=z.N, max_=unlimitedNat) # TODO: positional args not implemented # ztn = cardinality(0, many) ztn = cardinality(min_=0, max_=many) # TODO: This fails half the time because dictionaries aren't ordered # self.assertEqual("[min_=0, max_=many ⟨⟨ None ⟩⟩ ]", str(ztn)) oto = cardinality(min_=1, max_=unlimitedNat(num=1)) oc = Optional(cardinality)(cardinality(min_=1, max_=unlimitedNat(num=1))) print(oc)
def test_opt_instance(self): def getNext(f, l): for e in l: if f(e): return e return None a = sctId(15) a_1 = 15 b = Optional(reverseFlag) c = Optional(cardinality)() one = unlimitedNat(num=1) d = cardinality(min_=1, max_=one) e = Optional(cardinality)(cardinality(min_=1, max_=unlimitedNat(num=1))) getNext(lambda e: Optional(cardinality).has_member(e), [a, a_1, b, c, d, e])
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))