qualia_core_db/specialized_libs/statistical_computing/
computation.rs1use super::*;
2
3pub struct StatisticalComputationEngine {
5 computation_units: Vec<StatisticalComputationUnit>,
6 operation_queue: Vec<StatisticalOperation>,
7 scheduler: StatisticalScheduler,
8 accelerator: StatisticalAccelerator,
9}
10
11#[derive(Debug, Clone)]
13pub struct StatisticalComputationUnit {
14 pub unit_id: String,
15 pub unit_type: ComputationUnitType,
16 pub capabilities: ComputationCapabilities,
17 pub current_load: f64,
18}
19
20#[derive(Debug, Clone, PartialEq)]
22pub enum ComputationUnitType {
23 CPU,
24 GPU,
25 CSD,
26 TPU,
27 FPGA,
28}
29
30#[derive(Debug, Clone)]
32pub struct ComputationCapabilities {
33 pub max_sample_size: usize,
34 pub supported_operations: Vec<StatisticalOperation>,
35 pub data_types: Vec<DataType>,
36 pub memory_bandwidth: f64,
37 pub compute_throughput: f64,
38}
39
40#[derive(Debug, Clone)]
42pub enum StatisticalOperation {
43 Mean {
45 dataset: String,
46 column: String,
47 result: String,
48 },
49 Median {
50 dataset: String,
51 column: String,
52 result: String,
53 },
54 Mode {
55 dataset: String,
56 column: String,
57 result: String,
58 },
59 Variance {
60 dataset: String,
61 column: String,
62 result: String,
63 sample: bool,
64 },
65 StandardDeviation {
66 dataset: String,
67 column: String,
68 result: String,
69 sample: bool,
70 },
71 Skewness {
72 dataset: String,
73 column: String,
74 result: String,
75 },
76 Kurtosis {
77 dataset: String,
78 column: String,
79 result: String,
80 },
81 Histogram {
83 dataset: String,
84 column: String,
85 bins: usize,
86 result: String,
87 },
88 Quantile {
89 dataset: String,
90 column: String,
91 quantile: f64,
92 result: String,
93 },
94 Percentile {
95 dataset: String,
96 column: String,
97 percentile: f64,
98 result: String,
99 },
100 Correlation {
102 dataset: String,
103 column1: String,
104 column2: String,
105 method: CorrelationMethod,
106 result: String,
107 },
108 Covariance {
109 dataset: String,
110 column1: String,
111 column2: String,
112 sample: bool,
113 result: String,
114 },
115 LinearRegression {
117 dataset: String,
118 dependent: String,
119 independent: Vec<String>,
120 result: String,
121 },
122 LogisticRegression {
123 dataset: String,
124 dependent: String,
125 independent: Vec<String>,
126 result: String,
127 },
128 PolynomialRegression {
129 dataset: String,
130 dependent: String,
131 independent: Vec<String>,
132 degree: u32,
133 result: String,
134 },
135 TTest {
137 dataset: String,
138 column: String,
139 hypothesis_type: HypothesisType,
140 result: String,
141 },
142 ChiSquareTest {
143 dataset: String,
144 column1: String,
145 column2: String,
146 result: String,
147 },
148 ANOVA {
149 dataset: String,
150 columns: Vec<String>,
151 result: String,
152 },
153 AutoCorrelation {
155 dataset: String,
156 column: String,
157 lag: usize,
158 result: String,
159 },
160 MovingAverage {
161 dataset: String,
162 column: String,
163 window: usize,
164 result: String,
165 },
166 ExponentialSmoothing {
167 dataset: String,
168 column: String,
169 alpha: f64,
170 result: String,
171 },
172 KMeans {
174 dataset: String,
175 columns: Vec<String>,
176 k: usize,
177 result: String,
178 },
179 LinearSVM {
180 dataset: String,
181 features: Vec<String>,
182 target: String,
183 result: String,
184 },
185 RandomForest {
186 dataset: String,
187 features: Vec<String>,
188 target: String,
189 trees: usize,
190 result: String,
191 },
192}
193
194#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
196pub enum CorrelationMethod {
197 Pearson,
198 Spearman,
199 Kendall,
200 PointBiserial,
201}
202
203#[derive(Debug, Clone, PartialEq, Serialize, Deserialize)]
205pub enum HypothesisType {
206 OneSample,
207 TwoSample,
208 Paired,
209 Independent,
210}
211
212impl StatisticalComputationEngine {
213 pub fn new() -> Self {
214 Self {
215 computation_units: Vec::new(),
216 operation_queue: Vec::new(),
217 scheduler: StatisticalScheduler::new(),
218 accelerator: StatisticalAccelerator::new(),
219 }
220 }
221
222 pub fn initialize(&mut self) -> Result<(), StatisticalError> {
223 self.scheduler.initialize()?;
224 self.accelerator.initialize()?;
225 Ok(())
226 }
227
228 pub fn add_computation_unit(&mut self, unit: StatisticalComputationUnit) {
230 self.computation_units.push(unit);
231 }
232
233 pub fn computation_units(&self) -> &[StatisticalComputationUnit] {
235 &self.computation_units
236 }
237
238 pub fn get_computation_unit(&self, unit_id: &str) -> Option<&StatisticalComputationUnit> {
240 self.computation_units.iter().find(|u| u.unit_id == unit_id)
241 }
242
243 pub fn computation_unit_count(&self) -> usize {
245 self.computation_units.len()
246 }
247
248 pub fn enqueue_operation(&mut self, operation: StatisticalOperation) {
250 self.operation_queue.push(operation);
251 }
252
253 pub fn operation_queue(&self) -> &[StatisticalOperation] {
255 &self.operation_queue
256 }
257
258 pub fn drain_operation_queue(&mut self) -> Vec<StatisticalOperation> {
260 std::mem::take(&mut self.operation_queue)
261 }
262
263 pub fn queued_operation_count(&self) -> usize {
265 self.operation_queue.len()
266 }
267
268 pub fn scheduler(&self) -> &StatisticalScheduler {
270 &self.scheduler
271 }
272
273 pub fn scheduler_mut(&mut self) -> &mut StatisticalScheduler {
275 &mut self.scheduler
276 }
277}