This is an automated email from the ASF dual-hosted git repository.
github-actions[bot] pushed a commit to branch asf-site
in repository https://gitbox.apache.org/repos/asf/datafusion-comet.git
commit 41085af5d278c814e09ec54496e71b1aaef46bc1
Author: github-actions[bot] <github-actions[bot]@users.noreply.github.com>
AuthorDate: Fri Sep 11 04:01:57 2026 +0000
Publish built docs triggered by 5c5dda8374d0b8b93b877281ed4b5fdca1eed324
---
.../expression-audits/agg_funcs.md.txt | 20 +++++++++++++++--
.../expressions/spark-3.4/aggregate.md.txt | 20 +++++++++++++++++
.../expressions/spark-3.5/aggregate.md.txt | 20 +++++++++++++++++
.../expressions/spark-4.0/aggregate.md.txt | 20 +++++++++++++++++
.../expressions/spark-4.1/aggregate.md.txt | 20 +++++++++++++++++
_sources/user-guide/latest/configs.md.txt | 2 ++
_sources/user-guide/latest/expressions.md.txt | 4 ++--
contributor-guide/expression-audits/agg_funcs.html | 26 ++++++++++++++++++++--
searchindex.js | 2 +-
.../expressions/spark-3.4/aggregate.html | 24 ++++++++++++++++++++
.../expressions/spark-3.5/aggregate.html | 24 ++++++++++++++++++++
.../expressions/spark-4.0/aggregate.html | 24 ++++++++++++++++++++
.../expressions/spark-4.1/aggregate.html | 24 ++++++++++++++++++++
user-guide/latest/configs.html | 10 ++++++++-
user-guide/latest/expressions.html | 12 +++++-----
15 files changed, 238 insertions(+), 14 deletions(-)
diff --git a/_sources/contributor-guide/expression-audits/agg_funcs.md.txt
b/_sources/contributor-guide/expression-audits/agg_funcs.md.txt
index 164ca2a72c..8d0ff7be68 100644
--- a/_sources/contributor-guide/expression-audits/agg_funcs.md.txt
+++ b/_sources/contributor-guide/expression-audits/agg_funcs.md.txt
@@ -57,8 +57,9 @@
- Spark 3.5.8 (audited 2026-06-24): identical to 3.4.3.
- Spark 4.0.1 (audited 2026-06-24): only structural change is adding `with
UnaryLike[Expression]` to the case class (no behavior change).
- Spark 4.1.1 (audited 2026-06-24): identical to 4.0.1.
-- Comet implementation: native side delegates to
`datafusion_spark::function::aggregate::collect::SparkCollectList`, which wraps
`ArrayAggAccumulator` with `ignore_nulls = true` and converts a final NULL
accumulator state to an empty array (matching Spark's `defaultResult`). The
native return type is `List(Field, containsNull = true)`, while Spark uses
`containsNull = false`. Because nulls are filtered before insertion, no nulls
actually appear in the array, so this is a schema-shape dif [...]
+- Comet implementation: `CometCollectList`
(`native/spark-expr/src/agg_funcs/collect.rs`) delegates the ungrouped path to
`datafusion_spark::function::aggregate::collect::SparkCollectList`, which wraps
`ArrayAggAccumulator` with `ignore_nulls = true` and converts a final NULL
accumulator state to an empty array (matching Spark's `defaultResult`); grouped
aggregation uses Comet's own `GroupsAccumulator`, which retains the input
arrays and gathers them into group order on emit. The native [...]
- Buffer shape (applies equally to `collect_set`): both are
`TypedImperativeAggregate`s, so Spark's `aggBufferAttributes` declares the
intermediate buffer as `BinaryType` (serialized state) while the native
accumulator's `state_fields` is a `List`.
`CometBaseAggregate.adjustOutputForNativeState` rewrites the Comet-side Partial
output to the list shape. Neither collector can split a Partial and Final
across Comet and Spark, and a multi-stage distinct rewrite (which inserts a
`PartialMerge [...]
+- Performance (tuned 2026-09-09, PR
[#5803](https://github.com/apache/datafusion-comet/pull/5803)): grouped
`collect_list` used to run through DataFusion's `GroupsAccumulatorAdapter`,
which keeps one boxed `Accumulator` per group and slices every batch into a
per-group `update_batch` call. `CollectListGroupsAccumulator` instead records a
`(group, row range)` contribution per batch and rearranges them with a counting
sort on emit, gathering long runs with `concat` and scattered rows with [...]
- Spark 4.2 (preview): `CollectList` and `CollectSet` gain an `ignoreNulls`
field (default `true`); `RESPECT NULLS` sets it to `false` and keeps null
elements. The native path always drops nulls, so `CometCollectShim` reads the
field per Spark version (always `true` on 3.4-4.1) and `CometCollectList` /
`CometCollectSet` report `Unsupported` when it is `false`, falling back to
Spark.
## collect_set
@@ -67,9 +68,17 @@
- Spark 3.5.8 (audited 2026-07-27): identical to 3.4.3.
- Spark 4.0.1 (audited 2026-07-27): adds `with UnaryLike[Expression]` to the
case class, and `checkInputDataTypes` additionally requires
`UnsafeRowUtils.isBinaryStable(child.dataType)`, so non-default-collation
strings are rejected along with maps. Deduplication semantics unchanged.
- Spark 4.1.1 (audited 2026-07-27): identical to 4.0.1.
-- Comet implementation: the native side delegates to
`datafusion_spark::function::aggregate::collect::SparkCollectSet`, which wraps
`DistinctArrayAggAccumulator` with `ignore_nulls = true` in a
`NullToEmptyListAccumulator` so a final NULL accumulator state becomes an empty
array. The `containsNull` mismatch against Spark's declared output type, and
its rationale, are identical to [collect_list](#collect-list).
+- Comet implementation: `CometCollectSet`
(`native/spark-expr/src/agg_funcs/collect.rs`) delegates the ungrouped path to
`datafusion_spark::function::aggregate::collect::SparkCollectSet`, which wraps
`DistinctArrayAggAccumulator` with `ignore_nulls = true` in a
`NullToEmptyListAccumulator` so a final NULL accumulator state becomes an empty
array; grouped aggregation uses Comet's own `GroupsAccumulator`, which keeps
the distinct values row-encoded in one arena keyed by `(group, value)`. D [...]
+- Performance (tuned 2026-09-09, PR
[#5803](https://github.com/apache/datafusion-comet/pull/5803)): as for
[collect_list](#collect-list), grouped `collect_set` no longer goes through
`GroupsAccumulatorAdapter`. `CollectSetGroupsAccumulator` encodes each batch
once for all of its groups and deduplicates against an open-addressed index
over a shared arena, replacing one hash table plus one owned `Row` per distinct
value per group. 60-93% faster ([#5797](https://github.com/apache/datafusion
[...]
- `CometCollectSet` reports `Incompatible` for float and double input when
`spark.comet.exec.strictFloatingPoint=true`, because the native distinct
comparison treats `NaN == NaN` and collapses repeated `NaN`s into a single
element while Spark keeps each one. The native path for floating-point input is
then opt-in via `spark.comet.expression.CollectSet.allowIncompatible=true`. All
other input types are `Compatible`.
+## max_by
+
+- Spark 3.4.3 (2026-07-03): `MaxBy` is a 2-argument `DeclarativeAggregate`
registered as `expression[MaxBy]("max_by")`. Buffer is
`(valueWithExtremumOrdering, extremumOrdering)`; null orderings are ignored,
the value paired with the maximum ordering is returned (and may itself be
null), and an all-null-ordering group yields null. Comet implements a native
`max_by` aggregate. Only fixed-length value and ordering types are accelerated:
a variable-length or nested type (string, binary, stru [...]
+- Spark 3.5.8 (2026-07-03): aggregate logic identical to 3.4.3.
+- Spark 4.0.1 (2026-07-03): aggregate logic identical to 3.4.3; only the
`@ExpressionDescription` example and note text differ.
+- Spark 4.1.1 (2026-07-03): aggregate logic identical to 3.4.3. The 3-argument
top-k form `max_by(x, y, k)` arrived in Spark 4.2 (`MaxMinByK.scala`, absent on
`branch-4.1`), so it is absent from 3.4 through 4.1 and present on the 4.2
profile this repo builds. `MaxByBuilder.build` still returns a plain `MaxBy`
for the 2-argument call, and the 3-argument call becomes `MaxMinByK`, a
different class with no serde registration, so Comet handles only the
2-argument form and the top-k form falls back.
+
## median
- Spark 3.4.3 (audited 2026-06-24): `Median(child)` is a
`RuntimeReplaceableAggregate` with `replacement = Percentile(child,
Literal(0.5))`. Catalyst rewrites `median(x)` to `percentile(x, 0.5)` before
Comet sees the plan, so it is served by `CometPercentile`.
@@ -77,6 +86,13 @@
- Spark 4.0.1 (audited 2026-06-24): `replacement` becomes `lazy val`;
semantics unchanged.
- Spark 4.1.1 (audited 2026-06-24): identical to 4.0.1.
+## min_by
+
+- Spark 3.4.3 (2026-07-03): `MinBy` shares the abstract `MaxMinBy`
`DeclarativeAggregate` with `MaxBy`, differing only in the comparison direction
(`least` / `<` instead of `greatest` / `>`). Registered as
`expression[MinBy]("min_by")`. Null orderings are ignored, the value paired
with the minimum ordering is returned (and may itself be null), and an
all-null-ordering group yields null. Comet serves it through the same native
`MaxMinBy` aggregate as `max_by`, with the same fixed-length v [...]
+- Spark 3.5.8 (2026-07-03): aggregate logic identical to 3.4.3.
+- Spark 4.0.1 (2026-07-03): aggregate logic identical to 3.4.3; only the
`@ExpressionDescription` example and note text differ.
+- Spark 4.1.1 (2026-07-03): aggregate logic identical to 3.4.3. The 3-argument
top-k form `min_by(x, y, k)` arrived in Spark 4.2 alongside `max_by(x, y, k)`;
`MinByBuilder.build` returns a plain `MinBy` for the 2-argument call, so Comet
handles only the 2-argument form and the top-k form falls back.
+
## percentile
- Spark 3.4.3 (audited 2026-06-24): `Percentile(child, percentageExpression,
frequencyExpression, ..., reverse)` over `PercentileBase`. Exact percentile
using `index = p * (n - 1)` linear interpolation, NULL inputs skipped,
empty/all-null group returns NULL. `CometPercentile` maps the
single-literal-percentage, default-frequency, numeric-input, ascending form to
DataFusion's `percentile_cont` (same interpolation). Array-of-percentages, a
non-default frequency argument, descending order, [...]
diff --git
a/_sources/user-guide/latest/compatibility/expressions/spark-3.4/aggregate.md.txt
b/_sources/user-guide/latest/compatibility/expressions/spark-3.4/aggregate.md.txt
index 797c5b982c..61e3af27f1 100644
---
a/_sources/user-guide/latest/compatibility/expressions/spark-3.4/aggregate.md.txt
+++
b/_sources/user-guide/latest/compatibility/expressions/spark-3.4/aggregate.md.txt
@@ -61,6 +61,26 @@ The following differences from Spark are always present and
do not require any a
- This function is not deterministic. Results may not match Spark.
+## MaxBy
+
+The following differences from Spark are always present and do not require any
additional configuration:
+
+- This function is non-deterministic when multiple rows share the maximum
ordering value. Results may differ from Spark in that case.
+
+The following cases are not supported by Comet and always fall back to Spark,
regardless of any `allowIncompatible` setting:
+
+- The value and ordering must both be fixed-length types (boolean, integral,
floating-point, decimal, date, or timestamp). A variable-length or nested type
such as string, binary, or struct falls back to Spark.
+
+## MinBy
+
+The following differences from Spark are always present and do not require any
additional configuration:
+
+- This function is non-deterministic when multiple rows share the minimum
ordering value. Results may differ from Spark in that case.
+
+The following cases are not supported by Comet and always fall back to Spark,
regardless of any `allowIncompatible` setting:
+
+- The value and ordering must both be fixed-length types (boolean, integral,
floating-point, decimal, date, or timestamp). A variable-length or nested type
such as string, binary, or struct falls back to Spark.
+
## Mode
The following incompatibilities cause `Mode` to fall back to Spark by default.
Set `spark.comet.expression.Mode.allowIncompatible=true` to enable Comet
acceleration despite these differences.
diff --git
a/_sources/user-guide/latest/compatibility/expressions/spark-3.5/aggregate.md.txt
b/_sources/user-guide/latest/compatibility/expressions/spark-3.5/aggregate.md.txt
index 797c5b982c..61e3af27f1 100644
---
a/_sources/user-guide/latest/compatibility/expressions/spark-3.5/aggregate.md.txt
+++
b/_sources/user-guide/latest/compatibility/expressions/spark-3.5/aggregate.md.txt
@@ -61,6 +61,26 @@ The following differences from Spark are always present and
do not require any a
- This function is not deterministic. Results may not match Spark.
+## MaxBy
+
+The following differences from Spark are always present and do not require any
additional configuration:
+
+- This function is non-deterministic when multiple rows share the maximum
ordering value. Results may differ from Spark in that case.
+
+The following cases are not supported by Comet and always fall back to Spark,
regardless of any `allowIncompatible` setting:
+
+- The value and ordering must both be fixed-length types (boolean, integral,
floating-point, decimal, date, or timestamp). A variable-length or nested type
such as string, binary, or struct falls back to Spark.
+
+## MinBy
+
+The following differences from Spark are always present and do not require any
additional configuration:
+
+- This function is non-deterministic when multiple rows share the minimum
ordering value. Results may differ from Spark in that case.
+
+The following cases are not supported by Comet and always fall back to Spark,
regardless of any `allowIncompatible` setting:
+
+- The value and ordering must both be fixed-length types (boolean, integral,
floating-point, decimal, date, or timestamp). A variable-length or nested type
such as string, binary, or struct falls back to Spark.
+
## Mode
The following incompatibilities cause `Mode` to fall back to Spark by default.
Set `spark.comet.expression.Mode.allowIncompatible=true` to enable Comet
acceleration despite these differences.
diff --git
a/_sources/user-guide/latest/compatibility/expressions/spark-4.0/aggregate.md.txt
b/_sources/user-guide/latest/compatibility/expressions/spark-4.0/aggregate.md.txt
index 797c5b982c..61e3af27f1 100644
---
a/_sources/user-guide/latest/compatibility/expressions/spark-4.0/aggregate.md.txt
+++
b/_sources/user-guide/latest/compatibility/expressions/spark-4.0/aggregate.md.txt
@@ -61,6 +61,26 @@ The following differences from Spark are always present and
do not require any a
- This function is not deterministic. Results may not match Spark.
+## MaxBy
+
+The following differences from Spark are always present and do not require any
additional configuration:
+
+- This function is non-deterministic when multiple rows share the maximum
ordering value. Results may differ from Spark in that case.
+
+The following cases are not supported by Comet and always fall back to Spark,
regardless of any `allowIncompatible` setting:
+
+- The value and ordering must both be fixed-length types (boolean, integral,
floating-point, decimal, date, or timestamp). A variable-length or nested type
such as string, binary, or struct falls back to Spark.
+
+## MinBy
+
+The following differences from Spark are always present and do not require any
additional configuration:
+
+- This function is non-deterministic when multiple rows share the minimum
ordering value. Results may differ from Spark in that case.
+
+The following cases are not supported by Comet and always fall back to Spark,
regardless of any `allowIncompatible` setting:
+
+- The value and ordering must both be fixed-length types (boolean, integral,
floating-point, decimal, date, or timestamp). A variable-length or nested type
such as string, binary, or struct falls back to Spark.
+
## Mode
The following incompatibilities cause `Mode` to fall back to Spark by default.
Set `spark.comet.expression.Mode.allowIncompatible=true` to enable Comet
acceleration despite these differences.
diff --git
a/_sources/user-guide/latest/compatibility/expressions/spark-4.1/aggregate.md.txt
b/_sources/user-guide/latest/compatibility/expressions/spark-4.1/aggregate.md.txt
index 797c5b982c..61e3af27f1 100644
---
a/_sources/user-guide/latest/compatibility/expressions/spark-4.1/aggregate.md.txt
+++
b/_sources/user-guide/latest/compatibility/expressions/spark-4.1/aggregate.md.txt
@@ -61,6 +61,26 @@ The following differences from Spark are always present and
do not require any a
- This function is not deterministic. Results may not match Spark.
+## MaxBy
+
+The following differences from Spark are always present and do not require any
additional configuration:
+
+- This function is non-deterministic when multiple rows share the maximum
ordering value. Results may differ from Spark in that case.
+
+The following cases are not supported by Comet and always fall back to Spark,
regardless of any `allowIncompatible` setting:
+
+- The value and ordering must both be fixed-length types (boolean, integral,
floating-point, decimal, date, or timestamp). A variable-length or nested type
such as string, binary, or struct falls back to Spark.
+
+## MinBy
+
+The following differences from Spark are always present and do not require any
additional configuration:
+
+- This function is non-deterministic when multiple rows share the minimum
ordering value. Results may differ from Spark in that case.
+
+The following cases are not supported by Comet and always fall back to Spark,
regardless of any `allowIncompatible` setting:
+
+- The value and ordering must both be fixed-length types (boolean, integral,
floating-point, decimal, date, or timestamp). A variable-length or nested type
such as string, binary, or struct falls back to Spark.
+
## Mode
The following incompatibilities cause `Mode` to fall back to Spark by default.
Set `spark.comet.expression.Mode.allowIncompatible=true` to enable Comet
acceleration despite these differences.
diff --git a/_sources/user-guide/latest/configs.md.txt
b/_sources/user-guide/latest/configs.md.txt
index fc34fe5cfa..ec6e18516d 100644
--- a/_sources/user-guide/latest/configs.md.txt
+++ b/_sources/user-guide/latest/configs.md.txt
@@ -514,7 +514,9 @@ shuffle, including applications that rely only on remote
reliable storage or dec
| `spark.comet.expression.HyperLogLogPlusPlus.enabled` | Enable Comet
acceleration for `HyperLogLogPlusPlus` | true |
| `spark.comet.expression.Last.enabled` | Enable Comet acceleration for `Last`
| true |
| `spark.comet.expression.Max.enabled` | Enable Comet acceleration for `Max` |
true |
+| `spark.comet.expression.MaxBy.enabled` | Enable Comet acceleration for
`MaxBy` | true |
| `spark.comet.expression.Min.enabled` | Enable Comet acceleration for `Min` |
true |
+| `spark.comet.expression.MinBy.enabled` | Enable Comet acceleration for
`MinBy` | true |
| `spark.comet.expression.Mode.enabled` | Enable Comet acceleration for `Mode`
| true |
| `spark.comet.expression.Percentile.enabled` | Enable Comet acceleration for
`Percentile` | true |
| `spark.comet.expression.RegrIntercept.enabled` | Enable Comet acceleration
for `RegrIntercept` | true |
diff --git a/_sources/user-guide/latest/expressions.md.txt
b/_sources/user-guide/latest/expressions.md.txt
index b1bd78f397..0dee5de9a0 100644
--- a/_sources/user-guide/latest/expressions.md.txt
+++ b/_sources/user-guide/latest/expressions.md.txt
@@ -109,11 +109,11 @@ The tables below list every Spark built-in expression
with its current status.
| `last_value` | β
| Native | |
| `listagg` | π | β | String aggregation |
| `max` | β
| Native | |
-| `max_by` | π | β |
[#3841](https://github.com/apache/datafusion-comet/issues/3841) |
+| `max_by` | β
| Native | Value and ordering must be fixed-length types |
| `mean` | β
| Native | |
| `median` | β
| β | Rewrites to `percentile(col, 0.5)` and runs natively for
supported percentile inputs |
| `min` | β
| Native | |
-| `min_by` | π | β |
[#3841](https://github.com/apache/datafusion-comet/issues/3841) |
+| `min_by` | β
| Native | Value and ordering must be fixed-length types |
| `mode` | β
| β | `mode(col)` only; Spark breaks ties non-deterministically,
so Comet returns the smallest tied value and falls back by default, opt-in via
allowIncompatible
([#3970](https://github.com/apache/datafusion-comet/issues/3970)) |
| `percentile` | β
| Native | Single literal percentage on numeric input runs
natively; array of percentages and a frequency argument fall back to Spark |
| `percentile_cont` | β
| β | Spark 4.0+ `WITHIN GROUP (ORDER BY ...)`;
ascending only runs natively, `DESC` falls back to Spark |
diff --git a/contributor-guide/expression-audits/agg_funcs.html
b/contributor-guide/expression-audits/agg_funcs.html
index b02af30b22..1acd91fb2e 100644
--- a/contributor-guide/expression-audits/agg_funcs.html
+++ b/contributor-guide/expression-audits/agg_funcs.html
@@ -599,8 +599,9 @@ under the License.
<li><p>Spark 3.5.8 (audited 2026-06-24): identical to 3.4.3.</p></li>
<li><p>Spark 4.0.1 (audited 2026-06-24): only structural change is adding
<code class="docutils literal notranslate"><span class="pre">with</span> <span
class="pre">UnaryLike[Expression]</span></code> to the case class (no behavior
change).</p></li>
<li><p>Spark 4.1.1 (audited 2026-06-24): identical to 4.0.1.</p></li>
-<li><p>Comet implementation: native side delegates to <code class="docutils
literal notranslate"><span
class="pre">datafusion_spark::function::aggregate::collect::SparkCollectList</span></code>,
which wraps <code class="docutils literal notranslate"><span
class="pre">ArrayAggAccumulator</span></code> with <code class="docutils
literal notranslate"><span class="pre">ignore_nulls</span> <span
class="pre">=</span> <span class="pre">true</span></code> and converts a final
NULL accumulator st [...]
+<li><p>Comet implementation: <code class="docutils literal notranslate"><span
class="pre">CometCollectList</span></code> (<code class="docutils literal
notranslate"><span
class="pre">native/spark-expr/src/agg_funcs/collect.rs</span></code>) delegates
the ungrouped path to <code class="docutils literal notranslate"><span
class="pre">datafusion_spark::function::aggregate::collect::SparkCollectList</span></code>,
which wraps <code class="docutils literal notranslate"><span class="pre">Array
[...]
<li><p>Buffer shape (applies equally to <code class="docutils literal
notranslate"><span class="pre">collect_set</span></code>): both are <code
class="docutils literal notranslate"><span
class="pre">TypedImperativeAggregate</span></code>s, so Sparkβs <code
class="docutils literal notranslate"><span
class="pre">aggBufferAttributes</span></code> declares the intermediate buffer
as <code class="docutils literal notranslate"><span
class="pre">BinaryType</span></code> (serialized state) while [...]
+<li><p>Performance (tuned 2026-09-09, PR <a class="reference external"
href="https://github.com/apache/datafusion-comet/pull/5803">#5803</a>): grouped
<code class="docutils literal notranslate"><span
class="pre">collect_list</span></code> used to run through DataFusionβs <code
class="docutils literal notranslate"><span
class="pre">GroupsAccumulatorAdapter</span></code>, which keeps one boxed <code
class="docutils literal notranslate"><span
class="pre">Accumulator</span></code> per group [...]
<li><p>Spark 4.2 (preview): <code class="docutils literal notranslate"><span
class="pre">CollectList</span></code> and <code class="docutils literal
notranslate"><span class="pre">CollectSet</span></code> gain an <code
class="docutils literal notranslate"><span
class="pre">ignoreNulls</span></code> field (default <code class="docutils
literal notranslate"><span class="pre">true</span></code>); <code
class="docutils literal notranslate"><span class="pre">RESPECT</span> <span
class="pre">N [...]
</ul>
</section>
@@ -611,10 +612,20 @@ under the License.
<li><p>Spark 3.5.8 (audited 2026-07-27): identical to 3.4.3.</p></li>
<li><p>Spark 4.0.1 (audited 2026-07-27): adds <code class="docutils literal
notranslate"><span class="pre">with</span> <span
class="pre">UnaryLike[Expression]</span></code> to the case class, and <code
class="docutils literal notranslate"><span
class="pre">checkInputDataTypes</span></code> additionally requires <code
class="docutils literal notranslate"><span
class="pre">UnsafeRowUtils.isBinaryStable(child.dataType)</span></code>, so
non-default-collation strings are rejected along with [...]
<li><p>Spark 4.1.1 (audited 2026-07-27): identical to 4.0.1.</p></li>
-<li><p>Comet implementation: the native side delegates to <code
class="docutils literal notranslate"><span
class="pre">datafusion_spark::function::aggregate::collect::SparkCollectSet</span></code>,
which wraps <code class="docutils literal notranslate"><span
class="pre">DistinctArrayAggAccumulator</span></code> with <code
class="docutils literal notranslate"><span class="pre">ignore_nulls</span>
<span class="pre">=</span> <span class="pre">true</span></code> in a <code
class="docutils li [...]
+<li><p>Comet implementation: <code class="docutils literal notranslate"><span
class="pre">CometCollectSet</span></code> (<code class="docutils literal
notranslate"><span
class="pre">native/spark-expr/src/agg_funcs/collect.rs</span></code>) delegates
the ungrouped path to <code class="docutils literal notranslate"><span
class="pre">datafusion_spark::function::aggregate::collect::SparkCollectSet</span></code>,
which wraps <code class="docutils literal notranslate"><span
class="pre">Distinc [...]
+<li><p>Performance (tuned 2026-09-09, PR <a class="reference external"
href="https://github.com/apache/datafusion-comet/pull/5803">#5803</a>): as for
<a class="reference internal" href="#collect-list"><span class="xref
myst">collect_list</span></a>, grouped <code class="docutils literal
notranslate"><span class="pre">collect_set</span></code> no longer goes through
<code class="docutils literal notranslate"><span
class="pre">GroupsAccumulatorAdapter</span></code>. <code class="docutils l
[...]
<li><p><code class="docutils literal notranslate"><span
class="pre">CometCollectSet</span></code> reports <code class="docutils literal
notranslate"><span class="pre">Incompatible</span></code> for float and double
input when <code class="docutils literal notranslate"><span
class="pre">spark.comet.exec.strictFloatingPoint=true</span></code>, because
the native distinct comparison treats <code class="docutils literal
notranslate"><span class="pre">NaN</span> <span class="pre">==</span> <s [...]
</ul>
</section>
+<section id="max-by">
+<h2>max_by<a class="headerlink" href="#max-by" title="Link to this
heading">#</a></h2>
+<ul class="simple">
+<li><p>Spark 3.4.3 (2026-07-03): <code class="docutils literal
notranslate"><span class="pre">MaxBy</span></code> is a 2-argument <code
class="docutils literal notranslate"><span
class="pre">DeclarativeAggregate</span></code> registered as <code
class="docutils literal notranslate"><span
class="pre">expression[MaxBy]("max_by")</span></code>. Buffer is
<code class="docutils literal notranslate"><span
class="pre">(valueWithExtremumOrdering,</span> <span class="pre">extremumOrderi
[...]
+<li><p>Spark 3.5.8 (2026-07-03): aggregate logic identical to 3.4.3.</p></li>
+<li><p>Spark 4.0.1 (2026-07-03): aggregate logic identical to 3.4.3; only the
<code class="docutils literal notranslate"><span
class="pre">@ExpressionDescription</span></code> example and note text
differ.</p></li>
+<li><p>Spark 4.1.1 (2026-07-03): aggregate logic identical to 3.4.3. The
3-argument top-k form <code class="docutils literal notranslate"><span
class="pre">max_by(x,</span> <span class="pre">y,</span> <span
class="pre">k)</span></code> arrived in Spark 4.2 (<code class="docutils
literal notranslate"><span class="pre">MaxMinByK.scala</span></code>, absent on
<code class="docutils literal notranslate"><span
class="pre">branch-4.1</span></code>), so it is absent from 3.4 through 4.1 and
pre [...]
+</ul>
+</section>
<section id="median">
<h2>median<a class="headerlink" href="#median" title="Link to this
heading">#</a></h2>
<ul class="simple">
@@ -624,6 +635,15 @@ under the License.
<li><p>Spark 4.1.1 (audited 2026-06-24): identical to 4.0.1.</p></li>
</ul>
</section>
+<section id="min-by">
+<h2>min_by<a class="headerlink" href="#min-by" title="Link to this
heading">#</a></h2>
+<ul class="simple">
+<li><p>Spark 3.4.3 (2026-07-03): <code class="docutils literal
notranslate"><span class="pre">MinBy</span></code> shares the abstract <code
class="docutils literal notranslate"><span class="pre">MaxMinBy</span></code>
<code class="docutils literal notranslate"><span
class="pre">DeclarativeAggregate</span></code> with <code class="docutils
literal notranslate"><span class="pre">MaxBy</span></code>, differing only in
the comparison direction (<code class="docutils literal notranslate"><spa [...]
+<li><p>Spark 3.5.8 (2026-07-03): aggregate logic identical to 3.4.3.</p></li>
+<li><p>Spark 4.0.1 (2026-07-03): aggregate logic identical to 3.4.3; only the
<code class="docutils literal notranslate"><span
class="pre">@ExpressionDescription</span></code> example and note text
differ.</p></li>
+<li><p>Spark 4.1.1 (2026-07-03): aggregate logic identical to 3.4.3. The
3-argument top-k form <code class="docutils literal notranslate"><span
class="pre">min_by(x,</span> <span class="pre">y,</span> <span
class="pre">k)</span></code> arrived in Spark 4.2 alongside <code
class="docutils literal notranslate"><span class="pre">max_by(x,</span> <span
class="pre">y,</span> <span class="pre">k)</span></code>; <code class="docutils
literal notranslate"><span class="pre">MinByBuilder.build</sp [...]
+</ul>
+</section>
<section id="percentile">
<h2>percentile<a class="headerlink" href="#percentile" title="Link to this
heading">#</a></h2>
<ul class="simple">
@@ -690,7 +710,9 @@ under the License.
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#bit-and">bit_and</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#collect-list">collect_list</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#collect-set">collect_set</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#max-by">max_by</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#median">median</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#min-by">min_by</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#percentile">percentile</a></li>
</ul>
</nav></div>
diff --git a/searchindex.js b/searchindex.js
index 5ed1020a3a..7c69b84f7e 100644
--- a/searchindex.js
+++ b/searchindex.js
@@ -1 +1 @@
-Search.setIndex({"alltitles": {"!": [[55, "id1"]], "%": [[53, "id1"]], "&":
[[43, "id1"]], "*": [[53, "id2"]], "+": [[53, "id3"]], "-": [[53, "id4"]], "/":
[[53, "id5"]], "1. Format Your Code": [[40, "format-your-code"]], "1. Install
Comet": [[61, "install-comet"], [71, "install-comet"]], "1. Native Operators
(nativeExecs map)": [[28, "native-operators-nativeexecs-map"]], "2. Build and
Verify": [[40, "build-and-verify"]], "2. Clone Iceberg and Apply Diff": [[61,
"clone-iceberg-and-apply- [...]
\ No newline at end of file
+Search.setIndex({"alltitles": {"!": [[55, "id1"]], "%": [[53, "id1"]], "&":
[[43, "id1"]], "*": [[53, "id2"]], "+": [[53, "id3"]], "-": [[53, "id4"]], "/":
[[53, "id5"]], "1. Format Your Code": [[40, "format-your-code"]], "1. Install
Comet": [[61, "install-comet"], [71, "install-comet"]], "1. Native Operators
(nativeExecs map)": [[28, "native-operators-nativeexecs-map"]], "2. Build and
Verify": [[40, "build-and-verify"]], "2. Clone Iceberg and Apply Diff": [[61,
"clone-iceberg-and-apply- [...]
\ No newline at end of file
diff --git
a/user-guide/latest/compatibility/expressions/spark-3.4/aggregate.html
b/user-guide/latest/compatibility/expressions/spark-3.4/aggregate.html
index a32a0b0c92..a58514fe0e 100644
--- a/user-guide/latest/compatibility/expressions/spark-3.4/aggregate.html
+++ b/user-guide/latest/compatibility/expressions/spark-3.4/aggregate.html
@@ -829,6 +829,28 @@ under the License.
<li><p>This function is not deterministic. Results may not match
Spark.</p></li>
</ul>
</section>
+<section id="maxby">
+<h2>MaxBy<a class="headerlink" href="#maxby" title="Link to this
heading">#</a></h2>
+<p>The following differences from Spark are always present and do not require
any additional configuration:</p>
+<ul class="simple">
+<li><p>This function is non-deterministic when multiple rows share the maximum
ordering value. Results may differ from Spark in that case.</p></li>
+</ul>
+<p>The following cases are not supported by Comet and always fall back to
Spark, regardless of any <code class="docutils literal notranslate"><span
class="pre">allowIncompatible</span></code> setting:</p>
+<ul class="simple">
+<li><p>The value and ordering must both be fixed-length types (boolean,
integral, floating-point, decimal, date, or timestamp). A variable-length or
nested type such as string, binary, or struct falls back to Spark.</p></li>
+</ul>
+</section>
+<section id="minby">
+<h2>MinBy<a class="headerlink" href="#minby" title="Link to this
heading">#</a></h2>
+<p>The following differences from Spark are always present and do not require
any additional configuration:</p>
+<ul class="simple">
+<li><p>This function is non-deterministic when multiple rows share the minimum
ordering value. Results may differ from Spark in that case.</p></li>
+</ul>
+<p>The following cases are not supported by Comet and always fall back to
Spark, regardless of any <code class="docutils literal notranslate"><span
class="pre">allowIncompatible</span></code> setting:</p>
+<ul class="simple">
+<li><p>The value and ordering must both be fixed-length types (boolean,
integral, floating-point, decimal, date, or timestamp). A variable-length or
nested type such as string, binary, or struct falls back to Spark.</p></li>
+</ul>
+</section>
<section id="mode">
<h2>Mode<a class="headerlink" href="#mode" title="Link to this
heading">#</a></h2>
<p>The following incompatibilities cause <code class="docutils literal
notranslate"><span class="pre">Mode</span></code> to fall back to Spark by
default. Set <code class="docutils literal notranslate"><span
class="pre">spark.comet.expression.Mode.allowIncompatible=true</span></code> to
enable Comet acceleration despite these differences.</p>
@@ -903,6 +925,8 @@ under the License.
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#first">First</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#hyperloglogplusplus">HyperLogLogPlusPlus</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#last">Last</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#maxby">MaxBy</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#minby">MinBy</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#mode">Mode</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#percentile">Percentile</a></li>
</ul>
diff --git
a/user-guide/latest/compatibility/expressions/spark-3.5/aggregate.html
b/user-guide/latest/compatibility/expressions/spark-3.5/aggregate.html
index 39dd4fea7c..0b6d963842 100644
--- a/user-guide/latest/compatibility/expressions/spark-3.5/aggregate.html
+++ b/user-guide/latest/compatibility/expressions/spark-3.5/aggregate.html
@@ -829,6 +829,28 @@ under the License.
<li><p>This function is not deterministic. Results may not match
Spark.</p></li>
</ul>
</section>
+<section id="maxby">
+<h2>MaxBy<a class="headerlink" href="#maxby" title="Link to this
heading">#</a></h2>
+<p>The following differences from Spark are always present and do not require
any additional configuration:</p>
+<ul class="simple">
+<li><p>This function is non-deterministic when multiple rows share the maximum
ordering value. Results may differ from Spark in that case.</p></li>
+</ul>
+<p>The following cases are not supported by Comet and always fall back to
Spark, regardless of any <code class="docutils literal notranslate"><span
class="pre">allowIncompatible</span></code> setting:</p>
+<ul class="simple">
+<li><p>The value and ordering must both be fixed-length types (boolean,
integral, floating-point, decimal, date, or timestamp). A variable-length or
nested type such as string, binary, or struct falls back to Spark.</p></li>
+</ul>
+</section>
+<section id="minby">
+<h2>MinBy<a class="headerlink" href="#minby" title="Link to this
heading">#</a></h2>
+<p>The following differences from Spark are always present and do not require
any additional configuration:</p>
+<ul class="simple">
+<li><p>This function is non-deterministic when multiple rows share the minimum
ordering value. Results may differ from Spark in that case.</p></li>
+</ul>
+<p>The following cases are not supported by Comet and always fall back to
Spark, regardless of any <code class="docutils literal notranslate"><span
class="pre">allowIncompatible</span></code> setting:</p>
+<ul class="simple">
+<li><p>The value and ordering must both be fixed-length types (boolean,
integral, floating-point, decimal, date, or timestamp). A variable-length or
nested type such as string, binary, or struct falls back to Spark.</p></li>
+</ul>
+</section>
<section id="mode">
<h2>Mode<a class="headerlink" href="#mode" title="Link to this
heading">#</a></h2>
<p>The following incompatibilities cause <code class="docutils literal
notranslate"><span class="pre">Mode</span></code> to fall back to Spark by
default. Set <code class="docutils literal notranslate"><span
class="pre">spark.comet.expression.Mode.allowIncompatible=true</span></code> to
enable Comet acceleration despite these differences.</p>
@@ -903,6 +925,8 @@ under the License.
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#first">First</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#hyperloglogplusplus">HyperLogLogPlusPlus</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#last">Last</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#maxby">MaxBy</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#minby">MinBy</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#mode">Mode</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#percentile">Percentile</a></li>
</ul>
diff --git
a/user-guide/latest/compatibility/expressions/spark-4.0/aggregate.html
b/user-guide/latest/compatibility/expressions/spark-4.0/aggregate.html
index 2b3a4c10b2..078e379e62 100644
--- a/user-guide/latest/compatibility/expressions/spark-4.0/aggregate.html
+++ b/user-guide/latest/compatibility/expressions/spark-4.0/aggregate.html
@@ -829,6 +829,28 @@ under the License.
<li><p>This function is not deterministic. Results may not match
Spark.</p></li>
</ul>
</section>
+<section id="maxby">
+<h2>MaxBy<a class="headerlink" href="#maxby" title="Link to this
heading">#</a></h2>
+<p>The following differences from Spark are always present and do not require
any additional configuration:</p>
+<ul class="simple">
+<li><p>This function is non-deterministic when multiple rows share the maximum
ordering value. Results may differ from Spark in that case.</p></li>
+</ul>
+<p>The following cases are not supported by Comet and always fall back to
Spark, regardless of any <code class="docutils literal notranslate"><span
class="pre">allowIncompatible</span></code> setting:</p>
+<ul class="simple">
+<li><p>The value and ordering must both be fixed-length types (boolean,
integral, floating-point, decimal, date, or timestamp). A variable-length or
nested type such as string, binary, or struct falls back to Spark.</p></li>
+</ul>
+</section>
+<section id="minby">
+<h2>MinBy<a class="headerlink" href="#minby" title="Link to this
heading">#</a></h2>
+<p>The following differences from Spark are always present and do not require
any additional configuration:</p>
+<ul class="simple">
+<li><p>This function is non-deterministic when multiple rows share the minimum
ordering value. Results may differ from Spark in that case.</p></li>
+</ul>
+<p>The following cases are not supported by Comet and always fall back to
Spark, regardless of any <code class="docutils literal notranslate"><span
class="pre">allowIncompatible</span></code> setting:</p>
+<ul class="simple">
+<li><p>The value and ordering must both be fixed-length types (boolean,
integral, floating-point, decimal, date, or timestamp). A variable-length or
nested type such as string, binary, or struct falls back to Spark.</p></li>
+</ul>
+</section>
<section id="mode">
<h2>Mode<a class="headerlink" href="#mode" title="Link to this
heading">#</a></h2>
<p>The following incompatibilities cause <code class="docutils literal
notranslate"><span class="pre">Mode</span></code> to fall back to Spark by
default. Set <code class="docutils literal notranslate"><span
class="pre">spark.comet.expression.Mode.allowIncompatible=true</span></code> to
enable Comet acceleration despite these differences.</p>
@@ -903,6 +925,8 @@ under the License.
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#first">First</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#hyperloglogplusplus">HyperLogLogPlusPlus</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#last">Last</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#maxby">MaxBy</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#minby">MinBy</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#mode">Mode</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#percentile">Percentile</a></li>
</ul>
diff --git
a/user-guide/latest/compatibility/expressions/spark-4.1/aggregate.html
b/user-guide/latest/compatibility/expressions/spark-4.1/aggregate.html
index f23f5481e9..065da3c225 100644
--- a/user-guide/latest/compatibility/expressions/spark-4.1/aggregate.html
+++ b/user-guide/latest/compatibility/expressions/spark-4.1/aggregate.html
@@ -829,6 +829,28 @@ under the License.
<li><p>This function is not deterministic. Results may not match
Spark.</p></li>
</ul>
</section>
+<section id="maxby">
+<h2>MaxBy<a class="headerlink" href="#maxby" title="Link to this
heading">#</a></h2>
+<p>The following differences from Spark are always present and do not require
any additional configuration:</p>
+<ul class="simple">
+<li><p>This function is non-deterministic when multiple rows share the maximum
ordering value. Results may differ from Spark in that case.</p></li>
+</ul>
+<p>The following cases are not supported by Comet and always fall back to
Spark, regardless of any <code class="docutils literal notranslate"><span
class="pre">allowIncompatible</span></code> setting:</p>
+<ul class="simple">
+<li><p>The value and ordering must both be fixed-length types (boolean,
integral, floating-point, decimal, date, or timestamp). A variable-length or
nested type such as string, binary, or struct falls back to Spark.</p></li>
+</ul>
+</section>
+<section id="minby">
+<h2>MinBy<a class="headerlink" href="#minby" title="Link to this
heading">#</a></h2>
+<p>The following differences from Spark are always present and do not require
any additional configuration:</p>
+<ul class="simple">
+<li><p>This function is non-deterministic when multiple rows share the minimum
ordering value. Results may differ from Spark in that case.</p></li>
+</ul>
+<p>The following cases are not supported by Comet and always fall back to
Spark, regardless of any <code class="docutils literal notranslate"><span
class="pre">allowIncompatible</span></code> setting:</p>
+<ul class="simple">
+<li><p>The value and ordering must both be fixed-length types (boolean,
integral, floating-point, decimal, date, or timestamp). A variable-length or
nested type such as string, binary, or struct falls back to Spark.</p></li>
+</ul>
+</section>
<section id="mode">
<h2>Mode<a class="headerlink" href="#mode" title="Link to this
heading">#</a></h2>
<p>The following incompatibilities cause <code class="docutils literal
notranslate"><span class="pre">Mode</span></code> to fall back to Spark by
default. Set <code class="docutils literal notranslate"><span
class="pre">spark.comet.expression.Mode.allowIncompatible=true</span></code> to
enable Comet acceleration despite these differences.</p>
@@ -903,6 +925,8 @@ under the License.
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#first">First</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#hyperloglogplusplus">HyperLogLogPlusPlus</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#last">Last</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#maxby">MaxBy</a></li>
+<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#minby">MinBy</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#mode">Mode</a></li>
<li class="toc-h2 nav-item toc-entry"><a class="reference internal nav-link"
href="#percentile">Percentile</a></li>
</ul>
diff --git a/user-guide/latest/configs.html b/user-guide/latest/configs.html
index 18afbf3e57..66ce6e6bcf 100644
--- a/user-guide/latest/configs.html
+++ b/user-guide/latest/configs.html
@@ -2509,10 +2509,18 @@ shuffle, including applications that rely only on
remote reliable storage or dec
<td><p>Enable Comet acceleration for <code class="docutils literal
notranslate"><span class="pre">Max</span></code></p></td>
<td><p>true</p></td>
</tr>
-<tr class="row-even"><td><p><code class="docutils literal notranslate"><span
class="pre">spark.comet.expression.Min.enabled</span></code></p></td>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span
class="pre">spark.comet.expression.MaxBy.enabled</span></code></p></td>
+<td><p>Enable Comet acceleration for <code class="docutils literal
notranslate"><span class="pre">MaxBy</span></code></p></td>
+<td><p>true</p></td>
+</tr>
+<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span
class="pre">spark.comet.expression.Min.enabled</span></code></p></td>
<td><p>Enable Comet acceleration for <code class="docutils literal
notranslate"><span class="pre">Min</span></code></p></td>
<td><p>true</p></td>
</tr>
+<tr class="row-even"><td><p><code class="docutils literal notranslate"><span
class="pre">spark.comet.expression.MinBy.enabled</span></code></p></td>
+<td><p>Enable Comet acceleration for <code class="docutils literal
notranslate"><span class="pre">MinBy</span></code></p></td>
+<td><p>true</p></td>
+</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span
class="pre">spark.comet.expression.Mode.enabled</span></code></p></td>
<td><p>Enable Comet acceleration for <code class="docutils literal
notranslate"><span class="pre">Mode</span></code></p></td>
<td><p>true</p></td>
diff --git a/user-guide/latest/expressions.html
b/user-guide/latest/expressions.html
index 5bf98b41c0..e18549b1b1 100644
--- a/user-guide/latest/expressions.html
+++ b/user-guide/latest/expressions.html
@@ -1006,9 +1006,9 @@ expressions. The following function families are
<strong>not currently planned</
<td><p></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span
class="pre">max_by</span></code></p></td>
-<td><p>π</p></td>
-<td><p>β</p></td>
-<td><p><a class="reference external"
href="https://github.com/apache/datafusion-comet/issues/3841">#3841</a></p></td>
+<td><p>β
</p></td>
+<td><p>Native</p></td>
+<td><p>Value and ordering must be fixed-length types</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span
class="pre">mean</span></code></p></td>
<td><p>β
</p></td>
@@ -1026,9 +1026,9 @@ expressions. The following function families are
<strong>not currently planned</
<td><p></p></td>
</tr>
<tr class="row-even"><td><p><code class="docutils literal notranslate"><span
class="pre">min_by</span></code></p></td>
-<td><p>π</p></td>
-<td><p>β</p></td>
-<td><p><a class="reference external"
href="https://github.com/apache/datafusion-comet/issues/3841">#3841</a></p></td>
+<td><p>β
</p></td>
+<td><p>Native</p></td>
+<td><p>Value and ordering must be fixed-length types</p></td>
</tr>
<tr class="row-odd"><td><p><code class="docutils literal notranslate"><span
class="pre">mode</span></code></p></td>
<td><p>β
</p></td>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]