1#ifndef CPPAD_CG_SPARSITY_INCLUDED
2#define CPPAD_CG_SPARSITY_INCLUDED
21template<
class VectorBool,
class Base>
23 size_t n =
fun.Domain();
26 for (
size_t j = 0;
j <
n;
j++) {
27 for (
size_t k = 0;
k <
n;
k++)
31 return fun.ForSparseJac(
n,
r);
35template<
class VectorBool,
class Base>
37 size_t m =
fun.Range();
40 for (
size_t i = 0;
i < m;
i++) {
41 for (
size_t k = 0;
k < m;
k++)
45 return fun.RevSparseJac(m, s);
48template<
class VectorSet,
class Base>
50 size_t n =
fun.Domain();
53 for (
size_t i = 0;
i <
n;
i++)
56 return fun.ForSparseJac(
n,
r);
59template<
class VectorSet,
class Base>
61 size_t m =
fun.Range();
64 for (
size_t i = 0;
i < m;
i++)
67 return fun.RevSparseJac(m,
s_s);
76template<
class VectorBool,
class Base>
78 size_t m =
fun.Range();
79 size_t n =
fun.Domain();
96template<
class VectorSet,
class Base>
98 size_t m =
fun.Range();
99 size_t n =
fun.Domain();
116inline bool estimateBestJacobianADMode(
const std::vector<size_t>&
jacRows,
117 const std::vector<size_t>&
jacCols) {
118 std::set<size_t> rows, cols;
134template<
class VectorBool,
class Base>
137 size_t m =
fun.Range();
138 size_t n =
fun.Domain();
144 for (
size_t j = 0;
j <
n;
j++) {
145 for (
size_t k = 0;
k <
n;
k++)
146 r[
j *
n +
k] =
false;
149 fun.ForSparseJac(
n,
r);
152 for (
size_t i = 0;
i < m;
i++)
157template<
class VectorSet,
class Base>
159 const std::set<size_t>& w,
161 size_t n =
fun.Domain();
167 for (
size_t j = 0;
j <
n;
j++)
169 fun.ForSparseJac(
n,
r);
177template<
class VectorSet,
class Base>
179 size_t m =
fun.Range();
182 for (
size_t i = 0;
i < m;
i++) {
196template<
class VectorBool,
class Base>
200 size_t m =
fun.Range();
201 size_t n =
fun.Domain();
207 for (
size_t j = 0;
j <
n;
j++) {
208 for (
size_t k = 0;
k <
n;
k++)
209 r[
j *
n +
k] =
false;
212 fun.ForSparseJac(
n,
r);
215 for (
size_t ii = 0;
ii < m;
ii++)
221template<
class VectorSet,
class Base>
225 size_t n =
fun.Domain();
228 for (
size_t j = 0;
j <
n;
j++)
230 fun.ForSparseJac(
n,
r);
238template<
class VectorBool,
class VectorSize>
239inline void generateSparsityIndexes(
const VectorBool& sparsity,
244 assert(sparsity.size() == m *
n);
248 for (
size_t i = 0;
i < sparsity.size();
i++) {
258 for (
size_t i = 0;
i < m;
i++) {
259 for (
size_t j = 0;
j <
n;
j++) {
260 if (sparsity[
i *
n +
j]) {
268 assert(nnz == row.size());
271template<
class VectorSet,
class VectorSize>
272inline void generateSparsityIndexes(
const VectorSet& sparsity,
275 size_t m = sparsity.size();
279 for (
size_t i = 0;
i < m;
i++) {
280 nnz += sparsity[
i].size();
290 for (
size_t i = 0;
i < m;
i++) {
293 std::fill(&row[0] + nnz, &row[0] + nnz +
rowNnz,
i);
299template<
class VectorSet,
class VectorSize>
300inline void generateSparsitySet(
const VectorSize& row,
302 VectorSet& sparsity) {
303 assert(row.size() == col.size());
305 size_t nnz = row.size();
306 for (
size_t e = 0;
e < nnz;
e++) {
307 sparsity[row[
e]].insert(col[
e]);
bool GreaterThanZero(const cg::CG< Base > &x)