r""" Cached characteristic polynomial coefficients for a few of the example algebras. These take a long time to compute, so it makes more sense to cache them and then only test that the cached values are correct every once in a while. And they're in this separate file because they are visually horrific. SageMath's output can be converted back into "input form" using a sed script, for example: $ sed -e 's/\^/\*\*/g' -e 's/X\([0-9][0-9]*\)/X\[\1\]/g' The simple algebras _not_ represented here all have rank two or less, and are "easy" to compute even over the algebraic reals. """ def real_symmetric_eja_coeffs(J): X = J.coordinate_polynomial_ring().gens() if J.dimension() == 3: # n == 2 a0 = -X[1]**2 + X[0]*X[2] a1 = -X[0] - X[2] return (a0,a1) elif J.dimension() == 6: # n == 3 a0 = ( X[2]*X[3]**2 - 2*X[1]*X[3]*X[4] + X[0]*X[4]**2 + X[1]**2*X[5] - X[0]*X[2]*X[5] ) a1 = ( -X[1]**2 + X[0]*X[2] - X[3]**2 - X[4]**2 + X[0]*X[5] + X[2]*X[5] ) a2 = -X[0] - X[2] - X[5] return (a0,a1,a2) elif J.dimension() == 10: # n == 4 a0 = ( X[4]**2*X[6]**2 - X[2]*X[5]*X[6]**2 - 2*X[3]*X[4]*X[6]*X[7] + 2*X[1]*X[5]*X[6]*X[7] + X[3]**2*X[7]**2 - X[0]*X[5]*X[7]**2 + 2*X[2]*X[3]*X[6]*X[8] - 2*X[1]*X[4]*X[6]*X[8] - 2*X[1]*X[3]*X[7]*X[8] + 2*X[0]*X[4]*X[7]*X[8] + X[1]**2*X[8]**2 - X[0]*X[2]*X[8]**2 - X[2]*X[3]**2*X[9] + 2*X[1]*X[3]*X[4]*X[9] - X[0]*X[4]**2*X[9] - X[1]**2*X[5]*X[9] + X[0]*X[2]*X[5]*X[9] ) a1 = ( X[2]*X[3]**2 - 2*X[1]*X[3]*X[4] + X[0]*X[4]**2 + X[1]**2*X[5] - X[0]*X[2]*X[5] + X[2]*X[6]**2 + X[5]*X[6]**2 - 2*X[1]*X[6]*X[7] + X[0]*X[7]**2 + X[5]*X[7]**2 - 2*X[3]*X[6]*X[8] - 2*X[4]*X[7]*X[8] + X[0]*X[8]**2 + X[2]*X[8]**2 + X[1]**2*X[9] - X[0]*X[2]*X[9] + X[3]**2*X[9] + X[4]**2*X[9] - X[0]*X[5]*X[9] - X[2]*X[5]*X[9] ) a2 = ( -X[1]**2 + X[0]*X[2] - X[3]**2 - X[4]**2 + X[0]*X[5] + X[2]*X[5] - X[6]**2 - X[7]**2 - X[8]**2 + X[0]*X[9] + X[2]*X[9] + X[5]*X[9] ) a3 = -X[0] - X[2] - X[5] - X[9] return (a0,a1,a2,a3) # Don't know them return None def complex_hermitian_eja_coeffs(J): X = J.coordinate_polynomial_ring().gens() if J.dimension() == 4: # n == 2 a0 = -X[1]**2 - X[2]**2 + X[0]*X[3] a1 = -X[0] - X[3] return (a0,a1) elif J.dimension() == 9: # n == 3 a0 = ( X[3]*X[4]**2 + X[3]*X[5]**2 - 2*X[1]*X[4]*X[6] - 2*X[2]*X[5]*X[6] + X[0]*X[6]**2 + 2*X[2]*X[4]*X[7] - 2*X[1]*X[5]*X[7] + X[0]*X[7]**2 + X[1]**2*X[8] + X[2]**2*X[8] - X[0]*X[3]*X[8] ) a1 = ( -X[1]**2 - X[2]**2 + X[0]*X[3] - X[4]**2 - X[5]**2 - X[6]**2 - X[7]**2 + X[0]*X[8] + X[3]*X[8] ) a2 = -X[0] - X[3] - X[8] return (a0,a1,a2) elif J.dimension() == 16: # n == 4 a0 = ( X[6]**2*X[9]**2 + X[7]**2*X[9]**2 - X[3]*X[8]*X[9]**2 + X[6]**2*X[10]**2 + X[7]**2*X[10]**2 - X[3]*X[8]*X[10]**2 - 2*X[4]*X[6]*X[9]*X[11] - 2*X[5]*X[7]*X[9]*X[11] + 2*X[1]*X[8]*X[9]*X[11] - 2*X[5]*X[6]*X[10]*X[11] + 2*X[4]*X[7]*X[10]*X[11] + 2*X[2]*X[8]*X[10]*X[11] + X[4]**2*X[11]**2 + X[5]**2*X[11]**2 - X[0]*X[8]*X[11]**2 + 2*X[5]*X[6]*X[9]*X[12] - 2*X[4]*X[7]*X[9]*X[12] - 2*X[2]*X[8]*X[9]*X[12] - 2*X[4]*X[6]*X[10]*X[12] - 2*X[5]*X[7]*X[10]*X[12] + 2*X[1]*X[8]*X[10]*X[12] + X[4]**2*X[12]**2 + X[5]**2*X[12]**2 - X[0]*X[8]*X[12]**2 + 2*X[3]*X[4]*X[9]*X[13] - 2*X[1]*X[6]*X[9]*X[13] + 2*X[2]*X[7]*X[9]*X[13] + 2*X[3]*X[5]*X[10]*X[13] - 2*X[2]*X[6]*X[10]*X[13] - 2*X[1]*X[7]*X[10]*X[13] - 2*X[1]*X[4]*X[11]*X[13] - 2*X[2]*X[5]*X[11]*X[13] + 2*X[0]*X[6]*X[11]*X[13] + 2*X[2]*X[4]*X[12]*X[13] - 2*X[1]*X[5]*X[12]*X[13] + 2*X[0]*X[7]*X[12]*X[13] + X[1]**2*X[13]**2 + X[2]**2*X[13]**2 - X[0]*X[3]*X[13]**2 - 2*X[3]*X[5]*X[9]*X[14] + 2*X[2]*X[6]*X[9]*X[14] + 2*X[1]*X[7]*X[9]*X[14] + 2*X[3]*X[4]*X[10]*X[14] - 2*X[1]*X[6]*X[10]*X[14] + 2*X[2]*X[7]*X[10]*X[14] - 2*X[2]*X[4]*X[11]*X[14] + 2*X[1]*X[5]*X[11]*X[14] - 2*X[0]*X[7]*X[11]*X[14] - 2*X[1]*X[4]*X[12]*X[14] - 2*X[2]*X[5]*X[12]*X[14] + 2*X[0]*X[6]*X[12]*X[14] + X[1]**2*X[14]**2 + X[2]**2*X[14]**2 - X[0]*X[3]*X[14]**2 - X[3]*X[4]**2*X[15] - X[3]*X[5]**2*X[15] + 2*X[1]*X[4]*X[6]*X[15] + 2*X[2]*X[5]*X[6]*X[15] - X[0]*X[6]**2*X[15] - 2*X[2]*X[4]*X[7]*X[15] + 2*X[1]*X[5]*X[7]*X[15] - X[0]*X[7]**2*X[15] - X[1]**2*X[8]*X[15] - X[2]**2*X[8]*X[15] + X[0]*X[3]*X[8]*X[15] ) a1 = ( X[3]*X[4]**2 + X[3]*X[5]**2 - 2*X[1]*X[4]*X[6] - 2*X[2]*X[5]*X[6] + X[0]*X[6]**2 + 2*X[2]*X[4]*X[7] - 2*X[1]*X[5]*X[7] + X[0]*X[7]**2 + X[1]**2*X[8] + X[2]**2*X[8] - X[0]*X[3]*X[8] + X[3]*X[9]**2 + X[8]*X[9]**2 + X[3]*X[10]**2 + X[8]*X[10]**2 - 2*X[1]*X[9]*X[11] - 2*X[2]*X[10]*X[11] + X[0]*X[11]**2 + X[8]*X[11]**2 + 2*X[2]*X[9]*X[12] - 2*X[1]*X[10]*X[12] + X[0]*X[12]**2 + X[8]*X[12]**2 - 2*X[4]*X[9]*X[13] - 2*X[5]*X[10]*X[13] - 2*X[6]*X[11]*X[13] - 2*X[7]*X[12]*X[13] + X[0]*X[13]**2 + X[3]*X[13]**2 + 2*X[5]*X[9]*X[14] - 2*X[4]*X[10]*X[14] + 2*X[7]*X[11]*X[14] - 2*X[6]*X[12]*X[14] + X[0]*X[14]**2 + X[3]*X[14]**2 + X[1]**2*X[15] + X[2]**2*X[15] - X[0]*X[3]*X[15] + X[4]**2*X[15] + X[5]**2*X[15] + X[6]**2*X[15] + X[7]**2*X[15] - X[0]*X[8]*X[15] - X[3]*X[8]*X[15] ) a2 = ( -X[1]**2 - X[2]**2 + X[0]*X[3] - X[4]**2 - X[5]**2 - X[6]**2 - X[7]**2 + X[0]*X[8] + X[3]*X[8] - X[9]**2 - X[10]**2 - X[11]**2 - X[12]**2 - X[13]**2 - X[14]**2 + X[0]*X[15] + X[3]*X[15] + X[8]*X[15] ) a3 = -X[0] - X[3] - X[8] - X[15] return (a0,a1,a2,a3) # Don't know them return None def quaternion_hermitian_eja_coeffs(J): X = J.coordinate_polynomial_ring().gens() if J.dimension() == 6: # n == 2 a0 = -X[1]**2 - X[2]**2 - X[3]**2 - X[4]**2 + X[0]*X[5] a1 = -X[0] - X[5] return (a0,a1) elif J.dimension() == 15: # n == 3 a0 = ( X[5]*X[6]**2 + X[5]*X[7]**2 + X[5]*X[8]**2 + X[5]*X[9]**2 - 2*X[1]*X[6]*X[10] - 2*X[2]*X[7]*X[10] - 2*X[3]*X[8]*X[10] - 2*X[4]*X[9]*X[10] + X[0]*X[10]**2 + 2*X[2]*X[6]*X[11] - 2*X[1]*X[7]*X[11] + 2*X[4]*X[8]*X[11] - 2*X[3]*X[9]*X[11] + X[0]*X[11]**2 + 2*X[3]*X[6]*X[12] - 2*X[4]*X[7]*X[12] - 2*X[1]*X[8]*X[12] + 2*X[2]*X[9]*X[12] + X[0]*X[12]**2 + 2*X[4]*X[6]*X[13] + 2*X[3]*X[7]*X[13] - 2*X[2]*X[8]*X[13] - 2*X[1]*X[9]*X[13] + X[0]*X[13]**2 + X[1]**2*X[14] + X[2]**2*X[14] + X[3]**2*X[14] + X[4]**2*X[14] - X[0]*X[5]*X[14] ) a1 = ( -X[1]**2 - X[2]**2 - X[3]**2 - X[4]**2 + X[0]*X[5] - X[6]**2 - X[7]**2 - X[8]**2 - X[9]**2 - X[10]**2 - X[11]**2 - X[12]**2 - X[13]**2 + X[0]*X[14] + X[5]*X[14] ) a2 = -X[0] - X[5] - X[14] return (a0,a1,a2) # Don't know them return None def octonion_hermitian_eja_coeffs(J): X = J.coordinate_polynomial_ring().gens() if J.dimension() == 10: # n == 2 a0 = ( -X[1]**2 - X[2]**2 - X[3]**2 - X[4]**2 - X[5]**2 - X[6]**2 - X[7]**2 - X[8]**2 + X[0]*X[9] ) a1 = -X[0] - X[9] return (a0,a1) elif J.dimension() == 27: # n == 3 a0 = ( X[9]*X[10]**2 + X[9]*X[11]**2 + X[9]*X[12]**2 + X[9]*X[13]**2 + X[9]*X[14]**2 + X[9]*X[15]**2 + X[9]*X[16]**2 + X[9]*X[17]**2 - 2*X[1]*X[10]*X[18] - 2*X[2]*X[11]*X[18] - 2*X[3]*X[12]*X[18] - 2*X[4]*X[13]*X[18] - 2*X[5]*X[14]*X[18] - 2*X[6]*X[15]*X[18] - 2*X[7]*X[16]*X[18] - 2*X[8]*X[17]*X[18] + X[0]*X[18]**2 + 2*X[2]*X[10]*X[19] - 2*X[1]*X[11]*X[19] + 2*X[4]*X[12]*X[19] - 2*X[3]*X[13]*X[19] + 2*X[6]*X[14]*X[19] - 2*X[5]*X[15]*X[19] - 2*X[8]*X[16]*X[19] + 2*X[7]*X[17]*X[19] + X[0]*X[19]**2 + 2*X[3]*X[10]*X[20] - 2*X[4]*X[11]*X[20] - 2*X[1]*X[12]*X[20] + 2*X[2]*X[13]*X[20] + 2*X[7]*X[14]*X[20] + 2*X[8]*X[15]*X[20] - 2*X[5]*X[16]*X[20] - 2*X[6]*X[17]*X[20] + X[0]*X[20]**2 + 2*X[4]*X[10]*X[21] + 2*X[3]*X[11]*X[21] - 2*X[2]*X[12]*X[21] - 2*X[1]*X[13]*X[21] + 2*X[8]*X[14]*X[21] - 2*X[7]*X[15]*X[21] + 2*X[6]*X[16]*X[21] - 2*X[5]*X[17]*X[21] + X[0]*X[21]**2 + 2*X[5]*X[10]*X[22] - 2*X[6]*X[11]*X[22] - 2*X[7]*X[12]*X[22] - 2*X[8]*X[13]*X[22] - 2*X[1]*X[14]*X[22] + 2*X[2]*X[15]*X[22] + 2*X[3]*X[16]*X[22] + 2*X[4]*X[17]*X[22] + X[0]*X[22]**2 + 2*X[6]*X[10]*X[23] + 2*X[5]*X[11]*X[23] - 2*X[8]*X[12]*X[23] + 2*X[7]*X[13]*X[23] - 2*X[2]*X[14]*X[23] - 2*X[1]*X[15]*X[23] - 2*X[4]*X[16]*X[23] + 2*X[3]*X[17]*X[23] + X[0]*X[23]**2 + 2*X[7]*X[10]*X[24] + 2*X[8]*X[11]*X[24] + 2*X[5]*X[12]*X[24] - 2*X[6]*X[13]*X[24] - 2*X[3]*X[14]*X[24] + 2*X[4]*X[15]*X[24] - 2*X[1]*X[16]*X[24] - 2*X[2]*X[17]*X[24] + X[0]*X[24]**2 + 2*X[8]*X[10]*X[25] - 2*X[7]*X[11]*X[25] + 2*X[6]*X[12]*X[25] + 2*X[5]*X[13]*X[25] - 2*X[4]*X[14]*X[25] - 2*X[3]*X[15]*X[25] + 2*X[2]*X[16]*X[25] - 2*X[1]*X[17]*X[25] + X[0]*X[25]**2 + X[1]**2*X[26] + X[2]**2*X[26] + X[3]**2*X[26] + X[4]**2*X[26] + X[5]**2*X[26] + X[6]**2*X[26] + X[7]**2*X[26] + X[8]**2*X[26] - X[0]*X[9]*X[26] ) a1 = ( -X[1]**2 - X[2]**2 - X[3]**2 - X[4]**2 - X[5]**2 - X[6]**2 - X[7]**2 - X[8]**2 + X[0]*X[9] - X[10]**2 - X[11]**2 - X[12]**2 - X[13]**2 - X[14]**2 - X[15]**2 - X[16]**2 - X[17]**2 - X[18]**2 - X[19]**2 - X[20]**2 - X[21]**2 - X[22]**2 - X[23]**2 - X[24]**2 - X[25]**2 + X[0]*X[26] + X[9]*X[26] ) a2 = -X[0] - X[9] - X[26] return (a0,a1,a2) # Don't know them return None