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.