Algorithmic differentiation and arithmetic circuits in PHCv2.4.87

This directory was created new in v2.3.98, with code that had been building
up in the directory Functions.  In Functions, polynomials are evaluated by
means of a nested Horner scheme.  For scaling to larger problems and for
massively parallel implementations (GPU), new evaluation and differentation
algorithms were developed jointly with Genady Yoffe.
With the reverse mode of algorithmic differentiation the value of a product
of variables -- the so-called Speelpenning example -- can be computed along
with its gradient at a cost that is linear in the number of variables.

Starting from version 2.4.75, the reverse mode was applied to series
and code was developed for better performing circuits, along with the
evaluation of Hessians, as needed for a robust path tracker.

Since the different ways to evaluate polynomials use different orders of
computation, the results may differ when multiprecision arithmetic is used.

Run "gprbuild circuits.gpr" to make all test programs.
On windows, type "gprbuild circuits.gpr -Xos=windows"
at the PowerShell prompt.
The "gprclean circuits.gpr" removes all files created by gprbuild.

-------------------------------------------------------------------------------
file name                          : short description
-------------------------------------------------------------------------------
standard_speelpenning_products     : evaluate and differentiate a product
dobldobl_speelpenning_products     : Speelpenning product with double doubles
quaddobl_speelpenning_products     : Speelpenning product with quad doubles
multprec_speelpenning_products     : Speelpenning product with multprecision
standard_monomial_evaluations      : evaluations of monomials
dobldobl_monomial_evaluations      : monomial evaluations with double doubles
quaddobl_monomial_evaluations      : monomial evaluations with quad doubles
multprec_monomial_evaluations      : monomial evaluations with multiprecision
standard_gradient_evaluations      : evaluation and gradient computation
dobldobl_gradient_evaluations      : double double gradient computation
quaddobl_gradient_evaluations      : quad double gradient computation
multprec_gradient_evaluations      : multiprecision gradient computation
coefficient_supported_polynomials  : support vector polynomial representations
standard_jacobian_evaluations      : evaluating and differentiation of systems
dobldobl_jacobian_evaluations      : double double eval & diff of systems
quaddobl_jacobian_evaluations      : quad double eval & diff of systems
multprec_jacobian_evaluations      : multiprecision eval & diff of systems
-------------------------------------------------------------------------------
random_conditioned_evaluations     : generate problems with given condition
varbprec_polynomial_evaluations    : evaluate polynomials at various precisions
varbprec_gradient_evaluations      : evaluate gradient a various precision
cyclic_roots_system                : defines the cyclic n-roots benchmark
ts_vmpeval                         : tests variable precision evaluation
ts_vmpdiff                         : tests variable precision differentiation
-------------------------------------------------------------------------------
ts_cffsup                          : test on coefficient supported polynomials
ts_speel                           : development of Speelpenning product
ts_speelsys                        : test on eval and diff of systems
ts_cycfun                          : on the cyclic n-roots problems
-------------------------------------------------------------------------------
standard_gradient_circuits         : eval & diff circuits for polynomials
dobldobl_gradient_circuits         : gradient circuits for double doubles
quaddobl_gradient_circuits         : gradient circuits for quad doubles
multprec_gradient_circuits         : gradient circuits for multiprecision
standard_jacobian_circuits         : eval & diff circuits for systems
dobldobl_jacobian_circuits         : Jacobian circuits for double doubles
quaddobl_jacobian_circuits         : Jacobian circuits for quad doubles
multprec_jacobian_circuits         : Jacobian circuits for multprec numbers
ts_gradcirc                        : test on eval & diff circuits
===============================================================================
generic_speelpenning_convolutions  : gradient evaluation of product
exponent_indices                   : extracting indices of exponent vectors
standard_speelpenning_convolutions : Speelpenning with doubles
dobldobl_speelpenning_convolutions : Speelpenning with double doubles
tripdobl_speelpenning_convolutions : Speelpenning with triple doubles
quaddobl_speelpenning_convolutions : Speelpenning with quad doubles
pentdobl_speelpenning_convolutions : Speelpenning with penta doubles
octodobl_speelpenning_convolutions : Speelpenning with octo doubles
decadobl_speelpenning_convolutions : Speelpenning with deca doubles
hexadobl_speelpenning_convolutions : Speelpenning with deca doubles
series_polynomial_gradients        : collects test utilities
random_convolution_circuits        : generation of random circuits for testing
system_convolution_circuits        : make circuits from polynomials and systems
homotopy_convolution_circuits      : add continuation parameter to circuits
residual_convolution_circuits      : circuits with radii for coefficients
evaluation_differentiation_errors  : functions for differences of computations
test_standard_speel_convolutions   : test on reverse mode with doubles
test_dobldobl_speel_convolutions   : test on reverse mode with double doubles
test_tripdobl_speel_convolutions   : test on reverse mode with triple doubles
test_quaddobl_speel_convolutions   : test on reverse mode with quad doubles
test_pentdobl_speel_convolutions   : test on reverse mode with penta doubles
test_octodobl_speel_convolutions   : test on reverse mode with octo doubles
test_decadobl_speel_convolutions   : test on reverse mode with deca doubles
test_hexadobl_speel_convolutions   : test on reverse mode with hexa doubles
ts_speelser                        : test reverse mode on power series
standard_coefficient_convolutions  : better performing convolution computations
dobldobl_coefficient_convolutions  : coefficient convolution in dd precision
quaddobl_coefficient_convolutions  : coefficient convolution in qd precision
standard_convolution_splitters     : split complex coefficients of circuits
dobldobl_convolution_splitters     : split dd complex coefficients of circuits
quaddobl_convolution_splitters     : split qd complex coefficients of circuits
test_standard_coeff_convolutions   : test cff convols with doubles
test_dobldobl_coeff_convolutions   : test cff convols with double doubles
test_quaddobl_coeff_convolutions   : test cff convols with quad doubles
ts_speelcnv                        : convolutions for series polynomials
standard_newton_convolutions       : Newton with double convolutions
dobldobl_newton_convolutions       : Newton with dobldobl convolutions
tripdobl_newton_convolutions       : Newton with tripdobl convolutions
quaddobl_newton_convolutions       : Newton with quaddobl convolutions
pentdobl_newton_convolutions       : Newton with pentdobl convolutions
octodobl_newton_convolutions       : Newton with octodobl convolutions
decadobl_newton_convolutions       : Newton with decadobl convolutions
hexadobl_newton_convolutions       : Newton with hexadobl convolutions
newton_coefficient_convolutions    : Newton on coefficient convolutions
convergence_radius_estimates       : applies ratio theorem of Fabry
test_standard_fabry                : tests Fabry in double precision
test_dobldobl_fabry                : tests Fabry in double double precision
test_tripdobl_fabry                : tests Fabry in triple double precision
test_quaddobl_fabry                : tests Fabry in quad double precision
test_pentdobl_fabry                : tests Fabry in penta double precision
test_octodobl_fabry                : tests Fabry in octo double precision
test_decadobl_fabry                : tests Fabry in deca double precision
test_hexadobl_fabry                : tests Fabry in hexa double precision
ts_fabry                           : test on the Fabry ratio theorem
ts_evalcnv                         : test on plain evaluation
hessian_convolution_circuits       : Hessians on convolution circuits
ts_hesscnv                         : test on plain Hessian computation
jacobian_convolution_circuits      : Jacobians on convolution circuits
ts_jacocnv                         : test on plain Jacobian computation
shift_convolution_circuits         : shifting coefficients in the circuits
shift_coefficient_convolutions     : coefficient versions of shift operations
standard_coefficient_storage       : store/restore coefficients of series
ts_shiftcnv                        : test on shifting coefficients
-------------------------------------------------------------------------------
ts_perfconv                        : test on performance and convolutions
ts_perfcirc                        : test performance of splitted circuits
standard_hessian_updaters          : update procedures for Hessian matrices
dobldobl_hessian_updaters          : dobldobl updates for Hessian matrices
tripdobl_hessian_updaters          : tripdobl updates for Hessian matrices
quaddobl_hessian_updaters          : quaddobl updates for Hessian matrices
pentdobl_hessian_updaters          : pentdobl updates for Hessian matrices
octodobl_hessian_updaters          : octodobl updates for Hessian matrices
decadobl_hessian_updaters          : decadobl updates for Hessian matrices
standard_complex_circuits          : development code for correctness tests
dobldobl_complex_circuits          : double double complex circuits
tripdobl_complex_circuits          : triple double complex circuits
quaddobl_complex_circuits          : quad double complex circuits
pentdobl_complex_circuits          : penta double complex circuits
octodobl_complex_circuits          : octo double complex circuits
decadobl_complex_circuits          : deca double complex circuits
standard_coefficient_circuits      : better performing algo diff eval
standard_circuit_splitters         : split coefficients of circuits
standard_circuit_makers            : standard precision testing utilities
dobldobl_circuit_makers            : double double precision testing utilities
tripdobl_circuit_makers            : triple double precision testing utilities
quaddobl_circuit_makers            : quad double precision testing utilities
pentdobl_circuit_makers            : penta double precision testing utilities
octodobl_circuit_makers            : octo double precision testing utilities
decadobl_circuit_makers            : deca double precision testing utilities
ts_perfade                         : test performance of algo diff eval
test_hessian_circuits              : test on better Hessian computation
ts_perfhess                        : calls the main test on Hessian circuits
-------------------------------------------------------------------------------
