rulp 0.1.0

A library providing functionality to parse, create and solve linear programming problems.
Documentation
use rulinalg::matrix::{BaseMatrix, Matrix};
use std::fmt;

#[derive(Debug, PartialEq, Clone)]
pub struct Lp {
	pub A: Matrix<f64>,
	pub b: Vec<f64>,
	pub c: Vec<f64>,
	pub optimization: Optimization,
	pub vars: Vec<String>,
	pub num_artificial_vars: usize,
}

#[derive(Debug, PartialEq, Clone)]
pub enum Optimization {
	Min,
	Max,
}

impl fmt::Display for Lp {
    fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
    	unsafe {
    		let opt_str = if self.optimization == Optimization::Max {"max"} else {"min"};
    		writeln!(f, "{} LP: {:>3} variables ({} artificial), {:>3} constraints\n", opt_str, self.c.len(), self.num_artificial_vars, self.b.len()).unwrap();
    		for c in 0 .. self.A.cols() {
    			write!(f, "{:>5.1}  ", self.c[c]).unwrap();
    		}

    		writeln!(f, "").unwrap();

    		for _ in 0 .. self.A.cols() {
    			write!(f, " - - - ").unwrap();
    		}
    		writeln!(f, "").unwrap();
    		

			for r in 0 .. self.A.rows() {
				for c in 0 .. self.A.cols() - 1{
					write!(f, "{:>5.1}, ", *self.A.get_unchecked([r, c])).unwrap();
				}
				writeln!(f, "{:>5.1} | {:>5.1}", *self.A.get_unchecked([r, self.A.cols() -1]), self.b[r]).unwrap();
			}

			write!(f, "")
    	}
    }
}