Fixed mistake in csv parser (was parsing as csv, not ssv)

This commit is contained in:
2024-10-31 10:56:02 +00:00
parent a704b6c15f
commit 150fe23f6c
3 changed files with 31 additions and 16 deletions

View File

@@ -19,6 +19,7 @@ rayon = "*"
thiserror = "1.0.60" thiserror = "1.0.60"
[dev-dependencies] [dev-dependencies]
anyhow = "1.0.91"
approx = "0.5.1" approx = "0.5.1"
arbitrary = { version = "1.3.2", features = ["derive"] } arbitrary = { version = "1.3.2", features = ["derive"] }
arbtest = "0.3.1" arbtest = "0.3.1"

View File

@@ -17,9 +17,15 @@ impl From<rust_fn::ReadError> for PyErr {
} }
rust_fn::ReadError::Io(e) => PyErr::new::<exceptions::PyIOError, _>(format!("{}", e)), rust_fn::ReadError::Io(e) => PyErr::new::<exceptions::PyIOError, _>(format!("{}", e)),
rust_fn::ReadError::CSV(e) => PyErr::new::<exceptions::PyIOError, _>(format!("{}", e)), rust_fn::ReadError::CSV(e) => PyErr::new::<exceptions::PyIOError, _>(format!("{}", e)),
rust_fn::ReadError::ParseIntError(e) => {
PyErr::new::<exceptions::PyRuntimeError, _>(format!("{}", e))
}
rust_fn::ReadError::ParseFloatError(e) => { rust_fn::ReadError::ParseFloatError(e) => {
PyErr::new::<exceptions::PyRuntimeError, _>(format!("{}", e)) PyErr::new::<exceptions::PyRuntimeError, _>(format!("{}", e))
} }
rust_fn::ReadError::ShapeError(e) => {
PyErr::new::<exceptions::PyIOError, _>(format!("{}", e))
}
rust_fn::ReadError::MiscError(e) => PyErr::new::<exceptions::PyRuntimeError, _>(e), rust_fn::ReadError::MiscError(e) => PyErr::new::<exceptions::PyRuntimeError, _>(e),
} }
} }

View File

@@ -21,9 +21,15 @@ pub enum ReadError {
#[error("CSV error: {0}")] #[error("CSV error: {0}")]
CSV(#[from] csv::Error), CSV(#[from] csv::Error),
#[error("Float parse error: {0}")] #[error("Float int error: {0}")]
ParseIntError(#[from] std::num::ParseIntError),
#[error("Float float error: {0}")]
ParseFloatError(#[from] std::num::ParseFloatError), ParseFloatError(#[from] std::num::ParseFloatError),
#[error("Shape error: {0}")]
ShapeError(#[from] ndarray::ShapeError),
#[error("Miscellaneous Error")] #[error("Miscellaneous Error")]
MiscError(String), MiscError(String),
} }
@@ -80,8 +86,7 @@ pub fn read_layers(folder: &str) -> Result<Array2<f64>> {
.unwrap() .unwrap()
.slice_axis(Axis(1), Slice::from(2..4)), .slice_axis(Axis(1), Slice::from(2..4)),
], ],
) )?;
.unwrap();
out_array.column_mut(0).par_map_inplace(correct_x); out_array.column_mut(0).par_map_inplace(correct_x);
out_array.column_mut(1).par_map_inplace(correct_y); out_array.column_mut(1).par_map_inplace(correct_y);
@@ -100,15 +105,16 @@ pub fn read_selected_layers(file_list: Vec<PathBuf>) -> Result<Array2<f64>> {
.zip(arrays.par_iter_mut()) .zip(arrays.par_iter_mut())
.zip(z_vals.par_iter_mut()) .zip(z_vals.par_iter_mut())
.zip(z_lens.par_iter_mut()) .zip(z_lens.par_iter_mut())
.for_each( .try_for_each(
|(((filepath, array_element), z_vals_element), z_lens_element)| { |(((filepath, array_element), z_vals_element), z_lens_element)| -> Result<()> {
let (array, z, z_len) = read_file(filepath.to_path_buf()).unwrap(); let (array, z, z_len) = read_file(filepath.to_path_buf())?;
*array_element = array; *array_element = array;
*z_vals_element = z; *z_vals_element = z;
*z_lens_element = z_len; *z_lens_element = z_len;
bar.inc(1) bar.inc(1);
Ok(())
}, },
); )?;
let mut padding_arrays: Vec<Array2<f64>> = Vec::<Array2<f64>>::new(); let mut padding_arrays: Vec<Array2<f64>> = Vec::<Array2<f64>>::new();
for (z, z_len) in z_vals.iter().zip(z_lens) { for (z, z_len) in z_vals.iter().zip(z_lens) {
@@ -131,8 +137,7 @@ pub fn read_selected_layers(file_list: Vec<PathBuf>) -> Result<Array2<f64>> {
.unwrap() .unwrap()
.slice_axis(Axis(1), Slice::from(2..4)), .slice_axis(Axis(1), Slice::from(2..4)),
], ],
) )?;
.unwrap();
out_array.column_mut(0).par_map_inplace(correct_x); out_array.column_mut(0).par_map_inplace(correct_x);
out_array.column_mut(1).par_map_inplace(correct_y); out_array.column_mut(1).par_map_inplace(correct_y);
@@ -141,12 +146,12 @@ pub fn read_selected_layers(file_list: Vec<PathBuf>) -> Result<Array2<f64>> {
} }
pub fn read_layer(file: &str) -> Result<Array2<f64>> { pub fn read_layer(file: &str) -> Result<Array2<f64>> {
let (array, z, z_len) = read_file(Path::new(file).to_path_buf()).unwrap(); let (array, z, z_len) = read_file(Path::new(file).to_path_buf())?;
let z_array: Array2<f64> = Array2::from_elem((z_len, 1), z); let z_array: Array2<f64> = Array2::from_elem((z_len, 1), z);
let z_array_view: ArrayView2<f64> = z_array.view(); let z_array_view: ArrayView2<f64> = z_array.view();
let array_view: ArrayView2<f64> = array.view(); let array_view: ArrayView2<f64> = array.view();
let mut out_array = concatenate(Axis(1), &[array_view, z_array_view]).unwrap(); let mut out_array = concatenate(Axis(1), &[array_view, z_array_view])?;
out_array.column_mut(0).par_map_inplace(correct_x); out_array.column_mut(0).par_map_inplace(correct_x);
out_array.column_mut(1).par_map_inplace(correct_y); out_array.column_mut(1).par_map_inplace(correct_y);
@@ -157,7 +162,10 @@ pub fn read_layer(file: &str) -> Result<Array2<f64>> {
pub fn read_file(filepath: PathBuf) -> Result<(Array2<f64>, f64, usize)> { pub fn read_file(filepath: PathBuf) -> Result<(Array2<f64>, f64, usize)> {
let z: f64 = get_z(&filepath)?; let z: f64 = get_z(&filepath)?;
let file = File::open(filepath)?; let file = File::open(filepath)?;
let mut rdr = ReaderBuilder::new().has_headers(false).from_reader(file); let mut rdr = ReaderBuilder::new()
.delimiter(b' ')
.has_headers(false)
.from_reader(file);
let data = rdr let data = rdr
.records() .records()
.into_iter() .into_iter()
@@ -165,8 +173,8 @@ pub fn read_file(filepath: PathBuf) -> Result<(Array2<f64>, f64, usize)> {
.iter() .iter()
.map(|x| { .map(|x| {
x.iter() x.iter()
.map(|y| y.parse::<f64>().map_err(|e| ReadError::ParseFloatError(e))) .map(|y| y.parse::<i64>().map_err(|e| ReadError::ParseIntError(e)))
.collect::<Result<Vec<f64>>>() .collect::<Result<Vec<i64>>>()
}) })
.collect::<Result<Vec<_>>>()?; .collect::<Result<Vec<_>>>()?;
let length = data.len(); let length = data.len();
@@ -174,7 +182,7 @@ pub fn read_file(filepath: PathBuf) -> Result<(Array2<f64>, f64, usize)> {
let mut arr: Array2<f64> = Array2::zeros((length, width)); let mut arr: Array2<f64> = Array2::zeros((length, width));
for (data_row, mut arr_row) in data.iter().zip(arr.axis_iter_mut(Axis(0))) { for (data_row, mut arr_row) in data.iter().zip(arr.axis_iter_mut(Axis(0))) {
for (data_i, arr_i) in data_row.iter().zip(arr_row.iter_mut()) { for (data_i, arr_i) in data_row.iter().zip(arr_row.iter_mut()) {
*arr_i = *data_i *arr_i = *data_i as f64
} }
} }