<SYSTEM_TASK:>
Solve the following problem using Python, implementing the functions described below, one line at a time
<END_TASK>
<USER_TASK:>
Description:
 def range_window(preceding=None, following=None, group_by=None, order_by=None):
 """Create a range-based window clause for use with window functions. This RANGE window clause aggregates rows based upon differences in the value of the order-by expression. All window frames / ranges are inclusive. Parameters preceding : int, tuple, or None, default None Specify None for unbounded, 0 to include current row tuple for off-center window following : int, tuple, or None, default None Specify None for unbounded, 0 to include current row tuple for off-center window group_by : expressions, default None Either specify here or with TableExpr.group_by order_by : expressions, default None For analytic functions requiring an ordering, specify here, or let Ibis determine the default ordering (for functions like rank) Returns ------- Window """

    return Window(
        preceding=preceding,
        following=following,
        group_by=group_by,
        order_by=order_by,
        how='range',
    )