# SPDX-License-Identifier: EPL-2.0 OR GPL-2.0-or-later
# SPDX-FileCopyrightText: Bradley M. Bell <bradbell@seanet.com>
# SPDX-FileContributor: 2003-23 Bradley M. Bell
# ----------------------------------------------------------------------------

{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 <cppad/utility/to_string.hpp>``

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., ``<cppad/utility/vector.hpp>`` .

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<whats_new_17@mm-dd@02-10>` .

11-30
=====

#. The ``library`` section has been moved to the
   :ref:`utilities<utility-name>` 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 <cppad/runge_45.hpp>

   You should us the utility include instead; i.e.,
   ::

      # include <cppad/utility.hpp>

#. 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<include_deprecated-name>` 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<list_all_examples-name>` .
#. 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<Example-name>` .

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<dependency.cpp-name>` 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<CondExp-name>` 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<mul_level-name>`
   :ref:`conditional expressions<CondExp-name>` and
   :ref:`reverse mode<reverse-name>` .
#. 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<base_require@Absolute Zero, azmul>`
is now required for user defined base types.
This makes it possible to combine
:ref:`conditional expression<CondExp-name>` ,
:ref:`multiple levels<mul_level-name>` ,
: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<get_eigen.sh-name>` ,
:ref:`ipopt<get_ipopt.sh-name>` , and
:ref:`colpack<get_colpack.sh-name>` .
In addition, it can compare its :ref:`speed-name` with the external AD packages
:ref:`adolc<get_adolc.sh-name>` ,
:ref:`fadbad<get_fadbad.sh-name>` , and
:ref:`sacado<get_sacado.sh-name>` .
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<adouble> >`` where ``adouble``
is the ADOL-C AD type.
This has been fixed by adding a call to
:ref:`CPPAD_COND_EXP_REL<base_adolc.hpp@CondExpRel>` 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<atomic_two_option@atomic_sparsity@pack_sparsity_enum>` 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<chkpoint_one-name>` functions that used any of these operations.

08-31
=====

#. Mention the fact that using checkpoint functions can make
   :ref:`recordings faster<chkpoint_one@Purpose@Faster Recording>` .
#. Add the
   :ref:`pack<atomic_two_option@atomic_sparsity@pack_sparsity_enum>`
   sparsity option for :ref:`atomic_two-name` operations.
#. Add the pack sparsity option to
   :ref:`chkpoint_one<chkpoint_one@sparsity>` functions.
#. Added the ``example/atomic/sparsity.cpp`` example.
#. Remove mention of OpenMP from :ref:`thread_alloc::thread_num<ta_thread_num-name>`
   (: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<chkpoint_one@sparsity>` 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<chkpoint_one-name>` implementation were not using
the CppAD :ref:`ErrorHandler-name` . This has been fixed.

08-28
=====
Free :ref:`checkpoint<chkpoint_one-name>` 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<chkpoint_one-name>` function.

08-25
=====
Reduce the amount of memory required for :ref:`checkpoint<chkpoint_one-name>` 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<sparsity_sub.cpp@ForSparseJac>` and a subset
of the :ref:`Hessian<sparsity_sub.cpp@RevSparseHes>` .

08-17
=====

#. Do some optimization of the
   :ref:`checkpoint<chkpoint_one-name>` 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<base_limits-name>`
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<mul_level-name>` .

06-16
=====

#. There were some
   :ref:`cppad_assert@Unknown` asserts
   when the sparsity pattern *p* in
   :ref:`sparse_jacobian<sparse_jacobian@p>` and
   :ref:`sparse_hessian<sparse_hessian@p>` 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<CondExp-name>` ).

06-07
=====
Add a :ref:`absolute zero<base_require@Absolute Zero, azmul>` 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<CondExp-name>`
with :ref:`multiple levels of AD<mul_level-name>` 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<CondExp-name>` and :ref:`reverse mode<reverse-name>`
with :ref:`multiple levels of AD<mul_level-name>` .
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<zdouble@Motivation@CppAD>` 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<base_require@Absolute Zero, azmul>` .
   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<sparse_jacobian@work@p>` and
:ref:`sparse hessian<sparse_hessian@work@p>` documentation
for *work* and *p* .

03-13
=====
Remove the syntax

   ``AD`` < *Base* > *y* = *x*

for the :ref:`AD constructor<ad_ctor-name>` 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<ad_assign-name>` must be implicit.

03-06
=====
The developers of the
`TMB <https://github.com/kaskr/adcomp>`_ 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<condexp-name>` 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<reverse-name>` would propagate :ref:`nan-name`
through the :ref:`conditional expression<condexp-name>`
case that is not used.
For example, if
::

   Independent(ax);
   AD<double> aeps = 1e-10;
   ay[0] = CondExpGt( ax[0], aeps, 1.0/ax[0], 1.0/aeps );
   ADFun<double> 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<double> >`` 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<whats_new_14@mm-dd@12-23>` introduced a
bug when the c++11 version of the error function was used with
an :ref:`optimized<optimize-name>` 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<whats_new_15@mm-dd@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<whats_new_14@mm-dd@05-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<forward_zero-name>` 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()<optimize-name>` 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<link_sparse_jacobian-name>` test.
#. For both the
   :ref:`sparse_jacobian<link_sparse_jacobian-name>` and
   :ref:`sparse_hessian<link_sparse_hessian-name>` 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<forward_dir-name>` 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<sparse_hessian@work@color_method>`
   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<link_sparse_hessian@n_color>` and
   :ref:`speed_main<speed_main@Speed Results@n_color>` .
#. 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<colpack_prefix-name>` for the sparse Hessian
:ref:`coloring method<sparse_hessian@work@color_method>` ;
see the example :ref:`colpack_hes.cpp-name` .

{xrst_end whats_new_15}
