Optimized Cython code needed by quaternion algebras

This is a collection of miscellaneous routines that are in Cython for speed purposes and are used by the quaternion algebra code. For example, there are functions for quickly constructing an n x 4 matrix from a list of n rational quaternions.

AUTHORS:

  • William Stein

sage.algebras.quatalg.quaternion_algebra_cython.integral_matrix_and_denom_from_rational_quaternions(v, reverse=False)[source]

Given a list of rational quaternions, return matrix A over Z and denominator d, such that the rows of (1/d)A are the entries of the quaternions.

INPUT:

  • v – list of quaternions in a rational quaternion algebra

  • reverse – whether order of the coordinates as well as the order of the list v should be reversed

OUTPUT:

  • a matrix over Z

  • an integer (the common denominator)

EXAMPLES:

sage: A.<i,j,k>=QuaternionAlgebra(-4,-5)
sage: sage.algebras.quatalg.quaternion_algebra_cython.integral_matrix_and_denom_from_rational_quaternions([i/2,1/3+j+k])
(
[0 3 0 0]
[2 0 6 6], 6
)

sage: sage.algebras.quatalg.quaternion_algebra_cython.integral_matrix_and_denom_from_rational_quaternions([i/2,1/3+j+k], reverse=True)
(
[6 6 0 2]
[0 0 3 0], 6
)
>>> from sage.all import *
>>> A = QuaternionAlgebra(-Integer(4),-Integer(5), names=('i', 'j', 'k',)); (i, j, k,) = A._first_ngens(3)
>>> sage.algebras.quatalg.quaternion_algebra_cython.integral_matrix_and_denom_from_rational_quaternions([i/Integer(2),Integer(1)/Integer(3)+j+k])
(
[0 3 0 0]
[2 0 6 6], 6
)

>>> sage.algebras.quatalg.quaternion_algebra_cython.integral_matrix_and_denom_from_rational_quaternions([i/Integer(2),Integer(1)/Integer(3)+j+k], reverse=True)
(
[6 6 0 2]
[0 0 3 0], 6
)
A.<i,j,k>=QuaternionAlgebra(-4,-5)
sage.algebras.quatalg.quaternion_algebra_cython.integral_matrix_and_denom_from_rational_quaternions([i/2,1/3+j+k])
sage.algebras.quatalg.quaternion_algebra_cython.integral_matrix_and_denom_from_rational_quaternions([i/2,1/3+j+k], reverse=True)
sage.algebras.quatalg.quaternion_algebra_cython.rational_matrix_from_rational_quaternions(v, reverse=False)[source]

Return matrix over the rationals whose rows have entries the coefficients of the rational quaternions in v.

INPUT:

  • v – list of quaternions in a rational quaternion algebra

  • reverse – whether order of the coordinates as well as the order of the list v should be reversed

OUTPUT: a matrix over Q

EXAMPLES:

sage: A.<i,j,k>=QuaternionAlgebra(-4,-5)
sage: sage.algebras.quatalg.quaternion_algebra_cython.rational_matrix_from_rational_quaternions([i/2,1/3+j+k])
[  0 1/2   0   0]
[1/3   0   1   1]

sage: sage.algebras.quatalg.quaternion_algebra_cython.rational_matrix_from_rational_quaternions([i/2,1/3+j+k], reverse=True)
[  1   1   0 1/3]
[  0   0 1/2   0]
>>> from sage.all import *
>>> A = QuaternionAlgebra(-Integer(4),-Integer(5), names=('i', 'j', 'k',)); (i, j, k,) = A._first_ngens(3)
>>> sage.algebras.quatalg.quaternion_algebra_cython.rational_matrix_from_rational_quaternions([i/Integer(2),Integer(1)/Integer(3)+j+k])
[  0 1/2   0   0]
[1/3   0   1   1]

>>> sage.algebras.quatalg.quaternion_algebra_cython.rational_matrix_from_rational_quaternions([i/Integer(2),Integer(1)/Integer(3)+j+k], reverse=True)
[  1   1   0 1/3]
[  0   0 1/2   0]
A.<i,j,k>=QuaternionAlgebra(-4,-5)
sage.algebras.quatalg.quaternion_algebra_cython.rational_matrix_from_rational_quaternions([i/2,1/3+j+k])
sage.algebras.quatalg.quaternion_algebra_cython.rational_matrix_from_rational_quaternions([i/2,1/3+j+k], reverse=True)
sage.algebras.quatalg.quaternion_algebra_cython.rational_quaternions_from_integral_matrix_and_denom(A, H, d, reverse=False)[source]

Given an integral matrix and denominator, returns a list of rational quaternions.

INPUT:

  • A – rational quaternion algebra

  • H – matrix over the integers

  • d – integer

  • reverse – whether order of the coordinates as well as the order of the list v should be reversed

OUTPUT:

  • list of H.nrows() elements of A

EXAMPLES:

sage: A.<i,j,k>=QuaternionAlgebra(-1,-2)
sage: f = sage.algebras.quatalg.quaternion_algebra_cython.rational_quaternions_from_integral_matrix_and_denom
sage: f(A, matrix([[1,2,3,4],[-1,2,-4,3]]), 3)
[1/3 + 2/3*i + j + 4/3*k, -1/3 + 2/3*i - 4/3*j + k]

sage: f(A, matrix([[3,-4,2,-1],[4,3,2,1]]), 3, reverse=True)
[1/3 + 2/3*i + j + 4/3*k, -1/3 + 2/3*i - 4/3*j + k]
>>> from sage.all import *
>>> A = QuaternionAlgebra(-Integer(1),-Integer(2), names=('i', 'j', 'k',)); (i, j, k,) = A._first_ngens(3)
>>> f = sage.algebras.quatalg.quaternion_algebra_cython.rational_quaternions_from_integral_matrix_and_denom
>>> f(A, matrix([[Integer(1),Integer(2),Integer(3),Integer(4)],[-Integer(1),Integer(2),-Integer(4),Integer(3)]]), Integer(3))
[1/3 + 2/3*i + j + 4/3*k, -1/3 + 2/3*i - 4/3*j + k]

>>> f(A, matrix([[Integer(3),-Integer(4),Integer(2),-Integer(1)],[Integer(4),Integer(3),Integer(2),Integer(1)]]), Integer(3), reverse=True)
[1/3 + 2/3*i + j + 4/3*k, -1/3 + 2/3*i - 4/3*j + k]
A.<i,j,k>=QuaternionAlgebra(-1,-2)
f = sage.algebras.quatalg.quaternion_algebra_cython.rational_quaternions_from_integral_matrix_and_denom
f(A, matrix([[1,2,3,4],[-1,2,-4,3]]), 3)
f(A, matrix([[3,-4,2,-1],[4,3,2,1]]), 3, reverse=True)