Skip to content

Commit 59b7650

Browse files
committed
fix fit loop
1 parent c497f87 commit 59b7650

7 files changed

Lines changed: 551 additions & 323 deletions

File tree

Cargo.lock

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
[package]
22
name = "curve-fit"
3-
version = "0.1.8"
3+
version = "0.1.9"
44
edition = "2024"
55
authors = ["hexqnt <hexqntlab@gmail.com>"]
66
license = "Apache-2.0 OR MIT"

src/app.rs

Lines changed: 31 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -70,6 +70,8 @@ use crate::domain::{
7070
AdamConfig, CurveFamily, CurveParams, FitResult, LbfgsConfig, NelderMeadConfig, NewtonCgConfig,
7171
OptimizerConfig, OptimizerMethod, Point, Points, SgdConfig, SteepestDescentConfig,
7272
};
73+
#[cfg(not(target_arch = "wasm32"))]
74+
use crate::fit::FitError;
7375
use crate::fit::IterationMetricSnapshot;
7476
use crate::fit::OptimizationLossMetric;
7577
use crate::fit::{
@@ -79,16 +81,9 @@ use crate::fit::{
7981
calculate_iteration_metrics_with_quantization, calculate_metrics_with_quantization,
8082
default_spline_initial_knot_y, sample_curve,
8183
};
82-
#[cfg(not(target_arch = "wasm32"))]
83-
use crate::fit::{
84-
FitError, fit_curve_with_progress_and_optimizer_config_and_loss_metric_and_metric_quantization,
85-
};
86-
#[cfg(target_arch = "wasm32")]
8784
use crate::fit::{
8885
IncrementalFitRunner, IncrementalFitStep, IncrementalSplineFitRunner, IncrementalSplineFitStep,
8986
};
90-
#[cfg(not(target_arch = "wasm32"))]
91-
use crate::fit::{IncrementalSplineFitRunner, IncrementalSplineFitStep};
9287

9388
#[cfg(not(target_arch = "wasm32"))]
9489
use std::sync::atomic::{AtomicBool, Ordering};
@@ -699,25 +694,39 @@ struct RightPanelFitSnapshot {
699694
optimizer: ActiveOptimizerSnapshot,
700695
}
701696

697+
#[derive(Debug)]
698+
struct ParametricIterationTraceEntry {
699+
iteration: u64,
700+
metrics: IterationMetricSnapshot,
701+
params: CurveParams,
702+
}
703+
704+
#[derive(Debug)]
705+
struct SplineIterationTraceEntry {
706+
iteration: u64,
707+
metrics: IterationMetricSnapshot,
708+
knot_y: Vec<f64>,
709+
curve: Vec<[f64; 2]>,
710+
}
711+
712+
#[derive(Debug)]
713+
enum FitRunUiSeed {
714+
Parametric { initial_params: CurveParams },
715+
Spline { initial_curve: Vec<PlotPoint> },
716+
}
717+
702718
#[cfg(not(target_arch = "wasm32"))]
703719
#[derive(Debug)]
704720
enum FitWorkerMessage {
705-
Iteration {
706-
iteration: u64,
707-
metrics: IterationMetricSnapshot,
708-
params: CurveParams,
709-
},
710-
SplineIteration {
711-
iteration: u64,
712-
metrics: IterationMetricSnapshot,
713-
knot_y: Vec<f64>,
714-
curve: Vec<[f64; 2]>,
715-
},
716721
Stopped,
717-
Finished(FitResult),
722+
Finished {
723+
result: FitResult,
724+
trace: Vec<ParametricIterationTraceEntry>,
725+
},
718726
SplineFinished {
719727
result: SplineResult,
720728
metrics: IterationMetricSnapshot,
729+
trace: Vec<SplineIterationTraceEntry>,
721730
},
722731
Failed(String),
723732
}
@@ -809,6 +818,7 @@ pub struct CurveFitApp {
809818
fit_result: Option<FitResult>,
810819
spline_result: Option<SplineResult>,
811820
active_fit_points: Option<Points>,
821+
fit_run_ui_seed: Option<FitRunUiSeed>,
812822
result_metrics: Option<ExtendedMetrics>,
813823
residual_plot_points: Vec<PlotPoint>,
814824
spline_plot_curve: Option<Arc<[PlotPoint]>>,
@@ -1137,12 +1147,12 @@ impl CurveFitApp {
11371147
self.spline_result = None;
11381148
self.clear_fit_export_state();
11391149
self.active_fit_points = None;
1150+
self.fit_run_ui_seed = None;
11401151
self.result_metrics = None;
11411152
self.residual_plot_points.clear();
11421153
self.spline_plot_curve = None;
11431154
self.sampled_curve_cache = None;
11441155
self.iteration_diagnostics.clear();
1145-
self.panel.diagnostics_tab = DiagnosticsTab::Loss;
11461156
self.panel.diagnostics_hide_non_loss_by_default_pending = true;
11471157
self.clear_fit_preview();
11481158
self.clear_replay_state();
@@ -1521,6 +1531,7 @@ impl Default for CurveFitApp {
15211531
fit_result: None,
15221532
spline_result: None,
15231533
active_fit_points: None,
1534+
fit_run_ui_seed: None,
15241535
result_metrics: None,
15251536
residual_plot_points: Vec::new(),
15261537
spline_plot_curve: None,

0 commit comments

Comments
 (0)