# Cremona matrices#

class sage.libs.eclib.mat.Matrix[source]#

Bases: `object`

A Cremona Matrix.

EXAMPLES:

```sage: M = CremonaModularSymbols(225)
sage: t = M.hecke_matrix(2)
sage: type(t)
<class 'sage.libs.eclib.mat.Matrix'>
sage: t
61 x 61 Cremona matrix over Rational Field
```
```>>> from sage.all import *
>>> M = CremonaModularSymbols(Integer(225))
>>> t = M.hecke_matrix(Integer(2))
>>> type(t)
<class 'sage.libs.eclib.mat.Matrix'>
>>> t
61 x 61 Cremona matrix over Rational Field
```

Return new matrix obtained by adding s to each diagonal entry of self.

EXAMPLES:

```sage: M = CremonaModularSymbols(23, cuspidal=True, sign=1)
sage: t = M.hecke_matrix(2); print(t.str())
[ 0  1]
[ 1 -1]
sage: w = t.add_scalar(3); print(w.str())
[3 1]
[1 2]
```
```>>> from sage.all import *
>>> M = CremonaModularSymbols(Integer(23), cuspidal=True, sign=Integer(1))
>>> t = M.hecke_matrix(Integer(2)); print(t.str())
[ 0  1]
[ 1 -1]
>>> w = t.add_scalar(Integer(3)); print(w.str())
[3 1]
[1 2]
```
charpoly(var='x')[source]#

Return the characteristic polynomial of this matrix, viewed as as a matrix over the integers.

ALGORITHM:

Note that currently, this function converts this matrix into a dense matrix over the integers, then calls the charpoly algorithm on that, which I think is LinBox’s.

EXAMPLES:

```sage: M = CremonaModularSymbols(33, cuspidal=True, sign=1)
sage: t = M.hecke_matrix(2)
sage: t.charpoly()
x^3 + 3*x^2 - 4
sage: t.charpoly().factor()
(x - 1) * (x + 2)^2
```
```>>> from sage.all import *
>>> M = CremonaModularSymbols(Integer(33), cuspidal=True, sign=Integer(1))
>>> t = M.hecke_matrix(Integer(2))
>>> t.charpoly()
x^3 + 3*x^2 - 4
>>> t.charpoly().factor()
(x - 1) * (x + 2)^2
```
ncols()[source]#

Return the number of columns of this matrix.

EXAMPLES:

```sage: M = CremonaModularSymbols(1234, sign=1)
sage: t = M.hecke_matrix(3); t.ncols()
156
sage: M.dimension()
156
```
```>>> from sage.all import *
>>> M = CremonaModularSymbols(Integer(1234), sign=Integer(1))
>>> t = M.hecke_matrix(Integer(3)); t.ncols()
156
>>> M.dimension()
156
```
nrows()[source]#

Return the number of rows of this matrix.

EXAMPLES:

```sage: M = CremonaModularSymbols(19, sign=1)
sage: t = M.hecke_matrix(13); t
2 x 2 Cremona matrix over Rational Field
sage: t.nrows()
2
```
```>>> from sage.all import *
>>> M = CremonaModularSymbols(Integer(19), sign=Integer(1))
>>> t = M.hecke_matrix(Integer(13)); t
2 x 2 Cremona matrix over Rational Field
>>> t.nrows()
2
```
sage_matrix_over_ZZ(sparse=True)[source]#

Return corresponding Sage matrix over the integers.

INPUT:

• `sparse` – (default: `True`) whether the return matrix has a sparse representation

EXAMPLES:

```sage: M = CremonaModularSymbols(23, cuspidal=True, sign=1)
sage: t = M.hecke_matrix(2)
sage: s = t.sage_matrix_over_ZZ(); s
[ 0  1]
[ 1 -1]
sage: type(s)
<class 'sage.matrix.matrix_integer_sparse.Matrix_integer_sparse'>
sage: s = t.sage_matrix_over_ZZ(sparse=False); s
[ 0  1]
[ 1 -1]
sage: type(s)
<class 'sage.matrix.matrix_integer_dense.Matrix_integer_dense'>
```
```>>> from sage.all import *
>>> M = CremonaModularSymbols(Integer(23), cuspidal=True, sign=Integer(1))
>>> t = M.hecke_matrix(Integer(2))
>>> s = t.sage_matrix_over_ZZ(); s
[ 0  1]
[ 1 -1]
>>> type(s)
<class 'sage.matrix.matrix_integer_sparse.Matrix_integer_sparse'>
>>> s = t.sage_matrix_over_ZZ(sparse=False); s
[ 0  1]
[ 1 -1]
>>> type(s)
<class 'sage.matrix.matrix_integer_dense.Matrix_integer_dense'>
```
str()[source]#

Return full string representation of this matrix, never in compact form.

EXAMPLES:

```sage: M = CremonaModularSymbols(22, sign=1)
sage: t = M.hecke_matrix(13)
sage: t.str()
'[14  0  0  0  0]\n[-4 12  0  8  4]\n[ 0 -6  4 -6  0]\n[ 4  2  0  6 -4]\n[ 0  0  0  0 14]'
```
```>>> from sage.all import *
>>> M = CremonaModularSymbols(Integer(22), sign=Integer(1))
>>> t = M.hecke_matrix(Integer(13))
>>> t.str()
'[14  0  0  0  0]\n[-4 12  0  8  4]\n[ 0 -6  4 -6  0]\n[ 4  2  0  6 -4]\n[ 0  0  0  0 14]'
```
class sage.libs.eclib.mat.MatrixFactory#

Bases: `object`