evoxel-core 0.0.1-alpha.9

Core primitives and operations for processing 3D voxel grids.
Documentation
use crate::Error::{ColumnNameMisMatch, NoData, TypeMisMatch};
use crate::{Error, VoxelDataColumnType, VoxelGridInfo};
use ecoord::ReferenceFrames;
use polars::datatypes::DataType;
use polars::frame::DataFrame;

pub fn check_data_integrity(
    voxel_data: &DataFrame,
    _info: &VoxelGridInfo,
    _reference_frames: &ReferenceFrames,
) -> Result<(), Error> {
    if voxel_data.is_empty() {
        return Err(NoData("voxel_data"));
    }

    let column_names = voxel_data.get_column_names();
    if column_names[0] != VoxelDataColumnType::X.as_str() {
        return Err(ColumnNameMisMatch);
    }
    if column_names[1] != VoxelDataColumnType::Y.as_str() {
        return Err(ColumnNameMisMatch);
    }
    if column_names[2] != VoxelDataColumnType::Z.as_str() {
        return Err(ColumnNameMisMatch);
    }

    let data_types = voxel_data.dtypes();
    if data_types[0] != DataType::Int64 {
        return Err(TypeMisMatch("x"));
    }
    if data_types[1] != DataType::Int64 {
        return Err(TypeMisMatch("y"));
    }
    if data_types[2] != DataType::Int64 {
        return Err(TypeMisMatch("z"));
    }

    Ok(())
}