Skip to content

Commit

Permalink
feat: add the experimental argument to use the import_stream method i…
Browse files Browse the repository at this point in the history
…nside the function
  • Loading branch information
eitsupi committed May 6, 2024
1 parent fa5e600 commit e04762c
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 14 deletions.
36 changes: 28 additions & 8 deletions R/as_polars.R
Original file line number Diff line number Diff line change
Expand Up @@ -420,19 +420,39 @@ as_polars_series.nanoarrow_array = function(x, name = NULL, ...) {
}


#' @param experimental If `TRUE`, use experimental Arrow C stream interface inside the function.
#' This argument is experimental and may be removed in the future.
#' @rdname as_polars_series
#' @export
as_polars_series.nanoarrow_array_stream = function(x, name = NULL, ...) {
as_polars_series.nanoarrow_array_stream = function(x, name = NULL, ..., experimental = FALSE) {
on.exit(x$release())

stream_out = polars_allocate_array_stream()
nanoarrow::nanoarrow_pointer_export(x, stream_out)
if (isTRUE(experimental)) {
stream_out = polars_allocate_array_stream()
nanoarrow::nanoarrow_pointer_export(x, stream_out)

.pr$Series$import_stream(
name %||% "",
stream_out
) |>
unwrap("in as_polars_series(<nanoarrow_array_stream>):")
.pr$Series$import_stream(
name %||% "",
stream_out
) |>
unwrap("in as_polars_series(<nanoarrow_array_stream>):")
} else {
list_of_arrays = nanoarrow::collect_array_stream(x, validate = FALSE)

if (length(list_of_arrays) < 1L) {
# TODO: support 0-length array stream
out = pl$Series(name = name)
} else {
out = as_polars_series.nanoarrow_array(list_of_arrays[[1L]], name = name)
lapply(
list_of_arrays[-1L],
\(array) .pr$Series$append_mut(out, as_polars_series.nanoarrow_array(array))
) |>
invisible()
}

out
}
}


Expand Down
5 changes: 4 additions & 1 deletion man/as_polars_series.Rd

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

19 changes: 14 additions & 5 deletions tests/testthat/test-as_polars.R
Original file line number Diff line number Diff line change
Expand Up @@ -470,22 +470,31 @@ test_that("as_polars_df and pl$DataFrame for data.frame has list column", {
test_that("automatically rechunked for struct array stream", {
skip_if_not_installed("nanoarrow")

s_int = nanoarrow::basic_array_stream(
s_int_exp = nanoarrow::basic_array_stream(
list(
nanoarrow::as_nanoarrow_array(1:5),
nanoarrow::as_nanoarrow_array(6:10)
)
) |>
as_polars_series()
as_polars_series(experimental = TRUE)

s_struct_exp = nanoarrow::basic_array_stream(
list(
nanoarrow::as_nanoarrow_array(mtcars[1:5, ]),
nanoarrow::as_nanoarrow_array(mtcars[6:10, ])
)
) |>
as_polars_series(experimental = TRUE)

s_struct = nanoarrow::basic_array_stream(
s_struct_stable = nanoarrow::basic_array_stream(
list(
nanoarrow::as_nanoarrow_array(mtcars[1:5, ]),
nanoarrow::as_nanoarrow_array(mtcars[6:10, ])
)
) |>
as_polars_series()

expect_identical(s_int$n_chunks(), 2)
expect_identical(s_struct$n_chunks(), 1)
expect_identical(s_int_exp$n_chunks(), 2)
expect_identical(s_struct_exp$n_chunks(), 1)
expect_identical(s_struct_stable$n_chunks(), 2)
})

0 comments on commit e04762c

Please sign in to comment.