1use clap::Subcommand;
2
3#[derive(Subcommand, Debug)]
4pub enum SolveAction {
5 Linalg {
6 #[command(subcommand)]
7 action: LinalgAction,
8 },
9 Optimize {
10 #[command(subcommand)]
11 action: OptimizeAction,
12 },
13 Ode {
14 #[command(subcommand)]
15 action: OdeAction,
16 },
17 Quantum {
18 #[command(subcommand)]
19 action: QuantumSolveAction,
20 },
21 Symbolic {
22 #[command(subcommand)]
23 action: SymbolicSolveAction,
24 },
25}
26
27#[derive(Subcommand, Debug)]
28pub enum OdeAction {
29 Rk4 {
30 #[arg(long, default_value = "1.0")]
31 lambda: f64,
32 #[arg(long, default_value = "0.0")]
33 t_start: f64,
34 #[arg(long, default_value = "5.0")]
35 t_end: f64,
36 #[arg(long, default_value = "1.0")]
37 y0: f64,
38 #[arg(long, default_value = "0.01")]
39 step_size: f64,
40 },
41 Harmonic {
42 #[arg(long, default_value = "1.0")]
43 omega: f64,
44 #[arg(long, default_value = "0.0")]
45 t_start: f64,
46 #[arg(long, default_value = "6.28")]
47 t_end: f64,
48 #[arg(long, default_value = "1.0")]
49 y0: f64,
50 #[arg(long, default_value = "0.01")]
51 step_size: f64,
52 },
53 Bvp {
54 #[arg(long, default_value = "0.0")]
55 t_start: f64,
56 #[arg(long, default_value = "1.0")]
57 t_end: f64,
58 #[arg(long, default_value = "1.0")]
59 y_left: f64,
60 #[arg(long, default_value = "0.0")]
61 y_right: f64,
62 #[arg(long, default_value = "1e-6")]
63 threshold: f64,
64 },
65 QuantumSpectrum {
66 #[arg(long, default_value = "1.22e19")]
67 planck_mass: f64,
68 #[arg(long, default_value = "0.1")]
69 coupling: f64,
70 #[arg(long, default_value = "10")]
71 max_n: u64,
72 #[arg(long, default_value = "1.0")]
73 frequency: f64,
74 },
75}
76
77#[derive(Subcommand, Debug)]
78pub enum QuantumSolveAction {
79 Qaoa {
80 #[arg(long, default_value = "3")]
81 depth: u8,
82 #[arg(long, default_value = "0.1,0.2,0.3")]
83 beta: String,
84 #[arg(long, default_value = "0.5,0.5,0.5")]
85 gamma: String,
86 },
87 Spsa {
88 #[arg(long, default_value = "4")]
89 num_params: u8,
90 #[arg(long, default_value = "1.0,2.0,3.0,4.0")]
91 initial: String,
92 },
93}
94
95#[derive(Subcommand, Debug)]
96pub enum SymbolicSolveAction {
97 Defeasible {
98 #[arg(long, default_value = "1,2")]
99 facts: String,
100 #[arg(long, default_value = "1,2:3")]
101 rules: String,
102 },
103 Sat {
104 #[arg(long, default_value = "1,-2|2,3|-1,3")]
105 clauses: String,
106 },
107}
108
109#[derive(Subcommand, Debug)]
110pub enum LinalgAction {
111 Multiply {
112 #[arg(long)]
113 matrix_a: String,
114 #[arg(long)]
115 matrix_b: String,
116 },
117 Determinant {
118 #[arg(long)]
119 matrix: String,
120 },
121 SolveSystem {
122 #[arg(long)]
123 matrix: String,
124 #[arg(long)]
125 vector: String,
126 },
127 Eigenvalues {
128 #[arg(long)]
129 matrix: String,
130 #[arg(long, default_value = "4")]
131 count: usize,
132 },
133 TensorContract {
134 #[arg(long)]
135 tensor: String,
136 },
137}
138
139#[derive(Subcommand, Debug)]
140pub enum OptimizeAction {
141 Simplex {
142 #[arg(long)]
143 initial: String,
144 #[arg(long, default_value = "200")]
145 iterations: u32,
146 },
147 Root {
148 #[arg(long)]
149 initial: f64,
150 #[arg(long)]
151 lower: f64,
152 #[arg(long)]
153 upper: f64,
154 #[arg(long, default_value = "1e-8")]
155 tolerance: f64,
156 },
157 CurveFit {
158 #[arg(long)]
159 initial_params: String,
160 #[arg(long)]
161 x_data: String,
162 #[arg(long)]
163 y_data: String,
164 },
165}