inline RowMajorMatrixXf eigen_mat_from_values(std::size_t height, std::size_t width,
    const float_vec& values)
{
    assertion(height * width == values.size(), "invalid shape");
    RowMajorMatrixXf m(height, width);
    std::memcpy(m.data(), values.data(), values.size() * sizeof(float_type));
    return m;
}