Skip to main content

qualia_cli/handlers/
solve.rs

1use crate::cli::{
2    LinalgAction, OdeAction, OptimizeAction, QuantumSolveAction, SolveAction, SymbolicSolveAction,
3};
4use crate::solve;
5
6pub fn handle(action: &SolveAction) {
7    match action {
8        SolveAction::Linalg { action } => match action {
9            LinalgAction::Multiply { matrix_a, matrix_b } => {
10                solve::run_matrix_multiply(matrix_a, matrix_b);
11            }
12            LinalgAction::Determinant { matrix } => {
13                solve::run_determinant(matrix);
14            }
15            LinalgAction::SolveSystem { matrix, vector } => {
16                solve::run_solve_system(matrix, vector);
17            }
18            LinalgAction::Eigenvalues { matrix, count } => {
19                solve::run_eigenvalues(matrix, *count);
20            }
21            LinalgAction::TensorContract { tensor } => {
22                solve::run_tensor_contract(tensor);
23            }
24        },
25        SolveAction::Optimize { action } => match action {
26            OptimizeAction::Simplex {
27                initial,
28                iterations,
29            } => {
30                solve::run_simplex(initial, *iterations);
31            }
32            OptimizeAction::Root {
33                initial,
34                lower,
35                upper,
36                tolerance,
37            } => {
38                solve::run_root(*initial, *lower, *upper, *tolerance);
39            }
40            OptimizeAction::CurveFit {
41                initial_params,
42                x_data,
43                y_data,
44            } => {
45                solve::run_curve_fit(initial_params, x_data, y_data);
46            }
47        },
48        SolveAction::Ode { action } => match action {
49            OdeAction::Rk4 {
50                lambda,
51                t_start,
52                t_end,
53                y0,
54                step_size,
55            } => {
56                solve::run_ode_rk4(*lambda, *t_start, *t_end, *y0, *step_size);
57            }
58            OdeAction::Harmonic {
59                omega,
60                t_start,
61                t_end,
62                y0,
63                step_size,
64            } => {
65                solve::run_ode_harmonic(*omega, *t_start, *t_end, *y0, *step_size);
66            }
67            OdeAction::Bvp {
68                t_start,
69                t_end,
70                y_left,
71                y_right,
72                threshold,
73            } => {
74                solve::run_ode_bvp(*t_start, *t_end, *y_left, *y_right, *threshold);
75            }
76            OdeAction::QuantumSpectrum {
77                planck_mass,
78                coupling,
79                max_n,
80                frequency,
81            } => {
82                solve::run_ode_quantum_spectrum(*planck_mass, *coupling, *max_n, *frequency);
83            }
84        },
85        SolveAction::Quantum { action } => match action {
86            QuantumSolveAction::Qaoa { depth, beta, gamma } => {
87                solve::run_quantum_qaoa(*depth, beta, gamma);
88            }
89            QuantumSolveAction::Spsa {
90                num_params,
91                initial,
92            } => {
93                solve::run_quantum_spsa(*num_params, initial);
94            }
95        },
96        SolveAction::Symbolic { action } => match action {
97            SymbolicSolveAction::Defeasible { facts, rules } => {
98                solve::run_symbolic_defeasible(facts, rules);
99            }
100            SymbolicSolveAction::Sat { clauses } => {
101                solve::run_symbolic_sat(clauses);
102            }
103        },
104    }
105}