2 # ifndef CPPAD_LOCAL_SPARSE_BINARY_OP_HPP 
    3 # define CPPAD_LOCAL_SPARSE_BINARY_OP_HPP 
   15 namespace CppAD { 
namespace local { 
 
   79 template <
class Vector_set>
 
   83      Vector_set&       sparsity      )
 
   89      sparsity.binary_union(i_z, arg[0], arg[1], sparsity);
 
  155 template <
class Vector_set>
 
  159      Vector_set&         sparsity      )
 
  165      sparsity.binary_union(arg[0], arg[0], i_z, sparsity);
 
  166      sparsity.binary_union(arg[1], arg[1], i_z, sparsity);
 
  182 template <
class Vector_set>
 
  187      const Vector_set&    for_jac_sparsity   ,
 
  188      Vector_set&          rev_hes_sparsity   )
 
  194      rev_hes_sparsity.binary_union(arg[0], arg[0], i_z, rev_hes_sparsity);
 
  195      rev_hes_sparsity.binary_union(arg[1], arg[1], i_z, rev_hes_sparsity);
 
  197      jac_reverse[arg[0]] |= jac_reverse[i_z];
 
  198      jac_reverse[arg[1]] |= jac_reverse[i_z];
 
  214 template <
class Vector_set>
 
  219      const Vector_set&    for_jac_sparsity   ,
 
  220      Vector_set&          rev_hes_sparsity   )
 
  226      rev_hes_sparsity.binary_union(arg[0], arg[0], i_z, rev_hes_sparsity);
 
  227      rev_hes_sparsity.binary_union(arg[1], arg[1], i_z, rev_hes_sparsity);
 
  229      if( jac_reverse[i_z] )
 
  230      {    rev_hes_sparsity.binary_union(
 
  231                arg[0], arg[0], arg[1], for_jac_sparsity);
 
  232           rev_hes_sparsity.binary_union(
 
  233                arg[1], arg[1], arg[0], for_jac_sparsity);
 
  236      jac_reverse[arg[0]] |= jac_reverse[i_z];
 
  237      jac_reverse[arg[1]] |= jac_reverse[i_z];
 
  252 template <
class Vector_set>
 
  257      const Vector_set&    for_jac_sparsity   ,
 
  258      Vector_set&          rev_hes_sparsity   )
 
  264      rev_hes_sparsity.binary_union(arg[0], arg[0], i_z, rev_hes_sparsity);
 
  265      rev_hes_sparsity.binary_union(arg[1], arg[1], i_z, rev_hes_sparsity);
 
  267      if( jac_reverse[i_z] )
 
  268      {    rev_hes_sparsity.binary_union(
 
  269                arg[0], arg[0], arg[1], for_jac_sparsity);
 
  270           rev_hes_sparsity.binary_union(
 
  271                arg[1], arg[1], arg[0], for_jac_sparsity);
 
  272           rev_hes_sparsity.binary_union(
 
  273                arg[1], arg[1], arg[1], for_jac_sparsity);
 
  276      jac_reverse[arg[0]] |= jac_reverse[i_z];
 
  277      jac_reverse[arg[1]] |= jac_reverse[i_z];
 
  292 template <
class Vector_set>
 
  297      const Vector_set&    for_jac_sparsity   ,
 
  298      Vector_set&          rev_hes_sparsity   )
 
  304      rev_hes_sparsity.binary_union(arg[0], arg[0], i_z, rev_hes_sparsity);
 
  305      rev_hes_sparsity.binary_union(arg[1], arg[1], i_z, rev_hes_sparsity);
 
  307      if( jac_reverse[i_z] )
 
  309           rev_hes_sparsity.binary_union(
 
  310                arg[0], arg[0], arg[0], for_jac_sparsity);
 
  311           rev_hes_sparsity.binary_union(
 
  312                arg[0], arg[0], arg[1], for_jac_sparsity);
 
  314           rev_hes_sparsity.binary_union(
 
  315                arg[1], arg[1], arg[0], for_jac_sparsity);
 
  316           rev_hes_sparsity.binary_union(
 
  317                arg[1], arg[1], arg[1], for_jac_sparsity);
 
  322      jac_reverse[arg[0]] |= jac_reverse[i_z];
 
  323      jac_reverse[arg[1]] |= jac_reverse[i_z];
 
  348 template <
class Vector_set>
 
  351      const Vector_set&   for_jac_sparsity  ,
 
  352      Vector_set&         for_hes_sparsity  )
 
  355      typename Vector_set::const_iterator itr_0(for_jac_sparsity, arg[0]);
 
  359      while( i_x < for_jac_sparsity.end() )
 
  361           for_hes_sparsity.binary_union(i_x, i_x, arg[1], for_jac_sparsity);
 
  366      typename Vector_set::const_iterator itr_1(for_jac_sparsity, arg[1]);
 
  370      while( i_x < for_jac_sparsity.end() )
 
  372           for_hes_sparsity.binary_union(i_x, i_x, arg[0], for_jac_sparsity);
 
  398 template <
class Vector_set>
 
  401      const Vector_set&   for_jac_sparsity  ,
 
  402      Vector_set&         for_hes_sparsity  )
 
  405      typename Vector_set::const_iterator itr_0(for_jac_sparsity, arg[0]);
 
  409      while( i_x < for_jac_sparsity.end() )
 
  411           for_hes_sparsity.binary_union(i_x, i_x, arg[1], for_jac_sparsity);
 
  416      typename Vector_set::const_iterator itr_1(for_jac_sparsity, arg[1]);
 
  420      while( i_x < for_jac_sparsity.end() )
 
  422           for_hes_sparsity.binary_union(i_x, i_x, arg[0], for_jac_sparsity);
 
  424           for_hes_sparsity.binary_union(i_x, i_x, arg[1], for_jac_sparsity);
 
  450 template <
class Vector_set>
 
  453      const Vector_set&   for_jac_sparsity  ,
 
  454      Vector_set&         for_hes_sparsity  )
 
  457      typename Vector_set::const_iterator itr_0(for_jac_sparsity, arg[0]);
 
  461      while( i_x < for_jac_sparsity.end() )
 
  463           for_hes_sparsity.binary_union(i_x, i_x, arg[0], for_jac_sparsity);
 
  465           for_hes_sparsity.binary_union(i_x, i_x, arg[1], for_jac_sparsity);
 
  470      typename Vector_set::const_iterator itr_1(for_jac_sparsity, arg[1]);
 
  474      while( i_x < for_jac_sparsity.end() )
 
  476           for_hes_sparsity.binary_union(i_x, i_x, arg[0], for_jac_sparsity);
 
  478           for_hes_sparsity.binary_union(i_x, i_x, arg[1], for_jac_sparsity);
 
CPPAD_TAPE_ADDR_TYPE addr_t
void reverse_sparse_hessian_addsub_op(size_t i_z, const addr_t *arg, bool *jac_reverse, const Vector_set &for_jac_sparsity, Vector_set &rev_hes_sparsity)
Reverse mode Hessian sparsity pattern for add and subtract operators. 
void forward_sparse_hessian_mul_op(const addr_t *arg, const Vector_set &for_jac_sparsity, Vector_set &for_hes_sparsity)
Forward mode Hessian sparsity pattern for multiplication operator. 
void forward_sparse_hessian_pow_op(const addr_t *arg, const Vector_set &for_jac_sparsity, Vector_set &for_hes_sparsity)
Forward mode Hessian sparsity pattern for power operator. 
void reverse_sparse_hessian_pow_op(size_t i_z, const addr_t *arg, bool *jac_reverse, const Vector_set &for_jac_sparsity, Vector_set &rev_hes_sparsity)
Reverse mode Hessian sparsity pattern for power function. 
void reverse_sparse_hessian_mul_op(size_t i_z, const addr_t *arg, bool *jac_reverse, const Vector_set &for_jac_sparsity, Vector_set &rev_hes_sparsity)
Reverse mode Hessian sparsity pattern for multiplication operator. 
#define CPPAD_ASSERT_UNKNOWN(exp)
Check that exp is true, if not terminate execution. 
void reverse_sparse_hessian_div_op(size_t i_z, const addr_t *arg, bool *jac_reverse, const Vector_set &for_jac_sparsity, Vector_set &rev_hes_sparsity)
Reverse mode Hessian sparsity pattern for division operator. 
void forward_sparse_jacobian_binary_op(size_t i_z, const addr_t *arg, Vector_set &sparsity)
Forward mode Jacobian sparsity pattern for all binary operators. 
void reverse_sparse_jacobian_binary_op(size_t i_z, const addr_t *arg, Vector_set &sparsity)
Reverse mode Jacobian sparsity pattern for all binary operators. 
void forward_sparse_hessian_div_op(const addr_t *arg, const Vector_set &for_jac_sparsity, Vector_set &for_hes_sparsity)
Forward mode Hessian sparsity pattern for division operator.