def execute_asof_join(op, left, right, by, tolerance, predicates, **kwargs): overlapping_columns = frozenset(left.columns) & frozenset(right.columns) left_on, right_on = _extract_predicate_names(predicates) left_by, right_by = _extract_predicate_names(by) _validate_columns(overlapping_columns, left_on, right_on, left_by, right_by) assert 0 <= len(left_on) <= 1, f"len(left_on) == {len(left_on)}" assert 0 <= len(right_on) <= 1, f"len(right_on) == {len(right_on)}" on = left_on if left_on == right_on else None return dd.merge_asof( left=left, right=right, # NB: dask 2022.4.1 contains a bug from # https://github.com/dask/dask/pull/8857 that keeps a column if `on` is # non-empty without checking whether `left_on` is non-empty, this # check works around that on=on, left_on=left_on if on is None else None, right_on=right_on if on is None else None, left_by=left_by or None, right_by=right_by or None, tolerance=tolerance, )
def execute_asof_join(op, left, right, tolerance, **kwargs): overlapping_columns = frozenset(left.columns) & frozenset(right.columns) left_on, right_on = _extract_predicate_names(op.predicates) left_by, right_by = _extract_predicate_names(op.by) _validate_columns(overlapping_columns, left_on, right_on, left_by, right_by) return dd.merge_asof( left=left, right=right, left_on=left_on, right_on=right_on, left_by=left_by or None, right_by=right_by or None, tolerance=tolerance, )