code: def comparable(klass):
      
      # On Python 2, __cmp__ will just work, so no need to add extra methods:
      if not is_py3:
          return klass
  
      def __eq__(self, other):
          c = self.__cmp__(other)
          if c is NotImplemented:
              return c
  
          return c == 0
  
      def __ne__(self, other):
          c = self.__cmp__(other)
          if c is NotImplemented:
              return c
  
          return c != 0
  
      def __lt__(self, other):
          c = self.__cmp__(other)
          if c is NotImplemented:
              return c
  
          return c < 0
  
      def __le__(self, other):
          c = self.__cmp__(other)
          if c is NotImplemented:
              return c
  
          return c <= 0
  
      def __gt__(self, other):
          c = self.__cmp__(other)
          if c is NotImplemented:
              return c
  
          return c > 0
  
      def __ge__(self, other):
          c = self.__cmp__(other)
          if c is NotImplemented:
              return c
  
          return c >= 0
  
      klass.__lt__ = __lt__
      klass.__gt__ = __gt__
      klass.__le__ = __le__
      klass.__ge__ = __ge__
      klass.__eq__ = __eq__
      klass.__ne__ = __ne__
      return klass
docs: Class decorator that ensures support for the special C{__cmp__} method.
      On Python 2 this does nothing.
      On Python 3, C{__eq__}, C{__lt__}, etc. methods are added to the class,
      relying on C{__cmp__} to implement their comparisons.