.. Licensed to the Apache Software Foundation (ASF) under one
.. or more contributor license agreements.  See the NOTICE file
.. distributed with this work for additional information
.. regarding copyright ownership.  The ASF licenses this file
.. to you under the Apache License, Version 2.0 (the
.. "License"); you may not use this file except in compliance
.. with the License.  You may obtain a copy of the License at

..   http://www.apache.org/licenses/LICENSE-2.0

.. Unless required by applicable law or agreed to in writing,
.. software distributed under the License is distributed on an
.. "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
.. KIND, either express or implied.  See the License for the
.. specific language governing permissions and limitations
.. under the License.

.. default-domain:: cpp
.. highlight:: cpp
.. cpp:namespace:: arrow::compute

.. _compute-cpp:

=================
Compute Functions
=================

The generic Compute API
=======================

.. seealso::
   :doc:`Compute Functions API reference <api/compute>`

Functions and function registry
-------------------------------

Functions represent compute operations over inputs of possibly varying
types.  Internally, a function is implemented by one or several
"kernels", depending on the concrete input types (for example, a function
adding values from two inputs can have different kernels depending on
whether the inputs are integral or floating-point).

Functions are stored in a global :class:`FunctionRegistry` where
they can be looked up by name.

Compute Initialization
----------------------

The compute library requires a call to :func:`arrow::compute::Initialize`
in order to register the individual functions into the global :class:`FunctionRegistry`,
otherwise only the functions required for Arrow core functionality will be available.

.. note::
   The set of functions required for Arrow core functionality are an implementation detail
   of the library, and should not be considered stable.

Input shapes
------------

Computation inputs are represented as a general :class:`Datum` class,
which is a tagged union of several shapes of data such as :class:`Scalar`,
:class:`Array` and :class:`ChunkedArray`.  Many compute functions support
both array (chunked or not) and scalar inputs, however some will mandate
particular input types. For example, while ``array_sort_indices`` requires its
first and only input to be an array, the generalized ``sort_indices``
function accepts an array, chunked array, record batch or table.

.. _invoking-compute-functions:

Invoking functions
------------------

Compute functions can be invoked by name using
:func:`arrow::compute::CallFunction`::

   std::shared_ptr<arrow::Array> numbers_array = ...;
   std::shared_ptr<arrow::Scalar> increment = ...;
   arrow::Datum incremented_datum;

   ARROW_ASSIGN_OR_RAISE(incremented_datum,
                         arrow::compute::CallFunction("add", {numbers_array, increment}));
   std::shared_ptr<Array> incremented_array = std::move(incremented_datum).make_array();

(note this example uses implicit conversion from ``std::shared_ptr<Array>``
to ``Datum``)

Many compute functions are also available directly as concrete APIs, here
:func:`arrow::compute::Add`::

   std::shared_ptr<arrow::Array> numbers_array = ...;
   std::shared_ptr<arrow::Scalar> increment = ...;
   arrow::Datum incremented_datum;

   ARROW_ASSIGN_OR_RAISE(incremented_datum,
                         arrow::compute::Add(numbers_array, increment));
   std::shared_ptr<Array> incremented_array = std::move(incremented_datum).make_array();

Some functions accept or require an options structure that determines the
exact semantics of the function::

   ScalarAggregateOptions scalar_aggregate_options;
   scalar_aggregate_options.skip_nulls = false;

   std::shared_ptr<arrow::Array> array = ...;
   arrow::Datum min_max;

   ARROW_ASSIGN_OR_RAISE(min_max,
                         arrow::compute::CallFunction("min_max", {array},
                                                      &scalar_aggregate_options));

   // Unpack struct scalar result (a two-field {"min", "max"} scalar)
   std::shared_ptr<arrow::Scalar> min_value, max_value;
   min_value = min_max.scalar_as<arrow::StructScalar>().value[0];
   max_value = min_max.scalar_as<arrow::StructScalar>().value[1];

However, :ref:`Grouped Aggregations <grouped-aggregations-group-by>` are
not invocable via ``CallFunction``.

.. seealso::
   :doc:`Compute API reference <api/compute>`

Implicit casts
==============

Functions may require conversion of their arguments before execution if a
kernel does not match the argument types precisely. For example comparison
of dictionary encoded arrays is not directly supported by any kernel, but an
implicit cast can be made allowing comparison against the decoded array.

Each function may define implicit cast behaviour as appropriate. For example
comparison and arithmetic kernels require identically typed arguments, and
support execution against differing numeric types by promoting their arguments
to numeric type which can accommodate any value from either input.

.. _common-numeric-type:

Common numeric type
-------------------

The common numeric type of a set of input numeric types is the smallest numeric
type which can accommodate any value of any input. If any input is a floating
point type the common numeric type is the widest floating point type among the
inputs. Otherwise the common numeric type is integral and is signed if any input
is signed. For example:

+-------------------+----------------------+------------------------------------------------+
| Input types       | Common numeric type  | Notes                                          |
+===================+======================+================================================+
| int32, int32      | int32                |                                                |
+-------------------+----------------------+------------------------------------------------+
| int16, int32      | int32                | Max width is 32, promote LHS to int32          |
+-------------------+----------------------+------------------------------------------------+
| uint16, int32     | int32                | One input signed, override unsigned            |
+-------------------+----------------------+------------------------------------------------+
| uint32, int32     | int64                | Widen to accommodate range of uint32           |
+-------------------+----------------------+------------------------------------------------+
| uint16, uint32    | uint32               | All inputs unsigned, maintain unsigned         |
+-------------------+----------------------+------------------------------------------------+
| int16, uint32     | int64                |                                                |
+-------------------+----------------------+------------------------------------------------+
| uint64, int16     | int64                | int64 cannot accommodate all uint64 values     |
+-------------------+----------------------+------------------------------------------------+
| float32, int32    | float32              | Promote RHS to float32                         |
+-------------------+----------------------+------------------------------------------------+
| float32, float64  | float64              |                                                |
+-------------------+----------------------+------------------------------------------------+
| float32, int64    | float32              | int64 is wider, still promotes to float32      |
+-------------------+----------------------+------------------------------------------------+

In particular, note that comparing a ``uint64`` column to an ``int16`` column
may emit an error if one of the ``uint64`` values cannot be expressed as the
common type ``int64`` (for example, ``2 ** 63``).

.. _compute-function-list:

Available functions
===================

Type categories
---------------

To avoid exhaustively listing supported types, the tables below use a number
of general type categories:

* "Numeric": Integer types (Int8, etc.) and Floating-point types (Float32,
  Float64, sometimes Float16).  Some functions also accept Decimal input.

* "Temporal": Date types (Date32, Date64), Time types (Time32, Time64),
  Timestamp, Duration, Interval.

* "Binary-like": Binary, LargeBinary, sometimes also FixedSizeBinary.

* "String-like": String, LargeString.

* "List-like": List, LargeList, ListView, LargeListView, and sometimes also
  FixedSizeList.

* "Nested": List-likes (including FixedSizeList), Struct, Union, and
  related types like Map.

If you are unsure whether a function supports a concrete input type, we
recommend you try it out.  Unsupported input types return a ``TypeError``
:class:`Status`.

.. _aggregation-option-list:

Aggregations
------------

Scalar aggregations operate on a (chunked) array or scalar value and reduce
the input to a single output value.

+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| Function name      | Arity   | Input types                                   | Output type            | Options class                    | Notes      |
+====================+=========+===============================================+========================+==================================+============+
| all                | Unary   | Boolean                                       | Scalar Boolean         | :struct:`ScalarAggregateOptions` | \(1)       |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| any                | Unary   | Boolean                                       | Scalar Boolean         | :struct:`ScalarAggregateOptions` | \(1)       |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| approximate_median | Unary   | Numeric                                       | Scalar Float64         | :struct:`ScalarAggregateOptions` |            |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| count              | Unary   | Any                                           | Scalar Int64           | :struct:`CountOptions`           | \(2)       |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| count_all          | Nullary |                                               | Scalar Int64           |                                  |            |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| count_distinct     | Unary   | Non-nested types                              | Scalar Int64           | :struct:`CountOptions`           | \(2)       |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| first              | Unary   | Numeric, Binary                               | Scalar Input type      | :struct:`ScalarAggregateOptions` | \(3)       |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| first_last         | Unary   | Numeric, Binary                               | Scalar Struct          | :struct:`ScalarAggregateOptions` | \(3)       |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| index              | Unary   | Any                                           | Scalar Int64           | :struct:`IndexOptions`           | \(4)       |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| kurtosis           | Unary   | Numeric                                       | Scalar Float64         | :struct:`SkewOptions`            | \(12)      |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| last               | Unary   | Numeric, Binary                               | Scalar Input type      | :struct:`ScalarAggregateOptions` | \(3)       |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| max                | Unary   | Non-nested types                              | Scalar Input type      | :struct:`ScalarAggregateOptions` |            |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| mean               | Unary   | Numeric                                       | Scalar Decimal/Float64 | :struct:`ScalarAggregateOptions` | \(5)       |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| min                | Unary   | Non-nested types                              | Scalar Input type      | :struct:`ScalarAggregateOptions` |            |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| min_max            | Unary   | Non-nested types                              | Scalar Struct          | :struct:`ScalarAggregateOptions` | \(6)       |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| mode               | Unary   | Numeric                                       | Struct                 | :struct:`ModeOptions`            | \(7)       |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| pivot_wider        | Binary  | Binary, String, Integer (Arg 0); Any (Arg 1)  | Scalar Struct          | :struct:`PivotWiderOptions`      | \(8)       |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| product            | Unary   | Numeric                                       | Scalar Numeric         | :struct:`ScalarAggregateOptions` | \(9)       |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| quantile           | Unary   | Numeric                                       | Scalar Numeric         | :struct:`QuantileOptions`        | \(11)      |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| skew               | Unary   | Numeric                                       | Scalar Float64         | :struct:`SkewOptions`            | \(12)      |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| stddev             | Unary   | Numeric                                       | Scalar Float64         | :struct:`VarianceOptions`        | \(12)      |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| sum                | Unary   | Numeric                                       | Scalar Numeric         | :struct:`ScalarAggregateOptions` | \(9) \(10) |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| tdigest            | Unary   | Numeric                                       | Float64                | :struct:`TDigestOptions`         | \(13)      |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+
| variance           | Unary   | Numeric                                       | Scalar Float64         | :struct:`VarianceOptions`        | \(12)      |
+--------------------+---------+-----------------------------------------------+------------------------+----------------------------------+------------+

* \(1) If null values are taken into account, by setting the
  ScalarAggregateOptions parameter skip_nulls = false, then `Kleene logic`_
  logic is applied. The min_count option is not respected.

* \(2) CountMode controls whether only non-null values are counted (the
  default), only null values are counted, or all values are counted.

* \(3) Result is based on the ordering of input data.

* \(4) Returns -1 if the value is not found. The index of a null value
  is always -1, regardless of whether there are nulls in the input.

* \(5) For decimal inputs, the resulting decimal will have the same
  precision and scale. The result is rounded away from zero.

* \(6) Output is a ``{"min": input type, "max": input type}`` Struct.

  Of the interval types, only the month interval is supported, as the day-time
  and month-day-nano types are not sortable.

* \(7) Output is an array of ``{"mode": input type, "count": Int64}`` Struct.
  It contains the *N* most common elements in the input, in descending
  order, where *N* is given in :member:`ModeOptions::n`.
  If two values have the same count, the smallest one comes first.
  Note that the output can have less than *N* elements if the input has
  less than *N* distinct values.

* \(8) The first input contains the pivot key, while the second input contains
  the values to be pivoted. The output is a Struct with one field for each key
  in :member:`PivotOptions::key_names`.

* \(9) Output is Int64, UInt64, Float64, or Decimal128/256, depending on the
  input type.

* \(10) For Decimal input, the output precision is increased to the maximum
  precision for the input type's width. For instance, an array of
  ``decimal128(3, 2)`` will return a ``decimal128(38, 2)`` scalar.

* \(11) Output is Float64 or input type, depending on QuantileOptions.

* \(12) Decimal arguments are cast to Float64 first.

* \(13) tdigest/t-digest computes approximate quantiles, and so only needs a
  fixed amount of memory. See the `reference implementation
  <https://github.com/tdunning/t-digest>`_ for details.

  Decimal arguments are cast to Float64 first.

.. _grouped-aggregations-group-by:

Grouped Aggregations ("group by")
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Grouped aggregations are not directly invocable, but are used as part of a
SQL-style "group by" operation. Like scalar aggregations, grouped aggregations
reduce multiple input values to a single output value. Instead of aggregating
all values of the input, however, grouped aggregations partition the input
values on some set of "key" columns, then aggregate each group individually,
emitting one output value per input group.

As an example, for the following table:

+------------------+-----------------+
| Column ``key``   | Column ``x``    |
+==================+=================+
| "a"              | 2               |
+------------------+-----------------+
| "a"              | 5               |
+------------------+-----------------+
| "b"              | null            |
+------------------+-----------------+
| "b"              | null            |
+------------------+-----------------+
| null             | null            |
+------------------+-----------------+
| null             | 9               |
+------------------+-----------------+

we can compute a sum of the column ``x``, grouped on the column ``key``.
This gives us three groups, with the following results. Note that null is
treated as a distinct key value.

+------------------+-----------------------+
| Column ``key``   | Column ``sum(x)``     |
+==================+=======================+
| "a"              | 7                     |
+------------------+-----------------------+
| "b"              | null                  |
+------------------+-----------------------+
| null             | 9                     |
+------------------+-----------------------+

The supported aggregation functions are as follows. All function names are
prefixed with ``hash_``, which differentiates them from their scalar
equivalents above and reflects how they are implemented internally.

+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| Function name           | Arity   | Input types                                  | Output type            | Options class                    | Notes     |
+=========================+=========+==============================================+========================+==================================+===========+
| hash_all                | Unary   | Boolean                                      | Boolean                | :struct:`ScalarAggregateOptions` | \(1)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_any                | Unary   | Boolean                                      | Boolean                | :struct:`ScalarAggregateOptions` | \(1)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_approximate_median | Unary   | Numeric                                      | Float64                | :struct:`ScalarAggregateOptions` |           |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_count              | Unary   | Any                                          | Int64                  | :struct:`CountOptions`           | \(2)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_count_all          | Nullary |                                              | Int64                  |                                  |           |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_count_distinct     | Unary   | Any                                          | Int64                  | :struct:`CountOptions`           | \(2)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_distinct           | Unary   | Any                                          | List of input type     | :struct:`CountOptions`           | \(2) \(3) |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_first              | Unary   | Numeric, Binary                              | Input type             | :struct:`ScalarAggregateOptions` | \(11)     |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_first_last         | Unary   | Numeric, Binary                              | Struct                 | :struct:`ScalarAggregateOptions` | \(11)     |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_kurtosis           | Unary   | Numeric                                      | Float64                | :struct:`SkewOptions`            | \(9)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_last               | Unary   | Numeric, Binary                              | Input type             | :struct:`ScalarAggregateOptions` | \(11)     |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_list               | Unary   | Any                                          | List of input type     |                                  | \(3)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_max                | Unary   | Non-nested, non-binary/string-like           | Input type             | :struct:`ScalarAggregateOptions` |           |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_mean               | Unary   | Numeric                                      | Decimal/Float64        | :struct:`ScalarAggregateOptions` | \(4)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_min                | Unary   | Non-nested, non-binary/string-like           | Input type             | :struct:`ScalarAggregateOptions` |           |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_min_max            | Unary   | Non-nested types                             | Struct                 | :struct:`ScalarAggregateOptions` | \(5)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_one                | Unary   | Any                                          | Input type             |                                  | \(6)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_pivot_wider        | Binary  | Binary, String, Integer (Arg 0); Any (Arg 1) | Struct                 | :struct:`PivotWiderOptions`      | \(7)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_product            | Unary   | Numeric                                      | Numeric                | :struct:`ScalarAggregateOptions` | \(8)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_skew               | Unary   | Numeric                                      | Float64                | :struct:`SkewOptions`            | \(9)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_stddev             | Unary   | Numeric                                      | Float64                | :struct:`VarianceOptions`        | \(9)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_sum                | Unary   | Numeric                                      | Numeric                | :struct:`ScalarAggregateOptions` | \(8)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_tdigest            | Unary   | Numeric                                      | FixedSizeList[Float64] | :struct:`TDigestOptions`         | \(10)     |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+
| hash_variance           | Unary   | Numeric                                      | Float64                | :struct:`VarianceOptions`        | \(9)      |
+-------------------------+---------+----------------------------------------------+------------------------+----------------------------------+-----------+

* \(1) If null values are taken into account, by setting the
  :member:`ScalarAggregateOptions::skip_nulls` to false, then `Kleene logic`_
  logic is applied. The min_count option is not respected.

* \(2) CountMode controls whether only non-null values are counted
  (the default), only null values are counted, or all values are
  counted. For hash_distinct, it instead controls whether null values
  are emitted. This never affects the grouping keys, only group values
  (i.e. you may get a group where the key is null).

* \(3) ``hash_distinct`` and ``hash_list`` gather the grouped values
  into a list array.

* \(4) For decimal inputs, the resulting decimal will have the same
  precision and scale. The result is rounded away from zero.

* \(5) Output is a ``{"min": input type, "max": input type}`` Struct array.

  Of the interval types, only the month interval is supported, as the day-time
  and month-day-nano types are not sortable.

* \(6) ``hash_one`` returns one arbitrary value from the input for each
  group. The function is biased towards non-null values: if there is at least
  one non-null value for a certain group, that value is returned, and only if
  all the values are ``null`` for the group will the function return ``null``.

* \(7) The first input contains the pivot key, while the second input contains
  the values to be pivoted. The output is a Struct with one field for each key
  in :member:`PivotOptions::key_names`.

* \(8) Output is Int64, UInt64, Float64, or Decimal128/256, depending on the
  input type.

* \(9) Decimal arguments are cast to Float64 first.

* \(10) T-digest computes approximate quantiles, and so only needs a
  fixed amount of memory. See the `reference implementation
  <https://github.com/tdunning/t-digest>`_ for details.

* \(11) Result is based on ordering of the input data.


Element-wise ("scalar") functions
---------------------------------

All element-wise functions accept both arrays and scalars as input.  The
semantics for unary functions are as follow:

* scalar inputs produce a scalar output
* array inputs produce an array output

Binary functions have the following semantics (which is sometimes called
"broadcasting" in other systems such as NumPy):

* ``(scalar, scalar)`` inputs produce a scalar output
* ``(array, array)`` inputs produce an array output (and both inputs must
  be of the same length)
* ``(scalar, array)`` and ``(array, scalar)`` produce an array output.
  The scalar input is handled as if it were an array of the same length N
  as the other input, with the same value repeated N times.

Arithmetic functions
~~~~~~~~~~~~~~~~~~~~

These functions expect inputs of numeric type and apply a given arithmetic
operation to each element(s) gathered from the input(s).  If any of the
input element(s) is null, the corresponding output element is null.
For binary functions, input(s) will be cast to the
:ref:`common numeric type <common-numeric-type>`
(and dictionary decoded, if applicable) before the operation is applied.

The default variant of these functions does not detect overflow (the result
then typically wraps around).  Most functions are also available in an
overflow-checking variant, suffixed ``_checked``, which returns
an ``Invalid`` :class:`Status` when overflow is detected.

For functions which support decimal inputs (currently ``add``, ``subtract``,
``multiply``, and ``divide`` and their checked variants), decimals of different
precisions/scales will be promoted appropriately. Mixed decimal and
floating-point arguments will cast all arguments to floating-point, while mixed
decimal and integer arguments will cast all arguments to decimals.
Mixed time resolution temporal inputs will be cast to finest input resolution.

+------------------+--------+-------------------------+-------------------------------+-------+
| Function name    | Arity  | Input types             | Output type                   | Notes |
+==================+========+=========================+===============================+=======+
| abs              | Unary  | Numeric/Duration        | Numeric/Duration              |       |
+------------------+--------+-------------------------+-------------------------------+-------+
| abs_checked      | Unary  | Numeric/Duration        | Numeric/Duration              |       |
+------------------+--------+-------------------------+-------------------------------+-------+
| add              | Binary | Numeric/Temporal        | Numeric/Temporal              | \(1)  |
+------------------+--------+-------------------------+-------------------------------+-------+
| add_checked      | Binary | Numeric/Temporal        | Numeric/Temporal              | \(1)  |
+------------------+--------+-------------------------+-------------------------------+-------+
| divide           | Binary | Numeric/Temporal        | Numeric/Temporal              | \(1)  |
+------------------+--------+-------------------------+-------------------------------+-------+
| divide_checked   | Binary | Numeric/Temporal        | Numeric/Temporal              | \(1)  |
+------------------+--------+-------------------------+-------------------------------+-------+
| exp              | Unary  | Numeric                 | Float32/Float64               |       |
+------------------+--------+-------------------------+-------------------------------+-------+
| expm1            | Unary  | Numeric                 | Float32/Float64               |       |
+------------------+--------+-------------------------+-------------------------------+-------+
| hypot            | Binary | Numeric                 | Float32/Float64               | \(3)  |
+------------------+--------+-------------------------+-------------------------------+-------+
| multiply         | Binary | Numeric/Temporal        | Numeric/Temporal              | \(1)  |
+------------------+--------+-------------------------+-------------------------------+-------+
| multiply_checked | Binary | Numeric/Temporal        | Numeric/Temporal              | \(1)  |
+------------------+--------+-------------------------+-------------------------------+-------+
| negate           | Unary  | Numeric/Duration        | Numeric/Duration              |       |
+------------------+--------+-------------------------+-------------------------------+-------+
| negate_checked   | Unary  | Signed Numeric/Duration | Signed Numeric/Duration       |       |
+------------------+--------+-------------------------+-------------------------------+-------+
| power            | Binary | Numeric                 | Numeric                       |       |
+------------------+--------+-------------------------+-------------------------------+-------+
| power_checked    | Binary | Numeric                 | Numeric                       |       |
+------------------+--------+-------------------------+-------------------------------+-------+
| sign             | Unary  | Numeric/Duration        | Int8/Float16/Float32/Float64  | \(2)  |
+------------------+--------+-------------------------+-------------------------------+-------+
| sqrt             | Unary  | Numeric                 | Numeric                       |       |
+------------------+--------+-------------------------+-------------------------------+-------+
| sqrt_checked     | Unary  | Numeric                 | Numeric                       |       |
+------------------+--------+-------------------------+-------------------------------+-------+
| subtract         | Binary | Numeric/Temporal        | Numeric/Temporal              | \(1)  |
+------------------+--------+-------------------------+-------------------------------+-------+
| subtract_checked | Binary | Numeric/Temporal        | Numeric/Temporal              | \(1)  |
+------------------+--------+-------------------------+-------------------------------+-------+

* \(1) Precision and scale of computed DECIMAL results

  +------------+---------------------------------------------+
  | Operation  | Result precision and scale                  |
  +============+=============================================+
  | | add      | | scale = max(s1, s2)                       |
  | | subtract | | precision = max(p1-s1, p2-s2) + 1 + scale |
  +------------+---------------------------------------------+
  | multiply   | | scale = s1 + s2                           |
  |            | | precision = p1 + p2 + 1                   |
  +------------+---------------------------------------------+
  | divide     | | scale = max(4, s1 + p2 - s2 + 1)          |
  |            | | precision = p1 - s1 + s2 + scale          |
  +------------+---------------------------------------------+

  It's compatible with Redshift's decimal promotion rules. All decimal digits
  are preserved for ``add``, ``subtract`` and ``multiply`` operations. The result
  precision of ``divide`` is at least the sum of precisions of both operands with
  enough scale kept. Error is returned if the result precision is beyond the
  decimal value range.

* \(2) Output is any of (-1,1) for nonzero inputs and 0 for zero input.  NaN
  values return NaN.  Integral and decimal values return signedness as Int8 and
  floating-point values return it with the same type as the input values.

* \(3) Computes ``sqrt(x^2 + y^2)`` without undue overflow or underflow at
  intermediate stages of the computation.  If either argument is infinite, the
  result is ``+Inf`` even if the other argument is NaN.

Bit-wise functions
~~~~~~~~~~~~~~~~~~

+--------------------------+------------+--------------------+---------------------+
| Function name            | Arity      | Input types        | Output type         |
+==========================+============+====================+=====================+
| bit_wise_and             | Binary     | Numeric            | Numeric             |
+--------------------------+------------+--------------------+---------------------+
| bit_wise_not             | Unary      | Numeric            | Numeric             |
+--------------------------+------------+--------------------+---------------------+
| bit_wise_or              | Binary     | Numeric            | Numeric             |
+--------------------------+------------+--------------------+---------------------+
| bit_wise_xor             | Binary     | Numeric            | Numeric             |
+--------------------------+------------+--------------------+---------------------+
| shift_left               | Binary     | Numeric            | Numeric             |
+--------------------------+------------+--------------------+---------------------+
| shift_left_checked       | Binary     | Numeric            | Numeric (1)         |
+--------------------------+------------+--------------------+---------------------+
| shift_right              | Binary     | Numeric            | Numeric             |
+--------------------------+------------+--------------------+---------------------+
| shift_right_checked      | Binary     | Numeric            | Numeric (1)         |
+--------------------------+------------+--------------------+---------------------+

* \(1) An error is emitted if the shift amount (i.e. the second input) is
  out of bounds for the data type.  However, an overflow when shifting the
  first input is not error (truncated bits are silently discarded).

Rounding functions
~~~~~~~~~~~~~~~~~~

Rounding functions displace numeric inputs to an approximate value with a simpler
representation based on the rounding criterion.

+-------------------+------------+-------------+-------------------------+----------------------------------+--------+
| Function name     | Arity      | Input types | Output type             | Options class                    | Notes  |
+===================+============+=============+=========================+==================================+========+
| ceil              | Unary      | Numeric     | Float32/Float64/Decimal |                                  |        |
+-------------------+------------+-------------+-------------------------+----------------------------------+--------+
| floor             | Unary      | Numeric     | Float32/Float64/Decimal |                                  |        |
+-------------------+------------+-------------+-------------------------+----------------------------------+--------+
| round             | Unary      | Numeric     | Input Type              | :struct:`RoundOptions`           | (1)(2) |
+-------------------+------------+-------------+-------------------------+----------------------------------+--------+
| round_to_multiple | Unary      | Numeric     | Input Type              | :struct:`RoundToMultipleOptions` | (1)(3) |
+-------------------+------------+-------------+-------------------------+----------------------------------+--------+
| round_binary      | Binary     | Numeric     | Input Type              | :struct:`RoundBinaryOptions`     | (1)(4) |
+-------------------+------------+-------------+-------------------------+----------------------------------+--------+
| trunc             | Unary      | Numeric     | Float32/Float64/Decimal |                                  |        |
+-------------------+------------+-------------+-------------------------+----------------------------------+--------+

* \(1)  By default rounding functions change a value to the nearest
  integer using HALF_TO_EVEN to resolve ties.  Options are available to control
  the rounding criterion.  All ``round`` functions have the
  ``round_mode`` option to set the rounding mode.
* \(2) Round to a number of digits where the ``ndigits`` option of
  :struct:`RoundOptions` specifies the rounding precision in terms of number
  of digits.  A negative value corresponds to digits in the non-fractional
  part.  For example, -2 corresponds to rounding to the nearest multiple of
  100 (zeroing the ones and tens digits).  Default value of ``ndigits`` is 0
  which rounds to the nearest integer. For integer inputs a non-negative
  ``ndigits`` value is ignored and the input is returned unchanged. For integer
  inputs, if ``-ndigits`` is larger than the maximum number of digits the
  input type can hold, an error is returned.
* \(3) Round to a multiple where the ``multiple`` option of
  :struct:`RoundToMultipleOptions` specifies the rounding scale.  The rounding
  multiple has to be a positive value and can be casted to input type.
  For example, 100 corresponds to rounding to the nearest multiple of 100
  (zeroing the ones and tens digits). Default value of ``multiple`` is 1 which
  rounds to the nearest integer.
* \(4) Round the first input to multiple of the second input. The rounding
  multiple has to be a positive value and can be casted to the first input type.
  For example, 100 corresponds to rounding to the nearest multiple of 100
  (zeroing the ones and tens digits).

For ``round`` functions, the following rounding modes are available.
Tie-breaking modes are prefixed with HALF and round non-ties to the nearest integer.
The example values are given for default values of ``ndigits`` and ``multiple``.

+-----------------------+--------------------------------------------------------------+---------------------------+
| ``round_mode``        | Operation performed                                          | Example values            |
+=======================+==============================================================+===========================+
| DOWN                  | Round to nearest integer less than or equal in magnitude;    | 3.2 -> 3, 3.7 -> 3,       |
|                       | also known as ``floor(x)``                                   | -3.2 -> -4, -3.7 -> -4    |
+-----------------------+--------------------------------------------------------------+---------------------------+
| UP                    | Round to nearest integer greater than or equal in magnitude; | 3.2 -> 4, 3.7 -> 4,       |
|                       | also known as ``ceil(x)``                                    | -3.2 -> -3, -3.7 -> -3    |
+-----------------------+--------------------------------------------------------------+---------------------------+
| TOWARDS_ZERO          | Get the integral part without fractional digits;             | 3.2 -> 3, 3.7 -> 3,       |
|                       | also known as ``trunc(x)``                                   | -3.2 -> -3, -3.7 -> -3    |
+-----------------------+--------------------------------------------------------------+---------------------------+
| TOWARDS_INFINITY      | Round negative values with ``DOWN`` rule,                    | 3.2 -> 4, 3.7 -> 4,       |
|                       | round positive values with ``UP`` rule                       | -3.2 -> -4, -3.7 -> -4    |
+-----------------------+--------------------------------------------------------------+---------------------------+
| HALF_DOWN             | Round ties with ``DOWN`` rule                                | 3.5 -> 3, 4.5 -> 4,       |
|                       |                                                              | -3.5 -> -4, -4.5 -> -5    |
+-----------------------+--------------------------------------------------------------+---------------------------+
| HALF_UP               | Round ties with ``UP`` rule                                  | 3.5 -> 4, 4.5 -> 5,       |
|                       |                                                              | -3.5 -> -3, -4.5 -> -4    |
+-----------------------+--------------------------------------------------------------+---------------------------+
| HALF_TOWARDS_ZERO     | Round ties with ``TOWARDS_ZERO`` rule                        | 3.5 -> 3, 4.5 -> 4,       |
|                       |                                                              | -3.5 -> -3, -4.5 -> -4    |
+-----------------------+--------------------------------------------------------------+---------------------------+
| HALF_TOWARDS_INFINITY | Round ties with ``TOWARDS_INFINITY`` rule                    | 3.5 -> 4, 4.5 -> 5,       |
|                       |                                                              | -3.5 -> -4, -4.5 -> -5    |
+-----------------------+--------------------------------------------------------------+---------------------------+
| HALF_TO_EVEN          | Round ties to nearest even integer                           | 3.5 -> 4, 4.5 -> 4,       |
|                       |                                                              | -3.5 -> -4, -4.5 -> -4    |
+-----------------------+--------------------------------------------------------------+---------------------------+
| HALF_TO_ODD           | Round ties to nearest odd integer                            | 3.5 -> 3, 4.5 -> 5,       |
|                       |                                                              | -3.5 -> -3, -4.5 -> -5    |
+-----------------------+--------------------------------------------------------------+---------------------------+

The following table gives examples of how ``ndigits`` (for the ``round``
and ``round_binary`` functions) and ``multiple`` (for ``round_to_multiple``)
influence the operation performed, respectively.

+--------------------+-------------------+---------------------------+
| Round ``multiple`` | Round ``ndigits`` | Operation performed       |
+====================+===================+===========================+
| 1                  | 0                 | Round to integer          |
+--------------------+-------------------+---------------------------+
| 0.001              | 3                 | Round to 3 decimal places |
+--------------------+-------------------+---------------------------+
| 10                 | -1                | Round to multiple of 10   |
+--------------------+-------------------+---------------------------+
| 2                  | NA                | Round to multiple of 2    |
+--------------------+-------------------+---------------------------+

Logarithmic functions
~~~~~~~~~~~~~~~~~~~~~

Logarithmic functions are also supported, and also offer ``_checked``
variants that check for domain errors if needed.

Decimal values are accepted, but are cast to Float64 first.

+--------------------------+------------+-------------------------+---------------------+
| Function name            | Arity      | Input types             | Output type         |
+==========================+============+=========================+=====================+
| ln                       | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| ln_checked               | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| log10                    | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| log10_checked            | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| log1p                    | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| log1p_checked            | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| log2                     | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| log2_checked             | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| logb                     | Binary     | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| logb_checked             | Binary     | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+

Trigonometric functions
~~~~~~~~~~~~~~~~~~~~~~~

Trigonometric functions are also supported, and also offer ``_checked``
variants that check for domain errors if needed.

Decimal values are accepted, but are cast to Float64 first.

+--------------------------+------------+-------------------------+---------------------+
| Function name            | Arity      | Input types             | Output type         |
+==========================+============+=========================+=====================+
| acos                     | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| acos_checked             | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| asin                     | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| asin_checked             | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| atan                     | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| atan2                    | Binary     | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| cos                      | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| cos_checked              | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| sin                      | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| sin_checked              | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| tan                      | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| tan_checked              | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+

Hyperbolic trigonometric functions
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Hyperbolic trigonometric functions are also supported, and, where applicable, also offer
``_checked`` variants that check for domain errors if needed.

Decimal values are accepted, but are cast to Float64 first.

+--------------------------+------------+-------------------------+---------------------+
| Function name            | Arity      | Input types             | Output type         |
+==========================+============+=========================+=====================+
| acosh                    | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| acosh_checked            | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| asinh                    | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| atanh                    | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| atanh_checked            | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| cosh                     | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| sinh                     | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+
| tanh                     | Unary      | Float32/Float64/Decimal | Float32/Float64     |
+--------------------------+------------+-------------------------+---------------------+


Comparisons
~~~~~~~~~~~

These functions expect two inputs of numeric type (in which case they will be
cast to the :ref:`common numeric type <common-numeric-type>` before comparison),
or two inputs of Binary- or String-like types, or two inputs of Temporal types.
If any input is dictionary encoded it will be expanded for the purposes of
comparison. If any of the input elements in a pair is null, the corresponding
output element is null. Decimal arguments will be promoted in the same way as
for ``add`` and ``subtract``.

+----------------+------------+---------------------------------------------+---------------------+
| Function names | Arity      | Input types                                 | Output type         |
+================+============+=============================================+=====================+
| equal          | Binary     | Numeric, Temporal, Binary- and String-like  | Boolean             |
+----------------+------------+---------------------------------------------+---------------------+
| greater        | Binary     | Numeric, Temporal, Binary- and String-like  | Boolean             |
+----------------+------------+---------------------------------------------+---------------------+
| greater_equal  | Binary     | Numeric, Temporal, Binary- and String-like  | Boolean             |
+----------------+------------+---------------------------------------------+---------------------+
| less           | Binary     | Numeric, Temporal, Binary- and String-like  | Boolean             |
+----------------+------------+---------------------------------------------+---------------------+
| less_equal     | Binary     | Numeric, Temporal, Binary- and String-like  | Boolean             |
+----------------+------------+---------------------------------------------+---------------------+
| not_equal      | Binary     | Numeric, Temporal, Binary- and String-like  | Boolean             |
+----------------+------------+---------------------------------------------+---------------------+

These functions take any number of inputs of numeric type (in which case they
will be cast to the :ref:`common numeric type <common-numeric-type>` before
comparison) or of temporal types. If any input is dictionary encoded it will be
expanded for the purposes of comparison.

+------------------+------------+---------------------------------------------+---------------------+---------------------------------------+-------+
| Function names   | Arity      | Input types                                 | Output type         | Options class                         | Notes |
+==================+============+=============================================+=====================+=======================================+=======+
| max_element_wise | Varargs    | Numeric, Temporal, Binary- and String-like  | Numeric or Temporal | :struct:`ElementWiseAggregateOptions` | \(1)  |
+------------------+------------+---------------------------------------------+---------------------+---------------------------------------+-------+
| min_element_wise | Varargs    | Numeric, Temporal, Binary- and String-like  | Numeric or Temporal | :struct:`ElementWiseAggregateOptions` | \(1)  |
+------------------+------------+---------------------------------------------+---------------------+---------------------------------------+-------+

* \(1) By default, nulls are skipped (but the kernel can be configured to propagate nulls).
  For floating point values, NaN will be taken over null but not over any other value.
  For binary- and string-like values, only identical type parameters are supported.

Logical functions
~~~~~~~~~~~~~~~~~~

The normal behaviour for these functions is to emit a null if any of the
inputs is null (similar to the semantics of ``NaN`` in floating-point
computations).

Some of them are also available in a `Kleene logic`_ variant (suffixed
``_kleene``) where null is taken to mean "undefined".  This is the
interpretation of null used in SQL systems as well as R and Julia,
for example.

For the Kleene logic variants, therefore:

* "true AND null", "null AND true" give "null" (the result is undefined)
* "true OR null", "null OR true" give "true"
* "false AND null", "null AND false" give "false"
* "false OR null", "null OR false" give "null" (the result is undefined)

+--------------------------+------------+--------------------+---------------------+
| Function name            | Arity      | Input types        | Output type         |
+==========================+============+====================+=====================+
| and                      | Binary     | Boolean            | Boolean             |
+--------------------------+------------+--------------------+---------------------+
| and_kleene               | Binary     | Boolean            | Boolean             |
+--------------------------+------------+--------------------+---------------------+
| and_not                  | Binary     | Boolean            | Boolean             |
+--------------------------+------------+--------------------+---------------------+
| and_not_kleene           | Binary     | Boolean            | Boolean             |
+--------------------------+------------+--------------------+---------------------+
| invert                   | Unary      | Boolean            | Boolean             |
+--------------------------+------------+--------------------+---------------------+
| or                       | Binary     | Boolean            | Boolean             |
+--------------------------+------------+--------------------+---------------------+
| or_kleene                | Binary     | Boolean            | Boolean             |
+--------------------------+------------+--------------------+---------------------+
| xor                      | Binary     | Boolean            | Boolean             |
+--------------------------+------------+--------------------+---------------------+

.. _Kleene logic: https://en.wikipedia.org/wiki/Three-valued_logic#Kleene_and_Priest_logics

String predicates
~~~~~~~~~~~~~~~~~

These functions classify the input string elements according to their character
contents.  An empty string element emits false in the output.  For ASCII
variants of the functions (prefixed ``ascii_``), a string element with non-ASCII
characters emits false in the output.

The first set of functions operates on a character-per-character basis,
and emit true in the output if the input contains only characters of a
given class:

+--------------------+-------+-------------+-------------+-------------------------+-------+
| Function name      | Arity | Input types | Output type | Matched character class | Notes |
+====================+=======+=============+=============+=========================+=======+
| ascii_is_alnum     | Unary | String-like | Boolean     | Alphanumeric ASCII      |       |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| ascii_is_alpha     | Unary | String-like | Boolean     | Alphabetic ASCII        |       |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| ascii_is_decimal   | Unary | String-like | Boolean     | Decimal ASCII           | \(1)  |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| ascii_is_lower     | Unary | String-like | Boolean     | Lowercase ASCII         | \(2)  |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| ascii_is_printable | Unary | String-like | Boolean     | Printable ASCII         |       |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| ascii_is_space     | Unary | String-like | Boolean     | Whitespace ASCII        |       |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| ascii_is_upper     | Unary | String-like | Boolean     | Uppercase ASCII         | \(2)  |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| utf8_is_alnum      | Unary | String-like | Boolean     | Alphanumeric Unicode    |       |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| utf8_is_alpha      | Unary | String-like | Boolean     | Alphabetic Unicode      |       |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| utf8_is_decimal    | Unary | String-like | Boolean     | Decimal Unicode         |       |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| utf8_is_digit      | Unary | String-like | Boolean     | Unicode digit           | \(3)  |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| utf8_is_lower      | Unary | String-like | Boolean     | Lowercase Unicode       | \(2)  |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| utf8_is_numeric    | Unary | String-like | Boolean     | Numeric Unicode         | \(4)  |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| utf8_is_printable  | Unary | String-like | Boolean     | Printable Unicode       |       |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| utf8_is_space      | Unary | String-like | Boolean     | Whitespace Unicode      |       |
+--------------------+-------+-------------+-------------+-------------------------+-------+
| utf8_is_upper      | Unary | String-like | Boolean     | Uppercase Unicode       | \(2)  |
+--------------------+-------+-------------+-------------+-------------------------+-------+

* \(1) Also matches all numeric ASCII characters and all ASCII digits.

* \(2) Non-cased characters, such as punctuation, do not match.

* \(3) This is currently the same as ``utf8_is_decimal``.

* \(4) Unlike ``utf8_is_decimal``, non-decimal numeric characters also match.

The second set of functions also consider the character order in a string
element:

+--------------------------+------------+--------------------+---------------------+---------+
| Function name            | Arity      | Input types        | Output type         | Notes   |
+==========================+============+====================+=====================+=========+
| ascii_is_title           | Unary      | String-like        | Boolean             | \(1)    |
+--------------------------+------------+--------------------+---------------------+---------+
| utf8_is_title            | Unary      | String-like        | Boolean             | \(1)    |
+--------------------------+------------+--------------------+---------------------+---------+

* \(1) Output is true iff the input string element is title-cased, i.e. any
  word starts with an uppercase character, followed by lowercase characters.
  Word boundaries are defined by non-cased characters.

The third set of functions examines string elements on a byte-per-byte basis:

+--------------------------+------------+--------------------+---------------------+---------+
| Function name            | Arity      | Input types        | Output type         | Notes   |
+==========================+============+====================+=====================+=========+
| string_is_ascii          | Unary      | String-like        | Boolean             | \(1)    |
+--------------------------+------------+--------------------+---------------------+---------+

* \(1) Output is true iff the input string element contains only ASCII characters,
  i.e. only bytes in [0, 127].

String transforms
~~~~~~~~~~~~~~~~~

+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| Function name           | Arity  | Input types                             | Output type            | Options class                     | Notes |
+=========================+========+=========================================+========================+===================================+=======+
| ascii_capitalize        | Unary  | String-like                             | String-like            |                                   | \(1)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| ascii_lower             | Unary  | String-like                             | String-like            |                                   | \(1)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| ascii_reverse           | Unary  | String-like                             | String-like            |                                   | \(2)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| ascii_swapcase          | Unary  | String-like                             | String-like            |                                   | \(1)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| ascii_title             | Unary  | String-like                             | String-like            |                                   | \(1)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| ascii_upper             | Unary  | String-like                             | String-like            |                                   | \(1)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| binary_length           | Unary  | Binary- or String-like                  | Int32 or Int64         |                                   | \(3)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| binary_repeat           | Binary | Binary/String (Arg 0); Integral (Arg 1) | Binary- or String-like |                                   | \(4)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| binary_replace_slice    | Unary  | String-like                             | Binary- or String-like | :struct:`ReplaceSliceOptions`     | \(5)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| binary_reverse          | Unary  | Binary                                  | Binary                 |                                   | \(6)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| replace_substring       | Unary  | String-like                             | String-like            | :struct:`ReplaceSubstringOptions` | \(7)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| replace_substring_regex | Unary  | String-like                             | String-like            | :struct:`ReplaceSubstringOptions` | \(8)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| utf8_capitalize         | Unary  | String-like                             | String-like            |                                   | \(9)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| utf8_length             | Unary  | String-like                             | Int32 or Int64         |                                   | \(10) |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| utf8_lower              | Unary  | String-like                             | String-like            |                                   | \(9)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| utf8_replace_slice      | Unary  | String-like                             | String-like            | :struct:`ReplaceSliceOptions`     | \(7)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| utf8_reverse            | Unary  | String-like                             | String-like            |                                   | \(11) |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| utf8_swapcase           | Unary  | String-like                             | String-like            |                                   | \(9)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| utf8_title              | Unary  | String-like                             | String-like            |                                   | \(9)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+
| utf8_upper              | Unary  | String-like                             | String-like            |                                   | \(9)  |
+-------------------------+--------+-----------------------------------------+------------------------+-----------------------------------+-------+

* \(1) Each ASCII character in the input is converted to lowercase or
  uppercase.  Non-ASCII characters are left untouched.

* \(2) ASCII input is reversed to the output. If non-ASCII characters
  are present, ``Invalid`` :class:`Status` will be returned.

* \(3) Output is the physical length in bytes of each input element.  Output
  type is Int32 for Binary/String, Int64 for LargeBinary/LargeString.

* \(4) Repeat the input binary string a given number of times.

* \(5) Replace the slice of the substring from :member:`ReplaceSliceOptions::start`
  (inclusive) to :member:`ReplaceSliceOptions::stop` (exclusive) by
  :member:`ReplaceSubstringOptions::replacement`. The binary kernel measures the
  slice in bytes, while the UTF8 kernel measures the slice in codeunits.

* \(6) Perform a byte-level reverse.

* \(7) Replace non-overlapping substrings that match to
  :member:`ReplaceSubstringOptions::pattern` by
  :member:`ReplaceSubstringOptions::replacement`. If
  :member:`ReplaceSubstringOptions::max_replacements` != -1, it determines the
  maximum number of replacements made, counting from the left.

* \(8) Replace non-overlapping substrings that match to the regular expression
  :member:`ReplaceSubstringOptions::pattern` by
  :member:`ReplaceSubstringOptions::replacement`, using the Google RE2 library. If
  :member:`ReplaceSubstringOptions::max_replacements` != -1, it determines the
  maximum number of replacements made, counting from the left. Note that if the
  pattern contains groups, backreferencing can be used.

* \(9) Each UTF8-encoded character in the input is converted to lowercase or
  uppercase.

* \(10) Output is the number of characters (not bytes) of each input element.
  Output type is Int32 for String, Int64 for LargeString.

* \(11) Each UTF8-encoded code unit is written in reverse order to the output.
  If the input is not valid UTF8, then the output is undefined (but the size of output
  buffers will be preserved).

String padding
~~~~~~~~~~~~~~

These functions append/prepend a given padding byte (ASCII) or codepoint (UTF8) in
order to center (center), right-align (lpad), or left-align (rpad) a string.

+--------------------------+------------+-------------------------+---------------------+----------------------------------------+
| Function name            | Arity      | Input types             | Output type         | Options class                          |
+==========================+============+=========================+=====================+========================================+
| ascii_center             | Unary      | String-like             | String-like         | :struct:`PadOptions`                   |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+
| ascii_lpad               | Unary      | String-like             | String-like         | :struct:`PadOptions`                   |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+
| ascii_rpad               | Unary      | String-like             | String-like         | :struct:`PadOptions`                   |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+
| utf8_center              | Unary      | String-like             | String-like         | :struct:`PadOptions`                   |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+
| utf8_lpad                | Unary      | String-like             | String-like         | :struct:`PadOptions`                   |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+
| utf8_rpad                | Unary      | String-like             | String-like         | :struct:`PadOptions`                   |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+
| utf8_zero_fill           | Unary      | String-like             | String-like         | :struct:`ZeroFillOptions`              |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+

String trimming
~~~~~~~~~~~~~~~

These functions trim off characters on both sides (trim), or the left (ltrim) or right side (rtrim).

+--------------------------+------------+-------------------------+---------------------+----------------------------------------+---------+
| Function name            | Arity      | Input types             | Output type         | Options class                          | Notes   |
+==========================+============+=========================+=====================+========================================+=========+
| ascii_ltrim              | Unary      | String-like             | String-like         | :struct:`TrimOptions`                  | \(1)    |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+---------+
| ascii_ltrim_whitespace   | Unary      | String-like             | String-like         |                                        | \(2)    |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+---------+
| ascii_rtrim              | Unary      | String-like             | String-like         | :struct:`TrimOptions`                  | \(1)    |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+---------+
| ascii_rtrim_whitespace   | Unary      | String-like             | String-like         |                                        | \(2)    |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+---------+
| ascii_trim               | Unary      | String-like             | String-like         | :struct:`TrimOptions`                  | \(1)    |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+---------+
| ascii_trim_whitespace    | Unary      | String-like             | String-like         |                                        | \(2)    |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+---------+
| utf8_ltrim               | Unary      | String-like             | String-like         | :struct:`TrimOptions`                  | \(3)    |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+---------+
| utf8_ltrim_whitespace    | Unary      | String-like             | String-like         |                                        | \(4)    |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+---------+
| utf8_rtrim               | Unary      | String-like             | String-like         | :struct:`TrimOptions`                  | \(3)    |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+---------+
| utf8_rtrim_whitespace    | Unary      | String-like             | String-like         |                                        | \(4)    |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+---------+
| utf8_trim                | Unary      | String-like             | String-like         | :struct:`TrimOptions`                  | \(3)    |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+---------+
| utf8_trim_whitespace     | Unary      | String-like             | String-like         |                                        | \(4)    |
+--------------------------+------------+-------------------------+---------------------+----------------------------------------+---------+

* \(1) Only characters specified in :member:`TrimOptions::characters` will be
  trimmed off. Both the input string and the ``characters`` argument are
  interpreted as ASCII characters.

* \(2) Only trim off ASCII whitespace characters (``'\t'``, ``'\n'``, ``'\v'``,
  ``'\f'``, ``'\r'``  and ``' '``).

* \(3) Only characters specified in :member:`TrimOptions::characters` will be
  trimmed off.

* \(4) Only trim off Unicode whitespace characters.

String splitting
~~~~~~~~~~~~~~~~

These functions split strings into lists of strings.  All kernels can optionally
be configured with a ``max_splits`` and a ``reverse`` parameter, where
``max_splits == -1`` means no limit (the default).  When ``reverse`` is true,
the splitting is done starting from the end of the string; this is only relevant
when a positive ``max_splits`` is given.

+--------------------------+------------+-------------------------+-------------------+----------------------------------+---------+
| Function name            | Arity      | Input types             | Output type       | Options class                    | Notes   |
+==========================+============+=========================+===================+==================================+=========+
| ascii_split_whitespace   | Unary      | String-like             | List-like         | :struct:`SplitOptions`           | \(1)    |
+--------------------------+------------+-------------------------+-------------------+----------------------------------+---------+
| split_pattern            | Unary      | Binary- or String-like  | List-like         | :struct:`SplitPatternOptions`    | \(2)    |
+--------------------------+------------+-------------------------+-------------------+----------------------------------+---------+
| split_pattern_regex      | Unary      | Binary- or String-like  | List-like         | :struct:`SplitPatternOptions`    | \(3)    |
+--------------------------+------------+-------------------------+-------------------+----------------------------------+---------+
| utf8_split_whitespace    | Unary      | String-like             | List-like         | :struct:`SplitOptions`           | \(4)    |
+--------------------------+------------+-------------------------+-------------------+----------------------------------+---------+

* \(1) A non-zero length sequence of ASCII defined whitespace bytes
  (``'\t'``, ``'\n'``, ``'\v'``, ``'\f'``, ``'\r'``  and ``' '``) is seen
  as separator.

* \(2) The string is split when an exact pattern is found (the pattern itself
  is not included in the output).

* \(3) The string is split when a regex match is found (the matched
  substring itself is not included in the output).

* \(4) A non-zero length sequence of Unicode defined whitespace codepoints
  is seen as separator.

String component extraction
~~~~~~~~~~~~~~~~~~~~~~~~~~~

+--------------------+-------+------------------------+-------------+-----------------------------------+-------+
| Function name      | Arity | Input types            | Output type | Options class                     | Notes |
+====================+=======+========================+=============+===================================+=======+
| extract_regex      | Unary | Binary- or String-like | Struct      | :struct:`ExtractRegexOptions`     | \(1)  |
+--------------------+-------+------------------------+-------------+-----------------------------------+-------+
| extract_regex_span | Unary | Binary- or String-like | Struct      | :struct:`ExtractRegexSpanOptions` | \(2)  |
+--------------------+-------+------------------------+-------------+-----------------------------------+-------+

* \(1) Extract substrings defined by a regular expression using the Google RE2
  library.  The output struct field names refer to the named capture groups,
  e.g. 'letter' and 'digit' for the regular expression
  ``(?P<letter>[ab])(?P<digit>\\d)``.

* \(2) Extract the offset and length of substrings defined by a regular expression
  using the Google RE2 library.  The output struct field names refer to the named
  capture groups, e.g. 'letter' and 'digit' for the regular expression
  ``(?P<letter>[ab])(?P<digit>\\d)``. Each output struct field is a fixed size list
  of two integers: the index to the start of the captured group and the length
  of the captured group, respectively.

String joining
~~~~~~~~~~~~~~

These functions do the inverse of string splitting.

+--------------------------+---------+----------------------------------+------------------------+------------------------+-----------------------+---------+
| Function name            | Arity   | Input type 1                     | Input type 2           | Output type            | Options class         | Notes   |
+==========================+=========+==================================+========================+========================+=======================+=========+
| binary_join              | Binary  | List of Binary- or String-like   | String-like            | String-like            |                       | \(1)    |
+--------------------------+---------+----------------------------------+------------------------+------------------------+-----------------------+---------+
| binary_join_element_wise | Varargs | Binary- or String-like (varargs) | Binary- or String-like | Binary- or String-like | :struct:`JoinOptions` | \(2)    |
+--------------------------+---------+----------------------------------+------------------------+------------------------+-----------------------+---------+

* \(1) The first input must be an array, while the second can be a scalar or array.
  Each list of values in the first input is joined using each second input
  as separator.  If any input list is null or contains a null, the corresponding
  output will be null.

* \(2) All arguments are concatenated element-wise, with the last argument treated
  as the separator (scalars are recycled in either case). Null separators emit
  null. If any other argument is null, by default the corresponding output will be
  null, but it can instead either be skipped or replaced with a given string.

String Slicing
~~~~~~~~~~~~~~

This function transforms each sequence of the array to a subsequence, according
to start and stop indices, and a non-zero step (defaulting to 1).  Slicing
semantics follow Python slicing semantics: the start index is inclusive,
the stop index exclusive; if the step is negative, the sequence is followed
in reverse order.

+--------------------------+------------+-------------------------+-------------------------+--------------------------+---------+
| Function name            | Arity      | Input types             | Output type             | Options class            | Notes   |
+==========================+============+=========================+=========================+==========================+=========+
| binary_slice             | Unary      | Binary-like             | Binary-like             | :struct:`SliceOptions`   | \(1)    |
+--------------------------+------------+-------------------------+-------------------------+--------------------------+---------+
| utf8_slice_codeunits     | Unary      | String-like             | String-like             | :struct:`SliceOptions`   | \(2)    |
+--------------------------+------------+-------------------------+-------------------------+--------------------------+---------+

* \(1) Slice string into a substring defined by (``start``, ``stop``, ``step``)
  as given by :struct:`SliceOptions` where ``start`` and ``stop`` are measured
  in bytes. Null inputs emit null.
* \(2) Slice string into a substring defined by (``start``, ``stop``, ``step``)
  as given by :struct:`SliceOptions` where ``start`` and ``stop`` are measured
  in codeunits. Null inputs emit null.

Containment tests
~~~~~~~~~~~~~~~~~

+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+
| Function name         | Arity | Input types                       | Output type    | Options class                   | Notes |
+=======================+=======+===================================+================+=================================+=======+
| count_substring       | Unary | Binary- or String-like            | Int32 or Int64 | :struct:`MatchSubstringOptions` | \(1)  |
+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+
| count_substring_regex | Unary | Binary- or String-like            | Int32 or Int64 | :struct:`MatchSubstringOptions` | \(1)  |
+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+
| ends_with             | Unary | Binary- or String-like            | Boolean        | :struct:`MatchSubstringOptions` | \(2)  |
+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+
| find_substring        | Unary | Binary- and String-like           | Int32 or Int64 | :struct:`MatchSubstringOptions` | \(3)  |
+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+
| find_substring_regex  | Unary | Binary- and String-like           | Int32 or Int64 | :struct:`MatchSubstringOptions` | \(3)  |
+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+
| index_in              | Unary | Boolean, Null, Numeric, Temporal, | Int32          | :struct:`SetLookupOptions`      | \(4)  |
|                       |       | Binary- and String-like           |                |                                 |       |
+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+
| is_in                 | Unary | Boolean, Null, Numeric, Temporal, | Boolean        | :struct:`SetLookupOptions`      | \(5)  |
|                       |       | Binary- and String-like           |                |                                 |       |
+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+
| match_like            | Unary | Binary- or String-like            | Boolean        | :struct:`MatchSubstringOptions` | \(6)  |
+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+
| match_substring       | Unary | Binary- or String-like            | Boolean        | :struct:`MatchSubstringOptions` | \(7)  |
+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+
| match_substring_regex | Unary | Binary- or String-like            | Boolean        | :struct:`MatchSubstringOptions` | \(8)  |
+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+
| starts_with           | Unary | Binary- or String-like            | Boolean        | :struct:`MatchSubstringOptions` | \(2)  |
+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+

* \(1) Output is the number of occurrences of
  :member:`MatchSubstringOptions::pattern` in the corresponding input
  string. Output type is Int32 for Binary/String, Int64
  for LargeBinary/LargeString.

* \(2) Output is true iff :member:`MatchSubstringOptions::pattern`
  is a suffix/prefix of the corresponding input.

* \(3) Output is the index of the first occurrence of
  :member:`MatchSubstringOptions::pattern` in the corresponding input
  string, otherwise -1. Output type is Int32 for Binary/String, Int64
  for LargeBinary/LargeString.

* \(4) Output is the index of the corresponding input element in
  :member:`SetLookupOptions::value_set`, if found there.  Otherwise,
  output is null.

* \(5) Output is true iff the corresponding input element is equal to one
  of the elements in :member:`SetLookupOptions::value_set`.

* \(6) Output is true iff the SQL-style LIKE pattern
  :member:`MatchSubstringOptions::pattern` fully matches the
  corresponding input element. That is, ``%`` will match any number of
  characters, ``_`` will match exactly one character, and any other
  character matches itself. To match a literal percent sign or
  underscore, precede the character with a backslash.

* \(7) Output is true iff :member:`MatchSubstringOptions::pattern`
  is a substring of the corresponding input element.

* \(8) Output is true iff :member:`MatchSubstringOptions::pattern`
  matches the corresponding input element at any position.

Categorizations
~~~~~~~~~~~~~~~

+-------------------+------------+-------------------------+---------------------+------------------------+---------+
| Function name     | Arity      | Input types             | Output type         | Options class          | Notes   |
+===================+============+=========================+=====================+========================+=========+
| is_finite         | Unary      | Null, Numeric           | Boolean             |                        | \(1)    |
+-------------------+------------+-------------------------+---------------------+------------------------+---------+
| is_inf            | Unary      | Null, Numeric           | Boolean             |                        | \(2)    |
+-------------------+------------+-------------------------+---------------------+------------------------+---------+
| is_nan            | Unary      | Null, Numeric           | Boolean             |                        | \(3)    |
+-------------------+------------+-------------------------+---------------------+------------------------+---------+
| is_null           | Unary      | Any                     | Boolean             | :struct:`NullOptions`  | \(4)    |
+-------------------+------------+-------------------------+---------------------+------------------------+---------+
| is_valid          | Unary      | Any                     | Boolean             |                        | \(5)    |
+-------------------+------------+-------------------------+---------------------+------------------------+---------+
| true_unless_null  | Unary      | Any                     | Boolean             |                        | \(6)    |
+-------------------+------------+-------------------------+---------------------+------------------------+---------+

* \(1) Output is true iff the corresponding input element is finite (neither Infinity,
  -Infinity, nor NaN). Hence, for Decimal and integer inputs this always returns true.

* \(2) Output is true iff the corresponding input element is Infinity/-Infinity.
  Hence, for Decimal and integer inputs this always returns false.

* \(3) Output is true iff the corresponding input element is NaN.
  Hence, for Decimal and integer inputs this always returns false.

* \(4) Output is true iff the corresponding input element is null. NaN values
  can also be considered null by setting :member:`NullOptions::nan_is_null`.

* \(5) Output is true iff the corresponding input element is non-null, else false.

* \(6) Output is true iff the corresponding input element is non-null, else null.
       Mostly intended for expression simplification/guarantees.

.. _cpp-compute-scalar-selections:

Selecting / multiplexing
~~~~~~~~~~~~~~~~~~~~~~~~

For each "row" of input values, these functions emit one of the input values,
depending on a condition.

+------------------+------------+---------------------------------------------------+---------------------+---------+
| Function name    | Arity      | Input types                                       | Output type         | Notes   |
+==================+============+===================================================+=====================+=========+
| case_when        | Varargs    | Struct of Boolean (Arg 0), Any (rest)             | Input type          | \(1)    |
+------------------+------------+---------------------------------------------------+---------------------+---------+
| choose           | Varargs    | Integral (Arg 0), Fixed-width/Binary-like (rest)  | Input type          | \(2)    |
+------------------+------------+---------------------------------------------------+---------------------+---------+
| coalesce         | Varargs    | Any                                               | Input type          | \(3)    |
+------------------+------------+---------------------------------------------------+---------------------+---------+
| if_else          | Ternary    | Boolean (Arg 0), Any (rest)                       | Input type          | \(4)    |
+------------------+------------+---------------------------------------------------+---------------------+---------+

* \(1) This function acts like a SQL "case when" statement or switch-case. The
  input is a "condition" value, which is a struct of Booleans, followed by the
  values for each "branch". There must be either exactly one value argument for
  each child of the condition struct, or one more value argument than children
  (in which case we have an "else" or "default" value). The output is of the
  same type as the value inputs; each row will be the corresponding value from
  the first value datum for which the corresponding Boolean is true, or the
  corresponding value from the "default" input, or null otherwise.

  Note that currently, while all types are supported, dictionaries will be
  unpacked.

* \(2) The first input must be an integral type. The rest of the arguments can be
  any type, but must all be the same type or promotable to a common type. Each
  value of the first input (the 'index') is used as a zero-based index into the
  remaining arguments (i.e. index 0 is the second argument, index 1 is the third
  argument, etc.), and the value of the output for that row will be the
  corresponding value of the selected input at that row. If the index is null,
  then the output will also be null.

* \(3) Each row of the output will be the corresponding value of the first
  input which is non-null for that row, otherwise null.

* \(4) First input must be a Boolean scalar or array. Second and third inputs
  could be scalars or arrays and must be of the same type. Output is an array
  (or scalar if all inputs are scalar) of the same type as the second/ third
  input. If the nulls present on the first input, they will be promoted to the
  output, otherwise nulls will be chosen based on the first input values.

  Also see: :ref:`replace_with_mask <cpp-compute-vector-replace-functions>`.

Structural transforms
~~~~~~~~~~~~~~~~~~~~~

+---------------------+------------+-------------+------------------+------------------------------+--------+
| Function name       | Arity      | Input types | Output type      | Options class                | Notes  |
+=====================+============+=============+==================+==============================+========+
| list_value_length   | Unary      | List-like   | Int32 or Int64   |                              | \(1)   |
+---------------------+------------+-------------+------------------+------------------------------+--------+
| make_struct         | Varargs    | Any         | Struct           | :struct:`MakeStructOptions`  | \(2)   |
+---------------------+------------+-------------+------------------+------------------------------+--------+

* \(1) Each output element is the length of the corresponding input element
  (null if input is null).  Output type is Int32 for List, ListView, and
  FixedSizeList, Int64 for LargeList and LargeListView.

* \(2) The output struct's field types are the types of its arguments. The
  field names are specified using an instance of :struct:`MakeStructOptions`.
  The output shape will be scalar if all inputs are scalar, otherwise any
  scalars will be broadcast to arrays.

Conversions
~~~~~~~~~~~

A general conversion function named ``cast`` is provided which accepts a large
number of input and output types.  The type to cast to can be passed in a
:struct:`CastOptions` instance.  As an alternative, the same service is
provided by a concrete function :func:`~arrow::compute::Cast`.

+-----------------+------------+--------------------+------------------+--------------------------------+-------+
| Function name   | Arity      | Input types        | Output type      | Options class                  | Notes |
+=================+============+====================+==================+================================+=======+
| ceil_temporal   | Unary      | Temporal           | Temporal         | :struct:`RoundTemporalOptions` |       |
+-----------------+------------+--------------------+------------------+--------------------------------+-------+
| floor_temporal  | Unary      | Temporal           | Temporal         | :struct:`RoundTemporalOptions` |       |
+-----------------+------------+--------------------+------------------+--------------------------------+-------+
| round_temporal  | Unary      | Temporal           | Temporal         | :struct:`RoundTemporalOptions` |       |
+-----------------+------------+--------------------+------------------+--------------------------------+-------+
| cast            | Unary      | Many               | Variable         | :struct:`CastOptions`          |       |
+-----------------+------------+--------------------+------------------+--------------------------------+-------+
| strftime        | Unary      | Temporal           | String           | :struct:`StrftimeOptions`      | \(1)  |
+-----------------+------------+--------------------+------------------+--------------------------------+-------+
| strptime        | Unary      | String-like        | Timestamp        | :struct:`StrptimeOptions`      |       |
+-----------------+------------+--------------------+------------------+--------------------------------+-------+

The conversions available with ``cast`` are listed below.  In all cases, a
null input value is converted into a null output value.

* \(1) Output precision of ``%S`` (seconds) flag depends on the input timestamp
  precision. Timestamps with second precision are represented as integers while
  milliseconds, microsecond and nanoseconds are represented as fixed floating
  point numbers with 3, 6 and 9 decimal places respectively. To obtain integer
  seconds, cast to timestamp with second resolution.
  The character for the decimal point is localized according to the locale.
  See `detailed formatting documentation`_ for descriptions of other flags.

.. _detailed formatting documentation: https://howardhinnant.github.io/date/date.html#to_stream_formatting

**Truth value extraction**

+-----------------------------+------------------------------------+--------------+
| Input type                  | Output type                        | Notes        |
+=============================+====================================+==============+
| Binary- and String-like     | Boolean                            | \(1)         |
+-----------------------------+------------------------------------+--------------+
| Numeric                     | Boolean                            | \(2)         |
+-----------------------------+------------------------------------+--------------+

* \(1) Output is true iff the corresponding input value has non-zero length.

* \(2) Output is true iff the corresponding input value is non-zero.

**Same-kind conversion**

+-----------------------------+------------------------------------+--------------+
| Input type                  | Output type                        | Notes        |
+=============================+====================================+==============+
| Int32                       | 32-bit Temporal                    | \(1)         |
+-----------------------------+------------------------------------+--------------+
| Int64                       | 64-bit Temporal                    | \(1)         |
+-----------------------------+------------------------------------+--------------+
| (Large)Binary               | (Large)String                      | \(2)         |
+-----------------------------+------------------------------------+--------------+
| (Large)String               | (Large)Binary                      | \(3)         |
+-----------------------------+------------------------------------+--------------+
| Numeric                     | Numeric                            | \(4) \(5)    |
+-----------------------------+------------------------------------+--------------+
| 32-bit Temporal             | Int32                              | \(1)         |
+-----------------------------+------------------------------------+--------------+
| 64-bit Temporal             | Int64                              | \(1)         |
+-----------------------------+------------------------------------+--------------+
| Temporal                    | Temporal                           | \(4) \(5)    |
+-----------------------------+------------------------------------+--------------+

* \(1) No-operation cast: the raw values are kept identical, only
  the type is changed.

* \(2) Validates the contents if :member:`CastOptions::allow_invalid_utf8`
  is false.

* \(3) No-operation cast: only the type is changed.

* \(4) Overflow and truncation checks are enabled depending on
  the given :struct:`CastOptions`.

* \(5) Not all such casts have been implemented.

**String representations**

+-----------------------------+------------------------------------+---------+
| Input type                  | Output type                        | Notes   |
+=============================+====================================+=========+
| Boolean                     | String-like                        |         |
+-----------------------------+------------------------------------+---------+
| Numeric                     | String-like                        |         |
+-----------------------------+------------------------------------+---------+

**Generic conversions**

+-----------------------------+------------------------------------+---------+
| Input type                  | Output type                        | Notes   |
+=============================+====================================+=========+
| Dictionary                  | Dictionary value type              | \(1)    |
+-----------------------------+------------------------------------+---------+
| Extension                   | Extension storage type             |         |
+-----------------------------+------------------------------------+---------+
| Struct                      | Struct                             | \(2)    |
+-----------------------------+------------------------------------+---------+
| List-like                   | List-like or (Large)ListView       | \(3)    |
+-----------------------------+------------------------------------+---------+
| (Large)ListView             | List-like or (Large)ListView       | \(4)    |
+-----------------------------+------------------------------------+---------+
| Map                         | Map or List of two-field struct    | \(5)    |
+-----------------------------+------------------------------------+---------+
| Null                        | Any                                |         |
+-----------------------------+------------------------------------+---------+
| Any                         | Extension                          | \(6)    |
+-----------------------------+------------------------------------+---------+

* \(1) The dictionary indices are unchanged, the dictionary values are
  cast from the input value type to the output value type (if a conversion
  is available).

* \(2) Fields are casted primarily by matching field names between the input
  and output type. For duplicate field names, their relative order is preserved,
  with each input field used for one or zero output fields. This allows casting
  to a subset or re-ordered field names. If a nullable field in the output type
  has no matching field name in the input type, it will be filled with nulls.
  Casting a field from nullable to not null is supported if the input data
  contains zero nulls.

* \(3) The list offsets are unchanged, the list values are cast from the
  input value type to the output value type (if a conversion is
  available). If the output type is (Large)ListView, then sizes are
  derived from the offsets.

* \(4) If output type is list-like, offsets (consequently, the values array)
  might have to be rebuilt to be sorted and spaced adequately. If output type is
  a list-view type, the offsets and sizes are unchanged. In any case, the list
  values are cast from the input value type to the output value type (if a
  conversion is available).

* \(5) Offsets are unchanged, the keys and values are cast from respective input
  to output types (if a conversion is available). If output type is a list of
  struct, the key field is output as the first field and the value field the
  second field, regardless of field names chosen.

* \(6) Any input type that can be cast to the resulting extension's storage type.
  This excludes extension types, unless being cast to the same extension type.

Temporal component extraction
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

These functions extract datetime components (year, month, day, etc) from temporal types.
For timestamps inputs with non-empty timezone, localized timestamp components will be returned.

+--------------------+------------+-------------------+---------------+----------------------------+-------+
| Function name      | Arity      | Input types       | Output type   | Options class              | Notes |
+====================+============+===================+===============+============================+=======+
| day                | Unary      | Temporal          | Int64         |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| day_of_week        | Unary      | Temporal          | Int64         | :struct:`DayOfWeekOptions` | \(1)  |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| day_of_year        | Unary      | Temporal          | Int64         |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| hour               | Unary      | Timestamp, Time   | Int64         |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| is_dst             | Unary      | Timestamp         | Boolean       |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| iso_week           | Unary      | Temporal          | Int64         |                            | \(2)  |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| iso_year           | Unary      | Temporal          | Int64         |                            | \(2)  |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| iso_calendar       | Unary      | Temporal          | Struct        |                            | \(3)  |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| is_leap_year       | Unary      | Timestamp, Date   | Boolean       |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| microsecond        | Unary      | Timestamp, Time   | Int64         |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| millisecond        | Unary      | Timestamp, Time   | Int64         |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| minute             | Unary      | Timestamp, Time   | Int64         |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| month              | Unary      | Temporal          | Int64         |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| nanosecond         | Unary      | Timestamp, Time   | Int64         |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| quarter            | Unary      | Temporal          | Int64         |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| second             | Unary      | Timestamp, Time   | Int64         |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| subsecond          | Unary      | Timestamp, Time   | Float64       |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| us_week            | Unary      | Temporal          | Int64         |                            | \(4)  |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| us_year            | Unary      | Temporal          | Int64         |                            | \(4)  |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| week               | Unary      | Timestamp         | Int64         | :struct:`WeekOptions`      | \(5)  |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| year               | Unary      | Temporal          | Int64         |                            |       |
+--------------------+------------+-------------------+---------------+----------------------------+-------+
| year_month_day     | Unary      | Temporal          | Struct        |                            | \(6)  |
+--------------------+------------+-------------------+---------------+----------------------------+-------+

* \(1) Outputs the number of the day of the week. By default week begins on Monday
  represented by 0 and ends on Sunday represented by 6. Day numbering can start with 0 or 1 based on
  :member:`DayOfWeekOptions::count_from_zero` parameter. :member:`DayOfWeekOptions::week_start` can be
  used to set the starting day of the week using ISO convention (Monday=1, Sunday=7).
  :member:`DayOfWeekOptions::week_start` parameter is not affected by :member:`DayOfWeekOptions::count_from_zero`.

* \(2) First ISO week has the majority (4 or more) of it's days in January. ISO year
  starts with the first ISO week. ISO week starts on Monday.
  See `ISO 8601 week date definition`_ for more details.

* \(3) Output is a ``{"iso_year": output type, "iso_week": output type, "iso_day_of_week":  output type}`` Struct.

* \(4) First US week has the majority (4 or more) of its days in January. US year
  starts with the first US week. US week starts on Sunday.

* \(5) Returns week number allowing for setting several parameters.
  If :member:`WeekOptions::week_starts_monday` is true, the week starts with Monday, else Sunday if false.
  If :member:`WeekOptions::count_from_zero` is true, dates from the current year that fall into the last ISO week
  of the previous year are numbered as week 0, else week 52 or 53 if false.
  If :member:`WeekOptions::first_week_is_fully_in_year` is true, the first week (week 1) must fully be in January;
  else if false, a week that begins on December 29, 30, or 31 is considered the first week of the new year.

* \(6) Output is a ``{"year": int64(), "month": int64(), "day": int64()}`` Struct.

.. _ISO 8601 week date definition: https://en.wikipedia.org/wiki/ISO_week_date#First_week

Temporal difference
~~~~~~~~~~~~~~~~~~~

These functions compute the difference between two timestamps in the
specified unit. The difference is determined by the number of
boundaries crossed, not the span of time. For example, the difference
in days between 23:59:59 on one day and 00:00:01 on the next day is
one day (since midnight was crossed), not zero days (even though less
than 24 hours elapsed). Additionally, if the timestamp has a defined
timezone, the difference is calculated in the local timezone. For
instance, the difference in years between "2019-12-31 18:00:00-0500"
and "2019-12-31 23:00:00-0500" is zero years, because the local year
is the same, even though the UTC years would be different.

+---------------------------------+------------+-------------------+-----------------------+----------------------------+
| Function name                   | Arity      | Input types       | Output type           | Options class              |
+=================================+============+===================+=======================+============================+
| day_time_interval_between       | Binary     | Temporal          | DayTime interval      |                            |
+---------------------------------+------------+-------------------+-----------------------+----------------------------+
| days_between                    | Binary     | Timestamp, Date   | Int64                 |                            |
+---------------------------------+------------+-------------------+-----------------------+----------------------------+
| hours_between                   | Binary     | Temporal          | Int64                 |                            |
+---------------------------------+------------+-------------------+-----------------------+----------------------------+
| microseconds_between            | Binary     | Temporal          | Int64                 |                            |
+---------------------------------+------------+-------------------+-----------------------+----------------------------+
| milliseconds_between            | Binary     | Temporal          | Int64                 |                            |
+---------------------------------+------------+-------------------+-----------------------+----------------------------+
| minutes_between                 | Binary     | Temporal          | Int64                 |                            |
+---------------------------------+------------+-------------------+-----------------------+----------------------------+
| month_day_nano_interval_between | Binary     | Temporal          | MonthDayNano interval |                            |
+---------------------------------+------------+-------------------+-----------------------+----------------------------+
| month_interval_between          | Binary     | Timestamp, Date   | Month interval        |                            |
+---------------------------------+------------+-------------------+-----------------------+----------------------------+
| nanoseconds_between             | Binary     | Temporal          | Int64                 |                            |
+---------------------------------+------------+-------------------+-----------------------+----------------------------+
| quarters_between                | Binary     | Timestamp, Date   | Int64                 |                            |
+---------------------------------+------------+-------------------+-----------------------+----------------------------+
| seconds_between                 | Binary     | Temporal          | Int64                 |                            |
+---------------------------------+------------+-------------------+-----------------------+----------------------------+
| weeks_between                   | Binary     | Timestamp, Date   | Int64                 | :struct:`DayOfWeekOptions` |
+---------------------------------+------------+-------------------+-----------------------+----------------------------+
| years_between                   | Binary     | Timestamp, Date   | Int64                 |                            |
+---------------------------------+------------+-------------------+-----------------------+----------------------------+

Timezone handling
~~~~~~~~~~~~~~~~~

``assume_timezone`` function is meant to be used when an external system produces
"timezone-naive" timestamps which need to be converted to "timezone-aware"
timestamps (see for example the `definition
<https://docs.python.org/3/library/datetime.html#aware-and-naive-objects>`__
in the Python documentation).

Input timestamps are assumed to be relative to the timezone given in
:member:`AssumeTimezoneOptions::timezone`. They are converted to
UTC-relative timestamps with the timezone metadata set to the above value.
An error is returned if the timestamps already have the timezone metadata set.

``local_timestamp`` function converts UTC-relative timestamps to local "timezone-naive"
timestamps. The timezone is taken from the timezone metadata of the input
timestamps. This function is the inverse of ``assume_timezone``. Please note:
**all temporal functions already operate on timestamps as if they were in local
time of the metadata provided timezone**. Using ``local_timestamp`` is only meant to be
used when an external system expects local timestamps.

+-----------------+-------+-------------+---------------+---------------------------------+-------+
| Function name   | Arity | Input types | Output type   | Options class                   | Notes |
+=================+=======+=============+===============+=================================+=======+
| assume_timezone | Unary | Timestamp   | Timestamp     | :struct:`AssumeTimezoneOptions` | \(1)  |
+-----------------+-------+-------------+---------------+---------------------------------+-------+
| local_timestamp | Unary | Timestamp   | Timestamp     |                                 | \(2)  |
+-----------------+-------+-------------+---------------+---------------------------------+-------+

* \(1) In addition to the timezone value, :struct:`AssumeTimezoneOptions`
  allows choosing the behaviour when a timestamp is ambiguous or nonexistent
  in the given timezone (because of DST shifts).

Random number generation
~~~~~~~~~~~~~~~~~~~~~~~~

This function generates an array of uniformly-distributed double-precision numbers
in range [0, 1). The options provide the length of the output and the algorithm for
generating the random numbers, using either a seed or a system-provided, platform-specific
random generator.

+--------------------+------------+---------------+-------------------------+
| Function name      | Arity      | Output type   | Options class           |
+====================+============+===============+=========================+
| random             | Nullary    | Float64       | :struct:`RandomOptions` |
+--------------------+------------+---------------+-------------------------+


Array-wise ("vector") functions
-------------------------------

Cumulative Functions
~~~~~~~~~~~~~~~~~~~~

Cumulative functions are vector functions that perform a running accumulation on
their input using a given binary associative operation with an identity element
(a monoid) and output an array containing the corresponding intermediate running
values. The input is expected to be of numeric type. By default these functions
do not detect overflow. They are also available in an overflow-checking variant,
suffixed ``_checked``, which returns an ``Invalid`` :class:`Status` when
overflow is detected.

+-------------------------+-------+-------------+-------------+--------------------------------+-----------+
| Function name           | Arity | Input types | Output type | Options class                  | Notes     |
+=========================+=======+=============+=============+================================+===========+
| cumulative_sum          | Unary | Numeric     | Numeric     | :struct:`CumulativeOptions`    | \(1)      |
+-------------------------+-------+-------------+-------------+--------------------------------+-----------+
| cumulative_sum_checked  | Unary | Numeric     | Numeric     | :struct:`CumulativeOptions`    | \(1)      |
+-------------------------+-------+-------------+-------------+--------------------------------+-----------+
| cumulative_prod         | Unary | Numeric     | Numeric     | :struct:`CumulativeOptions`    | \(1)      |
+-------------------------+-------+-------------+-------------+--------------------------------+-----------+
| cumulative_prod_checked | Unary | Numeric     | Numeric     | :struct:`CumulativeOptions`    | \(1)      |
+-------------------------+-------+-------------+-------------+--------------------------------+-----------+
| cumulative_max          | Unary | Numeric     | Numeric     | :struct:`CumulativeOptions`    | \(1)      |
+-------------------------+-------+-------------+-------------+--------------------------------+-----------+
| cumulative_min          | Unary | Numeric     | Numeric     | :struct:`CumulativeOptions`    | \(1)      |
+-------------------------+-------+-------------+-------------+--------------------------------+-----------+
| cumulative_mean         | Unary | Numeric     | Float64     | :struct:`CumulativeOptions`    | \(1) \(2) |
+-------------------------+-------+-------------+-------------+--------------------------------+-----------+

* \(1) CumulativeOptions has two optional parameters. The first parameter
  :member:`CumulativeOptions::start` is a starting value for the running
  accumulation. It has a default value of 0 for ``sum``, 1 for ``prod``, min of
  input type for ``max``, and max of input type for ``min``. Specified values of
  ``start`` must be castable to the input type. The second parameter
  :member:`CumulativeOptions::skip_nulls` is a boolean. When set to
  false (the default), the first encountered null is propagated. When set to
  true, each null in the input produces a corresponding null in the output and
  doesn't affect the accumulation forward.

* \(2) :member:`CumulativeOptions::start` is ignored.

Statistical functions
~~~~~~~~~~~~~~~~~~~~~

+-------------------------+-------+-------------+-------------+--------------------------------+-----------+
| Function name           | Arity | Input types | Output type | Options class                  | Notes     |
+=========================+=======+=============+=============+================================+===========+
| winsorize               | Unary | Numeric     | Numeric     | :struct:`WinsorizeOptions`     | \(1)      |
+-------------------------+-------+-------------+-------------+--------------------------------+-----------+

* \(1) Clamp values in the lower and upper quantiles to reduce the statistical
  influence of outliers. The quantiles can be configured in :struct:`WinsorizeOptions`.

Associative transforms
~~~~~~~~~~~~~~~~~~~~~~

+-------------------+-------+-----------------------------------+-------------+-------+
| Function name     | Arity | Input types                       | Output type | Notes |
+===================+=======+===================================+=============+=======+
| dictionary_encode | Unary | Boolean, Null, Numeric,           | Dictionary  | \(1)  |
|                   |       | Temporal, Binary- and String-like |             |       |
+-------------------+-------+-----------------------------------+-------------+-------+
| unique            | Unary | Boolean, Null, Numeric,           | Input type  | \(2)  |
|                   |       | Temporal, Binary- and String-like |             |       |
+-------------------+-------+-----------------------------------+-------------+-------+
| value_counts      | Unary | Boolean, Null, Numeric,           | Input type  | \(3)  |
|                   |       | Temporal, Binary- and String-like |             |       |
+-------------------+-------+-----------------------------------+-------------+-------+

* \(1) Output is ``Dictionary(Int32, input type)``. It is a no-op if input is
  already a Dictionary array.

* \(2) Duplicates are removed from the output while the original order is
  maintained.

* \(3) Output is a ``{"values": input type, "counts": Int64}`` Struct.
  Each output element corresponds to a unique value in the input, along
  with the number of times this value has appeared.

Selections
~~~~~~~~~~

These functions select and return a subset of their input.

+---------------------+--------+----------------+--------------+---------------------+-------------------------------------+-------+
| Function name       | Arity  | Input type 1   | Input type 2 | Output type         | Options class                       | Notes |
+=====================+========+================+==============+=====================+=====================================+=======+
| array_filter        | Binary | Any            | Boolean      | Input type 1        | :struct:`FilterOptions`             | \(2)  |
+---------------------+--------+----------------+--------------+---------------------+-------------------------------------+-------+
| array_take          | Binary | Any            | Integer      | Input type 1        | :struct:`TakeOptions`               | \(3)  |
+---------------------+--------+----------------+--------------+---------------------+-------------------------------------+-------+
| drop_null           | Unary  | Any            |              | Input type 1        |                                     | \(1)  |
+---------------------+--------+----------------+--------------+---------------------+-------------------------------------+-------+
| filter              | Binary | Any            | Boolean      | Input type 1        | :struct:`FilterOptions`             | \(2)  |
+---------------------+--------+----------------+--------------+---------------------+-------------------------------------+-------+
| inverse_permutation | Unary  | Signed Integer |              | Signed Integer \(4) | :struct:`InversePermutationOptions` | \(5)  |
+---------------------+--------+----------------+--------------+---------------------+-------------------------------------+-------+
| scatter             | Binary | Any            | Integer      | Input type 1        | :struct:`ScatterOptions`            | \(6)  |
+---------------------+--------+----------------+--------------+---------------------+-------------------------------------+-------+
| take                | Binary | Any            | Integer      | Input type 1        | :struct:`TakeOptions`               | \(3)  |
+---------------------+--------+----------------+--------------+---------------------+-------------------------------------+-------+

* \(1) Each element in the input is appended to the output iff it is non-null.
  If the input is a record batch or table, any null value in a column drops
  the entire row.

* \(2) Each element in input 1 (the values) is appended to the output iff
  the corresponding element in input 2 (the filter) is true.  How
  nulls in the filter are handled can be configured using FilterOptions.

* \(3) For each element *i* in input 2 (the indices), the *i*'th element
  in input 1 (the values) is appended to the output.

* \(4) The output type is specified in :struct:`InversePermutationOptions`.

* \(5) For *indices[i] = x*, *inverse_permutation[x] = i*. And *inverse_permutation[x]
  = null* if *x* does not appear in the input indices. Indices must be in the range
  of *[0, max_index]*, or null, which will be ignored. If multiple indices point to the
  same value, the last one is used.

* \(6) For *indices[i] = x*, *output[x] = values[i]*. And *output[x] = null*
  if *x* does not appear in the input indices. Indices must be in the range
  of *[0, max_index]*, or null, in which case the corresponding value will be
  ignored. If multiple indices point to the same value, the last one is used.

Containment tests
~~~~~~~~~~~~~~~~~

This function returns the indices at which array elements are non-null and non-zero.

+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+
| Function name         | Arity | Input types                       | Output type    | Options class                   | Notes |
+=======================+=======+===================================+================+=================================+=======+
| indices_nonzero       | Unary | Boolean, Null, Numeric, Decimal   | UInt64         |                                 |       |
+-----------------------+-------+-----------------------------------+----------------+---------------------------------+-------+

Sorts and partitions
~~~~~~~~~~~~~~~~~~~~

By default, in these functions, nulls are considered greater than any other value
(they will be sorted or partitioned at the end of the array).  Floating-point
NaN values are considered greater than any other non-null value, but smaller
than nulls.  This behaviour can be changed using the ``null_placement`` setting
in the respective option classes.

.. note::
   Binary- and String-like inputs are ordered lexicographically as bytestrings,
   even for String types.

+-----------------------+------------+---------------------------------------------------------+-------------------+-------------------------------+----------------+
| Function name         | Arity      | Input types                                             | Output type       | Options class                 | Notes          |
+=======================+============+=========================================================+===================+===============================+================+
| array_sort_indices    | Unary      | Boolean, Numeric, Temporal, Binary- and String-like     | UInt64            | :struct:`ArraySortOptions`    | \(1) \(2)      |
+-----------------------+------------+---------------------------------------------------------+-------------------+-------------------------------+----------------+
| partition_nth_indices | Unary      | Boolean, Numeric, Temporal, Binary- and String-like     | UInt64            | :struct:`PartitionNthOptions` | \(3)           |
+-----------------------+------------+---------------------------------------------------------+-------------------+-------------------------------+----------------+
| rank                  | Unary      | Boolean, Numeric, Temporal, Binary- and String-like     | UInt64            | :struct:`RankOptions`         | \(4)           |
+-----------------------+------------+---------------------------------------------------------+-------------------+-------------------------------+----------------+
| rank_normal           | Unary      | Boolean, Numeric, Temporal, Binary- and String-like     | Float64           | :struct:`RankQuantileOptions` | \(5)           |
+-----------------------+------------+---------------------------------------------------------+-------------------+-------------------------------+----------------+
| rank_quantile         | Unary      | Boolean, Numeric, Temporal, Binary- and String-like     | Float64           | :struct:`RankQuantileOptions` | \(5)           |
+-----------------------+------------+---------------------------------------------------------+-------------------+-------------------------------+----------------+
| select_k_unstable     | Unary      | Boolean, Numeric, Temporal, Binary- and String-like     | UInt64            | :struct:`SelectKOptions`      | \(6) \(7)      |
+-----------------------+------------+---------------------------------------------------------+-------------------+-------------------------------+----------------+
| sort_indices          | Unary      | Boolean, Numeric, Temporal, Binary- and String-like     | UInt64            | :struct:`SortOptions`         | \(1) \(6)      |
+-----------------------+------------+---------------------------------------------------------+-------------------+-------------------------------+----------------+


* \(1) The output is an array of indices into the input, that define a
  stable sort of the input.

* \(2) The input must be an array. The default order is ascending.

* \(3) The output is an array of indices into the input array, that define
  a partial non-stable sort such that the *N*'th index points to the *N*'th
  element in sorted order, and all indices before the *N*'th point to
  elements less or equal to elements at or after the *N*'th (similar to
  :func:`std::nth_element`).  *N* is given in
  :member:`PartitionNthOptions::pivot`.

* \(4) The output is a one-based numerical array of ranks.

* \(5) The output of ``rank_quantile`` is an array of quantiles strictly between
  0 and 1. The ouput of ``rank_normal`` is an array of finite real values
  corresponding to points in the normal distribution that reflect the input's
  quantile ranks.

* \(6) The input can be an array, chunked array, record batch or
  table. If the input is a record batch or table, one or more sort
  keys must be specified.

* \(7) The output is an array of indices into the input, that define a
  non-stable sort of the input.

.. _cpp-compute-vector-structural-transforms:

Structural transforms
~~~~~~~~~~~~~~~~~~~~~

+---------------------+------------+-------------------------------------+------------------+------------------------------+--------+
| Function name       | Arity      | Input types                         | Output type      | Options class                | Notes  |
+=====================+============+=====================================+==================+==============================+========+
| list_element        | Binary     | List-like (Arg 0), Integral (Arg 1) | List value type  |                              | \(1)   |
+---------------------+------------+-------------------------------------+------------------+------------------------------+--------+
| list_flatten        | Unary      | List-like                           | List value type  |                              | \(2)   |
+---------------------+------------+-------------------------------------+------------------+------------------------------+--------+
| list_parent_indices | Unary      | List-like                           | Int64            |                              | \(3)   |
+---------------------+------------+-------------------------------------+------------------+------------------------------+--------+
| list_slice          | Unary      | List-like                           | List-like        | :struct:`ListSliceOptions`   | \(4)   |
+---------------------+------------+-------------------------------------+------------------+------------------------------+--------+
| map_lookup          | Unary      | Map                                 | Computed         | :struct:`MapLookupOptions`   | \(5)   |
+---------------------+------------+-------------------------------------+------------------+------------------------------+--------+
| struct_field        | Unary      | Struct or Union                     | Computed         | :struct:`StructFieldOptions` | \(6)   |
+---------------------+------------+-------------------------------------+------------------+------------------------------+--------+

* \(1) Output is an array of the same length as the input list array. The
  output values are the values at the specified index of each child list.

* \(2) The top level of nesting is removed: all values in the list child array,
  including nulls, are appended to the output.  However, nulls in the parent
  list array are discarded.

* \(3) For each value in the list child array, the index at which it is found
  in the list-like array is appended to the output. Indices of null lists in the
  parent array might still be present in the output if they are non-empty null
  lists. If the parent is a list-view, child array values that are not used by
  any non-null list-view are null in the output.

* \(4) For each list element, compute the slice of that list element, then
  return another list-like array of those slices. Can return either a
  fixed or variable size list-like array, as determined by options provided.

* \(5) Extract either the ``FIRST``, ``LAST`` or ``ALL`` items from a
  map whose key match the given query key passed via options.
  The output type is an Array of items for the ``FIRST``/``LAST`` options
  and an Array of List of items for the ``ALL`` option.

* \(6) Extract a child value based on a sequence of indices passed in
  the options. The validity bitmap of the result will be the
  intersection of all intermediate validity bitmaps. For example, for
  an array with type ``struct<a: int32, b: struct<c: int64, d:
  float64>>``:

  * An empty sequence of indices yields the original value unchanged.
  * The index ``0`` yields an array of type ``int32`` whose validity
    bitmap is the intersection of the bitmap for the outermost struct
    and the bitmap for the child ``a``.
  * The index ``1, 1`` yields an array of type ``float64`` whose
    validity bitmap is the intersection of the bitmaps for the
    outermost struct, for struct ``b``, and for the child ``d``.

  For unions, a validity bitmap is synthesized based on the type
  codes. Also, the index is always the child index and not a type code.
  Hence for array with type ``sparse_union<2: int32, 7: utf8>``:

  * The index ``0`` yields an array of type ``int32``, which is valid
    at an index *n* if and only if the child array ``a`` is valid at
    index *n* and the type code at index *n* is 2.
  * The indices ``2`` and ``7`` are invalid.

.. _cpp-compute-vector-replace-functions:

Replace functions
~~~~~~~~~~~~~~~~~

These functions create a copy of the first input with some elements
replaced, based on the remaining inputs.

+--------------------------+------------+-----------------------+--------------+--------------+--------------+-------+
| Function name            | Arity      | Input type 1          | Input type 2 | Input type 3 | Output type  | Notes |
+==========================+============+=======================+==============+==============+==============+=======+
| fill_null_backward       | Unary      | Fixed-width or binary |              |              | Input type 1 | \(1)  |
+--------------------------+------------+-----------------------+--------------+--------------+--------------+-------+
| fill_null_forward        | Unary      | Fixed-width or binary |              |              | Input type 1 | \(1)  |
+--------------------------+------------+-----------------------+--------------+--------------+--------------+-------+
| replace_with_mask        | Ternary    | Fixed-width or binary | Boolean      | Input type 1 | Input type 1 | \(2)  |
+--------------------------+------------+-----------------------+--------------+--------------+--------------+-------+

* \(1) Valid values are carried forward/backward to fill null values.
* \(2) Each element in input 1 for which the corresponding Boolean in input 2
  is true is replaced with the next value from input 3. A null in input 2
  results in a corresponding null in the output.

  Also see: :ref:`if_else <cpp-compute-scalar-selections>`.

Pairwise functions
~~~~~~~~~~~~~~~~~~
Pairwise functions are unary vector functions that perform a binary operation on
a pair of elements in the input array, typically on adjacent elements. The n-th
output is computed by applying the binary operation to the n-th and (n-p)-th inputs,
where p is the period. The default period is 1, in which case the binary
operation is applied to adjacent pairs of inputs. The period can also be
negative, in which case the n-th output is computed by applying the binary
operation to the n-th and (n+abs(p))-th inputs.

+------------------------+-------+----------------------+----------------------+--------------------------------+----------+
| Function name          | Arity | Input types          | Output type          | Options class                  | Notes    |
+========================+=======+======================+======================+================================+==========+
| pairwise_diff          | Unary | Numeric/Temporal     | Numeric/Temporal     | :struct:`PairwiseOptions`      | \(1)(2)  |
+------------------------+-------+----------------------+----------------------+--------------------------------+----------+
| pairwise_diff_checked  | Unary | Numeric/Temporal     | Numeric/Temporal     | :struct:`PairwiseOptions`      | \(1)(3)  |
+------------------------+-------+----------------------+----------------------+--------------------------------+----------+

* \(1) Computes the first order difference of an array, It internally calls
  the scalar function ``Subtract`` (or the checked variant) to compute
  differences, so its behavior and supported types are the same as
  ``Subtract``. The period can be specified in :struct:`PairwiseOptions`.
* \(2) Wraps around the result when overflow is detected.
* \(3) Returns an ``Invalid`` :class:`Status` when overflow is detected.
