@@ -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 ;
7375use crate :: fit:: IterationMetricSnapshot ;
7476use crate :: fit:: OptimizationLossMetric ;
7577use 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" ) ]
8784use 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" ) ) ]
9489use 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 ) ]
704720enum 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