Calcium 0.3

40 views
Skip to first unread message

Fredrik Johansson

unread,
Apr 23, 2021, 12:53:55 PM4/23/21
to flint-devel
Hi all,

I've tagged 0.3.0 of Calcium.

* Documentation: https://fredrikj.net/calcium/
* Source: https://github.com/fredrik-johansson/calcium

Highlights:

* Support for unevaluated symbolic expressions and LaTeX output (fexpr module)
* Major optimizations (in Calcium and in Flint). For example, the huge_expr test problem (https://ask.sagemath.org/question/52653) previously took 24 seconds with qqbar_t arithmetic and 100 seconds with ca_t arithmetic; it now takes 8 seconds with either qqbar_t or ca_t arithmetic using Calcium 0.3 and the current dev version of Flint.
* Better support for creating multiple context objects; various improvements that should make Calcium friendly to wrap.
* Matrix diagonalization and Jordan normal form.

Full list of changes:

Symbolic expressions
--------------------
* Added the fexpr module for flat-packed unevaluated symbolic expressions.
* LaTeX output.
* Basic manipulation (construction, replacement, accessing subexpressions).
* Numerical evaluation with Arb.
* Expanded normal form.
* Conversion methods for other types.
* Enable LaTeX rendering of objects in Jupyter notebooks.

Algebraic numbers
-----------------
* Fix a major performance issue (slow root refinement) that made Calcium as a whole far slower than necessary.
* Added qqbar_cmp_root_order; sort polynomial roots consistently by default.
* Added qqbar_get_quadratic.
* Added qqbar_equal_fmpq_poly_val and use it to speed up checking guessed values.
* Conversion of qqbar_t to and from symbolic expression (qqbar_set_fexpr, qqbar_get_fexpr_repr, qqbar_get_fexpr_root_nearest, qqbar_get_fexpr_root_indexed, qqbar_get_fexpr_formula).
* Fixed bugs in qqbar_cmpabs_re, cmpabs_im.
* Optimized qqbar_cmp_im and qqbar_cmpabs_im for conjugates with mirror symmetry.
* Added qqbar_pow (taking a qqbar exponent).
* Special-case roots of unity in qqbar_pow_ui, qqbar_root_ui, qqbar_abs and qqbar_abs2.
* Wrapped qqbar in Python.

Polynomials
-----------
* Added several utility functions.
* Optimized polynomial multiplication with rational entries.
* Fast polynomial multiplication over number fields.

Matrices
--------
* Fast matrix multiplication over number fields.
* Right kernel (ca_mat_right_kernel).
* Matrix diagonalization (ca_mat_diagonalization).
* Jordan normal form  (ca_mat_jordan_form, ca_mat_jordan_transformation, ca_mat_jordan_blocks).
* Matrix exponential (ca_mat_exp).
* Matrix logarithm (ca_mat_log).
* Polynomial evaluation (ca_mat_ca_poly_evaluate).
* Cofactor expansion algorithm for determinant and adjugate (ca_mat_adjugate_cofactor).
* Added several utility functions.
* Improved algorithm selection in ca_mat_inv.
* Solving using the adjugate matrix.
* Danilevsky characteristic polynomial algorithm (ca_mat_charpoly_danilevsky).

Field elements
--------------
* Use factoring in ca_sqrt to enable more simplifications.
* Simplify square roots and logarithms of negative real numbers.
* Optimized ca_sub.
* Conversion of ca_t to and from symbolic expressions (ca_set_fexpr, ca_get_fexpr).
* Added function for assigning elements between context objects (ca_transfer).
* Fixed a possible memory corruption bug when Vieta's formulas are used.
* Optimized constructing square roots of rational numbers.

Other
-----
* Added demonstration notebook to documentation.
* Fixed OSX compatibility in Python wrapper (contributed by deinst).
* Fixed bug in calcium_write_acb.
* Fixed bug in fmpz_mpoly_vec_set_primitive_unique (contributed by gbunting).


Fredrik
Reply all
Reply to author
Forward
0 new messages