def i_att_cardinality(ss: Substrate, ocard: Optional(cardinality), qore: Quads_or_Error) -> Sctids_or_Error: if qore.inran('qerror'): rval = Sctids_or_Error(error=qore.qerror) elif ocard.is_empty: rval = Sctids_or_Error(ok=i_required_cardinality(N(1), many, qore)) else: card = ocard.head rval = Sctids_or_Error(ok=i_required_cardinality(card.min_, card.max_, qore) if card.min_ > 0 else i_optional_cardinality(ss, card.max_, qore)) return rval
def i_att_group_cardinality(ss: Substrate, ocard: Optional(cardinality), qore: Quads_or_Error) -> sctIdGroups_or_Error: if qore.inran('qerror'): return sctIdGroups_or_Error(error=qore.qerror) qv = quads_for(qore) rf = quad_direction(qore) == source_direction if ocard.is_empty: rval = qv.i_required_att_group_cardinality(N(1), many, rf) else: card = ocard.head if card.min_ > 0: rval = qv.i_required_att_group_cardinality(card.min_, card.max_, rf) else: rval = qv.i_optional_att_group_cardinality(ss, card.max_, rf) return sctIdGroups_or_Error(group_value=rval)