Recent Releases of libeantic

libeantic - 2.1.0

Added:

  • Added functions renf_elem_addmul and renf_elem_submul to compute res += a * b and res -= a * b with fewer temporaries. In the C++ interface, these methods are called iaddmul and isubmul.

Changed:

  • Changed the documentation build to use breathe & sphinx instead of standardese & sphinx.
  • Changed the recommended setup for developers to use pixi instead of conda/mamba. See the README for details.
  • Changed configure to not complain when test-requirements such as byexample, benchmark, realalg, or SageMath are missing. (The tests are included if the dependencies are detected but just disabled otherwise without the need for --without-byexample --without-benchmark --without-sage --without-realalg.)

Removed:

  • Removed binder demo from our README (we do not think that anybody has been using it never really worked great.)

Fixed:

  • Fixed build issues with FLINT 3.2.2.
  • Fixed dependency tracking when configure is rerun with different compiler flags by tracking config.h in all source files.

- C
Published by saraedum 10 months ago

libeantic - 2.0.2

Fixed:

  • Fixed exception being thrown by PyPy due to https://github.com/wlav/cppyy/issues/209.

- C
Published by saraedum about 2 years ago

libeantic - 2.0.1

Fixed:

  • Fixed segfault when using non-intrusive pointers to renf_class such as the ones returned by parent() from Python.
  • Fixed compilation with GCC 13.2.1.

- C
Published by saraedum about 2 years ago

libeantic - 2.0.0

There are no API changes in this major release. But there are breaking ABI changes.

Added:

  • Added tarball with the built documentation to our GitHub release pages with every future release of e-antic.
  • Added support for FLINT 3. (This is a breaking ABI change. A library built against FLINT 3 is not compatible with a library built against FLINT 2. You can still build against FLINT 2 and such a library should be compatible with the previous version 1.3.0.)

Removed:

  • Removed the static library from the conda package that we upload with every commit to the master branch to the flatsurf channel. To our knowledge nobody is using these builds. They can sometimes be useful for debugging because they are built with debug symbols (which is why they are very big.) Providing a static library that nobody should use anyway is eating up the limited storage on anaconda.org twice as fast so we disable this.

Fixed:

  • Adapted CI setup on GitHub to changes in setup-miniconda.
  • Fixed some typos in source code, documentation, and error messages.
  • Improved environment.yml files for development to not pull in any incompatible dependencies from PyPI silently
  • Fixed compiler warning about possibly uninitialized variable.

- C
Published by saraedum about 2 years ago

libeantic - 1.3.0

Added:

  • Added support for FLINT 2.8 and 2.9
  • Added short and unsigned short operators to C++ interface.

- C
Published by saraedum over 3 years ago

libeantic - 1.2.3

Added:

  • Added automatic update on conda-forge with every release.

Fixed:

  • Fixed soname which was not bumped in the 1.2.2 release.

- C
Published by saraedum over 3 years ago

libeantic - 1.2.2

Fixed:

  • Fixed conda channels used for binder notebooks.
  • Fixed compilation errors on recent compilers by upgrading catch2 dependency used for testing.
  • Fixed deserialization of renf_class from old Python pickles. (#242 sometimes crashed when called from Python since cppyy had trouble with the exceptions being thrown.)
  • Fixed "installation with conda" page in our documentation (#240)
  • Added logo to documentation. (#239)
  • Fixed serialization with cereal 1.3.1+.
  • Fixed compiler warnings about missing prototypes for test functions.

- C
Published by saraedum over 3 years ago

libeantic - 1.2.1

Fixed:

  • Fixed serialization of renf_class with cereal>=1.3.2 (#224)

  • Fixed deserialization of objects serialized with e-antic prior to 1.0.0

- C
Published by saraedum almost 4 years ago

libeantic - 1.2.0

Performance:

  • Improved conversion from vectors of rational coefficients to renf_elem_class by using a faster code path in FLINT.

  • Improved conversion from SageMath number fields to pyeantic RealEmbeddedNumberField. This adds a dependency of pyeantic on gmpxxyy.

- C
Published by saraedum almost 4 years ago

libeantic - 1.1.1

Deprecated:

  • Deprecated arithmetic between elements in different number fields in the C++ interface. Before, an operation such as a + b was possible even if a and b lived in different number fields if at least one of them was actually a rational number. This led to inconsistent parent fields of the resulting element. We still allow such operations if the parent of a or b is the rational field (renf_class::make()) otherwise a deprecation warning is printed. To fully opt in to the new behaviour set the environment variable LIBEANTIC_STRICT_BINOP to any value; this raises an exception instead of printing a warning.

Fixed:

  • Fixed a compilation error on some xenial systems.
  • Fixed import order in pyeantic's setup.py script.
  • Fixed inclusion of .map files in distribution tarball even if building without version script support.

Performance:

  • Improved performance of RealEmbeddedNumberField in Python interface by caching results. In particular the costly conversion from renf_class.

- C
Published by saraedum almost 4 years ago

libeantic - 1.1.0

Added:

  • automatic integration checks for Normaliz
  • Added support for Python 3.10; we are now automatically testing pyeantic with Python 3.10.
  • Added renf_class that uses a root with dynamic precision. (Makes it easier to specify a root when the roots of the minimal polynomial are very close to each other.)

Changed:

  • We do not claim anymore that _cmp functions return -1, 0, 1. Instead we only make a statement about the sign of the integer returned. In practice we still return -1, 0, 1 for the time being.
  • Header file e-antic.h is now called local.h. There is still a header file e-antic.h that includes all of e-antic's C interface, so in particular local.h.
  • Header file renfxx_fwd.hpp is now called forward.hpp. The old header file renfxx_fwd.hpp can still be used.
  • Header file renfxx.h is now called e-antic.hpp. The old header file renfxx.h can still be used.
  • Dropped explicit support for Python 3.6 which has reached its end of life. It should still work but we are not testing it explicitly in our CI anymore.

Fixed:

  • We do not assume anymore that _cmp functions return -1, 0, 1. FLINT, GMP, and Arb only guarantee that these functions return a negative, zero, or positive integer. In practice their implementations return -1, 0, 1, however in some obscure case on Fedora/i686, this was not the case.
  • Removed unused includes that cannot be resolved on Windows.
  • Fixed a compiler warning on Fedora.
  • Improved the error message when arb headers cannot be found. Fedora installs the arb headers into /usr/include/arb instead of /usr/include.
  • Added missing LIBEANTIC_API declarators so building with -fvisibility=hidden produces a usable libeanticxx.so.
  • Updated installation instructions for installation from conda-forge. The e-antic package there has been renamed to libeantic. The package e-antic still exists but is now essentially an alias for libeantic and pyeantic.
  • Worked around doctesting issues in SageMath 9.4.
  • Fixed failing SageMath tests when pytest is installed.
  • Fixed construction of RealEmbeddedNumberField in Python when roots of the minimal polynomial are very close to each other.

- C
Published by saraedum about 4 years ago

libeantic - 1.0.3

This is purely a maintenance release to update some of our documentation. There are no functional changes to e-antic itself in this release.

Fixed:

  • Cleaned up the README and our Zenodo site.

  • Fixed linking of C++ test programs.

- C
Published by saraedum over 4 years ago

libeantic - 1.0.2

Fixed:

  • removed docbuild warnings for latest version of mkdocs.
  • Fixed parsing of trivial number fields in pyeantic. #197
  • Conversion from NumberField to RealEmbeddedNumberField when defining polynomial is not in x.

- C
Published by saraedum over 4 years ago

libeantic - 1.0.1

Fixed:

  • ./configure now checks for cppyythonizations which are required to run Python tests
  • allow creation of RealEmbeddedNumberField from an intrusive pointer in pyeantic.
  • Skip tests requiring realalg and sage when configured --without-realalg and --without-sage, respectively.
  • Disable pyeantic testing --without-pytest.

- C
Published by saraedum over 4 years ago

libeantic - 1.0.0

Package Maintainers:

e-antic 1.0.0 introduces breaking API and ABI changes to the C++ interface. The C interface should be compatible with previous 0.* versions of e-antic. However, we do not vendor antic anymore so lots of symbols disappear from the libeantic.so library. As a package maintainer it is probably best if you treat this as a breaking upgrade for both the C and the C++ library.

Added:

  • Added renf_class::construction() which produces the parameters that can be used to create a renf_class with renf_class::make().
  • Run CI on macOS & Linux
  • Added renf_class::get_pword to extract the number field set with renf_class::set_pword to ease migration of legacy code.
  • Added .map files so only API symbols get exported when running ./configure --with-version-script.
  • Added visibility attributes to header files; this will be necessary on Windows and allows compilation with -fvisibility=hidden
  • Conda packages are now uploaded automatically to the flatsurf channel with every release.
  • Integrated the Python wrapper pyeantic into the e-antic repository
  • Added renf_elem_class::floordiv() to perform (a/b).floor() more efficiently
  • Floor division of renf_elem_t
  • Added the missing implementations of free floor, ceil, and pow functions to the C++ library.
  • Added renf_elem_swap(renf_elem_t, renf_elem_t)
  • There is now e-antic/renfxx_fwd.hpp if you only need forward declarations of renf_class and renf_elem_class.
  • renf_elem_class can now be created from signed and unsigned long long.
  • renf_elem_class can now be created from vectors of primitive integers, e.g., renf_elem_class x(K, {1, 2, 3}); // = 3*x^2 + 2*x + 1 where before the entries of the vector had to be mpz_class.
  • Move semantics && have been added to renf_elem_class.
  • There is now support for serialization with cereal. See t-cereal.cpp for examples on how to use it.
  • The release process has been automated with rever

Changed:

  • Split renfxx.h into renf_elem_class.hpp and renf_class.hpp headers. The original header still exists and simply includes the two novel headers.
  • Split the header e-antic/poly_extra.h into e-antic/fmpz_poly_extra.h and e-antic/fmpq_poly_extra.h. Typically, you do not want to include either of those as they are mostly meant to be used internally.
  • C++ Comparison operators of renf_elem_class are now free so they participate in implicit casts in the same way like the boost generated free operators that are derived from them.
  • The C++ interface now requires C++14.
  • All C++ classes are now declared in the namespace eantic.
  • The semantics of the C++ operator = have changed. In e-antic 0.1 the following would create the unit in the field K. renf_elem_class x(K); x = 1; Now the above statement makes x a rational number. More generally, an assignment resets the number field so that after x = y the condition x.nf == renf_elem_class(y).nf holds. To mimic the old behavior you need to rewrite the above as renf_elem_class x(K); x = renf_elem_class(K, 1);
  • The C++ renf_class is now hidden behind a factory to get smart pointer semantics everywhere. Create a renf_class by calling renf_class::make(…). This returns a smart pointer, so you might have to replace some . with ->.
  • The change of semantics in assignment also affects reading from streams (in order to create renf_elem_class). Before the following would parse an element into a number field: renf_elem_class x(K); in >> x; Now this only works if the stream contains a rational number. (Otherwise an exception is raised.) As in >> x also resets x.nf. The above code should be replaced with: renf_elem_class x; K.set_pword(in); in >> x;
  • string renf_class::gen_name is now a method so it needs to be called.
  • Many operations that threw an exception before when domains were mixed, now abort program execution (typically through a call to assert().) You are not supposed to mix domains unless explicitly stated otherwise.
  • renf_class.operator== now also checks that the generator name is the same. Similarly, renf_class.operator= now also resets the generator name.
  • Changed renf_elem generator in C++ unit tests to always start with the zero element since it probably does not get generated by chance and can obviously cause a lot of trouble.

Deprecated:

  • Some methods have been deprecated and might be removed in a future release, mostly to make the interface more consistent. The deprecation warnings give hints which methods to use instead.

Removed:

  • renf_elem_class(string&) has been removed. If you want to parse a rational number, use renf_elem_class(mpq_class(string)). If you want to parse into a number field, use renf_elem_class(renf_class&, string&).
  • renf_elem_class::operator=(string&) has been removed. If you want to parse a rational into an element, use x = mpq_class(string). If you want to parse into a number field, use x = renf_elem_class(x.parent(), string).
  • renf_elem_class(vector<...>) have been removed as it would have thrown an exception always anyway.
  • renf_elem_class::operator=(vector<...>) have been removed due to the change of semantics of =. If x is not a rational you get the same behaviour as before with x = renf_elem_class(x.parent(), {1, 2, 3}).
  • renf_class::xalloc() has been removed and replaced by an implementation detail.

Fixed:

  • Compatible with FLINT 2.7
  • Removed dependency of renfxx_cereal.h on Arb and FLINT, i.e., one does not need to -larb -lflint anymore when using cereal.
  • Set pins in Conda packages as they are in https://github.com/conda-forge/conda-forge-pinning-feedstock
  • E_ANTIC_RELEASE now reports the correct version number, i.e., 10000.
  • e-antic had claimed to be thread safe via an open MP pragma (in the number field refinement). In some cases, there was a problem with thread-safety. We now require users to explicitly mark multithreaded sections by forbidding mutations to a renf, see renf_set_immutable. As a result, there are some operations that cannot be done anymore in a multi-threaded environment but they now fail properly (instead of leading to random crashes.)

Performance:

  • Speed up arithmetic between renf_elem_class in C++ interface.
  • Speed up creation of trivial number fields by a factor of seven.
  • Speed up renf_class::operator==

- C
Published by saraedum over 4 years ago

libeantic - 1.0.0-rc.16

Fixed:

  • Fixed arithmetic with rationals in different number fields.

- C
Published by saraedum over 4 years ago

libeantic - 1.0.0-rc.15

Fixed:

  • Made lexical_cast include work with more versions of boost.

- C
Published by saraedum over 4 years ago

libeantic - 1.0.0-rc.14

Changed:

  • Split renfxx.h into renf_elem_class.hpp and renf_class.hpp headers. The original header still exists and simply includes the two novel headers.

Performance:

  • Speed up arithmetic between renf_elem_class in C++ interface.
  • Speed up creation of trivial number fields by a factor of seven.

- C
Published by saraedum over 4 years ago

libeantic - 1.0.0-rc.13

Added:

  • Added renf_class::construction() which produces the parameters that can be used to create a renf_class with renf_class::make().

Fixed:

  • compatible with FLINT 2.7
  • Removed dependency of renfxx_cereal.h on arb and FLINT, i.e., one does not need to -larb -lflint anymore when using cereal.

- C
Published by saraedum about 5 years ago

libeantic - 1.0.0-rc.12

Added:

  • run CI on macOS & Linux
  • added renf_class::get_pword to extract the number field set with renf_class::set_pword to ease migration of legacy code.
  • added .map files so only API symbols get exported when running ./configure --with-version-script.
  • added visibility attributes to header files; this will be necessary on Windows and allows compilation with -fvisibility=hidden

Fixed:

  • set pins in conda packages as they are in https://github.com/conda-forge/conda-forge-pinning-feedstock
  • adapt to changes in cppyy 1.9.0
  • E_ANTIC_RELEASE now reports the correct version number, i.e., 10000.

- C
Published by saraedum about 5 years ago

libeantic - 1.0.0-rc.11

Fixed:

  • fixed pyeantic version bump in rever script

- C
Published by saraedum about 5 years ago

libeantic - 1.0.0-rc.10

Added:

  • Conda packages are now uploaded automatically to the flatsurf channel with every release.
  • integrated pyeantic into the e-antic repository

- C
Published by saraedum about 5 years ago

libeantic - 1.0.0-rc.9

Changed:

  • Split the header e-antic/poly_extra.h into e-antic/fmpz_poly_extra.h and e-antic/fmpq_poly_extra.h. Typically, you do not want to include either of those as they are mostly meant to be used internally.

Fixed:

  • Either side of a floor division may now be rational.

- C
Published by saraedum about 5 years ago

libeantic - 1.0.0-rc.8

Added:

  • renf_elem_class::floordiv() to perform (a/b).floor() more efficiently

Changed:

  • changed renf_elem generator to always start with the zero element since it probably does not get generated by chance and can obviously cause a lot of trouble.

- C
Published by saraedum over 5 years ago

libeantic - 1.0.0-rc.7

Fixed:

  • Fixes a bug in floor division.

- C
Published by saraedum over 5 years ago

libeantic - 1.0.0-rc.6

This release is identical to rc.7 but somehow the tarball was not created here.

- C
Published by saraedum over 5 years ago

libeantic - 1.0.0-rc.5

Added:

  • floor division of renf_elem_t
  • added the missing implementations of free floor, ceil, and pow functions to the C++ library.

Changed:

  • simplified testing of binary operators
  • Comparison operators of renf_elem_class are now free so they participate in implicit casts in the same way like the boost generated free operators that are derived from them.

Fixed:

  • Adapted to changes in unique-factory.
  • implemented renf_elem_class(renf_class, std::vector) constructors that went missing in 39e1215e421e128b230fb62ff88ae0ac9b6414e7.

Performance:

  • Speed up renf_class::operator==

- C
Published by saraedum over 5 years ago

libeantic - 1.0.0-rc.4

Added:

  • added the missing implementations of free floor, ceil, and pow functions to the C++ library.

Changed:

  • Comparison operators of renf_elem_class are now free so they participate in implicit casts in the same way like the boost generated free operators that are derived from them.

Fixed:

  • Adapted to changes in unique-factory.
  • implemented renf_elem_class(renf_class, std::vector) constructors that went missing in 39e1215e421e128b230fb62ff88ae0ac9b6414e7.

Performance:

  • Speed up renf_class::operator==

- C
Published by saraedum over 5 years ago

libeantic - 1.0.0-rc.3

Fixed:

  • release tarball was missing some header files with long names

- C
Published by saraedum over 5 years ago

libeantic - 1.0.0-rc.2

Added:

  • renf_elem_swap(renf_elem_t, renf_elem_t)
  • There is now e-antic/renfxx_fwd.h if you only need forward declarations of renf_class and renf_elem_class.
  • renf_elem_class can now be created from signed and unsigned long long.
  • renf_elem_class can now be created from vectors of primitive integers, e.g., renf_elem_class x(K, {1, 2, 3}); // = 3*x^2 + 2*x + 1 where before the entries of the vector had to be mpz_class.
  • Move semantics && have been added to renf_elem_class.
  • There is now support for serialization with cereal. See t-cereal.cpp for examples on how to use it.
  • the release process has been automated with rever

Changed:

  • e-antic/renfxx.h now requires C++17.
  • All classes are now declared in the namespace eantic.
  • The semantics of operator = have changed. In e-antic 0.1 the following would create the unit in the field K. renf_elem_class x(K); x = 1; Now the above statement makes x a rational number. More generally, an assignment resets the number field so that after x = y the condition x.nf == renf_elem_class(y).nf holds. To mimic the old behavior you need to rewrite the above as renf_elem_class x(K); x = renf_elem_class(K, 1);
  • renf_class is now hidden behind a factory to get sharedptr semantics everywhere. Create a `renfclassby callingrenf_class::make(…). This returns a smart pointer, so you might have to replace some.with->`.
  • The change of semantics in assignment also affects reading from streams (in order to create renf_elem_class). Before the following would parse an element into a number field: renf_elem_class x(K); in >> x; Now this only works if the stream contains a rational number. (Otherwise an exception is raised.) As in >> x also resets x.nf. The above code should be replaced with: renf_elem_class x; K.set_pword(in); in >> x;
  • string renf_class::gen_name is now a method so it needs to be called.
  • Many operations that threw an exception before when domains were mixed, now abort program execution (typically through a call to assert().) You are not supposed to mix domains unless explicitly stated otherwise.
  • renf_class.operator== now also checks that the generator name is the same. Similarly, renf_class.operator= now also resets the generator name.

Deprecated:

  • Some methods have been deprecated and might be removed in a future release, mostly to make the interface more consistent. The deprecation warnings give hints which methods to use instead.

Removed:

  • renf_elem_class(string&) has been removed. If you want to parse a rational number, use renf_elem_class(mpq_class(string)). If you want to parse into a number field, use renf_elem_class(renf_class&, string&).
  • renf_elem_class::operator=(string&) has been removed. If you want to parse a rational into an element, use x = mpq_class(string). If you want to parse into a number field, use x = renf_elem_class(x.parent(), string).
  • renf_elem_class(vector<...>) have been removed as it would have thrown an exception always anyway.
  • renf_elem_class::operator=(vector<...>) have been removed due to the change of semantics of =. If x is not a rational you get the same behaviour as before with x = renf_elem_class(x.parent(), {1, 2, 3}).
  • renf_class::xalloc() has been removed and replaced by an implementation detail.

Fixed:

  • e-antic had claimed to be thread safe via an open MP pragma (in the number field refinement). In some cases, there was a problem with thread-safety. We now require users to explicitly mark multithreaded sections by forbidding mutations to a renf, see renf_set_immutable. As a result, there are some operations that cannot be done anymore in a multi-threaded environment but they now fail properly (instead of leading to random crashes.)

- C
Published by saraedum over 5 years ago