def is_quotient(M, sym, rank): symbol = GenusSymbol_global_ring(MatrixSpace(ZZ, rank, rank).one()) symbol._local_symbols = [ Genus_Symbol_p_adic_ring(p, syms) for p, syms in sym.iteritems()] s = get_symbol_string(symbol) print s N = FiniteQuadraticModule(s) t = N.order() / M.order() if not Integer(t).is_square(): return False else: t = sqrt(t) for p in Integer(N.order()).prime_factors(): if not N.signature(p) == M.signature(p): return False # if not N.signature() == M.signature(): # return False for G in N.subgroups(): if G.order() == t and G.is_isotropic(): Q = G.quotient() if Q.is_isomorphic(M): print Q return N else: del Q del N return False
def is_quotient(M, sym, rank): symbol = GenusSymbol_global_ring(MatrixSpace(ZZ, rank, rank).one()) symbol._local_symbols = [ Genus_Symbol_p_adic_ring(p, syms) for p, syms in sym.iteritems() ] s = get_symbol_string(symbol) print s N = FiniteQuadraticModule(s) t = N.order() / M.order() if not Integer(t).is_square(): return False else: t = sqrt(t) for p in Integer(N.order()).prime_factors(): if not N.signature(p) == M.signature(p): return False # if not N.signature() == M.signature(): # return False for G in N.subgroups(): if G.order() == t and G.is_isotropic(): Q = G.quotient() if Q.is_isomorphic(M): print Q return N else: del Q del N return False