use crate::symbolic::symbolic_engine::Expr;
use chrono::Local;
use crate::Utils::logger::{save_matrix_to_csv, save_matrix_to_file};
use crate::Utils::plots::{plots, plots_gnulot, plots_terminal};
use crate::Utils::postprocessing::{
PostprocessDataset, PostprocessError, PostprocessPlan, PostprocessReport,
};
use crate::numerical::BVP_Damp::BVP_traits::{
Fun, FunEnum, Jac, VectorType, Vectors_type_casting, finite_difference_jacobian,
try_finite_difference_jacobian,
};
use crate::numerical::BVP_Damp::BVP_utils::{
CustomTimer, construct_full_solution, elapsed_time, extract_unknown_variables, task_check_mem,
};
use crate::numerical::BVP_Damp::BVP_utils_damped::{
bound_step_Cantera2, convergence_condition, if_initial_guess_inside_bounds, jac_recalc,
};
use crate::numerical::BVP_Damp::factor_runtime::{
OwnedLinearFactorRuntime, prepare_factor_owner_runtime,
};
use crate::numerical::BVP_Damp::generated_solver_handoff::{
AotBuildPolicy, AotChunkingPolicy, AotExecutionPolicy, ApplyDampedGeneratedSolverState,
BandedGeneratedBackendMode, BuildDampedSolverRequest, DampedGeneratedSolverState,
DampedSolverBuildRequest, GeneratedBackendConfig, SparseGeneratedBackendMode,
try_generate_and_apply_damped_solver_state,
};
use crate::numerical::BVP_Damp::numeric_discretization::{
NumericBvpJacobian, NumericBvpRhs, build_numeric_generated_solver_state,
};
use crate::numerical::BVP_Damp::prepared_runtime::{
BvpPreparedPlan, BvpPreparedResourceSnapshot, BvpPreparedRuntime, BvpPreparedRuntimeSnapshot,
BvpRuntimeRevision, PreparedPlanFingerprint, fingerprint_bytes, fingerprint_callback_ptr,
fingerprint_debug,
};
use crate::numerical::BVP_Damp::telemetry::{
BvpLoggingConfig, BvpLoggingMode, BvpTelemetryMode, BvpTelemetryRecorder, BvpTelemetrySnapshot,
};
use crate::somelinalg::banded::LinearSolverConfig;
use crate::symbolic::bvp::aot_telemetry::BvpAotTelemetry;
use crate::symbolic::bvp::telemetry::{
BvpGenerationTelemetrySnapshot, BvpLambdifyTelemetry, BvpLambdifyTelemetryMode,
};
use crate::symbolic::codegen::CodegenIR::AtomOptimizationProfile;
use crate::symbolic::codegen::codegen_aot_resolution::AotResolver;
use crate::symbolic::codegen::codegen_backend_selection::{
BackendSelectionPolicy, SelectedBackendKind,
};
use crate::symbolic::codegen::codegen_provider_api::MatrixBackend;
use crate::symbolic::symbolic_functions_BVP::{
BvpBackendIntegrationError, BvpMatrixBackend, BvpSymbolicAssemblyBackend,
};
use core::panic;
use nalgebra::{DMatrix, DVector};
use simplelog::LevelFilter;
use simplelog::*;
use std::collections::HashMap;
use std::fs::File;
use std::sync::Arc;
use std::time::Instant;
use tabled::{builder::Builder, settings::Style};
use crate::numerical::BVP_Damp::grid_api::{GridRefinementMethod, new_grid};
use crate::numerical::BVP_Damp::solver_common::{
DEFAULT_FORWARD_SCHEME, DEFAULT_MAX_ITERATIONS, cleanup_registered_aot_artifacts,
damped_interval_mesh, default_dense_method_name, default_forward_scheme_name,
default_placeholder_y, default_sparse_method_name,
};
include!("damped_solver/statistics.rs");
include!("damped_solver/options.rs");
include!("damped_solver/state.rs");
include!("damped_solver/preparation.rs");
include!("damped_solver/solve.rs");
include!("damped_solver/postprocess.rs");
#[cfg(test)]
#[path = "tests/damped_solver_unit.rs"]
mod tests;