diff --git a/firanka/ranges.py b/firanka/ranges.py index 6d8c174c10455d79f9cf14e86599cb188a0f0f51..b68067bef95bb3dc8c7b5bd52bba75936ce928a0 100644 --- a/firanka/ranges.py +++ b/firanka/ranges.py @@ -52,6 +52,21 @@ class Range(object): start, stop = rs[1:-1].split(';') return float(start), float(stop), rs[0] == '<', rs[-1] == '>' + def __getargs(self, args): + if len(args) == 1: + rs, = args + if isinstance(rs, type(self)): + args = self.__fromrange(rs) + elif isinstance(rs, slice): + args = self.__fromslice(rs) + else: + args = self.__fromstr(rs) + elif len(args) == 2: + args = args[0], args[1], not math.isinf(args[0]), not math.isinf( + args[1]) + + return args + def __init__(self, *args): """ Create like: @@ -63,20 +78,8 @@ class Range(object): :param args: """ - if len(args) == 1: - rs, = args - if isinstance(rs, type(self)): - args = self.__fromrange(rs) - elif isinstance(rs, slice): - args = self.__fromslice(rs) - else: - args = self.__fromstr(rs) - - elif len(args) == 2: - args = args[0], args[1], not math.isinf(args[0]), not math.isinf(args[1]) - + args = self.__getargs(args) q = lambda a, b, args: args[a] and math.isinf(args[b]) - if q(2, 0, args) or q(3, 1, args): raise ValueError('Set with sharp closing but infinity set')