Nothing
# Tests for reshape and view operations
test_that("reshape_1d works", {
ctx <- ggml_init(4 * 1024 * 1024)
# Create 2D tensor and reshape to 1D
t2d <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 10, 10)
t1d <- ggml_reshape_1d(ctx, t2d, 100)
expect_equal(ggml_nelements(t1d), 100)
expect_equal(ggml_n_dims(t1d), 1)
ggml_free(ctx)
})
test_that("reshape_2d works", {
ctx <- ggml_init(4 * 1024 * 1024)
# Create 1D tensor and reshape to 2D
t1d <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 100)
t2d <- ggml_reshape_2d(ctx, t1d, 10, 10)
expect_equal(ggml_nelements(t2d), 100)
shape <- ggml_tensor_shape(t2d)
expect_equal(shape[1], 10)
expect_equal(shape[2], 10)
ggml_free(ctx)
})
test_that("reshape_3d works", {
ctx <- ggml_init(4 * 1024 * 1024)
t1d <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 120)
t3d <- ggml_reshape_3d(ctx, t1d, 4, 5, 6)
expect_equal(ggml_nelements(t3d), 120)
shape <- ggml_tensor_shape(t3d)
expect_equal(shape[1], 4)
expect_equal(shape[2], 5)
expect_equal(shape[3], 6)
ggml_free(ctx)
})
test_that("reshape_4d works", {
ctx <- ggml_init(4 * 1024 * 1024)
t1d <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 120)
t4d <- ggml_reshape_4d(ctx, t1d, 2, 3, 4, 5)
expect_equal(ggml_nelements(t4d), 120)
shape <- ggml_tensor_shape(t4d)
expect_equal(shape[1], 2)
expect_equal(shape[2], 3)
expect_equal(shape[3], 4)
expect_equal(shape[4], 5)
ggml_free(ctx)
})
test_that("view_tensor creates view sharing data", {
ctx <- ggml_init(4 * 1024 * 1024)
original <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 10)
ggml_set_f32(original, 1:10)
view <- ggml_view_tensor(ctx, original)
expect_type(view, "externalptr")
expect_equal(ggml_nelements(view), 10)
expect_equal(ggml_get_f32(view), 1:10)
ggml_free(ctx)
})
test_that("permute changes tensor dimensions", {
ctx <- ggml_init(16 * 1024 * 1024)
# Create 2D tensor (3x4) and permute to (4x3)
t2d <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 3, 4)
t_perm <- ggml_permute(ctx, t2d, 1, 0, 2, 3)
shape <- ggml_tensor_shape(t_perm)
expect_equal(shape[1], 4)
expect_equal(shape[2], 3)
ggml_free(ctx)
})
test_that("cont makes tensor contiguous", {
ctx <- ggml_init(16 * 1024 * 1024)
t2d <- ggml_new_tensor_2d(ctx, GGML_TYPE_F32, 3, 4)
t_cont <- ggml_cont(ctx, t2d)
expect_type(t_cont, "externalptr")
expect_true(ggml_is_contiguous(t_cont))
ggml_free(ctx)
})
test_that("ggml_view_1d creates view with offset", {
ctx <- ggml_init(16 * 1024 * 1024)
on.exit(ggml_free(ctx))
a <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 10)
ggml_set_f32(a, 1:10)
# View of 5 elements starting at offset 2*sizeof(float) = 8 bytes
v <- ggml_view_1d(ctx, a, 5, 2 * 4) # 2 elements * 4 bytes
expect_equal(ggml_nelements(v), 5)
})
test_that("ggml_view_2d creates 2D view", {
ctx <- ggml_init(16 * 1024 * 1024)
on.exit(ggml_free(ctx))
a <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 12)
ggml_set_f32(a, 1:12)
# Create 3x4 view
v <- ggml_view_2d(ctx, a, 3, 4, 3 * 4, 0) # ne0=3, ne1=4, nb1=12, offset=0
shape <- ggml_tensor_shape(v)
expect_equal(shape[1], 3)
expect_equal(shape[2], 4)
})
test_that("ggml_view_3d creates 3D view", {
ctx <- ggml_init(16 * 1024 * 1024)
on.exit(ggml_free(ctx))
a <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 24)
ggml_set_f32(a, 1:24)
# Create 2x3x4 view
v <- ggml_view_3d(ctx, a, 2, 3, 4, 2 * 4, 6 * 4, 0)
shape <- ggml_tensor_shape(v)
expect_equal(shape[1], 2)
expect_equal(shape[2], 3)
expect_equal(shape[3], 4)
})
test_that("ggml_view_4d creates 4D view", {
ctx <- ggml_init(16 * 1024 * 1024)
on.exit(ggml_free(ctx))
a <- ggml_new_tensor_1d(ctx, GGML_TYPE_F32, 48)
ggml_set_f32(a, 1:48)
# Create 2x2x3x4 view
v <- ggml_view_4d(ctx, a, 2, 2, 3, 4, 2 * 4, 4 * 4, 12 * 4, 0)
shape <- ggml_tensor_shape(v)
expect_equal(shape[1], 2)
expect_equal(shape[2], 2)
expect_equal(shape[3], 3)
expect_equal(shape[4], 4)
})
Any scripts or data that you put into this service are public.
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.