Home | History | Annotate | Download | only in library
      1 :mod:`operator` --- Standard operators as functions
      2 ===================================================
      3 
      4 .. module:: operator
      5    :synopsis: Functions corresponding to the standard operators.
      6 .. sectionauthor:: Skip Montanaro <skip (a] automatrix.com>
      7 
      8 
      9 .. testsetup::
     10 
     11    import operator
     12    from operator import itemgetter
     13 
     14 
     15 The :mod:`operator` module exports a set of efficient functions corresponding to
     16 the intrinsic operators of Python.  For example, ``operator.add(x, y)`` is
     17 equivalent to the expression ``x+y``.  The function names are those used for
     18 special class methods; variants without leading and trailing ``__`` are also
     19 provided for convenience.
     20 
     21 The functions fall into categories that perform object comparisons, logical
     22 operations, mathematical operations, sequence operations, and abstract type
     23 tests.
     24 
     25 The object comparison functions are useful for all objects, and are named after
     26 the rich comparison operators they support:
     27 
     28 
     29 .. function:: lt(a, b)
     30               le(a, b)
     31               eq(a, b)
     32               ne(a, b)
     33               ge(a, b)
     34               gt(a, b)
     35               __lt__(a, b)
     36               __le__(a, b)
     37               __eq__(a, b)
     38               __ne__(a, b)
     39               __ge__(a, b)
     40               __gt__(a, b)
     41 
     42    Perform "rich comparisons" between *a* and *b*. Specifically, ``lt(a, b)`` is
     43    equivalent to ``a < b``, ``le(a, b)`` is equivalent to ``a <= b``, ``eq(a,
     44    b)`` is equivalent to ``a == b``, ``ne(a, b)`` is equivalent to ``a != b``,
     45    ``gt(a, b)`` is equivalent to ``a > b`` and ``ge(a, b)`` is equivalent to ``a
     46    >= b``.  Note that unlike the built-in :func:`cmp`, these functions can
     47    return any value, which may or may not be interpretable as a Boolean value.
     48    See :ref:`comparisons` for more information about rich comparisons.
     49 
     50    .. versionadded:: 2.2
     51 
     52 The logical operations are also generally applicable to all objects, and support
     53 truth tests, identity tests, and boolean operations:
     54 
     55 
     56 .. function:: not_(obj)
     57               __not__(obj)
     58 
     59    Return the outcome of :keyword:`not` *obj*.  (Note that there is no
     60    :meth:`__not__` method for object instances; only the interpreter core defines
     61    this operation.  The result is affected by the :meth:`__nonzero__` and
     62    :meth:`__len__` methods.)
     63 
     64 
     65 .. function:: truth(obj)
     66 
     67    Return :const:`True` if *obj* is true, and :const:`False` otherwise.  This is
     68    equivalent to using the :class:`bool` constructor.
     69 
     70 
     71 .. function:: is_(a, b)
     72 
     73    Return ``a is b``.  Tests object identity.
     74 
     75    .. versionadded:: 2.3
     76 
     77 
     78 .. function:: is_not(a, b)
     79 
     80    Return ``a is not b``.  Tests object identity.
     81 
     82    .. versionadded:: 2.3
     83 
     84 The mathematical and bitwise operations are the most numerous:
     85 
     86 
     87 .. function:: abs(obj)
     88               __abs__(obj)
     89 
     90    Return the absolute value of *obj*.
     91 
     92 
     93 .. function:: add(a, b)
     94               __add__(a, b)
     95 
     96    Return ``a + b``, for *a* and *b* numbers.
     97 
     98 
     99 .. function:: and_(a, b)
    100               __and__(a, b)
    101 
    102    Return the bitwise and of *a* and *b*.
    103 
    104 
    105 .. function:: div(a, b)
    106               __div__(a, b)
    107 
    108    Return ``a / b`` when ``__future__.division`` is not in effect.  This is
    109    also known as "classic" division.
    110 
    111 
    112 .. function:: floordiv(a, b)
    113               __floordiv__(a, b)
    114 
    115    Return ``a // b``.
    116 
    117    .. versionadded:: 2.2
    118 
    119 
    120 .. function:: index(a)
    121               __index__(a)
    122 
    123    Return *a* converted to an integer.  Equivalent to ``a.__index__()``.
    124 
    125    .. versionadded:: 2.5
    126 
    127 
    128 .. function:: inv(obj)
    129               invert(obj)
    130               __inv__(obj)
    131               __invert__(obj)
    132 
    133    Return the bitwise inverse of the number *obj*.  This is equivalent to ``~obj``.
    134 
    135    .. versionadded:: 2.0
    136       The names :func:`invert` and :func:`__invert__`.
    137 
    138 
    139 .. function:: lshift(a, b)
    140               __lshift__(a, b)
    141 
    142    Return *a* shifted left by *b*.
    143 
    144 
    145 .. function:: mod(a, b)
    146               __mod__(a, b)
    147 
    148    Return ``a % b``.
    149 
    150 
    151 .. function:: mul(a, b)
    152               __mul__(a, b)
    153 
    154    Return ``a * b``, for *a* and *b* numbers.
    155 
    156 
    157 .. function:: neg(obj)
    158               __neg__(obj)
    159 
    160    Return *obj* negated (``-obj``).
    161 
    162 
    163 .. function:: or_(a, b)
    164               __or__(a, b)
    165 
    166    Return the bitwise or of *a* and *b*.
    167 
    168 
    169 .. function:: pos(obj)
    170               __pos__(obj)
    171 
    172    Return *obj* positive (``+obj``).
    173 
    174 
    175 .. function:: pow(a, b)
    176               __pow__(a, b)
    177 
    178    Return ``a ** b``, for *a* and *b* numbers.
    179 
    180    .. versionadded:: 2.3
    181 
    182 
    183 .. function:: rshift(a, b)
    184               __rshift__(a, b)
    185 
    186    Return *a* shifted right by *b*.
    187 
    188 
    189 .. function:: sub(a, b)
    190               __sub__(a, b)
    191 
    192    Return ``a - b``.
    193 
    194 
    195 .. function:: truediv(a, b)
    196               __truediv__(a, b)
    197 
    198    Return ``a / b`` when ``__future__.division`` is in effect.  This is also
    199    known as "true" division.
    200 
    201    .. versionadded:: 2.2
    202 
    203 
    204 .. function:: xor(a, b)
    205               __xor__(a, b)
    206 
    207    Return the bitwise exclusive or of *a* and *b*.
    208 
    209 
    210 Operations which work with sequences (some of them with mappings too) include:
    211 
    212 .. function:: concat(a, b)
    213               __concat__(a, b)
    214 
    215    Return ``a + b`` for *a* and *b* sequences.
    216 
    217 
    218 .. function:: contains(a, b)
    219               __contains__(a, b)
    220 
    221    Return the outcome of the test ``b in a``. Note the reversed operands.
    222 
    223    .. versionadded:: 2.0
    224       The name :func:`__contains__`.
    225 
    226 
    227 .. function:: countOf(a, b)
    228 
    229    Return the number of occurrences of *b* in *a*.
    230 
    231 
    232 .. function:: delitem(a, b)
    233               __delitem__(a, b)
    234 
    235    Remove the value of *a* at index *b*.
    236 
    237 
    238 .. function:: delslice(a, b, c)
    239               __delslice__(a, b, c)
    240 
    241    Delete the slice of *a* from index *b* to index *c-1*.
    242 
    243    .. deprecated:: 2.6
    244       This function is removed in Python 3.x.  Use :func:`delitem` with a slice
    245       index.
    246 
    247 
    248 .. function:: getitem(a, b)
    249               __getitem__(a, b)
    250 
    251    Return the value of *a* at index *b*.
    252 
    253 
    254 .. function:: getslice(a, b, c)
    255               __getslice__(a, b, c)
    256 
    257    Return the slice of *a* from index *b* to index *c-1*.
    258 
    259    .. deprecated:: 2.6
    260       This function is removed in Python 3.x.  Use :func:`getitem` with a slice
    261       index.
    262 
    263 
    264 .. function:: indexOf(a, b)
    265 
    266    Return the index of the first of occurrence of *b* in *a*.
    267 
    268 
    269 .. function:: repeat(a, b)
    270               __repeat__(a, b)
    271 
    272    .. deprecated:: 2.7
    273       Use :func:`__mul__` instead.
    274 
    275    Return ``a * b`` where *a* is a sequence and *b* is an integer.
    276 
    277 
    278 .. function:: sequenceIncludes(...)
    279 
    280    .. deprecated:: 2.0
    281       Use :func:`contains` instead.
    282 
    283    Alias for :func:`contains`.
    284 
    285 
    286 .. function:: setitem(a, b, c)
    287               __setitem__(a, b, c)
    288 
    289    Set the value of *a* at index *b* to *c*.
    290 
    291 
    292 .. function:: setslice(a, b, c, v)
    293               __setslice__(a, b, c, v)
    294 
    295    Set the slice of *a* from index *b* to index *c-1* to the sequence *v*.
    296 
    297    .. deprecated:: 2.6
    298       This function is removed in Python 3.x.  Use :func:`setitem` with a slice
    299       index.
    300 
    301 Example use of operator functions::
    302 
    303     >>> # Elementwise multiplication
    304     >>> map(mul, [0, 1, 2, 3], [10, 20, 30, 40])
    305     [0, 20, 60, 120]
    306 
    307     >>> # Dot product
    308     >>> sum(map(mul, [0, 1, 2, 3], [10, 20, 30, 40]))
    309     200
    310 
    311 Many operations have an "in-place" version.  The following functions provide a
    312 more primitive access to in-place operators than the usual syntax does; for
    313 example, the :term:`statement` ``x += y`` is equivalent to
    314 ``x = operator.iadd(x, y)``.  Another way to put it is to say that
    315 ``z = operator.iadd(x, y)`` is equivalent to the compound statement
    316 ``z = x; z += y``.
    317 
    318 .. function:: iadd(a, b)
    319               __iadd__(a, b)
    320 
    321    ``a = iadd(a, b)`` is equivalent to ``a += b``.
    322 
    323    .. versionadded:: 2.5
    324 
    325 
    326 .. function:: iand(a, b)
    327               __iand__(a, b)
    328 
    329    ``a = iand(a, b)`` is equivalent to ``a &= b``.
    330 
    331    .. versionadded:: 2.5
    332 
    333 
    334 .. function:: iconcat(a, b)
    335               __iconcat__(a, b)
    336 
    337    ``a = iconcat(a, b)`` is equivalent to ``a += b`` for *a* and *b* sequences.
    338 
    339    .. versionadded:: 2.5
    340 
    341 
    342 .. function:: idiv(a, b)
    343               __idiv__(a, b)
    344 
    345    ``a = idiv(a, b)`` is equivalent to ``a /= b`` when ``__future__.division`` is
    346    not in effect.
    347 
    348    .. versionadded:: 2.5
    349 
    350 
    351 .. function:: ifloordiv(a, b)
    352               __ifloordiv__(a, b)
    353 
    354    ``a = ifloordiv(a, b)`` is equivalent to ``a //= b``.
    355 
    356    .. versionadded:: 2.5
    357 
    358 
    359 .. function:: ilshift(a, b)
    360               __ilshift__(a, b)
    361 
    362    ``a = ilshift(a, b)`` is equivalent to ``a <<= b``.
    363 
    364    .. versionadded:: 2.5
    365 
    366 
    367 .. function:: imod(a, b)
    368               __imod__(a, b)
    369 
    370    ``a = imod(a, b)`` is equivalent to ``a %= b``.
    371 
    372    .. versionadded:: 2.5
    373 
    374 
    375 .. function:: imul(a, b)
    376               __imul__(a, b)
    377 
    378    ``a = imul(a, b)`` is equivalent to ``a *= b``.
    379 
    380    .. versionadded:: 2.5
    381 
    382 
    383 .. function:: ior(a, b)
    384               __ior__(a, b)
    385 
    386    ``a = ior(a, b)`` is equivalent to ``a |= b``.
    387 
    388    .. versionadded:: 2.5
    389 
    390 
    391 .. function:: ipow(a, b)
    392               __ipow__(a, b)
    393 
    394    ``a = ipow(a, b)`` is equivalent to ``a **= b``.
    395 
    396    .. versionadded:: 2.5
    397 
    398 
    399 .. function:: irepeat(a, b)
    400               __irepeat__(a, b)
    401 
    402    .. deprecated:: 2.7
    403       Use :func:`__imul__` instead.
    404 
    405    ``a = irepeat(a, b)`` is equivalent to ``a *= b`` where *a* is a sequence and
    406    *b* is an integer.
    407 
    408    .. versionadded:: 2.5
    409 
    410 
    411 .. function:: irshift(a, b)
    412               __irshift__(a, b)
    413 
    414    ``a = irshift(a, b)`` is equivalent to ``a >>= b``.
    415 
    416    .. versionadded:: 2.5
    417 
    418 
    419 .. function:: isub(a, b)
    420               __isub__(a, b)
    421 
    422    ``a = isub(a, b)`` is equivalent to ``a -= b``.
    423 
    424    .. versionadded:: 2.5
    425 
    426 
    427 .. function:: itruediv(a, b)
    428               __itruediv__(a, b)
    429 
    430    ``a = itruediv(a, b)`` is equivalent to ``a /= b`` when ``__future__.division``
    431    is in effect.
    432 
    433    .. versionadded:: 2.5
    434 
    435 
    436 .. function:: ixor(a, b)
    437               __ixor__(a, b)
    438 
    439    ``a = ixor(a, b)`` is equivalent to ``a ^= b``.
    440 
    441    .. versionadded:: 2.5
    442 
    443 
    444 The :mod:`operator` module also defines a few predicates to test the type of
    445 objects; however, these are not all reliable.  It is preferable to test
    446 abstract base classes instead (see :mod:`collections` and
    447 :mod:`numbers` for details).
    448 
    449 .. function:: isCallable(obj)
    450 
    451    .. deprecated:: 2.0
    452       Use ``isinstance(x, collections.Callable)`` instead.
    453 
    454    Returns true if the object *obj* can be called like a function, otherwise it
    455    returns false.  True is returned for functions, bound and unbound methods, class
    456    objects, and instance objects which support the :meth:`__call__` method.
    457 
    458 
    459 .. function:: isMappingType(obj)
    460 
    461    .. deprecated:: 2.7
    462       Use ``isinstance(x, collections.Mapping)`` instead.
    463 
    464    Returns true if the object *obj* supports the mapping interface. This is true for
    465    dictionaries and all instance objects defining :meth:`__getitem__`.
    466 
    467 
    468 .. function:: isNumberType(obj)
    469 
    470    .. deprecated:: 2.7
    471       Use ``isinstance(x, numbers.Number)`` instead.
    472 
    473    Returns true if the object *obj* represents a number.  This is true for all
    474    numeric types implemented in C.
    475 
    476 
    477 .. function:: isSequenceType(obj)
    478 
    479    .. deprecated:: 2.7
    480       Use ``isinstance(x, collections.Sequence)`` instead.
    481 
    482    Returns true if the object *obj* supports the sequence protocol. This returns true
    483    for all objects which define sequence methods in C, and for all instance objects
    484    defining :meth:`__getitem__`.
    485 
    486 
    487 The :mod:`operator` module also defines tools for generalized attribute and item
    488 lookups.  These are useful for making fast field extractors as arguments for
    489 :func:`map`, :func:`sorted`, :meth:`itertools.groupby`, or other functions that
    490 expect a function argument.
    491 
    492 
    493 .. function:: attrgetter(attr)
    494               attrgetter(*attrs)
    495 
    496    Return a callable object that fetches *attr* from its operand.
    497    If more than one attribute is requested, returns a tuple of attributes.
    498    The attribute names can also contain dots. For example:
    499 
    500    * After ``f = attrgetter('name')``, the call ``f(b)`` returns ``b.name``.
    501 
    502    * After ``f = attrgetter('name', 'date')``, the call ``f(b)`` returns
    503      ``(b.name, b.date)``.
    504 
    505    * After ``f = attrgetter('name.first', 'name.last')``, the call ``f(b)``
    506      returns ``(b.name.first, b.name.last)``.
    507 
    508    Equivalent to::
    509 
    510       def attrgetter(*items):
    511           if len(items) == 1:
    512               attr = items[0]
    513               def g(obj):
    514                   return resolve_attr(obj, attr)
    515           else:
    516               def g(obj):
    517                   return tuple(resolve_attr(obj, attr) for attr in items)
    518           return g
    519 
    520       def resolve_attr(obj, attr):
    521           for name in attr.split("."):
    522               obj = getattr(obj, name)
    523           return obj
    524 
    525 
    526    .. versionadded:: 2.4
    527 
    528    .. versionchanged:: 2.5
    529       Added support for multiple attributes.
    530 
    531    .. versionchanged:: 2.6
    532       Added support for dotted attributes.
    533 
    534 
    535 .. function:: itemgetter(item)
    536               itemgetter(*items)
    537 
    538    Return a callable object that fetches *item* from its operand using the
    539    operand's :meth:`__getitem__` method.  If multiple items are specified,
    540    returns a tuple of lookup values.  For example:
    541 
    542    * After ``f = itemgetter(2)``, the call ``f(r)`` returns ``r[2]``.
    543 
    544    * After ``g = itemgetter(2, 5, 3)``, the call ``g(r)`` returns
    545      ``(r[2], r[5], r[3])``.
    546 
    547    Equivalent to::
    548 
    549       def itemgetter(*items):
    550           if len(items) == 1:
    551               item = items[0]
    552               def g(obj):
    553                   return obj[item]
    554           else:
    555               def g(obj):
    556                   return tuple(obj[item] for item in items)
    557           return g
    558 
    559    The items can be any type accepted by the operand's :meth:`__getitem__`
    560    method.  Dictionaries accept any hashable value.  Lists, tuples, and
    561    strings accept an index or a slice:
    562 
    563       >>> itemgetter(1)('ABCDEFG')
    564       'B'
    565       >>> itemgetter(1,3,5)('ABCDEFG')
    566       ('B', 'D', 'F')
    567       >>> itemgetter(slice(2,None))('ABCDEFG')
    568       'CDEFG'
    569 
    570    .. versionadded:: 2.4
    571 
    572    .. versionchanged:: 2.5
    573       Added support for multiple item extraction.
    574 
    575    Example of using :func:`itemgetter` to retrieve specific fields from a
    576    tuple record:
    577 
    578       >>> inventory = [('apple', 3), ('banana', 2), ('pear', 5), ('orange', 1)]
    579       >>> getcount = itemgetter(1)
    580       >>> map(getcount, inventory)
    581       [3, 2, 5, 1]
    582       >>> sorted(inventory, key=getcount)
    583       [('orange', 1), ('banana', 2), ('apple', 3), ('pear', 5)]
    584 
    585 
    586 .. function:: methodcaller(name[, args...])
    587 
    588    Return a callable object that calls the method *name* on its operand.  If
    589    additional arguments and/or keyword arguments are given, they will be given
    590    to the method as well.  For example:
    591 
    592    * After ``f = methodcaller('name')``, the call ``f(b)`` returns ``b.name()``.
    593 
    594    * After ``f = methodcaller('name', 'foo', bar=1)``, the call ``f(b)``
    595      returns ``b.name('foo', bar=1)``.
    596 
    597    Equivalent to::
    598 
    599       def methodcaller(name, *args, **kwargs):
    600           def caller(obj):
    601               return getattr(obj, name)(*args, **kwargs)
    602           return caller
    603 
    604    .. versionadded:: 2.6
    605 
    606 
    607 .. _operator-map:
    608 
    609 Mapping Operators to Functions
    610 ------------------------------
    611 
    612 This table shows how abstract operations correspond to operator symbols in the
    613 Python syntax and the functions in the :mod:`operator` module.
    614 
    615 +-----------------------+-------------------------+---------------------------------------+
    616 | Operation             | Syntax                  | Function                              |
    617 +=======================+=========================+=======================================+
    618 | Addition              | ``a + b``               | ``add(a, b)``                         |
    619 +-----------------------+-------------------------+---------------------------------------+
    620 | Concatenation         | ``seq1 + seq2``         | ``concat(seq1, seq2)``                |
    621 +-----------------------+-------------------------+---------------------------------------+
    622 | Containment Test      | ``obj in seq``          | ``contains(seq, obj)``                |
    623 +-----------------------+-------------------------+---------------------------------------+
    624 | Division              | ``a / b``               | ``div(a, b)`` (without                |
    625 |                       |                         | ``__future__.division``)              |
    626 +-----------------------+-------------------------+---------------------------------------+
    627 | Division              | ``a / b``               | ``truediv(a, b)`` (with               |
    628 |                       |                         | ``__future__.division``)              |
    629 +-----------------------+-------------------------+---------------------------------------+
    630 | Division              | ``a // b``              | ``floordiv(a, b)``                    |
    631 +-----------------------+-------------------------+---------------------------------------+
    632 | Bitwise And           | ``a & b``               | ``and_(a, b)``                        |
    633 +-----------------------+-------------------------+---------------------------------------+
    634 | Bitwise Exclusive Or  | ``a ^ b``               | ``xor(a, b)``                         |
    635 +-----------------------+-------------------------+---------------------------------------+
    636 | Bitwise Inversion     | ``~ a``                 | ``invert(a)``                         |
    637 +-----------------------+-------------------------+---------------------------------------+
    638 | Bitwise Or            | ``a | b``               | ``or_(a, b)``                         |
    639 +-----------------------+-------------------------+---------------------------------------+
    640 | Exponentiation        | ``a ** b``              | ``pow(a, b)``                         |
    641 +-----------------------+-------------------------+---------------------------------------+
    642 | Identity              | ``a is b``              | ``is_(a, b)``                         |
    643 +-----------------------+-------------------------+---------------------------------------+
    644 | Identity              | ``a is not b``          | ``is_not(a, b)``                      |
    645 +-----------------------+-------------------------+---------------------------------------+
    646 | Indexed Assignment    | ``obj[k] = v``          | ``setitem(obj, k, v)``                |
    647 +-----------------------+-------------------------+---------------------------------------+
    648 | Indexed Deletion      | ``del obj[k]``          | ``delitem(obj, k)``                   |
    649 +-----------------------+-------------------------+---------------------------------------+
    650 | Indexing              | ``obj[k]``              | ``getitem(obj, k)``                   |
    651 +-----------------------+-------------------------+---------------------------------------+
    652 | Left Shift            | ``a << b``              | ``lshift(a, b)``                      |
    653 +-----------------------+-------------------------+---------------------------------------+
    654 | Modulo                | ``a % b``               | ``mod(a, b)``                         |
    655 +-----------------------+-------------------------+---------------------------------------+
    656 | Multiplication        | ``a * b``               | ``mul(a, b)``                         |
    657 +-----------------------+-------------------------+---------------------------------------+
    658 | Negation (Arithmetic) | ``- a``                 | ``neg(a)``                            |
    659 +-----------------------+-------------------------+---------------------------------------+
    660 | Negation (Logical)    | ``not a``               | ``not_(a)``                           |
    661 +-----------------------+-------------------------+---------------------------------------+
    662 | Positive              | ``+ a``                 | ``pos(a)``                            |
    663 +-----------------------+-------------------------+---------------------------------------+
    664 | Right Shift           | ``a >> b``              | ``rshift(a, b)``                      |
    665 +-----------------------+-------------------------+---------------------------------------+
    666 | Sequence Repetition   | ``seq * i``             | ``repeat(seq, i)``                    |
    667 +-----------------------+-------------------------+---------------------------------------+
    668 | Slice Assignment      | ``seq[i:j] = values``   | ``setitem(seq, slice(i, j), values)`` |
    669 +-----------------------+-------------------------+---------------------------------------+
    670 | Slice Deletion        | ``del seq[i:j]``        | ``delitem(seq, slice(i, j))``         |
    671 +-----------------------+-------------------------+---------------------------------------+
    672 | Slicing               | ``seq[i:j]``            | ``getitem(seq, slice(i, j))``         |
    673 +-----------------------+-------------------------+---------------------------------------+
    674 | String Formatting     | ``s % obj``             | ``mod(s, obj)``                       |
    675 +-----------------------+-------------------------+---------------------------------------+
    676 | Subtraction           | ``a - b``               | ``sub(a, b)``                         |
    677 +-----------------------+-------------------------+---------------------------------------+
    678 | Truth Test            | ``obj``                 | ``truth(obj)``                        |
    679 +-----------------------+-------------------------+---------------------------------------+
    680 | Ordering              | ``a < b``               | ``lt(a, b)``                          |
    681 +-----------------------+-------------------------+---------------------------------------+
    682 | Ordering              | ``a <= b``              | ``le(a, b)``                          |
    683 +-----------------------+-------------------------+---------------------------------------+
    684 | Equality              | ``a == b``              | ``eq(a, b)``                          |
    685 +-----------------------+-------------------------+---------------------------------------+
    686 | Difference            | ``a != b``              | ``ne(a, b)``                          |
    687 +-----------------------+-------------------------+---------------------------------------+
    688 | Ordering              | ``a >= b``              | ``ge(a, b)``                          |
    689 +-----------------------+-------------------------+---------------------------------------+
    690 | Ordering              | ``a > b``               | ``gt(a, b)``                          |
    691 +-----------------------+-------------------------+---------------------------------------+
    692 
    693