def solve_r(self, r): F = self.get_fun_space() s = [] mcdp_dev_warning('use specific operation on antichains') for dp in self.dps: lf = dp.solve_r(r) s.extend(lf.maximals) res = F.Ls(poset_maxima(s, F.leq)) return res
def solve_r(self, r): F = self.get_fun_space() s = [] mcdp_dev_warning('use specific operation on antichains') for dp in self.dps: lf = dp.solve_r(r) s.extend(lf.maximals) res = F.Ls(poset_maxima(s, F.leq)) return res
def meet(self, a, b): from mcdp_posets.find_poset_minima.baseline_n2 import poset_maxima # find all descendants da = self._get_lower_closure(a) db = self._get_lower_closure(b) # take intersection inter = set(da) & set(db) if not inter: msg = 'There exists no join because lower closures separate.' raise_desc(NotMeetable, msg, a=self.format(a), b=self.format(b), da=da, db=db) maxima = poset_maxima(inter, self.leq) if len(maxima) > 1: msg = 'There exists no least element of intersection of lower closure.' raise_desc(NotMeetable, msg) return list(maxima)[0]
def meet(self, a, b): from mcdp_posets.find_poset_minima.baseline_n2 import poset_maxima # find all descendants da = self._get_lower_closure(a) db = self._get_lower_closure(b) # take intersection inter = set(da) & set(db) if not inter: msg = 'There exists no join because lower closures separate.' raise_desc(NotMeetable, msg, a=self.format(a), b=self.format(b), da=da, db=db) maxima = poset_maxima(inter, self.leq) if len(maxima) > 1: msg = 'There exists no least element of intersection of lower closure.' raise_desc(NotMeetable, msg) return list(maxima)[0]
def solve_r(self, r): l2 = self.dp2.solve_r(r) if do_extra_checks(): F2 = self.dp2.get_fun_space() LF2 = LowerSets(F2) LF2.belongs(l2) maxs = set([]) # todo: express as operation on antichains for l in l2.maximals: v = self.dp1.solve_r(l) maxs.update(v.maximals) F = self.get_fun_space() maximals = poset_maxima(maxs, F.leq) lf = LowerSet(maximals, F) return lf
def check_maximal(elements, poset): m2 = poset_maxima(elements, poset.leq) if not len(m2) == len(elements): msg = 'Set of elements is not minimal: %s' % elements raise ValueError(msg)
def check_maximal(elements, poset): m2 = poset_maxima(elements, poset.leq) if not len(m2) == len(elements): msg = 'Set of elements is not minimal: %s' % elements raise ValueError(msg)