Skip to content

Commit

Permalink
fix(pandas): implement timestamp-date binary comparisons
Browse files Browse the repository at this point in the history
  • Loading branch information
cpcloud committed Jul 31, 2022
1 parent 8e62928 commit 4fc666d
Showing 1 changed file with 22 additions and 10 deletions.
32 changes: 22 additions & 10 deletions ibis/backends/pandas/execution/generic.py
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@
from ibis.backends.pandas.client import PandasTable
from ibis.backends.pandas.core import (
boolean_types,
date_types,
execute,
fixed_width_types,
floating_types,
Expand Down Expand Up @@ -762,6 +763,18 @@ def execute_not_bool(_, data, **kwargs):
return not data


def _execute_binary_op_impl(op, left, right, **_):
op_type = type(op)
try:
operation = constants.BINARY_OPERATIONS[op_type]
except KeyError:
raise NotImplementedError(
f'Binary operation {op_type.__name__} not implemented'
)
else:
return operation(left, right)


@execute_node.register(ops.Binary, pd.Series, pd.Series)
@execute_node.register(
(ops.NumericBinary, ops.LogicalBinary, ops.Comparison),
Expand All @@ -784,17 +797,16 @@ def execute_not_bool(_, data, **kwargs):
@execute_node.register(ops.Multiply, integer_types, str)
@execute_node.register(ops.Multiply, str, integer_types)
@execute_node.register(ops.Comparison, pd.Series, timestamp_types)
@execute_node.register(ops.Comparison, timestamp_types, pd.Series)
@execute_node.register(ops.Comparison, timedelta_types, pd.Series)
def execute_binary_op(op, left, right, **kwargs):
op_type = type(op)
try:
operation = constants.BINARY_OPERATIONS[op_type]
except KeyError:
raise NotImplementedError(
f'Binary operation {op_type.__name__} not implemented'
)
else:
return operation(left, right)
return _execute_binary_op_impl(op, left, right, **kwargs)


@execute_node.register(ops.Comparison, pd.Series, date_types)
def execute_binary_op_date(op, left, right, **kwargs):
return _execute_binary_op_impl(
op, pd.to_datetime(left), pd.to_datetime(right), **kwargs
)


@execute_node.register(ops.Binary, SeriesGroupBy, SeriesGroupBy)
Expand Down

0 comments on commit 4fc666d

Please sign in to comment.