.. _history:

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-07-24 - version 0.4.1
-------------------------------------------------------------------------------

* Flint 2.8 compatibility.


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.


.. raw:: latex

    \newpage

