def expand_range_distinct(range, expand=(<NUM_LIT:0>, <NUM_LIT:0>, <NUM_LIT:0>, <NUM_LIT:0>), zero_width=<NUM_LIT:1>):
if len(expand) == <NUM_LIT:2>:<EOL><INDENT>expand = tuple(expand) * <NUM_LIT:2><EOL><DEDENT>lower = expand_range(range, expand[<NUM_LIT:0>], expand[<NUM_LIT:1>], zero_width)[<NUM_LIT:0>]<EOL>upper = expand_range(range, expand[<NUM_LIT:2>], expand[<NUM_LIT:3>], zero_width)[<NUM_LIT:1>]<EOL>return (lower, upper)<EOL>
Expand a range with a multiplicative or additive constants

Similar to :func:`expand_range` but both sides of the range
expanded using different constants

Parameters
----------
range : tuple
    Range of data. Size 2
expand : tuple
    Length 2 or 4. If length is 2, then the same constants
    are used for both sides. If length is 4 then the first
    two are are the Multiplicative (*mul*) and Additive (*add*)
    constants for the lower limit, and the second two are
    the constants for the upper limit.
zero_width : int | float | timedelta
    Distance to use if range has zero width

Returns
-------
out : tuple
    Expanded range

Examples
--------
>>> expand_range_distinct((3, 8))
(3, 8)
>>> expand_range_distinct((0, 10), (0.1, 0))
(-1.0, 11.0)
>>> expand_range_distinct((0, 10), (0.1, 0, 0.1, 0))
(-1.0, 11.0)
>>> expand_range_distinct((0, 10), (0.1, 0, 0, 0))
(-1.0, 10)
>>> expand_range_distinct((0, 10), (0, 2))
(-2, 12)
>>> expand_range_distinct((0, 10), (0, 2, 0, 2))
(-2, 12)
>>> expand_range_distinct((0, 10), (0, 0, 0, 2))
(0, 12)
>>> expand_range_distinct((0, 10), (.1, 2))
(-3.0, 13.0)
>>> expand_range_distinct((0, 10), (.1, 2, .1, 2))
(-3.0, 13.0)
>>> expand_range_distinct((0, 10), (0, 0, .1, 2))
(0, 13.0)