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))
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())