├── .github └── workflows │ └── rust.yml ├── .gitignore ├── CITATION.cff ├── Cargo.toml ├── LICENSE ├── README.md ├── src ├── data.rs └── lib.rs └── tests ├── assets ├── allsol_1.sprs ├── allsol_2.sprs ├── cholsol_1.sprs ├── cholsol_2.sprs ├── cholsol_5.sprs ├── cholsol_7.sprs ├── lusol_3.sprs ├── lusol_4.sprs ├── lusol_6.sprs ├── qrsol_3.sprs ├── qrsol_4.sprs ├── qrsol_5.sprs ├── qrsol_8.sprs └── qrsol_9.sprs ├── basic_tests.rs ├── save_load_tests.rs ├── solver_tests.rs └── utils.rs /.github/workflows/rust.yml: -------------------------------------------------------------------------------- 1 | name: Rust 2 | 3 | on: 4 | push: 5 | branches: [ "master" ] 6 | pull_request: 7 | branches: [ "master" ] 8 | 9 | env: 10 | CARGO_TERM_COLOR: always 11 | 12 | jobs: 13 | build: 14 | 15 | runs-on: ubuntu-latest 16 | 17 | steps: 18 | - uses: actions/checkout@v3 19 | - name: Build 20 | run: cargo build --verbose 21 | - name: Run tests 22 | run: cargo test --release --verbose 23 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | /target 2 | /.vscode 3 | 4 | # Ignored file types 5 | *.lock 6 | *.sprs -------------------------------------------------------------------------------- /CITATION.cff: -------------------------------------------------------------------------------- 1 | cff-version: 1.2.0 2 | title: rsparse 3 | message: >- 4 | If you use this software, please cite it using the 5 | metadata from this file. 6 | type: software 7 | authors: 8 | - family-names: Lado-Roigé 9 | given-names: Ricard 10 | orcid: 'https://orcid.org/0000-0002-6421-7351' 11 | repository-code: 'https://github.com/RLado/rsparse' 12 | url: 'https://crates.io/crates/rsparse' 13 | abstract: >- 14 | A Rust library for solving sparse linear systems using 15 | direct methods. 16 | keywords: 17 | - sparse-matrices 18 | - linear-algebra 19 | - math 20 | - rust 21 | license: MIT 22 | version: 1.2.1 23 | date-released: '2025-03-29' 24 | -------------------------------------------------------------------------------- /Cargo.toml: -------------------------------------------------------------------------------- 1 | [package] 2 | name = "rsparse" 3 | version = "1.2.1" 4 | authors = ["Ricard Lado"] 5 | 6 | description = "A Rust library for solving sparse linear systems using direct methods." 7 | categories = ["mathematics", "science"] 8 | keywords = ["math", "linear", "algebra", "sparse", "matrix"] 9 | license = "MIT" 10 | repository = "https://github.com/rlado/rsparse" 11 | readme = "README.md" 12 | edition = "2021" 13 | exclude = [".github/",] 14 | 15 | [lib] 16 | name = "rsparse" 17 | path = "src/lib.rs" 18 | 19 | [dependencies] 20 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2023 Ricard Lado 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # rsparse 2 | 3 | A Rust library for solving sparse linear systems using direct methods. 4 | 5 | 6 | ![GitHub Workflow Status](https://img.shields.io/github/actions/workflow/status/rlado/rsparse/rust.yml) [![Crates.io](https://img.shields.io/crates/d/rsparse)](https://crates.io/crates/rsparse) [![Crates.io](https://img.shields.io/crates/v/rsparse)](https://crates.io/crates/rsparse) 7 | 8 | --- 9 | 10 | ## Data structures 11 | - CSC matrix (`Sprs`) 12 | - Triplet matrix (`Trpl`) 13 | 14 | ## Features 15 | - Convert from dense `[Vec]` or `Vec>` matrix to CSC sparse matrix `Sprs` 16 | - Convert from sparse to dense `Vec>` 17 | - Convert from a triplet format matrix `Trpl` to CSC `Sprs` 18 | - Sparse matrix addition [C=A+B] 19 | - Sparse matrix multiplication [C=A*B] 20 | - Transpose sparse matrices 21 | - Solve sparse linear systems 22 | 23 | ### Solvers 24 | - **lsolve**: Solve a lower triangular system. Solves Lx=b where x and b are dense. 25 | - **ltsolve**: Solve L’x=b where x and b are dense. 26 | - **usolve**: Solve an upper triangular system. Solves Ux=b where x and b are dense 27 | - **utsolve**: Solve U’x=b where x and b are dense 28 | - **cholsol**: A\b solver using Cholesky factorization. Where A is a defined positive `Sprs` matrix and b is a dense vector 29 | - **lusol**: A\b solver using LU factorization. Where A is a square `Sprs` matrix and b is a dense vector 30 | - **qrsol**: A\b solver using QR factorization. Where A is a rectangular `Sprs` matrix and b is a dense vector 31 | 32 | ## Examples 33 | ### Basic matrix operations 34 | ```rust 35 | use rsparse; 36 | 37 | fn main() { 38 | // Create a CSC sparse matrix A 39 | let a = rsparse::data::Sprs{ 40 | // Maximum number of entries 41 | nzmax: 5, 42 | // number of rows 43 | m: 3, 44 | // number of columns 45 | n: 3, 46 | // Values 47 | x: vec![1., 9., 9., 2., 9.], 48 | // Indices 49 | i: vec![1, 2, 2, 0, 2], 50 | // Pointers 51 | p: vec![0, 2, 3, 5] 52 | }; 53 | 54 | // Import the same matrix from a dense structure 55 | let mut a2 = rsparse::data::Sprs::new_from_vec( 56 | &[ 57 | vec![0., 0., 2.], 58 | vec![1., 0., 0.], 59 | vec![9., 9., 9.] 60 | ] 61 | ); 62 | 63 | // Check if they are the same 64 | assert_eq!(a.nzmax, a2.nzmax); 65 | assert_eq!(a.m,a2.m); 66 | assert_eq!(a.n,a2.n); 67 | assert_eq!(a.x,a2.x); 68 | assert_eq!(a.i,a2.i); 69 | assert_eq!(a.p,a2.p); 70 | 71 | // Transform A to dense and print result 72 | println!("\nA"); 73 | print_matrix(&a.to_dense()); 74 | 75 | // Transpose A 76 | let at = rsparse::transpose(&a); 77 | // Transform to dense and print result 78 | println!("\nAt"); 79 | print_matrix(&at.to_dense()); 80 | 81 | // B = A + A' 82 | let b = &a + &at; 83 | // Transform to dense and print result 84 | println!("\nB"); 85 | print_matrix(&b.to_dense()); 86 | 87 | // C = A * B 88 | let c = &a * &b; 89 | // Transform to dense and print result 90 | println!("\nC"); 91 | print_matrix(&c.to_dense()); 92 | } 93 | 94 | fn print_matrix(vec: &[Vec]) { 95 | for row in vec { 96 | println!("{:?}", row); 97 | } 98 | } 99 | ``` 100 | 101 | Output: 102 | 103 | ``` 104 | A 105 | 0 0 2 106 | 1 0 0 107 | 9 9 9 108 | 109 | At 110 | 0 1 9 111 | 0 0 9 112 | 2 0 9 113 | 114 | B 115 | 0 1 11 116 | 1 0 9 117 | 11 9 18 118 | 119 | C 120 | 22 18 36 121 | 0 1 11 122 | 108 90 342 123 | ``` 124 | 125 | 126 | ### Solve a linear system 127 | ```rust 128 | use rsparse; 129 | 130 | fn main() { 131 | // Arbitrary A matrix (dense) 132 | let a = [ 133 | vec![8.2541e-01, 9.5622e-01, 4.6698e-01, 8.4410e-03, 6.3193e-01, 7.5741e-01, 5.3584e-01, 3.9448e-01], 134 | vec![7.4808e-01, 2.0403e-01, 9.4649e-01, 2.5086e-01, 2.6931e-01, 5.5866e-01, 3.1827e-01, 2.9819e-02], 135 | vec![6.3980e-01, 9.1615e-01, 8.5515e-01, 9.5323e-01, 7.8323e-01, 8.6003e-01, 7.5761e-01, 8.9255e-01], 136 | vec![1.8726e-01, 8.9339e-01, 9.9796e-01, 5.0506e-01, 6.1439e-01, 4.3617e-01, 7.3369e-01, 1.5565e-01], 137 | vec![2.8015e-02, 6.3404e-01, 8.4771e-01, 8.6419e-01, 2.7555e-01, 3.5909e-01, 7.6644e-01, 8.9905e-02], 138 | vec![9.1817e-01, 8.6629e-01, 5.9917e-01, 1.9346e-01, 2.1960e-01, 1.8676e-01, 8.7020e-01, 2.7891e-01], 139 | vec![3.1999e-01, 5.9988e-01, 8.7402e-01, 5.5710e-01, 2.4707e-01, 7.5652e-01, 8.3682e-01, 6.3145e-01], 140 | vec![9.3807e-01, 7.5985e-02, 7.8758e-01, 3.6881e-01, 4.4553e-01, 5.5005e-02, 3.3908e-01, 3.4573e-01], 141 | ]; 142 | 143 | // Convert A to sparse 144 | let mut a_sparse = rsparse::data::Sprs::new(); 145 | a_sparse.from_vec(&a); 146 | 147 | // Generate arbitrary b vector 148 | let mut b = [ 149 | 0.4377, 150 | 0.7328, 151 | 0.1227, 152 | 0.1817, 153 | 0.2634, 154 | 0.6876, 155 | 0.8711, 156 | 0.4201 157 | ]; 158 | 159 | // Known solution: 160 | /* 161 | 0.264678, 162 | -1.228118, 163 | -0.035452, 164 | -0.676711, 165 | -0.066194, 166 | 0.761495, 167 | 1.852384, 168 | -0.282992 169 | */ 170 | 171 | // A*x=b -> solve for x -> place x in b 172 | rsparse::lusol(&a_sparse, &mut b, 1, 1e-6); 173 | println!("\nX"); 174 | println!("{:?}", &b); 175 | } 176 | ``` 177 | 178 | Output: 179 | 180 | ``` 181 | X 182 | [0.2646806068156303, -1.2280777288645675, -0.035491404094236435, -0.6766064748053932, -0.06619898266432682, 0.7615102544801993, 1.8522970972589123, -0.2830302118359591] 183 | ``` 184 | 185 | ## Documentation 186 | Documentation is available at [docs.rs](https://docs.rs/rsparse). 187 | 188 | ## Sources 189 | - Davis, T. (2006). Direct Methods for Sparse Linear Systems. Society for Industrial and Applied Mathematics. [https://doi.org/10.1137/1.9780898718881](https://doi.org/10.1137/1.9780898718881) 190 | - [CSparse](https://people.math.sc.edu/Burkardt/c_src/csparse/csparse.html): A Concise Sparse Matrix Package in C -------------------------------------------------------------------------------- /src/data.rs: -------------------------------------------------------------------------------- 1 | //! Data structures for rsparse 2 | 3 | use crate::{add, multiply, scpmat, scxmat}; 4 | use std::fmt; 5 | use std::fs::File; 6 | use std::io::{BufRead, BufReader, Write}; 7 | use std::ops::{Add, AddAssign, Div, DivAssign, Mul, MulAssign, Neg, Sub, SubAssign}; 8 | 9 | // Define a generic Numeric trait compatible with `Sprs` matrices 10 | /// Define zero trait for generic Numeric type 11 | pub trait Zero { 12 | fn zero() -> Self; 13 | } 14 | 15 | impl Zero for i8 { 16 | fn zero() -> Self { 17 | 0 18 | } 19 | } 20 | 21 | impl Zero for i16 { 22 | fn zero() -> Self { 23 | 0 24 | } 25 | } 26 | 27 | impl Zero for i32 { 28 | fn zero() -> Self { 29 | 0 30 | } 31 | } 32 | 33 | impl Zero for i64 { 34 | fn zero() -> Self { 35 | 0 36 | } 37 | } 38 | 39 | impl Zero for isize { 40 | fn zero() -> Self { 41 | 0 42 | } 43 | } 44 | 45 | impl Zero for f32 { 46 | fn zero() -> Self { 47 | 0.0 48 | } 49 | } 50 | 51 | impl Zero for f64 { 52 | fn zero() -> Self { 53 | 0.0 54 | } 55 | } 56 | 57 | /// Define one trait for generic Numeric type 58 | pub trait One { 59 | fn one() -> Self; 60 | } 61 | 62 | impl One for i8 { 63 | fn one() -> Self { 64 | 1 65 | } 66 | } 67 | 68 | impl One for i16 { 69 | fn one() -> Self { 70 | 1 71 | } 72 | } 73 | 74 | impl One for i32 { 75 | fn one() -> Self { 76 | 1 77 | } 78 | } 79 | 80 | impl One for i64 { 81 | fn one() -> Self { 82 | 1 83 | } 84 | } 85 | 86 | impl One for isize { 87 | fn one() -> Self { 88 | 1 89 | } 90 | } 91 | 92 | impl One for f32 { 93 | fn one() -> Self { 94 | 1.0 95 | } 96 | } 97 | 98 | impl One for f64 { 99 | fn one() -> Self { 100 | 1.0 101 | } 102 | } 103 | 104 | /// Aggregate trait representing numeric values 105 | pub trait Numeric: 106 | Add 107 | + AddAssign 108 | + Sub 109 | + SubAssign 110 | + Neg 111 | + Mul 112 | + MulAssign 113 | + Div 114 | + DivAssign 115 | + Copy 116 | + PartialEq 117 | + PartialOrd 118 | + Default 119 | + Zero 120 | + One 121 | + Add 122 | + Sub 123 | + Mul 124 | + Div 125 | + Neg 126 | + std::iter::Sum 127 | + fmt::Display 128 | + fmt::Debug 129 | + From 130 | { 131 | fn abs(self) -> F; 132 | fn max(self, other: F) -> F; 133 | fn powf(self, exp: f64) -> F; 134 | fn sqrt(self) -> F; 135 | } 136 | 137 | impl Numeric for f32 { 138 | fn abs(self) -> f32 { 139 | self.abs() 140 | } 141 | 142 | fn max(self, other: f32) -> f32 { 143 | self.max(other) 144 | } 145 | 146 | fn powf(self, exp: f64) -> f32 { 147 | self.powf(exp as f32) 148 | } 149 | 150 | fn sqrt(self) -> f32 { 151 | self.sqrt() 152 | } 153 | } 154 | 155 | impl Numeric for f64 { 156 | fn abs(self) -> f64 { 157 | self.abs() 158 | } 159 | 160 | fn max(self, other: f64) -> f64 { 161 | self.max(other) 162 | } 163 | 164 | fn powf(self, exp: f64) -> f64 { 165 | self.powf(exp) 166 | } 167 | 168 | fn sqrt(self) -> f64 { 169 | self.sqrt() 170 | } 171 | } 172 | // --- Utilities --------------------------------------------------------------- 173 | 174 | /// p [0..n] = cumulative sum of c [0..n-1], and then copy p [0..n-1] into c 175 | /// 176 | fn cumsum(p: &mut [isize], c: &mut [isize], n: usize) -> usize { 177 | let mut nz = 0; 178 | for (p_i, c_i) in p.iter_mut().zip(c.iter_mut()).take(n) { 179 | *p_i = nz; 180 | nz += *c_i; 181 | *c_i = *p_i; 182 | } 183 | p[n] = nz; 184 | 185 | nz as usize 186 | } 187 | 188 | // --- Data structures --------------------------------------------------------- 189 | 190 | /// Matrix in compressed sparse column (CSC) format 191 | /// 192 | /// Useful example for CSR format 193 | /// ![CSR_fig](https://user-images.githubusercontent.com/25719985/211358936-e54efcb3-2b63-44e7-9618-871cbcdcdd36.png) 194 | #[derive(Clone, Debug)] 195 | pub struct Sprs> { 196 | /// maximum number of entries 197 | pub nzmax: usize, 198 | /// number of rows 199 | pub m: usize, 200 | /// number of columns 201 | pub n: usize, 202 | /// column pointers (size n+1) (Marks the index on which data starts in each column) 203 | pub p: Vec, 204 | /// row indices, size nzmax 205 | pub i: Vec, 206 | /// numericals values, size nzmax 207 | pub x: Vec, 208 | } 209 | 210 | impl> Sprs { 211 | /// Initializes to an empty matrix 212 | /// 213 | pub fn new() -> Sprs { 214 | Sprs { 215 | nzmax: 0, 216 | m: 0, 217 | n: 0, 218 | p: Vec::new(), 219 | i: Vec::new(), 220 | x: Vec::new(), 221 | } 222 | } 223 | 224 | /// Allocates a zero filled matrix 225 | /// 226 | pub fn zeros(m: usize, n: usize, nzmax: usize) -> Sprs { 227 | Sprs { 228 | nzmax, 229 | m, 230 | n, 231 | p: vec![0; n + 1], 232 | i: vec![0; nzmax], 233 | x: vec![T::zero(); nzmax], 234 | } 235 | } 236 | 237 | /// Allocates an `n`x`n` identity matrix 238 | /// 239 | pub fn eye(n: usize) -> Sprs { 240 | let mut s = Sprs::zeros(n, n, n); 241 | for i in 0..n { 242 | s.p[i] = i as isize; 243 | s.i[i] = i; 244 | s.x[i] = T::one(); 245 | } 246 | s.p[n] = n as isize; 247 | 248 | s 249 | } 250 | 251 | /// Allocates a matrix from a 2D array of Vec 252 | /// 253 | pub fn new_from_vec(t: &[Vec]) -> Sprs { 254 | let mut s = Sprs::new(); 255 | s.from_vec(t); 256 | 257 | s 258 | } 259 | 260 | /// Allocates a matrix from a `Trpl` object 261 | /// 262 | pub fn new_from_trpl(t: &Trpl) -> Sprs { 263 | let mut s = Sprs::new(); 264 | s.from_trpl(t); 265 | 266 | s 267 | } 268 | 269 | /// Get element from (row, column) position 270 | /// 271 | /// *- Note: This function may negatively impact performance, and should be 272 | /// avoided* 273 | /// 274 | pub fn get(&self, row: usize, column: usize) -> Option { 275 | for j in 0..self.p.len() - 1 { 276 | for i in self.p[j]..self.p[j + 1] { 277 | if (self.i[i as usize], j) == (row, column) { 278 | return Some(self.x[i as usize]); 279 | } 280 | } 281 | } 282 | 283 | None 284 | } 285 | 286 | /// Convert from a 2D array of Vec into a Sprs matrix, overwriting the 287 | /// current object 288 | /// 289 | pub fn from_vec(&mut self, a: &[Vec]) { 290 | let r = a.len(); // num rows 291 | let c = a[0].len(); // num columns 292 | let mut idxptr = 0; 293 | 294 | self.nzmax = r * c; 295 | self.m = r; 296 | self.n = c; 297 | self.p = Vec::new(); 298 | self.i = Vec::new(); 299 | self.x = Vec::new(); 300 | 301 | for i in 0..c { 302 | self.p.push(idxptr); 303 | for (j, aj) in a.iter().enumerate().take(r) { 304 | let elem = aj[i]; 305 | if elem != T::zero() { 306 | self.x.push(elem); 307 | self.i.push(j); 308 | idxptr += 1 309 | } 310 | } 311 | } 312 | self.p.push(idxptr); 313 | self.trim(); 314 | } 315 | 316 | /// Convert from triplet form to a Sprs matrix, overwriting the current 317 | /// object. 318 | /// 319 | /// Does not add duplicate values. The last value assigned to a position is 320 | /// considered valid. 321 | /// 322 | /// # Example: 323 | /// ``` 324 | /// let a = rsparse::data::Trpl{ 325 | /// // number of rows 326 | /// m: 3, 327 | /// // number of columns 328 | /// n: 4, 329 | /// // column index 330 | /// p: vec![0, 1, 2, 0, 3, 3], 331 | /// // row index 332 | /// i: vec![0, 1, 2, 1, 2, 2], 333 | /// // values 334 | /// x: vec![2., 3., 4., 5., 6., 7.] 335 | /// }; 336 | /// let mut b = rsparse::data::Sprs::new(); 337 | /// b.from_trpl(&a); 338 | /// 339 | /// assert_eq!(b.to_dense(), vec![vec![2., 0., 0., 0.], vec![5., 3., 0., 0.], vec![0., 0., 4., 7.]]); 340 | /// ``` 341 | /// 342 | /// If you need duplicate values to be summed use `Trpl`'s method `sum_dupl()` 343 | /// before running this method. 344 | /// 345 | pub fn from_trpl(&mut self, t: &Trpl) { 346 | self.nzmax = t.x.len(); 347 | self.m = t.m; 348 | self.n = t.n; 349 | self.p = vec![0; t.n + 1]; 350 | self.i = vec![0; t.x.len()]; 351 | self.x = vec![T::zero(); t.x.len()]; 352 | 353 | // get workspace 354 | let mut w = vec![0; self.n]; 355 | 356 | for k in 0..t.p.len() { 357 | w[t.p[k] as usize] += 1; // column counts 358 | } 359 | cumsum(&mut self.p[..], &mut w[..], self.n); // column pointers 360 | let mut p; 361 | for k in 0..t.p.len() { 362 | p = w[t.p[k] as usize] as usize; 363 | self.i[p] = t.i[k]; // A(i,j) is the pth entry in C 364 | w[t.p[k] as usize] += 1; 365 | self.x[p] = t.x[k]; 366 | } 367 | } 368 | 369 | /// Trim 0 elements from the sparse matrix 370 | /// 371 | pub fn trim(&mut self) { 372 | for i in (0..self.x.len()).rev() { 373 | if self.x[i] == T::zero() { 374 | self.x.remove(i); 375 | self.i.remove(i); 376 | // fix the column pointers 377 | for j in (0..self.p.len()).rev() { 378 | if (i as isize) < self.p[j] { 379 | self.p[j] -= 1; 380 | } else { 381 | break; 382 | } 383 | } 384 | } 385 | } 386 | self.nzmax = self.x.len(); 387 | } 388 | 389 | /// Trim elements unaccounted by self.p 390 | /// 391 | pub fn quick_trim(&mut self) { 392 | self.nzmax = self.p[self.n] as usize; 393 | self.i.resize(self.nzmax, 0); 394 | self.x.resize(self.nzmax, T::zero()); 395 | } 396 | 397 | /// Converts sparse matrix to dense matrix 398 | /// 399 | pub fn to_dense(&self) -> Vec> { 400 | let mut r = vec![vec![T::zero(); self.n]; self.m]; 401 | for j in 0..self.p.len() - 1 { 402 | for i in self.p[j]..self.p[j + 1] { 403 | r[self.i[i as usize]][j] = self.x[i as usize]; 404 | } 405 | } 406 | 407 | r 408 | } 409 | 410 | /// Save a sparse matrix 411 | /// 412 | /// Saves a `Sprs` matrix in plain text. 413 | /// 414 | pub fn save(&self, path: &str) -> Result<(), std::io::Error> { 415 | let mut f = File::create(path)?; 416 | writeln!(f, "nzmax: {}", self.nzmax)?; 417 | writeln!(f, "m: {}", self.m)?; 418 | writeln!(f, "n: {}", self.n)?; 419 | writeln!(f, "p: {:?}", self.p)?; 420 | writeln!(f, "i: {:?}", self.i)?; 421 | writeln!(f, "x: {:?}", self.x)?; 422 | 423 | Ok(()) 424 | } 425 | } 426 | 427 | impl + std::str::FromStr> Sprs { 428 | /// Load a sparse matrix 429 | /// 430 | /// Loads a `Sprs` matrix from a plain text file 431 | /// 432 | pub fn load(&mut self, path: &str) -> Result<(), Box> 433 | where 434 | ::Err: std::error::Error, 435 | ::Err: 'static, 436 | { 437 | let f = File::open(path)?; 438 | 439 | // Read the file line by line 440 | let reader = BufReader::new(f); 441 | for line in reader.lines() { 442 | let line_read = line?; 443 | if line_read.contains("nzmax:") { 444 | self.nzmax = (line_read.split(':').collect::>()[1].replace(' ', "")) 445 | .parse::()?; 446 | if self.nzmax == 0 { 447 | // If the saved matrix is empty, just write it as such 448 | self.nzmax = 0; 449 | self.m = 0; 450 | self.n = 0; 451 | self.p = Vec::new(); 452 | self.i = Vec::new(); 453 | self.x = Vec::new(); 454 | 455 | return Ok(()); 456 | } 457 | } else if line_read.contains("m:") { 458 | self.m = (line_read.split(':').collect::>()[1].replace(' ', "")) 459 | .parse::()?; 460 | if self.m == 0 { 461 | // If the saved matrix is empty, just write it as such 462 | self.nzmax = 0; 463 | self.m = 0; 464 | self.n = 0; 465 | self.p = Vec::new(); 466 | self.i = Vec::new(); 467 | self.x = Vec::new(); 468 | 469 | return Ok(()); 470 | } 471 | } else if line_read.contains("n:") { 472 | self.n = (line_read.split(':').collect::>()[1].replace(' ', "")) 473 | .parse::()?; 474 | if self.n == 0 { 475 | // If the saved matrix is empty, just write it as such 476 | self.nzmax = 0; 477 | self.m = 0; 478 | self.n = 0; 479 | self.p = Vec::new(); 480 | self.i = Vec::new(); 481 | self.x = Vec::new(); 482 | 483 | return Ok(()); 484 | } 485 | } else if line_read.contains("p:") { 486 | let p_str = line_read.split(':').collect::>()[1]; 487 | // eliminate brackets 488 | let t = p_str.replace('[', ""); 489 | let p_str = t.replace(']', ""); 490 | // populate `Vec` 491 | for item in p_str.split(',') { 492 | self.p.push(item.replace(' ', "").parse::()?); 493 | } 494 | } else if line_read.contains("i:") { 495 | let i_str = line_read.split(':').collect::>()[1]; 496 | // eliminate brackets 497 | let t = i_str.replace('[', ""); 498 | let i_str = t.replace(']', ""); 499 | // populate `Vec` 500 | for item in i_str.split(',') { 501 | self.i.push(item.replace(' ', "").parse::()?); 502 | } 503 | } else if line_read.contains("x:") { 504 | let x_str = line_read.split(':').collect::>()[1]; 505 | // eliminate brackets 506 | let t = x_str.replace('[', ""); 507 | let x_str = t.replace(']', ""); 508 | // populate `Vec` 509 | for item in x_str.split(',') { 510 | self.x.push(item.replace(' ', "").parse::()?); 511 | } 512 | } 513 | } 514 | 515 | Ok(()) 516 | } 517 | } 518 | 519 | impl> Default for Sprs { 520 | fn default() -> Self { 521 | Self::new() 522 | } 523 | } 524 | 525 | // Implementing operators for `Sprs` 526 | 527 | impl> Add for Sprs { 528 | type Output = Self; 529 | 530 | /// Overloads the `+` operator. Adds two sparse matrices 531 | /// 532 | fn add(self, other: Sprs) -> Sprs { 533 | add(&self, &other, T::one(), T::one()) 534 | } 535 | } 536 | 537 | impl> Add<&Sprs> for Sprs { 538 | type Output = Self; 539 | 540 | /// Overloads the `+` operator. 541 | /// 542 | fn add(self, other: &Sprs) -> Sprs { 543 | add(&self, other, T::one(), T::one()) 544 | } 545 | } 546 | 547 | impl> Add for &Sprs { 548 | type Output = Sprs; 549 | 550 | /// Overloads the `+` operator. Adds two references to sparse matrices 551 | /// 552 | fn add(self, other: &Sprs) -> Sprs { 553 | add(self, other, T::one(), T::one()) 554 | } 555 | } 556 | 557 | impl> Add> for &Sprs { 558 | type Output = Sprs; 559 | 560 | /// Overloads the `+` operator. 561 | /// 562 | fn add(self, other: Sprs) -> Sprs { 563 | add(self, &other, T::one(), T::one()) 564 | } 565 | } 566 | 567 | impl> Sub for Sprs { 568 | type Output = Self; 569 | 570 | /// Overloads the `-` operator. Subtracts two sparse matrices 571 | /// 572 | fn sub(self, other: Sprs) -> Sprs { 573 | add(&self, &other, T::one(), -T::one()) 574 | } 575 | } 576 | 577 | impl> Sub<&Sprs> for Sprs { 578 | type Output = Self; 579 | 580 | /// Overloads the `-` operator. 581 | /// 582 | fn sub(self, other: &Sprs) -> Sprs { 583 | add(&self, other, T::one(), -T::one()) 584 | } 585 | } 586 | 587 | impl> Sub for &Sprs { 588 | type Output = Sprs; 589 | 590 | /// Overloads the `-` operator. Subtracts two references to sparse matrices 591 | /// 592 | fn sub(self, other: &Sprs) -> Sprs { 593 | add(self, other, T::one(), -T::one()) 594 | } 595 | } 596 | 597 | impl> Sub> for &Sprs { 598 | type Output = Sprs; 599 | 600 | /// Overloads the `-` operator. 601 | /// 602 | fn sub(self, other: Sprs) -> Sprs { 603 | add(self, &other, T::one(), -T::one()) 604 | } 605 | } 606 | 607 | impl> Mul for Sprs { 608 | type Output = Self; 609 | 610 | /// Overloads the `*` operator. Multiplies two sparse matrices 611 | /// 612 | fn mul(self, other: Sprs) -> Sprs { 613 | multiply(&self, &other) 614 | } 615 | } 616 | 617 | impl> Mul<&Sprs> for Sprs { 618 | type Output = Self; 619 | 620 | /// Overloads the `*` operator. 621 | /// 622 | fn mul(self, other: &Sprs) -> Sprs { 623 | multiply(&self, other) 624 | } 625 | } 626 | 627 | impl> Mul for &Sprs { 628 | type Output = Sprs; 629 | 630 | /// Overloads the `*` operator. Multiplies two references to sparse matrices 631 | /// 632 | fn mul(self, other: &Sprs) -> Sprs { 633 | multiply(self, other) 634 | } 635 | } 636 | 637 | impl> Mul> for &Sprs { 638 | type Output = Sprs; 639 | 640 | /// Overloads the `*` operator. 641 | /// 642 | fn mul(self, other: Sprs) -> Sprs { 643 | multiply(self, &other) 644 | } 645 | } 646 | 647 | // Implementing operators for `Sprs` and `T` types 648 | 649 | impl> Add for Sprs { 650 | type Output = Self; 651 | 652 | /// Overloads the `+` operator. Adds an `T` value to all elements of a 653 | /// sparse matrix 654 | /// 655 | fn add(self, other: T) -> Sprs { 656 | scpmat(other, &self) 657 | } 658 | } 659 | 660 | impl> Add for &Sprs { 661 | type Output = Sprs; 662 | 663 | /// Overloads the `+` operator. Adds an `T` value to all elements of a 664 | /// sparse matrix 665 | /// 666 | fn add(self, other: T) -> Sprs { 667 | scpmat(other, self) 668 | } 669 | } 670 | 671 | impl> Sub for Sprs { 672 | type Output = Self; 673 | 674 | /// Overloads the `-` operator. Subtracts an `T` value to all elements of 675 | /// a sparse matrix 676 | /// 677 | fn sub(self, other: T) -> Sprs { 678 | scpmat(-other, &self) 679 | } 680 | } 681 | 682 | impl> Sub for &Sprs { 683 | type Output = Sprs; 684 | 685 | /// Overloads the `-` operator. Subtracts an `T` value to all elements of 686 | /// a sparse matrix 687 | /// 688 | fn sub(self, other: T) -> Sprs { 689 | scpmat(-other, self) 690 | } 691 | } 692 | 693 | impl> Mul for Sprs { 694 | type Output = Self; 695 | 696 | /// Overloads the `*` operator. Multiplies an `T` value to all elements of 697 | /// a sparse matrix 698 | /// 699 | fn mul(self, other: T) -> Sprs { 700 | scxmat(other, &self) 701 | } 702 | } 703 | 704 | impl> Mul for &Sprs { 705 | type Output = Sprs; 706 | 707 | /// Overloads the `*` operator. Multiplies an `T` value to all elements of 708 | /// a sparse matrix 709 | /// 710 | fn mul(self, other: T) -> Sprs { 711 | scxmat(other, self) 712 | } 713 | } 714 | 715 | impl> Div for Sprs { 716 | type Output = Self; 717 | 718 | /// Overloads the `/` operator. Divides by an `T` value to all elements of 719 | /// a sparse matrix 720 | /// 721 | fn div(self, other: T) -> Sprs { 722 | scxmat(T::one() / other, &self) 723 | } 724 | } 725 | 726 | impl> Div for &Sprs { 727 | type Output = Sprs; 728 | 729 | /// Overloads the `/` operator. Divides by an `T` value to all elements of 730 | /// a sparse matrix 731 | /// 732 | fn div(self, other: T) -> Sprs { 733 | scxmat(T::one() / other, self) 734 | } 735 | } 736 | 737 | // Implementing operators for `T` (f32, f64) and `Sprs` types 738 | 739 | impl Add> for f32 { 740 | type Output = Sprs; 741 | 742 | /// Overloads the `+` operator. Adds an `f64` value to all elements of a 743 | /// sparse matrix 744 | /// 745 | fn add(self, other: Sprs) -> Sprs { 746 | scpmat(self, &other) 747 | } 748 | } 749 | 750 | impl Add> for f64 { 751 | type Output = Sprs; 752 | 753 | /// Overloads the `+` operator. Adds an `f64` value to all elements of a 754 | /// sparse matrix 755 | /// 756 | fn add(self, other: Sprs) -> Sprs { 757 | scpmat(self, &other) 758 | } 759 | } 760 | 761 | impl Add<&Sprs> for f32 { 762 | type Output = Sprs; 763 | 764 | /// Overloads the `+` operator. Adds an `f32` value to all elements of a 765 | /// sparse matrix 766 | /// 767 | fn add(self, other: &Sprs) -> Sprs { 768 | scpmat(self, other) 769 | } 770 | } 771 | 772 | impl Add<&Sprs> for f64 { 773 | type Output = Sprs; 774 | 775 | /// Overloads the `+` operator. Adds an `f64` value to all elements of a 776 | /// sparse matrix 777 | /// 778 | fn add(self, other: &Sprs) -> Sprs { 779 | scpmat(self, other) 780 | } 781 | } 782 | 783 | impl Sub> for f32 { 784 | type Output = Sprs; 785 | 786 | /// Overloads the `-` operator. Subtracts an `f32` value to all elements of 787 | /// a sparse matrix 788 | /// 789 | fn sub(self, other: Sprs) -> Sprs { 790 | scpmat(self, &scxmat(-1., &other)) 791 | } 792 | } 793 | 794 | impl Sub> for f64 { 795 | type Output = Sprs; 796 | 797 | /// Overloads the `-` operator. Subtracts an `f64` value to all elements of 798 | /// a sparse matrix 799 | /// 800 | fn sub(self, other: Sprs) -> Sprs { 801 | scpmat(self, &scxmat(-1., &other)) 802 | } 803 | } 804 | 805 | impl Sub<&Sprs> for f32 { 806 | type Output = Sprs; 807 | 808 | /// Overloads the `-` operator. Subtracts an `f32` value to all elements of 809 | /// a sparse matrix 810 | /// 811 | fn sub(self, other: &Sprs) -> Sprs { 812 | scpmat(self, &scxmat(-1., other)) 813 | } 814 | } 815 | 816 | impl Sub<&Sprs> for f64 { 817 | type Output = Sprs; 818 | 819 | /// Overloads the `-` operator. Subtracts an `f64` value to all elements of 820 | /// a sparse matrix 821 | /// 822 | fn sub(self, other: &Sprs) -> Sprs { 823 | scpmat(self, &scxmat(-1., other)) 824 | } 825 | } 826 | 827 | impl Mul> for f32 { 828 | type Output = Sprs; 829 | 830 | /// Overloads the `*` operator. Multiplies an `f32` value to all elements of 831 | /// a sparse matrix 832 | /// 833 | fn mul(self, other: Sprs) -> Sprs { 834 | scxmat(self, &other) 835 | } 836 | } 837 | 838 | impl Mul> for f64 { 839 | type Output = Sprs; 840 | 841 | /// Overloads the `*` operator. Multiplies an `f64` value to all elements of 842 | /// a sparse matrix 843 | /// 844 | fn mul(self, other: Sprs) -> Sprs { 845 | scxmat(self, &other) 846 | } 847 | } 848 | 849 | impl Mul<&Sprs> for f32 { 850 | type Output = Sprs; 851 | 852 | /// Overloads the `*` operator. Multiplies an `f32` value to all elements of 853 | /// a sparse matrix 854 | /// 855 | fn mul(self, other: &Sprs) -> Sprs { 856 | scxmat(self, other) 857 | } 858 | } 859 | 860 | impl Mul<&Sprs> for f64 { 861 | type Output = Sprs; 862 | 863 | /// Overloads the `*` operator. Multiplies an `f64` value to all elements of 864 | /// a sparse matrix 865 | /// 866 | fn mul(self, other: &Sprs) -> Sprs { 867 | scxmat(self, other) 868 | } 869 | } 870 | 871 | /// Matrix in triplet format 872 | /// 873 | /// rsparse exclusively uses the CSC format in its core functions. Nevertheless 874 | /// it is sometimes easier to represent a matrix in the triplet format. For this 875 | /// reason rsparse provides this struct that can be converted into a Sprs. 876 | /// 877 | #[derive(Clone, Debug)] 878 | pub struct Trpl> { 879 | /// number of rows 880 | pub m: usize, 881 | /// number of columns 882 | pub n: usize, 883 | /// column indices 884 | pub p: Vec, 885 | /// row indices 886 | pub i: Vec, 887 | /// numericals values 888 | pub x: Vec, 889 | } 890 | 891 | impl + for<'a> std::iter::Sum<&'a T>> Trpl { 892 | /// Initializes to an empty matrix 893 | /// 894 | pub fn new() -> Trpl { 895 | Trpl { 896 | m: 0, 897 | n: 0, 898 | p: Vec::new(), 899 | i: Vec::new(), 900 | x: Vec::new(), 901 | } 902 | } 903 | 904 | /// Append new value to the matrix 905 | /// 906 | pub fn append(&mut self, row: usize, column: usize, value: T) { 907 | if row + 1 > self.m { 908 | self.m = row + 1; 909 | } 910 | if column + 1 > self.n { 911 | self.n = column + 1; 912 | } 913 | 914 | self.p.push(column as isize); 915 | self.i.push(row); 916 | self.x.push(value); 917 | } 918 | 919 | /// Convert `Trpl` to `Sprs` matrix 920 | /// 921 | pub fn to_sprs(&self) -> Sprs { 922 | let mut s = Sprs { 923 | nzmax: self.x.len(), 924 | m: self.m, 925 | n: self.n, 926 | p: vec![0; self.n + 1], 927 | i: vec![0; self.x.len()], 928 | x: vec![T::zero(); self.x.len()], 929 | }; 930 | 931 | // get workspace 932 | let mut w = vec![0; s.n]; 933 | 934 | for k in 0..self.p.len() { 935 | w[self.p[k] as usize] += 1; // column counts 936 | } 937 | cumsum(&mut s.p[..], &mut w[..], s.n); // column pointers 938 | let mut p; 939 | for k in 0..self.p.len() { 940 | p = w[self.p[k] as usize] as usize; 941 | s.i[p] = self.i[k]; // A(i,j) is the pth entry in C 942 | w[self.p[k] as usize] += 1; 943 | s.x[p] = self.x[k]; 944 | } 945 | 946 | s 947 | } 948 | 949 | /// Sum duplicate entries (in the same position) 950 | /// 951 | /// *- Note: This function may negatively impact performance, and should be 952 | /// avoided* 953 | /// 954 | pub fn sum_dupl(&mut self) { 955 | for i in &self.i { 956 | for j in &self.p { 957 | let pos; 958 | let val; 959 | let g = self.get_all(*i, *j as usize); 960 | 961 | if g.is_none() { 962 | continue; 963 | } 964 | 965 | (pos, val) = g.unwrap(); 966 | for i in &pos[..pos.len()] { 967 | self.x[*i] = T::zero(); 968 | } 969 | self.x[pos[pos.len() - 1]] = val.iter().sum(); 970 | } 971 | } 972 | } 973 | 974 | /// Get element from (row, column) position. If more than one element 975 | /// exists returns the first one found. 976 | /// 977 | /// *- Note: This function may negatively impact performance, and should be 978 | /// avoided* 979 | /// 980 | pub fn get(&self, row: usize, column: usize) -> Option { 981 | for i in 0..self.x.len() { 982 | if (self.i[i], self.p[i] as usize) == (row, column) { 983 | return Some(self.x[i]); 984 | } 985 | } 986 | 987 | None 988 | } 989 | 990 | /// Get all elements from (row, column) position. 991 | /// 992 | /// *- Note: This function may negatively impact performance, and should be 993 | /// avoided* 994 | /// 995 | pub fn get_all(&self, row: usize, column: usize) -> Option<(Vec, Vec)> { 996 | let mut r = Vec::new(); 997 | let mut pos = Vec::new(); 998 | 999 | for i in 0..self.x.len() { 1000 | if (self.i[i], self.p[i] as usize) == (row, column) { 1001 | r.push(self.x[i]); 1002 | pos.push(i); 1003 | } 1004 | } 1005 | 1006 | if !r.is_empty() { 1007 | Some((pos, r)) 1008 | } else { 1009 | None 1010 | } 1011 | } 1012 | } 1013 | 1014 | impl + for<'a> std::iter::Sum<&'a T>> Default for Trpl { 1015 | fn default() -> Self { 1016 | Self::new() 1017 | } 1018 | } 1019 | 1020 | /// Symbolic Cholesky, LU, or QR analysis 1021 | /// 1022 | #[derive(Clone, Debug)] 1023 | pub struct Symb { 1024 | /// inverse row perm. for QR, fill red. perm for Chol 1025 | pub pinv: Option>, 1026 | /// fill-reducing column permutation for LU and QR 1027 | pub q: Option>, 1028 | /// elimination tree for Cholesky and QR 1029 | pub parent: Vec, 1030 | /// column pointers for Cholesky, row counts for QR 1031 | pub cp: Vec, 1032 | /// nº of rows for QR, after adding fictitious rows 1033 | pub m2: usize, 1034 | /// nº entries in L for LU or Cholesky; in V for QR 1035 | pub lnz: usize, 1036 | /// nº entries in U for LU; in R for QR 1037 | pub unz: usize, 1038 | } 1039 | 1040 | impl Symb { 1041 | /// Initializes to empty struct 1042 | /// 1043 | pub fn new() -> Symb { 1044 | Symb { 1045 | pinv: None, 1046 | q: None, 1047 | parent: Vec::new(), 1048 | cp: Vec::new(), 1049 | m2: 0, 1050 | lnz: 0, 1051 | unz: 0, 1052 | } 1053 | } 1054 | } 1055 | 1056 | impl Default for Symb { 1057 | fn default() -> Self { 1058 | Self::new() 1059 | } 1060 | } 1061 | 1062 | /// Numeric Cholesky, LU, or QR factorization 1063 | /// 1064 | #[derive(Clone, Debug)] 1065 | pub struct Nmrc> { 1066 | /// L for LU and Cholesky, V for QR 1067 | pub l: Sprs, 1068 | /// U for LU, R for QR, not used for Cholesky 1069 | pub u: Sprs, 1070 | /// partial pivoting for LU 1071 | pub pinv: Option>, 1072 | /// beta [0..n-1] for QR 1073 | pub b: Vec, 1074 | } 1075 | 1076 | impl> Nmrc { 1077 | /// Initializes to empty struct 1078 | /// 1079 | pub fn new() -> Nmrc { 1080 | Nmrc { 1081 | l: Sprs::new(), 1082 | u: Sprs::new(), 1083 | pinv: None, 1084 | b: Vec::new(), 1085 | } 1086 | } 1087 | } 1088 | 1089 | impl> Default for Nmrc { 1090 | fn default() -> Self { 1091 | Self::new() 1092 | } 1093 | } 1094 | -------------------------------------------------------------------------------- /tests/assets/allsol_1.sprs: -------------------------------------------------------------------------------- 1 | nzmax: 1070 2 | m: 100 3 | n: 100 4 | p: [0, 16, 25, 41, 52, 61, 66, 80, 88, 100, 113, 123, 131, 138, 145, 153, 164, 169, 176, 188, 198, 205, 212, 221, 232, 244, 252, 267, 272, 280, 292, 298, 310, 327, 334, 346, 359, 373, 385, 396, 410, 429, 441, 452, 461, 472, 479, 493, 506, 518, 525, 532, 540, 548, 561, 570, 580, 592, 605, 617, 624, 643, 654, 667, 674, 683, 697, 703, 708, 716, 726, 739, 749, 763, 771, 781, 792, 802, 813, 828, 844, 854, 865, 875, 889, 899, 913, 922, 928, 943, 951, 961, 974, 985, 998, 1009, 1023, 1033, 1047, 1059, 1070] 5 | i: [0, 5, 11, 14, 18, 32, 36, 39, 43, 44, 61, 71, 75, 79, 93, 95, 1, 24, 32, 51, 68, 81, 83, 85, 95, 2, 8, 12, 20, 29, 36, 43, 50, 57, 66, 70, 74, 80, 81, 82, 88, 3, 4, 6, 27, 28, 34, 75, 81, 84, 85, 96, 3, 4, 12, 17, 39, 50, 79, 92, 98, 0, 5, 14, 25, 77, 3, 6, 7, 14, 29, 35, 38, 51, 59, 62, 67, 70, 78, 88, 6, 7, 13, 14, 31, 39, 58, 94, 2, 8, 9, 35, 39, 43, 60, 62, 72, 75, 78, 87, 8, 9, 10, 37, 41, 47, 53, 57, 60, 62, 92, 94, 99, 9, 10, 23, 33, 37, 42, 48, 70, 91, 99, 0, 11, 25, 63, 67, 69, 93, 95, 2, 4, 12, 13, 17, 26, 80, 7, 12, 13, 38, 54, 82, 97, 0, 5, 6, 7, 14, 19, 37, 48, 15, 18, 20, 22, 30, 40, 58, 74, 81, 90, 95, 16, 26, 35, 36, 57, 4, 12, 17, 18, 24, 26, 59, 0, 15, 17, 18, 22, 36, 41, 47, 51, 65, 83, 99, 14, 19, 25, 44, 61, 65, 72, 76, 84, 98, 2, 15, 20, 35, 43, 47, 60, 21, 42, 55, 61, 65, 72, 89, 15, 18, 22, 23, 33, 36, 45, 75, 88, 10, 22, 23, 48, 52, 55, 60, 64, 72, 79, 89, 1, 17, 24, 26, 34, 36, 40, 45, 57, 60, 89, 97, 5, 11, 19, 25, 26, 64, 71, 98, 12, 16, 17, 24, 25, 26, 28, 41, 56, 58, 63, 73, 88, 94, 98, 3, 27, 34, 40, 97, 3, 26, 28, 34, 40, 86, 92, 97, 2, 6, 29, 31, 32, 35, 42, 55, 59, 71, 73, 98, 15, 30, 32, 46, 53, 60, 7, 29, 31, 34, 42, 61, 73, 75, 76, 79, 80, 81, 0, 1, 29, 30, 32, 36, 40, 47, 52, 60, 65, 68, 81, 84, 88, 93, 95, 10, 22, 33, 52, 67, 68, 96, 3, 24, 27, 28, 31, 34, 39, 48, 69, 75, 97, 99, 6, 8, 16, 20, 29, 35, 38, 65, 69, 70, 73, 77, 86, 0, 2, 16, 18, 22, 24, 32, 36, 37, 73, 79, 83, 91, 93, 9, 10, 14, 36, 37, 40, 55, 60, 76, 78, 80, 89, 6, 13, 35, 38, 59, 65, 73, 77, 78, 84, 95, 0, 4, 7, 8, 34, 39, 44, 50, 62, 74, 79, 83, 91, 92, 15, 24, 27, 28, 32, 37, 40, 41, 44, 51, 56, 57, 64, 69, 77, 90, 93, 95, 98, 9, 18, 26, 40, 41, 43, 52, 56, 80, 81, 85, 97, 10, 21, 29, 31, 42, 49, 62, 78, 83, 93, 94, 0, 2, 8, 20, 41, 43, 68, 78, 85, 0, 19, 39, 40, 44, 51, 53, 56, 65, 68, 97, 22, 24, 45, 75, 80, 83, 92, 30, 46, 47, 53, 54, 55, 65, 69, 72, 76, 91, 92, 95, 97, 9, 18, 20, 32, 46, 47, 52, 66, 72, 79, 80, 83, 91, 10, 14, 23, 34, 48, 54, 61, 78, 79, 90, 94, 97, 42, 49, 74, 75, 79, 83, 88, 2, 4, 39, 50, 57, 73, 95, 1, 6, 18, 40, 44, 51, 56, 61, 23, 32, 33, 41, 47, 52, 86, 91, 9, 30, 44, 46, 53, 57, 60, 70, 74, 79, 82, 89, 90, 13, 46, 48, 54, 63, 76, 82, 86, 87, 21, 23, 29, 37, 46, 55, 58, 85, 91, 95, 26, 40, 41, 44, 51, 56, 61, 71, 74, 77, 88, 92, 2, 9, 16, 24, 40, 50, 53, 57, 60, 71, 77, 88, 96, 7, 15, 26, 55, 58, 62, 66, 77, 78, 85, 90, 96, 6, 17, 29, 38, 59, 92, 93, 8, 9, 20, 23, 24, 30, 32, 37, 53, 57, 60, 64, 80, 84, 86, 87, 93, 94, 96, 0, 19, 21, 31, 48, 51, 56, 61, 72, 79, 98, 6, 8, 9, 39, 42, 58, 62, 64, 75, 82, 83, 90, 95, 11, 26, 54, 63, 64, 84, 88, 23, 25, 40, 60, 62, 63, 64, 78, 85, 18, 19, 21, 32, 35, 38, 44, 46, 65, 67, 69, 71, 72, 97, 2, 47, 58, 66, 79, 93, 6, 11, 33, 65, 67, 1, 32, 33, 43, 44, 68, 90, 96, 11, 34, 35, 40, 46, 65, 69, 83, 88, 90, 2, 6, 10, 35, 53, 70, 71, 74, 88, 92, 95, 98, 99, 0, 25, 29, 56, 57, 65, 70, 71, 94, 99, 8, 19, 21, 23, 46, 47, 61, 65, 72, 74, 81, 86, 87, 93, 26, 29, 31, 35, 36, 38, 50, 73, 2, 15, 39, 49, 53, 56, 70, 72, 74, 99, 0, 3, 8, 22, 31, 34, 45, 49, 62, 75, 91, 19, 31, 37, 46, 54, 76, 77, 78, 91, 99, 5, 35, 38, 40, 56, 57, 58, 76, 77, 81, 91, 6, 8, 37, 38, 42, 43, 48, 58, 64, 76, 78, 79, 82, 84, 98, 0, 4, 23, 31, 36, 39, 47, 48, 49, 53, 61, 66, 78, 79, 90, 93, 2, 12, 31, 37, 41, 45, 47, 60, 80, 88, 1, 2, 3, 15, 31, 32, 41, 72, 77, 81, 96, 2, 13, 53, 54, 62, 78, 82, 83, 86, 94, 1, 18, 36, 39, 42, 45, 47, 49, 62, 69, 82, 83, 88, 93, 3, 19, 32, 38, 60, 63, 78, 84, 89, 97, 1, 3, 41, 43, 55, 58, 64, 85, 89, 91, 92, 95, 96, 99, 28, 35, 52, 54, 60, 72, 82, 86, 98, 8, 54, 60, 72, 87, 94, 2, 6, 22, 26, 32, 49, 56, 57, 63, 69, 70, 80, 83, 88, 91, 21, 23, 24, 37, 53, 84, 85, 89, 15, 40, 48, 53, 58, 62, 68, 69, 79, 90, 10, 36, 39, 46, 47, 52, 55, 75, 76, 77, 85, 88, 91, 4, 9, 28, 39, 45, 46, 56, 59, 70, 85, 92, 0, 11, 32, 36, 40, 42, 59, 60, 66, 72, 79, 83, 93, 7, 9, 26, 42, 48, 60, 71, 82, 87, 94, 98, 0, 1, 11, 15, 32, 38, 40, 46, 50, 55, 62, 70, 85, 95, 3, 33, 57, 58, 60, 68, 81, 85, 96, 97, 13, 24, 27, 28, 34, 41, 44, 46, 48, 65, 84, 96, 97, 99, 4, 19, 25, 26, 29, 40, 61, 70, 78, 86, 94, 98, 9, 10, 18, 34, 70, 71, 74, 76, 85, 97, 99] 6 | x: [100.0, 0.131486, 0.244797, 0.130065, 0.377212, 0.131901, 0.289852, 0.426516, 0.200904, 0.037983, 0.39626, 0.410597, 0.324558, 0.273504, 0.223392, 0.114378, 100.0, 0.261796, 0.05352, 0.067026, 0.360614, 0.438951, 0.452361, 0.308833, 0.214187, 100.071445, 0.074933, 0.405475, 0.360172, 0.145992, 0.099059, 0.257119, 0.350549, 0.427363, 0.029812, 0.188136, 0.455759, 0.14522, 0.215903, 0.13264, 0.111078, 100.0, 0.159037, 0.02712, 0.228712, 0.125153, 0.338061, 0.341682, 0.315671, 0.354641, 0.28837, 0.416458, 0.159037, 100.0, 0.378375, 0.054849, 0.352721, 0.197354, 0.303912, 0.397819, 0.017491, 0.131486, 100.0, 0.212429, 0.39481, 0.465601, 0.02712, 100.0, 0.326906, 0.207261, 0.318653, 0.298606, 0.08945, 0.49417, 0.315535, 0.234546, 0.169049, 0.486031, 0.143988, 0.310531, 0.326906, 100.0, 0.310028, 0.247533, 0.370422, 0.46343, 0.181469, 0.353358, 0.074933, 100.0, 0.077185, 0.467865, 0.004148, 0.34078, 0.056858, 0.170197, 0.225168, 0.086531, 0.477863, 0.195381, 0.077185, 100.0, 0.362888, 0.360131, 0.225819, 0.329774, 0.0156, 0.174524, 0.108901, 0.031926, 0.444474, 0.00874, 0.391436, 0.362888, 100.0, 0.427673, 0.270759, 0.195427, 0.405801, 0.406772, 0.093624, 0.140754, 0.072268, 0.244797, 100.0, 0.486426, 0.237786, 0.634944, 0.090853, 0.436276, 0.334232, 0.405475, 0.378375, 100.0, 0.278347, 0.074438, 0.33214, 0.26266, 0.310028, 0.278347, 100.0, 0.039035, 0.431934, 0.419849, 0.195088, 0.130065, 0.212429, 0.207261, 0.247533, 100.0, 0.087446, 0.433759, 0.201217, 100.0, 0.228654, 0.186924, 0.058059, 0.170822, 0.083126, 0.330929, 0.160471, 0.068578, 0.037235, 0.539319, 100.0, 0.272209, 0.29351, 0.206943, 0.019592, 0.054849, 0.074438, 100.334329, 0.298324, 0.271407, 0.155555, 0.013997, 0.377212, 0.228654, 0.298324, 100.0, 0.427463, 0.304901, 0.217658, 0.44745, 0.162162, 0.092007, 0.276286, 0.372434, 0.087446, 100.0, 0.049169, 0.006378, 0.319472, 0.424861, 0.162834, 0.219789, 0.122883, 0.096203, 0.360172, 0.186924, 100.0, 0.325999, 0.450286, 0.065428, 0.122054, 100.0, 0.351155, 0.121842, 0.018213, 0.154575, 0.307644, 0.057015, 0.058059, 0.427463, 100.0, 0.34336, 0.295792, 0.429149, 0.367155, 0.400234, 0.205711, 0.427673, 0.34336, 100.0, 0.41528, 0.1885, 0.068927, 0.28229, 0.110847, 0.327657, 0.385743, 0.074532, 0.261796, 0.271407, 100.0, 0.428328, 0.139914, 0.293786, 0.373092, 0.243715, 0.449761, 0.496858, 0.069879, 0.089011, 0.39481, 0.486426, 0.049169, 100.0, 0.088897, 0.172014, 0.21432, 0.078347, 0.33214, 0.272209, 0.155555, 0.428328, 0.088897, 100.0, 0.06272, 0.023267, 0.219537, 0.002168, 0.452461, 0.060089, 0.437707, 0.335582, 0.252405, 0.228712, 100.0, 0.461357, 0.18703, 0.424841, 0.125153, 0.06272, 100.88522, 0.456591, 0.042499, 0.072263, 0.113267, 0.409334, 0.145992, 0.318653, 100.0, 0.060131, 0.117463, 0.259958, 0.185689, 0.339759, 0.208383, 0.201182, 0.35029, 0.185992, 0.170822, 100.0, 0.019511, 0.131833, 0.081238, 0.206037, 0.370422, 0.060131, 100.0, 0.107588, 0.441719, 0.377241, 0.43699, 0.03382, 0.104644, 0.260425, 0.273878, 0.421194, 0.131901, 0.05352, 0.117463, 0.019511, 100.0, 0.466152, 0.407213, 0.469643, 0.289797, 0.116545, 0.629285, 0.476264, 0.062507, 0.303676, 0.118065, 0.420926, 0.017346, 0.270759, 0.295792, 100.0, 0.160122, 0.328852, 0.389945, 0.067573, 0.338061, 0.139914, 0.461357, 0.456591, 0.107588, 100.0, 0.396078, 0.12481, 0.200441, 0.123018, 0.384122, 0.47479, 0.298606, 0.467865, 0.29351, 0.325999, 0.259958, 100.0, 0.087059, 0.452307, 0.345856, 0.440228, 0.241337, 0.400811, 0.00247, 0.289852, 0.099059, 0.206943, 0.304901, 0.429149, 0.293786, 0.466152, 100.0, 0.43661, 0.12182, 0.059488, 0.234572, 0.317276, 0.124399, 0.360131, 0.195427, 0.433759, 0.43661, 100.0, 0.40414, 0.199374, 0.167991, 0.038671, 0.290309, 0.40266, 0.057201, 0.08945, 0.039035, 0.087059, 100.0, 0.261157, 0.309428, 0.040173, 0.485518, 0.108324, 0.18858, 0.019802, 0.426516, 0.352721, 0.46343, 0.004148, 0.396078, 100.0, 0.312902, 0.297091, 0.186218, 0.025794, 0.165645, 0.433868, 0.444879, 0.353096, 0.083126, 0.373092, 0.18703, 0.042499, 0.407213, 0.40414, 100.0, 0.249863, 0.01414, 0.420888, 0.324144, 0.49276, 0.325535, 0.326458, 0.026952, 0.17136, 0.277224, 0.049181, 0.493979, 0.225819, 0.217658, 0.023267, 0.249863, 100.0, 0.443196, 0.373176, 0.001395, 0.387583, 0.287267, 0.162999, 0.075043, 0.405801, 0.351155, 0.185689, 0.441719, 100.0, 0.067373, 0.339232, 0.419081, 0.455593, 0.045435, 0.070012, 0.200904, 0.257119, 0.34078, 0.450286, 0.443196, 100.0, 0.282408, 0.197568, 0.265362, 0.037983, 0.006378, 0.312902, 0.01414, 100.0, 0.196549, 0.409217, 0.165437, 0.245557, 0.024571, 0.344145, 0.367155, 0.243715, 100.0, 0.048297, 0.325173, 0.381427, 0.060076, 0.131833, 100.0, 0.144818, 0.064507, 0.007114, 0.443206, 0.41048, 0.286137, 0.266268, 0.450562, 0.128346, 0.485165, 0.036695, 0.042476, 0.329774, 0.44745, 0.065428, 0.469643, 0.144818, 100.0, 0.261166, 0.054423, 0.108674, 0.764099, 0.465968, 0.267541, 0.292327, 0.406772, 0.201217, 0.41528, 0.12481, 100.0, 0.451928, 0.283126, 0.103454, 0.314854, 0.386086, 0.260092, 0.05595, 0.067373, 100.0, 0.251727, 0.384386, 0.379253, 0.258197, 0.315472, 0.350549, 0.197354, 0.297091, 100.0, 0.402284, 0.330605, 0.457199, 0.067026, 0.49417, 0.162162, 0.420888, 0.196549, 100.0, 0.454976, 0.658927, 0.1885, 0.289797, 0.160122, 0.373176, 0.261166, 100.0, 0.256978, 0.285512, 0.0156, 0.081238, 0.409217, 0.064507, 100.0, 0.324295, 0.431, 0.46763, 0.284129, 0.127558, 0.414276, 0.192764, 0.208211, 0.431934, 0.007114, 0.451928, 100.0, 0.437919, 0.383369, 0.076352, 0.192166, 0.271384, 0.121842, 0.068927, 0.339759, 0.199374, 0.443206, 100.0, 0.019507, 0.346459, 0.287795, 0.000737, 0.219537, 0.324144, 0.001395, 0.165437, 0.454976, 100.0, 0.167599, 0.091598, 0.493976, 0.189712, 0.092554, 0.217492, 0.427363, 0.174524, 0.019592, 0.449761, 0.49276, 0.402284, 0.324295, 100.0, 0.28993, 0.342575, 0.318186, 0.242686, 0.137731, 0.181469, 0.330929, 0.002168, 0.019507, 100.0, 0.381788, 0.317099, 0.429013, 0.331863, 0.320452, 0.004989, 0.496443, 0.315535, 0.013997, 0.208383, 0.261157, 100.0, 0.222283, 0.257267, 0.056858, 0.108901, 0.122054, 0.28229, 0.496858, 0.206037, 0.116545, 0.167991, 0.431, 0.28993, 100.0, 0.397396, 0.252308, 0.366183, 0.407617, 0.197206, 0.4442, 0.172457, 0.440842, 0.39626, 0.319472, 0.018213, 0.377241, 0.283126, 0.658927, 0.167599, 100.0, 0.219686, 0.186322, 0.136838, 0.234546, 0.170197, 0.031926, 0.186218, 0.339232, 0.381788, 100.0, 0.264613, 0.420361, 0.175341, 0.038914, 0.161878, 0.254157, 0.237786, 0.452461, 0.437919, 100.0, 0.338059, 0.073247, 0.412279, 0.110847, 0.172014, 0.325535, 0.397396, 0.264613, 0.338059, 100.0, 0.15164, 0.498949, 0.092007, 0.424861, 0.154575, 0.629285, 0.452307, 0.309428, 0.245557, 0.41048, 100.0, 0.469337, 0.021545, 0.210893, 0.083274, 0.295389, 0.029812, 0.054423, 0.317099, 100.0, 0.318717, 0.005088, 0.169049, 0.634944, 0.328852, 0.469337, 100.0, 0.360614, 0.476264, 0.389945, 0.282408, 0.024571, 100.0, 0.219599, 0.286205, 0.090853, 0.200441, 0.345856, 0.326458, 0.286137, 0.021545, 100.0, 0.293975, 0.073737, 0.099372, 0.188136, 0.486031, 0.093624, 0.440228, 0.46763, 100.0, 0.001532, 0.336008, 0.420503, 0.217143, 0.49008, 0.443163, 0.450769, 0.410597, 0.21432, 0.201182, 0.091598, 0.342575, 0.210893, 0.001532, 100.0, 0.322832, 0.38313, 0.225168, 0.162834, 0.307644, 0.327657, 0.266268, 0.108674, 0.219686, 0.083274, 100.0, 0.395294, 0.329727, 0.153206, 0.095915, 0.110133, 0.060089, 0.35029, 0.43699, 0.241337, 0.12182, 0.040173, 0.330605, 100.0, 0.455759, 0.160471, 0.025794, 0.251727, 0.284129, 0.493976, 0.336008, 0.395294, 100.0, 0.064809, 0.324558, 0.341682, 0.086531, 0.400234, 0.03382, 0.123018, 0.048297, 0.384386, 0.420361, 100.0, 0.064362, 0.219789, 0.104644, 0.038671, 0.450562, 0.383369, 100.0, 0.067305, 0.017768, 0.05002, 0.045121, 0.465601, 0.400811, 0.485518, 0.026952, 0.189712, 0.318186, 0.429013, 0.067305, 100.0, 0.200903, 0.439367, 0.143988, 0.477863, 0.290309, 0.108324, 0.419081, 0.197568, 0.103454, 0.331863, 0.15164, 0.017768, 100.0, 0.367165, 0.310942, 0.023573, 0.006929, 0.273504, 0.303912, 0.385743, 0.260425, 0.059488, 0.165645, 0.764099, 0.314854, 0.379253, 0.127558, 0.186322, 0.318717, 0.367165, 100.0, 0.464265, 0.001589, 0.14522, 0.26266, 0.273878, 0.40266, 0.387583, 0.325173, 0.465968, 0.252308, 100.0, 0.204055, 0.438951, 0.215903, 0.315671, 0.068578, 0.421194, 0.062507, 0.287267, 0.329727, 0.200903, 100.0, 0.014459, 0.13264, 0.419849, 0.414276, 0.076352, 0.175341, 0.310942, 100.0, 0.331028, 0.338926, 0.412317, 0.452361, 0.276286, 0.234572, 0.433868, 0.455593, 0.381427, 0.267541, 0.258197, 0.038914, 0.293975, 0.331028, 100.0, 0.060921, 0.284107, 0.354641, 0.122883, 0.303676, 0.18858, 0.366183, 0.073247, 0.023573, 100.0, 0.318885, 0.300588, 0.308833, 0.28837, 0.162999, 0.265362, 0.346459, 0.320452, 0.498949, 100.0, 0.119596, 0.201188, 0.143452, 0.463108, 0.24427, 0.423299, 0.072263, 0.00247, 0.256978, 0.192166, 0.407617, 0.153206, 0.338926, 100.0, 0.055399, 0.195381, 0.271384, 0.197206, 0.095915, 100.0, 0.26546, 0.111078, 0.310531, 0.205711, 0.437707, 0.118065, 0.315472, 0.092554, 0.242686, 0.412279, 0.073737, 0.420503, 0.204055, 0.060921, 100.0, 0.249608, 0.057015, 0.074532, 0.069879, 0.057201, 0.192764, 0.318885, 0.119596, 100.0, 0.037235, 0.17136, 0.386086, 0.208211, 0.004989, 0.161878, 0.219599, 0.099372, 0.464265, 100.0, 0.140754, 0.317276, 0.444879, 0.128346, 0.292327, 0.285512, 0.287795, 0.064362, 0.05002, 0.439367, 0.201188, 0.249608, 100.0, 0.397819, 0.444474, 0.113267, 0.353096, 0.060076, 0.485165, 0.217492, 0.222283, 0.217143, 0.143452, 100.0, 0.223392, 0.436276, 0.420926, 0.124399, 0.277224, 0.045435, 0.257267, 0.4442, 0.005088, 0.110133, 0.001589, 0.284107, 100.0, 0.353358, 0.00874, 0.335582, 0.070012, 0.260092, 0.172457, 0.322832, 0.412317, 0.26546, 100.0, 0.259136, 0.114378, 0.214187, 0.334232, 0.539319, 0.017346, 0.019802, 0.049181, 0.036695, 0.457199, 0.000737, 0.254157, 0.49008, 0.463108, 100.0, 0.416458, 0.067573, 0.137731, 0.496443, 0.440842, 0.286205, 0.014459, 0.24427, 100.0, 0.105494, 0.195088, 0.089011, 0.424841, 0.409334, 0.384122, 0.075043, 0.344145, 0.042476, 0.05595, 0.295389, 0.300588, 0.105494, 100.0, 0.470528, 0.017491, 0.096203, 0.078347, 0.252405, 0.185992, 0.493979, 0.136838, 0.443163, 0.006929, 0.055399, 0.259136, 100.0, 0.391436, 0.072268, 0.372434, 0.47479, 0.450769, 0.38313, 0.064809, 0.045121, 0.423299, 0.470528, 100.0] 7 | -------------------------------------------------------------------------------- /tests/assets/cholsol_1.sprs: -------------------------------------------------------------------------------- 1 | nzmax: 30 2 | m: 10 3 | n: 10 4 | p: [0, 3, 7, 11, 15, 17, 19, 23, 26, 29, 30] 5 | i: [0, 2, 8, 1, 5, 6, 8, 0, 2, 3, 6, 2, 3, 6, 7, 4, 7, 1, 5, 1, 2, 3, 6, 3, 4, 7, 0, 1, 8, 9] 6 | x: [10.0, 0.397396, 0.115943, 10.0, 0.428783, 0.301772, 0.252308, 0.397396, 10.0, 0.172457, 0.369896, 0.172457, 10.0, 0.281, 0.003423, 10.0, 0.370113, 0.428783, 10.0, 0.301772, 0.369896, 0.281, 10.0, 0.003423, 0.370113, 10.0, 0.115943, 0.252308, 10.0, 10.0] 7 | -------------------------------------------------------------------------------- /tests/assets/cholsol_2.sprs: -------------------------------------------------------------------------------- 1 | nzmax: 98 2 | m: 50 3 | n: 50 4 | p: [0, 2, 3, 5, 7, 8, 9, 11, 13, 14, 17, 18, 21, 22, 23, 26, 27, 29, 30, 34, 35, 36, 37, 38, 41, 45, 49, 52, 54, 56, 57, 59, 61, 63, 64, 66, 68, 72, 73, 74, 77, 79, 81, 83, 88, 90, 91, 92, 95, 96, 98] 5 | i: [0, 49, 1, 2, 9, 3, 40, 4, 5, 6, 24, 7, 47, 8, 2, 9, 36, 10, 11, 16, 47, 12, 13, 14, 32, 43, 15, 11, 16, 17, 18, 24, 26, 36, 19, 20, 21, 22, 23, 25, 39, 6, 18, 24, 31, 23, 25, 36, 42, 18, 26, 43, 27, 44, 28, 35, 29, 30, 43, 24, 31, 14, 32, 33, 34, 43, 28, 35, 9, 18, 25, 36, 37, 38, 23, 39, 41, 3, 40, 39, 41, 25, 42, 14, 26, 30, 34, 43, 27, 44, 45, 46, 7, 11, 47, 48, 0, 49] 6 | x: [50.0, 0.156843, 50.0, 50.0, 0.622202, 50.0, 0.101984, 50.0, 50.0, 50.0, 0.147115, 50.0, 0.266348, 50.0, 0.622202, 50.0, 0.273858, 50.0, 50.0, 0.165554, 0.201462, 50.0, 50.0, 50.0, 0.023619, 0.043207, 50.0, 0.165554, 50.0, 50.0, 50.0, 0.095057, 0.169208, 0.440441, 50.0, 50.0, 50.0, 50.0, 50.0, 0.258752, 0.308148, 0.147115, 0.095057, 50.0, 0.161337, 0.258752, 50.0, 0.078984, 0.00637, 0.169208, 50.0, 0.029106, 50.0, 0.288221, 50.0, 0.445689, 50.0, 50.0, 0.10256, 0.161337, 50.0, 0.023619, 50.0, 50.0, 50.0, 0.485444, 0.445689, 50.0, 0.273858, 0.440441, 0.078984, 50.0, 50.0, 50.0, 0.308148, 50.0, 0.304234, 0.101984, 50.0, 0.304234, 50.0, 0.00637, 50.0, 0.043207, 0.029106, 0.10256, 0.485444, 50.0, 0.288221, 50.0, 50.0, 50.0, 0.266348, 0.201462, 50.0, 50.0, 0.156843, 50.0] 7 | -------------------------------------------------------------------------------- /tests/assets/cholsol_5.sprs: -------------------------------------------------------------------------------- 1 | nzmax: 1070 2 | m: 100 3 | n: 100 4 | p: [0, 16, 25, 41, 52, 61, 66, 80, 88, 100, 113, 123, 131, 138, 145, 153, 164, 169, 176, 188, 198, 205, 212, 221, 232, 244, 252, 267, 272, 280, 292, 298, 310, 327, 334, 346, 359, 373, 385, 396, 410, 429, 441, 452, 461, 472, 479, 493, 506, 518, 525, 532, 540, 548, 561, 570, 580, 592, 605, 617, 624, 643, 654, 667, 674, 683, 697, 703, 708, 716, 726, 739, 749, 763, 771, 781, 792, 802, 813, 828, 844, 854, 865, 875, 889, 899, 913, 922, 928, 943, 951, 961, 974, 985, 998, 1009, 1023, 1033, 1047, 1059, 1070] 5 | i: [0, 5, 11, 14, 18, 32, 36, 39, 43, 44, 61, 71, 75, 79, 93, 95, 1, 24, 32, 51, 68, 81, 83, 85, 95, 2, 8, 12, 20, 29, 36, 43, 50, 57, 66, 70, 74, 80, 81, 82, 88, 3, 4, 6, 27, 28, 34, 75, 81, 84, 85, 96, 3, 4, 12, 17, 39, 50, 79, 92, 98, 0, 5, 14, 25, 77, 3, 6, 7, 14, 29, 35, 38, 51, 59, 62, 67, 70, 78, 88, 6, 7, 13, 14, 31, 39, 58, 94, 2, 8, 9, 35, 39, 43, 60, 62, 72, 75, 78, 87, 8, 9, 10, 37, 41, 47, 53, 57, 60, 62, 92, 94, 99, 9, 10, 23, 33, 37, 42, 48, 70, 91, 99, 0, 11, 25, 63, 67, 69, 93, 95, 2, 4, 12, 13, 17, 26, 80, 7, 12, 13, 38, 54, 82, 97, 0, 5, 6, 7, 14, 19, 37, 48, 15, 18, 20, 22, 30, 40, 58, 74, 81, 90, 95, 16, 26, 35, 36, 57, 4, 12, 17, 18, 24, 26, 59, 0, 15, 17, 18, 22, 36, 41, 47, 51, 65, 83, 99, 14, 19, 25, 44, 61, 65, 72, 76, 84, 98, 2, 15, 20, 35, 43, 47, 60, 21, 42, 55, 61, 65, 72, 89, 15, 18, 22, 23, 33, 36, 45, 75, 88, 10, 22, 23, 48, 52, 55, 60, 64, 72, 79, 89, 1, 17, 24, 26, 34, 36, 40, 45, 57, 60, 89, 97, 5, 11, 19, 25, 26, 64, 71, 98, 12, 16, 17, 24, 25, 26, 28, 41, 56, 58, 63, 73, 88, 94, 98, 3, 27, 34, 40, 97, 3, 26, 28, 34, 40, 86, 92, 97, 2, 6, 29, 31, 32, 35, 42, 55, 59, 71, 73, 98, 15, 30, 32, 46, 53, 60, 7, 29, 31, 34, 42, 61, 73, 75, 76, 79, 80, 81, 0, 1, 29, 30, 32, 36, 40, 47, 52, 60, 65, 68, 81, 84, 88, 93, 95, 10, 22, 33, 52, 67, 68, 96, 3, 24, 27, 28, 31, 34, 39, 48, 69, 75, 97, 99, 6, 8, 16, 20, 29, 35, 38, 65, 69, 70, 73, 77, 86, 0, 2, 16, 18, 22, 24, 32, 36, 37, 73, 79, 83, 91, 93, 9, 10, 14, 36, 37, 40, 55, 60, 76, 78, 80, 89, 6, 13, 35, 38, 59, 65, 73, 77, 78, 84, 95, 0, 4, 7, 8, 34, 39, 44, 50, 62, 74, 79, 83, 91, 92, 15, 24, 27, 28, 32, 37, 40, 41, 44, 51, 56, 57, 64, 69, 77, 90, 93, 95, 98, 9, 18, 26, 40, 41, 43, 52, 56, 80, 81, 85, 97, 10, 21, 29, 31, 42, 49, 62, 78, 83, 93, 94, 0, 2, 8, 20, 41, 43, 68, 78, 85, 0, 19, 39, 40, 44, 51, 53, 56, 65, 68, 97, 22, 24, 45, 75, 80, 83, 92, 30, 46, 47, 53, 54, 55, 65, 69, 72, 76, 91, 92, 95, 97, 9, 18, 20, 32, 46, 47, 52, 66, 72, 79, 80, 83, 91, 10, 14, 23, 34, 48, 54, 61, 78, 79, 90, 94, 97, 42, 49, 74, 75, 79, 83, 88, 2, 4, 39, 50, 57, 73, 95, 1, 6, 18, 40, 44, 51, 56, 61, 23, 32, 33, 41, 47, 52, 86, 91, 9, 30, 44, 46, 53, 57, 60, 70, 74, 79, 82, 89, 90, 13, 46, 48, 54, 63, 76, 82, 86, 87, 21, 23, 29, 37, 46, 55, 58, 85, 91, 95, 26, 40, 41, 44, 51, 56, 61, 71, 74, 77, 88, 92, 2, 9, 16, 24, 40, 50, 53, 57, 60, 71, 77, 88, 96, 7, 15, 26, 55, 58, 62, 66, 77, 78, 85, 90, 96, 6, 17, 29, 38, 59, 92, 93, 8, 9, 20, 23, 24, 30, 32, 37, 53, 57, 60, 64, 80, 84, 86, 87, 93, 94, 96, 0, 19, 21, 31, 48, 51, 56, 61, 72, 79, 98, 6, 8, 9, 39, 42, 58, 62, 64, 75, 82, 83, 90, 95, 11, 26, 54, 63, 64, 84, 88, 23, 25, 40, 60, 62, 63, 64, 78, 85, 18, 19, 21, 32, 35, 38, 44, 46, 65, 67, 69, 71, 72, 97, 2, 47, 58, 66, 79, 93, 6, 11, 33, 65, 67, 1, 32, 33, 43, 44, 68, 90, 96, 11, 34, 35, 40, 46, 65, 69, 83, 88, 90, 2, 6, 10, 35, 53, 70, 71, 74, 88, 92, 95, 98, 99, 0, 25, 29, 56, 57, 65, 70, 71, 94, 99, 8, 19, 21, 23, 46, 47, 61, 65, 72, 74, 81, 86, 87, 93, 26, 29, 31, 35, 36, 38, 50, 73, 2, 15, 39, 49, 53, 56, 70, 72, 74, 99, 0, 3, 8, 22, 31, 34, 45, 49, 62, 75, 91, 19, 31, 37, 46, 54, 76, 77, 78, 91, 99, 5, 35, 38, 40, 56, 57, 58, 76, 77, 81, 91, 6, 8, 37, 38, 42, 43, 48, 58, 64, 76, 78, 79, 82, 84, 98, 0, 4, 23, 31, 36, 39, 47, 48, 49, 53, 61, 66, 78, 79, 90, 93, 2, 12, 31, 37, 41, 45, 47, 60, 80, 88, 1, 2, 3, 15, 31, 32, 41, 72, 77, 81, 96, 2, 13, 53, 54, 62, 78, 82, 83, 86, 94, 1, 18, 36, 39, 42, 45, 47, 49, 62, 69, 82, 83, 88, 93, 3, 19, 32, 38, 60, 63, 78, 84, 89, 97, 1, 3, 41, 43, 55, 58, 64, 85, 89, 91, 92, 95, 96, 99, 28, 35, 52, 54, 60, 72, 82, 86, 98, 8, 54, 60, 72, 87, 94, 2, 6, 22, 26, 32, 49, 56, 57, 63, 69, 70, 80, 83, 88, 91, 21, 23, 24, 37, 53, 84, 85, 89, 15, 40, 48, 53, 58, 62, 68, 69, 79, 90, 10, 36, 39, 46, 47, 52, 55, 75, 76, 77, 85, 88, 91, 4, 9, 28, 39, 45, 46, 56, 59, 70, 85, 92, 0, 11, 32, 36, 40, 42, 59, 60, 66, 72, 79, 83, 93, 7, 9, 26, 42, 48, 60, 71, 82, 87, 94, 98, 0, 1, 11, 15, 32, 38, 40, 46, 50, 55, 62, 70, 85, 95, 3, 33, 57, 58, 60, 68, 81, 85, 96, 97, 13, 24, 27, 28, 34, 41, 44, 46, 48, 65, 84, 96, 97, 99, 4, 19, 25, 26, 29, 40, 61, 70, 78, 86, 94, 98, 9, 10, 18, 34, 70, 71, 74, 76, 85, 97, 99] 6 | x: [100.0, 0.131486, 0.244797, 0.130065, 0.377212, 0.131901, 0.289852, 0.426516, 0.200904, 0.037983, 0.39626, 0.410597, 0.324558, 0.273504, 0.223392, 0.114378, 100.0, 0.261796, 0.05352, 0.067026, 0.360614, 0.438951, 0.452361, 0.308833, 0.214187, 100.071445, 0.074933, 0.405475, 0.360172, 0.145992, 0.099059, 0.257119, 0.350549, 0.427363, 0.029812, 0.188136, 0.455759, 0.14522, 0.215903, 0.13264, 0.111078, 100.0, 0.159037, 0.02712, 0.228712, 0.125153, 0.338061, 0.341682, 0.315671, 0.354641, 0.28837, 0.416458, 0.159037, 100.0, 0.378375, 0.054849, 0.352721, 0.197354, 0.303912, 0.397819, 0.017491, 0.131486, 100.0, 0.212429, 0.39481, 0.465601, 0.02712, 100.0, 0.326906, 0.207261, 0.318653, 0.298606, 0.08945, 0.49417, 0.315535, 0.234546, 0.169049, 0.486031, 0.143988, 0.310531, 0.326906, 100.0, 0.310028, 0.247533, 0.370422, 0.46343, 0.181469, 0.353358, 0.074933, 100.0, 0.077185, 0.467865, 0.004148, 0.34078, 0.056858, 0.170197, 0.225168, 0.086531, 0.477863, 0.195381, 0.077185, 100.0, 0.362888, 0.360131, 0.225819, 0.329774, 0.0156, 0.174524, 0.108901, 0.031926, 0.444474, 0.00874, 0.391436, 0.362888, 100.0, 0.427673, 0.270759, 0.195427, 0.405801, 0.406772, 0.093624, 0.140754, 0.072268, 0.244797, 100.0, 0.486426, 0.237786, 0.634944, 0.090853, 0.436276, 0.334232, 0.405475, 0.378375, 100.0, 0.278347, 0.074438, 0.33214, 0.26266, 0.310028, 0.278347, 100.0, 0.039035, 0.431934, 0.419849, 0.195088, 0.130065, 0.212429, 0.207261, 0.247533, 100.0, 0.087446, 0.433759, 0.201217, 100.0, 0.228654, 0.186924, 0.058059, 0.170822, 0.083126, 0.330929, 0.160471, 0.068578, 0.037235, 0.539319, 100.0, 0.272209, 0.29351, 0.206943, 0.019592, 0.054849, 0.074438, 100.334329, 0.298324, 0.271407, 0.155555, 0.013997, 0.377212, 0.228654, 0.298324, 100.0, 0.427463, 0.304901, 0.217658, 0.44745, 0.162162, 0.092007, 0.276286, 0.372434, 0.087446, 100.0, 0.049169, 0.006378, 0.319472, 0.424861, 0.162834, 0.219789, 0.122883, 0.096203, 0.360172, 0.186924, 100.0, 0.325999, 0.450286, 0.065428, 0.122054, 100.0, 0.351155, 0.121842, 0.018213, 0.154575, 0.307644, 0.057015, 0.058059, 0.427463, 100.0, 0.34336, 0.295792, 0.429149, 0.367155, 0.400234, 0.205711, 0.427673, 0.34336, 100.0, 0.41528, 0.1885, 0.068927, 0.28229, 0.110847, 0.327657, 0.385743, 0.074532, 0.261796, 0.271407, 100.0, 0.428328, 0.139914, 0.293786, 0.373092, 0.243715, 0.449761, 0.496858, 0.069879, 0.089011, 0.39481, 0.486426, 0.049169, 100.0, 0.088897, 0.172014, 0.21432, 0.078347, 0.33214, 0.272209, 0.155555, 0.428328, 0.088897, 100.0, 0.06272, 0.023267, 0.219537, 0.002168, 0.452461, 0.060089, 0.437707, 0.335582, 0.252405, 0.228712, 100.0, 0.461357, 0.18703, 0.424841, 0.125153, 0.06272, 100.88522, 0.456591, 0.042499, 0.072263, 0.113267, 0.409334, 0.145992, 0.318653, 100.0, 0.060131, 0.117463, 0.259958, 0.185689, 0.339759, 0.208383, 0.201182, 0.35029, 0.185992, 0.170822, 100.0, 0.019511, 0.131833, 0.081238, 0.206037, 0.370422, 0.060131, 100.0, 0.107588, 0.441719, 0.377241, 0.43699, 0.03382, 0.104644, 0.260425, 0.273878, 0.421194, 0.131901, 0.05352, 0.117463, 0.019511, 100.0, 0.466152, 0.407213, 0.469643, 0.289797, 0.116545, 0.629285, 0.476264, 0.062507, 0.303676, 0.118065, 0.420926, 0.017346, 0.270759, 0.295792, 100.0, 0.160122, 0.328852, 0.389945, 0.067573, 0.338061, 0.139914, 0.461357, 0.456591, 0.107588, 100.0, 0.396078, 0.12481, 0.200441, 0.123018, 0.384122, 0.47479, 0.298606, 0.467865, 0.29351, 0.325999, 0.259958, 100.0, 0.087059, 0.452307, 0.345856, 0.440228, 0.241337, 0.400811, 0.00247, 0.289852, 0.099059, 0.206943, 0.304901, 0.429149, 0.293786, 0.466152, 100.0, 0.43661, 0.12182, 0.059488, 0.234572, 0.317276, 0.124399, 0.360131, 0.195427, 0.433759, 0.43661, 100.0, 0.40414, 0.199374, 0.167991, 0.038671, 0.290309, 0.40266, 0.057201, 0.08945, 0.039035, 0.087059, 100.0, 0.261157, 0.309428, 0.040173, 0.485518, 0.108324, 0.18858, 0.019802, 0.426516, 0.352721, 0.46343, 0.004148, 0.396078, 100.0, 0.312902, 0.297091, 0.186218, 0.025794, 0.165645, 0.433868, 0.444879, 0.353096, 0.083126, 0.373092, 0.18703, 0.042499, 0.407213, 0.40414, 100.0, 0.249863, 0.01414, 0.420888, 0.324144, 0.49276, 0.325535, 0.326458, 0.026952, 0.17136, 0.277224, 0.049181, 0.493979, 0.225819, 0.217658, 0.023267, 0.249863, 100.0, 0.443196, 0.373176, 0.001395, 0.387583, 0.287267, 0.162999, 0.075043, 0.405801, 0.351155, 0.185689, 0.441719, 100.0, 0.067373, 0.339232, 0.419081, 0.455593, 0.045435, 0.070012, 0.200904, 0.257119, 0.34078, 0.450286, 0.443196, 100.0, 0.282408, 0.197568, 0.265362, 0.037983, 0.006378, 0.312902, 0.01414, 100.0, 0.196549, 0.409217, 0.165437, 0.245557, 0.024571, 0.344145, 0.367155, 0.243715, 100.0, 0.048297, 0.325173, 0.381427, 0.060076, 0.131833, 100.0, 0.144818, 0.064507, 0.007114, 0.443206, 0.41048, 0.286137, 0.266268, 0.450562, 0.128346, 0.485165, 0.036695, 0.042476, 0.329774, 0.44745, 0.065428, 0.469643, 0.144818, 100.0, 0.261166, 0.054423, 0.108674, 0.764099, 0.465968, 0.267541, 0.292327, 0.406772, 0.201217, 0.41528, 0.12481, 100.0, 0.451928, 0.283126, 0.103454, 0.314854, 0.386086, 0.260092, 0.05595, 0.067373, 100.0, 0.251727, 0.384386, 0.379253, 0.258197, 0.315472, 0.350549, 0.197354, 0.297091, 100.0, 0.402284, 0.330605, 0.457199, 0.067026, 0.49417, 0.162162, 0.420888, 0.196549, 100.0, 0.454976, 0.658927, 0.1885, 0.289797, 0.160122, 0.373176, 0.261166, 100.0, 0.256978, 0.285512, 0.0156, 0.081238, 0.409217, 0.064507, 100.0, 0.324295, 0.431, 0.46763, 0.284129, 0.127558, 0.414276, 0.192764, 0.208211, 0.431934, 0.007114, 0.451928, 100.0, 0.437919, 0.383369, 0.076352, 0.192166, 0.271384, 0.121842, 0.068927, 0.339759, 0.199374, 0.443206, 100.0, 0.019507, 0.346459, 0.287795, 0.000737, 0.219537, 0.324144, 0.001395, 0.165437, 0.454976, 100.0, 0.167599, 0.091598, 0.493976, 0.189712, 0.092554, 0.217492, 0.427363, 0.174524, 0.019592, 0.449761, 0.49276, 0.402284, 0.324295, 100.0, 0.28993, 0.342575, 0.318186, 0.242686, 0.137731, 0.181469, 0.330929, 0.002168, 0.019507, 100.0, 0.381788, 0.317099, 0.429013, 0.331863, 0.320452, 0.004989, 0.496443, 0.315535, 0.013997, 0.208383, 0.261157, 100.0, 0.222283, 0.257267, 0.056858, 0.108901, 0.122054, 0.28229, 0.496858, 0.206037, 0.116545, 0.167991, 0.431, 0.28993, 100.0, 0.397396, 0.252308, 0.366183, 0.407617, 0.197206, 0.4442, 0.172457, 0.440842, 0.39626, 0.319472, 0.018213, 0.377241, 0.283126, 0.658927, 0.167599, 100.0, 0.219686, 0.186322, 0.136838, 0.234546, 0.170197, 0.031926, 0.186218, 0.339232, 0.381788, 100.0, 0.264613, 0.420361, 0.175341, 0.038914, 0.161878, 0.254157, 0.237786, 0.452461, 0.437919, 100.0, 0.338059, 0.073247, 0.412279, 0.110847, 0.172014, 0.325535, 0.397396, 0.264613, 0.338059, 100.0, 0.15164, 0.498949, 0.092007, 0.424861, 0.154575, 0.629285, 0.452307, 0.309428, 0.245557, 0.41048, 100.0, 0.469337, 0.021545, 0.210893, 0.083274, 0.295389, 0.029812, 0.054423, 0.317099, 100.0, 0.318717, 0.005088, 0.169049, 0.634944, 0.328852, 0.469337, 100.0, 0.360614, 0.476264, 0.389945, 0.282408, 0.024571, 100.0, 0.219599, 0.286205, 0.090853, 0.200441, 0.345856, 0.326458, 0.286137, 0.021545, 100.0, 0.293975, 0.073737, 0.099372, 0.188136, 0.486031, 0.093624, 0.440228, 0.46763, 100.0, 0.001532, 0.336008, 0.420503, 0.217143, 0.49008, 0.443163, 0.450769, 0.410597, 0.21432, 0.201182, 0.091598, 0.342575, 0.210893, 0.001532, 100.0, 0.322832, 0.38313, 0.225168, 0.162834, 0.307644, 0.327657, 0.266268, 0.108674, 0.219686, 0.083274, 100.0, 0.395294, 0.329727, 0.153206, 0.095915, 0.110133, 0.060089, 0.35029, 0.43699, 0.241337, 0.12182, 0.040173, 0.330605, 100.0, 0.455759, 0.160471, 0.025794, 0.251727, 0.284129, 0.493976, 0.336008, 0.395294, 100.0, 0.064809, 0.324558, 0.341682, 0.086531, 0.400234, 0.03382, 0.123018, 0.048297, 0.384386, 0.420361, 100.0, 0.064362, 0.219789, 0.104644, 0.038671, 0.450562, 0.383369, 100.0, 0.067305, 0.017768, 0.05002, 0.045121, 0.465601, 0.400811, 0.485518, 0.026952, 0.189712, 0.318186, 0.429013, 0.067305, 100.0, 0.200903, 0.439367, 0.143988, 0.477863, 0.290309, 0.108324, 0.419081, 0.197568, 0.103454, 0.331863, 0.15164, 0.017768, 100.0, 0.367165, 0.310942, 0.023573, 0.006929, 0.273504, 0.303912, 0.385743, 0.260425, 0.059488, 0.165645, 0.764099, 0.314854, 0.379253, 0.127558, 0.186322, 0.318717, 0.367165, 100.0, 0.464265, 0.001589, 0.14522, 0.26266, 0.273878, 0.40266, 0.387583, 0.325173, 0.465968, 0.252308, 100.0, 0.204055, 0.438951, 0.215903, 0.315671, 0.068578, 0.421194, 0.062507, 0.287267, 0.329727, 0.200903, 100.0, 0.014459, 0.13264, 0.419849, 0.414276, 0.076352, 0.175341, 0.310942, 100.0, 0.331028, 0.338926, 0.412317, 0.452361, 0.276286, 0.234572, 0.433868, 0.455593, 0.381427, 0.267541, 0.258197, 0.038914, 0.293975, 0.331028, 100.0, 0.060921, 0.284107, 0.354641, 0.122883, 0.303676, 0.18858, 0.366183, 0.073247, 0.023573, 100.0, 0.318885, 0.300588, 0.308833, 0.28837, 0.162999, 0.265362, 0.346459, 0.320452, 0.498949, 100.0, 0.119596, 0.201188, 0.143452, 0.463108, 0.24427, 0.423299, 0.072263, 0.00247, 0.256978, 0.192166, 0.407617, 0.153206, 0.338926, 100.0, 0.055399, 0.195381, 0.271384, 0.197206, 0.095915, 100.0, 0.26546, 0.111078, 0.310531, 0.205711, 0.437707, 0.118065, 0.315472, 0.092554, 0.242686, 0.412279, 0.073737, 0.420503, 0.204055, 0.060921, 100.0, 0.249608, 0.057015, 0.074532, 0.069879, 0.057201, 0.192764, 0.318885, 0.119596, 100.0, 0.037235, 0.17136, 0.386086, 0.208211, 0.004989, 0.161878, 0.219599, 0.099372, 0.464265, 100.0, 0.140754, 0.317276, 0.444879, 0.128346, 0.292327, 0.285512, 0.287795, 0.064362, 0.05002, 0.439367, 0.201188, 0.249608, 100.0, 0.397819, 0.444474, 0.113267, 0.353096, 0.060076, 0.485165, 0.217492, 0.222283, 0.217143, 0.143452, 100.0, 0.223392, 0.436276, 0.420926, 0.124399, 0.277224, 0.045435, 0.257267, 0.4442, 0.005088, 0.110133, 0.001589, 0.284107, 100.0, 0.353358, 0.00874, 0.335582, 0.070012, 0.260092, 0.172457, 0.322832, 0.412317, 0.26546, 100.0, 0.259136, 0.114378, 0.214187, 0.334232, 0.539319, 0.017346, 0.019802, 0.049181, 0.036695, 0.457199, 0.000737, 0.254157, 0.49008, 0.463108, 100.0, 0.416458, 0.067573, 0.137731, 0.496443, 0.440842, 0.286205, 0.014459, 0.24427, 100.0, 0.105494, 0.195088, 0.089011, 0.424841, 0.409334, 0.384122, 0.075043, 0.344145, 0.042476, 0.05595, 0.295389, 0.300588, 0.105494, 100.0, 0.470528, 0.017491, 0.096203, 0.078347, 0.252405, 0.185992, 0.493979, 0.136838, 0.443163, 0.006929, 0.055399, 0.259136, 100.0, 0.391436, 0.072268, 0.372434, 0.47479, 0.450769, 0.38313, 0.064809, 0.045121, 0.423299, 0.470528, 100.0] 7 | -------------------------------------------------------------------------------- /tests/assets/lusol_3.sprs: -------------------------------------------------------------------------------- 1 | nzmax: 1595 2 | m: 40 3 | n: 40 4 | p: [0, 40, 80, 119, 159, 199, 239, 279, 319, 359, 399, 439, 479, 519, 559, 599, 639, 679, 719, 759, 799, 838, 878, 918, 958, 998, 1038, 1076, 1116, 1156, 1196, 1236, 1276, 1316, 1356, 1396, 1436, 1476, 1516, 1555, 1595] 5 | i: [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 21, 22, 23, 24, 25, 26, 27, 28, 29, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39] 6 | x: [0.21, 0.4, 0.91, 0.58, 0.07, 0.6, 0.96, 0.45, 0.07, 0.2, 0.87, 0.37, 0.1, 0.84, 0.9, 0.45, 0.08, 0.44, 0.99, 0.95, 0.05, 0.78, 0.63, 0.76, 0.58, 0.19, 0.75, 0.31, 0.17, 0.6, 0.15, 0.66, 0.87, 0.36, 0.68, 0.36, 0.18, 0.45, 0.42, 0.01, 0.87, 0.21, 0.88, 0.27, 0.9, 0.91, 0.89, 0.27, 0.54, 0.28, 0.96, 0.38, 0.74, 0.44, 0.47, 0.4, 0.55, 0.46, 0.46, 0.7, 0.63, 0.94, 0.45, 0.74, 0.59, 0.44, 0.72, 0.7, 0.41, 0.05, 0.29, 0.97, 0.13, 0.04, 0.55, 0.83, 0.17, 0.98, 0.86, 0.03, 0.12, 0.03, 0.89, 0.36, 0.47, 0.15, 0.53, 0.15, 0.43, 0.13, 0.03, 0.27, 0.37, 0.86, 0.91, 0.55, 0.67, 0.64, 0.81, 0.54, 0.02, 0.55, 0.88, 0.67, 0.58, 0.51, 0.35, 0.52, 0.44, 0.09, 0.52, 0.39, 0.75, 0.47, 0.38, 0.96, 0.5, 0.57, 0.6, 0.73, 0.68, 0.73, 0.41, 0.17, 0.29, 0.9, 0.75, 0.74, 0.58, 0.23, 0.11, 0.97, 0.37, 0.4, 0.52, 0.68, 0.13, 0.88, 0.29, 0.28, 0.23, 0.32, 0.34, 0.45, 0.05, 0.49, 0.26, 0.85, 0.17, 0.81, 0.29, 0.36, 0.08, 0.35, 0.65, 0.11, 0.32, 0.8, 0.14, 0.83, 0.95, 0.94, 0.31, 0.76, 0.99, 0.22, 0.75, 0.03, 0.63, 0.29, 0.42, 0.4, 0.14, 0.47, 0.84, 0.87, 0.93, 0.4, 0.99, 0.64, 0.19, 0.2, 0.75, 0.65, 0.6, 0.66, 0.37, 0.28, 0.69, 0.86, 0.33, 0.62, 0.2, 0.61, 0.27, 0.94, 0.44, 0.91, 0.61, 0.35, 0.88, 0.76, 0.45, 0.43, 0.74, 0.3, 0.5, 0.42, 0.51, 0.1, 0.17, 0.52, 0.23, 0.26, 0.12, 0.78, 0.12, 0.06, 0.79, 0.85, 0.05, 0.51, 0.82, 0.02, 0.89, 0.85, 0.33, 0.08, 0.01, 0.94, 0.48, 0.82, 0.56, 0.22, 0.75, 0.85, 0.91, 0.09, 0.75, 0.01, 0.37, 0.42, 0.47, 0.15, 0.54, 0.2, 0.36, 0.59, 0.44, 0.78, 0.24, 0.14, 0.83, 0.36, 0.67, 0.69, 0.61, 0.87, 0.58, 0.41, 0.43, 0.85, 0.95, 0.6, 0.89, 0.56, 0.1, 0.33, 0.51, 0.15, 0.01, 0.83, 0.84, 0.49, 0.33, 0.6, 0.49, 0.67, 0.29, 0.02, 0.46, 0.98, 0.13, 0.23, 0.37, 0.81, 0.82, 0.18, 0.4, 0.99, 0.08, 0.44, 0.19, 0.51, 0.19, 0.4, 0.8, 0.59, 0.6, 0.86, 0.84, 0.81, 0.24, 0.58, 0.19, 0.69, 0.56, 0.65, 0.28, 0.51, 0.87, 0.99, 0.27, 0.42, 0.9, 0.12, 0.96, 0.96, 0.39, 0.99, 0.67, 0.79, 0.95, 0.37, 0.27, 0.76, 0.07, 0.13, 0.52, 0.79, 0.96, 0.56, 0.64, 0.14, 0.3, 0.62, 0.17, 0.4, 0.98, 0.53, 0.51, 0.81, 0.16, 0.62, 0.03, 0.58, 0.66, 0.72, 0.21, 0.52, 0.79, 0.89, 0.17, 0.47, 0.65, 0.98, 0.46, 0.46, 0.9, 0.93, 0.06, 0.82, 0.83, 0.4, 0.86, 0.61, 0.94, 0.8, 0.32, 0.12, 0.9, 0.82, 0.58, 0.05, 0.76, 0.81, 0.82, 0.56, 0.66, 0.19, 0.57, 0.23, 0.34, 0.91, 0.53, 0.82, 0.68, 0.47, 0.61, 0.18, 0.31, 0.43, 0.74, 0.34, 0.76, 0.8, 0.97, 0.81, 0.45, 0.12, 0.64, 0.59, 0.69, 0.11, 0.68, 0.85, 0.1, 0.51, 0.85, 0.37, 0.77, 0.01, 0.42, 0.8, 0.31, 0.55, 0.69, 0.74, 0.35, 0.33, 0.14, 0.86, 0.75, 0.52, 0.21, 0.5, 0.03, 0.7, 0.55, 0.27, 0.46, 0.61, 0.92, 0.65, 0.1, 0.6, 0.93, 0.81, 0.18, 0.22, 0.03, 0.15, 0.46, 0.58, 0.11, 0.24, 0.66, 0.32, 0.97, 0.63, 0.38, 0.45, 0.49, 0.58, 0.84, 0.61, 0.76, 0.4, 0.36, 0.34, 0.19, 0.14, 0.79, 0.8, 0.7, 0.43, 0.28, 0.53, 0.09, 0.53, 0.14, 0.25, 0.1, 0.36, 0.4, 0.14, 0.8, 0.43, 0.98, 0.7, 0.99, 0.59, 0.33, 0.42, 0.76, 0.48, 0.89, 0.19, 0.7, 0.35, 0.42, 0.22, 0.73, 0.89, 0.12, 0.04, 0.02, 0.46, 0.87, 0.29, 0.32, 0.22, 0.13, 0.99, 0.29, 0.02, 0.29, 0.96, 0.54, 0.95, 0.78, 0.05, 0.85, 0.64, 0.9, 0.01, 0.11, 0.71, 0.26, 0.55, 0.75, 0.28, 0.57, 0.22, 0.14, 0.18, 0.61, 0.06, 0.94, 0.69, 0.9, 0.26, 1.0, 0.57, 0.75, 0.33, 0.24, 0.61, 0.35, 0.14, 0.61, 0.69, 0.06, 0.06, 0.3, 0.75, 0.41, 0.13, 0.55, 0.95, 0.25, 0.35, 0.56, 0.65, 0.11, 0.54, 0.43, 1.0, 0.97, 0.12, 0.16, 0.46, 0.57, 0.62, 0.79, 0.96, 0.53, 0.26, 0.08, 0.14, 0.15, 0.08, 0.78, 0.25, 0.04, 0.36, 0.38, 0.74, 0.17, 0.24, 0.14, 0.93, 0.04, 0.52, 0.16, 0.77, 0.02, 0.81, 0.57, 0.09, 0.85, 0.19, 0.16, 0.91, 0.9, 0.71, 0.5, 0.47, 0.3, 0.66, 0.25, 0.73, 0.44, 0.01, 0.83, 0.69, 0.36, 0.75, 0.81, 0.68, 0.43, 0.2, 0.27, 0.09, 0.77, 0.42, 0.29, 0.09, 0.41, 0.78, 0.36, 0.95, 0.05, 0.41, 0.03, 0.45, 0.47, 0.42, 0.54, 0.63, 0.48, 0.25, 0.74, 0.88, 0.88, 0.92, 0.51, 0.42, 0.79, 0.36, 0.28, 0.25, 0.93, 0.64, 0.36, 0.12, 0.53, 0.57, 0.48, 0.73, 0.98, 0.32, 0.59, 0.74, 0.79, 0.11, 0.26, 0.9, 0.94, 0.62, 0.14, 0.58, 0.2, 0.22, 0.88, 0.99, 0.26, 0.21, 0.29, 0.9, 0.77, 0.18, 0.67, 0.72, 0.86, 0.69, 0.77, 0.11, 0.3, 0.8, 0.39, 0.94, 0.51, 0.46, 0.42, 0.93, 0.31, 0.93, 0.52, 0.35, 0.37, 0.29, 0.82, 0.22, 0.1, 0.28, 0.86, 0.9, 0.78, 0.16, 0.04, 0.54, 0.86, 0.24, 0.66, 0.08, 0.61, 0.9, 0.74, 0.58, 0.44, 0.74, 0.96, 0.02, 0.79, 0.45, 0.94, 0.97, 0.02, 0.53, 0.62, 0.2, 0.11, 0.15, 0.74, 0.92, 0.44, 0.1, 0.61, 0.75, 0.49, 0.99, 0.57, 0.08, 0.56, 0.33, 0.55, 1.0, 0.14, 0.52, 0.15, 0.31, 0.2, 0.56, 0.68, 0.23, 0.74, 0.37, 0.25, 0.94, 0.15, 0.8, 0.29, 0.51, 0.41, 0.21, 0.9, 0.51, 0.02, 0.98, 0.21, 0.89, 0.22, 0.98, 0.3, 0.9, 0.24, 0.4, 0.89, 0.29, 0.53, 0.42, 0.85, 0.69, 0.18, 0.26, 0.69, 0.73, 0.5, 0.15, 0.27, 0.21, 0.9, 0.62, 0.9, 0.93, 0.89, 0.16, 0.62, 0.85, 0.45, 0.5, 0.6, 0.16, 0.01, 0.78, 0.17, 0.42, 0.59, 0.06, 0.08, 0.99, 0.86, 0.11, 0.9, 0.79, 0.21, 0.04, 0.44, 0.57, 0.93, 0.83, 0.77, 0.86, 0.15, 0.46, 0.07, 0.69, 0.04, 0.04, 0.37, 0.66, 0.58, 0.08, 0.55, 0.89, 0.28, 0.15, 0.42, 0.12, 0.84, 0.15, 0.4, 0.69, 0.08, 0.23, 0.57, 0.5, 0.34, 0.71, 0.62, 0.02, 0.1, 0.71, 0.21, 0.39, 0.54, 0.29, 0.46, 0.34, 0.64, 0.82, 0.21, 0.1, 0.4, 0.98, 0.47, 0.06, 0.26, 0.97, 0.51, 0.02, 0.56, 0.94, 0.52, 0.44, 0.15, 0.78, 0.57, 0.91, 0.56, 0.5, 0.67, 0.48, 0.19, 0.69, 0.74, 0.78, 0.24, 0.39, 0.62, 0.99, 0.46, 0.67, 0.23, 0.48, 0.53, 0.59, 0.28, 0.6, 0.17, 0.41, 0.96, 0.36, 0.44, 0.51, 0.36, 0.96, 0.83, 0.53, 0.13, 0.53, 0.82, 0.73, 0.78, 0.81, 0.89, 0.47, 0.74, 0.23, 0.75, 0.26, 0.66, 0.44, 0.1, 0.14, 0.11, 0.68, 0.49, 0.2, 0.52, 0.16, 0.85, 0.01, 0.54, 0.14, 0.91, 0.71, 0.22, 0.46, 0.36, 0.22, 0.4, 0.6, 0.06, 0.88, 0.1, 0.52, 0.3, 0.84, 0.44, 0.9, 0.33, 0.52, 0.14, 0.07, 0.75, 0.23, 0.33, 0.17, 0.2, 0.2, 0.77, 0.96, 0.03, 0.65, 0.73, 0.3, 0.7, 0.09, 0.06, 0.19, 0.96, 0.15, 0.13, 0.57, 0.31, 0.17, 0.87, 0.06, 0.23, 0.56, 0.21, 0.28, 0.06, 0.68, 0.86, 0.38, 0.21, 0.41, 0.04, 0.38, 0.73, 0.54, 0.99, 0.36, 0.95, 0.98, 0.27, 0.57, 0.75, 0.04, 0.08, 0.54, 0.43, 0.51, 0.31, 0.59, 0.5, 0.72, 0.98, 0.22, 0.62, 0.78, 0.53, 0.56, 0.99, 0.98, 0.21, 0.12, 0.85, 0.48, 0.9, 0.96, 0.95, 0.42, 0.82, 0.54, 0.06, 0.34, 0.44, 0.26, 0.98, 0.28, 0.83, 0.96, 0.79, 0.36, 0.65, 0.51, 0.14, 0.7, 0.64, 0.9, 0.01, 0.57, 0.34, 0.63, 0.46, 0.26, 0.01, 0.81, 0.1, 0.24, 0.92, 0.93, 0.99, 0.44, 0.85, 0.37, 0.17, 0.07, 0.54, 0.51, 0.73, 0.39, 0.48, 0.82, 0.1, 0.98, 0.97, 0.71, 0.33, 0.44, 0.14, 0.2, 0.28, 0.06, 0.46, 0.94, 0.46, 0.83, 0.26, 0.66, 0.95, 1.0, 0.73, 0.01, 0.04, 0.05, 0.66, 0.1, 0.64, 0.38, 0.91, 0.92, 0.02, 0.78, 0.69, 0.19, 0.08, 0.29, 0.14, 0.51, 0.06, 0.81, 0.9, 0.8, 0.27, 0.87, 0.9, 0.54, 0.13, 0.78, 0.8, 0.72, 0.57, 0.69, 0.65, 0.91, 0.33, 0.17, 0.22, 0.2, 0.58, 0.42, 0.48, 0.9, 0.52, 0.67, 0.77, 0.96, 0.72, 0.87, 0.51, 0.82, 0.73, 0.16, 0.25, 0.74, 0.9, 0.25, 0.36, 0.76, 0.03, 0.83, 0.06, 0.54, 0.17, 0.91, 0.35, 0.3, 0.15, 0.26, 0.5, 0.72, 0.28, 0.19, 0.21, 0.33, 0.79, 0.31, 0.58, 0.83, 0.88, 0.69, 0.33, 0.61, 0.29, 0.1, 0.96, 0.79, 0.86, 0.38, 0.41, 0.68, 0.38, 0.79, 0.12, 0.69, 0.5, 0.63, 0.77, 0.83, 0.9, 0.84, 0.73, 0.64, 0.36, 0.49, 0.87, 0.68, 0.49, 0.56, 0.94, 0.28, 0.73, 0.47, 0.36, 0.84, 0.97, 0.11, 0.52, 0.31, 0.41, 0.1, 0.68, 0.16, 0.08, 0.01, 0.29, 0.82, 0.11, 0.53, 0.75, 0.44, 0.45, 0.11, 0.68, 0.64, 0.13, 0.02, 0.18, 0.46, 0.01, 0.18, 0.62, 0.66, 0.44, 0.88, 0.86, 0.64, 0.13, 0.69, 0.16, 0.21, 0.3, 0.62, 0.87, 0.18, 0.24, 0.2, 0.43, 0.26, 0.53, 0.86, 0.84, 0.14, 0.83, 0.09, 0.75, 0.4, 0.16, 0.07, 0.5, 0.17, 0.26, 0.64, 0.15, 0.66, 0.66, 0.63, 0.7, 0.81, 0.08, 0.76, 0.36, 0.96, 0.37, 0.16, 0.44, 0.55, 0.09, 0.5, 0.18, 0.13, 0.53, 0.9, 0.66, 0.55, 0.61, 0.77, 0.76, 0.07, 0.93, 0.56, 0.97, 0.88, 0.29, 0.33, 0.48, 0.07, 0.65, 0.78, 0.52, 0.12, 0.12, 0.47, 0.63, 0.47, 0.32, 0.14, 0.12, 0.1, 0.11, 0.27, 0.78, 0.5, 0.35, 0.58, 0.96, 0.68, 0.78, 0.45, 0.82, 0.17, 0.01, 0.94, 0.26, 0.13, 0.12, 1.0, 0.84, 0.16, 0.19, 0.43, 0.38, 0.31, 0.54, 0.28, 0.03, 0.65, 0.16, 0.43, 0.85, 0.92, 0.48, 0.9, 0.31, 0.81, 0.5, 0.2, 0.52, 0.07, 0.15, 0.88, 0.48, 0.92, 0.94, 0.56, 0.3, 0.3, 0.51, 0.11, 0.49, 0.33, 0.72, 0.72, 0.56, 0.08, 0.76, 0.47, 0.98, 0.83, 0.16, 0.36, 0.88, 0.03, 0.05, 0.49, 0.39, 0.92, 0.57, 0.68, 0.36, 0.9, 0.27, 0.27, 0.81, 0.37, 0.58, 0.11, 0.5, 0.18, 0.02, 0.06, 0.08, 0.56, 0.54, 0.98, 0.22, 1.0, 0.99, 0.08, 0.14, 0.4, 0.05, 0.5, 0.62, 0.06, 0.26, 0.68, 0.97, 0.78, 0.44, 0.98, 0.29, 0.78, 0.87, 0.25, 0.94, 0.48, 0.78, 0.97, 0.77, 0.01, 0.78, 0.88, 0.29, 0.56, 0.6, 0.53, 0.63, 0.74, 0.21, 0.95, 0.09, 0.33, 0.93, 0.87, 0.14, 0.66, 0.4, 0.84, 0.76, 0.55, 0.29, 0.79, 0.15, 0.38, 0.37, 0.5, 0.3, 0.34, 0.35, 0.59, 0.69, 0.36, 0.27, 0.76, 0.83, 0.08, 0.83, 0.68, 0.68, 0.09, 0.14, 0.82, 0.61, 0.89, 0.11, 0.27, 0.26, 0.82, 0.29, 0.09, 0.14, 0.02, 0.5, 0.64, 0.91, 0.24, 0.75, 0.69, 0.61, 0.72, 0.54, 0.99, 0.05, 0.57, 0.48, 0.86, 0.65, 0.69, 0.02, 0.9, 0.47, 0.77, 0.37, 0.83, 0.4, 0.77, 0.78, 0.65, 0.31, 0.56, 0.2, 0.08, 0.07, 0.12, 0.18, 0.48, 0.86, 0.45, 0.42, 0.77, 0.06, 0.15, 0.48, 0.46, 0.78, 0.67, 0.72, 0.66, 0.12, 0.52, 0.91, 0.49, 0.28, 0.36, 0.15, 0.35, 0.47, 0.06, 0.88, 0.03, 0.15, 0.63, 0.67, 0.96, 0.71, 0.68, 0.33, 0.08, 0.08, 0.64, 0.52, 0.39, 0.75, 0.15, 0.73, 0.93, 0.72, 0.13, 0.28, 0.61, 0.66, 0.99, 0.4, 0.45, 0.6, 0.23, 0.78, 0.16, 0.54, 0.08, 0.32, 0.75, 0.74, 0.61, 0.24, 0.54, 0.55, 0.87, 0.15, 0.05, 0.4, 0.26, 0.42, 0.88, 0.54, 0.34, 0.97, 0.11, 0.58, 0.82, 0.49, 0.75, 1.0, 0.84, 0.33, 0.59, 0.23, 0.27, 0.52, 0.61, 0.02, 0.11, 0.41, 0.88, 0.67, 0.92, 0.57, 0.11, 0.75, 0.95, 0.17, 0.18, 0.61, 0.3, 0.88, 0.98, 0.17, 0.9, 0.9] 7 | -------------------------------------------------------------------------------- /tests/assets/lusol_4.sprs: -------------------------------------------------------------------------------- 1 | nzmax: 581 2 | m: 40 3 | n: 40 4 | p: [0, 12, 28, 42, 50, 58, 72, 85, 97, 113, 124, 136, 156, 170, 188, 201, 219, 235, 254, 267, 283, 298, 317, 329, 342, 358, 371, 384, 400, 413, 426, 444, 456, 472, 489, 501, 517, 533, 550, 567, 581] 5 | i: [0, 3, 9, 11, 12, 13, 21, 24, 25, 28, 30, 31, 0, 5, 7, 8, 9, 10, 15, 19, 20, 22, 23, 27, 29, 31, 34, 37, 0, 3, 4, 8, 10, 12, 13, 14, 16, 19, 21, 23, 33, 38, 3, 4, 9, 13, 23, 29, 30, 37, 5, 12, 14, 23, 24, 26, 27, 28, 1, 3, 6, 10, 11, 12, 16, 17, 25, 26, 28, 32, 33, 37, 1, 7, 11, 13, 22, 23, 24, 28, 32, 34, 35, 36, 39, 5, 11, 12, 13, 14, 15, 16, 27, 30, 35, 36, 38, 1, 6, 9, 13, 15, 16, 17, 20, 23, 27, 28, 29, 30, 31, 32, 34, 1, 4, 5, 7, 8, 10, 11, 19, 21, 23, 31, 11, 12, 16, 18, 24, 26, 28, 32, 33, 35, 37, 39, 0, 1, 2, 4, 5, 8, 9, 10, 12, 13, 14, 17, 24, 25, 29, 30, 33, 34, 35, 37, 4, 7, 11, 13, 14, 20, 21, 22, 24, 26, 27, 34, 37, 39, 1, 2, 3, 5, 7, 12, 13, 17, 18, 19, 20, 24, 25, 26, 34, 35, 36, 38, 2, 3, 9, 10, 15, 17, 20, 27, 28, 31, 35, 36, 38, 1, 3, 5, 11, 12, 13, 14, 16, 17, 18, 20, 21, 24, 27, 33, 36, 37, 39, 0, 4, 6, 7, 8, 11, 12, 13, 16, 17, 20, 34, 35, 36, 37, 39, 0, 1, 2, 3, 4, 7, 8, 13, 14, 17, 19, 20, 23, 24, 29, 33, 34, 36, 38, 3, 5, 8, 15, 16, 18, 19, 20, 22, 24, 27, 31, 32, 1, 2, 5, 6, 8, 13, 15, 18, 21, 23, 24, 26, 27, 32, 36, 39, 0, 3, 4, 6, 7, 11, 14, 16, 19, 21, 22, 26, 27, 33, 38, 0, 1, 2, 5, 6, 7, 11, 13, 16, 18, 21, 23, 27, 29, 30, 34, 35, 37, 38, 1, 8, 9, 14, 15, 25, 26, 27, 29, 30, 38, 39, 6, 7, 17, 18, 19, 26, 27, 29, 30, 31, 32, 33, 39, 0, 1, 3, 11, 12, 17, 18, 22, 23, 25, 28, 29, 33, 36, 37, 39, 0, 5, 8, 17, 24, 25, 27, 29, 30, 33, 35, 36, 39, 6, 8, 12, 14, 19, 22, 24, 25, 29, 30, 31, 37, 39, 2, 6, 7, 9, 11, 13, 17, 19, 20, 22, 25, 26, 29, 32, 35, 38, 4, 5, 6, 9, 17, 19, 22, 23, 27, 31, 32, 36, 38, 7, 11, 12, 17, 19, 21, 22, 23, 25, 27, 31, 32, 38, 1, 5, 9, 12, 13, 15, 18, 19, 23, 28, 29, 32, 33, 35, 36, 37, 38, 39, 3, 5, 7, 9, 11, 14, 18, 19, 20, 22, 33, 37, 0, 4, 6, 7, 9, 10, 11, 12, 13, 14, 15, 18, 20, 23, 30, 37, 0, 2, 3, 4, 13, 15, 17, 18, 20, 24, 25, 27, 28, 29, 31, 33, 35, 2, 4, 7, 9, 11, 13, 18, 21, 22, 24, 30, 36, 3, 6, 8, 9, 10, 11, 14, 16, 19, 20, 21, 31, 34, 35, 36, 37, 0, 4, 6, 16, 17, 18, 22, 28, 31, 32, 33, 34, 35, 36, 37, 39, 1, 3, 9, 10, 12, 14, 18, 20, 22, 26, 28, 29, 31, 32, 33, 36, 38, 0, 6, 8, 11, 12, 18, 19, 21, 23, 24, 25, 26, 28, 29, 37, 38, 39, 1, 2, 3, 4, 8, 9, 11, 17, 20, 24, 25, 29, 32, 34] 6 | x: [-0.04479224889679645, -0.6512610742885001, 0.0913357477800647, -0.6458071719288341, 0.9539308592872766, -0.15051543036571902, 0.9655944594623886, 0.31902197755381567, 0.9605450212583309, 0.9820650193737133, -0.18768705588672074, 0.47806224280129017, 0.2972047185507001, 0.16573539898603706, 0.352469677663793, 0.41283638398011613, 0.19417955694107336, 0.8642272299604892, 0.7068083792044746, -0.14644508150076807, -0.10721096222485627, 0.3148561340388152, 0.16118452706302278, -0.6126020223018258, 0.3078505651776573, -0.10270330734707822, -0.2726538627811128, 0.12742304338708954, -0.4993421100557778, 0.09697186920543022, 0.8900480209891559, -0.469805584987669, -0.1984481610826503, -0.9955498479793876, 0.39018808489285095, 0.5253229612096426, -0.1273332902792219, 0.8662845030772217, 0.8450371718188663, 0.9923262217962225, 0.6716429195615166, -0.041627753068085305, 0.4674981882470681, 0.2731914019206083, 0.43147741189597966, 0.21813920532758013, -0.4056134005321479, 0.06309879342696778, -0.2512370440423657, -0.7084451513547307, 0.9446150927339365, 0.9323025544097576, -0.9645424747835705, 0.4629476253599518, 0.38359809413060675, 0.6236826080573694, 0.4495531668492583, 0.956251923796613, -0.6463240777952555, 0.7207703043219116, 0.5888311630660665, 0.6100217462761386, -0.728708733239541, -0.581566016578535, -0.2523698811227806, -0.909281205919543, -0.7357810033217809, -0.5409208389318592, 0.9689477780474534, -0.7399884622384456, 0.6747635652529471, -0.04052171138085181, -0.12175826708377535, 0.871301063174063, -0.20373905410733695, 0.8989932797591087, 0.3512328167273413, 0.3970991946840494, -0.053392471355655946, 0.534587328845344, 0.5618945341081809, 0.20292859997123713, 0.024228036785728824, -0.8002943584302662, 0.07697793035969935, 0.2539569882276058, -0.6239837073577941, -0.8488458693032166, -0.4058964067108666, -0.32480926354717754, 0.5839114375418941, -0.036083993041210016, 0.8688325676035538, -0.5133858344501212, -0.132825359759432, -0.18895232411042961, -0.45292729134233567, 0.47526029580624973, -0.5415078009581318, 0.7277271647662675, -0.5409915835394701, 0.9883001675044636, 0.722281341890723, -0.4014701471240365, 0.464893711879806, -0.24257487640067432, -0.2305522001940139, 0.9553575394981262, -0.7911305795679777, -0.8177407079955201, 0.8959132179222431, 0.7521324672907792, 0.12061151119888258, 0.21194924795160275, 0.8261263904289713, 0.22132878589572758, 0.6523060315728082, 0.2599696903039239, -0.2852013833246285, -0.2888144699554456, 0.1908905007398669, -0.8734034836329403, 0.8657928794971319, -0.581564974335925, 0.4432849597638908, 0.5804471961904603, 0.1497551584612853, 0.8622549641181811, 0.24053903889199013, 0.3092925967672724, 0.6803019121981808, -0.7764367154848686, -0.16870572334043454, -0.47836585494583117, -0.2208142621287814, -0.817399764741924, -0.13171830709125532, -0.17794130237300876, 0.7735184367526247, 0.9004722031329604, 0.7938593584565312, 0.6336359227605233, -0.5651199343800646, -0.22125191122480126, 0.07983925416470194, -0.3093470701471812, 0.04617857465088426, -0.054039481853081384, -0.49804078860297674, 0.12272709019120365, -0.9761494667469497, 0.31104096031140904, -0.16407957721293798, 0.2766324444557682, 0.15858213365831086, -0.34749423268322466, 0.005310069560848785, -0.5552944317900426, -0.3154127509311464, -0.8495760749707921, 0.37174127455876094, -0.8486946969155931, 0.7485081743194466, 0.22749293738379217, 0.44339989979836614, -0.24386417209057787, -0.8475248848324282, -0.35578598147475815, -0.6203358054114232, 0.09928374629772252, 0.41236060231433735, 0.7777574078669096, -0.9653020587589625, 0.5651823500866993, 0.3563327013717872, 0.7900974911743632, 0.40015206195370334, 0.8271205347491726, 0.4093002244387891, -0.2840331117295596, -0.10453764352034733, -0.8845878726952945, 0.5573049409237281, -0.2782889252020586, 0.6783741464083357, 0.902721647046316, -0.48420613373634214, -0.8093228095320528, -0.5606169868422328, -0.45873485774914347, -0.06489501882111215, -0.9381451644430028, -0.7230319708324857, 0.8197796517941167, 0.43558727973666134, 0.1832682296314041, 0.014999014414478262, -0.20013931512497996, -0.9590207450211776, -0.8713446746128943, 0.23599536532673326, -0.7554921009655757, 0.015481592277492462, -0.7016012301921264, -0.9060637856767046, 0.25705016127614533, 0.2508052554113773, 0.6271961653440661, 0.9508519461575937, 0.472563842390638, 0.7393101914944502, 0.9018262390322893, 0.5896080947451423, 0.141098500247689, 0.5185201873470828, -0.3856567455176103, -0.6832862844563787, -0.7135562172004488, -0.1793129437697012, -0.21850333450684634, -0.8847425105746216, 0.4958703119924728, 0.7918469040363043, 0.6492352756009623, -0.06673086374007609, -0.45618027916947246, 0.5200114180663018, 0.6840429318828487, -0.08358395374481287, -0.020803657518410512, 0.6686247297035965, -0.9398937677989441, 0.7277673510910114, -0.5117071352754003, 0.5734758856262518, 0.4853714634717172, -0.8331652336693589, 0.6643647547385383, 0.7905581458513724, -0.9148159785409917, 0.6307425428900839, -0.7942485884833455, 0.526700672109595, 0.5491042746142174, -0.7988767390456228, 0.2534132449240456, 0.4375468870167125, -0.015099678793022875, -0.19837194444516815, -0.14296081542516892, 0.12082353870203288, -0.49072611320469095, 0.4336608030237352, -0.46245046509574905, -0.9633382677643372, 0.24257927850042393, -0.23428569084469197, -0.7574096911067263, 0.8867587980384017, 0.5103755902021314, -0.5090626454689806, 0.10726341049723476, -0.2819657635217825, 0.1841771520746256, 0.3790635341761244, 0.16704607943394767, -0.6205380664961337, 0.05527642580301406, -0.7172325635610453, 0.5728104161883694, 0.9536978477284299, -0.5930130474412989, -0.20395958694823602, -0.7041093366710494, -0.766116351022315, 0.05391368187387369, -0.7370493387940502, -0.5745764238752449, -0.8161492140539686, -0.20167772798909045, 0.3179387199387558, -0.6507667450287824, -0.1622459188121863, -0.1943082676066874, -0.9165523537846971, -0.26613307466849023, 0.6806052156582765, -0.7650654030276967, 0.17104055501534665, -0.2364231110694408, 0.6399487874412639, -0.498389212548624, 0.4211455691699042, -0.943709081409152, 0.47247879497076095, -0.780973722928193, 0.30750679408597015, 0.6654672875854157, 0.21377247982610847, 0.5229663287971695, -0.8798670558732584, -0.371281701729657, 0.8958818297038091, 0.26621460955497556, 0.6974278619693819, -0.6168125720701876, 0.6315180263895204, -0.14087978504197585, -0.5767267568944965, -0.35449384034106246, 0.7029774155968522, -0.7932410929582356, 0.3160044375481337, -0.5089176499845802, -0.18091985034137958, -0.6479952378162346, 0.44167772497313496, -0.8153879543959057, -0.8223175363450361, 0.2998226816306999, 0.04217427086577108, 0.6167741705785219, 0.2357667032205022, 0.6873976185678201, 0.2762765769440485, -0.4331711836246446, -0.4736810044545623, -0.9568471415277544, 0.4950626846490034, -0.24770451752351885, -0.6122764327167707, 0.7104000249503248, -0.6650302347539965, 0.49095579116576027, 0.8180566997169958, 0.7628735512189757, 0.9588832692913547, 0.995826379343602, 0.17610639763981584, 0.5846246652283522, 0.40952073527384214, 0.8006725624890878, 0.7196874719923003, 0.0011884419012897496, 0.5416059001722979, -0.35999971022783783, -0.6825242139272365, -0.4816109230131844, -0.6216441051443, -0.6299800871182506, 0.6401673230904636, -0.5743943422566804, -0.41134092619381923, 0.8591640306149859, -0.8753501489725222, -0.3849782050483541, -0.3560380960573055, 0.7239779154848263, -0.9363318154515239, -0.36779474145159896, -0.7111055614222714, 0.567452881688826, 0.24930143283533956, -0.09148799679267405, -0.02379598703684649, 0.3635949376977232, -0.233224401264283, -0.7721530570105131, -0.6553135145482241, -0.5142942272859927, 0.4357821742014216, -0.2079666908825153, 0.4723617203602135, -0.0017694123486582392, -0.014038680796998104, -0.8845126582285474, 0.700596694000206, -0.5330598022394211, 0.686511923693883, -0.47328014287076425, -0.0011326696905038514, 0.9737227582304981, -0.9983856843937755, 0.4749734294613275, 0.9491290665133116, -0.44149985176659534, 0.9667385751439883, -0.708294841924292, 0.2355661064984793, -0.30540072054089307, -0.5150288017136304, -0.807507737297118, 0.992646532485616, -0.8720229080114446, -0.6771999495177949, 0.9350302315238128, 0.8958388558854509, 0.7448379131487592, 0.38705667394073573, 0.13846695764016625, -0.23925112486334532, -0.5201296751940021, 0.48526629993737713, -0.5841247700066023, -0.7191055011075531, -0.9339937618606622, -0.8375725738451147, 0.1691180065418305, -0.5719889067703927, 0.6609808883086052, 0.020180724676208683, 0.3585564740237106, 0.2528777453028035, 0.7323694443399038, 0.6771586888150878, 0.6162069133107215, 0.1840448646787496, 0.14011343928310627, 0.3516090134933738, 0.9880473229200968, 0.47777942623865677, 0.24352618349951216, 0.9859783963485718, -0.673803644126207, -0.7669303752376078, 0.24857105909108124, 0.8957555439792642, -0.9902424478645961, -0.9050095878139448, -0.5441198567550343, 0.04948265771838556, 0.18338004806035357, 0.806736895404444, -0.9461842185824825, 0.2102908459744881, 0.5020990578145033, -0.2983308250474608, -0.7350887729799949, 0.8888516870257164, -0.25509261165909014, 0.30590459395887426, 0.1802394181561653, 0.9252753062834864, -0.1269022693449262, -0.8132136018939813, -0.7751352741687636, -0.865181444423907, -0.971916168548512, -0.4894344004126574, -0.3541586515826096, 0.8773894067301191, 0.415365269822376, 0.3358063887227296, -0.38273916575220257, -0.22394299292890874, -0.09277893988872021, 0.05508548497477039, 0.8893588077036267, 0.5205707853224986, 0.776328312459081, -0.25730653663380343, -0.5671299853591578, 0.7392126060062769, 0.12000104877138273, 0.7481108768558813, -0.21747049220692993, 0.620135655922254, 0.31179376240601786, -0.29748516222287336, -0.3537038854056629, 0.5244668642811199, -0.6407627958393443, -0.9082034478889682, -0.26404229319918815, 0.6503667565260169, -0.5801572204777516, 0.6269463083803555, 0.4518168200551782, -0.7344550480306133, -0.7309686884301267, -0.5015454382714388, -0.8252202821873678, -0.28240922910569344, -0.028721398963797995, -0.9360434135179614, -0.19584488116260856, -0.5859661050132974, 0.7945732216033734, 0.20905981689597586, 0.16032026324008264, -0.5968566466887673, 0.359797810834652, -0.03661618792487231, 0.6119152145857842, 0.780562415356826, 0.036632283388467135, -0.8814396076096866, -0.42152247150203803, 0.6697834150504482, 0.36909485965984423, -0.10502200993459243, -0.6272610550100921, 0.5251717806837917, -0.237783829355396, -0.27987243801796713, -0.4909908921284194, 0.7035790867119014, 0.27714516668139955, 0.22439493618915263, -0.36366939104883245, -0.8193590529538102, 0.4463489135549299, -0.9936878522185693, -0.9383766245388532, 0.39316904784038753, -0.30880225886990176, 0.7892446051517628, -0.5419511258125012, 0.4240940170884566, -0.9598625325252694, -0.3308808830068539, -0.693687100933517, -0.8951999464209588, -0.8219561697077724, 0.46695131688962, 0.8744582149217344, 0.0772485024196794, -0.06072561567033663, -0.5294369467796369, -0.7858770620929203, 0.9392654358775443, 0.005514102216462424, 0.06597388215650435, -0.7766733556721741, 0.6948734232258498, -0.8286790816186274, 0.86176808320046, 0.22593176234437085, 0.920717560121098, 0.9818326583432826, 0.6003170193860647, -0.8399811760357005, 0.9531462126116839, -0.25256372217820466, 0.4943463777713524, -0.9837245665505445, 0.0027521731531672255, 0.1301967945712228, 0.8365393732896655, -0.7983529563888361, 0.43471467137300546, 0.64759573951251, -0.2575274262078766, -0.24014870214335038, 0.944520917830074, 0.576644044674471, -0.9809465428615689, 0.3161492619286683, -0.2509209755109043, -0.334314143719886, 0.8587867199181782, -0.6495309894647514, 0.8215812320249856, 0.46356046049084343, -0.7253742622126091, 0.16288551864800294, 0.2638337356473517, -0.6673655289528644, -0.9635959587071807, -0.18643828594778022, 0.73883951738193, 0.8066896942254338, -0.266032278372871, -0.8511987029453714, 0.5294855048884128, 0.5989305602242054, 0.22743736318555197, -0.8270878563157369, -0.6460862663005809, 0.24433674464365773, -0.15835843435866503] 7 | -------------------------------------------------------------------------------- /tests/assets/qrsol_4.sprs: -------------------------------------------------------------------------------- 1 | nzmax: 1070 2 | m: 100 3 | n: 100 4 | p: [0, 16, 25, 41, 52, 61, 66, 80, 88, 100, 113, 123, 131, 138, 145, 153, 164, 169, 176, 188, 198, 205, 212, 221, 232, 244, 252, 267, 272, 280, 292, 298, 310, 327, 334, 346, 359, 373, 385, 396, 410, 429, 441, 452, 461, 472, 479, 493, 506, 518, 525, 532, 540, 548, 561, 570, 580, 592, 605, 617, 624, 643, 654, 667, 674, 683, 697, 703, 708, 716, 726, 739, 749, 763, 771, 781, 792, 802, 813, 828, 844, 854, 865, 875, 889, 899, 913, 922, 928, 943, 951, 961, 974, 985, 998, 1009, 1023, 1033, 1047, 1059, 1070] 5 | i: [0, 5, 11, 14, 18, 32, 36, 39, 43, 44, 61, 71, 75, 79, 93, 95, 1, 24, 32, 51, 68, 81, 83, 85, 95, 2, 8, 12, 20, 29, 36, 43, 50, 57, 66, 70, 74, 80, 81, 82, 88, 3, 4, 6, 27, 28, 34, 75, 81, 84, 85, 96, 3, 4, 12, 17, 39, 50, 79, 92, 98, 0, 5, 14, 25, 77, 3, 6, 7, 14, 29, 35, 38, 51, 59, 62, 67, 70, 78, 88, 6, 7, 13, 14, 31, 39, 58, 94, 2, 8, 9, 35, 39, 43, 60, 62, 72, 75, 78, 87, 8, 9, 10, 37, 41, 47, 53, 57, 60, 62, 92, 94, 99, 9, 10, 23, 33, 37, 42, 48, 70, 91, 99, 0, 11, 25, 63, 67, 69, 93, 95, 2, 4, 12, 13, 17, 26, 80, 7, 12, 13, 38, 54, 82, 97, 0, 5, 6, 7, 14, 19, 37, 48, 15, 18, 20, 22, 30, 40, 58, 74, 81, 90, 95, 16, 26, 35, 36, 57, 4, 12, 17, 18, 24, 26, 59, 0, 15, 17, 18, 22, 36, 41, 47, 51, 65, 83, 99, 14, 19, 25, 44, 61, 65, 72, 76, 84, 98, 2, 15, 20, 35, 43, 47, 60, 21, 42, 55, 61, 65, 72, 89, 15, 18, 22, 23, 33, 36, 45, 75, 88, 10, 22, 23, 48, 52, 55, 60, 64, 72, 79, 89, 1, 17, 24, 26, 34, 36, 40, 45, 57, 60, 89, 97, 5, 11, 19, 25, 26, 64, 71, 98, 12, 16, 17, 24, 25, 26, 28, 41, 56, 58, 63, 73, 88, 94, 98, 3, 27, 34, 40, 97, 3, 26, 28, 34, 40, 86, 92, 97, 2, 6, 29, 31, 32, 35, 42, 55, 59, 71, 73, 98, 15, 30, 32, 46, 53, 60, 7, 29, 31, 34, 42, 61, 73, 75, 76, 79, 80, 81, 0, 1, 29, 30, 32, 36, 40, 47, 52, 60, 65, 68, 81, 84, 88, 93, 95, 10, 22, 33, 52, 67, 68, 96, 3, 24, 27, 28, 31, 34, 39, 48, 69, 75, 97, 99, 6, 8, 16, 20, 29, 35, 38, 65, 69, 70, 73, 77, 86, 0, 2, 16, 18, 22, 24, 32, 36, 37, 73, 79, 83, 91, 93, 9, 10, 14, 36, 37, 40, 55, 60, 76, 78, 80, 89, 6, 13, 35, 38, 59, 65, 73, 77, 78, 84, 95, 0, 4, 7, 8, 34, 39, 44, 50, 62, 74, 79, 83, 91, 92, 15, 24, 27, 28, 32, 37, 40, 41, 44, 51, 56, 57, 64, 69, 77, 90, 93, 95, 98, 9, 18, 26, 40, 41, 43, 52, 56, 80, 81, 85, 97, 10, 21, 29, 31, 42, 49, 62, 78, 83, 93, 94, 0, 2, 8, 20, 41, 43, 68, 78, 85, 0, 19, 39, 40, 44, 51, 53, 56, 65, 68, 97, 22, 24, 45, 75, 80, 83, 92, 30, 46, 47, 53, 54, 55, 65, 69, 72, 76, 91, 92, 95, 97, 9, 18, 20, 32, 46, 47, 52, 66, 72, 79, 80, 83, 91, 10, 14, 23, 34, 48, 54, 61, 78, 79, 90, 94, 97, 42, 49, 74, 75, 79, 83, 88, 2, 4, 39, 50, 57, 73, 95, 1, 6, 18, 40, 44, 51, 56, 61, 23, 32, 33, 41, 47, 52, 86, 91, 9, 30, 44, 46, 53, 57, 60, 70, 74, 79, 82, 89, 90, 13, 46, 48, 54, 63, 76, 82, 86, 87, 21, 23, 29, 37, 46, 55, 58, 85, 91, 95, 26, 40, 41, 44, 51, 56, 61, 71, 74, 77, 88, 92, 2, 9, 16, 24, 40, 50, 53, 57, 60, 71, 77, 88, 96, 7, 15, 26, 55, 58, 62, 66, 77, 78, 85, 90, 96, 6, 17, 29, 38, 59, 92, 93, 8, 9, 20, 23, 24, 30, 32, 37, 53, 57, 60, 64, 80, 84, 86, 87, 93, 94, 96, 0, 19, 21, 31, 48, 51, 56, 61, 72, 79, 98, 6, 8, 9, 39, 42, 58, 62, 64, 75, 82, 83, 90, 95, 11, 26, 54, 63, 64, 84, 88, 23, 25, 40, 60, 62, 63, 64, 78, 85, 18, 19, 21, 32, 35, 38, 44, 46, 65, 67, 69, 71, 72, 97, 2, 47, 58, 66, 79, 93, 6, 11, 33, 65, 67, 1, 32, 33, 43, 44, 68, 90, 96, 11, 34, 35, 40, 46, 65, 69, 83, 88, 90, 2, 6, 10, 35, 53, 70, 71, 74, 88, 92, 95, 98, 99, 0, 25, 29, 56, 57, 65, 70, 71, 94, 99, 8, 19, 21, 23, 46, 47, 61, 65, 72, 74, 81, 86, 87, 93, 26, 29, 31, 35, 36, 38, 50, 73, 2, 15, 39, 49, 53, 56, 70, 72, 74, 99, 0, 3, 8, 22, 31, 34, 45, 49, 62, 75, 91, 19, 31, 37, 46, 54, 76, 77, 78, 91, 99, 5, 35, 38, 40, 56, 57, 58, 76, 77, 81, 91, 6, 8, 37, 38, 42, 43, 48, 58, 64, 76, 78, 79, 82, 84, 98, 0, 4, 23, 31, 36, 39, 47, 48, 49, 53, 61, 66, 78, 79, 90, 93, 2, 12, 31, 37, 41, 45, 47, 60, 80, 88, 1, 2, 3, 15, 31, 32, 41, 72, 77, 81, 96, 2, 13, 53, 54, 62, 78, 82, 83, 86, 94, 1, 18, 36, 39, 42, 45, 47, 49, 62, 69, 82, 83, 88, 93, 3, 19, 32, 38, 60, 63, 78, 84, 89, 97, 1, 3, 41, 43, 55, 58, 64, 85, 89, 91, 92, 95, 96, 99, 28, 35, 52, 54, 60, 72, 82, 86, 98, 8, 54, 60, 72, 87, 94, 2, 6, 22, 26, 32, 49, 56, 57, 63, 69, 70, 80, 83, 88, 91, 21, 23, 24, 37, 53, 84, 85, 89, 15, 40, 48, 53, 58, 62, 68, 69, 79, 90, 10, 36, 39, 46, 47, 52, 55, 75, 76, 77, 85, 88, 91, 4, 9, 28, 39, 45, 46, 56, 59, 70, 85, 92, 0, 11, 32, 36, 40, 42, 59, 60, 66, 72, 79, 83, 93, 7, 9, 26, 42, 48, 60, 71, 82, 87, 94, 98, 0, 1, 11, 15, 32, 38, 40, 46, 50, 55, 62, 70, 85, 95, 3, 33, 57, 58, 60, 68, 81, 85, 96, 97, 13, 24, 27, 28, 34, 41, 44, 46, 48, 65, 84, 96, 97, 99, 4, 19, 25, 26, 29, 40, 61, 70, 78, 86, 94, 98, 9, 10, 18, 34, 70, 71, 74, 76, 85, 97, 99] 6 | x: [100.0, 0.131486, 0.244797, 0.130065, 0.377212, 0.131901, 0.289852, 0.426516, 0.200904, 0.037983, 0.39626, 0.410597, 0.324558, 0.273504, 0.223392, 0.114378, 100.0, 0.261796, 0.05352, 0.067026, 0.360614, 0.438951, 0.452361, 0.308833, 0.214187, 100.071445, 0.074933, 0.405475, 0.360172, 0.145992, 0.099059, 0.257119, 0.350549, 0.427363, 0.029812, 0.188136, 0.455759, 0.14522, 0.215903, 0.13264, 0.111078, 100.0, 0.159037, 0.02712, 0.228712, 0.125153, 0.338061, 0.341682, 0.315671, 0.354641, 0.28837, 0.416458, 0.159037, 100.0, 0.378375, 0.054849, 0.352721, 0.197354, 0.303912, 0.397819, 0.017491, 0.131486, 100.0, 0.212429, 0.39481, 0.465601, 0.02712, 100.0, 0.326906, 0.207261, 0.318653, 0.298606, 0.08945, 0.49417, 0.315535, 0.234546, 0.169049, 0.486031, 0.143988, 0.310531, 0.326906, 100.0, 0.310028, 0.247533, 0.370422, 0.46343, 0.181469, 0.353358, 0.074933, 100.0, 0.077185, 0.467865, 0.004148, 0.34078, 0.056858, 0.170197, 0.225168, 0.086531, 0.477863, 0.195381, 0.077185, 100.0, 0.362888, 0.360131, 0.225819, 0.329774, 0.0156, 0.174524, 0.108901, 0.031926, 0.444474, 0.00874, 0.391436, 0.362888, 100.0, 0.427673, 0.270759, 0.195427, 0.405801, 0.406772, 0.093624, 0.140754, 0.072268, 0.244797, 100.0, 0.486426, 0.237786, 0.634944, 0.090853, 0.436276, 0.334232, 0.405475, 0.378375, 100.0, 0.278347, 0.074438, 0.33214, 0.26266, 0.310028, 0.278347, 100.0, 0.039035, 0.431934, 0.419849, 0.195088, 0.130065, 0.212429, 0.207261, 0.247533, 100.0, 0.087446, 0.433759, 0.201217, 100.0, 0.228654, 0.186924, 0.058059, 0.170822, 0.083126, 0.330929, 0.160471, 0.068578, 0.037235, 0.539319, 100.0, 0.272209, 0.29351, 0.206943, 0.019592, 0.054849, 0.074438, 100.334329, 0.298324, 0.271407, 0.155555, 0.013997, 0.377212, 0.228654, 0.298324, 100.0, 0.427463, 0.304901, 0.217658, 0.44745, 0.162162, 0.092007, 0.276286, 0.372434, 0.087446, 100.0, 0.049169, 0.006378, 0.319472, 0.424861, 0.162834, 0.219789, 0.122883, 0.096203, 0.360172, 0.186924, 100.0, 0.325999, 0.450286, 0.065428, 0.122054, 100.0, 0.351155, 0.121842, 0.018213, 0.154575, 0.307644, 0.057015, 0.058059, 0.427463, 100.0, 0.34336, 0.295792, 0.429149, 0.367155, 0.400234, 0.205711, 0.427673, 0.34336, 100.0, 0.41528, 0.1885, 0.068927, 0.28229, 0.110847, 0.327657, 0.385743, 0.074532, 0.261796, 0.271407, 100.0, 0.428328, 0.139914, 0.293786, 0.373092, 0.243715, 0.449761, 0.496858, 0.069879, 0.089011, 0.39481, 0.486426, 0.049169, 100.0, 0.088897, 0.172014, 0.21432, 0.078347, 0.33214, 0.272209, 0.155555, 0.428328, 0.088897, 100.0, 0.06272, 0.023267, 0.219537, 0.002168, 0.452461, 0.060089, 0.437707, 0.335582, 0.252405, 0.228712, 100.0, 0.461357, 0.18703, 0.424841, 0.125153, 0.06272, 100.88522, 0.456591, 0.042499, 0.072263, 0.113267, 0.409334, 0.145992, 0.318653, 100.0, 0.060131, 0.117463, 0.259958, 0.185689, 0.339759, 0.208383, 0.201182, 0.35029, 0.185992, 0.170822, 100.0, 0.019511, 0.131833, 0.081238, 0.206037, 0.370422, 0.060131, 100.0, 0.107588, 0.441719, 0.377241, 0.43699, 0.03382, 0.104644, 0.260425, 0.273878, 0.421194, 0.131901, 0.05352, 0.117463, 0.019511, 100.0, 0.466152, 0.407213, 0.469643, 0.289797, 0.116545, 0.629285, 0.476264, 0.062507, 0.303676, 0.118065, 0.420926, 0.017346, 0.270759, 0.295792, 100.0, 0.160122, 0.328852, 0.389945, 0.067573, 0.338061, 0.139914, 0.461357, 0.456591, 0.107588, 100.0, 0.396078, 0.12481, 0.200441, 0.123018, 0.384122, 0.47479, 0.298606, 0.467865, 0.29351, 0.325999, 0.259958, 100.0, 0.087059, 0.452307, 0.345856, 0.440228, 0.241337, 0.400811, 0.00247, 0.289852, 0.099059, 0.206943, 0.304901, 0.429149, 0.293786, 0.466152, 100.0, 0.43661, 0.12182, 0.059488, 0.234572, 0.317276, 0.124399, 0.360131, 0.195427, 0.433759, 0.43661, 100.0, 0.40414, 0.199374, 0.167991, 0.038671, 0.290309, 0.40266, 0.057201, 0.08945, 0.039035, 0.087059, 100.0, 0.261157, 0.309428, 0.040173, 0.485518, 0.108324, 0.18858, 0.019802, 0.426516, 0.352721, 0.46343, 0.004148, 0.396078, 100.0, 0.312902, 0.297091, 0.186218, 0.025794, 0.165645, 0.433868, 0.444879, 0.353096, 0.083126, 0.373092, 0.18703, 0.042499, 0.407213, 0.40414, 100.0, 0.249863, 0.01414, 0.420888, 0.324144, 0.49276, 0.325535, 0.326458, 0.026952, 0.17136, 0.277224, 0.049181, 0.493979, 0.225819, 0.217658, 0.023267, 0.249863, 100.0, 0.443196, 0.373176, 0.001395, 0.387583, 0.287267, 0.162999, 0.075043, 0.405801, 0.351155, 0.185689, 0.441719, 100.0, 0.067373, 0.339232, 0.419081, 0.455593, 0.045435, 0.070012, 0.200904, 0.257119, 0.34078, 0.450286, 0.443196, 100.0, 0.282408, 0.197568, 0.265362, 0.037983, 0.006378, 0.312902, 0.01414, 100.0, 0.196549, 0.409217, 0.165437, 0.245557, 0.024571, 0.344145, 0.367155, 0.243715, 100.0, 0.048297, 0.325173, 0.381427, 0.060076, 0.131833, 100.0, 0.144818, 0.064507, 0.007114, 0.443206, 0.41048, 0.286137, 0.266268, 0.450562, 0.128346, 0.485165, 0.036695, 0.042476, 0.329774, 0.44745, 0.065428, 0.469643, 0.144818, 100.0, 0.261166, 0.054423, 0.108674, 0.764099, 0.465968, 0.267541, 0.292327, 0.406772, 0.201217, 0.41528, 0.12481, 100.0, 0.451928, 0.283126, 0.103454, 0.314854, 0.386086, 0.260092, 0.05595, 0.067373, 100.0, 0.251727, 0.384386, 0.379253, 0.258197, 0.315472, 0.350549, 0.197354, 0.297091, 100.0, 0.402284, 0.330605, 0.457199, 0.067026, 0.49417, 0.162162, 0.420888, 0.196549, 100.0, 0.454976, 0.658927, 0.1885, 0.289797, 0.160122, 0.373176, 0.261166, 100.0, 0.256978, 0.285512, 0.0156, 0.081238, 0.409217, 0.064507, 100.0, 0.324295, 0.431, 0.46763, 0.284129, 0.127558, 0.414276, 0.192764, 0.208211, 0.431934, 0.007114, 0.451928, 100.0, 0.437919, 0.383369, 0.076352, 0.192166, 0.271384, 0.121842, 0.068927, 0.339759, 0.199374, 0.443206, 100.0, 0.019507, 0.346459, 0.287795, 0.000737, 0.219537, 0.324144, 0.001395, 0.165437, 0.454976, 100.0, 0.167599, 0.091598, 0.493976, 0.189712, 0.092554, 0.217492, 0.427363, 0.174524, 0.019592, 0.449761, 0.49276, 0.402284, 0.324295, 100.0, 0.28993, 0.342575, 0.318186, 0.242686, 0.137731, 0.181469, 0.330929, 0.002168, 0.019507, 100.0, 0.381788, 0.317099, 0.429013, 0.331863, 0.320452, 0.004989, 0.496443, 0.315535, 0.013997, 0.208383, 0.261157, 100.0, 0.222283, 0.257267, 0.056858, 0.108901, 0.122054, 0.28229, 0.496858, 0.206037, 0.116545, 0.167991, 0.431, 0.28993, 100.0, 0.397396, 0.252308, 0.366183, 0.407617, 0.197206, 0.4442, 0.172457, 0.440842, 0.39626, 0.319472, 0.018213, 0.377241, 0.283126, 0.658927, 0.167599, 100.0, 0.219686, 0.186322, 0.136838, 0.234546, 0.170197, 0.031926, 0.186218, 0.339232, 0.381788, 100.0, 0.264613, 0.420361, 0.175341, 0.038914, 0.161878, 0.254157, 0.237786, 0.452461, 0.437919, 100.0, 0.338059, 0.073247, 0.412279, 0.110847, 0.172014, 0.325535, 0.397396, 0.264613, 0.338059, 100.0, 0.15164, 0.498949, 0.092007, 0.424861, 0.154575, 0.629285, 0.452307, 0.309428, 0.245557, 0.41048, 100.0, 0.469337, 0.021545, 0.210893, 0.083274, 0.295389, 0.029812, 0.054423, 0.317099, 100.0, 0.318717, 0.005088, 0.169049, 0.634944, 0.328852, 0.469337, 100.0, 0.360614, 0.476264, 0.389945, 0.282408, 0.024571, 100.0, 0.219599, 0.286205, 0.090853, 0.200441, 0.345856, 0.326458, 0.286137, 0.021545, 100.0, 0.293975, 0.073737, 0.099372, 0.188136, 0.486031, 0.093624, 0.440228, 0.46763, 100.0, 0.001532, 0.336008, 0.420503, 0.217143, 0.49008, 0.443163, 0.450769, 0.410597, 0.21432, 0.201182, 0.091598, 0.342575, 0.210893, 0.001532, 100.0, 0.322832, 0.38313, 0.225168, 0.162834, 0.307644, 0.327657, 0.266268, 0.108674, 0.219686, 0.083274, 100.0, 0.395294, 0.329727, 0.153206, 0.095915, 0.110133, 0.060089, 0.35029, 0.43699, 0.241337, 0.12182, 0.040173, 0.330605, 100.0, 0.455759, 0.160471, 0.025794, 0.251727, 0.284129, 0.493976, 0.336008, 0.395294, 100.0, 0.064809, 0.324558, 0.341682, 0.086531, 0.400234, 0.03382, 0.123018, 0.048297, 0.384386, 0.420361, 100.0, 0.064362, 0.219789, 0.104644, 0.038671, 0.450562, 0.383369, 100.0, 0.067305, 0.017768, 0.05002, 0.045121, 0.465601, 0.400811, 0.485518, 0.026952, 0.189712, 0.318186, 0.429013, 0.067305, 100.0, 0.200903, 0.439367, 0.143988, 0.477863, 0.290309, 0.108324, 0.419081, 0.197568, 0.103454, 0.331863, 0.15164, 0.017768, 100.0, 0.367165, 0.310942, 0.023573, 0.006929, 0.273504, 0.303912, 0.385743, 0.260425, 0.059488, 0.165645, 0.764099, 0.314854, 0.379253, 0.127558, 0.186322, 0.318717, 0.367165, 100.0, 0.464265, 0.001589, 0.14522, 0.26266, 0.273878, 0.40266, 0.387583, 0.325173, 0.465968, 0.252308, 100.0, 0.204055, 0.438951, 0.215903, 0.315671, 0.068578, 0.421194, 0.062507, 0.287267, 0.329727, 0.200903, 100.0, 0.014459, 0.13264, 0.419849, 0.414276, 0.076352, 0.175341, 0.310942, 100.0, 0.331028, 0.338926, 0.412317, 0.452361, 0.276286, 0.234572, 0.433868, 0.455593, 0.381427, 0.267541, 0.258197, 0.038914, 0.293975, 0.331028, 100.0, 0.060921, 0.284107, 0.354641, 0.122883, 0.303676, 0.18858, 0.366183, 0.073247, 0.023573, 100.0, 0.318885, 0.300588, 0.308833, 0.28837, 0.162999, 0.265362, 0.346459, 0.320452, 0.498949, 100.0, 0.119596, 0.201188, 0.143452, 0.463108, 0.24427, 0.423299, 0.072263, 0.00247, 0.256978, 0.192166, 0.407617, 0.153206, 0.338926, 100.0, 0.055399, 0.195381, 0.271384, 0.197206, 0.095915, 100.0, 0.26546, 0.111078, 0.310531, 0.205711, 0.437707, 0.118065, 0.315472, 0.092554, 0.242686, 0.412279, 0.073737, 0.420503, 0.204055, 0.060921, 100.0, 0.249608, 0.057015, 0.074532, 0.069879, 0.057201, 0.192764, 0.318885, 0.119596, 100.0, 0.037235, 0.17136, 0.386086, 0.208211, 0.004989, 0.161878, 0.219599, 0.099372, 0.464265, 100.0, 0.140754, 0.317276, 0.444879, 0.128346, 0.292327, 0.285512, 0.287795, 0.064362, 0.05002, 0.439367, 0.201188, 0.249608, 100.0, 0.397819, 0.444474, 0.113267, 0.353096, 0.060076, 0.485165, 0.217492, 0.222283, 0.217143, 0.143452, 100.0, 0.223392, 0.436276, 0.420926, 0.124399, 0.277224, 0.045435, 0.257267, 0.4442, 0.005088, 0.110133, 0.001589, 0.284107, 100.0, 0.353358, 0.00874, 0.335582, 0.070012, 0.260092, 0.172457, 0.322832, 0.412317, 0.26546, 100.0, 0.259136, 0.114378, 0.214187, 0.334232, 0.539319, 0.017346, 0.019802, 0.049181, 0.036695, 0.457199, 0.000737, 0.254157, 0.49008, 0.463108, 100.0, 0.416458, 0.067573, 0.137731, 0.496443, 0.440842, 0.286205, 0.014459, 0.24427, 100.0, 0.105494, 0.195088, 0.089011, 0.424841, 0.409334, 0.384122, 0.075043, 0.344145, 0.042476, 0.05595, 0.295389, 0.300588, 0.105494, 100.0, 0.470528, 0.017491, 0.096203, 0.078347, 0.252405, 0.185992, 0.493979, 0.136838, 0.443163, 0.006929, 0.055399, 0.259136, 100.0, 0.391436, 0.072268, 0.372434, 0.47479, 0.450769, 0.38313, 0.064809, 0.045121, 0.423299, 0.470528, 100.0] 7 | -------------------------------------------------------------------------------- /tests/assets/qrsol_5.sprs: -------------------------------------------------------------------------------- 1 | nzmax: 98 2 | m: 50 3 | n: 50 4 | p: [0, 2, 3, 5, 7, 8, 9, 11, 13, 14, 17, 18, 21, 22, 23, 26, 27, 29, 30, 34, 35, 36, 37, 38, 41, 45, 49, 52, 54, 56, 57, 59, 61, 63, 64, 66, 68, 72, 73, 74, 77, 79, 81, 83, 88, 90, 91, 92, 95, 96, 98] 5 | i: [0, 49, 1, 2, 9, 3, 40, 4, 5, 6, 24, 7, 47, 8, 2, 9, 36, 10, 11, 16, 47, 12, 13, 14, 32, 43, 15, 11, 16, 17, 18, 24, 26, 36, 19, 20, 21, 22, 23, 25, 39, 6, 18, 24, 31, 23, 25, 36, 42, 18, 26, 43, 27, 44, 28, 35, 29, 30, 43, 24, 31, 14, 32, 33, 34, 43, 28, 35, 9, 18, 25, 36, 37, 38, 23, 39, 41, 3, 40, 39, 41, 25, 42, 14, 26, 30, 34, 43, 27, 44, 45, 46, 7, 11, 47, 48, 0, 49] 6 | x: [50.0, 0.156843, 50.0, 50.0, 0.622202, 50.0, 0.101984, 50.0, 50.0, 50.0, 0.147115, 50.0, 0.266348, 50.0, 0.622202, 50.0, 0.273858, 50.0, 50.0, 0.165554, 0.201462, 50.0, 50.0, 50.0, 0.023619, 0.043207, 50.0, 0.165554, 50.0, 50.0, 50.0, 0.095057, 0.169208, 0.440441, 50.0, 50.0, 50.0, 50.0, 50.0, 0.258752, 0.308148, 0.147115, 0.095057, 50.0, 0.161337, 0.258752, 50.0, 0.078984, 0.00637, 0.169208, 50.0, 0.029106, 50.0, 0.288221, 50.0, 0.445689, 50.0, 50.0, 0.10256, 0.161337, 50.0, 0.023619, 50.0, 50.0, 50.0, 0.485444, 0.445689, 50.0, 0.273858, 0.440441, 0.078984, 50.0, 50.0, 50.0, 0.308148, 50.0, 0.304234, 0.101984, 50.0, 0.304234, 50.0, 0.00637, 50.0, 0.043207, 0.029106, 0.10256, 0.485444, 50.0, 0.288221, 50.0, 50.0, 50.0, 0.266348, 0.201462, 50.0, 50.0, 0.156843, 50.0] 7 | -------------------------------------------------------------------------------- /tests/assets/qrsol_8.sprs: -------------------------------------------------------------------------------- 1 | nzmax: 2010 2 | m: 200 3 | n: 201 4 | p: [0, 5, 20, 28, 42, 53, 67, 79, 91, 100, 109, 123, 135, 146, 158, 171, 182, 192, 208, 221, 233, 243, 248, 260, 270, 278, 283, 288, 298, 315, 323, 328, 338, 345, 352, 362, 368, 383, 393, 404, 414, 421, 431, 448, 460, 467, 479, 489, 496, 502, 509, 519, 531, 540, 549, 560, 566, 574, 580, 597, 605, 621, 633, 641, 648, 663, 671, 682, 687, 697, 704, 718, 726, 734, 741, 756, 764, 773, 783, 794, 811, 824, 835, 843, 852, 860, 871, 884, 893, 905, 915, 928, 939, 951, 954, 961, 966, 973, 984, 997, 1009, 1013, 1023, 1031, 1039, 1047, 1054, 1063, 1075, 1083, 1094, 1108, 1117, 1132, 1140, 1147, 1153, 1166, 1181, 1191, 1201, 1209, 1219, 1228, 1246, 1253, 1264, 1274, 1280, 1286, 1302, 1320, 1334, 1346, 1360, 1371, 1377, 1392, 1404, 1420, 1424, 1434, 1446, 1459, 1473, 1481, 1488, 1500, 1508, 1517, 1527, 1539, 1553, 1561, 1570, 1584, 1589, 1597, 1611, 1618, 1626, 1640, 1654, 1663, 1677, 1688, 1701, 1710, 1718, 1732, 1739, 1747, 1757, 1763, 1767, 1773, 1777, 1784, 1792, 1806, 1817, 1829, 1837, 1846, 1856, 1867, 1873, 1880, 1889, 1897, 1906, 1914, 1927, 1935, 1949, 1952, 1960, 1969, 1983, 1992, 2002, 2010] 5 | i: [97, 105, 112, 186, 189, 0, 5, 17, 24, 38, 53, 59, 71, 92, 97, 100, 105, 115, 117, 130, 10, 42, 63, 108, 117, 133, 167, 180, 2, 15, 20, 26, 33, 36, 63, 78, 99, 104, 112, 118, 140, 189, 19, 24, 41, 45, 74, 105, 152, 154, 157, 179, 183, 15, 42, 56, 64, 76, 93, 107, 108, 131, 141, 159, 183, 186, 190, 16, 24, 32, 44, 62, 119, 120, 135, 139, 148, 170, 192, 7, 9, 16, 87, 93, 95, 117, 118, 147, 168, 184, 193, 16, 56, 104, 121, 137, 167, 169, 172, 176, 35, 39, 43, 67, 70, 108, 136, 140, 193, 17, 20, 30, 32, 63, 83, 85, 100, 109, 121, 123, 134, 167, 178, 8, 13, 22, 34, 44, 61, 62, 64, 81, 118, 160, 189, 22, 75, 108, 132, 143, 151, 158, 167, 172, 175, 189, 17, 43, 45, 98, 111, 124, 140, 143, 148, 177, 184, 199, 10, 21, 22, 35, 59, 68, 144, 150, 153, 156, 176, 184, 194, 11, 14, 19, 44, 124, 146, 148, 149, 181, 190, 192, 14, 28, 52, 84, 104, 110, 130, 159, 164, 199, 1, 2, 5, 9, 28, 30, 46, 97, 122, 141, 150, 157, 161, 172, 182, 187, 3, 23, 24, 42, 45, 52, 60, 81, 86, 131, 137, 146, 181, 7, 51, 129, 135, 138, 140, 161, 163, 168, 171, 182, 197, 37, 45, 52, 58, 62, 120, 122, 136, 152, 165, 9, 43, 72, 74, 152, 15, 19, 62, 82, 84, 95, 96, 97, 112, 152, 167, 194, 26, 31, 47, 51, 72, 73, 101, 159, 165, 172, 25, 50, 67, 72, 97, 126, 162, 187, 8, 27, 98, 99, 155, 10, 31, 72, 137, 165, 23, 50, 58, 87, 88, 101, 112, 117, 118, 124, 31, 34, 44, 63, 76, 77, 95, 110, 128, 132, 135, 138, 163, 164, 179, 184, 197, 34, 35, 56, 66, 85, 172, 179, 198, 9, 85, 98, 152, 193, 22, 67, 77, 79, 83, 90, 106, 116, 122, 187, 34, 89, 96, 150, 153, 155, 179, 40, 42, 45, 84, 128, 148, 167, 5, 44, 51, 60, 61, 97, 122, 136, 153, 169, 66, 89, 163, 169, 180, 193, 19, 29, 37, 68, 92, 98, 101, 148, 150, 151, 161, 177, 178, 190, 198, 7, 12, 25, 43, 70, 127, 152, 162, 177, 186, 35, 38, 47, 82, 100, 120, 123, 124, 127, 137, 151, 5, 23, 31, 63, 89, 114, 131, 142, 152, 162, 25, 59, 61, 90, 164, 195, 197, 12, 27, 43, 51, 84, 101, 170, 175, 188, 197, 4, 13, 14, 53, 57, 65, 69, 70, 90, 108, 119, 123, 126, 149, 160, 162, 182, 9, 17, 18, 24, 26, 76, 87, 133, 142, 143, 151, 162, 59, 69, 80, 99, 115, 128, 160, 4, 51, 56, 65, 86, 103, 105, 130, 132, 142, 164, 175, 7, 47, 51, 98, 100, 118, 123, 149, 167, 192, 23, 27, 47, 98, 114, 124, 151, 12, 26, 27, 98, 102, 124, 16, 72, 122, 127, 140, 149, 158, 34, 43, 55, 57, 62, 77, 86, 148, 165, 186, 6, 14, 20, 23, 36, 47, 85, 102, 135, 138, 155, 171, 8, 9, 88, 91, 127, 142, 175, 187, 193, 4, 39, 55, 60, 83, 124, 126, 172, 189, 2, 20, 23, 25, 53, 76, 111, 118, 173, 183, 191, 7, 28, 59, 93, 105, 127, 25, 40, 41, 51, 65, 171, 179, 184, 34, 71, 94, 113, 179, 193, 4, 15, 18, 27, 58, 75, 81, 86, 99, 102, 146, 160, 161, 172, 174, 191, 196, 7, 51, 67, 82, 119, 139, 154, 193, 25, 38, 52, 58, 63, 68, 80, 81, 97, 101, 116, 130, 154, 155, 163, 178, 11, 38, 42, 67, 97, 119, 130, 143, 155, 179, 186, 199, 6, 27, 52, 99, 107, 146, 169, 171, 4, 11, 60, 62, 127, 175, 179, 4, 54, 79, 85, 93, 120, 127, 140, 141, 155, 164, 187, 192, 196, 197, 9, 50, 53, 67, 88, 151, 154, 185, 10, 41, 65, 75, 99, 103, 118, 120, 129, 175, 187, 91, 102, 113, 121, 190, 31, 61, 90, 91, 93, 103, 138, 143, 151, 154, 10, 21, 25, 58, 75, 166, 186, 28, 48, 53, 71, 107, 116, 118, 120, 127, 130, 164, 179, 195, 199, 28, 32, 37, 91, 103, 128, 171, 176, 24, 34, 73, 74, 90, 99, 145, 146, 20, 22, 62, 157, 164, 169, 176, 1, 12, 15, 30, 41, 53, 56, 58, 62, 83, 92, 110, 119, 148, 189, 38, 45, 51, 57, 78, 102, 113, 176, 27, 28, 72, 78, 88, 109, 113, 173, 194, 0, 17, 70, 99, 101, 102, 110, 131, 136, 142, 17, 25, 27, 33, 37, 72, 98, 102, 110, 127, 172, 1, 3, 26, 29, 35, 40, 49, 63, 95, 101, 119, 142, 144, 155, 175, 190, 192, 0, 3, 6, 78, 81, 96, 122, 127, 131, 142, 175, 178, 180, 7, 24, 38, 41, 45, 117, 126, 145, 166, 188, 199, 20, 28, 70, 76, 95, 154, 171, 187, 11, 48, 76, 92, 113, 136, 147, 181, 193, 17, 41, 80, 86, 87, 129, 165, 171, 8, 27, 76, 84, 98, 105, 110, 128, 133, 146, 159, 35, 36, 59, 66, 85, 93, 96, 99, 131, 133, 157, 168, 171, 3, 17, 63, 78, 109, 115, 161, 163, 164, 9, 36, 52, 64, 75, 118, 160, 162, 173, 184, 192, 199, 61, 74, 87, 97, 122, 127, 130, 136, 159, 166, 4, 13, 14, 23, 39, 64, 87, 109, 122, 169, 176, 183, 191, 2, 38, 42, 88, 102, 127, 131, 157, 158, 176, 189, 15, 27, 30, 32, 42, 68, 71, 81, 89, 108, 140, 151, 45, 56, 114, 30, 33, 49, 84, 159, 176, 196, 84, 146, 179, 187, 193, 1, 15, 24, 27, 30, 118, 129, 6, 15, 18, 83, 93, 117, 134, 155, 190, 192, 196, 1, 4, 5, 54, 69, 82, 139, 147, 163, 177, 190, 191, 193, 7, 43, 52, 59, 62, 81, 95, 125, 140, 142, 146, 181, 32, 73, 98, 170, 4, 14, 38, 80, 100, 112, 116, 123, 130, 186, 22, 35, 47, 73, 84, 166, 176, 187, 55, 80, 81, 98, 153, 175, 185, 199, 3, 29, 94, 100, 110, 128, 149, 159, 35, 41, 93, 105, 169, 170, 177, 13, 21, 35, 79, 82, 103, 136, 185, 186, 15, 34, 37, 57, 58, 91, 94, 112, 124, 155, 156, 185, 9, 19, 69, 72, 97, 132, 140, 195, 9, 30, 54, 65, 107, 110, 113, 121, 133, 175, 179, 1, 4, 20, 64, 66, 73, 86, 98, 137, 138, 169, 185, 192, 194, 3, 55, 62, 79, 87, 142, 150, 163, 190, 4, 23, 26, 41, 48, 72, 86, 87, 111, 131, 132, 166, 169, 185, 193, 9, 66, 79, 95, 104, 105, 157, 167, 10, 16, 144, 145, 149, 154, 199, 36, 64, 83, 94, 155, 168, 8, 18, 39, 50, 69, 79, 103, 121, 126, 147, 152, 183, 196, 13, 15, 25, 37, 41, 46, 62, 64, 66, 91, 94, 102, 131, 135, 179, 24, 37, 77, 81, 95, 99, 118, 143, 175, 184, 26, 45, 55, 80, 87, 120, 140, 182, 185, 195, 6, 51, 55, 84, 87, 112, 115, 145, 12, 15, 77, 82, 90, 91, 97, 153, 156, 163, 7, 31, 54, 55, 70, 124, 132, 176, 184, 11, 32, 40, 48, 50, 52, 60, 70, 91, 111, 128, 134, 142, 151, 169, 170, 182, 183, 11, 69, 87, 110, 137, 180, 198, 11, 33, 73, 80, 88, 97, 132, 176, 184, 192, 194, 4, 10, 18, 19, 39, 65, 89, 116, 147, 191, 21, 57, 147, 157, 180, 191, 56, 101, 153, 180, 194, 199, 14, 55, 72, 76, 86, 93, 124, 127, 147, 150, 153, 164, 184, 187, 188, 189, 3, 42, 53, 59, 71, 82, 83, 98, 118, 122, 130, 132, 144, 150, 159, 168, 178, 183, 7, 17, 70, 77, 91, 101, 103, 104, 111, 118, 127, 129, 142, 183, 26, 27, 46, 47, 48, 53, 68, 91, 117, 155, 183, 198, 3, 11, 19, 74, 81, 107, 113, 119, 122, 141, 172, 174, 179, 190, 1, 15, 22, 34, 50, 68, 71, 121, 143, 149, 168, 58, 80, 96, 171, 186, 191, 26, 38, 58, 61, 68, 77, 99, 100, 116, 126, 154, 171, 188, 191, 193, 14, 31, 37, 38, 51, 67, 79, 93, 99, 131, 137, 157, 27, 41, 47, 55, 64, 65, 69, 85, 91, 122, 123, 126, 135, 150, 163, 188, 82, 123, 175, 184, 69, 87, 91, 98, 102, 144, 168, 169, 171, 173, 7, 15, 37, 47, 49, 77, 93, 97, 99, 111, 112, 123, 7, 18, 31, 40, 67, 74, 86, 98, 120, 138, 143, 158, 199, 19, 52, 54, 67, 83, 119, 134, 136, 142, 153, 156, 160, 166, 189, 10, 29, 70, 72, 89, 143, 181, 184, 10, 76, 82, 121, 161, 176, 185, 38, 49, 56, 69, 78, 103, 105, 107, 108, 162, 165, 191, 20, 38, 61, 72, 89, 90, 138, 141, 3, 23, 26, 39, 54, 89, 116, 149, 159, 1, 11, 50, 74, 75, 81, 97, 150, 161, 175, 28, 42, 64, 80, 102, 104, 126, 150, 159, 182, 187, 192, 24, 34, 50, 53, 85, 86, 90, 108, 109, 128, 157, 167, 172, 184, 4, 47, 60, 102, 131, 181, 184, 197, 8, 47, 55, 121, 122, 164, 183, 187, 198, 10, 13, 33, 37, 41, 43, 63, 71, 74, 76, 81, 90, 122, 154, 11, 49, 56, 82, 179, 12, 17, 24, 35, 45, 62, 117, 168, 1, 22, 29, 59, 60, 62, 66, 69, 76, 80, 107, 119, 164, 172, 1, 18, 25, 37, 45, 126, 170, 27, 47, 48, 65, 116, 122, 157, 199, 16, 20, 28, 38, 73, 89, 91, 95, 104, 108, 136, 166, 180, 194, 25, 32, 40, 46, 48, 51, 77, 92, 93, 103, 151, 176, 190, 195, 31, 32, 50, 73, 80, 105, 119, 182, 195, 19, 48, 65, 68, 73, 76, 78, 93, 96, 98, 99, 114, 130, 159, 34, 43, 88, 91, 106, 109, 118, 137, 152, 170, 177, 38, 54, 57, 71, 94, 102, 103, 105, 140, 142, 149, 175, 176, 44, 63, 90, 100, 108, 122, 153, 177, 198, 8, 60, 103, 104, 138, 150, 152, 164, 12, 23, 35, 47, 67, 78, 88, 102, 121, 148, 155, 163, 170, 189, 23, 31, 82, 96, 113, 118, 168, 42, 86, 99, 124, 129, 133, 141, 164, 14, 39, 47, 76, 92, 105, 109, 132, 136, 165, 63, 68, 71, 76, 116, 189, 28, 176, 181, 189, 10, 37, 70, 76, 111, 142, 39, 68, 142, 161, 11, 55, 86, 97, 109, 166, 167, 2, 6, 11, 12, 27, 46, 69, 99, 0, 13, 33, 66, 71, 90, 91, 126, 139, 146, 165, 172, 179, 180, 3, 11, 13, 43, 68, 106, 131, 136, 145, 184, 193, 26, 35, 51, 54, 58, 62, 82, 99, 110, 120, 124, 167, 16, 19, 28, 38, 57, 70, 73, 156, 0, 12, 25, 30, 74, 115, 130, 161, 167, 19, 25, 33, 44, 101, 112, 113, 139, 147, 156, 8, 50, 53, 58, 92, 111, 124, 130, 143, 152, 186, 52, 107, 120, 149, 168, 179, 17, 20, 21, 64, 117, 181, 184, 6, 7, 33, 81, 83, 94, 95, 113, 151, 21, 55, 79, 82, 93, 104, 156, 198, 14, 24, 43, 71, 78, 93, 103, 162, 176, 74, 97, 106, 122, 156, 174, 184, 188, 19, 38, 43, 46, 49, 59, 75, 83, 86, 104, 162, 163, 172, 41, 56, 80, 100, 112, 114, 118, 122, 11, 15, 25, 33, 39, 48, 80, 99, 107, 129, 131, 164, 183, 197, 51, 81, 84, 6, 9, 30, 46, 118, 129, 137, 160, 28, 51, 57, 113, 128, 134, 147, 151, 178, 2, 3, 8, 10, 21, 27, 44, 50, 54, 68, 87, 123, 126, 154, 12, 52, 60, 86, 96, 120, 130, 163, 173, 5, 30, 46, 63, 78, 91, 93, 116, 166, 175, 28, 97, 140, 162, 173, 179, 189, 196] 6 | x: [0.543663, 0.749018, 0.788113, 0.574737, 0.713796, 0.342713, 0.398131, 0.301727, 0.974222, 0.613475, 0.966053, 0.556695, 0.430278, 0.599586, 0.435176, 0.520129, 0.516997, 0.100751, 0.585609, 0.532624, 0.187713, 0.347261, 0.686638, 0.172605, 0.810628, 0.109862, 0.552175, 0.974836, 0.432368, 0.403501, 0.705077, 0.96387, 0.54055, 0.712415, 0.429239, 0.009333, 0.963612, 0.76211, 0.433299, 0.327942, 0.283268, 0.234118, 0.000341, 0.095949, 0.025151, 0.367286, 0.801076, 0.700825, 0.887637, 0.395366, 0.658856, 0.113949, 0.06616, 0.459642, 0.581093, 0.05734, 0.073596, 0.829562, 0.131831, 0.975958, 0.036426, 0.047787, 0.136007, 0.123861, 0.79837, 0.795955, 0.515766, 0.550811, 0.137304, 0.989186, 0.52474, 0.83975, 0.136652, 0.858402, 0.917057, 0.183528, 0.523592, 0.340478, 0.487431, 0.48223, 0.62288, 0.244173, 0.421006, 0.28735, 0.399263, 0.475354, 0.6809, 0.542992, 0.217865, 0.338999, 0.41996, 0.123381, 0.760343, 0.829081, 0.488486, 0.904406, 0.783102, 0.466219, 0.248771, 0.794589, 0.622391, 0.226534, 0.747662, 0.288565, 0.475879, 0.730718, 0.489619, 0.861657, 0.798142, 0.625636, 0.153519, 0.870913, 0.668086, 0.976439, 0.672451, 0.199157, 0.234251, 0.319206, 0.928845, 0.749848, 0.687579, 0.922338, 0.268124, 0.587362, 0.347186, 0.006226, 0.337712, 0.745093, 0.208258, 0.608161, 0.880847, 0.305053, 0.583504, 0.258096, 0.858691, 0.299175, 0.361113, 0.324562, 0.416922, 0.354623, 0.861335, 0.570892, 0.709639, 0.5706, 0.513679, 0.913814, 0.18839, 0.754153, 0.553483, 0.436752, 0.496721, 0.338535, 0.015908, 0.971111, 0.189011, 0.867883, 0.640929, 0.834012, 0.604478, 0.032336, 0.557067, 0.039268, 0.227653, 0.219062, 0.184434, 0.120229, 0.256385, 0.208522, 0.460547, 0.61133, 0.293556, 0.651069, 0.384943, 0.34014, 0.764071, 0.466312, 0.530459, 0.311821, 0.895171, 0.762661, 0.500401, 0.904282, 0.913153, 0.219471, 0.839142, 0.905463, 0.680819, 0.890688, 0.500419, 0.268169, 0.498674, 0.497868, 0.595128, 0.536425, 0.794006, 0.679571, 0.258095, 0.974381, 0.293959, 0.354651, 0.096594, 0.443865, 0.383248, 0.567597, 0.880581, 0.625165, 0.230768, 0.715905, 0.515005, 0.901124, 0.051827, 0.073391, 0.728764, 0.470371, 0.206807, 0.746042, 0.468952, 0.39844, 0.395136, 0.709445, 0.24962, 0.424523, 0.313027, 0.798058, 0.339446, 0.664018, 0.829109, 0.942526, 0.09059, 0.144159, 0.566253, 0.222223, 0.346471, 0.974574, 0.067344, 0.944257, 0.266221, 0.133715, 0.045152, 0.008855, 0.576742, 0.450528, 0.660955, 0.733567, 0.861977, 0.89586, 0.749284, 0.229023, 0.770207, 0.324097, 0.061378, 0.444625, 0.398749, 0.298131, 0.133173, 0.295009, 0.276037, 0.00923, 0.128169, 0.38468, 0.068507, 0.84348, 0.77236, 0.399619, 0.218226, 0.967032, 0.474655, 0.904921, 0.665106, 0.736009, 0.603643, 0.597061, 0.087772, 0.780868, 0.452946, 0.955438, 0.863758, 0.378972, 0.279962, 0.504616, 0.585904, 0.190733, 0.340394, 0.25362, 0.11097, 0.461523, 0.817516, 0.680884, 0.612605, 0.827574, 0.936419, 0.375498, 0.187381, 0.973413, 0.800343, 0.757632, 0.659648, 0.032751, 0.384048, 0.35712, 0.931703, 0.092531, 0.124322, 0.157388, 0.730992, 0.891583, 0.689421, 0.58047, 0.392949, 0.904771, 0.264743, 0.190658, 0.347368, 0.393825, 0.988621, 0.748919, 0.998143, 0.287294, 0.996384, 0.188604, 0.006074, 0.608097, 0.945983, 0.207137, 0.752387, 0.093803, 0.313484, 0.90257, 0.008248, 0.260043, 0.673392, 0.75825, 0.835724, 0.652497, 0.657264, 0.980589, 0.712831, 0.964168, 0.849476, 0.665515, 0.314755, 0.430213, 0.081089, 0.728672, 0.721597, 0.660822, 0.019078, 0.84042, 0.830011, 0.756261, 0.525146, 0.115937, 0.663727, 0.738713, 0.607825, 0.037366, 0.663365, 0.381077, 0.567512, 0.167982, 0.583746, 0.530876, 0.513558, 0.421406, 0.418815, 0.333494, 0.598896, 0.757151, 0.544671, 0.365823, 0.727111, 0.90645, 0.928472, 0.272021, 0.214685, 0.653799, 0.119336, 0.978538, 0.269576, 0.089177, 0.313135, 0.711534, 0.967092, 0.858904, 0.778287, 0.965933, 0.37767, 0.069748, 0.160595, 0.132126, 0.168813, 0.62813, 0.142633, 0.03014, 0.618875, 0.849432, 0.959289, 0.97945, 0.227618, 0.183247, 0.624242, 0.188933, 0.700232, 0.776656, 0.11015, 0.607371, 0.349953, 0.971829, 0.754615, 0.706741, 0.587061, 0.408793, 0.110447, 0.07447, 0.565834, 0.558291, 0.646859, 0.954526, 0.86983, 0.062317, 0.40963, 0.369452, 0.61157, 0.142824, 0.863868, 0.946538, 0.316096, 0.933568, 0.595794, 0.717687, 0.646592, 0.386376, 0.786098, 0.190028, 0.753004, 0.237478, 0.567591, 0.965152, 0.828471, 0.877222, 0.116976, 0.693036, 0.443452, 0.786284, 0.606064, 0.226566, 0.828259, 0.053838, 0.386, 0.198328, 0.02068, 0.42605, 0.68029, 0.590084, 0.325152, 0.921931, 0.796091, 0.210988, 0.034982, 0.318075, 0.48228, 0.580232, 0.678768, 0.09887, 0.304984, 0.019762, 0.600408, 0.194608, 0.52352, 0.979004, 0.448093, 0.095281, 0.64977, 0.255251, 0.606873, 0.399026, 0.080846, 0.169124, 0.36307, 0.2695, 0.535121, 0.93394, 0.194648, 0.174861, 0.065465, 0.966589, 0.453444, 0.766798, 0.253523, 0.104522, 0.377747, 0.603238, 0.250274, 0.725676, 0.901512, 0.524463, 0.313436, 0.001922, 0.615343, 0.808081, 0.238602, 0.213971, 0.006894, 0.465442, 0.905185, 0.850737, 0.030124, 0.564093, 0.442609, 0.072634, 0.526111, 0.532262, 0.340035, 0.455233, 0.103447, 0.076606, 0.294525, 0.931479, 0.056217, 0.172048, 0.521016, 0.939413, 0.286163, 0.46414, 0.384151, 0.987867, 0.459082, 0.307492, 0.368255, 0.794998, 0.68603, 0.678703, 0.13156, 0.959128, 0.424574, 0.36862, 0.05878, 0.259408, 0.609898, 0.048765, 0.287303, 0.538427, 0.206718, 0.594389, 0.15144, 0.124314, 0.48862, 0.215496, 0.051478, 0.219301, 0.225121, 0.935786, 0.531289, 0.975956, 0.861088, 0.206847, 0.465261, 0.50436, 0.913014, 0.333399, 0.304596, 0.06838, 0.087894, 0.713345, 0.141789, 0.418769, 0.908679, 0.013084, 0.965374, 0.047994, 0.085919, 0.363198, 0.034239, 0.754333, 0.690669, 0.290785, 0.94795, 0.242934, 0.215126, 0.509788, 0.589397, 0.076212, 0.570353, 0.969658, 0.174531, 0.834149, 0.787386, 0.267285, 0.199114, 0.03634, 0.693418, 0.163863, 0.494362, 0.538793, 0.919941, 0.629077, 0.020851, 0.274568, 0.195257, 0.12906, 0.405016, 0.095609, 0.740127, 0.444496, 0.524301, 0.445408, 0.560227, 0.39051, 0.143521, 0.420362, 0.382405, 0.061962, 0.153041, 0.593645, 0.133818, 0.112509, 0.658211, 0.976697, 0.344855, 0.785491, 0.344399, 0.77298, 0.836014, 0.761925, 0.377206, 0.823497, 0.35349, 0.001755, 0.087144, 0.252499, 0.282515, 0.932589, 0.284451, 0.484097, 0.307114, 0.39289, 0.671965, 0.635435, 0.156707, 0.636363, 0.974734, 0.791084, 0.564722, 0.359535, 0.388772, 0.141901, 0.758982, 0.29676, 0.805203, 0.076042, 0.770147, 0.298379, 0.247568, 0.070238, 0.407507, 0.884364, 0.895503, 0.113418, 0.834083, 0.546114, 0.964607, 0.456607, 0.904683, 0.893774, 0.760262, 0.107429, 0.590634, 0.184444, 0.621151, 0.17881, 0.741824, 0.047637, 0.581145, 0.507053, 0.054359, 0.254883, 0.877014, 0.977305, 0.787699, 0.957696, 0.149071, 0.772918, 0.615349, 0.025165, 0.156857, 0.352235, 0.337066, 0.101944, 0.779723, 0.613733, 0.345772, 0.117223, 0.798189, 0.731196, 0.018939, 0.102367, 0.332956, 0.184135, 0.805293, 0.371774, 0.779685, 0.341777, 0.285597, 0.91222, 0.172227, 0.55888, 0.879474, 0.405015, 0.386914, 0.839366, 0.381409, 0.60476, 0.897704, 0.028783, 0.159685, 0.75223, 0.940266, 0.59005, 0.899712, 0.067124, 0.926906, 0.85266, 0.982246, 0.149935, 0.989587, 0.413706, 0.911908, 0.682735, 0.550577, 0.863438, 0.485212, 0.756039, 0.218439, 0.952051, 0.352969, 0.364964, 0.466354, 0.839212, 0.977393, 0.367737, 0.813124, 0.425058, 0.295414, 0.596682, 0.896385, 0.609848, 0.340731, 0.85043, 0.67308, 0.887943, 0.566803, 0.800001, 0.58301, 0.749052, 0.359576, 0.784532, 0.732046, 0.804574, 0.918819, 0.335569, 0.696812, 0.71287, 0.895873, 0.833108, 0.786387, 0.331355, 0.912188, 0.011481, 0.289965, 0.387442, 0.46799, 0.360912, 0.06069, 0.180392, 0.454069, 0.585631, 0.955361, 0.872309, 0.494025, 0.527182, 0.839647, 0.444565, 0.608676, 0.632268, 0.119203, 0.94732, 0.434722, 0.29148, 0.560189, 0.670412, 0.101588, 0.27335, 0.658733, 0.210378, 0.657065, 0.258497, 0.683027, 0.475994, 0.004383, 0.710513, 0.367239, 0.092594, 0.561533, 0.551928, 0.093615, 0.878275, 0.324908, 0.886456, 0.206195, 0.912491, 0.266342, 0.801514, 0.98746, 0.334167, 0.54373, 0.572722, 0.751346, 0.340022, 0.14958, 0.772998, 0.464386, 0.381245, 0.890348, 0.413657, 0.382386, 0.643679, 0.085107, 0.21329, 0.633817, 0.438088, 0.364322, 0.203962, 0.407442, 0.142254, 0.92775, 0.82981, 0.80122, 0.160987, 0.778401, 0.213118, 0.136864, 0.921953, 0.71789, 0.345701, 0.34301, 0.430906, 0.261435, 0.072052, 0.480426, 0.088222, 0.748558, 0.792373, 0.015316, 0.302615, 0.597723, 0.436744, 0.680357, 0.960435, 0.220987, 0.517439, 0.973911, 0.729113, 0.459292, 0.330848, 0.135101, 0.012575, 0.553478, 0.412949, 0.11087, 0.867994, 0.231343, 0.536203, 0.912387, 0.509629, 0.606514, 0.357243, 0.182168, 0.007171, 0.792569, 0.885068, 0.418641, 0.638918, 0.245992, 0.791801, 0.9099, 0.022883, 0.746148, 0.182737, 0.94247, 0.806825, 0.196771, 0.09015, 0.004521, 0.478729, 0.048536, 0.276169, 0.60486, 0.138293, 0.723876, 0.413212, 0.22675, 0.416836, 0.30475, 0.028393, 0.358084, 0.7672, 0.190352, 0.61894, 0.201564, 0.445476, 0.399799, 0.474933, 0.317969, 0.559481, 0.114577, 0.176565, 0.335574, 0.478018, 0.552867, 0.551105, 0.595266, 0.95465, 0.766192, 0.839603, 0.991886, 0.104903, 0.447889, 0.281173, 0.351098, 0.314285, 0.843905, 0.749682, 0.487028, 0.732243, 0.535218, 0.183082, 0.106938, 0.64203, 0.282174, 0.063756, 0.51815, 0.976486, 0.95921, 0.503945, 0.721225, 0.698644, 0.317459, 0.338014, 0.564109, 0.335834, 0.349116, 0.014445, 0.593706, 0.466678, 0.775617, 0.936338, 0.38809, 0.086795, 0.904587, 0.385176, 0.504965, 0.058854, 0.605893, 0.791361, 0.850064, 0.047566, 0.962599, 0.946217, 0.20075, 0.446995, 0.256774, 0.991486, 0.088782, 0.060995, 0.582442, 0.833088, 0.042989, 0.902633, 0.003389, 0.442025, 0.130771, 0.042023, 0.395741, 0.109654, 0.318829, 0.325558, 0.378192, 0.42791, 0.916665, 0.373786, 0.622225, 0.824513, 0.014393, 0.983857, 0.361377, 0.140467, 0.036013, 0.993558, 0.907306, 0.640008, 0.005712, 0.155938, 0.566936, 0.612498, 0.075058, 0.813012, 0.782878, 0.659164, 0.888314, 0.003268, 0.343347, 0.851451, 0.087634, 0.937329, 0.882229, 0.09483, 0.292216, 0.135619, 0.899591, 0.77861, 0.124855, 0.491477, 0.349732, 0.160373, 0.141948, 0.794209, 0.97059, 0.322845, 0.139149, 0.644673, 0.02953, 0.698424, 0.16252, 0.631422, 0.490116, 0.473014, 0.721434, 0.678964, 0.810097, 0.333521, 0.254568, 0.667969, 0.635367, 0.166888, 0.115822, 0.929856, 0.438494, 0.486765, 0.750086, 0.292957, 0.930867, 0.630128, 0.424238, 0.641995, 0.60086, 0.173042, 0.883051, 0.919918, 0.75884, 0.808164, 0.386298, 0.348011, 0.982914, 0.448712, 0.134837, 0.454992, 0.736006, 0.871009, 0.321862, 0.860381, 0.246823, 0.70069, 0.370596, 0.222814, 0.541136, 0.08547, 0.734537, 0.757748, 0.76064, 0.260973, 0.297367, 0.253411, 0.819584, 0.259087, 0.066955, 0.12461, 0.079532, 0.381886, 0.903784, 0.794729, 0.840485, 0.331158, 0.292329, 0.232597, 0.417923, 0.675795, 0.186618, 0.810992, 0.844772, 0.381843, 0.728125, 0.588693, 0.001013, 0.190983, 0.19154, 0.632882, 0.362922, 0.30945, 0.786699, 0.699634, 0.051182, 0.214831, 0.688051, 0.80535, 0.350358, 0.342104, 0.907602, 0.668348, 0.915068, 0.274132, 0.142975, 0.923508, 0.796099, 0.639367, 0.831134, 0.04563, 0.16681, 0.459626, 0.298013, 0.694536, 0.077994, 0.788146, 0.391608, 0.852967, 0.835363, 0.009572, 0.442836, 0.891602, 0.784282, 0.245725, 0.035856, 0.367237, 0.017692, 0.344328, 0.16977, 0.512237, 0.039692, 0.982336, 0.20207, 0.913987, 0.613151, 0.973418, 0.862571, 0.18334, 0.848884, 0.148588, 0.170201, 0.553852, 0.3386, 0.431153, 0.920087, 0.830152, 0.479916, 0.822684, 0.893409, 0.189366, 0.351435, 0.921387, 0.017944, 0.502166, 0.946818, 0.160257, 0.290077, 0.410126, 0.982824, 0.405145, 0.01671, 0.459341, 0.205677, 0.441392, 0.567739, 0.461079, 0.146043, 0.627767, 0.299763, 0.590262, 0.497978, 0.154572, 0.459094, 0.11649, 0.625266, 0.163903, 0.566837, 0.330518, 0.545043, 0.816923, 0.207402, 0.459119, 0.074033, 0.846676, 0.220996, 0.07924, 0.056811, 0.084792, 0.296485, 0.237375, 0.231675, 0.975115, 0.832303, 0.303373, 0.970628, 0.221938, 0.357426, 0.486191, 0.678527, 0.755559, 0.068609, 0.686173, 0.914742, 0.442469, 0.411575, 0.511004, 0.938911, 0.809264, 0.089086, 0.175653, 0.554813, 0.793945, 0.931434, 0.998258, 0.030901, 0.25529, 0.754944, 0.821029, 0.082083, 0.953286, 0.523866, 0.553316, 0.115152, 0.501841, 0.152342, 0.094182, 0.680488, 0.895247, 0.599766, 0.619911, 0.232751, 0.157685, 0.125304, 0.264969, 0.886996, 0.820248, 0.237317, 0.50118, 0.384776, 0.925901, 0.251136, 0.21677, 0.190616, 0.34236, 0.083407, 0.603881, 0.358262, 0.527983, 0.680349, 0.637353, 0.145238, 0.325516, 0.152138, 0.91483, 0.393752, 0.224525, 0.931739, 0.513534, 0.278815, 0.499372, 0.513111, 0.497779, 0.765426, 0.73186, 0.755718, 0.840441, 0.429937, 0.232604, 0.130188, 0.377366, 0.37629, 0.941481, 0.276665, 0.282532, 0.170695, 0.356653, 0.343, 0.720958, 0.583983, 0.334189, 0.705727, 0.333403, 0.11704, 0.413778, 0.305374, 0.369685, 0.648907, 0.99396, 0.186276, 0.050988, 0.66871, 0.440069, 0.43872, 0.214975, 0.746168, 0.850211, 0.769712, 0.63775, 0.87332, 0.730889, 0.893321, 0.097615, 0.942704, 0.105499, 0.478321, 0.205397, 0.587308, 0.061486, 0.358952, 0.099002, 0.418096, 0.07598, 0.546074, 0.683085, 0.513642, 0.395412, 0.17003, 0.047134, 0.849425, 0.13991, 0.008475, 0.362943, 0.689644, 0.038071, 0.200779, 0.575906, 0.567494, 0.663417, 0.676436, 0.171681, 0.057064, 0.915506, 0.163752, 0.339294, 0.098666, 0.98154, 0.802067, 0.163979, 0.153003, 0.715041, 0.816227, 0.084058, 0.725189, 0.894493, 0.493536, 0.757811, 0.592392, 0.592951, 0.852815, 0.274103, 0.465789, 0.086438, 0.929764, 0.953906, 0.015, 0.279028, 0.500362, 0.534318, 0.091086, 0.635346, 0.190198, 0.339693, 0.216754, 0.013838, 0.37347, 0.577994, 0.249818, 0.72277, 0.8482, 0.819186, 0.315815, 0.384479, 0.143374, 0.19379, 0.231312, 0.478213, 0.91264, 0.976135, 0.944367, 0.453671, 0.509818, 0.994546, 0.16866, 0.104368, 0.360596, 0.453695, 0.13595, 0.81655, 0.631221, 0.035639, 0.22985, 0.532146, 0.210985, 0.891495, 0.3493, 0.948012, 0.269768, 0.924142, 0.439073, 0.084639, 0.613809, 0.160363, 0.789986, 0.49922, 0.718002, 0.760475, 0.996312, 0.40624, 0.855524, 0.768264, 0.636462, 0.009731, 0.436252, 0.912637, 0.35138, 0.58496, 0.81236, 0.994155, 0.865357, 0.288341, 0.796326, 0.7146, 0.367151, 0.83714, 0.74648, 0.622461, 0.130172, 0.61881, 0.226976, 0.252777, 0.866435, 0.370251, 0.989047, 0.580777, 0.774835, 0.002732, 0.087146, 0.784548, 0.581903, 0.620603, 0.065958, 0.997391, 0.827994, 0.043488, 0.374482, 0.739375, 0.124569, 0.903521, 0.518671, 0.510186, 0.281449, 0.727487, 0.943665, 0.44387, 0.764735, 0.298155, 0.181372, 0.678635, 0.335173, 0.595102, 0.644035, 0.395376, 0.422623, 0.75361, 0.90187, 0.113443, 0.673597, 0.085687, 0.009681, 0.668924, 0.925652, 0.130138, 0.527844, 0.623925, 0.691378, 0.087443, 0.919103, 0.407949, 0.088012, 0.899412, 0.829928, 0.337452, 0.598749, 0.028681, 0.276173, 0.251178, 0.857983, 0.302097, 0.089916, 0.363368, 0.640057, 0.497163, 0.344131, 0.034571, 0.320619, 0.360366, 0.561998, 0.813984, 0.329352, 0.802418, 0.752203, 0.454333, 0.572473, 0.350529, 0.49117, 0.019681, 0.801718, 0.541384, 0.806096, 0.227246, 0.95139, 0.628842, 0.990068, 0.437747, 0.381052, 0.020737, 0.530835, 0.552618, 0.619841, 0.378651, 0.917157, 0.567586, 0.927033, 0.031891, 0.565088, 0.073255, 0.519115, 0.011717, 0.375795, 0.581695, 0.110114, 0.884593, 0.194288, 0.382528, 0.931814, 0.021345, 0.575459, 0.252519, 0.994219, 0.218833, 0.811428, 0.491737, 0.913802, 0.968111, 0.920022, 0.289892, 0.485475, 0.577478, 0.955127, 0.524124, 0.440107, 0.339188, 0.008913, 0.473413, 0.364004, 0.338294, 0.22086, 0.888771, 0.400735, 0.408062, 0.970266, 0.675573, 0.132601, 0.018937, 0.507472, 0.055975, 0.793449, 0.767087, 0.32199, 0.772164, 0.463769, 0.94936, 0.140436, 0.173059, 0.038341, 0.766697, 0.070446, 0.128875, 0.842998, 0.529256, 0.626379, 0.639238, 0.115714, 0.501295, 0.966166, 0.603003, 0.242707, 0.970461, 0.089231, 0.728568, 0.21527, 0.855257, 0.661856, 0.841046, 0.504448, 0.389778, 0.327121, 0.944674, 0.76343, 0.256915, 0.757171, 0.082124, 0.19718, 0.658698, 0.371834, 0.003381, 0.77444, 0.012793, 0.560004, 0.920488, 0.272985, 0.935264, 0.521774, 0.500574, 0.482349, 0.3788, 0.261793, 0.73641, 0.796487, 0.087297, 0.20421, 0.919198, 0.440511, 0.448006, 0.38053, 0.961991, 0.977285, 0.500574, 0.565271, 0.804296, 0.246487, 0.356041, 0.662958, 0.693087, 0.672123, 0.446926, 0.69215, 0.366971, 0.32621, 0.275495, 0.822537, 0.513972, 0.231277, 0.627625, 0.523527, 0.100297, 0.386143, 0.519976, 0.570435, 0.983418, 0.740955, 0.309118, 0.955557, 0.966822, 0.493924, 0.086827, 0.506396, 0.929289, 0.692083, 0.848871, 0.38824, 0.410284, 0.53412, 0.513283, 0.035679, 0.731139, 0.476403, 0.009649, 0.962032, 0.36749, 0.103246, 0.341413, 0.774092, 0.692329, 0.949732, 0.867184, 0.011296, 0.829241, 0.438361, 0.22086, 0.844952, 0.583111, 0.349946, 0.288097, 0.48269, 0.246517, 0.095612, 0.771854, 0.921433, 0.850278, 0.19265, 0.956766, 0.67938, 0.67327, 0.382691, 0.694708, 0.576388, 0.754523, 0.652071, 0.669877, 0.408337, 0.839705, 0.568781, 0.307562, 0.631636, 0.041072, 0.229661, 0.791037, 0.418395, 0.451641, 0.938311, 0.106366, 0.582561, 0.912394, 0.155832, 0.251087, 0.409599, 0.145314, 0.035308, 0.815902, 0.069693, 0.792616, 0.887283, 0.198499, 0.100167, 0.372262, 0.14699, 0.490566, 0.758725, 0.966088, 0.522797, 0.376571, 0.120186, 0.861535, 0.693255, 0.748612, 0.565773, 0.556934, 0.247607, 0.555943, 0.226171, 0.911454, 0.410372, 0.847342, 0.5421, 0.455078, 0.794604, 0.976289, 0.48036, 0.39269, 0.553693, 0.359207, 0.160871, 0.602956, 0.195369, 0.324845, 0.635944, 0.91834, 0.971518, 0.566644, 0.035029, 0.117569, 0.160168, 0.296301, 0.834949, 0.890811, 0.061555, 0.629876, 0.357485, 0.50857, 0.809577, 0.65241, 0.884659, 0.59087, 0.707187, 0.290447, 0.315496, 0.35402, 0.600358, 0.920503, 0.917932, 0.389147, 0.162354, 0.515893, 0.539137, 0.88387, 0.317968, 0.448505, 0.551032, 0.399553, 0.876051, 0.917376, 0.768921, 0.595514, 0.58897, 0.643364, 0.935346, 0.294267, 0.527758, 0.975741, 0.863251, 0.672173, 0.931471, 0.55651, 0.695429, 0.224598, 0.567656, 0.754378, 0.618001, 0.327091, 0.66457, 0.411224, 0.771414, 0.611328, 0.223811, 0.800442, 0.578817, 0.460862, 0.114312, 0.371173, 0.516947, 0.053845, 0.669671, 0.407933, 0.423991, 0.432007, 0.350878, 0.62177, 0.005685, 0.967223, 0.075333, 0.693674, 0.835158, 0.224881, 0.433141, 0.049853, 0.284183, 0.421076, 0.815947, 0.160122, 0.182275, 0.093206, 0.834665, 0.145963, 0.487531, 0.507946, 0.635616, 0.118349, 0.969574, 0.154718, 0.160841, 0.96027, 0.340499, 0.547684, 0.473305, 0.209788, 0.905332, 0.482896, 0.138299, 0.142489, 0.680484, 0.469918, 0.406962, 0.123756, 0.458006, 0.442414, 0.451074, 0.585463, 0.414614, 0.77808, 0.992296, 0.743779, 0.909173, 0.72762, 0.443624, 0.721582, 0.916474, 0.132993, 0.93176, 0.491666, 0.121341, 0.234934, 0.977246, 0.919821, 0.115662, 0.012245, 0.420264, 0.825097, 0.053934, 0.677241, 0.773901, 0.343806, 0.846519, 0.303279, 0.852952, 0.525442, 0.053569, 0.645874, 0.043424, 0.93252, 0.409148, 0.944619, 0.154625, 0.317505, 0.676213, 0.308635, 0.2443, 0.751453, 0.228648, 0.317257, 0.057771, 0.259732, 0.400288, 0.290436, 0.383124, 0.712689, 0.312839, 0.045807, 0.860384, 0.772475, 0.373132, 0.130876, 0.24638, 0.168664, 0.441994, 0.236371, 0.133428, 0.870838, 0.428835, 0.486794, 0.209523, 0.785546, 0.215502, 0.223368, 0.103627, 0.256117, 0.968136, 0.978178, 0.843568, 0.569406, 0.628919, 0.491291, 0.746731, 0.608512, 0.003607, 0.793551, 0.388666, 0.36541, 0.322432, 0.294903, 0.878982, 0.440929, 0.84357, 0.041178, 0.785927, 0.432205, 0.558676, 0.229998, 0.890356, 0.904612, 0.080142, 0.258938, 0.309023, 0.494934, 0.510113, 0.722517, 0.293995, 0.4933, 0.747293, 0.253332, 0.208306, 0.511724, 0.075105, 0.900254, 0.234836, 0.498243, 0.026865, 0.153872, 0.506044, 0.343243, 0.733438, 0.241175, 0.799403, 0.180824, 0.469704, 0.160827, 0.674126, 0.610818, 0.629837, 0.460858, 0.097986, 0.841429, 0.222031, 0.255304] 7 | -------------------------------------------------------------------------------- /tests/assets/qrsol_9.sprs: -------------------------------------------------------------------------------- 1 | nzmax: 2010 2 | m: 200 3 | n: 201 4 | p: [0, 5, 20, 28, 42, 53, 67, 79, 91, 100, 109, 123, 135, 146, 158, 171, 182, 192, 208, 221, 233, 243, 248, 260, 270, 278, 283, 288, 298, 315, 323, 328, 338, 345, 352, 362, 368, 383, 393, 404, 414, 421, 431, 448, 460, 467, 479, 489, 496, 502, 509, 519, 531, 540, 549, 560, 566, 574, 580, 597, 605, 621, 633, 641, 648, 663, 671, 682, 687, 697, 704, 718, 726, 734, 741, 756, 764, 773, 783, 794, 811, 824, 835, 843, 852, 860, 871, 884, 893, 905, 915, 928, 939, 951, 954, 961, 966, 973, 984, 997, 1009, 1013, 1023, 1031, 1039, 1047, 1054, 1063, 1075, 1083, 1094, 1108, 1117, 1132, 1140, 1147, 1153, 1166, 1181, 1191, 1201, 1209, 1219, 1228, 1246, 1253, 1264, 1274, 1280, 1286, 1302, 1320, 1334, 1346, 1360, 1371, 1377, 1392, 1404, 1420, 1424, 1434, 1446, 1459, 1473, 1481, 1488, 1500, 1508, 1517, 1527, 1539, 1553, 1561, 1570, 1584, 1589, 1597, 1611, 1618, 1626, 1640, 1654, 1663, 1677, 1688, 1701, 1710, 1718, 1732, 1739, 1747, 1757, 1763, 1767, 1773, 1777, 1784, 1792, 1806, 1817, 1829, 1837, 1846, 1856, 1867, 1873, 1880, 1889, 1897, 1906, 1914, 1927, 1935, 1949, 1952, 1960, 1969, 1983, 1992, 2002, 2010] 5 | i: [97, 105, 112, 186, 189, 0, 5, 17, 24, 38, 53, 59, 71, 92, 97, 100, 105, 115, 117, 130, 10, 42, 63, 108, 117, 133, 167, 180, 2, 15, 20, 26, 33, 36, 63, 78, 99, 104, 112, 118, 140, 189, 19, 24, 41, 45, 74, 105, 152, 154, 157, 179, 183, 15, 42, 56, 64, 76, 93, 107, 108, 131, 141, 159, 183, 186, 190, 16, 24, 32, 44, 62, 119, 120, 135, 139, 148, 170, 192, 7, 9, 16, 87, 93, 95, 117, 118, 147, 168, 184, 193, 16, 56, 104, 121, 137, 167, 169, 172, 176, 35, 39, 43, 67, 70, 108, 136, 140, 193, 17, 20, 30, 32, 63, 83, 85, 100, 109, 121, 123, 134, 167, 178, 8, 13, 22, 34, 44, 61, 62, 64, 81, 118, 160, 189, 22, 75, 108, 132, 143, 151, 158, 167, 172, 175, 189, 17, 43, 45, 98, 111, 124, 140, 143, 148, 177, 184, 199, 10, 21, 22, 35, 59, 68, 144, 150, 153, 156, 176, 184, 194, 11, 14, 19, 44, 124, 146, 148, 149, 181, 190, 192, 14, 28, 52, 84, 104, 110, 130, 159, 164, 199, 1, 2, 5, 9, 28, 30, 46, 97, 122, 141, 150, 157, 161, 172, 182, 187, 3, 23, 24, 42, 45, 52, 60, 81, 86, 131, 137, 146, 181, 7, 51, 129, 135, 138, 140, 161, 163, 168, 171, 182, 197, 37, 45, 52, 58, 62, 120, 122, 136, 152, 165, 9, 43, 72, 74, 152, 15, 19, 62, 82, 84, 95, 96, 97, 112, 152, 167, 194, 26, 31, 47, 51, 72, 73, 101, 159, 165, 172, 25, 50, 67, 72, 97, 126, 162, 187, 8, 27, 98, 99, 155, 10, 31, 72, 137, 165, 23, 50, 58, 87, 88, 101, 112, 117, 118, 124, 31, 34, 44, 63, 76, 77, 95, 110, 128, 132, 135, 138, 163, 164, 179, 184, 197, 34, 35, 56, 66, 85, 172, 179, 198, 9, 85, 98, 152, 193, 22, 67, 77, 79, 83, 90, 106, 116, 122, 187, 34, 89, 96, 150, 153, 155, 179, 40, 42, 45, 84, 128, 148, 167, 5, 44, 51, 60, 61, 97, 122, 136, 153, 169, 66, 89, 163, 169, 180, 193, 19, 29, 37, 68, 92, 98, 101, 148, 150, 151, 161, 177, 178, 190, 198, 7, 12, 25, 43, 70, 127, 152, 162, 177, 186, 35, 38, 47, 82, 100, 120, 123, 124, 127, 137, 151, 5, 23, 31, 63, 89, 114, 131, 142, 152, 162, 25, 59, 61, 90, 164, 195, 197, 12, 27, 43, 51, 84, 101, 170, 175, 188, 197, 4, 13, 14, 53, 57, 65, 69, 70, 90, 108, 119, 123, 126, 149, 160, 162, 182, 9, 17, 18, 24, 26, 76, 87, 133, 142, 143, 151, 162, 59, 69, 80, 99, 115, 128, 160, 4, 51, 56, 65, 86, 103, 105, 130, 132, 142, 164, 175, 7, 47, 51, 98, 100, 118, 123, 149, 167, 192, 23, 27, 47, 98, 114, 124, 151, 12, 26, 27, 98, 102, 124, 16, 72, 122, 127, 140, 149, 158, 34, 43, 55, 57, 62, 77, 86, 148, 165, 186, 6, 14, 20, 23, 36, 47, 85, 102, 135, 138, 155, 171, 8, 9, 88, 91, 127, 142, 175, 187, 193, 4, 39, 55, 60, 83, 124, 126, 172, 189, 2, 20, 23, 25, 53, 76, 111, 118, 173, 183, 191, 7, 28, 59, 93, 105, 127, 25, 40, 41, 51, 65, 171, 179, 184, 34, 71, 94, 113, 179, 193, 4, 15, 18, 27, 58, 75, 81, 86, 99, 102, 146, 160, 161, 172, 174, 191, 196, 7, 51, 67, 82, 119, 139, 154, 193, 25, 38, 52, 58, 63, 68, 80, 81, 97, 101, 116, 130, 154, 155, 163, 178, 11, 38, 42, 67, 97, 119, 130, 143, 155, 179, 186, 199, 6, 27, 52, 99, 107, 146, 169, 171, 4, 11, 60, 62, 127, 175, 179, 4, 54, 79, 85, 93, 120, 127, 140, 141, 155, 164, 187, 192, 196, 197, 9, 50, 53, 67, 88, 151, 154, 185, 10, 41, 65, 75, 99, 103, 118, 120, 129, 175, 187, 91, 102, 113, 121, 190, 31, 61, 90, 91, 93, 103, 138, 143, 151, 154, 10, 21, 25, 58, 75, 166, 186, 28, 48, 53, 71, 107, 116, 118, 120, 127, 130, 164, 179, 195, 199, 28, 32, 37, 91, 103, 128, 171, 176, 24, 34, 73, 74, 90, 99, 145, 146, 20, 22, 62, 157, 164, 169, 176, 1, 12, 15, 30, 41, 53, 56, 58, 62, 83, 92, 110, 119, 148, 189, 38, 45, 51, 57, 78, 102, 113, 176, 27, 28, 72, 78, 88, 109, 113, 173, 194, 0, 17, 70, 99, 101, 102, 110, 131, 136, 142, 17, 25, 27, 33, 37, 72, 98, 102, 110, 127, 172, 1, 3, 26, 29, 35, 40, 49, 63, 95, 101, 119, 142, 144, 155, 175, 190, 192, 0, 3, 6, 78, 81, 96, 122, 127, 131, 142, 175, 178, 180, 7, 24, 38, 41, 45, 117, 126, 145, 166, 188, 199, 20, 28, 70, 76, 95, 154, 171, 187, 11, 48, 76, 92, 113, 136, 147, 181, 193, 17, 41, 80, 86, 87, 129, 165, 171, 8, 27, 76, 84, 98, 105, 110, 128, 133, 146, 159, 35, 36, 59, 66, 85, 93, 96, 99, 131, 133, 157, 168, 171, 3, 17, 63, 78, 109, 115, 161, 163, 164, 9, 36, 52, 64, 75, 118, 160, 162, 173, 184, 192, 199, 61, 74, 87, 97, 122, 127, 130, 136, 159, 166, 4, 13, 14, 23, 39, 64, 87, 109, 122, 169, 176, 183, 191, 2, 38, 42, 88, 102, 127, 131, 157, 158, 176, 189, 15, 27, 30, 32, 42, 68, 71, 81, 89, 108, 140, 151, 45, 56, 114, 30, 33, 49, 84, 159, 176, 196, 84, 146, 179, 187, 193, 1, 15, 24, 27, 30, 118, 129, 6, 15, 18, 83, 93, 117, 134, 155, 190, 192, 196, 1, 4, 5, 54, 69, 82, 139, 147, 163, 177, 190, 191, 193, 7, 43, 52, 59, 62, 81, 95, 125, 140, 142, 146, 181, 32, 73, 98, 170, 4, 14, 38, 80, 100, 112, 116, 123, 130, 186, 22, 35, 47, 73, 84, 166, 176, 187, 55, 80, 81, 98, 153, 175, 185, 199, 3, 29, 94, 100, 110, 128, 149, 159, 35, 41, 93, 105, 169, 170, 177, 13, 21, 35, 79, 82, 103, 136, 185, 186, 15, 34, 37, 57, 58, 91, 94, 112, 124, 155, 156, 185, 9, 19, 69, 72, 97, 132, 140, 195, 9, 30, 54, 65, 107, 110, 113, 121, 133, 175, 179, 1, 4, 20, 64, 66, 73, 86, 98, 137, 138, 169, 185, 192, 194, 3, 55, 62, 79, 87, 142, 150, 163, 190, 4, 23, 26, 41, 48, 72, 86, 87, 111, 131, 132, 166, 169, 185, 193, 9, 66, 79, 95, 104, 105, 157, 167, 10, 16, 144, 145, 149, 154, 199, 36, 64, 83, 94, 155, 168, 8, 18, 39, 50, 69, 79, 103, 121, 126, 147, 152, 183, 196, 13, 15, 25, 37, 41, 46, 62, 64, 66, 91, 94, 102, 131, 135, 179, 24, 37, 77, 81, 95, 99, 118, 143, 175, 184, 26, 45, 55, 80, 87, 120, 140, 182, 185, 195, 6, 51, 55, 84, 87, 112, 115, 145, 12, 15, 77, 82, 90, 91, 97, 153, 156, 163, 7, 31, 54, 55, 70, 124, 132, 176, 184, 11, 32, 40, 48, 50, 52, 60, 70, 91, 111, 128, 134, 142, 151, 169, 170, 182, 183, 11, 69, 87, 110, 137, 180, 198, 11, 33, 73, 80, 88, 97, 132, 176, 184, 192, 194, 4, 10, 18, 19, 39, 65, 89, 116, 147, 191, 21, 57, 147, 157, 180, 191, 56, 101, 153, 180, 194, 199, 14, 55, 72, 76, 86, 93, 124, 127, 147, 150, 153, 164, 184, 187, 188, 189, 3, 42, 53, 59, 71, 82, 83, 98, 118, 122, 130, 132, 144, 150, 159, 168, 178, 183, 7, 17, 70, 77, 91, 101, 103, 104, 111, 118, 127, 129, 142, 183, 26, 27, 46, 47, 48, 53, 68, 91, 117, 155, 183, 198, 3, 11, 19, 74, 81, 107, 113, 119, 122, 141, 172, 174, 179, 190, 1, 15, 22, 34, 50, 68, 71, 121, 143, 149, 168, 58, 80, 96, 171, 186, 191, 26, 38, 58, 61, 68, 77, 99, 100, 116, 126, 154, 171, 188, 191, 193, 14, 31, 37, 38, 51, 67, 79, 93, 99, 131, 137, 157, 27, 41, 47, 55, 64, 65, 69, 85, 91, 122, 123, 126, 135, 150, 163, 188, 82, 123, 175, 184, 69, 87, 91, 98, 102, 144, 168, 169, 171, 173, 7, 15, 37, 47, 49, 77, 93, 97, 99, 111, 112, 123, 7, 18, 31, 40, 67, 74, 86, 98, 120, 138, 143, 158, 199, 19, 52, 54, 67, 83, 119, 134, 136, 142, 153, 156, 160, 166, 189, 10, 29, 70, 72, 89, 143, 181, 184, 10, 76, 82, 121, 161, 176, 185, 38, 49, 56, 69, 78, 103, 105, 107, 108, 162, 165, 191, 20, 38, 61, 72, 89, 90, 138, 141, 3, 23, 26, 39, 54, 89, 116, 149, 159, 1, 11, 50, 74, 75, 81, 97, 150, 161, 175, 28, 42, 64, 80, 102, 104, 126, 150, 159, 182, 187, 192, 24, 34, 50, 53, 85, 86, 90, 108, 109, 128, 157, 167, 172, 184, 4, 47, 60, 102, 131, 181, 184, 197, 8, 47, 55, 121, 122, 164, 183, 187, 198, 10, 13, 33, 37, 41, 43, 63, 71, 74, 76, 81, 90, 122, 154, 11, 49, 56, 82, 179, 12, 17, 24, 35, 45, 62, 117, 168, 1, 22, 29, 59, 60, 62, 66, 69, 76, 80, 107, 119, 164, 172, 1, 18, 25, 37, 45, 126, 170, 27, 47, 48, 65, 116, 122, 157, 199, 16, 20, 28, 38, 73, 89, 91, 95, 104, 108, 136, 166, 180, 194, 25, 32, 40, 46, 48, 51, 77, 92, 93, 103, 151, 176, 190, 195, 31, 32, 50, 73, 80, 105, 119, 182, 195, 19, 48, 65, 68, 73, 76, 78, 93, 96, 98, 99, 114, 130, 159, 34, 43, 88, 91, 106, 109, 118, 137, 152, 170, 177, 38, 54, 57, 71, 94, 102, 103, 105, 140, 142, 149, 175, 176, 44, 63, 90, 100, 108, 122, 153, 177, 198, 8, 60, 103, 104, 138, 150, 152, 164, 12, 23, 35, 47, 67, 78, 88, 102, 121, 148, 155, 163, 170, 189, 23, 31, 82, 96, 113, 118, 168, 42, 86, 99, 124, 129, 133, 141, 164, 14, 39, 47, 76, 92, 105, 109, 132, 136, 165, 63, 68, 71, 76, 116, 189, 28, 176, 181, 189, 10, 37, 70, 76, 111, 142, 39, 68, 142, 161, 11, 55, 86, 97, 109, 166, 167, 2, 6, 11, 12, 27, 46, 69, 99, 0, 13, 33, 66, 71, 90, 91, 126, 139, 146, 165, 172, 179, 180, 3, 11, 13, 43, 68, 106, 131, 136, 145, 184, 193, 26, 35, 51, 54, 58, 62, 82, 99, 110, 120, 124, 167, 16, 19, 28, 38, 57, 70, 73, 156, 0, 12, 25, 30, 74, 115, 130, 161, 167, 19, 25, 33, 44, 101, 112, 113, 139, 147, 156, 8, 50, 53, 58, 92, 111, 124, 130, 143, 152, 186, 52, 107, 120, 149, 168, 179, 17, 20, 21, 64, 117, 181, 184, 6, 7, 33, 81, 83, 94, 95, 113, 151, 21, 55, 79, 82, 93, 104, 156, 198, 14, 24, 43, 71, 78, 93, 103, 162, 176, 74, 97, 106, 122, 156, 174, 184, 188, 19, 38, 43, 46, 49, 59, 75, 83, 86, 104, 162, 163, 172, 41, 56, 80, 100, 112, 114, 118, 122, 11, 15, 25, 33, 39, 48, 80, 99, 107, 129, 131, 164, 183, 197, 51, 81, 84, 6, 9, 30, 46, 118, 129, 137, 160, 28, 51, 57, 113, 128, 134, 147, 151, 178, 2, 3, 8, 10, 21, 27, 44, 50, 54, 68, 87, 123, 126, 154, 12, 52, 60, 86, 96, 120, 130, 163, 173, 5, 30, 46, 63, 78, 91, 93, 116, 166, 175, 28, 97, 140, 162, 173, 179, 189, 196] 6 | x: [0.543663, 0.749018, 0.788113, 0.574737, 0.713796, 0.342713, 0.398131, 0.301727, 0.974222, 0.613475, 0.966053, 0.556695, 0.430278, 0.599586, 0.435176, 0.520129, 0.516997, 0.100751, 0.585609, 0.532624, 0.187713, 0.347261, 0.686638, 0.172605, 0.810628, 0.109862, 0.552175, 0.974836, 0.432368, 0.403501, 0.705077, 0.96387, 0.54055, 0.712415, 0.429239, 0.009333, 0.963612, 0.76211, 0.433299, 0.327942, 0.283268, 0.234118, 0.000341, 0.095949, 0.025151, 0.367286, 0.801076, 0.700825, 0.887637, 0.395366, 0.658856, 0.113949, 0.06616, 0.459642, 0.581093, 0.05734, 0.073596, 0.829562, 0.131831, 0.975958, 0.036426, 0.047787, 0.136007, 0.123861, 0.79837, 0.795955, 0.515766, 0.550811, 0.137304, 0.989186, 0.52474, 0.83975, 0.136652, 0.858402, 0.917057, 0.183528, 0.523592, 0.340478, 0.487431, 0.48223, 0.62288, 0.244173, 0.421006, 0.28735, 0.399263, 0.475354, 0.6809, 0.542992, 0.217865, 0.338999, 0.41996, 0.123381, 0.760343, 0.829081, 0.488486, 0.904406, 0.783102, 0.466219, 0.248771, 0.794589, 0.622391, 0.226534, 0.747662, 0.288565, 0.475879, 0.730718, 0.489619, 0.861657, 0.798142, 0.625636, 0.153519, 0.870913, 0.668086, 0.976439, 0.672451, 0.199157, 0.234251, 0.319206, 0.928845, 0.749848, 0.687579, 0.922338, 0.268124, 0.587362, 0.347186, 0.006226, 0.337712, 0.745093, 0.208258, 0.608161, 0.880847, 0.305053, 0.583504, 0.258096, 0.858691, 0.299175, 0.361113, 0.324562, 0.416922, 0.354623, 0.861335, 0.570892, 0.709639, 0.5706, 0.513679, 0.913814, 0.18839, 0.754153, 0.553483, 0.436752, 0.496721, 0.338535, 0.015908, 0.971111, 0.189011, 0.867883, 0.640929, 0.834012, 0.604478, 0.032336, 0.557067, 0.039268, 0.227653, 0.219062, 0.184434, 0.120229, 0.256385, 0.208522, 0.460547, 0.61133, 0.293556, 0.651069, 0.384943, 0.34014, 0.764071, 0.466312, 0.530459, 0.311821, 0.895171, 0.762661, 0.500401, 0.904282, 0.913153, 0.219471, 0.839142, 0.905463, 0.680819, 0.890688, 0.500419, 0.268169, 0.498674, 0.497868, 0.595128, 0.536425, 0.794006, 0.679571, 0.258095, 0.974381, 0.293959, 0.354651, 0.096594, 0.443865, 0.383248, 0.567597, 0.880581, 0.625165, 0.230768, 0.715905, 0.515005, 0.901124, 0.051827, 0.073391, 0.728764, 0.470371, 0.206807, 0.746042, 0.468952, 0.39844, 0.395136, 0.709445, 0.24962, 0.424523, 0.313027, 0.798058, 0.339446, 0.664018, 0.829109, 0.942526, 0.09059, 0.144159, 0.566253, 0.222223, 0.346471, 0.974574, 0.067344, 0.944257, 0.266221, 0.133715, 0.045152, 0.008855, 0.576742, 0.450528, 0.660955, 0.733567, 0.861977, 0.89586, 0.749284, 0.229023, 0.770207, 0.324097, 0.061378, 0.444625, 0.398749, 0.298131, 0.133173, 0.295009, 0.276037, 0.00923, 0.128169, 0.38468, 0.068507, 0.84348, 0.77236, 0.399619, 0.218226, 0.967032, 0.474655, 0.904921, 0.665106, 0.736009, 0.603643, 0.597061, 0.087772, 0.780868, 0.452946, 0.955438, 0.863758, 0.378972, 0.279962, 0.504616, 0.585904, 0.190733, 0.340394, 0.25362, 0.11097, 0.461523, 0.817516, 0.680884, 0.612605, 0.827574, 0.936419, 0.375498, 0.187381, 0.973413, 0.800343, 0.757632, 0.659648, 0.032751, 0.384048, 0.35712, 0.931703, 0.092531, 0.124322, 0.157388, 0.730992, 0.891583, 0.689421, 0.58047, 0.392949, 0.904771, 0.264743, 0.190658, 0.347368, 0.393825, 0.988621, 0.748919, 0.998143, 0.287294, 0.996384, 0.188604, 0.006074, 0.608097, 0.945983, 0.207137, 0.752387, 0.093803, 0.313484, 0.90257, 0.008248, 0.260043, 0.673392, 0.75825, 0.835724, 0.652497, 0.657264, 0.980589, 0.712831, 0.964168, 0.849476, 0.665515, 0.314755, 0.430213, 0.081089, 0.728672, 0.721597, 0.660822, 0.019078, 0.84042, 0.830011, 0.756261, 0.525146, 0.115937, 0.663727, 0.738713, 0.607825, 0.037366, 0.663365, 0.381077, 0.567512, 0.167982, 0.583746, 0.530876, 0.513558, 0.421406, 0.418815, 0.333494, 0.598896, 0.757151, 0.544671, 0.365823, 0.727111, 0.90645, 0.928472, 0.272021, 0.214685, 0.653799, 0.119336, 0.978538, 0.269576, 0.089177, 0.313135, 0.711534, 0.967092, 0.858904, 0.778287, 0.965933, 0.37767, 0.069748, 0.160595, 0.132126, 0.168813, 0.62813, 0.142633, 0.03014, 0.618875, 0.849432, 0.959289, 0.97945, 0.227618, 0.183247, 0.624242, 0.188933, 0.700232, 0.776656, 0.11015, 0.607371, 0.349953, 0.971829, 0.754615, 0.706741, 0.587061, 0.408793, 0.110447, 0.07447, 0.565834, 0.558291, 0.646859, 0.954526, 0.86983, 0.062317, 0.40963, 0.369452, 0.61157, 0.142824, 0.863868, 0.946538, 0.316096, 0.933568, 0.595794, 0.717687, 0.646592, 0.386376, 0.786098, 0.190028, 0.753004, 0.237478, 0.567591, 0.965152, 0.828471, 0.877222, 0.116976, 0.693036, 0.443452, 0.786284, 0.606064, 0.226566, 0.828259, 0.053838, 0.386, 0.198328, 0.02068, 0.42605, 0.68029, 0.590084, 0.325152, 0.921931, 0.796091, 0.210988, 0.034982, 0.318075, 0.48228, 0.580232, 0.678768, 0.09887, 0.304984, 0.019762, 0.600408, 0.194608, 0.52352, 0.979004, 0.448093, 0.095281, 0.64977, 0.255251, 0.606873, 0.399026, 0.080846, 0.169124, 0.36307, 0.2695, 0.535121, 0.93394, 0.194648, 0.174861, 0.065465, 0.966589, 0.453444, 0.766798, 0.253523, 0.104522, 0.377747, 0.603238, 0.250274, 0.725676, 0.901512, 0.524463, 0.313436, 0.001922, 0.615343, 0.808081, 0.238602, 0.213971, 0.006894, 0.465442, 0.905185, 0.850737, 0.030124, 0.564093, 0.442609, 0.072634, 0.526111, 0.532262, 0.340035, 0.455233, 0.103447, 0.076606, 0.294525, 0.931479, 0.056217, 0.172048, 0.521016, 0.939413, 0.286163, 0.46414, 0.384151, 0.987867, 0.459082, 0.307492, 0.368255, 0.794998, 0.68603, 0.678703, 0.13156, 0.959128, 0.424574, 0.36862, 0.05878, 0.259408, 0.609898, 0.048765, 0.287303, 0.538427, 0.206718, 0.594389, 0.15144, 0.124314, 0.48862, 0.215496, 0.051478, 0.219301, 0.225121, 0.935786, 0.531289, 0.975956, 0.861088, 0.206847, 0.465261, 0.50436, 0.913014, 0.333399, 0.304596, 0.06838, 0.087894, 0.713345, 0.141789, 0.418769, 0.908679, 0.013084, 0.965374, 0.047994, 0.085919, 0.363198, 0.034239, 0.754333, 0.690669, 0.290785, 0.94795, 0.242934, 0.215126, 0.509788, 0.589397, 0.076212, 0.570353, 0.969658, 0.174531, 0.834149, 0.787386, 0.267285, 0.199114, 0.03634, 0.693418, 0.163863, 0.494362, 0.538793, 0.919941, 0.629077, 0.020851, 0.274568, 0.195257, 0.12906, 0.405016, 0.095609, 0.740127, 0.444496, 0.524301, 0.445408, 0.560227, 0.39051, 0.143521, 0.420362, 0.382405, 0.061962, 0.153041, 0.593645, 0.133818, 0.112509, 0.658211, 0.976697, 0.344855, 0.785491, 0.344399, 0.77298, 0.836014, 0.761925, 0.377206, 0.823497, 0.35349, 0.001755, 0.087144, 0.252499, 0.282515, 0.932589, 0.284451, 0.484097, 0.307114, 0.39289, 0.671965, 0.635435, 0.156707, 0.636363, 0.974734, 0.791084, 0.564722, 0.359535, 0.388772, 0.141901, 0.758982, 0.29676, 0.805203, 0.076042, 0.770147, 0.298379, 0.247568, 0.070238, 0.407507, 0.884364, 0.895503, 0.113418, 0.834083, 0.546114, 0.964607, 0.456607, 0.904683, 0.893774, 0.760262, 0.107429, 0.590634, 0.184444, 0.621151, 0.17881, 0.741824, 0.047637, 0.581145, 0.507053, 0.054359, 0.254883, 0.877014, 0.977305, 0.787699, 0.957696, 0.149071, 0.772918, 0.615349, 0.025165, 0.156857, 0.352235, 0.337066, 0.101944, 0.779723, 0.613733, 0.345772, 0.117223, 0.798189, 0.731196, 0.018939, 0.102367, 0.332956, 0.184135, 0.805293, 0.371774, 0.779685, 0.341777, 0.285597, 0.91222, 0.172227, 0.55888, 0.879474, 0.405015, 0.386914, 0.839366, 0.381409, 0.60476, 0.897704, 0.028783, 0.159685, 0.75223, 0.940266, 0.59005, 0.899712, 0.067124, 0.926906, 0.85266, 0.982246, 0.149935, 0.989587, 0.413706, 0.911908, 0.682735, 0.550577, 0.863438, 0.485212, 0.756039, 0.218439, 0.952051, 0.352969, 0.364964, 0.466354, 0.839212, 0.977393, 0.367737, 0.813124, 0.425058, 0.295414, 0.596682, 0.896385, 0.609848, 0.340731, 0.85043, 0.67308, 0.887943, 0.566803, 0.800001, 0.58301, 0.749052, 0.359576, 0.784532, 0.732046, 0.804574, 0.918819, 0.335569, 0.696812, 0.71287, 0.895873, 0.833108, 0.786387, 0.331355, 0.912188, 0.011481, 0.289965, 0.387442, 0.46799, 0.360912, 0.06069, 0.180392, 0.454069, 0.585631, 0.955361, 0.872309, 0.494025, 0.527182, 0.839647, 0.444565, 0.608676, 0.632268, 0.119203, 0.94732, 0.434722, 0.29148, 0.560189, 0.670412, 0.101588, 0.27335, 0.658733, 0.210378, 0.657065, 0.258497, 0.683027, 0.475994, 0.004383, 0.710513, 0.367239, 0.092594, 0.561533, 0.551928, 0.093615, 0.878275, 0.324908, 0.886456, 0.206195, 0.912491, 0.266342, 0.801514, 0.98746, 0.334167, 0.54373, 0.572722, 0.751346, 0.340022, 0.14958, 0.772998, 0.464386, 0.381245, 0.890348, 0.413657, 0.382386, 0.643679, 0.085107, 0.21329, 0.633817, 0.438088, 0.364322, 0.203962, 0.407442, 0.142254, 0.92775, 0.82981, 0.80122, 0.160987, 0.778401, 0.213118, 0.136864, 0.921953, 0.71789, 0.345701, 0.34301, 0.430906, 0.261435, 0.072052, 0.480426, 0.088222, 0.748558, 0.792373, 0.015316, 0.302615, 0.597723, 0.436744, 0.680357, 0.960435, 0.220987, 0.517439, 0.973911, 0.729113, 0.459292, 0.330848, 0.135101, 0.012575, 0.553478, 0.412949, 0.11087, 0.867994, 0.231343, 0.536203, 0.912387, 0.509629, 0.606514, 0.357243, 0.182168, 0.007171, 0.792569, 0.885068, 0.418641, 0.638918, 0.245992, 0.791801, 0.9099, 0.022883, 0.746148, 0.182737, 0.94247, 0.806825, 0.196771, 0.09015, 0.004521, 0.478729, 0.048536, 0.276169, 0.60486, 0.138293, 0.723876, 0.413212, 0.22675, 0.416836, 0.30475, 0.028393, 0.358084, 0.7672, 0.190352, 0.61894, 0.201564, 0.445476, 0.399799, 0.474933, 0.317969, 0.559481, 0.114577, 0.176565, 0.335574, 0.478018, 0.552867, 0.551105, 0.595266, 0.95465, 0.766192, 0.839603, 0.991886, 0.104903, 0.447889, 0.281173, 0.351098, 0.314285, 0.843905, 0.749682, 0.487028, 0.732243, 0.535218, 0.183082, 0.106938, 0.64203, 0.282174, 0.063756, 0.51815, 0.976486, 0.95921, 0.503945, 0.721225, 0.698644, 0.317459, 0.338014, 0.564109, 0.335834, 0.349116, 0.014445, 0.593706, 0.466678, 0.775617, 0.936338, 0.38809, 0.086795, 0.904587, 0.385176, 0.504965, 0.058854, 0.605893, 0.791361, 0.850064, 0.047566, 0.962599, 0.946217, 0.20075, 0.446995, 0.256774, 0.991486, 0.088782, 0.060995, 0.582442, 0.833088, 0.042989, 0.902633, 0.003389, 0.442025, 0.130771, 0.042023, 0.395741, 0.109654, 0.318829, 0.325558, 0.378192, 0.42791, 0.916665, 0.373786, 0.622225, 0.824513, 0.014393, 0.983857, 0.361377, 0.140467, 0.036013, 0.993558, 0.907306, 0.640008, 0.005712, 0.155938, 0.566936, 0.612498, 0.075058, 0.813012, 0.782878, 0.659164, 0.888314, 0.003268, 0.343347, 0.851451, 0.087634, 0.937329, 0.882229, 0.09483, 0.292216, 0.135619, 0.899591, 0.77861, 0.124855, 0.491477, 0.349732, 0.160373, 0.141948, 0.794209, 0.97059, 0.322845, 0.139149, 0.644673, 0.02953, 0.698424, 0.16252, 0.631422, 0.490116, 0.473014, 0.721434, 0.678964, 0.810097, 0.333521, 0.254568, 0.667969, 0.635367, 0.166888, 0.115822, 0.929856, 0.438494, 0.486765, 0.750086, 0.292957, 0.930867, 0.630128, 0.424238, 0.641995, 0.60086, 0.173042, 0.883051, 0.919918, 0.75884, 0.808164, 0.386298, 0.348011, 0.982914, 0.448712, 0.134837, 0.454992, 0.736006, 0.871009, 0.321862, 0.860381, 0.246823, 0.70069, 0.370596, 0.222814, 0.541136, 0.08547, 0.734537, 0.757748, 0.76064, 0.260973, 0.297367, 0.253411, 0.819584, 0.259087, 0.066955, 0.12461, 0.079532, 0.381886, 0.903784, 0.794729, 0.840485, 0.331158, 0.292329, 0.232597, 0.417923, 0.675795, 0.186618, 0.810992, 0.844772, 0.381843, 0.728125, 0.588693, 0.001013, 0.190983, 0.19154, 0.632882, 0.362922, 0.30945, 0.786699, 0.699634, 0.051182, 0.214831, 0.688051, 0.80535, 0.350358, 0.342104, 0.907602, 0.668348, 0.915068, 0.274132, 0.142975, 0.923508, 0.796099, 0.639367, 0.831134, 0.04563, 0.16681, 0.459626, 0.298013, 0.694536, 0.077994, 0.788146, 0.391608, 0.852967, 0.835363, 0.009572, 0.442836, 0.891602, 0.784282, 0.245725, 0.035856, 0.367237, 0.017692, 0.344328, 0.16977, 0.512237, 0.039692, 0.982336, 0.20207, 0.913987, 0.613151, 0.973418, 0.862571, 0.18334, 0.848884, 0.148588, 0.170201, 0.553852, 0.3386, 0.431153, 0.920087, 0.830152, 0.479916, 0.822684, 0.893409, 0.189366, 0.351435, 0.921387, 0.017944, 0.502166, 0.946818, 0.160257, 0.290077, 0.410126, 0.982824, 0.405145, 0.01671, 0.459341, 0.205677, 0.441392, 0.567739, 0.461079, 0.146043, 0.627767, 0.299763, 0.590262, 0.497978, 0.154572, 0.459094, 0.11649, 0.625266, 0.163903, 0.566837, 0.330518, 0.545043, 0.816923, 0.207402, 0.459119, 0.074033, 0.846676, 0.220996, 0.07924, 0.056811, 0.084792, 0.296485, 0.237375, 0.231675, 0.975115, 0.832303, 0.303373, 0.970628, 0.221938, 0.357426, 0.486191, 0.678527, 0.755559, 0.068609, 0.686173, 0.914742, 0.442469, 0.411575, 0.511004, 0.938911, 0.809264, 0.089086, 0.175653, 0.554813, 0.793945, 0.931434, 0.998258, 0.030901, 0.25529, 0.754944, 0.821029, 0.082083, 0.953286, 0.523866, 0.553316, 0.115152, 0.501841, 0.152342, 0.094182, 0.680488, 0.895247, 0.599766, 0.619911, 0.232751, 0.157685, 0.125304, 0.264969, 0.886996, 0.820248, 0.237317, 0.50118, 0.384776, 0.925901, 0.251136, 0.21677, 0.190616, 0.34236, 0.083407, 0.603881, 0.358262, 0.527983, 0.680349, 0.637353, 0.145238, 0.325516, 0.152138, 0.91483, 0.393752, 0.224525, 0.931739, 0.513534, 0.278815, 0.499372, 0.513111, 0.497779, 0.765426, 0.73186, 0.755718, 0.840441, 0.429937, 0.232604, 0.130188, 0.377366, 0.37629, 0.941481, 0.276665, 0.282532, 0.170695, 0.356653, 0.343, 0.720958, 0.583983, 0.334189, 0.705727, 0.333403, 0.11704, 0.413778, 0.305374, 0.369685, 0.648907, 0.99396, 0.186276, 0.050988, 0.66871, 0.440069, 0.43872, 0.214975, 0.746168, 0.850211, 0.769712, 0.63775, 0.87332, 0.730889, 0.893321, 0.097615, 0.942704, 0.105499, 0.478321, 0.205397, 0.587308, 0.061486, 0.358952, 0.099002, 0.418096, 0.07598, 0.546074, 0.683085, 0.513642, 0.395412, 0.17003, 0.047134, 0.849425, 0.13991, 0.008475, 0.362943, 0.689644, 0.038071, 0.200779, 0.575906, 0.567494, 0.663417, 0.676436, 0.171681, 0.057064, 0.915506, 0.163752, 0.339294, 0.098666, 0.98154, 0.802067, 0.163979, 0.153003, 0.715041, 0.816227, 0.084058, 0.725189, 0.894493, 0.493536, 0.757811, 0.592392, 0.592951, 0.852815, 0.274103, 0.465789, 0.086438, 0.929764, 0.953906, 0.015, 0.279028, 0.500362, 0.534318, 0.091086, 0.635346, 0.190198, 0.339693, 0.216754, 0.013838, 0.37347, 0.577994, 0.249818, 0.72277, 0.8482, 0.819186, 0.315815, 0.384479, 0.143374, 0.19379, 0.231312, 0.478213, 0.91264, 0.976135, 0.944367, 0.453671, 0.509818, 0.994546, 0.16866, 0.104368, 0.360596, 0.453695, 0.13595, 0.81655, 0.631221, 0.035639, 0.22985, 0.532146, 0.210985, 0.891495, 0.3493, 0.948012, 0.269768, 0.924142, 0.439073, 0.084639, 0.613809, 0.160363, 0.789986, 0.49922, 0.718002, 0.760475, 0.996312, 0.40624, 0.855524, 0.768264, 0.636462, 0.009731, 0.436252, 0.912637, 0.35138, 0.58496, 0.81236, 0.994155, 0.865357, 0.288341, 0.796326, 0.7146, 0.367151, 0.83714, 0.74648, 0.622461, 0.130172, 0.61881, 0.226976, 0.252777, 0.866435, 0.370251, 0.989047, 0.580777, 0.774835, 0.002732, 0.087146, 0.784548, 0.581903, 0.620603, 0.065958, 0.997391, 0.827994, 0.043488, 0.374482, 0.739375, 0.124569, 0.903521, 0.518671, 0.510186, 0.281449, 0.727487, 0.943665, 0.44387, 0.764735, 0.298155, 0.181372, 0.678635, 0.335173, 0.595102, 0.644035, 0.395376, 0.422623, 0.75361, 0.90187, 0.113443, 0.673597, 0.085687, 0.009681, 0.668924, 0.925652, 0.130138, 0.527844, 0.623925, 0.691378, 0.087443, 0.919103, 0.407949, 0.088012, 0.899412, 0.829928, 0.337452, 0.598749, 0.028681, 0.276173, 0.251178, 0.857983, 0.302097, 0.089916, 0.363368, 0.640057, 0.497163, 0.344131, 0.034571, 0.320619, 0.360366, 0.561998, 0.813984, 0.329352, 0.802418, 0.752203, 0.454333, 0.572473, 0.350529, 0.49117, 0.019681, 0.801718, 0.541384, 0.806096, 0.227246, 0.95139, 0.628842, 0.990068, 0.437747, 0.381052, 0.020737, 0.530835, 0.552618, 0.619841, 0.378651, 0.917157, 0.567586, 0.927033, 0.031891, 0.565088, 0.073255, 0.519115, 0.011717, 0.375795, 0.581695, 0.110114, 0.884593, 0.194288, 0.382528, 0.931814, 0.021345, 0.575459, 0.252519, 0.994219, 0.218833, 0.811428, 0.491737, 0.913802, 0.968111, 0.920022, 0.289892, 0.485475, 0.577478, 0.955127, 0.524124, 0.440107, 0.339188, 0.008913, 0.473413, 0.364004, 0.338294, 0.22086, 0.888771, 0.400735, 0.408062, 0.970266, 0.675573, 0.132601, 0.018937, 0.507472, 0.055975, 0.793449, 0.767087, 0.32199, 0.772164, 0.463769, 0.94936, 0.140436, 0.173059, 0.038341, 0.766697, 0.070446, 0.128875, 0.842998, 0.529256, 0.626379, 0.639238, 0.115714, 0.501295, 0.966166, 0.603003, 0.242707, 0.970461, 0.089231, 0.728568, 0.21527, 0.855257, 0.661856, 0.841046, 0.504448, 0.389778, 0.327121, 0.944674, 0.76343, 0.256915, 0.757171, 0.082124, 0.19718, 0.658698, 0.371834, 0.003381, 0.77444, 0.012793, 0.560004, 0.920488, 0.272985, 0.935264, 0.521774, 0.500574, 0.482349, 0.3788, 0.261793, 0.73641, 0.796487, 0.087297, 0.20421, 0.919198, 0.440511, 0.448006, 0.38053, 0.961991, 0.977285, 0.500574, 0.565271, 0.804296, 0.246487, 0.356041, 0.662958, 0.693087, 0.672123, 0.446926, 0.69215, 0.366971, 0.32621, 0.275495, 0.822537, 0.513972, 0.231277, 0.627625, 0.523527, 0.100297, 0.386143, 0.519976, 0.570435, 0.983418, 0.740955, 0.309118, 0.955557, 0.966822, 0.493924, 0.086827, 0.506396, 0.929289, 0.692083, 0.848871, 0.38824, 0.410284, 0.53412, 0.513283, 0.035679, 0.731139, 0.476403, 0.009649, 0.962032, 0.36749, 0.103246, 0.341413, 0.774092, 0.692329, 0.949732, 0.867184, 0.011296, 0.829241, 0.438361, 0.22086, 0.844952, 0.583111, 0.349946, 0.288097, 0.48269, 0.246517, 0.095612, 0.771854, 0.921433, 0.850278, 0.19265, 0.956766, 0.67938, 0.67327, 0.382691, 0.694708, 0.576388, 0.754523, 0.652071, 0.669877, 0.408337, 0.839705, 0.568781, 0.307562, 0.631636, 0.041072, 0.229661, 0.791037, 0.418395, 0.451641, 0.938311, 0.106366, 0.582561, 0.912394, 0.155832, 0.251087, 0.409599, 0.145314, 0.035308, 0.815902, 0.069693, 0.792616, 0.887283, 0.198499, 0.100167, 0.372262, 0.14699, 0.490566, 0.758725, 0.966088, 0.522797, 0.376571, 0.120186, 0.861535, 0.693255, 0.748612, 0.565773, 0.556934, 0.247607, 0.555943, 0.226171, 0.911454, 0.410372, 0.847342, 0.5421, 0.455078, 0.794604, 0.976289, 0.48036, 0.39269, 0.553693, 0.359207, 0.160871, 0.602956, 0.195369, 0.324845, 0.635944, 0.91834, 0.971518, 0.566644, 0.035029, 0.117569, 0.160168, 0.296301, 0.834949, 0.890811, 0.061555, 0.629876, 0.357485, 0.50857, 0.809577, 0.65241, 0.884659, 0.59087, 0.707187, 0.290447, 0.315496, 0.35402, 0.600358, 0.920503, 0.917932, 0.389147, 0.162354, 0.515893, 0.539137, 0.88387, 0.317968, 0.448505, 0.551032, 0.399553, 0.876051, 0.917376, 0.768921, 0.595514, 0.58897, 0.643364, 0.935346, 0.294267, 0.527758, 0.975741, 0.863251, 0.672173, 0.931471, 0.55651, 0.695429, 0.224598, 0.567656, 0.754378, 0.618001, 0.327091, 0.66457, 0.411224, 0.771414, 0.611328, 0.223811, 0.800442, 0.578817, 0.460862, 0.114312, 0.371173, 0.516947, 0.053845, 0.669671, 0.407933, 0.423991, 0.432007, 0.350878, 0.62177, 0.005685, 0.967223, 0.075333, 0.693674, 0.835158, 0.224881, 0.433141, 0.049853, 0.284183, 0.421076, 0.815947, 0.160122, 0.182275, 0.093206, 0.834665, 0.145963, 0.487531, 0.507946, 0.635616, 0.118349, 0.969574, 0.154718, 0.160841, 0.96027, 0.340499, 0.547684, 0.473305, 0.209788, 0.905332, 0.482896, 0.138299, 0.142489, 0.680484, 0.469918, 0.406962, 0.123756, 0.458006, 0.442414, 0.451074, 0.585463, 0.414614, 0.77808, 0.992296, 0.743779, 0.909173, 0.72762, 0.443624, 0.721582, 0.916474, 0.132993, 0.93176, 0.491666, 0.121341, 0.234934, 0.977246, 0.919821, 0.115662, 0.012245, 0.420264, 0.825097, 0.053934, 0.677241, 0.773901, 0.343806, 0.846519, 0.303279, 0.852952, 0.525442, 0.053569, 0.645874, 0.043424, 0.93252, 0.409148, 0.944619, 0.154625, 0.317505, 0.676213, 0.308635, 0.2443, 0.751453, 0.228648, 0.317257, 0.057771, 0.259732, 0.400288, 0.290436, 0.383124, 0.712689, 0.312839, 0.045807, 0.860384, 0.772475, 0.373132, 0.130876, 0.24638, 0.168664, 0.441994, 0.236371, 0.133428, 0.870838, 0.428835, 0.486794, 0.209523, 0.785546, 0.215502, 0.223368, 0.103627, 0.256117, 0.968136, 0.978178, 0.843568, 0.569406, 0.628919, 0.491291, 0.746731, 0.608512, 0.003607, 0.793551, 0.388666, 0.36541, 0.322432, 0.294903, 0.878982, 0.440929, 0.84357, 0.041178, 0.785927, 0.432205, 0.558676, 0.229998, 0.890356, 0.904612, 0.080142, 0.258938, 0.309023, 0.494934, 0.510113, 0.722517, 0.293995, 0.4933, 0.747293, 0.253332, 0.208306, 0.511724, 0.075105, 0.900254, 0.234836, 0.498243, 0.026865, 0.153872, 0.506044, 0.343243, 0.733438, 0.241175, 0.799403, 0.180824, 0.469704, 0.160827, 0.674126, 0.610818, 0.629837, 0.460858, 0.097986, 0.841429, 0.222031, 0.255304] 7 | -------------------------------------------------------------------------------- /tests/save_load_tests.rs: -------------------------------------------------------------------------------- 1 | #[test] 2 | fn save_load_1() { 3 | // path to save and load the matrix 4 | let path = "./tests/assets/save_load_1.sprs"; 5 | 6 | // define some arbitrary matrix 7 | let l = vec![ 8 | vec![1.0000, 0., 0., 0., 0., 0., 0., 0., 0., 0.], 9 | vec![0.4044, 1.0000, 0., 0., 0., 0., 0., 0., 0., 0.], 10 | vec![0.3465, 0.0122, 1.0000, 0., 0., 0., 0., 0., 0., 0.], 11 | vec![0.7592, -0.3591, -0.1154, 1.0000, 0., 0., 0., 0., 0., 0.], 12 | vec![0.6868, 0.1135, 0.2113, 0.6470, 1.0000, 0., 0., 0., 0., 0.], 13 | vec![0.7304, -0.1453, 0.1755, 0.0585, -0.7586, 1.0000, 0., 0., 0., 0.], 14 | vec![0.8362, 0.0732, 0.7601, -0.1107, 0.1175, -0.5406, 1.0000, 0., 0., 0.], 15 | vec![0.0390, 0.8993, 0.3428, 0.1639, 0.4246, -0.5861, 0.7790, 1.0000, 0., 0.], 16 | vec![0.8079, -0.4437, 0.8271, 0.2583, -0.2238, 0.0544, 0.2360, -0.7387, 1.0000, 0.], 17 | vec![0.1360, 0.9532, -0.1212, -0.1943, 0.4311, 0.1069, 0.3717, 0.7176, -0.6053, 1.0000] 18 | ]; 19 | let mut l_sparse = rsparse::data::Sprs::new(); 20 | l_sparse.from_vec(&l); 21 | 22 | // save the `Sprs` matrix 23 | l_sparse.save(path).unwrap(); 24 | 25 | // load the same matrix in a new variable 26 | let mut l_sparse_2 = rsparse::data::Sprs::new(); 27 | l_sparse_2.load(path).unwrap(); 28 | 29 | // check if it was loaded correctly 30 | assert_eq!(l_sparse.nzmax, l_sparse_2.nzmax); 31 | assert_eq!(l_sparse.m, l_sparse_2.m); 32 | assert_eq!(l_sparse.n, l_sparse_2.n); 33 | assert_eq!(l_sparse.p, l_sparse_2.p); 34 | assert_eq!(l_sparse.i, l_sparse_2.i); 35 | assert_eq!(l_sparse.x, l_sparse_2.x); 36 | } 37 | 38 | #[test] 39 | fn save_load_2() { 40 | // path to save and load the matrix 41 | let path = "./tests/assets/save_load_2.sprs"; 42 | 43 | // define empty 44 | let l_sparse: rsparse::data::Sprs = rsparse::data::Sprs::new(); 45 | 46 | // save the `Sprs` matrix 47 | l_sparse.save(path).unwrap(); 48 | 49 | // load the same matrix in a new variable 50 | let mut l_sparse_2 = rsparse::data::Sprs::new(); 51 | l_sparse_2.load(path).unwrap(); 52 | 53 | // check if it was loaded correctly 54 | assert_eq!(l_sparse.nzmax, l_sparse_2.nzmax); 55 | assert_eq!(l_sparse.m, l_sparse_2.m); 56 | assert_eq!(l_sparse.n, l_sparse_2.n); 57 | assert_eq!(l_sparse.p, l_sparse_2.p); 58 | assert_eq!(l_sparse.i, l_sparse_2.i); 59 | assert_eq!(l_sparse.x, l_sparse_2.x); 60 | } -------------------------------------------------------------------------------- /tests/utils.rs: -------------------------------------------------------------------------------- 1 | /// Assert if A is equal to B within an acceptable margin of error (tol) 2 | pub fn assert_eq_f_vec>(a: &Vec, b: &Vec, tol: T) { 3 | for i in 0..a.len() { 4 | let diff = T::abs(a[i] - b[i]); 5 | if diff > tol { 6 | panic!( 7 | "The Vec are not equal: {:?} != {:?}. -- Check failed by: {}", 8 | a, b, diff 9 | ); 10 | } 11 | } 12 | } 13 | 14 | #[test] 15 | fn assert_eq_f_vec_1(){ 16 | let a = vec![ 17 | 0.856803, 18 | -0.024615, 19 | 0.629721, 20 | -0.123138, 21 | 0.195778, 22 | -0.450195, 23 | -0.628933, 24 | 0.636038, 25 | 0.289215, 26 | 0.430638 27 | ]; 28 | 29 | let b = vec![ 30 | 0.8568031, 31 | -0.024615, 32 | 0.629721, 33 | -0.123138, 34 | 0.195778, 35 | -0.450195, 36 | -0.628933, 37 | 0.636038, 38 | 0.289215, 39 | 0.430638 40 | ]; 41 | 42 | assert_eq_f_vec(&a, &b, 1e-6); 43 | } 44 | 45 | #[test] 46 | #[should_panic] 47 | fn assert_eq_f_vec_2(){ 48 | let a = vec![ 49 | 0.856803, 50 | -0.024615, 51 | 0.629721, 52 | -0.123138, 53 | 0.195778, 54 | -0.450195, 55 | -0.628933, 56 | 0.636038, 57 | 0.289215, 58 | 0.430638 59 | ]; 60 | 61 | let b = vec![ 62 | 0.8568031, 63 | -0.024615, 64 | 0.629721, 65 | -0.123138, 66 | 0.195778, 67 | -0.450195, 68 | -0.628933, 69 | 0.636038, 70 | 0.289215, 71 | 0.430638 72 | ]; 73 | 74 | assert_eq_f_vec(&a, &b, 1e-7); 75 | } 76 | 77 | /// Assert if A is equal to B within an acceptable margin of error (tol) 78 | pub fn assert_eq_f2d_vec>(a: &Vec>, b: &Vec>, tol: T) { 79 | for i in 0..a.len() { 80 | for j in 0..a[0].len() { 81 | let diff = T::abs(a[i][j] - b[i][j]); 82 | if diff > tol { 83 | panic!( 84 | "The 2D Vec are not equal: {:?} != {:?}. -- Check failed by: {}", 85 | a, b, diff 86 | ); 87 | } 88 | } 89 | } 90 | } 91 | 92 | #[test] 93 | fn assert_eq_f2d_vec_1(){ 94 | let a = vec![ 95 | vec![2.9118e-01, 5.6680e-01, 1.8228e-03, 4.0549e-01, 3.8642e-01, 2.5993e-01, 7.8883e-01], 96 | vec![2.0412e-02, 3.2074e-01, 6.4605e-01, 6.3720e-01, 4.3517e-01, 8.0411e-01, 8.2100e-01], 97 | vec![4.6343e-01, 8.8938e-01, 6.8361e-01, 2.4497e-01, 2.5148e-01, 9.3315e-01, 8.6388e-01], 98 | vec![2.2273e-02, 6.2230e-01, 3.5388e-01, 8.8429e-01, 1.4841e-01, 3.5973e-01, 5.5950e-01], 99 | vec![4.9581e-01, 5.4801e-01, 5.8516e-01, 5.9622e-01, 7.0883e-01, 1.8378e-01, 9.5005e-01], 100 | vec![2.1346e-01, 1.5274e-01, 6.3519e-02, 2.3448e-01, 1.5056e-01, 6.9372e-01, 6.4248e-02], 101 | vec![3.1925e-01, 3.7280e-01, 3.7565e-02, 4.6288e-02, 4.8428e-01, 5.1961e-01, 1.8035e-01], 102 | ]; 103 | let b = vec![ 104 | vec![2.9118e-01, 5.6680e-01, 1.8228e-03, 4.0549e-01, 3.8642e-01, 2.5993e-01, 7.8883e-01], 105 | vec![2.0412e-02, 3.2074e-01, 6.4605e-01, 6.3720e-01, 4.3517e-01, 8.0411e-01, 8.2100e-01], 106 | vec![4.6343e-01, 8.8938e-01, 6.8361e-01, 2.4497e-01, 2.5148e-01, 9.3315e-01, 8.6388e-01], 107 | vec![2.2273e-02, 6.2230e-01, 3.5388e-01, 8.8429e-01, 1.4841e-01, 3.5973e-01, 5.5950e-01], 108 | vec![4.9581e-01, 5.4801e-01, 5.8516e-01, 5.9622e-01, 7.0883e-01, 1.8378e-01, 9.5005e-01], 109 | vec![2.1346e-01, 1.5274e-01, 6.3519e-02, 2.3448e-01, 1.5056e-01, 6.9372e-01, 6.4248e-02], 110 | vec![3.1925e-01, 3.7280e-01, 3.7565e-02, 4.6288e-02, 4.8428e-01, 5.19611e-01, 1.8035e-01], 111 | ]; 112 | 113 | assert_eq_f2d_vec(&a, &b, 1e-4); 114 | } 115 | 116 | #[test] 117 | #[should_panic] 118 | fn assert_eq_f2d_vec_2(){ 119 | let a = vec![ 120 | vec![2.9118e-01, 5.6680e-01, 1.8228e-03, 4.0549e-01, 3.8642e-01, 2.5993e-01, 7.8883e-01], 121 | vec![2.0412e-02, 3.2074e-01, 6.4605e-01, 6.3720e-01, 4.3517e-01, 8.0411e-01, 8.2100e-01], 122 | vec![4.6343e-01, 8.8938e-01, 6.8361e-01, 2.4497e-01, 2.5148e-01, 9.3315e-01, 8.6388e-01], 123 | vec![2.2273e-02, 6.2230e-01, 3.5388e-01, 8.8429e-01, 1.4841e-01, 3.5973e-01, 5.5950e-01], 124 | vec![4.9581e-01, 5.4801e-01, 5.8516e-01, 5.9622e-01, 7.0883e-01, 1.8378e-01, 9.5005e-01], 125 | vec![2.1346e-01, 1.5274e-01, 6.3519e-02, 2.3448e-01, 1.5056e-01, 6.9372e-01, 6.4248e-02], 126 | vec![3.1925e-01, 3.7280e-01, 3.7565e-02, 4.6288e-02, 4.8428e-01, 5.1961e-01, 1.8035e-01], 127 | ]; 128 | let b = vec![ 129 | vec![2.9118e-01, 5.6680e-01, 1.8228e-03, 4.0549e-01, 3.8642e-01, 2.5993e-01, 7.8883e-01], 130 | vec![2.0412e-02, 3.2074e-01, 6.4605e-01, 6.3720e-01, 4.3517e-01, 8.0411e-01, 8.2100e-01], 131 | vec![4.6343e-01, 8.8938e-01, 6.8361e-01, 2.4497e-01, 2.5148e-01, 9.3315e-01, 8.6388e-01], 132 | vec![2.2273e-02, 6.2230e-01, 3.5388e-01, 8.8429e-01, 1.4841e-01, 3.5973e-01, 5.5950e-01], 133 | vec![4.9581e-01, 5.4801e-01, 5.8516e-01, 5.9622e-01, 7.0883e-01, 1.8378e-01, 9.5005e-01], 134 | vec![2.1346e-01, 1.5274e-01, 6.3519e-02, 2.3448e-01, 1.5056e-01, 6.9372e-01, 6.4248e-02], 135 | vec![3.1925e-01, 3.7280e-01, 3.7565e-02, 4.6288e-02, 4.8428e-01, 5.19611e-01, 1.8035e-01], 136 | ]; 137 | assert_eq_f2d_vec(&a, &b, 1e-6); 138 | } --------------------------------------------------------------------------------