#pragma once #include #include #include #include #include "autoopt/parabola_new.hpp" #include "autoopt/ellipse_new.hpp" #include "autoopt/importer.hpp" namespace autoopt { enum CurveType { Parabola, Ellipse }; using curves = std::variant; struct optimizer { public: void import_file(std::filesystem::path file_path); void set_lower_bound(double lb); void set_upper_bound(double ub); void set_curve_type(int curve_type); void set_initial(size_t i, double value); void set_delta(size_t i, double value); void flip_curve(); void calc_fit(); void set_plot_input_cb(std::function yss)> cb); void set_plot_slope_cb(std::function cb); void set_init_bounds_cb(std::function cb); void set_update_table_cb(std::function> entries)> cb); void set_plot_error_cb(std::function cb); private: struct data { raw_data _raw; double lb, ub; }; std::optional _data; std::optional _test_data; curves _curve; std::optional> _fit_result; std::function yss)> _plot_input_cb; std::function _init_bounds_cb; std::function _plot_slope_cb; std::function> entries)> _param_table_cb; std::function _plot_error_cb; void update_test_data(); void init_bounds_cb(); void plot_input_cb(); void plot_slope_cb(); void update_table_cb(); void plot_error_cb(); }; } // namespace autoopt