Example #1
0
def siegel_series_dim2(q, p):
    det_4 = q.Gram_det() * ZZ(4)
    c = q.content_order()
    fd = fundamental_discriminant(-det_4)
    f = (valuation(det_4, p) - valuation(fd, p)) / ZZ(2)
    return (_siegel_series_dim2(p, c, f + 1) -
            kronecker_symbol(fd, p) * p * X * _siegel_series_dim2(p, c, f))
 def test_jordan_decomposition_odd_p(self):
     for _ in range(100):
         S = random_even_symm_mat(5)
         for p in [3, 5, 7]:
             self.assertEqual(
                 kronecker_symbol(
                     mul(_jordan_decomposition_odd_p(S, p)) / S.det(), p),
                 1)
def _chi_p_odd(a, p):
    p = ZZ(p)
    r = valuation(a, p)
    if r % 2 == 0:
        c = a // (p ** r)
        return kronecker_symbol(c, p)
    else:
        return 0
Example #4
0
def IsSquareInQp(x, p):
    if x == 0:
        return true
    # Check parity of valuation
    v = valuation(x, p)
    if v % 2:
        return false
    # Renormalise to get a unit
    x //= p**v
    # Reduce mod p and conclude
    if p == 2:
        return Mod(x, 8) == 1
    else:
        return kronecker_symbol(x, p) == 1
 def assert_jordan_blcs(self, p, mat):
     p = ZZ(p)
     if p == 2:
         blcs = jordan_blocks_2(mat)
     else:
         blcs = jordan_blocks_odd(mat, p)
     q = QuadraticForm(ZZ, ZZ(2) * mat)
     q1 = _blocks_to_quad_form(blcs.blocks, p)
     if p == 2:
         self.assertTrue((q.det() / q1.det()) % 8 == 1)
     else:
         self.assertTrue(kronecker_symbol(q.det() / q1.det(), p) == 1)
     self.assertEqual(
         q.hasse_invariant__OMeara(p), q1.hasse_invariant__OMeara(p))
Example #6
0
def IsSquareInQp(x,p):
    if x==0:
        return true
    # Check parity of valuation
    v=valuation(x,p)
    if v%2:
        return false
    # Renormalise to get a unit
    x//=p**v
    # Reduce mod p and conclude
    if p==2:
        return Mod(x,8)==1
    else:
        return kronecker_symbol(x,p)==1
 def assert_jordan_blocks_method(self, p, mat):
     p = ZZ(p)
     if p == 2:
         blcs = jordan_blocks_2(mat)
     else:
         blcs = jordan_blocks_odd(mat, p)
     q = QuadraticForm(ZZ, 2 * mat)
     if p == 2:
         should1 = (q.Gram_det() / blcs.Gram_det()) % 8
     else:
         should1 = kronecker_symbol((q.Gram_det() / blcs.Gram_det()), p)
     self.assertEqual(should1, 1)
     self.assertEqual(
         q.hasse_invariant__OMeara(p), blcs.hasse_invariant__OMeara())
     self.assertEqual(q.dim(), blcs.dim())
     self.assertEqual(q.content().valuation(p), blcs.content_order())
Example #8
0
 def check_inert_primes(self, rec, verbose=False):
     """
     for each discriminant D in self_twist_discs, check that for
     each prime p not dividing the level for which (D/p) = -1,
     check that traces[p] = 0 (we could also check values in
     mf_hecke_nf and/or mf_hecke_cc, but this would be far more
     costly)
     """
     # TIME about 3600s for full table
     N = rec['level']
     traces = [0] + rec['traces']  # shift so indexing correct
     primes = [p for p in prime_range(len(traces)) if N % p != 0]
     for D in rec['self_twist_discs']:
         for p in primes:
             if kronecker_symbol(D, p) == -1 and traces[p] != 0:
                 if verbose:
                     print("CM failure", D, p, traces[p])
                 return False
     return True
Example #9
0
 def check_inert_primes(self, rec, verbose=False):
     """
     for each discriminant D in self_twist_discs, check that for
     each prime p not dividing the level for which (D/p) = -1,
     check that traces[p] = 0 (we could also check values in
     mf_hecke_nf and/or mf_hecke_cc, but this would be far more
     costly)
     """
     # TIME about 3600s for full table
     N = rec['level']
     traces = [0] + rec['traces'] # shift so indexing correct
     primes = [p for p in prime_range(len(traces)) if N % p != 0]
     for D in rec['self_twist_discs']:
         for p in primes:
             if kronecker_symbol(D, p) == -1 and traces[p] != 0:
                 if verbose:
                     print "CM failure", D, p, traces[p]
                 return False
     return True