87 CPPADCG_ASSERT_UNKNOWN(model !=
nullptr);
96 hessTapeSparsity_ = hessianSparsitySet<std::vector<std::set<size_t> >,
CGB>(fun,
tapeI);
101 size_t nIndexed = indexedIndepIndexes.size();
102 size_t nNonIndexed = nonIndexedIndepIndexes.size();
103 size_t nTemp = temporaryIndependents.size();
109 for (
size_t tapeJ1 = 0; tapeJ1 < nIndexed; tapeJ1++) {
110 const std::set<size_t>& hessRow = hessTapeSparsity_[tapeJ1];
111 size_t j1 = indexedIndepIndexes[tapeJ1][iter].original;
113 std::set<size_t> ::const_iterator itTape2;
114 for (itTape2 = hessRow.begin(); itTape2 != hessRow.end() && *itTape2 < nIndexed; ++itTape2) {
115 size_t j2 = indexedIndepIndexes[*itTape2][iter].original;
117 pairss tapeTape(tapeJ1, *itTape2);
118 std::vector<std::set<pairss> >&
iterations = hessOrig2Iter2TapeJ1TapeJ2_[orig];
123 for (; itTape2 != hessRow.end() && *itTape2 < nIndexed + nNonIndexed; ++itTape2) {
124 size_t j2 = nonIndexedIndepIndexes[*itTape2 - nIndexed].original;
126 std::vector<std::set<size_t> >&
iterations = hessOrig2Iter2TapeJ1OrigJ2_[orig];
135 for (
size_t tapeJ1 = nIndexed; tapeJ1 < nIndexed + nNonIndexed; tapeJ1++) {
136 const std::set<size_t>& hessRow = hessTapeSparsity_[tapeJ1];
137 size_t j1 = nonIndexedIndepIndexes[tapeJ1 - nIndexed].original;
139 std::set<size_t> ::const_iterator itTape2;
140 for (itTape2 = hessRow.begin(); itTape2 != hessRow.end() && *itTape2 < nIndexed; ++itTape2) {
141 size_t j2 = indexedIndepIndexes[*itTape2][iter].original;
143 std::vector<std::set<size_t> >&
iterations = hessOrig2Iter2OrigJ1TapeJ2_[orig];
148 for (; itTape2 != hessRow.end() && *itTape2 < nIndexed + nNonIndexed; ++itTape2) {
149 size_t j2 = nonIndexedIndepIndexes[*itTape2 - nIndexed].original;
151 hessOrigJ1OrigJ2_.insert(orig);
158 for (
size_t tapeJ1 = nIndexed + nNonIndexed; tapeJ1 < nIndexed + nNonIndexed + nTemp; tapeJ1++) {
159 const std::set<size_t>& hessRow = hessTapeSparsity_[tapeJ1];
160 size_t k1 = temporaryIndependents[tapeJ1 - nIndexed - nNonIndexed].original;
162 std::set<size_t> ::const_iterator itTape2;
163 for (itTape2 = hessRow.begin(); itTape2 != hessRow.end() && *itTape2 < nIndexed; ++itTape2) {
164 size_t j2 = indexedIndepIndexes[*itTape2][iter].original;
166 std::map<size_t, std::set<size_t> >& var2iters = hessOrig2TempTapeJ22Iter_[pos];
167 var2iters[*itTape2].insert(iter);
173 hessSparsity_ =
true;
189 size_t origJ2)
const {
190 pairss orig(origJ1, origJ2);
192 std::map<pairss, std::vector<std::set<pairss> > >::const_iterator it;
193 it = hessOrig2Iter2TapeJ1TapeJ2_.find(orig);
194 if (it != hessOrig2Iter2TapeJ1TapeJ2_.end()) {
197 return EMPTYVECTORSETSS;