Skip to content

Commit 211e364

Browse files
committed
feat(polars): add StringFind operation
1 parent 28bafd1 commit 211e364

File tree

2 files changed

+11
-5
lines changed

2 files changed

+11
-5
lines changed

ibis/backends/polars/compiler.py

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1555,3 +1555,12 @@ def visit_ArrayIntersect(op, **kw):
15551555
left = translate(op.left, **kw)
15561556
right = translate(op.right, **kw)
15571557
return left.list.set_intersection(right)
1558+
1559+
1560+
@translate.register(ops.StringFind)
1561+
def visit_StringFind(op, **kw):
1562+
arg = translate(op.arg, **kw)
1563+
start = translate(op.start, **kw) if op.start is not None else 0
1564+
end = translate(op.end, **kw) if op.end is not None else None
1565+
expr = arg.str.slice(start, end).str.find(_literal_value(op.substr), literal=True)
1566+
return pl.when(expr.is_null()).then(-1).otherwise(expr + start)

ibis/backends/tests/test_string.py

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -406,15 +406,11 @@ def uses_java_re(t):
406406
lambda t: t.string_col.find("a"),
407407
lambda t: t.string_col.str.find("a"),
408408
id="find",
409-
marks=pytest.mark.notimpl(["polars"], raises=com.OperationNotDefinedError),
410409
),
411410
param(
412411
lambda t: t.date_string_col.find("13", 3),
413412
lambda t: t.date_string_col.str.find("13", 3),
414413
id="find_start",
415-
marks=[
416-
pytest.mark.notimpl(["polars"], raises=com.OperationNotDefinedError),
417-
],
418414
),
419415
param(
420416
lambda t: t.string_col.lpad(10, "a"),
@@ -605,6 +601,8 @@ def test_string(backend, alltypes, df, result_func, expected_func):
605601
result = expr.execute()
606602

607603
expected = backend.default_series_rename(expected_func(df))
604+
result.to_csv("result.csv", index=False)
605+
expected.to_csv("expected.csv", index=False)
608606
backend.assert_series_equal(result, expected)
609607

610608

@@ -1084,7 +1082,6 @@ def string_temp_table(backend, con):
10841082
lambda t: t.string_col.find("123"),
10851083
lambda t: t.str.find("123"),
10861084
id="find",
1087-
marks=pytest.mark.notimpl("polars", raises=com.OperationNotDefinedError),
10881085
),
10891086
param(
10901087
lambda t: t.string_col.rpad(4, "-"),

0 commit comments

Comments
 (0)