Coverage Report

Created: 2026-08-14 07:10

next uncovered line (L), next uncovered region (R), next uncovered branch (B)
/src/quantlib/ql/termstructures/globalbootstrapvars.cpp
Line
Count
Source
1
/* -*- mode: c++; tab-width: 4; indent-tabs-mode: nil; c-basic-offset: 4 -*- */
2
3
#include <ql/termstructures/globalbootstrapvars.hpp>
4
#include <ql/utilities/null.hpp>
5
#include <ql/utilities/vectors.hpp>
6
#include <utility>
7
8
namespace QuantLib {
9
10
    SimpleQuoteVariables::SimpleQuoteVariables(std::vector<ext::shared_ptr<SimpleQuote>> quotes,
11
                                               std::vector<Real> initialGuesses,
12
                                               std::vector<Real> lowerBounds)
13
0
    : quotes_(std::move(quotes)), initialGuesses_(std::move(initialGuesses)),
14
0
      lowerBounds_(std::move(lowerBounds)) {
15
0
        QL_REQUIRE(initialGuesses_.size() <= quotes_.size(), "too many initialGuesses");
16
0
        QL_REQUIRE(lowerBounds_.size() <= quotes_.size(), "too many lowerBounds");
17
0
    }
18
19
0
    Array SimpleQuoteVariables::initialize(bool validData) {
20
0
        Array guesses(quotes_.size());
21
0
        for (Size i = 0, size = guesses.size(); i < size; ++i) {
22
0
            Real guess;
23
0
            if (validData) {
24
0
                guess = quotes_[i]->value();
25
0
            } else {
26
0
                guess = detail::get(initialGuesses_, i, 0.0);
27
0
                quotes_[i]->setValue(guess);
28
0
            }
29
0
            guesses[i] = transformInverse(guess, i);
30
0
        }
31
0
        return guesses;
32
0
    }
33
34
0
    void SimpleQuoteVariables::update(const Array& x) {
35
0
        for (Size i = 0, size = x.size(); i < size; ++i) {
36
0
            quotes_[i]->setValue(transformDirect(x[i], i));
37
0
        }
38
0
    }
39
40
0
    Real SimpleQuoteVariables::transformDirect(Real x, Size i) const {
41
0
        const Real lb = detail::get(lowerBounds_, i, Null<Real>());
42
0
        return lb == Null<Real>() ? x : std::exp(x) + lb;
43
0
    }
44
45
0
    Real SimpleQuoteVariables::transformInverse(Real x, Size i) const {
46
0
        const Real lb = detail::get(lowerBounds_, i, Null<Real>());
47
0
        return lb == Null<Real>() ? x : std::log(x - lb);
48
0
    }
49
}