.. _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-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