Recent Releases of libeantic
libeantic - 2.1.0
Added:
- Added functions
renf_elem_addmulandrenf_elem_submulto computeres += a * bandres -= a * bwith fewer temporaries. In the C++ interface, these methods are callediaddmulandisubmul.
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
configureto 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
configureis rerun with different compiler flags by tracking config.h in all source files.
- C
Published by saraedum 10 months 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.ymlfiles 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.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.0
Performance:
Improved conversion from vectors of rational coefficients to
renf_elem_classby 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 + bwas possible even ifaandblived 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 ofaorbis the rational field (renf_class::make()) otherwise a deprecation warning is printed. To fully opt in to the new behaviour set the environment variableLIBEANTIC_STRICT_BINOPto 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
RealEmbeddedNumberFieldin Python interface by caching results. In particular the costly conversion fromrenf_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_classthat 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
_cmpfunctions 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.his now calledlocal.h. There is still a header filee-antic.hthat includes all of e-antic's C interface, so in particularlocal.h. - Header file
renfxx_fwd.hppis now calledforward.hpp. The old header filerenfxx_fwd.hppcan still be used. - Header file
renfxx.his now callede-antic.hpp. The old header filerenfxx.hcan 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
_cmpfunctions 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_APIdeclarators so building with-fvisibility=hiddenproduces 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-anticstill exists but is now essentially an alias forlibeanticandpyeantic. - Worked around doctesting issues in SageMath 9.4.
- Fixed failing SageMath tests when pytest is installed.
- Fixed construction of
RealEmbeddedNumberFieldin Python when roots of the minimal polynomial are very close to each other.
- C
Published by saraedum about 4 years ago
libeantic - 1.0.1
Fixed:
./configurenow checks for cppyythonizations which are required to run Python tests- allow creation of
RealEmbeddedNumberFieldfrom 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 arenf_classwithrenf_class::make(). - Run CI on macOS & Linux
- Added
renf_class::get_pwordto extract the number field set withrenf_class::set_pwordto ease migration of legacy code. - Added
.mapfiles 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, andpowfunctions to the C++ library. - Added
renf_elem_swap(renf_elem_t, renf_elem_t) - There is now
e-antic/renfxx_fwd.hppif you only need forward declarations ofrenf_classandrenf_elem_class. renf_elem_classcan now be created from signed and unsigned long long.renf_elem_classcan now be created from vectors of primitive integers, e.g.,renf_elem_class x(K, {1, 2, 3}); // = 3*x^2 + 2*x + 1where before the entries of the vector had to bempz_class.- Move semantics
&&have been added torenf_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.hintorenf_elem_class.hppandrenf_class.hppheaders. The original header still exists and simply includes the two novel headers. - Split the header
e-antic/poly_extra.hintoe-antic/fmpz_poly_extra.hande-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_classare 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 afterx = ythe conditionx.nf == renf_elem_class(y).nfholds. To mimic the old behavior you need to rewrite the above asrenf_elem_class x(K); x = renf_elem_class(K, 1); - The C++
renf_classis now hidden behind a factory to get smart pointer semantics everywhere. Create arenf_classby 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.) Asin >> xalso resetsx.nf. The above code should be replaced with:renf_elem_class x; K.set_pword(in); in >> x; string renf_class::gen_nameis 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, userenf_elem_class(mpq_class(string)). If you want to parse into a number field, userenf_elem_class(renf_class&, string&).renf_elem_class::operator=(string&)has been removed. If you want to parse a rational into an element, usex = mpq_class(string). If you want to parse into a number field, usex = 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=. Ifxis not a rational you get the same behaviour as before withx = 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.hon Arb and FLINT, i.e., one does not need to-larb -lflintanymore when using cereal. - Set pins in Conda packages as they are in https://github.com/conda-forge/conda-forge-pinning-feedstock
E_ANTIC_RELEASEnow 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_classin 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.hintorenf_elem_class.hppandrenf_class.hppheaders. The original header still exists and simply includes the two novel headers.
Performance:
- Speed up arithmetic between
renf_elem_classin 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 arenf_classwithrenf_class::make().
Fixed:
- compatible with FLINT 2.7
- Removed dependency of
renfxx_cereal.hon arb and FLINT, i.e., one does not need to-larb -lflintanymore 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_pwordto extract the number field set withrenf_class::set_pwordto ease migration of legacy code. - added
.mapfiles 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_RELEASEnow 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.hintoe-antic/fmpz_poly_extra.hande-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, andpowfunctions to the C++ library.
Changed:
- simplified testing of binary operators
- Comparison operators of
renf_elem_classare 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, andpowfunctions to the C++ library.
Changed:
- Comparison operators of
renf_elem_classare 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.hif you only need forward declarations ofrenf_classandrenf_elem_class. renf_elem_classcan now be created from signed and unsigned long long.renf_elem_classcan now be created from vectors of primitive integers, e.g.,renf_elem_class x(K, {1, 2, 3}); // = 3*x^2 + 2*x + 1where before the entries of the vector had to bempz_class.- Move semantics
&&have been added torenf_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.hnow 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 afterx = ythe conditionx.nf == renf_elem_class(y).nfholds. To mimic the old behavior you need to rewrite the above asrenf_elem_class x(K); x = renf_elem_class(K, 1); renf_classis 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.) Asin >> xalso resetsx.nf. The above code should be replaced with:renf_elem_class x; K.set_pword(in); in >> x; string renf_class::gen_nameis 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, userenf_elem_class(mpq_class(string)). If you want to parse into a number field, userenf_elem_class(renf_class&, string&).renf_elem_class::operator=(string&)has been removed. If you want to parse a rational into an element, usex = mpq_class(string). If you want to parse into a number field, usex = 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=. Ifxis not a rational you get the same behaviour as before withx = 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