inline void forward_sparse_jacobian_cond_op( size_t i_z , const addr_t* arg , size_t num_par , Vector_set& sparsity ) { CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) < static_cast<size_t> (CompareNe) ); CPPAD_ASSERT_UNKNOWN( NumArg(CExpOp) == 6 ); CPPAD_ASSERT_UNKNOWN( NumRes(CExpOp) == 1 ); CPPAD_ASSERT_UNKNOWN( arg[1] != 0 ); # ifndef NDEBUG if( arg[1] & 1 ) { CPPAD_ASSERT_UNKNOWN( size_t(arg[2]) < i_z ); } else { CPPAD_ASSERT_UNKNOWN( size_t(arg[2]) < num_par ); } if( arg[1] & 2 ) { CPPAD_ASSERT_UNKNOWN( size_t(arg[3]) < i_z ); } else { CPPAD_ASSERT_UNKNOWN( size_t(arg[3]) < num_par ); } # endif if( arg[1] & 4 ) { CPPAD_ASSERT_UNKNOWN( size_t(arg[4]) < i_z ); if( arg[1] & 8 ) { CPPAD_ASSERT_UNKNOWN( size_t(arg[5]) < i_z ); sparsity.binary_union(i_z, arg[4], arg[5], sparsity); } else { CPPAD_ASSERT_UNKNOWN( size_t(arg[5]) < num_par ); sparsity.assignment(i_z, arg[4], sparsity); } } else { CPPAD_ASSERT_UNKNOWN( size_t(arg[4]) < num_par ); if( arg[1] & 8 ) { CPPAD_ASSERT_UNKNOWN( size_t(arg[5]) < i_z ); sparsity.assignment(i_z, arg[5], sparsity); } else { CPPAD_ASSERT_UNKNOWN( size_t(arg[5]) < num_par ); sparsity.clear(i_z); } } return; }
inline void forward_sparse_jacobian_unary_op( size_t i_z , size_t i_x , Vector_set& sparsity ) { // check assumptions CPPAD_ASSERT_UNKNOWN( i_x < i_z ); sparsity.assignment(i_z, i_x, sparsity); }
inline void forward_sparse_load_op( OpCode op , size_t i_z , const addr_t* arg , size_t num_combined , const size_t* combined , Vector_set& var_sparsity , Vector_set& vecad_sparsity ) { CPPAD_ASSERT_UNKNOWN( NumArg(op) == 3 ); CPPAD_ASSERT_UNKNOWN( NumRes(op) == 1 ); CPPAD_ASSERT_UNKNOWN( 0 < arg[0] ); CPPAD_ASSERT_UNKNOWN( size_t(arg[0]) < num_combined ); size_t i_v = combined[ arg[0] - 1 ]; CPPAD_ASSERT_UNKNOWN( i_v < vecad_sparsity.n_set() ); var_sparsity.assignment(i_z, i_v, vecad_sparsity); return; }