Conversion Methods

A python object could interact with gmpy2 if it implements one of the following methods:

  • __mpz__ : return an object of type mpz.

  • __mpq__ : return an object of type mpq.

  • __mpfr__ : return an object of type mpfr.

  • __mpc__ : return an object of type mpc.

Implementing on of these methods allow gmpy2 to convert a python object into a gmpy2 type. Example:

>>> from gmpy2 import mpz
>>> class CustInt:
...     def __init__(self, x):
...             self.x = x
...     def __mpz__(self):
...             return mpz(self.x)
...
>>> ci = CustInt(5)
>>> z = mpz(ci); z
mpz(5)
>>> type(z)
<class 'gmpy2.mpz'>

Arithmetic operations

gmpy2 allow arithmetic operations between gmpy2 numbers and objects with conversion methods. Operation with object that implements floating conversion and exact conversion methods are not supported. That means that only the following cases are supported:

  • An integer type have to implement __mpz__

  • A rational type have to implement __mpq__ and can implement __mpz__

  • A real type have to implement __mpfr__

  • A complex type have to implement __mpc__ and can implement __mpfr__

Examples:

>>> import gmpy2
>>> from gmpy2 import mpz, mpq, mpfr, mpc
>>> gmpy2.set_context(gmpy2.context())
>>> class Q:
...     def __mpz__(self): return mpz(1)
...     def __mpq__(self): return mpq(3,2)
>>> q = Q()
>>> mpz(2) + q
mpq(7,2)
>>> mpq(1,2) * q
mpq(3,4)
>>> mpfr(10) * q
mpfr('15.0')