You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
74 lines
1.9 KiB
74 lines
1.9 KiB
import math
|
|
import sys
|
|
|
|
class Infinity:
|
|
"""
|
|
Class representing infinity and minus infinity
|
|
"""
|
|
def __init__(self, negated = False):
|
|
self.negated = negated
|
|
|
|
def __neg__(self):
|
|
return Infinity(not self.negated)
|
|
|
|
def __le__(self, other):
|
|
if isinstance(other, Infinity) and (not other.negated or other.negated == self.negated): return True
|
|
return self.negated
|
|
|
|
def __ge__(self, other):
|
|
if isinstance(other, Infinity) and (other.negated or other.negated == self.negated): return True
|
|
return not self.negated
|
|
|
|
def __lt__(self, other):
|
|
if isinstance(other, Infinity) and other.negated: return False
|
|
return self.negated
|
|
|
|
def __gt__(self, other):
|
|
if isinstance(other, Infinity) and not other.negated: return False
|
|
return not self.negated
|
|
|
|
def __eq__(self, other):
|
|
if sys.version_info[1] >= 5:
|
|
return (isinstance(other, Infinity) and other.negated == self.negated) or (not self.negated and other == math.inf)
|
|
else:
|
|
return (isinstance(other, Infinity) and other.negated == self.negated)
|
|
|
|
def __add__(self, other):
|
|
return self
|
|
|
|
def __radd__(self, other):
|
|
return self
|
|
|
|
def __sub__(self, other):
|
|
return self
|
|
|
|
def __rsub__(self, other):
|
|
return self
|
|
|
|
def __mul__(self, other):
|
|
if other < 0:
|
|
return -self
|
|
return self
|
|
|
|
def __rmul__(self, other):
|
|
if other < 0:
|
|
return -self
|
|
return self
|
|
|
|
def __div__(self, other):
|
|
if other < 0:
|
|
return - self
|
|
return self
|
|
|
|
def __rdiv__(self, other):
|
|
return 0
|
|
|
|
def __str__(self):
|
|
return "-infty" if self.negated else "infty"
|
|
|
|
def __repr__(self):
|
|
return "-pycarl.inf" if self.negated else "pycarl.inf"
|
|
|
|
def __hash__(self):
|
|
return 42 if self.negated else 23
|
|
|