Program Listing for File lowpass_oracle.hpp

Return to documentation for file (ellcpp/oracles/lowpass_oracle.hpp)

// -*- coding: utf-8 -*-
#pragma once

#include <limits>
#include <xtensor/xarray.hpp>

// from itertools import chain

class lowpass_oracle
{
    using Arr = xt::xarray<double, xt::layout_type::row_major>;
    using ParallelCut = std::tuple<Arr, Arr>;

  private:
    mutable size_t _i_Anr {};
    mutable size_t _i_As {};
    mutable size_t _i_Ap {};
    // mutable unsigned int _count{};

    const Arr& _Ap;
    const Arr& _As;
    const Arr& _Anr;
    double _Lpsq;
    double _Upsq;

  public:
    lowpass_oracle(
        const Arr& Ap, const Arr& As, const Arr& Anr, double Lpsq, double Upsq)
        : _Ap {Ap}
        , _As {As}
        , _Anr {Anr}
        , _Lpsq {Lpsq}
        , _Upsq {Upsq}
    {
    }

    auto operator()(const Arr& x, double& Spsq) const
        -> std::tuple<ParallelCut, bool>;
};