Skip to main content

qualia_cli/cli/
solve.rs

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}