def get(matches, used, Ps, get_P, Pa, ua): others = list(set(used) - set(matches)) extra = PosetProduct(tuple(map(get_P, others))) print('extra for Pa: %s' % extra) Pa_comp = PosetProduct(Pa.subs + extra.subs) print('Pa_comp: %s' % Pa_comp) extra_minimals = extra.get_minimal_elements() m_matches = matches + others s = set() R = set() for m1, m2 in itertools.product(ua.minimals, extra_minimals): m = m1 + m2 s.add(m) r = [None] * len(used) for i, a in enumerate(used): S1 = Pa_comp.subs[m_matches.index(a)] s1 = m[m_matches.index(a)] S2 = get_P(a) r[i] = express_value_in_isomorphic_space(S1, s1, S2) r = tuple(r) R.add(r) Pa_comp_lb = Pa_comp.Us(s) print('Pa_comp_lb: %s' % Pa_comp_lb) Ps_a = Ps.Us(R) return Ps_a