Spaces:
Sleeping
Sleeping
| from sympy.core.logic import fuzzy_and, fuzzy_or, fuzzy_not, fuzzy_xor | |
| class intervalMembership: | |
| """Represents a boolean expression returned by the comparison of | |
| the interval object. | |
| Parameters | |
| ========== | |
| (a, b) : (bool, bool) | |
| The first value determines the comparison as follows: | |
| - True: If the comparison is True throughout the intervals. | |
| - False: If the comparison is False throughout the intervals. | |
| - None: If the comparison is True for some part of the intervals. | |
| The second value is determined as follows: | |
| - True: If both the intervals in comparison are valid. | |
| - False: If at least one of the intervals is False, else | |
| - None | |
| """ | |
| def __init__(self, a, b): | |
| self._wrapped = (a, b) | |
| def __getitem__(self, i): | |
| try: | |
| return self._wrapped[i] | |
| except IndexError: | |
| raise IndexError( | |
| "{} must be a valid indexing for the 2-tuple." | |
| .format(i)) | |
| def __len__(self): | |
| return 2 | |
| def __iter__(self): | |
| return iter(self._wrapped) | |
| def __str__(self): | |
| return "intervalMembership({}, {})".format(*self) | |
| __repr__ = __str__ | |
| def __and__(self, other): | |
| if not isinstance(other, intervalMembership): | |
| raise ValueError( | |
| "The comparison is not supported for {}.".format(other)) | |
| a1, b1 = self | |
| a2, b2 = other | |
| return intervalMembership(fuzzy_and([a1, a2]), fuzzy_and([b1, b2])) | |
| def __or__(self, other): | |
| if not isinstance(other, intervalMembership): | |
| raise ValueError( | |
| "The comparison is not supported for {}.".format(other)) | |
| a1, b1 = self | |
| a2, b2 = other | |
| return intervalMembership(fuzzy_or([a1, a2]), fuzzy_and([b1, b2])) | |
| def __invert__(self): | |
| a, b = self | |
| return intervalMembership(fuzzy_not(a), b) | |
| def __xor__(self, other): | |
| if not isinstance(other, intervalMembership): | |
| raise ValueError( | |
| "The comparison is not supported for {}.".format(other)) | |
| a1, b1 = self | |
| a2, b2 = other | |
| return intervalMembership(fuzzy_xor([a1, a2]), fuzzy_and([b1, b2])) | |
| def __eq__(self, other): | |
| return self._wrapped == other | |
| def __ne__(self, other): | |
| return self._wrapped != other | |