Changes for gmpy2 releases

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.
  • In previous versions of gmpy2, gmpy2.mpz was a factory function that returned an mpz instance. gmpy2.mpz 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 to allow static linking.
  • Fix performance regression with mpmath and Python 3.

Changes in gmpy2 2.0.3

  • Fix lucas2() and atanh(); they were returning incorrect values.

Changes in gmpy2 2.0.2

  • Rebuild Windows binary installers due to MPIR 2.6.0 bug in next_prime().
  • Another fix for is_extra_strong_lucas_prp().

Changes in gmpy2 2.0.1

  • Updated 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 specifically for mpmath.)
  • Improved 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. 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/ is incomplete and some tests fail on Python 2.x due to formating issues.

Changes in gmpy2 2.0.0b3

  • mp_version(), mpc_version(), and mpfr_version() now return normal strings on Python 2.x instead of Unicode strings.
  • Faster conversion of the standard library Fraction type to mpq.
  • Improved conversion of the Decimal type to mpfr.
  • Consistently return OverflowError when converting “inf”.
  • Fix mpz.__format__() when the format code includes “#”.
  • Add is_infinite() and deprecate is_inf().
  • Add is_finite() and deprecate is_number().
  • Fixed the various is_XXX() tests when used with mpc.
  • Added caching for mpc objects.
  • Faster code path for basic operation is both operands are mpfr or mpc.
  • Fix mpfr + float segmentation fault.

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 floats.
  • 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.