def _get_i(mon): """$R_{ij}<R_{kl}$ if (j-i, i)<(l-k,k)""" for i in range(len(mon)): if DualSteenrodDense.is_gen_E0(mon[i]): if i > 0 and (len(mon[i]), mon[i][-1]) < (len( mon[i - 1]), mon[i - 1][-1]): return i - 1 else: if i > 0 and all( (g + 1, 1 << s) < (len(mon[i - 1]), mon[i - 1][-1]) for g, e in enumerate(mon[i]) if e > 0 for s in two_expansion(e)): return i - 1 else: break return None
def key_mon(mon): return [(DualSteenrodDense.is_gen_E0(m), len(m), m[-1]) for m in mon]