Newer
Older
mod expand_n_contract;
let args: Vec<String> = env::args().collect();
if args.len() != 3 {
eprintln!(
"Usage: {} <number-of-spokes-in-wheel> <sparse-matrix-filename>",
args[0]
);
process::exit(1);
}
let num_spokes_maybe: Result<usize, std::num::ParseIntError> = args[1].parse::<usize>();
if num_spokes_maybe.is_err() {
eprintln!("Error parsing the first argument as a natural number.");
process::exit(1);
}
let num_spokes: usize = num_spokes_maybe.unwrap();
if num_spokes < 2 {
eprintln!("Error: A wheel graph without tadpoles must have at least two spokes.");
process::exit(1);
}
if num_spokes % 2 == 0 {
eprintln!("Error: The {}-wheel graph has an automorphism that induces an odd permutation on edges, so it is equal to zero in the graph complex.", num_spokes);
process::exit(1);
}
let sparse_matrix_filename: &String = &args[2];
let sparse_matrix_file_res: Result<File, std::io::Error> = File::create(sparse_matrix_filename);
if sparse_matrix_file_res.is_err() {
eprintln!("Error opening file: {}", sparse_matrix_filename);
process::exit(1);
}
let mut sparse_matrix_file: File = sparse_matrix_file_res.unwrap();
let result: Result<(usize, usize, usize), std::io::Error> =
expand_n_contract::expand_n_contract(num_spokes, &mut sparse_matrix_file);
match result {
Ok((rows, columns, num_nonzeros)) => {
eprintln!(
"Sparse {} x {} matrix with {} non-zero entries",
rows, columns, num_nonzeros
);
Ok(())
Err(e) => Err(e),