def i_optional_att_group_cardinality(ss: Substrate, max_: unlimitedNat, qore: Quads_or_Error) -> Set(sctIdGroup): if quad_direction(qore) == source_direction: return Set(sctIdGroup)(minus([sctIdGroup(rel.s, quadGroup(rel)) for rel in ss.relationships], union([sctIdGroup(q.s, quadGroup(q)) for q in quads_for(qore).v], i_required_att_group_cardinality(N(0), max_, qore)))) else: return Set(sctIdGroup)( minus([sctIdGroup(rel.t.t_sctid, quadGroup(rel)) for rel in ss.relationships if rel.t.inran('t_sctid')], union([sctIdGroup(q.t.t_sctid, quadGroup(q)) for q in quads_for(qore).v], i_required_att_group_cardinality(N(0), max_, qore))))
def i_attributeSet(ss: Substrate, attset: attributeSet) -> Sctids_or_Error: lhs = i_subAttributeSet(ss, attset.first) rhs = attset.second if rhs.is_empty or lhs.inran('error'): return lhs elif rhs.head.inran('attset_conjattset'): return intersect(lhs, i_conjunctionAttributeSet(ss, rhs.head.attset_conjattset)) else: return union(lhs, i_disjunctionAttributeSet(ss, rhs.head.attset_disjattset))
def i_refinement(ss: Substrate, rfnment: refinement) -> Sctids_or_Error: lhs = i_subRefinement(ss, rfnment.first) rhs = rfnment.second # TODO - the "or" below is a change to page 17 of the spec if rhs.is_empty or lhs.inran('error'): return lhs if rhs.head.inran('refine_conjset'): return intersect(lhs, i_conjunctionRefinementSet(ss, rhs.head.refine_conjset)) else: return union(lhs, i_disjunctionRefinementSet(ss, rhs.head.refine_disjset))
def i_disjunctionAttributeSet(ss: Substrate, disjset: disjunctionAttributeSet) -> Sctids_or_Error: return i_subAttributeSet(ss, disjset.head) if disjset.tail.is_empty else \ union(i_subAttributeSet(ss, disjset.head), i_disjunctionAttributeSet(ss, disjset.tail))
def i_disjunctionRefinementSet(ss: Substrate, disjset: disjunctionRefinementSet) -> Sctids_or_Error: return i_subRefinement(ss, disjset.head) if disjset.tail.is_empty else \ union(i_subRefinement(ss, disjset.head), i_conjunctionRefinementSet(ss, disjset.tail))
def test_empty_seq(self): x = Sctids_or_Error(ok=RF2_Substrate().refsets(16)) print(union(x, x))