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_)
Example #2
0
 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)
Example #3
0
    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))