History and changes¶
For more details, view the commit log in the git repository https://github.com/fredrik-johansson/calcium
Old releases of the code can be accessed from https://github.com/fredrik-johansson/calcium/releases
2021-05-28 - version 0.4¶
Algebraic numbers
Fixed bug in special-casing of roots of unity in qqbar_root_ui.
Fixed qqbar_randtest with bits == 1.
Faster qqbar_cmp_re for nearby reals.
Faster qqbar polynomial evaluation and powering using linear algebra.
Improved qqbar_abs, qqbar_abs2 to produce cleaner enclosures.
Use a slightly better method to detect real numbers in qqbar_sgn_im.
Added qqbar_hash.
Added qqbar_get_fmpq, qqbar_get_fmpz.
Added qqbar_pow_fmpq, qqbar_pow_fmpz, qqbar_pow_si.
Added qqbar_numerator, qqbar_denominator.
Basic arithmetic and elementary functions
Improved ca_condense_field: automatically demote to a simple number field when the only used extension number is algebraic.
Improved multivariate field arithmetic to automatically remove algebraic or redundant monomial factors from denominators.
Added ca_pow_si_arithmetic (guaranteed in-field exponentiation).
Added polynomial evaluation functions (ca_fmpz_poly_evaluate, ca_fmpq_poly_evaluate, ca_fmpz_poly_evaluate, ca_fmpz_mpoly_q_evaluate).
Added several helper functions (ca_is_special, ca_is_qq_elem, ca_is_qq_elem_zero, ca_is_qq_elem_one, ca_is_qq_elem_integer, ca_is_nf_elem, ca_is_cyclotomic_nf_elem, ca_is_generic_elem).
Added ca_rewrite_complex_normal_form.
Perform direct complex conjugation in cyclotomic fields.
Use ca_get_acb_raw instead of ca_get_acb when printing to avoid expensive recomputations.
Added alternative algorithms for various basic functions.
Deep complex conjugation.
Use complex conjugation in is_real, is_imaginary, is_negative_real.
Added functions for unsafe inversion for internal use.
Significantly stronger zero testing in mixed algebraic-transcendental fields.
Added ca_arg.
Added special case for testing equality between number field elements and rationals.
Added ca_sin_cos, ca_sin, ca_cos, ca_tan and variants.
Added ca_atan, ca_asin, ca_acos and variants.
Added ca_csgn.
Improved ca_get_acb and ca_get_acb_accurate_parts to fall back on exact zero tests when direct numerical evaluation does not give precise enclosures.
Added ca_get_decimal_str.
More automatic simplifications of logarithms (simplify logarithms of exponentials, square roots and powers raised to integer powers).
More automatic simplifications of square roots (simplify square roots of exponentials, square roots and powers raised to integer powers).
Improved order comparisons (ca_check_ge etc.) to handle special values and to fall back on strong equality tests.
Fixed a test failure in the ca_mat module.
Polynomials
Added ca_poly_inv_series, ca_poly_div_series (power series division).
Added ca_poly_exp_series (power series exponential).
Added ca_poly_log_series (power series logarithm).
Added ca_poly_atan_series (power series arctangent).
Other
Added fmpz_mpoly_q_used_vars.
Remove useless rpath line from configure (reported by Julien Puydt).
Added missing declaration of fexpr_hash.
Fixed crashes on OS X in Python interface (contributed by deinst).
Fixed memory leaks in Python string conversions (contributed by deinst).
Reserve I, E for symbolic expressions in Python interface.
2021-04-23 - version 0.3¶
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).
2020-10-16 - version 0.2¶
Basic arithmetic and expression simplification
Use Gröbner basis for reduction ideals, making simplification much more robust.
Compute all linear relations with LLL simultaneously instead of piecemeal.
Make monomial ordering configurable (default is lex as before).
Use Vieta’s formulas to simplify expressions involving conjugate algebraic numbers.
Denest exponentials of symbolic logarithms.
Denest logarithms of symbolic powers and square roots.
Denest powers of symbolic powers.
Simplify exponentials that evaluate to roots of unity.
Simplify logarithms of roots of unity.
Improve ideal reduction to avoid some unnecessary GCD computations.
Python wrapper
Calcium now includes a minimal ctypes-based Python wrapper for testing.
New ca_mat module for matrices
Mostly using naive basecase algorithms.
Matrix arithmetic, basic manipulation.
Construction of special matrices (Hilbert, Pascal, Stirling, DFT).
LU factorization.
Fraction-free LU decomposition.
Nonsingular solving and inverse.
Reduced row echelon form.
Rank.
Trace and determinant.
Characteristic polynomial.
Computation of eigenvalues with multiplicities.
New ca_poly module for polynomials
Mostly using naive basecase algorithms.
Polynomial arithmetic, basic manipulation.
Polynomial division.
Evaluation and composition.
Derivative and integral.
GCD (Euclidean algorithm).
Squarefree factorization.
Computation of roots with multiplicities.
Construction from given roots.
New ca_vec module for vectors.
Memory management and basic scalar operations.
Bug fixes
Fix bug in powering number field elements.
Fix bug in qqbar_log_pi_i.
Fix aliasing bug in ca_pow.
New basic functions
Conversion from double: ca_set_d, ca_set_d_d.
Special functions: ca_erf, ca_erfi, ca_erfc, with algebraic relations.
Special functions: ca_gamma (incomplete simplification algorithms).
New utils_flint module for Flint utilities
Vectors of multivariate polynomials.
Construction of elementary symmetric polynomials.
Gröbner basis computation (naive Buchberger algorithm).
Documentation and presentation
Various improvements to the documentation.
DFT example program.
2020-09-08 - version 0.1¶
Initial test release.
ca module (exact real and complex numbers).
fmpz_mpoly_q module (multivariate rational functions over Q).
qqbar module (algebraic numbers represented by minimal polynomials).
Example programs.