1 | initial version |

Try

```
ZZ(y).inverse_mod(p)
```

2 | No.2 Revision |

~~Try~~If you define

```
y = np.int(tmp)
```

then do

```
ZZ(y).inverse_mod(p)
```

Better: directly define

```
y = ZZ(tmp)
```

and then do

```
y.inverse_mod(p)
```

3 | No.3 Revision |

~~If ~~(Edited to answer the follow-up question posted as a comment.)

Your code uses numpy, which uses Python's `int`

type.

Sage has its own type of integers, in addition to Python integers.

Sage methods such as `inverse_mod`

are implemented for Sage integers, not Python integers.

You can convert a Python integer `k`

to a Sage integer by calling `Integer(k)`

or `ZZ(k)`

.

So, if you ~~define~~define, as in your code,

```
y = np.int(tmp)
```

then ~~do~~change the last line to

```
ZZ(y).inverse_mod(p)
```

Better: directly define

```
y = ZZ(tmp)
```

and then do

```
y.inverse_mod(p)
```

Now, you might want to avoid numpy altogether and work with native Sage matrices and vectors.

You can initialize a matrix or vector by specifying the base ring (eg ZZ, QQ, etc), the dimension, and the entries. If you don't provide entries, you get a zero matrix or vector. Matrices and vectors are mutable by default.

Rows, columns, and vector components are indexed from 0 rather than 1.

```
sage: a = matrix(ZZ, 3)
sage: a
[0 0 0]
[0 0 0]
[0 0 0]
sage: a[0, 0] = 4
sage: a
[4 0 0]
[0 0 0]
[0 0 0]
sage: v = vector(ZZ, 3)
sage: v
(0, 0, 0)
sage: v[1] = 2
sage: v
(0, 2, 0)
sage: a * v
(0, 0, 0)
```

You can find lots more information and examples in the documentation and tutorials, eg

http://doc.sagemath.org/html/en/tutorial/tour_linalg.html

See also the quick reference manual

https://wiki.sagemath.org/quickref?action=AttachFile&do=get&target=quickref-linalg.pdf

or query your favourite web search engine for [sagemath linear algebra].

Copyright Sage, 2010. Some rights reserved under creative commons license. Content on this site is licensed under a Creative Commons Attribution Share Alike 3.0 license.