Skip to content

Commit

Permalink
fix(duckdb): fix log with base b impl
Browse files Browse the repository at this point in the history
  • Loading branch information
cpcloud committed Mar 14, 2022
1 parent 18d16a7 commit 4920097
Showing 1 changed file with 15 additions and 5 deletions.
20 changes: 15 additions & 5 deletions ibis/backends/duckdb/registry.py
Expand Up @@ -29,19 +29,28 @@ def _round(t, expr):
return sa.func.round(sa_arg, t.translate(digits))


_LOG_BASE_FUNCS = {
2: sa.func.log2,
10: sa.func.log,
}


def _generic_log(arg, base):
return sa.func.ln(arg) / sa.func.ln(base)


def _log(t, expr):
arg, base = expr.op().args
sa_arg = t.translate(arg)
if base is not None:
sa_base = t.translate(base)
if sa_base.value == 2:
return sa.func.log2(sa_arg)
elif sa_base.value == 10:
return sa.func.log(sa_arg)
try:
base_value = sa_base.value
except AttributeError:
return _generic_log(sa_arg, sa_base)
else:
raise NotImplementedError
func = _LOG_BASE_FUNCS.get(base_value, _generic_log)
return func(sa_arg)
return sa.func.ln(sa_arg)


Expand Down Expand Up @@ -141,6 +150,7 @@ def _regex_extract(t, expr):
ops.DayOfWeekName: unary(sa.func.dayname),
ops.Literal: _literal,
ops.Log2: unary(sa.func.log2),
ops.Ln: unary(sa.func.ln),
ops.Log: _log,
# TODO: map operations, but DuckDB's maps are multimaps
ops.Modulus: fixed_arity(operator.mod, 2),
Expand Down

0 comments on commit 4920097

Please sign in to comment.