def __sub__(self, val):
if not isinstance(val, range_t):<EOL><INDENT>val = {self.__val_convert(val)}<EOL><DEDENT>else:<EOL><INDENT>val = val.toset()<EOL><DEDENT>__has = deepcopy(self.__has)<EOL>for v in val:<EOL><INDENT>common = self.__match_l(v, __has) <EOL>if not common: continue <EOL>__has.difference_update(common) <EOL>minmax = (min({l[<NUM_LIT:0>] for l in common}), max({r[<NUM_LIT:1>] for r in common}))<EOL>if minmax[<NUM_LIT:0>] < v[<NUM_LIT:0>]: __has.add((minmax[<NUM_LIT:0>], v[<NUM_LIT:0>]))<EOL>if minmax[<NUM_LIT:1>] > v[<NUM_LIT:1>]: __has.add((v[<NUM_LIT:1>], minmax[<NUM_LIT:1>]))<EOL><DEDENT>return range_t(__has)<EOL>
Substracting support.

Parameters
----------
val : int or tuple or list or range
    Integer or range to substract.

Returns
-------
range_t
    New ``range_t`` object bereft of `val`.