lines 6-871 of file: appendix/whats_new/15.xrst {xrst_begin whats_new_15 app} {xrst_spell addon adouble aeps allocates asctime autotools cskip datadir destructed dimensioned docdir erfc expm gettimeofday gmtime hasnan ieee includedirs lcppad libdirs multiplications optionally postfix sq src statics unreferenced zdouble } CppAD Changes and Additions During 2015 ####################################### mm-dd ***** 12-31 ===== The :ref:`download-name` instructions were modified to have more mention of git and less mention of subversion. 12-29 ===== Separate :ref:`to_string-name` from :ref:`ad_to_string-name` so that it can be used without the rest of CppAD; i.e., by including # ``include `` 12-28 ===== #. Add the :ref:`to_string-name` utility. #. Add :ref:`base_to_string-name` to the Base type requirements. #. A :ref:`wish_list@Base Requirements` item was added to the wish list. #. The :ref:`wish_list-name` item to reorganize the include directory has been removed. It was completed when the utilities was moved to ``cppad/utility`` ; see :ref:`whats_new_15@mm-dd@11-30` . 12-08 ===== #. A convention was included for addon :ref:`addon@Library Files` . #. Change new :ref:`utility-name` specifications to allow for individual file includes; e.g., ```` . 12-01 ===== Fix problem with :ref:`configure-name` install handling of the deprecated files. This included changing the autotools ``--with-implicit_ctor`` option to :ref:`configure-name` . This was removed on :ref:`2017-02-10` . 11-30 ===== #. The ``library`` section has been moved to the :ref:`utilities` section. In addition, the corresponding source code files in ``cppad`` have been moved to ``cppad/utility`` . #. The individual :ref:`utility-name` include files have been deprecated; see :ref:`include_deprecated-name` . For example, :: # include You should us the utility include instead; i.e., :: # include #. The :ref:`numeric_ad-name` routines where moved from the ``library`` the a separate documentation section. #. Change ``cmake_install_prefix`` to :ref:`cmake@cppad_prefix` and Change ``cmake_install_postfix`` to :ref:`cmake@cppad_postfix` . #. Change ``cppad_implicit_ctor_from_any_type`` to the cmake ``cppad_deprecated`` option and change its specifications to refer to all deprecated features. 11-25 ===== #. CppAD now installs the object library :: -lcppad_lib to be included when linking. Currently, it is only required when :ref:`colpack_prefix-name` is specified on the :ref:`cmake@CMake Command` . #. It is no longer necessary to compile and link the file :: cppad_colpack.cpp when :ref:`colpack_prefix-name` is specified during the install process; see :ref:`cmake@CMake Command` . (It is included in ``cppad_lib`` ). 11-24 ===== #. The ``check_for_nan`` output now includes the first dependent variable :ref:`check_for_nan@Error Message@index` that is ``nan`` in its error message. #. Change the :ref:`deprecated include` reference ``pow_int.h`` to ``pow_int.hpp`` in :ref:`pow_int-name` . 11-14 ===== There was a bug in the new :ref:`check_for_nan@get_check_for_nan` feature that writes independent variable values to a temporary file; see :ref:`whats_new_15@mm-dd@11-06` below. This has been fixed. 11-08 ===== #. Fixed a bug in the :ref:`RevSparseJac-name` routine. To be specific, the argument :ref:`RevSparseJac@r` was transposed from what the documentation said. (This has no effect in the usual case where *r* is the identity.) #. Added the ``bool_sparsity.cpp`` examples which show how to conserve memory when computing sparsity patterns. (This has since been replaced by :ref:`rc_sparsity.cpp-name` .) #. Modified the :ref:`ipopt_solve-name` procedure to take advantage of the memory conserving sparsity pattern calculations when :ref:`ipopt_solve@options@Retape` is false. #. Added the :ref:`CppAD_vector@vectorBool@bit_per_unit` function to the ``vectorBool`` class. (This aids the memory conservation mentioned above.) 11-06 ===== It is often difficult to determine what cause a ``nan`` result during an operation with an :ref:`ADFun-name` object. The new feature :ref:`check_for_nan@get_check_for_nan` was added to make this easier. 10-21 ===== There was a mistake in the documentation for :ref:`index_sort-name` , the argument :ref:`index_sort@ind` is not ``const`` . 10-16 ===== Add a :ref:`PrintFor-name` optimization wish list item. This has been done, see :ref:`optimize@options@no_print_for_op` . 10-06 ===== #. Add the ``CPPAD_USE_CPLUSPLUS_2011`` , ``CPPAD_NUMERIC_LIMITS`` , and ``CPPAD_STANDARD_MATH_UNARY`` , to the :ref:`preprocessor-name` section. In addition, remove checking that all user API preprocessor symbols are in this section form the :ref:`wish_list-name` . #. Alphabetize and make some corrections to :ref:`list of examples` . #. The documentation for some of the :ref:`deprecated-name` features was missing the date when they were deprecated. This has been fixed; e.g., see :ref:`configure@Deprecated 2012-12-26` . 10-04 ===== #. :ref:`base_require-name` : Add the macro :ref:`base_limits@CPPAD_NUMERIC_LIMITS` to aid in setting the numeric limits for a user defined *Base* class. #. :ref:`base_require-name` : The :ref:`numeric_limits@quiet_NaN` function has been added to the CppAD ``numeric_limits`` . Note the reason for not using :ref:`numeric_limits@std::numeric_limits` . #. The :ref:`nan@nan(zero)` function computes a ``nan`` by dividing zero by zero which results in a warning when using some compilers. This function has been deprecated and the corresponding :ref:`wish_list-name` item has been removed. #. Move documentation for :ref:`zdouble-name` to :ref:`deprecated-name` section and documentation for :ref:`numeric_limits-name` to :ref:`ADValued-name` . #. Remove all uses of, and references to, :ref:`zdouble-name` from the :ref:`examples` . 10-03 ===== :ref:`base_require-name` : It is no longer necessary to define the specialization for ``CppAD::epsilon<`` *Base>* () for each *Base* type. 10-02 ===== There was a bug in ``test_more/azmul.cpp`` whereby the vector ``z`` had the wrong dimension (in two places). This has been fixed. 09-28 ===== #. Use the current :ref:`atomic_two_option-name` setting to determine which type of sparsity patterns to use for :ref:`dependency` calculations during :ref:`optimize-name` procedure. It used to be that the :ref:`atomic_two_option@atomic_sparsity@bool_sparsity_enum` was used when :ref:`atomic_two_option@atomic_sparsity@pack_sparsity_enum` was specified. #. It is not longer an error to take the derivative of the square root function, because the result may be the part of a :ref:`conditional expression` that is not used. #. Update the :ref:`wish_list-name` section. 09-27 ===== #. It is no longer necessary to use the :ref:`zdouble-name` class when computing with :ref:`multiple levels of AD` :ref:`conditional expressions` and :ref:`reverse mode` . #. The ``zdouble`` class has been deprecated. Use the :ref:`azmul-name` function for absolute zero (when it is needed). 09-25 ===== :ref:`base_require-name` : :ref:`absolute zero multiplication` is now required for user defined base types. This makes it possible to combine :ref:`conditional expression` , :ref:`multiple levels` , :ref:`Reverse-name` , and a base type that has standard ieee multiplication; e.g., ``double`` . In other words, not all multiplications will need to have an absolute zero (as is the case with the :ref:`zdouble-name` base class. 09-24 ===== Fix some Visual Studio 2013 C++ level four ``/W4`` warnings (previous warnings were are level 3). In addition, disable warning ``4100`` unreferenced formal parameter, and warning ``4127`` conditional expression is constant. 09-23 ===== CppAD can optionally test its use with the external packages :ref:`eigen` , :ref:`ipopt` , and :ref:`colpack` . In addition, it can compare its :ref:`speed-name` with the external AD packages :ref:`adolc` , :ref:`fadbad` , and :ref:`sacado` . The scripts that download and install a local copy of these external packages have been modified to automatically skip installation when it has already been done. 09-21 ===== Improve discussion of windows download and testing. This discussion has since been removed; see +:ref:`whats_new_18@mm-dd@05-20` in whats new for 2018. 09-20 ===== #. Add the :ref:`cmake@cppad_profile_flag` to the list of possible ``cmake`` command arguments. #. More of the warnings generated by Visual Studio 2013 have been fixed. One remaining warning is about ``asctime`` and ``gmtime`` not being thread safe. 09-19 ===== #. There was a bug in the :ref:`base_alloc.hpp@numeric_limits` section of the example user defined base type. This has been fixed. #. There were some compile and link errors when running the tests using Visual Studio 2013. These have been fixed. #. Many of the warnings generated by Visual Studio 2013 have been fixed. 09-16 ===== The conditional expressions, :ref:`CondExp-name` , were not working for the type ``< CppAD::AD >`` where ``adouble`` is the ADOL-C AD type. This has been fixed by adding a call to :ref:`CPPAD_COND_EXP_REL` in ``base_adolc.hpp`` . 09-03 ===== #. There was a bug in the :ref:`CppAD_vector@vectorBool` :ref:`CppAD_vector@Assignment` . To be specific, it not allow a size zero vector to be assigned using a vector any other size. This has been fixed. #. The addition of the :ref:`pack` option on 08-31 introduced a bug in the calculation of :ref:`RevSparseHes-name` . The ``chkpoint_one_get_started.cpp`` example was changed to demonstrate this problem and the bug was fixed. 09-02 ===== The :ref:`dependency.cpp@Dependency Pattern` was not being computed correctly for the :ref:`sign-name` , :ref:`Discrete-name` , and :ref:`VecAD-name` operations. This has been fixed. This could have caused problems using :ref:`checkpoint` functions that used any of these operations. 08-31 ===== #. Mention the fact that using checkpoint functions can make :ref:`recordings faster` . #. Add the :ref:`pack` sparsity option for :ref:`atomic_two-name` operations. #. Add the pack sparsity option to :ref:`chkpoint_one` functions. #. Added the ``example/atomic/sparsity.cpp`` example. #. Remove mention of OpenMP from :ref:`thread_alloc::thread_num` (:ref:`thread_alloc-name` never was OpenMP specific). 08-30 ===== #. The :ref:`atomic_two_ctor@atomic_base@sparsity` argument was added to the ``atomic_base`` constructor and the :ref:`chkpoint_one` constructor. #. Make ``atomic_two_norm_sq.cpp`` an example with no set sparsity and ``atomic_two_reciprocal.cpp`` an example with no bool sparsity. #. Improve discussion of ``Independent`` and :ref:`Independent@Parallel Mode` . 08-29 ===== Some asserts in the :ref:`checkpoint` implementation were not using the CppAD :ref:`ErrorHandler-name` . This has been fixed. 08-28 ===== Free :ref:`checkpoint` function sparsity patters during :ref:`forward-name` operations that use its atomic operation. (They kept between sparsity calculations because they do not change.) 08-26 ===== Fix a bug in :ref:`RevSparseJac-name` when used to compute sparsity pattern for a subset of the rows in a :ref:`checkpoint` function. 08-25 ===== Reduce the amount of memory required for :ref:`checkpoint` functions (since sparsity patterns are now being held so they do not need to be recalculated). 08-20 ===== Added an example that computes the sparsity pattern for a subset of the :ref:`Jacobian` and a subset of the :ref:`Hessian` . 08-17 ===== #. Do some optimization of the :ref:`checkpoint` feature so that sparsity patterns are stored and not recalculated. #. Fix a warning (introduced on 08-11) where the ``CppAD::vector`` :ref:`CppAD_vector@data` function was being shadowed by a local variable. #. The source code control for CppAD has a link to ``compile`` , instead of real file. This sometimes caused problems with the deprecated :ref:`configure-name` install procedure and has been fixed. 08-16 ===== #. Improve the documentation for checkpoint functions. To be specific, change the :ref:`chkpoint_one@Syntax` to use the name *atom_fun* . In addition, include the fact that *atom_fun* must not be destructed for as along as the corresponding atomic operations are used. #. Add the :ref:`chkpoint_one@size_var` function to the checkpoint objects. 08-09 ===== Add the preservation of data to the specifications of a ``CppAD::vector`` during a :ref:`CppAD_vector@resize` when the capacity of the vector does not change. In addition, added and example of this to :ref:`cppad_vector.cpp-name` . 08-06 ===== The :ref:`zdouble-name` :ref:`numeric_limits` were not being computed properly. This has been fixed. 07-31 ===== Added the :ref:`sparse_sub_hes.cpp-name` example, a way to compute the sparsity for a subset of variables without using :ref:`multiple levels of AD` . 06-16 ===== #. There were some :ref:`cppad_assert@Unknown` asserts when the sparsity pattern *p* in :ref:`sparse_jacobian` and :ref:`sparse_hessian` was not properly dimensioned. These have been changed to :ref:`cppad_assert@Known` asserts to give better error reporting. #. In the special case where sparse Hessian :ref:`sparse_hessian@work` or sparse Jacobian :ref:`sparse_hessian@work` was specified and the set of elements to be computed was empty, the work vector is empty after the call (and it appears to need to be calculated on subsequent calls). This resulted in a bug when the sparsity pattern was not provided on subsequent calls (and has been fixed). 06-11 ===== #. Some C++11 features were not being taken advantage of after the change on :ref:`whats_new_15@mm-dd@05-10` . To be specific, move semantics, the high resolution clock, and null pointers. This has been fixed. #. In the example zdouble.cpp, the vector ``a1z`` was not properly dimensioned. This has been fixed and the dimensions of all the variables have been clarified. 06-09 ===== Add an :ref:`Independent@abort_op_index` item to the wish list. It has since been removed (domain errors may not affect the results due to :ref:`conditional expressions` ). 06-07 ===== Add a :ref:`absolute zero` item and a :ref:`numeric_limits-name` item to the wish list. The absolute zero item has been completed and the numeric limit item was modified on implementation. Remove the multiple directions with list item. 05-26: cond_exp_1 ================= There was a problem using :ref:`conditional expressions` with :ref:`multiple levels of AD` where the result of the conditional expression might not be determined during forward mode. This would generate an assert of the form: | |tab| ``Error detected by false result for`` | |tab| |tab| ``IdenticalCon`` ( *side* ) | |tab| ``at line`` *number* ``in the file`` | |tab| |tab| .../ ``include/cppad/local/cskip_op.hpp`` where *side* was ``left`` or ``right`` and *number* was the line number of an assert in ``cskip_op.hpp`` . This has been fixed. 05-26: cond_exp_2 ================= There was a problem with using :ref:`conditional expressions` and :ref:`reverse mode` with :ref:`multiple levels of AD` . This was problem was represented by the file ``bug/cond_exp_2.sh`` . #. The problem above has been fixed by adding the base type ``zdouble`` , see :ref:`CppAD motivation` for this new type. (It is no longer necessary to use ``zdouble`` to get an absolute zero because CppAD now uses :ref:`azmul-name` where an absolute zero is required.) #. The sections :ref:`mul_level-name` , :ref:`change_param.cpp-name` , :ref:`mul_level.cpp-name` , and :ref:`mul_level_ode.cpp-name` were changed to use :ref:`zdouble-name` . #. The :ref:`adolc-name` multi-level examples :ref:`mul_level_adolc.cpp-name` and :ref:`mul_level_adolc_ode.cpp-name` were changed to mention the limitations because Adolc does not have an :ref:`zdouble@Absolute Zero` . #. The example above were also changed so that AD variable names that indicated the level of AD for the variable. #. :ref:`base_require-name` : The base type requirements were modified to include mention of :ref:`absolute zero` . In addition, the base type requirements :ref:`base_require@API Warning` is now more informative. 05-11 ===== Reorganize the :ref:`unary_standard_math-name` documentation. 05-10 ===== #. Add the exponential minus one function :ref:`log1p-name` . #. :ref:`base_require-name` : If you are defining your own base type, note that ``log1p`` function was added to the base type requirements. #. Use the single preprocessor flag ``CPPAD_USE_CPLUSPLUS_2011`` to signal that the functions asinh, acosh, atanh, erf, erfc, expm1, log1p are part of the base type requirements. 05-09 ===== #. Add the exponential minus one function :ref:`expm1-name` . If you are defining your own base type, note that expm1 was added to the base type requirements. #. Fix some warnings about comparing signed and unsigned integers when using :ref:`cppad_testvector@eigen` for the CppAD test vector. (The eigen vector ``size()`` function returns an ``int`` instead of a ``size_t`` .) 05-08 ===== #. Add the inverse hyperbolic sine function :ref:`atanh-name` . If you are defining your own base type, note that atanh was added to the base type requirements. #. Fix a bug in the implementation of the ``acosh`` multiple direction forward mode :ref:`forward_dir-name` . 05-07 ===== Add the inverse hyperbolic sine function :ref:`acosh-name` . If you are defining your own base type, note that acosh was added to the base type requirements. 05-05 ===== Add the inverse hyperbolic sine function :ref:`asinh-name` . If you are defining your own base type, note that asinh was added to the base type requirements. 04-18 ===== In the sparse jacobian and sparse hessian calculations, If *work* is present, and has already been computed, the sparsity pattern *p* is not used. This has been added to the documentation; see :ref:`sparse jacobian` and :ref:`sparse hessian` documentation for *work* and *p* . 03-13 ===== Remove the syntax ``AD`` < *Base* > *y* = *x* for the :ref:`AD constructor` documentation because it does not work when the constructor is :ref:`ad_ctor@x@explicit` . Also document the restriction that the constructor in the :ref:`assignment` must be implicit. 03-06 ===== The developers of the `TMB `_ package reported that for large :ref:`ADFun-name` tapes, the :ref:`optimize-name` routine uses a large amount of memory because it allocates a standard set for each variable on the tape. These sets are only necessary for variables in :ref:`conditional expressions` that can be skipped once the independent variables have a set value. The problem has been reduced by using a NULL pointer for the empty set and similar changes. It still needs more work. 02-28 ===== It used to be the case that the :ref:`Reverse mode` would propagate :ref:`nan-name` through the :ref:`conditional expression` case that is not used. For example, if :: Independent(ax); AD aeps = 1e-10; ay[0] = CondExpGt( ax[0], aeps, 1.0/ax[0], 1.0/aeps ); ADFun f(ax, ay); The corresponding reverse mode calculation, at ``x[0] = 0.0`` , would result in :: Error detected by false result for ! ( hasnan(value) && check_for_nan_ ) This has been fixed so that only the conditional expression case that is used affects the reverse mode results. The example :ref:`cond_exp.cpp-name` was changed to reflect this (a check for ``nan`` was changed to a check for zero). Note that this fix only works when :ref:`base_identical@Identical@IdenticalCon` is true for the base type of the result in the conditional expression; e.g., one can still get a ``nan`` effect from the case that is not selected when using ``AD< AD >`` conditional expressions. 02-18 ===== If the compiler supports the c++11 feature ``std::chrono:high_resolution_clock`` then use it for the :ref:`elapsed_seconds-name` function. 02-16 ===== The new example :ref:`sub_sparse_hes.cpp-name` shows one way to compute a Hessian for a subset of variables without having to compute the sparsity pattern for the entire functions. 02-14 ===== Fix another bug in the derivative calculations for the c++11 version of the error function. 02-11 ===== Fix a bug in the optimization of conditional expressions. To be specific, if :ref:`faq@Speed@NDEBUG` is not defined, one could get an assert with the message: :: Error detected by false result for var_index_ >= NumRes(op_) 02-10 ===== The change on :ref:`2014-12-23` introduced a bug when the c++11 version of the error function was used with an :ref:`optimized` function. There was also a bug in the sparsity calculations for when this erf function was included. These bugs have been fixed. 02-09 ===== The test ``test_more/optimize.cpp`` was failing on some systems because an exactly equality check should have been a near equal check. This has been fixed. 02-07 ===== On some systems, the library corresponding to ``speed/src`` could not be found. This library is only used for testing and so has been changed to always be static (hence does not need to be found at run time). 02-06 ===== There was a bug in the coloring method change on :ref:`2015-01-07` . To be specific, *work* . ``color_method`` was not being set to ``"cppad.symmetric"`` after *work* . ``color_method.clear`` () . This has been fixed. 02-04 ===== #. Enable the same install of CppAD to be used both with and without C++11 features; e.g., with both ``g++ --std=c++11`` and with ``g++ --std=c++98`` . Previously if the :ref:`cmake@cppad_cxx_flags` specified C++11, then it could only be used in that way. #. The :ref:`cmake@CMake Command` now requires the version of ``cmake`` to be greater than or equal 2.8 (due a bug in ``cmake`` version 2.6). 02-03 ===== Improved the searching for the boost multi-threading library which is used for by the :ref:`team_bthread.cpp-name` case of the :ref:`thread_test.cpp-name` example and test. 02-02 ===== Improve the documentation for the :ref:`cmake@CMake Command` line options ``cmake_install_`` *dir* for *dir* equal to ``prefix`` , ``postfix`` , ``includedirs`` , ``libdirs`` , ``datadir`` , and ``docdir`` . 01-30 ===== Fix bug in :ref:`link_sparse_hessian-name` speed test introduced on :ref:`whats_new_15@mm-dd@01-09` below. 01-29 ===== Fix some warnings generated by ``g++ 4.9.2`` . 01-26 ===== The change of global variables to local in ``cppad/local/op_code.hpp`` on :ref:`2014-50-14` created a bug in :ref:`parallel_ad-name` (some local statics needed to be initialized). This has been fixed. 01-23 ===== There was a bug in the :ref:`cmake-name` install detection of compiler features. One symptom of this bug was that on systems that had the ``gettimeofday`` function, the cmake install would sometimes report ``cppad_has_gettimeofday`` = 0 This has been fixed. 01-21 ===== The deprecated :ref:`configure-name` procedure had a bug in the detection of when the size of an ``unsigned int`` was the same as the size of a ``size_t`` . This has been fixed. 01-20 ===== #. The new :ref:`compare_change-name` interface has been created and the old :ref:`CompareChange-name` function has been deprecated; see the :ref:`compare_change.cpp-name` example. This enables one to determine the source code during taping that corresponds to changes in the comparisons during :ref:`zero order forward` operations; see :ref:`Independent@abort_op_index` . #. This new :ref:`compare_change-name` interface can detect comparison changes even if :ref:`Faq@Speed@NDEBUG` is defined and even if :ref:`f.optimize()` has been called. The deprecated function ``CompareChange`` used to always return zero after *f* . ``optimize`` () and was not even defined when ``NDEBUG`` was defined. There was a resulting speed effect for this; see :ref:`optimize@options@no_compare_op` . #. The date when some features where deprecated has been added to the documentation. For example, see :ref:`include_deprecated@Deprecated 2006-12-17` . 01-09 ===== #. The change 01-07 below included (but did not mention) using a sparse, instead of full, structure for the Hessian in the test. This has also been done for the :ref:`sparse Jacobian` test. #. For both the :ref:`sparse_jacobian` and :ref:`sparse_hessian` tests, the sparse function is only chosen once (it used to be different for every repeat). This reduced the amount of computation not connected what is being tested. It also make the :ref:`speed_main@Global Options@onetape` a valid option for these tests. #. There was a bug in the :ref:`multiple direction forward` routine. Results for function values that are :ref:`con_dyn_var@Parameter` were not being computed properly (all the derivatives are zero in this case). This has been fixed. 01-07 ===== The following changes were merged in from the ``color_hes`` branch: #. Specify the type of :ref:`coloring` for the sparse hessian calculations. To be specific, instead of ``"cppad"`` and ``"colpack"`` , the choices are ``"cppad.symmetric"`` , ``"cppad.general"`` , and ``"colpack.star"`` . This is not compatible with the change on :ref:`whats_new_15@mm-dd@01-02` , which was so recent that this should not be a problem. #. The :ref:`link_sparse_hessian@n_color` values were not being returned properly by :ref:`cppad_sparse_hessian.cpp-name` and :ref:`adolc_sparse_hessian.cpp-name` . The CppAD version has been fixed and the ADOL-C version has been set to zero. #. The :ref:`link_sparse_hessian-name` example case was to sparse for good testing (by mistake). This has been fixed. #. Add *n_sweep* (now *n_color* ) to :ref:`link_sparse_hessian` and :ref:`speed_main` . #. Change the ``cppad`` sparse Hessian :ref:`sparse_hessian@work@color_method` to take advantage of the symmetry of the Hessian (in a similar fashion to the ``colpack`` coloring method). 01-02 ===== Added to option to uses :ref:`colpack` for the sparse Hessian :ref:`coloring method` ; see the example :ref:`colpack_hes.cpp-name` . {xrst_end whats_new_15}