------------------------------------------------- lines 6-601 of file: appendix/whats_new/2017.xrst ------------------------------------------------- {xrst_begin 2017 app} {xrst_spell autotools deallocations doxydoc doxygen readme subgraphs typedef uninitialised valgrind wconversion xq } Release Notes for 2017 ###################### mm-dd ***** API Changes =========== Speed tests no longer automatically compile in release mode; see :ref:`speed@debug_which` 12-14 ===== Add the :ref:`subgraph_hes2jac.cpp-name` example which computes sparse Hessians using subgraphs and Jacobians. 12-08 ===== A multi-threading wish list item was added. 12-06 ===== A :ref:`wish_list-name` item to enable one to iterate through a ``const`` :ref:`ADFun-name` operation sequence was completed. In addition, the :ref:`abs_normal_fun@f` argument to the ``abs_normal`` operation was converted to be ``const`` . 12-05 ===== The internal data object used to represent sparsity patterns as vectors of integers was improved; see :ref:`for_jac_sparsity@internal_bool` in ``for_jac_sparsity`` and other :ref:`sparsity_pattern@Preferred Sparsity Pattern Calculations` . 12-04 ===== Back out the ``hold_reverse_memory`` option. 12-01 ===== The ``hold_reverse_memory`` option was added. 11-30 ===== Edit the :ref:`download-name` instructions. 11-23 ===== The ``ADFun`` function :ref:`optimizer` was not handling hash code collisions properly. To be specific, only the arguments that were variables where checked for a complete match. The arguments that are constants need to also be checked. This has been fixed. 11-20 ===== #. Add the :ref:`subgraph_jac_rev-name` method for computing sparse Jacobians. #. Add the :ref:`speed_main@Global Options@subgraph` option to the CppAD speed tests. 11-19 ===== Add the :ref:`subgraph_reverse-name` method for computing sparse derivatives. This was inspired by the TMB package. 11-15 ===== #. Add wish list item for :ref:`subgraph sparsity` . #. Fix :ref:`cmake_check-name` when :ref:`cmake@include_ipopt` is not present on the cmake command line (make was trying to build some of the ipopt tests). 11-13 ===== #. Add the :ref:`speed_main@Global Options@hes2jac` option to the CppAD speed tests. #. Implement the :ref:`speed_main@Sparsity Options@subsparsity` option for the CppAD :ref:`sparse_hessian` test. #. Fix detection of invalid options in the speed test programs; see the :ref:`global` and :ref:`sparsity` options. 11-12 ===== Add the :ref:`speed_main@Sparsity Options@subsparsity` option to the CppAD speed tests. 11-08 ===== Add the :ref:`subgraph_sparsity-name` method for computing dependency and sparsity. This was inspired by the `TMB `_ package. 11-06 ===== More information has been added to the operation sequence. To be specific, the extra amount of ``f`` . *size_op* () * *sizeof* ( ``tape_addr_type`` ) was added to the value returned by :ref:`fun_property@size_op_seq` . 11-04 ===== The method for iterating through the tape has been changed. It now includes an extra data structure that makes it faster, but also requires slightly more memory. To be specific, the term ``f`` . *size_op* () * *sizeof* ( ``tape_addr_type`` ) * 2 was added to the value returned by :ref:`fun_property@size_op_seq` . In addition, some minor corrections were made to the :ref:`tape_addr_type` requirements. 10-23 ===== #. Require ``cmake.3.1`` or greater and fix a cmake warning by always using the new ``CMP0054`` policy. #. Fix a ``g++ 7.2.1`` warning about a possibly uninitialized value in the file ``cppad/local/optimize/hash_code.hpp`` . 09-16 ===== An optimization memory entry was added to the wish list and the :ref:`wish_list@check_finite` entry was modified. 08-30 ===== #. If :ref:`colpack_prefix-name` was not specified, one would get the following waring during the :ref:`cmake-name` command: ``Policy CMP0046 is not set: Error on non-existent dependency in`` This has been fixed by not adding the dependency when it is not needed. #. There was a problem running :ref:`make check` when :ref:`cmake@cppad_cxx_flags` was not specified. This has been fixed. This was probably introduced on :ref:`2017@mm-dd@05-29` . 08-29 ===== There was a problem on some systems that created an error when specializing the ``is_pod`` template function in the ``CppAD::local`` namespace. This has been fixed by testing for compatibility at during the :ref:`cmake-name` command and creating the file ``cppad/local/is_pod.hpp`` . 08-09 ===== Add the :ref:`wish_list@test_boolofvoid` wish list item. 08-08 ===== #. The :ref:`eigen_plugin.hpp-name` was put back in the :ref:`cppad_eigen.hpp-name` definitions. This makes CppAD incompatible with older versions of eigen; e.g., eigen-3.2.9. The plugin was removed on :ref:`2017@mm-dd@05-12` . #. Fix some minor typos in the documentation. To be specific: The font, in the :ref:`sparse_rc-name` and :ref:`sparse_rcv-name` syntax, for the text *target* = *pattern* The font, in :ref:`capacity_order-name` , for the text *xq* . ``size`` () == *f* . ``Domain`` () Remove a percent sign ``%`` , in :ref:`CppAD_vector-name` , in the text # ``include `` 07-25 ===== #. Fix warnings related to type conversions that occurred when one used ``-Wconversion`` with ``g++`` version 6.3.1. #. The warning were not fixed for complex AD types; e.g., :ref:`complex_poly.cpp-name` . The :ref:`wno_conversion-name` include file was added to deal with cases like this. 07-03 ===== #. The :ref:`min_nso_linear-name` abs-normal example was added. #. Fix bug in :ref:`abs_normal_fun-name` , to be specific, the multiplication of a variable on the left by a parameter was not handled. 07-01 ===== the :ref:`abs_normal` examples were converted from using quadratic programming problems to using linear programming problems. 06-28 ===== The :ref:`abs-normal` representation of non-smooth functions has been added. Examples and utilities that use this representation have also been included, see :ref:`abs_normal` . 06-11 ===== The atomic functions base class :ref:`atomic_two-name` makes more of an effort to avoid false sharing cache misses. This may the speed of multi-threaded applications with atomic functions; e.g., see :ref:`multi_atomic_two.cpp-name` . 06-10 ===== #. Add the multi-threading atomic function example :ref:`multi_atomic_two.cpp-name` . #. The ``example/multi_thread/test_multi`` directory used to have an example using the deprecated :ref:`atomic_one-name` functions in a multi-threading setting (that only built with the deprecated :ref:`configure-name` ). This have been removed. 06-07 ===== The multi-threading examples :ref:`harmonic.cpp-name` and :ref:`multi_newton.cpp-name` were re-organized. To be specific, the source code for each example was moved to one file. In addition, for each example, the documentation for each of the routines has been separated and placed next to its source code. 06-04 ===== Most all the :ref:`deprecated-name` features have been removed from the examples with the exception of those in the ``example/deprecated`` directory. 06-03 ===== Add the fact that the pair ( *row* , :ref:`link_sparse_hessian@col` ) is lower triangular to the speed test ``link_sparse_hessian`` routine. 06-01 ===== #. There was a bug in the :ref:`sparse_hes-name` routine and it was using the general coloring algorithm when :ref:`sparse_hes@coloring@cppad.symmetric` was specified. This has been fixed and improves the efficiency in this case. #. Some bugs were fixed in the use of :ref:`colpack` as the coloring algorithm for sparse Jacobian and Hessian calculations. This has improved the efficiency of Colpack colorings for computing Hessians (when ``colpack.symmetric`` is used). #. The ``colpack.star`` coloring method for sparse Hessians has been deprecated; see :ref:`sparse_hes` and :ref:`sparse_hessian` . Use the ``colpack.symmetric`` method instead; see :ref:`sparse_hes` and :ref:`sparse_hes` . 05-29 ===== #. Add the capability to compile so that CppAD debug and release mode can be mixed using ``CPPAD_DEBUG_AND_RELEASE`` . #. Add the :ref:`cmake@cppad_debug_which` flags that determines which files are compiled for debugging versus release during the CppAD testing; see :ref:`cmake_check-name` . #. There was a problem linking the proper libraries for using newer versions of :ref:`sacado` . This has been fixed. 05-19 ===== Most all the examples have been moved to ``example`` directory and grouped as sub-directories; e.g., the :ref:`ipopt_solve-name` examples are in the ``example/ipopt_solve`` directory. 05-14 ===== #. The file ``build.sh`` was moved to ``bin/autotools.sh`` , and `auto tools' has been changed to :ref:`configure-name` . #. The README file was replace by readme.md and AUTHORS was moved to authors. #. The NEWS, INSALL, and ChangeLog files are no longer necessary for autotools build and have been removed. #. The file test_more/sparse_jacobian.cpp generated a warning under some gcc compiler options. This has been fixed. #. Specifications were added so that :ref:`to_string-name` yields exact results for integer types and machine precision for floating point types. #. Some editing was done to the :ref:`configure-name` instructions. 05-12 ===== #. The :ref:`Faq-name` has been updated. #. Remove includes of ``cppad/cppad.hpp`` from the ``include/cppad/speed/`` * . ``hpp`` files. This avoids an incompatibility between sacado and newer versions of eigen, when eigen is used for the :ref:`testvector-name` . #. The :ref:`eigen-name` package changed its requirements for defining Scalar types (some where between eigen-3.2.9 and eigen-3.3.3). The member variable :ref:`digit10` was added to the ``numeric_limits`` to accommodate this change. #. Note that this fix required adding ``digits10`` to the user defined *Base* type :ref:`requirements` ; see :ref:`base_limits-name` . #. In addition, it is no longer necessary to add the typedef ``typedef Scalar value_type`` ; so the file ``cppad/example/eigen_plugin.hpp`` has been removed. (This type definition was previously necessary for eigen vectors to be :ref:`simple vectors` .) 04-08 ===== The :ref:`optimization` , with a large number of :ref:`conditional expressions` , was performing many memory allocations and deallocations. This has been reduced. 04-02 ===== Fix a bug in the optimization of conditional expressions; see, :ref:`optimize@options@no_conditional_skip` . 03-31 ===== Fix some ``valgrind`` errors that occurred while running the CppAD test set. 03-29 ===== The following valgrind error might occur when the optimize skipped setting values that did not affect the dependent variables: ``Conditional jump or move depends on uninitialised value`` ( ``s`` ) This was not a bug, the code has been changed to avoid this error in order to make it easier to use valgrind with CppAD. 03-25 ===== #. The :ref:`sparse_hes-name` function was more efficient if there were more entries in each row of the requested :ref:`sparse_hes@subset` . This has been changed to more entries in each column, and documentation to this effect was included. #. The :ref:`optimize-name` routine was using to much memory when it was optimizing conditional skip operations; see :ref:`optimize@options@no_conditional_skip` . This has been fixed. 03-20 ===== There was a mistake in :ref:`sparse_jac-name` that caused the following assert to mistakenly occur: :: sparse_jac_rev: work is non-empty and conditions have changed Error detected by false result for color.size() == 0 || color.size() == n A test that using a previously stores work vector has been added to :ref:`sparse_jac_rev.cpp-name` and this bug has been fixed. 03-13 ===== The documentation for the Hessian in :ref:`rev_hes_sparsity-name` was transposed; i.e., the sense of :ref:`rev_hes_sparsity@transpose` was reversed. 03-11 ===== Add sparse assignment statements; see *other* for :ref:`sparse_rc` and :ref:`sparse_rcv` . 03-10 ===== Add the a sizing constructor to the :ref:`sparse_rc syntax` ; i.e., a constructor that sets the number of row, number of columns, and number of possibly non-zero values in the sparsity pattern. 03-06 ===== Fix a bug in the sparsity computation using the internal representation for :ref:`vectors of sets` ; i.e., when *internal_bool* was false in any of the :ref:`sparsity_pattern-name` calculations; e.g., :ref:`for_jac_sparsity` . 03-04 ===== Fix a bug in the optimization of conditional expressions; see :ref:`optimize@options@no_conditional_skip` . 02-26 ===== #. Fix warning during :ref:`cmake-name` command, on `cygwin `_ systems, about ``WIN32`` not being defined. #. Add element-wise atomic operations to the wish list. This was completed by the :ref:`atomic_four_vector-name` example. 02-21 ===== #. Minor improvements to syntax and documentation for :ref:`sparse_rc-name` and :ref:`sparse_rcv-name` . #. Separate preferred sparsity versions in :ref:`sparsity_pattern-name` and :ref:`sparse_derivative-name` . 02-19 ===== #. Remove the ``bool_sparsity.cpp`` example and add the :ref:`rc_sparsity.cpp-name` example. #. Check for duplicate entries during :ref:`sparse_rc@row_major` and ``col_major`` in ``sparse_rc`` . 02-15 ===== Fix bug when using :ref:`ForSparseHes-name` with atomic functions; i.e., :ref:`atomic_two_for_sparse_hes-name` . 02-13 ===== Improve :ref:`atomic_two_eigen_mat_mul.hpp@Private@for_sparse_jac` calculation in ``eigen_mat_mul.hpp`` example. It now checks for the parameter zero and does not propagate any sparsity in this case (because the result is always zero). 02-11 ===== #. Remove the 'Under Construction' heading from the :ref:`sparse_rc-name` and :ref:`sparse_rcv-name` documentation; i.e., they are ready for public use (part of the CppAD API). #. Fix some warning that occur when using :ref:`cppad_testvector@eigen` for the CppAD test vector. (The Eigen vector ``size()`` function returns an ``int`` instead of ``size_t`` .) #. Fix a bug in :ref:`sparse_jac_rev` . 02-10 ===== #. The subset of deprecated features corresponding to the cmake command option ``cppad_deprecated=YES`` have been completely removed. #. Fix problems with :ref:`configure-name` build (started near 02-01 while working on sparsity branch). #. Reorder (better organize) the :ref:`ADFun-name` documentation section. 02-09 ===== #. Remove the sparsity pattern wish list item. For sparsity patterns, this was completed by :ref:`sparse_rc-name` and the sparsity pattern routines that used it; e.g., :ref:`for_jac_sparsity-name` . For sparse matrices, it was completed by :ref:`sparse_rcv-name` and the sparse matrix routines that use it; e.g., :ref:`sparse_jac-name` . #. Add the Deprecated and :ref:`wish_list@Example` items to the wish list. (The Deprecated item was partially completed and partially removed.) 02-08 ===== #. Make coloring a separate argument to :ref:`sparse_jac` and :ref:`sparse_hes` . #. Add the :ref:`sparse_jac@group_max` argument to the ``sparse_jac_for`` function. 02-05 ===== #. Add the :ref:`sparse_jac_for` routine which uses :ref:`sparse_rc-name` sparsity patterns and :ref:`sparse_rcv-name` matrix subsets. #. Order for :ref:`sparse_rc-name` row-major and column-major was switched. This has been fixed. 02-03 ===== Add the :ref:`rev_jac_sparsity-name` :ref:`rev_hes_sparsity-name` , and :ref:`for_hes_sparsity-name` interfaces to sparsity calculations. These use :ref:`sparse_rc-name` sparsity patterns. 02-02 ===== Change :ref:`for_jac_sparsity@f@size_forward_bool` and Change :ref:`for_jac_sparsity@f@size_forward_set` so that they are a better approximation of the number of bytes (unsigned characters) being used. The exact same sparsity pattern might use different memory in two different function objects (because memory is allocated in chunks). The :ref:`fun_assign.cpp-name` example has been changed to reflect this fact. 02-01 ===== Add the :ref:`for_jac_sparsity-name` interface for the sparse Jacobian calculations. This is the first use of :ref:`sparse_rc-name` , a sparsity pattern class that uses row and column :ref:`index vectors` . 01-30 ===== Move the :ref:`sparsity_pattern-name` examples from ``example`` to ``example/sparse`` subdirectory. This included the sparse :ref:`driver` examples. 01-29 ===== Move the :ref:`utility-name` examples from ``example`` to ``example/utility`` subdirectory. 01-27 ===== Add a :ref:`addon-name` link to `cppad_swig `_ , a C++ AD object library and swig interface to Perl, Octave, and Python. 01-19 ===== Convert more examples / tests to use a multiple of machine epsilon instead of ``1e-10`` . 01-18 ===== #. Fix developer `doxydoc `_ documentation so that it works with newer version of doxygen. #. Fix a Visual C++ 2015 compilation problem in friend declarations in the file ``cppad/local/ad_tape.hpp`` . 01-17 ===== Change computed assignment to :ref:`compound assignment` . {xrst_end 2017}