24#ifndef FPPERIODICCURVE_HPP_INCLUDED
25#define FPPERIODICCURVE_HPP_INCLUDED
27#include "fitpack_config.h"
30#include "fxArrays.hpp"
33#include "fitpack_periodic_curve_c.h"
43static_assert(
sizeof(fitpack_periodic_curve_c) ==
sizeof(fitpack_curve_c),
44 "C descriptor layout mismatch: fitpack_periodic_curve_c vs fitpack_curve_c");
105 if (
this != &other) {
164 return "fpPeriodicCurve";
197 return static_cast<fpCurve&
>(*this);
200 return static_cast<const fpCurve&
>(*this);
210 void new_points(std::vector<double>&
x, std::vector<double>&
y,
double*
w =
nullptr)
override {
211 int32_t n =
static_cast<int32_t
>(
x.size());
219 int32_t
new_fit(std::vector<double>&
x, std::vector<double>&
y,
double*
w =
nullptr,
double*
smoothing =
nullptr, int32_t*
order =
nullptr)
override {
220 int32_t n =
static_cast<int32_t
>(
x.size());
225 int32_t
fit(
double*
smoothing =
nullptr, int32_t*
order =
nullptr,
bool* keep_knots =
nullptr)
override {
237 double eval(
double x, int32_t& ierr)
override {
241 double eval(
double x)
const override {
248 std::vector<double>
eval(std::vector<double>&
x, int32_t& ierr)
override {
249 int32_t n =
static_cast<int32_t
>(
x.size());
250 std::vector<double> result(n);
251 int32_t n_result = 0;
253 result.resize(n_result);
261 std::vector<double>
eval(std::vector<double>&
x)
override {
262 int32_t n =
static_cast<int32_t
>(
x.size());
263 std::vector<double> result(n);
264 int32_t n_result = 0;
266 result.resize(n_result);
278 void fourier_coefficients(std::vector<double>& alpha, std::vector<double>& a, std::vector<double>& b, int32_t* ierr =
nullptr)
override {
279 int32_t n =
static_cast<int32_t
>(alpha.size());
287 std::vector<double>
zeros(int32_t max_size, int32_t* ierr =
nullptr)
override {
288 std::vector<double> result(max_size);
289 int32_t n_result = 0;
291 result.resize(n_result);
296 double dfdx(
double x, int32_t
order, int32_t* ierr =
nullptr)
override {
303 std::vector<double>
dfdx(std::vector<double>&
x, int32_t
order, int32_t* ierr =
nullptr)
override {
304 int32_t n =
static_cast<int32_t
>(
x.size());
305 std::vector<double> result(n);
306 int32_t n_result = 0;
308 result.resize(n_result);
316 std::vector<double>
dfdx_all(
double x, int32_t& ierr, int32_t n_result)
override {
317 std::vector<double> result(n_result);
326 std::vector<double>
dfdx_all(
double x, int32_t n_result)
override {
327 std::vector<double> result(n_result);
340 void insert_knot(std::vector<double>&
x, int32_t* ierr =
nullptr)
override {
341 int32_t n =
static_cast<int32_t
>(
x.size());
353 void comm_pack(std::vector<double>& buffer)
const override {
354 int32_t n =
static_cast<int32_t
>(buffer.size());
363 int32_t n =
static_cast<int32_t
>(buffer.size());
368 double mse()
const override {
380 int32_t n =
static_cast<int32_t
>(buffer.size());
389 int32_t n =
static_cast<int32_t
>(buffer.size());
virtual int32_t fit(double *smoothing=nullptr, int32_t *order=nullptr, bool *keep_knots=nullptr)
Definition fpCurve.hpp:227
fxArray< double > x() const
Zero-copy fxArray view of component 'x'.
Definition fpCurve.hpp:431
virtual double eval(double x, int32_t &ierr)
Definition fpCurve.hpp:239
int32_t & order()
Definition fpCurve.hpp:700
virtual int32_t interpolate(int32_t *order=nullptr, bool *reset_knots=nullptr)
Definition fpCurve.hpp:231
virtual int32_t new_fit(std::vector< double > &x, std::vector< double > &y, double *w=nullptr, double *smoothing=nullptr, int32_t *order=nullptr)
new_fit
Definition fpCurve.hpp:221
fxArray< double > y() const
Zero-copy fxArray view of component 'y'.
Definition fpCurve.hpp:476
fpCurve()
Default constructor - allocates new fitpack_curve.
Definition fpCurve.hpp:65
fxArray< double > w() const
Zero-copy fxArray view of component 'w'.
Definition fpCurve.hpp:566
double & smoothing()
Definition fpFitter.hpp:317
T * as()
Definition fpFitter.hpp:360
std::vector< double > eval(std::vector< double > &x) override
eval
Definition fpPeriodicCurve.hpp:261
void new_points(std::vector< double > &x, std::vector< double > &y, double *w=nullptr) override
new_points
Definition fpPeriodicCurve.hpp:210
double eval(double x, int32_t &ierr) override
Definition fpPeriodicCurve.hpp:237
int32_t comm_size() const override
Definition fpPeriodicCurve.hpp:346
std::vector< double > dfdx_all(double x, int32_t &ierr, int32_t n_result) override
dfdx_all
Definition fpPeriodicCurve.hpp:316
void comm_expand(std::vector< double > &buffer) override
comm_expand
Definition fpPeriodicCurve.hpp:362
fpPeriodicCurve(fitpack_periodic_curve_c &c_wrapper, ViewTag)
Non-owning view ctor: bit-copy the C handle, mark is_pointer=true. Used by parent classes' polymorphi...
Definition fpPeriodicCurve.hpp:129
fpPeriodicCurve(const fpPeriodicCurve &other)
Copy constructor - deep copy.
Definition fpPeriodicCurve.hpp:77
fpPeriodicCurve(NoAlloc tag)
Definition fpPeriodicCurve.hpp:412
int32_t interpolate(int32_t *order=nullptr, bool *reset_knots=nullptr) override
Definition fpPeriodicCurve.hpp:229
void comm_pack(std::vector< double > &buffer) const override
comm_pack
Definition fpPeriodicCurve.hpp:353
void insert_knot(double x, int32_t *ierr=nullptr) override
Definition fpPeriodicCurve.hpp:333
int32_t least_squares(double *smoothing=nullptr, bool *reset_knots=nullptr) override
Definition fpPeriodicCurve.hpp:233
fpCurve & as_parent()
Upcast to parent type (reference, no copy)
Definition fpPeriodicCurve.hpp:196
fpPeriodicCurve & operator=(fpPeriodicCurve &&other) noexcept
Move assignment - transfer ownership.
Definition fpPeriodicCurve.hpp:104
bool is_allocated() const override
Check if object is allocated.
Definition fpPeriodicCurve.hpp:141
static fpPeriodicCurve make_view()
Construct an empty (non-owning) wrapper, for use as a view target.
Definition fpPeriodicCurve.hpp:189
const char * c_type_name() const override
Return the C wrapper struct name for this class (e.g. "fitpack_periodic_curve_c").
Definition fpPeriodicCurve.hpp:155
double dfdx(double x, int32_t order, int32_t *ierr=nullptr) override
Definition fpPeriodicCurve.hpp:296
~fpPeriodicCurve() override
Destructor - deallocates if owned.
Definition fpPeriodicCurve.hpp:70
const fitpack_periodic_curve_c & c_handle() const
Get underlying C wrapper (const, for interop)
Definition fpPeriodicCurve.hpp:177
bool is_pointer() const override
Check if this is a non-owning pointer.
Definition fpPeriodicCurve.hpp:148
double mse() const override
Definition fpPeriodicCurve.hpp:368
std::vector< double > zeros(int32_t max_size, int32_t *ierr=nullptr) override
zeros
Definition fpPeriodicCurve.hpp:287
int32_t new_fit(std::vector< double > &x, std::vector< double > &y, double *w=nullptr, double *smoothing=nullptr, int32_t *order=nullptr) override
new_fit
Definition fpPeriodicCurve.hpp:219
void fourier_coefficients(std::vector< double > &alpha, std::vector< double > &a, std::vector< double > &b, int32_t *ierr=nullptr) override
fourier_coefficients
Definition fpPeriodicCurve.hpp:278
fpPeriodicCurve(fpPeriodicCurve &&other) noexcept
Move constructor - transfer ownership.
Definition fpPeriodicCurve.hpp:96
std::vector< double > dfdx(std::vector< double > &x, int32_t order, int32_t *ierr=nullptr) override
dfdx
Definition fpPeriodicCurve.hpp:303
std::vector< double > dfdx_all(double x, int32_t n_result) override
dfdx_all
Definition fpPeriodicCurve.hpp:326
void core_comm_pack(std::vector< double > &buffer) const override
core_comm_pack
Definition fpPeriodicCurve.hpp:379
void insert_knot(std::vector< double > &x, int32_t *ierr=nullptr) override
insert_knot
Definition fpPeriodicCurve.hpp:340
double integral(double from, double to) override
Definition fpPeriodicCurve.hpp:271
void destroy_base() override
Definition fpPeriodicCurve.hpp:394
std::vector< double > eval(std::vector< double > &x, int32_t &ierr) override
eval
Definition fpPeriodicCurve.hpp:248
fpPeriodicCurve(fitpack_periodic_curve_c &c_wrapper, bool move=false)
Construct from existing C wrapper (takes ownership if move=true)
Definition fpPeriodicCurve.hpp:115
const fpCurve & as_parent() const
Definition fpPeriodicCurve.hpp:199
int32_t core_comm_size() const override
Definition fpPeriodicCurve.hpp:372
const char * cpp_type_name() const override
Return the fully-qualified C++ class name for this class. Owned by the C++ layer — does not round-tri...
Definition fpPeriodicCurve.hpp:163
fpPeriodicCurve()
Default constructor - allocates new fitpack_periodic_curve.
Definition fpPeriodicCurve.hpp:63
fitpack_periodic_curve_c & c_handle()
Get underlying C wrapper (for interop)
Definition fpPeriodicCurve.hpp:170
void core_comm_expand(std::vector< double > &buffer) override
core_comm_expand
Definition fpPeriodicCurve.hpp:388
double eval(double x) const override
Definition fpPeriodicCurve.hpp:241
fpPeriodicCurve & operator=(const fpPeriodicCurve &other)
Copy assignment - deep copy.
Definition fpPeriodicCurve.hpp:85
int32_t fit(double *smoothing=nullptr, int32_t *order=nullptr, bool *keep_knots=nullptr) override
Definition fpPeriodicCurve.hpp:225
Tag type for derived class constructors (no allocation)
Definition fpFitter.hpp:349
Tag type for non-owning view constructors of polymorphic concrete subtypes. Declared on roots and abs...
Definition fpFitter.hpp:103