MCPcopy Create free account
hub / github.com/Open-Quant/openquant / _purge_num_err

Method _purge_num_err

crates/openquant/src/cla.rs:258–294  ·  view source on GitHub ↗
(&mut self, tol: f64)

Source from the content-addressed store, hash-verified

256 }
257
258 pub fn _purge_num_err(&mut self, tol: f64) -> Result<(), ClaError> {
259 if self.weights.len() != self.lambdas.len()
260 || self.weights.len() != self.gammas.len()
261 || self.weights.len() != self.free_weights.len()
262 {
263 return Err(ClaError::IndexError);
264 }
265 let mut i = 0;
266 while i < self.weights.len() {
267 let weights = &self.weights[i];
268 let mut flag = (weights.iter().sum::<f64>() - 1.0).abs() > tol;
269 if !flag {
270 for (j, w) in weights.iter().enumerate() {
271 if j >= self.lower_bounds.len() || j >= self.upper_bounds.len() {
272 return Err(ClaError::IndexError);
273 }
274 if w - self.lower_bounds[j] < -tol || w - self.upper_bounds[j] > tol {
275 flag = true;
276 break;
277 }
278 }
279 }
280 if flag {
281 self.weights.remove(i);
282 if i >= self.lambdas.len() || i >= self.gammas.len() || i >= self.free_weights.len()
283 {
284 return Err(ClaError::IndexError);
285 }
286 self.lambdas.remove(i);
287 self.gammas.remove(i);
288 self.free_weights.remove(i);
289 } else {
290 i += 1;
291 }
292 }
293 Ok(())
294 }
295
296 pub fn _purge_excess(&mut self) -> Result<(), ClaError> {
297 if self.weights.len() != self.lambdas.len()

Callers 2

test_purge_excessFunction · 0.80

Calls 1

lenMethod · 0.80

Tested by 2

test_purge_excessFunction · 0.64