29 using pairss = std::pair<size_t, size_t>;
31 static const std::vector<std::set<pairss> > EMPTYVECTORSETSS;
32 static const std::vector<std::set<size_t> > EMPTYVECTORSETS;
33 static const std::map<size_t, std::set<size_t> > EMPTYMAPSETS;
47 std::vector<std::set<size_t> > hessTapeSparsity_;
53 std::map<pairss, std::vector<std::set<pairss> > > hessOrig2Iter2TapeJ1TapeJ2_;
58 std::map<pairss, std::vector<std::set<size_t> > > hessOrig2Iter2TapeJ1OrigJ2_;
63 std::map<pairss, std::vector<std::set<size_t> > > hessOrig2Iter2OrigJ1TapeJ2_;
68 std::set<pairss> hessOrigJ1OrigJ2_;
73 std::map<pairss, std::map<size_t, std::set<size_t> > > hessOrig2TempTapeJ22Iter_;
79 hessSparsity_(
false) {
87 CPPADCG_ASSERT_UNKNOWN(model !=
nullptr);
113 std::set<size_t> ::const_iterator
itTape2;
118 std::vector<std::set<pairss> >&
iterations = hessOrig2Iter2TapeJ1TapeJ2_[
orig];
126 std::vector<std::set<size_t> >&
iterations = hessOrig2Iter2TapeJ1OrigJ2_[
orig];
139 std::set<size_t> ::const_iterator
itTape2;
143 std::vector<std::set<size_t> >&
iterations = hessOrig2Iter2OrigJ1TapeJ2_[
orig];
151 hessOrigJ1OrigJ2_.insert(
orig);
162 std::set<size_t> ::const_iterator
itTape2;
166 std::map<size_t, std::set<size_t> >&
var2iters = hessOrig2TempTapeJ22Iter_[
pos];
173 hessSparsity_ =
true;
177 inline const std::vector<std::set<size_t> >& getHessianSparsity()
const {
178 return hessTapeSparsity_;
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;
201 inline const std::vector<std::set<size_t> >& getHessianIndexedNonIndexedTapeIndexes(
size_t origJ1,
205 std::map<pairss, std::vector<std::set<size_t> > > ::const_iterator
it;
206 it = hessOrig2Iter2TapeJ1OrigJ2_.find(
orig);
207 if (
it != hessOrig2Iter2TapeJ1OrigJ2_.end()) {
210 return EMPTYVECTORSETS;
214 inline const std::vector<std::set<size_t> >& getHessianNonIndexedIndexedTapeIndexes(
size_t origJ1,
218 std::map<pairss, std::vector<std::set<size_t> > >::const_iterator
it;
219 it = hessOrig2Iter2OrigJ1TapeJ2_.find(
orig);
220 if (
it != hessOrig2Iter2OrigJ1TapeJ2_.end()) {
223 return EMPTYVECTORSETS;
227 inline const std::set<std::pair<size_t, size_t> >& getHessianNonIndexedNonIndexedIndexes()
const {
228 return hessOrigJ1OrigJ2_;
231 inline const std::map<size_t, std::set<size_t> >& getHessianTempIndexedTapeIndexes(
size_t k1,
235 std::map<pairss, std::map<size_t, std::set<size_t> > >::const_iterator
it;
236 it = hessOrig2TempTapeJ22Iter_.find(
pos);
237 if (
it != hessOrig2TempTapeJ22Iter_.end()) {