Skip to content

Commit 5e8855d

Browse files
authored
feat(polars): add StringFind operation (#10624)
## Description of changes Adds the [`StringFind`](https://ibis-project.org/reference/operations#ibis.expr.operations.strings.StringFind) operation for the Polars backend using [`pl.Expr.str.find`](https://docs.pola.rs/api/python/stable/reference/expressions/api/polars.Expr.str.find.html#).
1 parent 28bafd1 commit 5e8855d

File tree

2 files changed

+9
-5
lines changed

2 files changed

+9
-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: 0 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"),
@@ -1084,7 +1080,6 @@ def string_temp_table(backend, con):
10841080
lambda t: t.string_col.find("123"),
10851081
lambda t: t.str.find("123"),
10861082
id="find",
1087-
marks=pytest.mark.notimpl("polars", raises=com.OperationNotDefinedError),
10881083
),
10891084
param(
10901085
lambda t: t.string_col.rpad(4, "-"),

0 commit comments

Comments
 (0)