'Operate on an argument.
This is the lowest level of operation, raises
:class:`NotImplementedError` by default.
Overriding this on a subclass can allow common
behavior to be applied to all operations.
For example, overriding :class:`.ColumnOperators`
to apply ``func.lower()`` to the left and right
side::
class MyComparator(ColumnOperators):
def operate(self, op, other):
return op(func.lower(self), func.lower(other))
:param op:  Operator callable.
:param \*other: the \'other\' side of the operation. Will
be a single scalar for most operations.
:param \**kwargs: modifiers.  These may be passed by special
operators such as :meth:`ColumnOperators.contains`.'

def operate(self, op, *other, **kwargs):

    raise NotImplementedError(str(op))
