Release Notes

Changes in gmpy2 2.2.0

  • Added prev_prime() when GMP >= 6.3

Changes in gmpy2 2.1.0rc2

  • Documentation updates.

  • Improvements to build environment.

Changes in gmpy2 2.1.0rc1

  • Added support for embedded underscore characters in string literals.

  • Allow GIL release for mpz/xmpz/mpq types only.

Changes in gmpy2 2.1.0b6

  • Improve argument type processing by saving type information to decrease the number of type check calls. Especially helpful for mpfr and mpc types. (Not complete but common operations are done.)

  • Resolve bug in mpfr to mpq conversion; issue #287.

  • Added limited support for releasing the GIL; disabled by default; see context.allow_release_gil.

  • Refactored handling of inplace operations for mpz and xmpz types; inplace operations on xmpz will only return an xmpz result.

  • Refactored handling of conversion to C integer types. Some exception types changes to reflect Python types.

  • gcd() and lcm() now support more than two arguments to align with the corresponding functions in the math module.

Changes in gmpy2 2.1.0b5

  • Avoid MPFR bug in mfr_fac_ui (factorial()) on platforms where long is 32-bits and argument is >= 44787929.

  • Fixed testing bugs with Python 2.7.

  • Fixed mpz(0) to C long or long long.

  • Fixed incorrect results in f2q().

  • Adjust test suite to reflect changes in output in MPFR 4.1.0.

Changes in gmpy2 2.1.0b4

  • Fix comparisons with mpq and custom rational objects.

  • Fixes for some uncommon integer conversions scenarios.

Changes in gmpy2 2.1.0b3

  • Version bump only.

Changes in gmpy2 2.1.0b2

  • Many bug fixes.

Changes in gmpy2 2.1.0b1

Changes in gmpy2 2.1.a05

Changes in gmpy2 2.1.0a4

  • Fix issue 204; missing file for Cython.

  • Additional support for MPFR 4

Changes in gmpy2 2.1.0a3

  • Updates to setup.py.

  • Initial support for MPFR4

Changes in gmpy2 2.1.0a2

  • Revised build process.

  • Removal of unused code/macros.

  • Cleanup of Cython interface.

Changes in gmpy2 2.1.0a1

  • Thread-safe contexts are now supported. Properly integrating thread-safe contexts required an extensive rewrite of almost all internal functions.

  • MPFR and MPC are now required. It is no longer possible to build a version of gmpy2 that only supports the GMP library.

  • The function inverse() now raises an exception if the inverse does not exist.

  • Context methods have been added for MPFR/MPC related functions.

  • A new context option (rational_division) has been added that changes the behavior of integer division involving mpz instances to return a rational result instead of a floating point result.

  • gmpy2 types are now registered in the numeric tower of the numbers module.

  • In previous versions of gmpy2, mpz() was a factory function that returned an mpz instance. It is now an actual type. The same is true for the other gmpy2 types.

  • If a Python object has an __mpz__ method, it will be called bye mpz() to allow an unrecognized type to be converted to an mpz instance. The same is true for the other gmpy2 types.

  • A new C-API and Cython interface has been added.

Changes in gmpy2 2.0.4

  • Fix bit_scan0() for negative values.

  • Changes to setup.py to allow static linking.

  • Fix performance regression with mpmath and Python 3.

Changes in gmpy2 2.0.3

Changes in gmpy2 2.0.2

Changes in gmpy2 2.0.1

  • Updated setup.py to work in more situations.

  • Corrected exception handling in basic operations with mpfr type.

  • Correct InvalidOperation exception not raised in certain circumstances.

  • invert() now raises an exception if the modular inverse does not exist.

  • Fixed internal exception in is_bpsw_prp() and is_strong_bpsw_prp().

  • Updated is_extra_strong_lucas_prp() to latest version.

Changes in gmpy2 2.0.0

  • Fix segmentation fault in _mpmath_normalize() (an undocumented helper function for mpmath).

  • Improved setup.py. See below for documentation on the changes.

  • Fix issues when compiled without support for MPFR.

  • Conversion of too large an mpz to float now raises OverflowError instead of returning inf.

  • Renamed min2()/max2() to minnum()/maxnum()

  • The build and install process (i.e. setup.py) has been completely rewritten. See the Installation section for more information.

  • get_context() no longer accepts keyword arguments.

Known issues in gmpy2 2.0.0

  • The test suite is still incomplete.

Changes in gmpy2 2.0.0b4

  • Added __ceil__(), __floor__(), __trunc__(), and __round__() methods to mpz and mpq types.

  • Added __complex__() to mpc type.

  • round(mpfr) now correctly returns an mpz type.

  • If no arguments are given to mpz, mpq, mpfr, mpc, and xmpz, return 0 of the appropriate type.

  • Fix broken comparison between mpz and mpq when mpz is on the left.

  • Added __sizeof__() to all types. Note: sys.getsizeof() calls __sizeof__() to get the memory size of a gmpy2 object. The returned value reflects the size of the allocated memory which may be larger than the actual minimum memory required by the object.

Known issues in gmpy2 2.0.0b4

  • The new test suite (test/runtest.py) is incomplete and some tests fail on Python 2.x due to formatting issues.

Changes in gmpy2 2.0.0b3

Changes in gmpy2 2.0.0b2

  • Allow xmpz slice assignment to increase length of xmpz instance by specifying a value for stop.

  • Fixed reference counting bug in several is_xxx_prp() tests.

  • Added iter_bits(), iter_clear(), iter_set() methods to xmpz.

  • Added powmod() for easy access to three argument pow().

  • Removed addmul() and submul() which were added in 2.0.0b1 since they are slower than just using Python code.

  • Bug fix in gcd_ext when both arguments are not mpz.

  • Added ieee() to create contexts for 32, 64, or 128 bit float’s.

  • Bug fix in context() not setting emax/emin correctly if they had been changed earlier.

  • Contexts can be directly used in with statement without requiring set_context()/local_context() sequence.

  • local_context() now accepts an optional context.

Changes in gmpy2 2.0.0b1 and earlier

  • Renamed functions that manipulate individual bits to bit_XXX() to align with bit_length().

  • Added caching for mpq.

  • Added rootrem(), fib2(), lucas(), lucas2().

  • Support changed hash function in Python 3.2.

  • Added is_even(), is_odd().

  • Add caching of the calculated hash value.

  • Add xmpz (mutable mpz) type.

  • Fix mpq formatting issue.

  • Add read/write bit access using slices to xmpz.

  • Add read-only bit access using slices to mpz.

  • Add pack()/unpack() methods to split/join an integer into n-bit chunks.

  • Add support for MPFR (casevh)

  • Removed fcoform float conversion modifier.

  • Add support for MPC.

  • Added context manager.

  • Allow building with just GMP/MPIR if MPFR not available.

  • Allow building with GMP/MPIR and MPFR if MPC not available.

  • Removed most instance methods in favor of gmpy2.function. The general guideline is that properties of an instance can be done via instance methods but functions that return a new result are done using gmpy2.function.

  • Added __ceil__(), __floor__(), and __trunc__() methods since they are called by math.ceil(), math.floor(), and math.trunc().

  • Removed gmpy2.pow() to avoid conflicts.

  • Removed gmpy2._copy() and added xmpz.copy().

  • Added support for __format__().

  • Added as_integer_ratio(), as_mantissa_exp(), as_simple_fraction().

  • Updated rich_compare.

  • Require MPFR 3.1.0+ to get divby0 support.

  • Added fsum(), degrees(), radians().

  • Updated random number generation support.

  • Changed license to LGPL 3+.

  • Added lucasu(), lucasu_mod(), lucasv(), and lucasv_mod(). Based on code contributed by David Cleaver.

  • Added probable-prime tests. Based on code contributed by David Cleaver.

  • Added to_binary()/from_binary().

  • Renamed numdigits() to num_digits().

  • Added keyword precision to constants.

  • Added addmul() and submul().

  • Added __round__(), round2(), round_away() for mpfr.

  • round() is no longer a module level function.

  • Renamed module functions min()/max() to min2()/max2().

  • No longer conflicts with builtin min() and max()

  • Removed set_debug() and related functionality.