#self.spins = [x for x in self._disc.divisors() if is_squarefree(x)]
...
...
@@ -685,6 +916,14 @@ class quinary_module():
M = matrix(h, [vt[i][j] for i in range(h) for j in range(h)])
return M.kernel()
def theta_kernel_pol(self, n):
Tp = self.Tp_d_n(2, 1, n)
Qs = qmod._iso_dict.values()
Ps = [[sum([basis_n(n)[i]*qmod._invariants[n][1][k][i, j] for i in range(len(basis_n(n)))]) for j in range(qmod._invariants[n][1][k].ncols())] for k in range(len(Qs))]
h = sum([len(x) for x in Ps])
return qf_theta_pols(Qs, Ps, h+1).kernel()
def theta_kernel_dimension(self):
"""
...
...
@@ -693,7 +932,19 @@ class quinary_module():
return self.theta_kernel().dimension()
def _Tp_init(self, p):
def _spin_norm(self, A):
s = 1
for p in self._vectors:
if p == 2:
dp = qf_spin_norm_vector(self._Q, A, self._vectors[p], 4)
else:
dp = qf_spin_norm_vector(self._Q, A, self._vectors[p], p)
if dp == -1:
s*= p
return s
def _Tp_init(self, p, spin_method = 1):
"""
Initialize the module, finds the genus using p-neighbors
...
...
@@ -746,7 +997,10 @@ class quinary_module():
X*= X.det()
else:
X = identity_matrix(5)
if spin_method == 1:
s = qf_spin_norm(Q, Q_transformations[R]*A*X*Q_transformations[iso_dict[j]]^-1)
elif spin_method == 2:
s = self._spin_norm(Q_transformations[R]*A*X*Q_transformations[iso_dict[j]]^-1)