Program Listing for File qmi_oracle.hpp¶
↰ Return to documentation for file (ellcpp/oracles/qmi_oracle.hpp)
// -*- coding: utf-8 -*-
#pragma once
#include "ldlt_ext.hpp"
#include <gsl/span>
#include <optional>
#include <xtensor/xarray.hpp>
class qmi_oracle
{
using Arr = xt::xarray<double, xt::layout_type::row_major>;
using Cut = std::tuple<Arr, double>;
private:
double _t = 0.;
size_t _nx = 0;
size_t _count = 0;
const size_t _n;
const size_t _m;
const gsl::span<const Arr> _F;
const Arr _F0;
Arr _Fx;
public:
ldlt_ext _Q;
qmi_oracle(gsl::span<const Arr> F, Arr F0)
: _n {F0.shape()[0]}
, _m {F0.shape()[1]}
, _F {F}
, _F0 {std::move(F0)}
, _Fx {zeros({_m, _n})} // transposed
, _Q(_m) // take column
{
}
auto update(double t) -> void
{
this->_t = t;
}
auto operator()(const Arr& x) -> std::optional<Cut>;
};