Skip to content

Commit a45d4a3

Browse files
authored
Merge pull request rapidsai#19415 from rapidsai/branch-25.08
Forward-merge branch-25.08 into branch-25.10
2 parents fa0f083 + bd64e87 commit a45d4a3

File tree

2 files changed

+23
-1
lines changed

2 files changed

+23
-1
lines changed

cpp/src/strings/extract/extract.cu

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,9 @@ std::unique_ptr<table> extract(strings_column_view const& input,
104104

105105
auto const d_strings = column_device_view::create(input.parent(), stream);
106106

107-
launch_for_each_kernel(extract_fn{*d_strings, d_indices}, *d_prog, input.size(), stream);
107+
if (!input.is_empty()) {
108+
launch_for_each_kernel(extract_fn{*d_strings, d_indices}, *d_prog, input.size(), stream);
109+
}
108110

109111
// build a result column for each group
110112
std::vector<std::unique_ptr<column>> results(groups);
@@ -161,6 +163,8 @@ std::unique_ptr<column> extract_single(strings_column_view const& input,
161163
rmm::cuda_stream_view stream,
162164
rmm::device_async_resource_ref mr)
163165
{
166+
if (input.is_empty()) { return make_empty_column(type_id::STRING); }
167+
164168
// create device object from regex_program
165169
auto d_prog = regex_device_builder::create_prog_device(prog, stream);
166170

cpp/tests/strings/extract_tests.cpp

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -338,6 +338,24 @@ TEST_F(StringsExtractTests, Errors)
338338
EXPECT_THROW(cudf::strings::extract_all_record(sv, *prog), cudf::logic_error);
339339
}
340340

341+
TEST_F(StringsExtractTests, EmptyInput)
342+
{
343+
auto const input = cudf::test::strings_column_wrapper();
344+
auto const sv = cudf::strings_column_view(input);
345+
auto const pattern = std::string("(\\w+)");
346+
auto const prog = cudf::strings::regex_program::create(pattern);
347+
348+
auto rt = cudf::strings::extract(sv, *prog);
349+
EXPECT_EQ(1, rt->num_columns());
350+
EXPECT_EQ(0, rt->num_rows());
351+
352+
auto rl = cudf::strings::extract_all_record(sv, *prog);
353+
EXPECT_EQ(0, rl->size());
354+
355+
auto rs = cudf::strings::extract_single(sv, *prog, 1);
356+
EXPECT_EQ(0, rs->size());
357+
}
358+
341359
TEST_F(StringsExtractTests, MediumRegex)
342360
{
343361
// This results in 95 regex instructions and falls in the 'medium' range.

0 commit comments

Comments
 (0)