diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/TableOperations.json b/Integrations/python/deephaven/doc/io/deephaven/api/TableOperations.json index 471a4111d5a..f1c634d3f1b 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/api/TableOperations.json +++ b/Integrations/python/deephaven/doc/io/deephaven/api/TableOperations.json @@ -1,6 +1,7 @@ { "className": "io.deephaven.api.TableOperations", "methods": { + "aggAllBy": "*Overload 1* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :return: TableOperations.TOPS\n \n*Overload 2* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: java.lang.String...\n :return: TableOperations.TOPS\n \n*Overload 3* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: io.deephaven.api.Selectable...\n :return: TableOperations.TOPS\n \n*Overload 4* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: java.util.Collection\n :return: TableOperations.TOPS", "aggBy": "*Overload 1* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :return: TableOperations.TOPS\n \n*Overload 2* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :param groupByColumns: java.lang.String...\n :return: TableOperations.TOPS\n \n*Overload 3* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :param groupByColumns: java.util.Collection\n :return: TableOperations.TOPS\n \n*Overload 4* \n :param aggregations: java.util.Collection\n :return: TableOperations.TOPS\n \n*Overload 5* \n :param aggregations: java.util.Collection\n :param groupByColumns: java.lang.String...\n :return: TableOperations.TOPS\n \n*Overload 6* \n :param aggregations: java.util.Collection\n :param groupByColumns: java.util.Collection\n :return: TableOperations.TOPS", "aj": "**Incompatible overloads text - text from the first overload:**\n\nPerform an as-of join with the rightTable.\n\n \n Delegates to aj(Object, Collection, Collection, AsOfJoinRule).\n\n*Overload 1* \n :param rightTable: (TableOperations.TABLE) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\").\n :return: (TableOperations.TOPS) a new table joined according to the specification in columnsToMatch\n \n*Overload 2* \n :param rightTable: (TableOperations.TABLE) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\").\n :param columnsToAdd: (java.lang.String) - A comma separated list with the columns from the left side that need to be added to the right\n side as a result of the match.\n :return: (TableOperations.TOPS) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 3* \n :param rightTable: (TableOperations.TABLE) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :return: (TableOperations.TOPS) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 4* \n :param rightTable: (TableOperations.TABLE) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :param asOfJoinRule: (io.deephaven.api.AsOfJoinRule) - The binary search operator for the last match pair.\n :return: (TableOperations.TOPS) a new table joined according to the specification in columnsToMatch and columnsToAdd", "exactJoin": "**Incompatible overloads text - text from the first overload:**\n\nPerform an exact-join with the rightTable.\n\n \n Delegates to exactJoin(Object, Collection, Collection).\n\n*Overload 1* \n :param rightTable: (TableOperations.TABLE) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :return: (TableOperations.TOPS) the exact-joined table\n \n*Overload 2* \n :param rightTable: (TableOperations.TABLE) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :param columnsToAdd: (java.lang.String) - A comma separated list with the columns from the right side that need to be added to the left\n side as a result of the match.\n :return: (TableOperations.TOPS) the exact-joined table\n \n*Overload 3* \n :param rightTable: (TableOperations.TABLE) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :return: (TableOperations.TOPS) the exact-joined table", diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/TableOperationsAdapter.json b/Integrations/python/deephaven/doc/io/deephaven/api/TableOperationsAdapter.json index b83b4908561..465a77133f9 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/api/TableOperationsAdapter.json +++ b/Integrations/python/deephaven/doc/io/deephaven/api/TableOperationsAdapter.json @@ -1,6 +1,7 @@ { "className": "io.deephaven.api.TableOperationsAdapter", "methods": { + "aggAllBy": "*Overload 1* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :return: TableOperationsAdapter.TOPS_1\n \n*Overload 2* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: java.lang.String...\n :return: TableOperationsAdapter.TOPS_1\n \n*Overload 3* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: io.deephaven.api.Selectable...\n :return: TableOperationsAdapter.TOPS_1\n \n*Overload 4* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: java.util.Collection\n :return: TableOperationsAdapter.TOPS_1", "aggBy": "*Overload 1* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :return: TableOperationsAdapter.TOPS_1\n \n*Overload 2* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :param groupByColumns: java.lang.String...\n :return: TableOperationsAdapter.TOPS_1\n \n*Overload 3* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :param groupByColumns: java.util.Collection\n :return: TableOperationsAdapter.TOPS_1\n \n*Overload 4* \n :param aggregations: java.util.Collection\n :return: TableOperationsAdapter.TOPS_1\n \n*Overload 5* \n :param aggregations: java.util.Collection\n :param groupByColumns: java.lang.String...\n :return: TableOperationsAdapter.TOPS_1\n \n*Overload 6* \n :param aggregations: java.util.Collection\n :param groupByColumns: java.util.Collection\n :return: TableOperationsAdapter.TOPS_1", "aj": "**Incompatible overloads text - text from the first overload:**\n\nPerform an as-of join with the rightTable.\n\n \n Delegates to TableOperations.aj(Object, Collection, Collection, AsOfJoinRule).\n\n*Overload 1* \n :param rightTable: (TableOperationsAdapter.TABLE_1) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\").\n :return: (TableOperationsAdapter.TOPS_1) a new table joined according to the specification in columnsToMatch\n \n*Overload 2* \n :param rightTable: (TableOperationsAdapter.TABLE_1) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\").\n :param columnsToAdd: (java.lang.String) - A comma separated list with the columns from the left side that need to be added to the right\n side as a result of the match.\n :return: (TableOperationsAdapter.TOPS_1) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 3* \n :param rightTable: (TableOperationsAdapter.TABLE_1) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :return: (TableOperationsAdapter.TOPS_1) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 4* \n :param rightTable: (TableOperationsAdapter.TABLE_1) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :param asOfJoinRule: (io.deephaven.api.AsOfJoinRule) - The binary search operator for the last match pair.\n :return: (TableOperationsAdapter.TOPS_1) a new table joined according to the specification in columnsToMatch and columnsToAdd", "delegate": ":return: TableOperationsAdapter.TOPS_2", diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/AbsSum.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/AbsSum.json deleted file mode 100644 index cf978378f57..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/AbsSum.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "className": "io.deephaven.api.agg.AbsSum", - "methods": { - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.AbsSum\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.AbsSum", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" - }, - "path": "io.deephaven.api.agg.AbsSum", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Aggregation.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Aggregation.json index e33d466adec..70f34989eb9 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Aggregation.json +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Aggregation.json @@ -1,26 +1,27 @@ { "className": "io.deephaven.api.agg.Aggregation", "methods": { - "AggAbsSum": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.AbsSum\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggAvg": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Avg\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggCount": ":param resultColumn: java.lang.String\n:return: io.deephaven.api.agg.Count", - "AggCountDistinct": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.CountDistinct\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 3* \n :param countNulls: boolean\n :param pair: java.lang.String\n :return: io.deephaven.api.agg.CountDistinct\n \n*Overload 4* \n :param countNulls: boolean\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggDistinct": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Distinct\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 3* \n :param includeNulls: boolean\n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Distinct\n \n*Overload 4* \n :param includeNulls: boolean\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggFirst": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.First\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggGroup": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Group\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggLast": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Last\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggMax": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Max\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggMed": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Med\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 3* \n :param average: boolean\n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Med\n \n*Overload 4* \n :param average: boolean\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggMin": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Min\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggPct": "*Overload 1* \n :param percentile: double\n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Pct\n \n*Overload 2* \n :param percentile: double\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 3* \n :param percentile: double\n :param average: boolean\n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Pct\n \n*Overload 4* \n :param percentile: double\n :param average: boolean\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggSortedFirst": "*Overload 1* \n :param sortedColumn: java.lang.String\n :param pair: java.lang.String\n :return: io.deephaven.api.agg.SortedFirst\n \n*Overload 2* \n :param sortedColumn: java.lang.String\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 3* \n :param sortedColumns: java.util.Collection\n :param pair: java.lang.String\n :return: io.deephaven.api.agg.SortedFirst\n \n*Overload 4* \n :param sortedColumns: java.util.Collection\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggSortedLast": "*Overload 1* \n :param sortedColumn: java.lang.String\n :param pair: java.lang.String\n :return: io.deephaven.api.agg.SortedLast\n \n*Overload 2* \n :param sortedColumn: java.lang.String\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 3* \n :param sortedColumns: java.util.Collection\n :param pair: java.lang.String\n :return: io.deephaven.api.agg.SortedLast\n \n*Overload 4* \n :param sortedColumns: java.util.Collection\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggStd": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Std\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggSum": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Sum\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggUnique": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Unique\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 3* \n :param includeNulls: boolean\n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Unique\n \n*Overload 4* \n :param includeNulls: boolean\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggVar": "*Overload 1* \n :param pair: java.lang.String\n :return: io.deephaven.api.agg.Var\n \n*Overload 2* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggWAvg": "*Overload 1* \n :param weightColumn: java.lang.String\n :param pair: java.lang.String\n :return: io.deephaven.api.agg.WAvg\n \n*Overload 2* \n :param weightColumn: java.lang.String\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "AggWSum": "*Overload 1* \n :param weightColumn: java.lang.String\n :param pair: java.lang.String\n :return: io.deephaven.api.agg.WSum\n \n*Overload 2* \n :param weightColumn: java.lang.String\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", + "AggAbsSum": ":param pairs: java.lang.String...\n:return: io.deephaven.api.agg.Aggregation", + "AggAvg": ":param pairs: java.lang.String...\n:return: io.deephaven.api.agg.Aggregation", + "AggCount": ":param resultColumn: java.lang.String\n:return: io.deephaven.api.agg.Aggregation", + "AggCountDistinct": "*Overload 1* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 2* \n :param countNulls: boolean\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", + "AggDistinct": "*Overload 1* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 2* \n :param includeNulls: boolean\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", + "AggFirst": ":param pairs: java.lang.String...\n:return: io.deephaven.api.agg.Aggregation", + "AggGroup": ":param pairs: java.lang.String...\n:return: io.deephaven.api.agg.Aggregation", + "AggLast": ":param pairs: java.lang.String...\n:return: io.deephaven.api.agg.Aggregation", + "AggMax": ":param pairs: java.lang.String...\n:return: io.deephaven.api.agg.Aggregation", + "AggMed": "*Overload 1* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 2* \n :param average: boolean\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", + "AggMin": ":param pairs: java.lang.String...\n:return: io.deephaven.api.agg.Aggregation", + "AggPct": "*Overload 1* \n :param percentile: double\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 2* \n :param percentile: double\n :param average: boolean\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", + "AggSortedFirst": "*Overload 1* \n :param sortedColumn: java.lang.String\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 2* \n :param sortedColumns: java.util.Collection\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", + "AggSortedLast": "*Overload 1* \n :param sortedColumn: java.lang.String\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 2* \n :param sortedColumns: java.util.Collection\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", + "AggStd": ":param pairs: java.lang.String...\n:return: io.deephaven.api.agg.Aggregation", + "AggSum": ":param pairs: java.lang.String...\n:return: io.deephaven.api.agg.Aggregation", + "AggUnique": "*Overload 1* \n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 2* \n :param includeNulls: boolean\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", + "AggVar": ":param pairs: java.lang.String...\n:return: io.deephaven.api.agg.Aggregation", + "AggWAvg": ":param weightColumn: java.lang.String\n:param pairs: java.lang.String...\n:return: io.deephaven.api.agg.Aggregation", + "AggWSum": ":param weightColumn: java.lang.String\n:param pairs: java.lang.String...\n:return: io.deephaven.api.agg.Aggregation", + "of": "*Overload 1* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param pair: java.lang.String\n :return: io.deephaven.api.agg.NormalAggregation\n \n*Overload 2* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param pairs: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" }, "path": "io.deephaven.api.agg.Aggregation", diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Aggregation/Visitor.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Aggregation/Visitor.json index b5d849a7787..a3dcf182e58 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Aggregation/Visitor.json +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Aggregation/Visitor.json @@ -1,7 +1,7 @@ { "className": "io.deephaven.api.agg.Aggregation$Visitor", "methods": { - "visit": "*Overload 1* \n :param absSum: io.deephaven.api.agg.AbsSum\n \n*Overload 2* \n :param group: io.deephaven.api.agg.Group\n \n*Overload 3* \n :param avg: io.deephaven.api.agg.Avg\n \n*Overload 4* \n :param count: io.deephaven.api.agg.Count\n \n*Overload 5* \n :param countDistinct: io.deephaven.api.agg.CountDistinct\n \n*Overload 6* \n :param distinct: io.deephaven.api.agg.Distinct\n \n*Overload 7* \n :param first: io.deephaven.api.agg.First\n \n*Overload 8* \n :param last: io.deephaven.api.agg.Last\n \n*Overload 9* \n :param max: io.deephaven.api.agg.Max\n \n*Overload 10* \n :param med: io.deephaven.api.agg.Med\n \n*Overload 11* \n :param min: io.deephaven.api.agg.Min\n \n*Overload 12* \n :param multi: io.deephaven.api.agg.Multi\n \n*Overload 13* \n :param pct: io.deephaven.api.agg.Pct\n \n*Overload 14* \n :param sortedFirst: io.deephaven.api.agg.SortedFirst\n \n*Overload 15* \n :param sortedLast: io.deephaven.api.agg.SortedLast\n \n*Overload 16* \n :param std: io.deephaven.api.agg.Std\n \n*Overload 17* \n :param sum: io.deephaven.api.agg.Sum\n \n*Overload 18* \n :param unique: io.deephaven.api.agg.Unique\n \n*Overload 19* \n :param var: io.deephaven.api.agg.Var\n \n*Overload 20* \n :param wAvg: io.deephaven.api.agg.WAvg\n \n*Overload 21* \n :param wSum: io.deephaven.api.agg.WSum" + "visit": "*Overload 1* \n :param count: io.deephaven.api.agg.Count\n \n*Overload 2* \n :param normalAgg: io.deephaven.api.agg.NormalAggregation\n \n*Overload 3* \n :param normalAggs: io.deephaven.api.agg.NormalAggregations" }, "path": "io.deephaven.api.agg.Aggregation.Visitor", "typeName": "interface" diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/AggregationFinisher.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/AggregationFinisher.json deleted file mode 100644 index b028e745ba6..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/AggregationFinisher.json +++ /dev/null @@ -1,28 +0,0 @@ -{ - "className": "io.deephaven.api.agg.AggregationFinisher", - "methods": { - "absSum": ":return: io.deephaven.api.agg.AggregationFinisher", - "avg": ":return: io.deephaven.api.agg.AggregationFinisher", - "countDistinct": "*Overload 1* \n :return: io.deephaven.api.agg.AggregationFinisher\n \n*Overload 2* \n :param countNulls: boolean\n :return: io.deephaven.api.agg.AggregationFinisher", - "distinct": "*Overload 1* \n :return: io.deephaven.api.agg.AggregationFinisher\n \n*Overload 2* \n :param includeNulls: boolean\n :return: io.deephaven.api.agg.AggregationFinisher", - "first": ":return: io.deephaven.api.agg.AggregationFinisher", - "function": ":return: java.util.function.Function", - "group": ":return: io.deephaven.api.agg.AggregationFinisher", - "last": ":return: io.deephaven.api.agg.AggregationFinisher", - "max": ":return: io.deephaven.api.agg.AggregationFinisher", - "med": "*Overload 1* \n :return: io.deephaven.api.agg.AggregationFinisher\n \n*Overload 2* \n :param average: boolean\n :return: io.deephaven.api.agg.AggregationFinisher", - "min": ":return: io.deephaven.api.agg.AggregationFinisher", - "multiOf": ":param arguments: java.lang.String...\n:return: io.deephaven.api.agg.Multi", - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: AggregationFinisher.AGG\n \n*Overload 2* \n :param pairs: io.deephaven.api.agg.Pair...\n :return: io.deephaven.api.agg.Multi\n \n*Overload 3* \n :param arg: java.lang.String\n :return: AggregationFinisher.AGG\n \n*Overload 4* \n :param arguments: java.lang.String...\n :return: io.deephaven.api.agg.Aggregation", - "pct": "*Overload 1* \n :param percentile: double\n :return: io.deephaven.api.agg.AggregationFinisher\n \n*Overload 2* \n :param percentile: double\n :param average: boolean\n :return: io.deephaven.api.agg.AggregationFinisher", - "std": ":return: io.deephaven.api.agg.AggregationFinisher", - "sum": ":return: io.deephaven.api.agg.AggregationFinisher", - "unique": "*Overload 1* \n :return: io.deephaven.api.agg.AggregationFinisher\n \n*Overload 2* \n :param includeNulls: boolean\n :return: io.deephaven.api.agg.AggregationFinisher", - "var": ":return: io.deephaven.api.agg.AggregationFinisher", - "wAvg": ":param weightColumn: io.deephaven.api.ColumnName\n:return: io.deephaven.api.agg.AggregationFinisher", - "wSum": ":param weightColumn: io.deephaven.api.ColumnName\n:return: io.deephaven.api.agg.AggregationFinisher" - }, - "path": "io.deephaven.api.agg.AggregationFinisher", - "text": "The aggregation finisher is a helper to aid in building aggregations whose construction can be finished by a\n Pair. A vararg overload is provided to build a Multi, of(Pair...), which can be useful to\n reduce the syntax required to build multiple aggregations of the same basic type. Helpers are provided that translate\n the string-equivalents via Pair.parse(String).\n\n \n Not all aggregations may be suitable for construction in this style.", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/AggregationOptimizer.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/AggregationOptimizer.json new file mode 100644 index 00000000000..1025d323f96 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/AggregationOptimizer.json @@ -0,0 +1,11 @@ +{ + "className": "io.deephaven.api.agg.AggregationOptimizer", + "methods": { + "build": ":return: java.util.List", + "of": "Optimizes a collection of aggregations by grouping like-specced aggregations together. The\n input order will be preserved based on the spec-encountered order.\n\n:param aggregations: (java.util.Collection) - the aggregations\n:return: (java.util.List) the optimized aggregations", + "visit": "*Overload 1* \n :param count: io.deephaven.api.agg.Count\n \n*Overload 2* \n :param normalAgg: io.deephaven.api.agg.NormalAggregation\n \n*Overload 3* \n :param normalAggs: io.deephaven.api.agg.NormalAggregations" + }, + "path": "io.deephaven.api.agg.AggregationOptimizer", + "text": "Optimizes a collection of aggregations by grouping like-speccedd aggregations together.", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/AggregationOutputs.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/AggregationOutputs.json index 1b8b7e20d72..181e5d190da 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/AggregationOutputs.json +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/AggregationOutputs.json @@ -2,7 +2,7 @@ "className": "io.deephaven.api.agg.AggregationOutputs", "methods": { "of": "*Overload 1* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :return: java.util.stream.Stream\n \n*Overload 2* \n :param aggregations: java.util.Collection\n :return: java.util.stream.Stream", - "visit": "*Overload 1* \n :param absSum: io.deephaven.api.agg.AbsSum\n \n*Overload 2* \n :param group: io.deephaven.api.agg.Group\n \n*Overload 3* \n :param avg: io.deephaven.api.agg.Avg\n \n*Overload 4* \n :param count: io.deephaven.api.agg.Count\n \n*Overload 5* \n :param countDistinct: io.deephaven.api.agg.CountDistinct\n \n*Overload 6* \n :param distinct: io.deephaven.api.agg.Distinct\n \n*Overload 7* \n :param first: io.deephaven.api.agg.First\n \n*Overload 8* \n :param last: io.deephaven.api.agg.Last\n \n*Overload 9* \n :param max: io.deephaven.api.agg.Max\n \n*Overload 10* \n :param med: io.deephaven.api.agg.Med\n \n*Overload 11* \n :param min: io.deephaven.api.agg.Min\n \n*Overload 12* \n :param multi: io.deephaven.api.agg.Multi\n \n*Overload 13* \n :param pct: io.deephaven.api.agg.Pct\n \n*Overload 14* \n :param sortedFirst: io.deephaven.api.agg.SortedFirst\n \n*Overload 15* \n :param sortedLast: io.deephaven.api.agg.SortedLast\n \n*Overload 16* \n :param std: io.deephaven.api.agg.Std\n \n*Overload 17* \n :param sum: io.deephaven.api.agg.Sum\n \n*Overload 18* \n :param unique: io.deephaven.api.agg.Unique\n \n*Overload 19* \n :param var: io.deephaven.api.agg.Var\n \n*Overload 20* \n :param wAvg: io.deephaven.api.agg.WAvg\n \n*Overload 21* \n :param wSum: io.deephaven.api.agg.WSum" + "visit": "*Overload 1* \n :param count: io.deephaven.api.agg.Count\n \n*Overload 2* \n :param normalAgg: io.deephaven.api.agg.NormalAggregation\n \n*Overload 3* \n :param normalAggs: io.deephaven.api.agg.NormalAggregations" }, "path": "io.deephaven.api.agg.AggregationOutputs", "text": "A visitor to get the ordered output column names for aggregations.", diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Avg.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Avg.json deleted file mode 100644 index 5f4fb8cc9b9..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Avg.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Avg", - "methods": { - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.Avg\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.Avg", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" - }, - "path": "io.deephaven.api.agg.Avg", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/CountDistinct.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/CountDistinct.json deleted file mode 100644 index e4e85de139e..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/CountDistinct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "className": "io.deephaven.api.agg.CountDistinct", - "methods": { - "countNulls": ":return: boolean", - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.CountDistinct\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.CountDistinct", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V", - "withNulls": ":return: io.deephaven.api.agg.CountDistinct" - }, - "path": "io.deephaven.api.agg.CountDistinct", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Distinct.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Distinct.json deleted file mode 100644 index 9bdf8e4550e..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Distinct.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Distinct", - "methods": { - "includeNulls": ":return: boolean", - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.Distinct\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.Distinct", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V", - "withNulls": ":return: io.deephaven.api.agg.Distinct" - }, - "path": "io.deephaven.api.agg.Distinct", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/First.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/First.json deleted file mode 100644 index f7862f2eba3..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/First.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "className": "io.deephaven.api.agg.First", - "methods": { - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.First\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.First", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" - }, - "path": "io.deephaven.api.agg.First", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Group.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Group.json deleted file mode 100644 index c328c6e92e0..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Group.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Group", - "methods": { - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.Group\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.Group", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" - }, - "path": "io.deephaven.api.agg.Group", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Last.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Last.json deleted file mode 100644 index 4d782f64d94..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Last.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Last", - "methods": { - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.Last\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.Last", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" - }, - "path": "io.deephaven.api.agg.Last", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Max.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Max.json deleted file mode 100644 index 9c10232f11f..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Max.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Max", - "methods": { - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.Max\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.Max", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" - }, - "path": "io.deephaven.api.agg.Max", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Med.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Med.json deleted file mode 100644 index 284d8653151..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Med.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Med", - "methods": { - "averageMedian": ":return: boolean", - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.Med\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.Med", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V", - "withoutAverage": ":return: io.deephaven.api.agg.Med" - }, - "path": "io.deephaven.api.agg.Med", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Min.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Min.json deleted file mode 100644 index 0dd47892cd3..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Min.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Min", - "methods": { - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.Min\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.Min", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" - }, - "path": "io.deephaven.api.agg.Min", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Multi.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Multi.json deleted file mode 100644 index 837b27774e5..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Multi.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Multi", - "methods": { - "aggregations": ":return: java.util.List", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" - }, - "path": "io.deephaven.api.agg.Multi", - "text": "An aggregation that is a list of other aggregations. Useful as a helper when returning an aggregation constructed via\n a varargs parameter.", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Multi/Builder.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Multi/Builder.json deleted file mode 100644 index f894dd0f569..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Multi/Builder.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Multi$Builder", - "methods": { - "addAggregations": "*Overload 1* \n :param element: Multi.Builder.AGG\n :return: io.deephaven.api.agg.Multi.Builder\n \n*Overload 2* \n :param elements: Multi.Builder.AGG...\n :return: io.deephaven.api.agg.Multi.Builder", - "addAllAggregations": ":param elements: java.lang.Iterable\n:return: io.deephaven.api.agg.Multi.Builder", - "build": ":return: io.deephaven.api.agg.Multi" - }, - "path": "io.deephaven.api.agg.Multi.Builder", - "typeName": "interface" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/NormalAggregation.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/NormalAggregation.json new file mode 100644 index 00000000000..d9f486798e9 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/NormalAggregation.json @@ -0,0 +1,12 @@ +{ + "className": "io.deephaven.api.agg.NormalAggregation", + "methods": { + "of": ":param spec: io.deephaven.api.agg.spec.AggSpec\n:param pair: io.deephaven.api.agg.Pair\n:return: io.deephaven.api.agg.NormalAggregation", + "pair": ":return: io.deephaven.api.agg.Pair", + "spec": ":return: io.deephaven.api.agg.spec.AggSpec", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.NormalAggregation", + "text": "A normal aggregation is an Aggregation that is composed of a spec and a pair.", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/NormalAggregations.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/NormalAggregations.json new file mode 100644 index 00000000000..f708ae9a29e --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/NormalAggregations.json @@ -0,0 +1,12 @@ +{ + "className": "io.deephaven.api.agg.NormalAggregations", + "methods": { + "builder": ":return: io.deephaven.api.agg.NormalAggregations.Builder", + "pairs": ":return: java.util.List", + "spec": ":return: io.deephaven.api.agg.spec.AggSpec", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.NormalAggregations", + "text": "Normal aggregations is an Aggregation that is composed of a spec and multiple pairs.", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/NormalAggregations/Builder.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/NormalAggregations/Builder.json new file mode 100644 index 00000000000..07cba69fcc3 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/NormalAggregations/Builder.json @@ -0,0 +1,11 @@ +{ + "className": "io.deephaven.api.agg.NormalAggregations$Builder", + "methods": { + "addAllPairs": ":param elements: java.lang.Iterable\n:return: io.deephaven.api.agg.NormalAggregations.Builder", + "addPairs": "*Overload 1* \n :param element: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.NormalAggregations.Builder\n \n*Overload 2* \n :param elements: io.deephaven.api.agg.Pair...\n :return: io.deephaven.api.agg.NormalAggregations.Builder", + "build": ":return: io.deephaven.api.agg.NormalAggregations", + "spec": ":param spec: io.deephaven.api.agg.spec.AggSpec\n:return: io.deephaven.api.agg.NormalAggregations.Builder" + }, + "path": "io.deephaven.api.agg.NormalAggregations.Builder", + "typeName": "interface" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Pair.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Pair.json index 06983266b49..929e6c242dd 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Pair.json +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Pair.json @@ -7,6 +7,6 @@ "parse": ":param x: java.lang.String\n:return: io.deephaven.api.agg.Pair" }, "path": "io.deephaven.api.agg.Pair", - "text": "An aggregation pair represents a input and output column for some\n aggregations. Aggregations that don't have a one-to-one input/output mapping will not need an agg\n pair.", + "text": "A column pair represents an input and an output column.", "typeName": "interface" } \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Pct.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Pct.json deleted file mode 100644 index 3ab2997115f..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Pct.json +++ /dev/null @@ -1,13 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Pct", - "methods": { - "averageMedian": ":return: boolean", - "of": ":param percentile: double\n:param pair: io.deephaven.api.agg.Pair\n:return: io.deephaven.api.agg.Pct", - "pair": ":return: io.deephaven.api.agg.Pair", - "percentile": ":return: double", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V", - "withAverage": ":return: io.deephaven.api.agg.Pct" - }, - "path": "io.deephaven.api.agg.Pct", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/SortedFirst/Builder.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/SortedFirst/Builder.json deleted file mode 100644 index 749169621e0..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/SortedFirst/Builder.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "className": "io.deephaven.api.agg.SortedFirst$Builder", - "methods": { - "addAllColumns": ":param elements: java.lang.Iterable\n:return: io.deephaven.api.agg.SortedFirst.Builder", - "addColumns": "*Overload 1* \n :param element: io.deephaven.api.SortColumn\n :return: io.deephaven.api.agg.SortedFirst.Builder\n \n*Overload 2* \n :param elements: io.deephaven.api.SortColumn...\n :return: io.deephaven.api.agg.SortedFirst.Builder", - "build": ":return: io.deephaven.api.agg.SortedFirst", - "pair": ":param pair: io.deephaven.api.agg.Pair\n:return: io.deephaven.api.agg.SortedFirst.Builder" - }, - "path": "io.deephaven.api.agg.SortedFirst.Builder", - "typeName": "interface" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/SortedLast/Builder.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/SortedLast/Builder.json deleted file mode 100644 index e36fb55c6d5..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/SortedLast/Builder.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "className": "io.deephaven.api.agg.SortedLast$Builder", - "methods": { - "addAllColumns": ":param elements: java.lang.Iterable\n:return: io.deephaven.api.agg.SortedLast.Builder", - "addColumns": "*Overload 1* \n :param element: io.deephaven.api.SortColumn\n :return: io.deephaven.api.agg.SortedLast.Builder\n \n*Overload 2* \n :param elements: io.deephaven.api.SortColumn...\n :return: io.deephaven.api.agg.SortedLast.Builder", - "build": ":return: io.deephaven.api.agg.SortedLast", - "pair": ":param pair: io.deephaven.api.agg.Pair\n:return: io.deephaven.api.agg.SortedLast.Builder" - }, - "path": "io.deephaven.api.agg.SortedLast.Builder", - "typeName": "interface" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Std.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Std.json deleted file mode 100644 index 380b2f90106..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Std.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Std", - "methods": { - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.Std\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.Std", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" - }, - "path": "io.deephaven.api.agg.Std", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Sum.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Sum.json deleted file mode 100644 index 120c90f8463..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Sum.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Sum", - "methods": { - "abs": ":return: io.deephaven.api.agg.AbsSum", - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.Sum\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.Sum", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" - }, - "path": "io.deephaven.api.agg.Sum", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Unique.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Unique.json deleted file mode 100644 index b79c5ec2dfe..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Unique.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Unique", - "methods": { - "includeNulls": ":return: boolean", - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.Unique\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.Unique", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V", - "withNulls": ":return: io.deephaven.api.agg.Unique" - }, - "path": "io.deephaven.api.agg.Unique", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Var.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/Var.json deleted file mode 100644 index a84080f8996..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/Var.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "className": "io.deephaven.api.agg.Var", - "methods": { - "of": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.Var\n \n*Overload 2* \n :param x: java.lang.String\n :return: io.deephaven.api.agg.Var", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" - }, - "path": "io.deephaven.api.agg.Var", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/WAvg.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/WAvg.json deleted file mode 100644 index 2bfde9083de..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/WAvg.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "className": "io.deephaven.api.agg.WAvg", - "methods": { - "of": ":param weight: io.deephaven.api.ColumnName\n:param addition: io.deephaven.api.agg.Pair\n:return: io.deephaven.api.agg.WAvg", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V", - "weight": ":return: io.deephaven.api.ColumnName" - }, - "path": "io.deephaven.api.agg.WAvg", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/WSum.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/WSum.json deleted file mode 100644 index 344ac5b10b3..00000000000 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/WSum.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "className": "io.deephaven.api.agg.WSum", - "methods": { - "of": ":param weight: io.deephaven.api.ColumnName\n:param addition: io.deephaven.api.agg.Pair\n:return: io.deephaven.api.agg.WSum", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V", - "weight": ":return: io.deephaven.api.ColumnName" - }, - "path": "io.deephaven.api.agg.WSum", - "typeName": "class" -} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpec.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpec.json new file mode 100644 index 00000000000..4e07d28f6d9 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpec.json @@ -0,0 +1,29 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpec", + "methods": { + "absSum": ":return: io.deephaven.api.agg.spec.AggSpecAbsSum", + "aggregation": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.NormalAggregation\n \n*Overload 2* \n :param pairs: io.deephaven.api.agg.Pair...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 3* \n :param pairs: java.util.Collection\n :return: io.deephaven.api.agg.Aggregation", + "avg": ":return: io.deephaven.api.agg.spec.AggSpecAvg", + "countDistinct": "*Overload 1* \n :return: io.deephaven.api.agg.spec.AggSpecCountDistinct\n \n*Overload 2* \n :param countNulls: boolean\n :return: io.deephaven.api.agg.spec.AggSpecCountDistinct", + "distinct": "*Overload 1* \n :return: io.deephaven.api.agg.spec.AggSpecDistinct\n \n*Overload 2* \n :param includeNulls: boolean\n :return: io.deephaven.api.agg.spec.AggSpecDistinct", + "first": ":return: io.deephaven.api.agg.spec.AggSpecFirst", + "group": ":return: io.deephaven.api.agg.spec.AggSpecGroup", + "last": ":return: io.deephaven.api.agg.spec.AggSpecLast", + "max": ":return: io.deephaven.api.agg.spec.AggSpecMax", + "median": "*Overload 1* \n :return: io.deephaven.api.agg.spec.AggSpecMedian\n \n*Overload 2* \n :param averageMedian: boolean\n :return: io.deephaven.api.agg.spec.AggSpecMedian", + "min": ":return: io.deephaven.api.agg.spec.AggSpecMin", + "percentile": "*Overload 1* \n :param percentile: double\n :return: io.deephaven.api.agg.spec.AggSpecPercentile\n \n*Overload 2* \n :param percentile: double\n :param averageMedian: boolean\n :return: io.deephaven.api.agg.spec.AggSpecPercentile", + "sortedFirst": "*Overload 1* \n :param columns: java.lang.String...\n :return: io.deephaven.api.agg.spec.AggSpecSortedFirst\n \n*Overload 2* \n :param columns: java.util.Collection\n :return: io.deephaven.api.agg.spec.AggSpecSortedFirst", + "sortedLast": "*Overload 1* \n :param columns: java.lang.String...\n :return: io.deephaven.api.agg.spec.AggSpecSortedLast\n \n*Overload 2* \n :param columns: java.util.Collection\n :return: io.deephaven.api.agg.spec.AggSpecSortedLast", + "std": ":return: io.deephaven.api.agg.spec.AggSpecStd", + "sum": ":return: io.deephaven.api.agg.spec.AggSpecSum", + "unique": "*Overload 1* \n :return: io.deephaven.api.agg.spec.AggSpecUnique\n \n*Overload 2* \n :param includeNulls: boolean\n :return: io.deephaven.api.agg.spec.AggSpecUnique", + "var": ":return: io.deephaven.api.agg.spec.AggSpecVar", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V", + "wavg": ":param weightColumn: java.lang.String\n:return: io.deephaven.api.agg.spec.AggSpecWAvg", + "wsum": ":param weightColumn: java.lang.String\n:return: io.deephaven.api.agg.spec.AggSpecWSum" + }, + "path": "io.deephaven.api.agg.spec.AggSpec", + "text": "An aggregation specification represents the configurable options for aggregations.", + "typeName": "interface" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpec/Visitor.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpec/Visitor.json new file mode 100644 index 00000000000..3df563a9b89 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpec/Visitor.json @@ -0,0 +1,8 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpec$Visitor", + "methods": { + "visit": "*Overload 1* \n :param absSum: io.deephaven.api.agg.spec.AggSpecAbsSum\n \n*Overload 2* \n :param countDistinct: io.deephaven.api.agg.spec.AggSpecCountDistinct\n \n*Overload 3* \n :param distinct: io.deephaven.api.agg.spec.AggSpecDistinct\n \n*Overload 4* \n :param group: io.deephaven.api.agg.spec.AggSpecGroup\n \n*Overload 5* \n :param avg: io.deephaven.api.agg.spec.AggSpecAvg\n \n*Overload 6* \n :param first: io.deephaven.api.agg.spec.AggSpecFirst\n \n*Overload 7* \n :param last: io.deephaven.api.agg.spec.AggSpecLast\n \n*Overload 8* \n :param max: io.deephaven.api.agg.spec.AggSpecMax\n \n*Overload 9* \n :param median: io.deephaven.api.agg.spec.AggSpecMedian\n \n*Overload 10* \n :param min: io.deephaven.api.agg.spec.AggSpecMin\n \n*Overload 11* \n :param pct: io.deephaven.api.agg.spec.AggSpecPercentile\n \n*Overload 12* \n :param sortedFirst: io.deephaven.api.agg.spec.AggSpecSortedFirst\n \n*Overload 13* \n :param sortedLast: io.deephaven.api.agg.spec.AggSpecSortedLast\n \n*Overload 14* \n :param std: io.deephaven.api.agg.spec.AggSpecStd\n \n*Overload 15* \n :param sum: io.deephaven.api.agg.spec.AggSpecSum\n \n*Overload 16* \n :param unique: io.deephaven.api.agg.spec.AggSpecUnique\n \n*Overload 17* \n :param wAvg: io.deephaven.api.agg.spec.AggSpecWAvg\n \n*Overload 18* \n :param wSum: io.deephaven.api.agg.spec.AggSpecWSum\n \n*Overload 19* \n :param var: io.deephaven.api.agg.spec.AggSpecVar" + }, + "path": "io.deephaven.api.agg.spec.AggSpec.Visitor", + "typeName": "interface" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecAbsSum.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecAbsSum.json new file mode 100644 index 00000000000..59fce8cc6cc --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecAbsSum.json @@ -0,0 +1,9 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecAbsSum", + "methods": { + "of": ":return: io.deephaven.api.agg.spec.AggSpecAbsSum", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecAbsSum", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecAvg.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecAvg.json new file mode 100644 index 00000000000..4177a4de9dd --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecAvg.json @@ -0,0 +1,9 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecAvg", + "methods": { + "of": ":return: io.deephaven.api.agg.spec.AggSpecAvg", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecAvg", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecBase.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecBase.json new file mode 100644 index 00000000000..e11774b4bdc --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecBase.json @@ -0,0 +1,8 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecBase", + "methods": { + "aggregation": "*Overload 1* \n :param pair: io.deephaven.api.agg.Pair\n :return: io.deephaven.api.agg.NormalAggregation\n \n*Overload 2* \n :param pairs: io.deephaven.api.agg.Pair...\n :return: io.deephaven.api.agg.Aggregation\n \n*Overload 3* \n :param pairs: java.util.Collection\n :return: io.deephaven.api.agg.Aggregation" + }, + "path": "io.deephaven.api.agg.spec.AggSpecBase", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecColumnReferences.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecColumnReferences.json new file mode 100644 index 00000000000..f5f4cd44047 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecColumnReferences.json @@ -0,0 +1,10 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecColumnReferences", + "methods": { + "of": ":param spec: io.deephaven.api.agg.spec.AggSpec\n:return: java.util.Set", + "out": ":return: java.util.Set", + "visit": "*Overload 1* \n :param absSum: io.deephaven.api.agg.spec.AggSpecAbsSum\n \n*Overload 2* \n :param countDistinct: io.deephaven.api.agg.spec.AggSpecCountDistinct\n \n*Overload 3* \n :param distinct: io.deephaven.api.agg.spec.AggSpecDistinct\n \n*Overload 4* \n :param group: io.deephaven.api.agg.spec.AggSpecGroup\n \n*Overload 5* \n :param avg: io.deephaven.api.agg.spec.AggSpecAvg\n \n*Overload 6* \n :param first: io.deephaven.api.agg.spec.AggSpecFirst\n \n*Overload 7* \n :param last: io.deephaven.api.agg.spec.AggSpecLast\n \n*Overload 8* \n :param max: io.deephaven.api.agg.spec.AggSpecMax\n \n*Overload 9* \n :param median: io.deephaven.api.agg.spec.AggSpecMedian\n \n*Overload 10* \n :param min: io.deephaven.api.agg.spec.AggSpecMin\n \n*Overload 11* \n :param pct: io.deephaven.api.agg.spec.AggSpecPercentile\n \n*Overload 12* \n :param sortedFirst: io.deephaven.api.agg.spec.AggSpecSortedFirst\n \n*Overload 13* \n :param sortedLast: io.deephaven.api.agg.spec.AggSpecSortedLast\n \n*Overload 14* \n :param std: io.deephaven.api.agg.spec.AggSpecStd\n \n*Overload 15* \n :param sum: io.deephaven.api.agg.spec.AggSpecSum\n \n*Overload 16* \n :param unique: io.deephaven.api.agg.spec.AggSpecUnique\n \n*Overload 17* \n :param wAvg: io.deephaven.api.agg.spec.AggSpecWAvg\n \n*Overload 18* \n :param wSum: io.deephaven.api.agg.spec.AggSpecWSum\n \n*Overload 19* \n :param var: io.deephaven.api.agg.spec.AggSpecVar" + }, + "path": "io.deephaven.api.agg.spec.AggSpecColumnReferences", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecCountDistinct.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecCountDistinct.json new file mode 100644 index 00000000000..581f901a302 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecCountDistinct.json @@ -0,0 +1,10 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecCountDistinct", + "methods": { + "countNulls": ":return: boolean", + "of": "*Overload 1* \n :return: io.deephaven.api.agg.spec.AggSpecCountDistinct\n \n*Overload 2* \n :param countNulls: boolean\n :return: io.deephaven.api.agg.spec.AggSpecCountDistinct", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecCountDistinct", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecDistinct.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecDistinct.json new file mode 100644 index 00000000000..54d2dd64b79 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecDistinct.json @@ -0,0 +1,10 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecDistinct", + "methods": { + "includeNulls": ":return: boolean", + "of": "*Overload 1* \n :return: io.deephaven.api.agg.spec.AggSpecDistinct\n \n*Overload 2* \n :param includeNulls: boolean\n :return: io.deephaven.api.agg.spec.AggSpecDistinct", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecDistinct", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecEmptyBase.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecEmptyBase.json new file mode 100644 index 00000000000..10bebe338c3 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecEmptyBase.json @@ -0,0 +1,8 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecEmptyBase", + "methods": { + "hashCode": ":return: int" + }, + "path": "io.deephaven.api.agg.spec.AggSpecEmptyBase", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecFirst.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecFirst.json new file mode 100644 index 00000000000..71a8ad93b35 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecFirst.json @@ -0,0 +1,9 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecFirst", + "methods": { + "of": ":return: io.deephaven.api.agg.spec.AggSpecFirst", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecFirst", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecGroup.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecGroup.json new file mode 100644 index 00000000000..6c63206e9a6 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecGroup.json @@ -0,0 +1,9 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecGroup", + "methods": { + "of": ":return: io.deephaven.api.agg.spec.AggSpecGroup", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecGroup", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecLast.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecLast.json new file mode 100644 index 00000000000..c59a26992c7 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecLast.json @@ -0,0 +1,9 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecLast", + "methods": { + "of": ":return: io.deephaven.api.agg.spec.AggSpecLast", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecLast", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecMax.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecMax.json new file mode 100644 index 00000000000..26deebf4454 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecMax.json @@ -0,0 +1,9 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecMax", + "methods": { + "of": ":return: io.deephaven.api.agg.spec.AggSpecMax", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecMax", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecMedian.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecMedian.json new file mode 100644 index 00000000000..475f9d7cc91 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecMedian.json @@ -0,0 +1,10 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecMedian", + "methods": { + "averageMedian": ":return: boolean", + "of": "*Overload 1* \n :return: io.deephaven.api.agg.spec.AggSpecMedian\n \n*Overload 2* \n :param averageMedian: boolean\n :return: io.deephaven.api.agg.spec.AggSpecMedian", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecMedian", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecMin.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecMin.json new file mode 100644 index 00000000000..2d993d615fa --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecMin.json @@ -0,0 +1,9 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecMin", + "methods": { + "of": ":return: io.deephaven.api.agg.spec.AggSpecMin", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecMin", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecPercentile.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecPercentile.json new file mode 100644 index 00000000000..a3ce1c54815 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecPercentile.json @@ -0,0 +1,11 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecPercentile", + "methods": { + "averageMedian": ":return: boolean", + "of": "*Overload 1* \n :param percentile: double\n :return: io.deephaven.api.agg.spec.AggSpecPercentile\n \n*Overload 2* \n :param percentile: double\n :param averageMedian: boolean\n :return: io.deephaven.api.agg.spec.AggSpecPercentile", + "percentile": ":return: double", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecPercentile", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/SortedFirst.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSortedFirst.json similarity index 50% rename from Integrations/python/deephaven/doc/io/deephaven/api/agg/SortedFirst.json rename to Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSortedFirst.json index 039c3fd4338..7fb5e653132 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/SortedFirst.json +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSortedFirst.json @@ -1,12 +1,11 @@ { - "className": "io.deephaven.api.agg.SortedFirst", + "className": "io.deephaven.api.agg.spec.AggSpecSortedFirst", "methods": { - "builder": ":return: io.deephaven.api.agg.SortedFirst.Builder", + "builder": ":return: io.deephaven.api.agg.spec.AggSpecSortedFirst.Builder", "columns": ":return: java.util.List", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" }, - "path": "io.deephaven.api.agg.SortedFirst", + "path": "io.deephaven.api.agg.spec.AggSpecSortedFirst", "text": "Note: the sorted-first aggregation only supports SortColumn.Order.ASCENDING columns at the moment.", "typeName": "class" } \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSortedFirst/Builder.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSortedFirst/Builder.json new file mode 100644 index 00000000000..a0983562164 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSortedFirst/Builder.json @@ -0,0 +1,10 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecSortedFirst$Builder", + "methods": { + "addAllColumns": ":param elements: java.lang.Iterable\n:return: io.deephaven.api.agg.spec.AggSpecSortedFirst.Builder", + "addColumns": "*Overload 1* \n :param element: io.deephaven.api.SortColumn\n :return: io.deephaven.api.agg.spec.AggSpecSortedFirst.Builder\n \n*Overload 2* \n :param elements: io.deephaven.api.SortColumn...\n :return: io.deephaven.api.agg.spec.AggSpecSortedFirst.Builder", + "build": ":return: io.deephaven.api.agg.spec.AggSpecSortedFirst" + }, + "path": "io.deephaven.api.agg.spec.AggSpecSortedFirst.Builder", + "typeName": "interface" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/SortedLast.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSortedLast.json similarity index 50% rename from Integrations/python/deephaven/doc/io/deephaven/api/agg/SortedLast.json rename to Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSortedLast.json index 497bba94acf..31b014d47cd 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/api/agg/SortedLast.json +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSortedLast.json @@ -1,12 +1,11 @@ { - "className": "io.deephaven.api.agg.SortedLast", + "className": "io.deephaven.api.agg.spec.AggSpecSortedLast", "methods": { - "builder": ":return: io.deephaven.api.agg.SortedLast.Builder", + "builder": ":return: io.deephaven.api.agg.spec.AggSpecSortedLast.Builder", "columns": ":return: java.util.List", - "pair": ":return: io.deephaven.api.agg.Pair", - "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" }, - "path": "io.deephaven.api.agg.SortedLast", + "path": "io.deephaven.api.agg.spec.AggSpecSortedLast", "text": "Note: the sorted-last aggregation only supports SortColumn.Order.ASCENDING columns at the moment.", "typeName": "class" } \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSortedLast/Builder.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSortedLast/Builder.json new file mode 100644 index 00000000000..7054b8a1845 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSortedLast/Builder.json @@ -0,0 +1,10 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecSortedLast$Builder", + "methods": { + "addAllColumns": ":param elements: java.lang.Iterable\n:return: io.deephaven.api.agg.spec.AggSpecSortedLast.Builder", + "addColumns": "*Overload 1* \n :param element: io.deephaven.api.SortColumn\n :return: io.deephaven.api.agg.spec.AggSpecSortedLast.Builder\n \n*Overload 2* \n :param elements: io.deephaven.api.SortColumn...\n :return: io.deephaven.api.agg.spec.AggSpecSortedLast.Builder", + "build": ":return: io.deephaven.api.agg.spec.AggSpecSortedLast" + }, + "path": "io.deephaven.api.agg.spec.AggSpecSortedLast.Builder", + "typeName": "interface" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecStd.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecStd.json new file mode 100644 index 00000000000..59792474a5d --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecStd.json @@ -0,0 +1,9 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecStd", + "methods": { + "of": ":return: io.deephaven.api.agg.spec.AggSpecStd", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecStd", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSum.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSum.json new file mode 100644 index 00000000000..a1cb4e4181f --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecSum.json @@ -0,0 +1,9 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecSum", + "methods": { + "of": ":return: io.deephaven.api.agg.spec.AggSpecSum", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecSum", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecUnique.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecUnique.json new file mode 100644 index 00000000000..4f027820885 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecUnique.json @@ -0,0 +1,10 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecUnique", + "methods": { + "includeNulls": ":return: boolean", + "of": "*Overload 1* \n :return: io.deephaven.api.agg.spec.AggSpecUnique\n \n*Overload 2* \n :param includeNulls: boolean\n :return: io.deephaven.api.agg.spec.AggSpecUnique", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecUnique", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecVar.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecVar.json new file mode 100644 index 00000000000..5fcaf14c96e --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecVar.json @@ -0,0 +1,9 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecVar", + "methods": { + "of": ":return: io.deephaven.api.agg.spec.AggSpecVar", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.api.agg.spec.AggSpecVar", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecWAvg.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecWAvg.json new file mode 100644 index 00000000000..4c99533a8c7 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecWAvg.json @@ -0,0 +1,10 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecWAvg", + "methods": { + "of": ":param weight: io.deephaven.api.ColumnName\n:return: io.deephaven.api.agg.spec.AggSpecWAvg", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V", + "weight": ":return: io.deephaven.api.ColumnName" + }, + "path": "io.deephaven.api.agg.spec.AggSpecWAvg", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecWSum.json b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecWSum.json new file mode 100644 index 00000000000..29619fb67e5 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/api/agg/spec/AggSpecWSum.json @@ -0,0 +1,10 @@ +{ + "className": "io.deephaven.api.agg.spec.AggSpecWSum", + "methods": { + "of": ":param weight: io.deephaven.api.ColumnName\n:return: io.deephaven.api.agg.spec.AggSpecWSum", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V", + "weight": ":return: io.deephaven.api.ColumnName" + }, + "path": "io.deephaven.api.agg.spec.AggSpecWSum", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/engine/table/Table.json b/Integrations/python/deephaven/doc/io/deephaven/engine/table/Table.json index fe7562f028d..53220ced2d3 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/engine/table/Table.json +++ b/Integrations/python/deephaven/doc/io/deephaven/engine/table/Table.json @@ -2,6 +2,7 @@ "className": "io.deephaven.engine.table.Table", "methods": { "absSumBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the sum of the absolute values for\n the rest of the fields\n\n*Overload 1* \n :param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :return: io.deephaven.engine.table.Table", + "aggAllBy": "*Overload 1* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: io.deephaven.api.Selectable...\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: java.util.Collection\n :return: io.deephaven.engine.table.Table", "aggBy": "*Overload 1* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :param groupByColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :param groupByColumns: java.util.Collection\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :param aggregations: java.util.Collection\n :param groupByColumns: java.util.Collection\n :return: io.deephaven.engine.table.Table\n \n*Overload 5* \n :param aggregations: java.util.Collection\n :param groupByColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 6* \n :param aggregations: java.util.Collection\n :return: io.deephaven.engine.table.Table", "aj": "**Incompatible overloads text - text from the first overload:**\n\nLooks up the columns in the rightTable that meet the match conditions in the columnsToMatch list. Matching is\n done exactly for the first n-1 columns and via a binary search for the last match pair. The columns of the\n original table are returned intact, together with all the columns from rightTable.\n\n*Overload 1* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (io.deephaven.engine.table.MatchPair[]) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :param columnsToAdd: (io.deephaven.engine.table.MatchPair[]) - A comma separated list with the columns from the left side that need to be added to the right\n side as a result of the match.\n :param asOfMatchRule: io.deephaven.engine.table.Table.AsOfMatchRule\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 2* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (io.deephaven.engine.table.MatchPair[]) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :param columnsToAdd: (io.deephaven.engine.table.MatchPair[]) - A comma separated list with the columns from the left side that need to be added to the right\n side as a result of the match.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 3* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 4* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :param asOfJoinRule: (io.deephaven.api.AsOfJoinRule) - The binary search operator for the last match pair.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 5* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 6* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\").\n :param columnsToAdd: (java.lang.String) - A comma separated list with the columns from the left side that need to be added to the right\n side as a result of the match.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 7* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\").\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch", "apply": "Applies a function to this table.\n \n This is useful if you have a reference to a table or a proxy and want to run a series of operations against the\n table without each individual operation resulting in an RMI.\n\nNote: Java generics information - \n\n:param function: (java.util.function.Function) - the function to run, its single argument will be this table\n:return: (R) the return value of function", diff --git a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/BaseTable.json b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/BaseTable.json index 7fc3d8ddd83..18a9d32f580 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/BaseTable.json +++ b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/BaseTable.json @@ -2,6 +2,7 @@ "className": "io.deephaven.engine.table.impl.BaseTable", "methods": { "addParentReference": "Called on a dependent node to ensure that a strong reference is maintained to any parent object that is required\n for the proper maintenance and functioning of the dependent.\n\n In the most common case, the parent object is a child listener to a parent node. The parent node only keeps a\n weak reference to its child listener, but the listener maintains a strong reference to the parent node. In this\n scenario, the only strong reference to the listener (and thus indirectly to the parent node itself) is the\n reference kept by the dependent node.\n\n:param parent: (java.lang.Object) - A parent of this node", + "aggBy": ":param aggregations: java.util.Collection\n:param groupByColumns: java.util.Collection\n:return: io.deephaven.engine.table.Table", "append": ":param logOutput: io.deephaven.base.log.LogOutput\n:return: io.deephaven.base.log.LogOutput", "awaitUpdate": "Wait for updates to this Table.\n \n In some implementations, this call may also terminate in case of interrupt or spurious wakeup (see\n java.util.concurrent.locks.Condition#await()).\n\n*Overload 1* \n \n \n*Overload 2* \n :param timeout: (long) - The maximum time to wait in milliseconds.\n :return: (boolean) false if the timeout elapses without notification, true otherwise.", "clearSortingRestrictions": "Clear all sorting restrictions that was applied to the current table.\n \n\n Note that this table operates on the table it was invoked on and does not create a new table. So in the following\n code T1 = baseTable.where(...)\n T2 = T1.restrictSortTo(\"C1\")\n T3 = T2.clearSortingRestrictions()\n \n\n T1 == T2 == T3 and the result has no restrictions on sorting.\n \n\n:return: (io.deephaven.engine.table.Table) The same table this was invoked on.", diff --git a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/DeferredViewTable.json b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/DeferredViewTable.json index ecf02f11f41..67e04fc0020 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/DeferredViewTable.json +++ b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/DeferredViewTable.json @@ -1,7 +1,6 @@ { "className": "io.deephaven.engine.table.impl.DeferredViewTable", "methods": { - "selectDistinct": ":param selectables: java.util.Collection\n:return: io.deephaven.engine.table.Table", "where": ":param filters: java.util.Collection\n:return: io.deephaven.engine.table.Table" }, "path": "io.deephaven.engine.table.impl.DeferredViewTable", diff --git a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/HierarchicalTable.json b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/HierarchicalTable.json index e114b096a0f..e075abe9ff6 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/HierarchicalTable.json +++ b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/HierarchicalTable.json @@ -1,32 +1,24 @@ { "className": "io.deephaven.engine.table.impl.HierarchicalTable", "methods": { - "absSumBy": "Groups the data column according to groupByColumns and computes the sum of the absolute values for\n the rest of the fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", - "aggBy": ":param aggregations: java.util.Collection\n:param groupByColumns: java.util.Collection\n:return: io.deephaven.engine.table.Table", + "aggAllBy": ":param spec: io.deephaven.api.agg.spec.AggSpec\n:param groupByColumns: io.deephaven.api.Selectable...\n:return: io.deephaven.engine.table.Table", "aj": "Looks up the columns in the rightTable that meet the match conditions in the columnsToMatch list. Matching is\n done exactly for the first n-1 columns and via a binary search for the last match pair. The columns of the\n original table are returned intact, together with the columns from rightTable defined in a comma separated list\n \"columnsToAdd\"\n\n:param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n:param columnsToMatch: (io.deephaven.engine.table.MatchPair[]) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n:param columnsToAdd: (io.deephaven.engine.table.MatchPair[]) - A comma separated list with the columns from the left side that need to be added to the right\n side as a result of the match.\n:param asOfMatchRule: io.deephaven.engine.table.Table.AsOfMatchRule\n:return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd", "applyToAllBy": "Groups data according to groupByColumns and applies formulaColumn to each of columns not altered by the grouping\n operation. columnParamName is used as place-holder for the name of each column inside\n formulaColumn.\n\n:param formulaColumn: (java.lang.String) - Formula applied to each column\n:param columnParamName: (java.lang.String) - The parameter name used as a placeholder for each column\n:param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(Collection)\n:return: io.deephaven.engine.table.Table", - "avgBy": "Groups the data column according to groupByColumns and computes the average for the rest of the\n fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "copy": ":param copyAttributes: boolean\n:return: io.deephaven.engine.table.Table", "countBy": ":param countColumnName: java.lang.String\n:param groupByColumns: io.deephaven.api.Selectable...\n:return: io.deephaven.engine.table.Table", "dropColumns": ":param columnNames: java.lang.String...\n:return: io.deephaven.engine.table.Table", "exactJoin": ":param table: io.deephaven.engine.table.Table\n:param columnsToMatch: io.deephaven.engine.table.MatchPair[]\n:param columnsToAdd: io.deephaven.engine.table.MatchPair[]\n:return: io.deephaven.engine.table.Table", - "firstBy": "Groups the data column according to groupByColumns and retrieves the first for the rest of the\n fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "flatten": "Creates a version of this table with a flat RowSet.\n\n:return: io.deephaven.engine.table.Table", "formatColumns": ":param columnFormats: java.lang.String...\n:return: io.deephaven.engine.table.Table", "getInfo": "Get the HierarchicalTableInfo associated with this table.\n\n:return: (io.deephaven.engine.table.impl.HierarchicalTableInfo) the info for this table", "getRawRootTable": "Get the table that is the root of the hierarchy\n\n:return: (io.deephaven.engine.table.Table) the root of the hierarchy", "getSourceTable": "Get the table on which this hierarchical table was created from.\n\n:return: (io.deephaven.engine.table.Table) the source table", "getSubTable": "Get a Table that contains a sub-set of the rows from this.\n\n:param rowSet: (io.deephaven.engine.rowset.TrackingRowSet) - The row set for the result.\n:return: (io.deephaven.engine.table.impl.QueryTable) A new sub-table", - "groupBy": ":param groupByColumns: java.util.Collection\n:return: io.deephaven.engine.table.Table", "head": ":param size: long\n:return: io.deephaven.engine.table.Table", "headBy": ":param nRows: long\n:param groupByColumns: java.lang.String...\n:return: io.deephaven.engine.table.Table", "headPct": "Provides a head that selects a dynamic number of rows based on a percent.\n\n:param percent: (double) - the fraction of the table to return (0..1), the number of rows will be rounded up. For example if\n there are 3 rows, headPct(50) returns the first two rows.\n:return: io.deephaven.engine.table.Table", "join": "Perform a cross join with the right table.\n \n Returns a table that is the cartesian product of left rows X right rows, with one column for each of the left\n table's columns, and one column corresponding to each of the right table's columns that are included in the\n columnsToAdd argument. The rows are ordered first by the left table then by the right table. If columnsToMatch is\n non-empty then the product is filtered by the supplied match conditions.\n \n To efficiently produce updates, the bits that represent a key for a given row are split into two. Unless\n specified, join reserves 16 bits to represent a right row. When there are too few bits to represent all of the\n right rows for a given aggregation group the table will shift a bit from the left side to the right side. The\n default of 16 bits was carefully chosen because it results in an efficient implementation to process live\n updates.\n \n An OutOfKeySpaceException is thrown when the total number of bits needed\n to express the result table exceeds that needed to represent Long.MAX_VALUE. There are a few work arounds: - If\n the left table is sparse, consider flattening the left table. - If there are no key-columns and the right table\n is sparse, consider flattening the right table. - If the maximum size of a right table's group is small, you can\n reserve fewer bits by setting numRightBitsToReserve on initialization.\n \n Note: If you can prove that a given group has at most one right-row then you should prefer using\n Table.naturalJoin(io.deephaven.engine.table.Table, io.deephaven.engine.table.MatchPair[], io.deephaven.engine.table.MatchPair[]).\n\n:param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n:param columnsToMatch: (io.deephaven.engine.table.MatchPair[]) - An array of match pair conditions (\"leftColumn=rightColumn\" or \"columnFoundInBoth\")\n:param columnsToAdd: (io.deephaven.engine.table.MatchPair[]) - An array of the columns from the right side that need to be added to the left side as a\n result of the match.\n:param numRightBitsToReserve: (int) - The number of bits to reserve for rightTable groups.\n:return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd", - "lastBy": "Groups the data column according to groupByColumns and retrieves the last for the rest of the fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "lazyUpdate": "Compute column formulas on demand.\n\n \n Lazy update defers computation until required for a set of values, and caches the results for a set of input\n values. This uses less RAM than an update statement when you have a smaller set of unique values. Less\n computation than an updateView is needed, because the results are saved in a cache.\n \n\n If you have many unique values, you should instead use an update statement, which will have more memory efficient\n structures. Values are never removed from the lazyUpdate cache, so it should be used judiciously on a ticking\n table.\n \n\n:param columns: (java.util.Collection) - the columns to add\n:return: (io.deephaven.engine.table.Table) a new Table with the columns added; to be computed on demand", - "maxBy": "Groups the data column according to groupByColumns and computes the max for the rest of the fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection) }\n:return: io.deephaven.engine.table.Table", - "medianBy": "Groups the data column according to groupByColumns and computes the median for the rest of the\n fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection) }\n:return: io.deephaven.engine.table.Table", - "minBy": "Groups the data column according to groupByColumns and computes the min for the rest of the fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "naturalJoin": ":param rightTable: io.deephaven.engine.table.Table\n:param columnsToMatch: io.deephaven.engine.table.MatchPair[]\n:param columnsToAdd: io.deephaven.engine.table.MatchPair[]\n:return: io.deephaven.engine.table.Table", "partitionBy": "Create a TableMap from this table, keyed by the specified columns.\n\n \n The returned TableMap contains each row in this table in exactly one of the tables within the map. If you have\n exactly one key column the TableMap is keyed by the value in that column. If you have zero key columns, then the\n TableMap is keyed by io.deephaven.datastructures.util.SmartKey.EMPTY (and will contain this table as the\n value). If you have multiple key columns, then the TableMap is keyed by a\n io.deephaven.datastructures.util.SmartKey. The SmartKey will have one value for each of your column\n values, in the order specified by keyColumnNames.\n \n\n For example if you have a Table keyed by a String column named USym, and a DateTime column named Expiry; a value\n could be retrieved from the TableMap with\n tableMap.get(new SmartKey(\"SPY\";, DateTimeUtils.convertDateTime(\"2020-06-19T16:15:00 NY\"))). For a table\n with an Integer column named Bucket, you simply use the desired value as in tableMap.get(1).\n \n\n:param dropKeys: (boolean) - if true, drop key columns in the output Tables\n:param keyColumnNames: (java.lang.String...) - the name of the key columns to use.\n:return: (io.deephaven.engine.table.impl.LocalTableMap) a TableMap keyed by keyColumnNames", "raj": "Just like .aj(), but the matching on the last column is in reverse order, so that you find the row after the\n given timestamp instead of the row before.\n \n Looks up the columns in the rightTable that meet the match conditions in the columnsToMatch list. Matching is\n done exactly for the first n-1 columns and via a binary search for the last match pair. The columns of the\n original table are returned intact, together with the columns from rightTable defined in a comma separated list\n \"columnsToAdd\"\n\n:param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n:param columnsToMatch: (io.deephaven.engine.table.MatchPair[]) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n:param columnsToAdd: (io.deephaven.engine.table.MatchPair[]) - A comma separated list with the columns from the left side that need to be added to the right\n side as a result of the match.\n:param asOfMatchRule: io.deephaven.engine.table.Table.AsOfMatchRule\n:return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd", @@ -34,14 +26,11 @@ "reverse": "The reverse operation returns a new table that is the same as the original table, but the first row is last, and\n the last row is first. This is an internal API to be used by .raj(), but is accessible for unit tests.\n\n:return: (io.deephaven.engine.table.Table) the reversed table", "rollup": ":param aggregations: java.util.Collection\n:param includeConstituents: boolean\n:param columns: io.deephaven.api.Selectable...\n:return: io.deephaven.engine.table.Table", "select": ":param selectColumns: java.util.Collection\n:return: io.deephaven.engine.table.Table", - "selectDistinct": ":param columns: java.util.Collection\n:return: io.deephaven.engine.table.Table", "slice": "Extracts a subset of a table by row position.\n \n If both firstPosition and lastPosition are positive, then the rows are counted from the beginning of the table.\n The firstPosition is inclusive, and the lastPosition is exclusive. The Table.head(long)(N) call is equivalent to\n slice(0, N). The firstPosition must be less than or equal to the lastPosition.\n \n If firstPosition is positive and lastPosition is negative, then the firstRow is counted from the beginning of the\n table, inclusively. The lastPosition is counted from the end of the table. For example, slice(1, -1) includes all\n rows but the first and last. If the lastPosition would be before the firstRow, the result is an emptyTable.\n \n If firstPosition is negative, and lastPosition is zero, then the firstRow is counted from the end of the table,\n and the end of the slice is the size of the table. slice(-N, 0) is equivalent to Table.tail(long)(N).\n \n If the firstPosition is nega tive and the lastPosition is negative, they are both counted from the end of the\n table. For example, slice(-2, -1) returns the second to last row of the table.\n\n:param firstRowInclusive: (long) - the first position to include in the result\n:param lastRowExclusive: (long) - the last position to include in the result\n:return: (io.deephaven.engine.table.Table) a new Table, which is the request subset of rows from the original table", "snapshot": "Snapshot baseTable, triggered by this table, and return a new table as a result.\n\n \n Delegates to TableOperations.snapshot(Object, boolean, Collection).\n\n:param baseTable: (io.deephaven.engine.table.Table) - The table to be snapshotted\n:param doInitialSnapshot: (boolean) - Take the first snapshot now (otherwise wait for a change event)\n:param stampColumns: (java.lang.String...) - The columns forming the \"snapshot key\", i.e. some subset of this Table's columns to be\n included in the result at snapshot time. As a special case, an empty stampColumns is taken to mean\n \"include all columns\".\n:return: (io.deephaven.engine.table.Table) The result table", "snapshotHistory": ":param rightTable: io.deephaven.engine.table.Table\n:return: io.deephaven.engine.table.Table", "snapshotIncremental": ":param rightTable: io.deephaven.engine.table.Table\n:param doInitialSnapshot: boolean\n:param stampColumns: java.lang.String...\n:return: io.deephaven.engine.table.Table", "sort": ":param columnsToSortBy: java.util.Collection\n:return: io.deephaven.engine.table.Table", - "stdBy": ":param groupByColumns: io.deephaven.api.Selectable...\n:return: io.deephaven.engine.table.Table", - "sumBy": "Groups the data column according to groupByColumns and computes the sum for the rest of the fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "tail": ":param size: long\n:return: io.deephaven.engine.table.Table", "tailBy": ":param nRows: long\n:param groupByColumns: java.lang.String...\n:return: io.deephaven.engine.table.Table", "tailPct": ":param percent: double\n:return: io.deephaven.engine.table.Table", @@ -49,9 +38,7 @@ "ungroup": "Ungroups a table by converting arrays into columns.\n\n:param nullFill: (boolean) - indicates if the ungrouped table should allow disparate sized arrays filling shorter columns with\n null values. If set to false, then all arrays should be the same length.\n:param columnsToUngroup: (java.lang.String...) - the columns to ungroup\n:return: (io.deephaven.engine.table.Table) the ungrouped table", "update": ":param columns: java.util.Collection\n:return: io.deephaven.engine.table.Table", "updateView": ":param columns: java.util.Collection\n:return: io.deephaven.engine.table.Table", - "varBy": "Groups the data column according to groupByColumns and computes the variance for the rest of the\n fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "view": ":param columns: java.util.Collection\n:return: io.deephaven.engine.table.Table", - "wavgBy": "Groups the data column according to groupByColumns and computes the weighted average using\n weightColumn for the rest of the fields\n\n:param weightColumn: (java.lang.String) - the column to use for the weight\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "where": ":param filters: java.util.Collection\n:return: io.deephaven.engine.table.Table", "whereIn": "Filters this table based on the set of values in the rightTable.\n\n \n Note that when the rightTable ticks, all of the rows in this table are going to be re-evaluated,\n thus the intention is that the rightTable is fairly slow moving compared with this table.\n\n:param rightTable: (io.deephaven.engine.table.Table) - the filtering table.\n:param columnsToMatch: (java.util.Collection) - the columns to match between the two tables\n:return: (io.deephaven.engine.table.Table) a new table filtered on right table", "whereNotIn": "Filters this table based on the set of values not in the rightTable.\n\n \n Note that when the rightTable ticks, all of the rows in this table are going to be re-evaluated,\n thus the intention is that the rightTable is fairly slow moving compared with this table.\n\n:param rightTable: (io.deephaven.engine.table.Table) - the filtering table.\n:param columnsToMatch: (java.util.Collection) - the columns to match between the two tables\n:return: (io.deephaven.engine.table.Table) a new table filtered on right table" diff --git a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/PartitionAwareSourceTable.json b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/PartitionAwareSourceTable.json index fe3db8a9e6e..fd17cd533c7 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/PartitionAwareSourceTable.json +++ b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/PartitionAwareSourceTable.json @@ -1,7 +1,6 @@ { "className": "io.deephaven.engine.table.impl.PartitionAwareSourceTable", "methods": { - "selectDistinct": ":param groupByColumns: java.util.Collection\n:return: io.deephaven.engine.table.Table", "where": ":param filters: java.util.Collection\n:return: io.deephaven.engine.table.Table" }, "path": "io.deephaven.engine.table.impl.PartitionAwareSourceTable", diff --git a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/QueryTable.json b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/QueryTable.json index 26df36debc1..8ff43584874 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/QueryTable.json +++ b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/QueryTable.json @@ -1,19 +1,16 @@ { "className": "io.deephaven.engine.table.impl.QueryTable", "methods": { - "absSumBy": "Groups the data column according to groupByColumns and computes the sum of the absolute values for\n the rest of the fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", - "aggBy": ":param aggregations: java.util.Collection\n:param groupByColumns: java.util.Collection\n:return: io.deephaven.engine.table.Table", + "aggAllBy": ":param spec: io.deephaven.api.agg.spec.AggSpec\n:param groupByColumns: io.deephaven.api.Selectable...\n:return: io.deephaven.engine.table.Table", "aj": "Looks up the columns in the rightTable that meet the match conditions in the columnsToMatch list. Matching is\n done exactly for the first n-1 columns and via a binary search for the last match pair. The columns of the\n original table are returned intact, together with the columns from rightTable defined in a comma separated list\n \"columnsToAdd\"\n\n:param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n:param columnsToMatch: (io.deephaven.engine.table.MatchPair[]) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n:param columnsToAdd: (io.deephaven.engine.table.MatchPair[]) - A comma separated list with the columns from the left side that need to be added to the right\n side as a result of the match.\n:param asOfMatchRule: io.deephaven.engine.table.Table.AsOfMatchRule\n:return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd", "apply": "Applies a function to this table.\n \n This is useful if you have a reference to a table or a proxy and want to run a series of operations against the\n table without each individual operation resulting in an RMI.\n\nNote: Java generics information - \n\n:param function: (java.util.function.Function) - the function to run, its single argument will be this table\n:return: (R) the return value of function", "applyToAllBy": "Groups data according to groupByColumns and applies formulaColumn to each of columns not altered by the grouping\n operation. columnParamName is used as place-holder for the name of each column inside\n formulaColumn.\n\n:param formulaColumn: (java.lang.String) - Formula applied to each column\n:param columnParamName: (java.lang.String) - The parameter name used as a placeholder for each column\n:param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(Collection)\n:return: io.deephaven.engine.table.Table", - "avgBy": "Groups the data column according to groupByColumns and computes the average for the rest of the\n fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "by": ":param inputAggregationSpec: io.deephaven.engine.table.impl.by.AggregationSpec\n:param groupByColumns: io.deephaven.engine.table.impl.select.SelectColumn...\n:return: io.deephaven.engine.table.Table", "copy": "Copies this table, but with a new set of attributes.\n\n*Overload 1* \n :return: (io.deephaven.engine.table.Table) an identical table; but with a new set of attributes\n \n*Overload 2* \n :param copyAttributes: boolean\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param definition: io.deephaven.engine.table.TableDefinition\n :param copyAttributes: boolean\n :return: io.deephaven.engine.table.Table", "countBy": ":param countColumnName: java.lang.String\n:param groupByColumns: io.deephaven.api.Selectable...\n:return: io.deephaven.engine.table.Table", "dateTimeColumnAsNanos": "Produce a new table with the same columns as this table, but with a new column presenting the specified DateTime\n column as a Long column (with each DateTime represented instead as the corresponding number of nanos since the\n epoch).\n \n NOTE: This is a really just an updateView(), and behaves accordingly for column ordering and (re)placement. This\n doesn't work on data that has been brought fully into memory (e.g. via select()). Use a view instead.\n\n:param dateTimeColumnName: (java.lang.String) - Name of date time column\n:param nanosColumnName: (java.lang.String) - Name of nanos column\n:return: (io.deephaven.engine.table.Table) The new table, constructed as explained above.", "dropColumns": ":param columnNames: java.lang.String...\n:return: io.deephaven.engine.table.Table", "exactJoin": ":param table: io.deephaven.engine.table.Table\n:param columnsToMatch: io.deephaven.engine.table.MatchPair[]\n:param columnsToAdd: io.deephaven.engine.table.MatchPair[]\n:return: io.deephaven.engine.table.Table", - "firstBy": "Groups the data column according to groupByColumns and retrieves the first for the rest of the\n fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "flatten": "Creates a version of this table with a flat RowSet.\n\n:return: io.deephaven.engine.table.Table", "formatColumns": ":param columnFormats: java.lang.String...\n:return: io.deephaven.engine.table.Table", "getColumn": ":param columnName: java.lang.String\n:return: io.deephaven.engine.table.DataColumn", @@ -25,18 +22,13 @@ "getResult": ":param operation: io.deephaven.engine.table.impl.QueryTable.Operation\n:return: T", "getRowSet": ":return: (io.deephaven.engine.rowset.TrackingRowSet) The TrackingRowSet that exposes the row keys present in this Table", "getSubTable": "Get a Table that contains a sub-set of the rows from this.\n\n*Overload 1* \n :param rowSet: (io.deephaven.engine.rowset.TrackingRowSet) - The row set for the result.\n :return: (io.deephaven.engine.table.impl.QueryTable) A new sub-table\n \n*Overload 2* \n :param rowSet: io.deephaven.engine.rowset.TrackingRowSet\n :param resultModifiedColumnSet: io.deephaven.engine.table.ModifiedColumnSet\n :param parents: java.lang.Object...\n :return: io.deephaven.engine.table.impl.QueryTable", - "groupBy": ":param groupByColumns: java.util.Collection\n:return: io.deephaven.engine.table.Table", "head": ":param size: long\n:return: io.deephaven.engine.table.Table", "headBy": ":param nRows: long\n:param groupByColumns: java.lang.String...\n:return: io.deephaven.engine.table.Table", "headPct": "Provides a head that selects a dynamic number of rows based on a percent.\n\n:param percent: (double) - the fraction of the table to return (0..1), the number of rows will be rounded up. For example if\n there are 3 rows, headPct(50) returns the first two rows.\n:return: io.deephaven.engine.table.Table", "isFlat": "Return true if this table is guaranteed to be flat. The RowSet of a flat table will be from 0...numRows-1.\n\n:return: boolean", "join": "Perform a cross join with the right table.\n \n Returns a table that is the cartesian product of left rows X right rows, with one column for each of the left\n table's columns, and one column corresponding to each of the right table's columns that are included in the\n columnsToAdd argument. The rows are ordered first by the left table then by the right table. If columnsToMatch is\n non-empty then the product is filtered by the supplied match conditions.\n \n To efficiently produce updates, the bits that represent a key for a given row are split into two. Unless\n specified, join reserves 16 bits to represent a right row. When there are too few bits to represent all of the\n right rows for a given aggregation group the table will shift a bit from the left side to the right side. The\n default of 16 bits was carefully chosen because it results in an efficient implementation to process live\n updates.\n \n An OutOfKeySpaceException is thrown when the total number of bits needed\n to express the result table exceeds that needed to represent Long.MAX_VALUE. There are a few work arounds: - If\n the left table is sparse, consider flattening the left table. - If there are no key-columns and the right table\n is sparse, consider flattening the right table. - If the maximum size of a right table's group is small, you can\n reserve fewer bits by setting numRightBitsToReserve on initialization.\n \n Note: If you can prove that a given group has at most one right-row then you should prefer using\n Table.naturalJoin(io.deephaven.engine.table.Table, io.deephaven.engine.table.MatchPair[], io.deephaven.engine.table.MatchPair[]).\n\n:param rightTableCandidate: (io.deephaven.engine.table.Table) - The right side table on the join.\n:param columnsToMatch: (io.deephaven.engine.table.MatchPair[]) - An array of match pair conditions (\"leftColumn=rightColumn\" or \"columnFoundInBoth\")\n:param columnsToAdd: (io.deephaven.engine.table.MatchPair[]) - An array of the columns from the right side that need to be added to the left side as a\n result of the match.\n:param numRightBitsToReserve: (int) - The number of bits to reserve for rightTable groups.\n:return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd", - "lastBy": "Groups the data column according to groupByColumns and retrieves the last for the rest of the fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "lazyUpdate": "Compute column formulas on demand.\n\n \n Lazy update defers computation until required for a set of values, and caches the results for a set of input\n values. This uses less RAM than an update statement when you have a smaller set of unique values. Less\n computation than an updateView is needed, because the results are saved in a cache.\n \n\n If you have many unique values, you should instead use an update statement, which will have more memory efficient\n structures. Values are never removed from the lazyUpdate cache, so it should be used judiciously on a ticking\n table.\n \n\n:param newColumns: (java.util.Collection) - the columns to add\n:return: (io.deephaven.engine.table.Table) a new Table with the columns added; to be computed on demand", - "maxBy": "Groups the data column according to groupByColumns and computes the max for the rest of the fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection) }\n:return: io.deephaven.engine.table.Table", - "medianBy": "Groups the data column according to groupByColumns and computes the median for the rest of the\n fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection) }\n:return: io.deephaven.engine.table.Table", "memoizeResult": "Saves a weak reference to the result of the given operation.\n\nNote: Java generics information - \n\n:param memoKey: (io.deephaven.engine.table.impl.MemoizedOperationKey) - a complete description of the operation, if null no memoization is performed\n:param operation: (java.util.function.Supplier) - a supplier for the result\n:return: (R) either the cached or newly generated result", - "minBy": "Groups the data column according to groupByColumns and computes the min for the rest of the fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "moveColumns": ":param index: int\n:param moveToEnd: boolean\n:param columnsToMove: java.lang.String...\n:return: io.deephaven.engine.table.Table", "naturalJoin": ":param rightTable: io.deephaven.engine.table.Table\n:param columnsToMatch: io.deephaven.engine.table.MatchPair[]\n:param columnsToAdd: io.deephaven.engine.table.MatchPair[]\n:return: io.deephaven.engine.table.Table", "newModifiedColumnSet": "Create a ModifiedColumnSet to use when propagating updates from this table.\n\n:param columnNames: (java.lang.String...) - The columns that should belong to the resulting set\n:return: (io.deephaven.engine.table.ModifiedColumnSet) The resulting ModifiedColumnSet for the given columnNames", @@ -49,7 +41,6 @@ "reverse": "The reverse operation returns a new table that is the same as the original table, but the first row is last, and\n the last row is first. This is an internal API to be used by .raj(), but is accessible for unit tests.\n\n:return: (io.deephaven.engine.table.Table) the reversed table", "rollup": "*Overload 1* \n :param aggregations: java.util.Collection\n :param includeConstituents: boolean\n :param groupByColumns: io.deephaven.api.Selectable...\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param aggregationFactory: io.deephaven.engine.table.impl.by.AggregationFactory\n :param includeConstituents: boolean\n :param columns: io.deephaven.engine.table.impl.select.SelectColumn...\n :return: io.deephaven.engine.table.Table", "select": ":param columns: java.util.Collection\n:return: io.deephaven.engine.table.Table", - "selectDistinct": ":param groupByColumns: java.util.Collection\n:return: io.deephaven.engine.table.Table", "setMemoizeResults": "For unit tests, provide a method to turn memoization on or off.\n\n:param memoizeResults: (boolean) - should results be memoized?\n:return: (boolean) the prior value", "silent": ":return: io.deephaven.engine.table.Table", "size": "The size of this data structure.\n\n:return: (long) The size", @@ -58,8 +49,6 @@ "snapshotHistory": ":param rightTable: io.deephaven.engine.table.Table\n:return: io.deephaven.engine.table.Table", "snapshotIncremental": ":param tableToSnapshot: io.deephaven.engine.table.Table\n:param doInitialSnapshot: boolean\n:param stampColumns: java.lang.String...\n:return: io.deephaven.engine.table.Table", "sort": ":param columnsToSortBy: java.util.Collection\n:return: io.deephaven.engine.table.Table", - "stdBy": ":param groupByColumns: io.deephaven.api.Selectable...\n:return: io.deephaven.engine.table.Table", - "sumBy": "Groups the data column according to groupByColumns and computes the sum for the rest of the fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "tail": ":param size: long\n:return: io.deephaven.engine.table.Table", "tailBy": ":param nRows: long\n:param groupByColumns: java.lang.String...\n:return: io.deephaven.engine.table.Table", "tailPct": ":param percent: double\n:return: io.deephaven.engine.table.Table", @@ -68,15 +57,12 @@ "update": ":param newColumns: java.util.Collection\n:return: io.deephaven.engine.table.Table", "updateView": ":param viewColumns: java.util.Collection\n:return: io.deephaven.engine.table.Table", "validateSelect": "This does a certain amount of validation and can be used to get confidence that the formulas are valid. If it is\n not valid, you will get an exception. Positive test (should pass validation): \"X = 12\", \"Y = X + 1\") Negative\n test (should fail validation): \"X = 12\", \"Y = Z + 1\")\n\n DO NOT USE -- this API is in flux and may change or disappear in the future.\n\n:param selectColumns: io.deephaven.engine.table.impl.select.SelectColumn...\n:return: io.deephaven.engine.table.impl.SelectValidationResult", - "varBy": "Groups the data column according to groupByColumns and computes the variance for the rest of the\n fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "view": ":param viewColumns: java.util.Collection\n:return: io.deephaven.engine.table.Table", - "wavgBy": "Groups the data column according to groupByColumns and computes the weighted average using\n weightColumn for the rest of the fields\n\n:param weightColumn: (java.lang.String) - the column to use for the weight\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", "where": ":param filters: java.util.Collection\n:return: io.deephaven.engine.table.Table", "whereIn": "Filters this table based on the set of values in the rightTable.\n\n \n Note that when the rightTable ticks, all of the rows in this table are going to be re-evaluated,\n thus the intention is that the rightTable is fairly slow moving compared with this table.\n\n:param rightTable: (io.deephaven.engine.table.Table) - the filtering table.\n:param columnsToMatch: (java.util.Collection) - the columns to match between the two tables\n:return: (io.deephaven.engine.table.Table) a new table filtered on right table", "whereNotIn": "Filters this table based on the set of values not in the rightTable.\n\n \n Note that when the rightTable ticks, all of the rows in this table are going to be re-evaluated,\n thus the intention is that the rightTable is fairly slow moving compared with this table.\n\n:param rightTable: (io.deephaven.engine.table.Table) - the filtering table.\n:param columnsToMatch: (java.util.Collection) - the columns to match between the two tables\n:return: (io.deephaven.engine.table.Table) a new table filtered on right table", "withDefinitionUnsafe": "Create a new query table with the ColumnDefinitions of template, but in the\n order of this. The tables must be mutually compatible, as defined via\n TableDefinition.checkCompatibility(TableDefinition).\n\n:param template: (io.deephaven.engine.table.TableDefinition) - the new definition template to use\n:return: (io.deephaven.engine.table.impl.QueryTable) the new query table", - "wouldMatch": "A table operation that applies the supplied predicate to each row in the table and produces columns containing\n the pass/fail result of the predicate application. This is similar to Table.where(String...) except that\n instead of selecting only rows that meet the criteria, new columns are added with the result of the comparison.\n\n:param matchers: io.deephaven.engine.table.WouldMatchPair...\n:return: (io.deephaven.engine.table.Table) a table with new columns containing the filter result for each row.", - "wsumBy": "Groups the data column according to groupByColumns and computes the weighted sum using weightColumn\n for the rest of the fields\n \n If the weight column is a floating point type, all result columns will be doubles. If the weight column is an\n integral type, all integral input columns will have long results and all floating point input columns will have\n double results.\n\n:param weightColumn: (java.lang.String) - the column to use for the weight\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table" + "wouldMatch": "A table operation that applies the supplied predicate to each row in the table and produces columns containing\n the pass/fail result of the predicate application. This is similar to Table.where(String...) except that\n instead of selecting only rows that meet the criteria, new columns are added with the result of the comparison.\n\n:param matchers: io.deephaven.engine.table.WouldMatchPair...\n:return: (io.deephaven.engine.table.Table) a table with new columns containing the filter result for each row." }, "path": "io.deephaven.engine.table.impl.QueryTable", "text": "Primary coalesced table implementation.", diff --git a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/TableWithDefaults.json b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/TableWithDefaults.json index fe2bf3bc686..2c30ecc737f 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/TableWithDefaults.json +++ b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/TableWithDefaults.json @@ -1,12 +1,13 @@ { "className": "io.deephaven.engine.table.impl.TableWithDefaults", "methods": { - "absSumBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the sum of the absolute values for\n the rest of the fields\n\n*Overload 1* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :return: io.deephaven.engine.table.Table", - "aggBy": "*Overload 1* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :param groupByColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :param groupByColumns: java.util.Collection\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :param aggregations: java.util.Collection\n :param groupByColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 5* \n :param table: io.deephaven.engine.table.Table\n :param aggHolder: io.deephaven.engine.table.impl.TableWithDefaults.AggHolder\n :param groupByColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 6* \n :param aggregations: java.util.Collection\n :return: io.deephaven.engine.table.Table", + "absSumBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the sum of the absolute values for\n the rest of the fields\n\n*Overload 1* \n :param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :return: io.deephaven.engine.table.Table", + "aggAllBy": "*Overload 1* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: java.util.Collection\n :return: io.deephaven.engine.table.Table", + "aggBy": "*Overload 1* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :param groupByColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :param groupByColumns: java.util.Collection\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :param aggregations: java.util.Collection\n :param groupByColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 5* \n :param aggregations: java.util.Collection\n :return: io.deephaven.engine.table.Table", "aj": "**Incompatible overloads text - text from the first overload:**\n\nLooks up the columns in the rightTable that meet the match conditions in the columnsToMatch list. Matching is\n done exactly for the first n-1 columns and via a binary search for the last match pair. The columns of the\n original table are returned intact, together with all the columns from rightTable.\n\n*Overload 1* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (io.deephaven.engine.table.MatchPair[]) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :param columnsToAdd: (io.deephaven.engine.table.MatchPair[]) - A comma separated list with the columns from the left side that need to be added to the right\n side as a result of the match.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 2* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 3* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :param asOfJoinRule: (io.deephaven.api.AsOfJoinRule) - The binary search operator for the last match pair.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 4* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 5* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\").\n :param columnsToAdd: (java.lang.String) - A comma separated list with the columns from the left side that need to be added to the right\n side as a result of the match.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 6* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\").\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch", "apply": "Applies a function to this table.\n \n This is useful if you have a reference to a table or a proxy and want to run a series of operations against the\n table without each individual operation resulting in an RMI.\n\nNote: Java generics information - \n\n:param function: (java.util.function.Function) - the function to run, its single argument will be this table\n:return: (R) the return value of function", "applyToAllBy": "Groups data according to groupByColumns and applies formulaColumn to each of columns not altered by the grouping\n operation.\n\n*Overload 1* \n :param formulaColumn: (java.lang.String) - Formula applied to each column, uses parameter each to refer to each colum it being\n applied to\n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param formulaColumn: (java.lang.String) - Formula applied to each column, uses parameter each to refer to each colum it being\n applied to\n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table", - "avgBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the average for the rest of the\n fields\n\n*Overload 1* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :return: io.deephaven.engine.table.Table", + "avgBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the average for the rest of the\n fields\n\n*Overload 1* \n :param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :return: io.deephaven.engine.table.Table", "byteColumnIterator": ":param columnName: java.lang.String\n:return: io.deephaven.engine.table.iterators.ByteColumnIterator", "characterColumnIterator": ":param columnName: java.lang.String\n:return: io.deephaven.engine.table.iterators.CharacterColumnIterator", "close": "Release resources held by this table, possibly destructively. This may render the table unsuitable or unsafe for\n further use.", @@ -18,7 +19,7 @@ "dropColumnFormats": ":return: io.deephaven.engine.table.Table", "dropColumns": ":param columnNames: java.util.Collection\n:return: io.deephaven.engine.table.Table", "exactJoin": "**Incompatible overloads text - text from the first overload:**\n\nPerform an exact-join with the rightTable.\n\n \n Delegates to TableOperations.exactJoin(Object, Collection, Collection).\n\n*Overload 1* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :return: (io.deephaven.engine.table.Table) the exact-joined table\n \n*Overload 2* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :param columnsToAdd: (java.lang.String) - A comma separated list with the columns from the right side that need to be added to the left\n side as a result of the match.\n :return: (io.deephaven.engine.table.Table) the exact-joined table\n \n*Overload 3* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :return: (io.deephaven.engine.table.Table) the exact-joined table", - "firstBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and retrieves the first for the rest of the\n fields\n\n*Overload 1* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :return: io.deephaven.engine.table.Table", + "firstBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and retrieves the first for the rest of the\n fields\n\n*Overload 1* \n :param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :return: io.deephaven.engine.table.Table", "floatColumnIterator": ":param columnName: java.lang.String\n:return: io.deephaven.engine.table.iterators.FloatColumnIterator", "formatColumnWhere": ":param columnName: java.lang.String\n:param condition: java.lang.String\n:param formula: java.lang.String\n:return: io.deephaven.engine.table.Table", "formatRowWhere": ":param condition: java.lang.String\n:param formula: java.lang.String\n:return: io.deephaven.engine.table.Table", @@ -27,22 +28,22 @@ "getColumnSource": "Retrieves a ColumnSource and casts it to the target class clazz.\n\nNote: Java generics information - \n\n:param sourceName: (java.lang.String) - The name of the column\n:param extend: java.lang.Class) The column source for sourceName, parameterized by T", "getColumns": ":return: io.deephaven.engine.table.DataColumn[]", "getMeta": "Provides column metadata in Table form. Convenience method, behaves exactly the same as\n getDefinition().getColumnDefinitionsTable().\n\n:return: (io.deephaven.engine.table.Table) A Table of metadata about this Table's columns.", - "groupBy": "*Overload 1* \n :param groupByColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :return: io.deephaven.engine.table.Table", + "groupBy": "*Overload 1* \n :param groupByColumns: java.util.Collection\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :return: io.deephaven.engine.table.Table", "hasColumns": "**Incompatible overloads text - text from the first overload:**\n\nDetermines whether this Table contains a column for each string in the specified array of columnNames.\n\n*Overload 1* \n :param columnNames: (java.lang.String...) - The array of column names to be checked for inclusion in this table. Must not be null.\n :return: (boolean) true if this Table contains a column for each and every string in the columnNames array;\n false if any element of columnNames is not the name of a column in this table\n \n*Overload 2* \n :param columnNames: (java.util.Collection) - The collection of column names to be checked for inclusion in this table. Must not be\n null.\n :return: (boolean) true if this Table contains a column for each and every string in the columnNames\n collection; false if any element of columnNames is not the name of a column in\n this table", "headBy": ":param nRows: long\n:param groupByColumnNames: java.util.Collection\n:return: io.deephaven.engine.table.Table", "integerColumnIterator": ":param columnName: java.lang.String\n:return: io.deephaven.engine.table.iterators.IntegerColumnIterator", "isEmpty": "Returns true if this table has no rows (i.e. size() == 0).\n\n:return: (boolean) true if this table has no rows", "isFailed": ":return: (boolean) true if this table is in a failure state.", "join": "**Incompatible overloads text - text from the first overload:**\n\nPerform a cross join with the right table.\n \n Returns a table that is the cartesian product of left rows X right rows, with one column for each of the left\n table's columns, and one column corresponding to each of the right table's columns that are included in the\n columnsToAdd argument. The rows are ordered first by the left table then by the right table. If columnsToMatch is\n non-empty then the product is filtered by the supplied match conditions.\n \n To efficiently produce updates, the bits that represent a key for a given row are split into two. Unless\n specified, join reserves 16 bits to represent a right row. When there are too few bits to represent all of the\n right rows for a given aggregation group the table will shift a bit from the left side to the right side. The\n default of 16 bits was carefully chosen because it results in an efficient implementation to process live\n updates.\n \n An OutOfKeySpaceException is thrown when the total number of bits needed\n to express the result table exceeds that needed to represent Long.MAX_VALUE. There are a few work arounds: - If\n the left table is sparse, consider flattening the left table. - If there are no key-columns and the right table\n is sparse, consider flattening the right table. - If the maximum size of a right table's group is small, you can\n reserve fewer bits by setting numRightBitsToReserve on initialization.\n \n Note: If you can prove that a given group has at most one right-row then you should prefer using\n Table.naturalJoin(io.deephaven.engine.table.Table, io.deephaven.engine.table.MatchPair[], io.deephaven.engine.table.MatchPair[]).\n\n*Overload 1* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification with zero key-columns and includes all right columns\n \n*Overload 2* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param numRightBitsToReserve: (int) - The number of bits to reserve for rightTable groups.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification with zero key-columns and includes all right columns\n \n*Overload 3* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and includes all non-key-columns from\n the right table\n \n*Overload 4* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :param numRightBitsToReserve: (int) - The number of bits to reserve for rightTable groups.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and includes all non-key-columns from\n the right table\n \n*Overload 5* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :param columnsToAdd: (java.lang.String) - A comma separated list with the columns from the right side that need to be added to the left\n side as a result of the match.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 6* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :param columnsToAdd: (java.lang.String) - A comma separated list with the columns from the right side that need to be added to the left\n side as a result of the match.\n :param numRightBitsToReserve: (int) - The number of bits to reserve for rightTable groups.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 7* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (io.deephaven.engine.table.MatchPair[]) - An array of match pair conditions (\"leftColumn=rightColumn\" or \"columnFoundInBoth\")\n :param columnsToAdd: (io.deephaven.engine.table.MatchPair[]) - An array of the columns from the right side that need to be added to the left side as a\n result of the match.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 8* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 9* \n :param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :param numRightBitsToReserve: (int) - The number of bits to reserve for rightTable groups.\n :return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd", - "lastBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and retrieves the last for the rest of the fields\n\n*Overload 1* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :return: io.deephaven.engine.table.Table", + "lastBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and retrieves the last for the rest of the fields\n\n*Overload 1* \n :param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :return: io.deephaven.engine.table.Table", "lazyUpdate": "*Overload 1* \n :param newColumns: io.deephaven.api.Selectable...\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param newColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table", "listenForUpdates": "Subscribe for updates to this table. listener will be invoked via the NotificationQueue\n associated with this Table.\n\n:param listener: (io.deephaven.engine.table.ShiftObliviousListener) - listener for updates", "longColumnIterator": ":param columnName: java.lang.String\n:return: io.deephaven.engine.table.iterators.LongColumnIterator", - "maxBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the max for the rest of the fields\n\n*Overload 1* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection) }\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection) }\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :return: io.deephaven.engine.table.Table", - "medianBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the median for the rest of the\n fields\n\n*Overload 1* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection) }\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection) }\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :return: io.deephaven.engine.table.Table", + "maxBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the max for the rest of the fields\n\n*Overload 1* \n :param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection) }\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection) }\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection) }\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :return: io.deephaven.engine.table.Table", + "medianBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the median for the rest of the\n fields\n\n*Overload 1* \n :param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection) }\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection) }\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection) }\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :return: io.deephaven.engine.table.Table", "mergeAfter": "Merge this Table with others. All rows in this Table will appear after all rows in others. If\n Tables in others are the result of a prior merge operation, they may be expanded in an attempt\n to avoid deeply nested structures.\n\n:param others: (io.deephaven.engine.table.Table...) - The Tables to merge with\n:return: (io.deephaven.engine.table.Table) The merged Table", "mergeBefore": "Merge this Table with others. All rows in this Table will appear before all rows in others. If\n Tables in others are the result of a prior merge operation, they may be expanded in an attempt\n to avoid deeply nested structures.\n\n:param others: (io.deephaven.engine.table.Table...) - The Tables to merge with\n:return: (io.deephaven.engine.table.Table) The merged Table", - "minBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the min for the rest of the fields\n\n*Overload 1* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :return: io.deephaven.engine.table.Table", + "minBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the min for the rest of the fields\n\n*Overload 1* \n :param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :return: io.deephaven.engine.table.Table", "moveColumns": "Produce a new table with the specified columns moved to the specified index. Column indices begin at 0.\n Columns can be renamed with the usual syntax, i.e. \"NewColumnName=OldColumnName\").\n\n:param index: (int) - The index to which the specified columns should be moved\n:param columnsToMove: (java.lang.String...) - The columns to move to the specified index (and, optionally, to rename)\n:return: (io.deephaven.engine.table.Table) The new table, with the columns rearranged as explained above", "moveColumnsDown": "Produce a new table with the specified columns moved to the rightmost position. Columns can be renamed with the\n usual syntax, i.e. \"NewColumnName=OldColumnName\").\n\n:param columnsToMove: (java.lang.String...) - The columns to move to the right (and, optionally, to rename)\n:return: (io.deephaven.engine.table.Table) The new table, with the columns rearranged as explained above Table.moveColumns(int, String...)", "moveColumnsUp": "Produce a new table with the specified columns moved to the leftmost position. Columns can be renamed with the\n usual syntax, i.e. \"NewColumnName=OldColumnName\").\n\n:param columnsToMove: (java.lang.String...) - The columns to move to the left (and, optionally, to rename)\n:return: (io.deephaven.engine.table.Table) The new table, with the columns rearranged as explained above Table.moveColumns(int, String...)", @@ -54,29 +55,29 @@ "renameColumns": "*Overload 1* \n :param columns: java.util.Collection\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param columns: java.lang.String...\n :return: io.deephaven.engine.table.Table", "rollup": "**Incompatible overloads text - text from the first overload:**\n\nCreate a rollup table.\n \n A rollup table aggregates all rows of the table.\n\n*Overload 1* \n :param aggregations: (java.util.Collection) - The aggregations to perform\n :param columns: (java.util.Collection) - the columns to group by\n :return: (io.deephaven.engine.table.Table) a hierarchical table with the rollup applied\n \n*Overload 2* \n :param aggregations: (java.util.Collection) - The aggregations to perform\n :param includeConstituents: (boolean) - set to true to include the constituent rows at the leaf level\n :param columns: (java.util.Collection) - the columns to group by\n :return: (io.deephaven.engine.table.Table) a hierarchical table with the rollup applied\n \n*Overload 3* \n :param aggregations: (java.util.Collection) - The aggregations to perform\n :param columns: (java.lang.String...) - the columns to group by\n :return: (io.deephaven.engine.table.Table) a hierarchical table with the rollup applied\n \n*Overload 4* \n :param aggregations: (java.util.Collection) - The aggregations to perform\n :param includeConstituents: (boolean) - set to true to include the constituent rows at the leaf level\n :param columns: (java.lang.String...) - the columns to group by\n :return: (io.deephaven.engine.table.Table) a hierarchical table with the rollup applied\n \n*Overload 5* \n :param aggregations: (java.util.Collection) - The aggregations to perform\n :param columns: (io.deephaven.api.Selectable...) - the columns to group by\n :return: (io.deephaven.engine.table.Table) a hierarchical table with the rollup applied\n \n*Overload 6* \n :param aggregations: (java.util.Collection) - The aggregations to perform\n :return: (io.deephaven.engine.table.Table) a hierarchical table with the rollup applied\n \n*Overload 7* \n :param aggregations: (java.util.Collection) - The aggregations to perform\n :param includeConstituents: (boolean) - set to true to include the constituent rows at the leaf level\n :return: (io.deephaven.engine.table.Table) a hierarchical table with the rollup applied", "select": "*Overload 1* \n :param columns: io.deephaven.api.Selectable...\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param columns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :return: io.deephaven.engine.table.Table", - "selectDistinct": "*Overload 1* \n :param columns: io.deephaven.api.Selectable...\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param columns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :return: io.deephaven.engine.table.Table", + "selectDistinct": "*Overload 1* \n :param columns: java.util.Collection\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param columns: io.deephaven.api.Selectable...\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param columns: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :return: io.deephaven.engine.table.Table", "shortColumnIterator": ":param columnName: java.lang.String\n:return: io.deephaven.engine.table.iterators.ShortColumnIterator", "sizeForInstrumentation": ":return: (long) Size if it is currently known without subsequent steps to coalesce the Table, else\n null", "snapshot": "**Incompatible overloads text - text from the first overload:**\n\nSnapshot baseTable, triggered by this table, and return a new table as a result.\n\n \nthis table is the triggering table, i.e. the table whose change events cause a new snapshot to be taken.\n The result table includes a \"snapshot key\" which is a subset (possibly all) of this table's columns. The\n remaining columns in the result table come from baseTable, the table being snapshotted.\n\n*Overload 1* \n :param baseTable: (io.deephaven.engine.table.Table) - The table to be snapshotted\n :param stampColumns: (java.lang.String...) - The columns forming the \"snapshot key\", i.e. some subset of this Table's columns to be\n included in the result at snapshot time. As a special case, an empty stampColumns is taken to mean\n \"include all columns\".\n :return: (io.deephaven.engine.table.Table) The result table\n \n*Overload 2* \n :param baseTable: (io.deephaven.engine.table.Table) - The table to be snapshotted\n :param doInitialSnapshot: (boolean) - Take the first snapshot now (otherwise wait for a change event)\n :param stampColumns: (java.util.Collection) - The columns forming the \"snapshot key\", i.e. some subset of this Table's columns to be\n included in the result at snapshot time. As a special case, an empty stampColumns is taken to mean\n \"include all columns\".\n :return: (io.deephaven.engine.table.Table) The result table", "snapshotIncremental": ":param rightTable: io.deephaven.engine.table.Table\n:param stampColumns: java.lang.String...\n:return: io.deephaven.engine.table.Table", - "sort": "*Overload 1* \n :param columnsToSortBy: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param table: io.deephaven.engine.table.Table\n :param columnsToSortBy: io.deephaven.api.SortColumn...\n :return: io.deephaven.engine.table.Table", + "sort": ":param columnsToSortBy: java.lang.String...\n:return: io.deephaven.engine.table.Table", "sortDescending": ":param columnsToSortBy: java.lang.String...\n:return: io.deephaven.engine.table.Table", - "stdBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the standard deviation for the rest\n of the fields\n\n*Overload 1* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :return: io.deephaven.engine.table.Table", - "sumBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the sum for the rest of the fields\n\n*Overload 1* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :return: io.deephaven.engine.table.Table", + "stdBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the standard deviation for the rest\n of the fields\n\n*Overload 1* \n :param groupByColumns: io.deephaven.api.Selectable...\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :return: io.deephaven.engine.table.Table", + "sumBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the sum for the rest of the fields\n\n*Overload 1* \n :param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :return: io.deephaven.engine.table.Table", "tailBy": ":param nRows: long\n:param groupByColumnNames: java.util.Collection\n:return: io.deephaven.engine.table.Table", "ungroup": "*Overload 1* \n :param columnsToUngroup: java.lang.String...\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param nullFill: boolean\n :return: io.deephaven.engine.table.Table", "ungroupAllBut": ":param columnsNotToUngroup: java.lang.String...\n:return: io.deephaven.engine.table.Table", "update": "*Overload 1* \n :param newColumns: io.deephaven.api.Selectable...\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param newColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table", "updateView": "*Overload 1* \n :param newColumns: io.deephaven.api.Selectable...\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param newColumns: java.lang.String...\n :return: io.deephaven.engine.table.Table", - "varBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the variance for the rest of the\n fields\n\n*Overload 1* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :return: io.deephaven.engine.table.Table", + "varBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the variance for the rest of the\n fields\n\n*Overload 1* \n :param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :return: io.deephaven.engine.table.Table", "view": "*Overload 1* \n :param columns: io.deephaven.api.Selectable...\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param columns: java.lang.String...\n :return: io.deephaven.engine.table.Table", - "wavgBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the weighted average using\n weightColumn for the rest of the fields\n\n*Overload 1* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :return: io.deephaven.engine.table.Table", + "wavgBy": "**Incompatible overloads text - text from the first overload:**\n\nGroups the data column according to groupByColumns and computes the weighted average using\n weightColumn for the rest of the fields\n\n*Overload 1* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :return: io.deephaven.engine.table.Table", "where": "*Overload 1* \n :param filters: io.deephaven.api.filter.Filter...\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param filters: java.lang.String...\n :return: io.deephaven.engine.table.Table", "whereIn": "Filters this table based on the set of values in the rightTable.\n\n \n Delegates to TableOperations.whereIn(Object, Collection).\n\n:param rightTable: (io.deephaven.engine.table.Table) - the filtering table.\n:param columnsToMatch: (java.lang.String...) - the columns to match between the two tables\n:return: (io.deephaven.engine.table.Table) a new table filtered on right table", "whereNotIn": "Filters this table based on the set of values not in the rightTable.\n\n \n Delegates to TableOperations.whereNotIn(Object, Collection).\n\n:param rightTable: (io.deephaven.engine.table.Table) - the filtering table.\n:param columnsToMatch: (java.lang.String...) - the columns to match between the two tables\n:return: (io.deephaven.engine.table.Table) a new table filtered on right table", "withColumnDescription": "Add a description for a specific column. You may use Table.withColumnDescription(Map) to set several\n descriptions at once.\n\n:param column: (java.lang.String) - the name of the column\n:param description: (java.lang.String) - the column description\n:return: (io.deephaven.engine.table.Table) a copy of the source table with the description applied", "wouldMatch": ":param expressions: java.lang.String...\n:return: io.deephaven.engine.table.Table", - "wsumBy": "**Incompatible overloads text - text from the first overload:**\n\nComputes the weighted sum for all rows in the table using weightColumn for the rest of the fields\n \n If the weight column is a floating point type, all result columns will be doubles. If the weight column is an\n integral type, all integral input columns will have long results and all floating point input columns will have\n double results.\n\n*Overload 1* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table" + "wsumBy": "**Incompatible overloads text - text from the first overload:**\n\nComputes the weighted sum for all rows in the table using weightColumn for the rest of the fields\n \n If the weight column is a floating point type, all result columns will be doubles. If the weight column is an\n integral type, all integral input columns will have long results and all floating point input columns will have\n double results.\n\n*Overload 1* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 2* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :return: io.deephaven.engine.table.Table\n \n*Overload 3* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :param groupByColumns: (java.lang.String...) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table\n \n*Overload 4* \n :param weightColumn: (java.lang.String) - the column to use for the weight\n :param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(java.util.Collection)\n :return: io.deephaven.engine.table.Table" }, "path": "io.deephaven.engine.table.impl.TableWithDefaults", "text": "Sub-interface to capture default methods rom Table.", diff --git a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/UncoalescedTable.json b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/UncoalescedTable.json index 7fde6add7d4..413aa8200a1 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/UncoalescedTable.json +++ b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/UncoalescedTable.json @@ -2,7 +2,7 @@ "className": "io.deephaven.engine.table.impl.UncoalescedTable", "methods": { "absSumBy": "Groups the data column according to groupByColumns and computes the sum of the absolute values for\n the rest of the fields\n\n:param groupByColumns: (io.deephaven.api.Selectable...) - The grouping columns as in Table.groupBy(java.util.Collection)\n:return: io.deephaven.engine.table.Table", - "aggBy": ":param aggregations: java.util.Collection\n:param groupByColumns: java.util.Collection\n:return: io.deephaven.engine.table.Table", + "aggAllBy": ":param spec: io.deephaven.api.agg.spec.AggSpec\n:param groupByColumns: io.deephaven.api.Selectable...\n:return: io.deephaven.engine.table.Table", "aj": "Looks up the columns in the rightTable that meet the match conditions in the columnsToMatch list. Matching is\n done exactly for the first n-1 columns and via a binary search for the last match pair. The columns of the\n original table are returned intact, together with the columns from rightTable defined in a comma separated list\n \"columnsToAdd\"\n\n:param rightTable: (io.deephaven.engine.table.Table) - The right side table on the join.\n:param columnsToMatch: (io.deephaven.engine.table.MatchPair[]) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n:param columnsToAdd: (io.deephaven.engine.table.MatchPair[]) - A comma separated list with the columns from the left side that need to be added to the right\n side as a result of the match.\n:param asOfMatchRule: io.deephaven.engine.table.Table.AsOfMatchRule\n:return: (io.deephaven.engine.table.Table) a new table joined according to the specification in columnsToMatch and columnsToAdd", "apply": "Applies a function to this table.\n \n This is useful if you have a reference to a table or a proxy and want to run a series of operations against the\n table without each individual operation resulting in an RMI.\n\nNote: Java generics information - \n\n:param function: (java.util.function.Function) - the function to run, its single argument will be this table\n:return: (R) the return value of function", "applyToAllBy": "Groups data according to groupByColumns and applies formulaColumn to each of columns not altered by the grouping\n operation. columnParamName is used as place-holder for the name of each column inside\n formulaColumn.\n\n:param formulaColumn: (java.lang.String) - Formula applied to each column\n:param columnParamName: (java.lang.String) - The parameter name used as a placeholder for each column\n:param groupByColumns: (java.util.Collection) - The grouping columns as in Table.groupBy(Collection)\n:return: io.deephaven.engine.table.Table", diff --git a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/by/AggregationFactory/AggregationElement.json b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/by/AggregationFactory/AggregationElement.json index c30a10a95be..4edd506c07f 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/by/AggregationFactory/AggregationElement.json +++ b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/by/AggregationFactory/AggregationElement.json @@ -1,12 +1,13 @@ { "className": "io.deephaven.engine.table.impl.by.AggregationFactory$AggregationElement", "methods": { - "convert": "**Incompatible overloads text - text from the first overload:**\n\nConverts and the aggregations, only collapsing multi aggregations into single\n elements, leaving singular aggregations as they are.\n\n \n Note: The results will preserve the intended order of the inputs.\n\n*Overload 1* \n :param aggregation: (io.deephaven.api.agg.Aggregation) - The aggregation\n :return: (java.util.List) A list of aggregation elements\n \n*Overload 2* \n :param aggregations: (java.util.Collection) - The aggregation\n :return: (java.util.List) A list of aggregation elements", + "convert": "Converts the aggregations leaving singular aggregations as they are.\n\n \n Note: The results will preserve the intended order of the inputs.\n\n:param aggregations: (java.util.Collection) - The aggregation\n:return: (java.util.List) A list of aggregation elements", "forRollup": ":return: io.deephaven.engine.table.impl.by.AggregationFactory.AggregationElement", "getMemoKey": ":return: io.deephaven.engine.table.impl.by.AggregationMemoKey", "getResultPairs": ":return: io.deephaven.engine.table.MatchPair[]", "getSourceColumns": ":return: java.lang.String[]", "getSpec": ":return: io.deephaven.engine.table.impl.by.AggregationSpec", + "of": "Converts an Aggregation to an AggregationFactory.AggregationElement.\n\n:param aggregation: (io.deephaven.api.agg.Aggregation) - The aggregation\n:return: (io.deephaven.engine.table.impl.by.AggregationFactory.AggregationElement) The aggregation element", "optimizeAndConvert": "Converts and optimizes the aggregations, collapsing relevant aggregations into single\n elements where applicable.\n\n \n Note: due to the optimization, the aggregation elements may not be in the same order as specified in\n aggregations.\n\n:param aggregations: (java.util.Collection) - The aggregation\n:return: (java.util.List) A list of aggregation elements" }, "path": "io.deephaven.engine.table.impl.by.AggregationFactory.AggregationElement", diff --git a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/by/AggregationSpecAdapter.json b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/by/AggregationSpecAdapter.json new file mode 100644 index 00000000000..b68ad03f094 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/by/AggregationSpecAdapter.json @@ -0,0 +1,10 @@ +{ + "className": "io.deephaven.engine.table.impl.by.AggregationSpecAdapter", + "methods": { + "of": ":param spec: io.deephaven.api.agg.spec.AggSpec\n:return: io.deephaven.engine.table.impl.by.AggregationSpec", + "out": ":return: io.deephaven.engine.table.impl.by.AggregationSpec", + "visit": "*Overload 1* \n :param absSum: io.deephaven.api.agg.spec.AggSpecAbsSum\n \n*Overload 2* \n :param countDistinct: io.deephaven.api.agg.spec.AggSpecCountDistinct\n \n*Overload 3* \n :param distinct: io.deephaven.api.agg.spec.AggSpecDistinct\n \n*Overload 4* \n :param group: io.deephaven.api.agg.spec.AggSpecGroup\n \n*Overload 5* \n :param avg: io.deephaven.api.agg.spec.AggSpecAvg\n \n*Overload 6* \n :param first: io.deephaven.api.agg.spec.AggSpecFirst\n \n*Overload 7* \n :param last: io.deephaven.api.agg.spec.AggSpecLast\n \n*Overload 8* \n :param max: io.deephaven.api.agg.spec.AggSpecMax\n \n*Overload 9* \n :param median: io.deephaven.api.agg.spec.AggSpecMedian\n \n*Overload 10* \n :param min: io.deephaven.api.agg.spec.AggSpecMin\n \n*Overload 11* \n :param pct: io.deephaven.api.agg.spec.AggSpecPercentile\n \n*Overload 12* \n :param sortedFirst: io.deephaven.api.agg.spec.AggSpecSortedFirst\n \n*Overload 13* \n :param sortedLast: io.deephaven.api.agg.spec.AggSpecSortedLast\n \n*Overload 14* \n :param std: io.deephaven.api.agg.spec.AggSpecStd\n \n*Overload 15* \n :param sum: io.deephaven.api.agg.spec.AggSpecSum\n \n*Overload 16* \n :param unique: io.deephaven.api.agg.spec.AggSpecUnique\n \n*Overload 17* \n :param wAvg: io.deephaven.api.agg.spec.AggSpecWAvg\n \n*Overload 18* \n :param wSum: io.deephaven.api.agg.spec.AggSpecWSum\n \n*Overload 19* \n :param var: io.deephaven.api.agg.spec.AggSpecVar" + }, + "path": "io.deephaven.engine.table.impl.by.AggregationSpecAdapter", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/select/Formula/FillContext.json b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/select/Formula/FillContext.json new file mode 100644 index 00000000000..da98fc5092c --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/select/Formula/FillContext.json @@ -0,0 +1,6 @@ +{ + "className": "io.deephaven.engine.table.impl.select.Formula$FillContext", + "methods": {}, + "path": "io.deephaven.engine.table.impl.select.Formula.FillContext", + "typeName": "interface" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/select/Formula/GetContext.json b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/select/Formula/GetContext.json new file mode 100644 index 00000000000..0c58fd46608 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/engine/table/impl/select/Formula/GetContext.json @@ -0,0 +1,6 @@ +{ + "className": "io.deephaven.engine.table.impl.select.Formula$GetContext", + "methods": {}, + "path": "io.deephaven.engine.table.impl.select.Formula.GetContext", + "typeName": "interface" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregateAllByTable.json b/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregateAllByTable.json new file mode 100644 index 00000000000..899842e5929 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregateAllByTable.json @@ -0,0 +1,12 @@ +{ + "className": "io.deephaven.qst.table.AggregateAllByTable", + "methods": { + "asAggregation": "Transform this agg-all-by table into an AggregationTable by constructing the necessary\n Aggregation from the spec() and tableColumns.\n\n:param tableColumns: (java.util.Collection) - the table columns\n:return: (io.deephaven.qst.table.AggregationTable) the aggregation table", + "builder": ":return: io.deephaven.qst.table.AggregateAllByTable.Builder", + "singleAggregation": "Computes the single-aggregation from the agg-all implied by the spec and groupByColumns by\n removing the groupByColumns and any extra columns implied by the spec.\n\n:param spec: (io.deephaven.api.agg.spec.AggSpec) - the spec\n:param groupByColumns: (java.util.Collection) - the group by columns\n:param tableColumns: (java.util.Collection) - the table columns\n:return: (java.util.Optional) the aggregation, if non-empty", + "spec": ":return: io.deephaven.api.agg.spec.AggSpec", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.qst.table.AggregateAllByTable", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregateAllByTable/Builder.json b/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregateAllByTable/Builder.json new file mode 100644 index 00000000000..8007b7a3ac4 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregateAllByTable/Builder.json @@ -0,0 +1,12 @@ +{ + "className": "io.deephaven.qst.table.AggregateAllByTable$Builder", + "methods": { + "addAllGroupByColumns": ":param elements: java.lang.Iterable\n:return: io.deephaven.qst.table.AggregateAllByTable.Builder", + "addGroupByColumns": "*Overload 1* \n :param element: io.deephaven.api.Selectable\n :return: io.deephaven.qst.table.AggregateAllByTable.Builder\n \n*Overload 2* \n :param elements: io.deephaven.api.Selectable...\n :return: io.deephaven.qst.table.AggregateAllByTable.Builder", + "build": ":return: io.deephaven.qst.table.AggregateAllByTable", + "parent": ":param parent: io.deephaven.qst.table.TableSpec\n:return: io.deephaven.qst.table.AggregateAllByTable.Builder", + "spec": ":param spec: io.deephaven.api.agg.spec.AggSpec\n:return: io.deephaven.qst.table.AggregateAllByTable.Builder" + }, + "path": "io.deephaven.qst.table.AggregateAllByTable.Builder", + "typeName": "interface" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregationTable.json b/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregationTable.json index 72b26008994..98163d69bc7 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregationTable.json +++ b/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregationTable.json @@ -3,8 +3,6 @@ "methods": { "aggregations": ":return: java.util.List", "builder": ":return: io.deephaven.qst.table.AggregationTable.Builder", - "columns": ":return: java.util.List", - "parent": ":return: io.deephaven.qst.table.TableSpec", "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" }, "path": "io.deephaven.qst.table.AggregationTable", diff --git a/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregationTable/Builder.json b/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregationTable/Builder.json index be0a1ed67e6..66f5a5197df 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregationTable/Builder.json +++ b/Integrations/python/deephaven/doc/io/deephaven/qst/table/AggregationTable/Builder.json @@ -3,8 +3,8 @@ "methods": { "addAggregations": "*Overload 1* \n :param element: io.deephaven.api.agg.Aggregation\n :return: io.deephaven.qst.table.AggregationTable.Builder\n \n*Overload 2* \n :param elements: io.deephaven.api.agg.Aggregation...\n :return: io.deephaven.qst.table.AggregationTable.Builder", "addAllAggregations": ":param elements: java.lang.Iterable\n:return: io.deephaven.qst.table.AggregationTable.Builder", - "addAllColumns": ":param elements: java.lang.Iterable\n:return: io.deephaven.qst.table.AggregationTable.Builder", - "addColumns": "*Overload 1* \n :param element: io.deephaven.api.Selectable\n :return: io.deephaven.qst.table.AggregationTable.Builder\n \n*Overload 2* \n :param elements: io.deephaven.api.Selectable...\n :return: io.deephaven.qst.table.AggregationTable.Builder", + "addAllGroupByColumns": ":param elements: java.lang.Iterable\n:return: io.deephaven.qst.table.AggregationTable.Builder", + "addGroupByColumns": "*Overload 1* \n :param element: io.deephaven.api.Selectable\n :return: io.deephaven.qst.table.AggregationTable.Builder\n \n*Overload 2* \n :param elements: io.deephaven.api.Selectable...\n :return: io.deephaven.qst.table.AggregationTable.Builder", "build": ":return: io.deephaven.qst.table.AggregationTable", "parent": ":param parent: io.deephaven.qst.table.TableSpec\n:return: io.deephaven.qst.table.AggregationTable.Builder" }, diff --git a/Integrations/python/deephaven/doc/io/deephaven/qst/table/ByTableBase.json b/Integrations/python/deephaven/doc/io/deephaven/qst/table/ByTableBase.json index dae21ce744a..58d70c4fb0d 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/qst/table/ByTableBase.json +++ b/Integrations/python/deephaven/doc/io/deephaven/qst/table/ByTableBase.json @@ -1,7 +1,8 @@ { "className": "io.deephaven.qst.table.ByTableBase", "methods": { - "columns": ":return: java.util.List" + "groupByColumns": ":return: java.util.List", + "parent": ":return: io.deephaven.qst.table.TableSpec" }, "path": "io.deephaven.qst.table.ByTableBase", "typeName": "class" diff --git a/Integrations/python/deephaven/doc/io/deephaven/qst/table/FullAggregationTable.json b/Integrations/python/deephaven/doc/io/deephaven/qst/table/FullAggregationTable.json new file mode 100644 index 00000000000..32c304f55a6 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/qst/table/FullAggregationTable.json @@ -0,0 +1,10 @@ +{ + "className": "io.deephaven.qst.table.FullAggregationTable", + "methods": { + "builder": ":return: io.deephaven.qst.table.FullAggregationTable.Builder", + "key": ":return: io.deephaven.api.agg.key.Key", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.qst.table.FullAggregationTable", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/qst/table/FullAggregationTable/Builder.json b/Integrations/python/deephaven/doc/io/deephaven/qst/table/FullAggregationTable/Builder.json new file mode 100644 index 00000000000..535d4a7b1f3 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/qst/table/FullAggregationTable/Builder.json @@ -0,0 +1,12 @@ +{ + "className": "io.deephaven.qst.table.FullAggregationTable$Builder", + "methods": { + "addAllColumns": ":param elements: java.lang.Iterable\n:return: io.deephaven.qst.table.FullAggregationTable.Builder", + "addColumns": "*Overload 1* \n :param element: io.deephaven.api.Selectable\n :return: io.deephaven.qst.table.FullAggregationTable.Builder\n \n*Overload 2* \n :param elements: io.deephaven.api.Selectable...\n :return: io.deephaven.qst.table.FullAggregationTable.Builder", + "build": ":return: io.deephaven.qst.table.FullAggregationTable", + "key": ":param key: io.deephaven.api.agg.key.Key\n:return: io.deephaven.qst.table.FullAggregationTable.Builder", + "parent": ":param parent: io.deephaven.qst.table.TableSpec\n:return: io.deephaven.qst.table.FullAggregationTable.Builder" + }, + "path": "io.deephaven.qst.table.FullAggregationTable.Builder", + "typeName": "interface" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/qst/table/ParentsVisitor.json b/Integrations/python/deephaven/doc/io/deephaven/qst/table/ParentsVisitor.json index ebd8ca937a7..02cff16790f 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/qst/table/ParentsVisitor.json +++ b/Integrations/python/deephaven/doc/io/deephaven/qst/table/ParentsVisitor.json @@ -8,7 +8,7 @@ "postOrderWalk": "**Incompatible overloads text - text from the first overload:**\n\nInvoke the consumer for each table in the de-duplicated, post-order walk from tables.\n\n \n Post-order means that for any given table, the table's dependencies will come before the table itself. There may\n be multiple valid post-orderings; callers should not rely on a specific post-ordering.\n\n*Overload 1* \n :param tables: (java.lang.Iterable) - the tables\n :param consumer: (java.util.function.Consumer) - the consumer\n \n*Overload 2* \n :param tables: (java.lang.Iterable) - the tables\n :param visitor: (io.deephaven.qst.table.TableSpec.Visitor) - the visitor", "reachable": "Create a reachable set from tables, including tables. May be in any order.\n\n:param tables: (java.lang.Iterable) - the tables\n:return: (java.util.Set) the reachable set", "search": "Performs a search for a table that satisfies searchPredicate. Will follow the dependencies of\n initialInputs. Tables that match excludePaths will not be returned, and will not have its\n dependencies added to the search.\n\n \n Note: a dependency of a table that matches excludePaths will be returned if there is any path to that\n dependency that doesn't go through excludePaths.\n\n:param initialInputs: java.lang.Iterable\n:param excludePaths: java.util.function.Predicate\n:param searchPredicate: java.util.function.Predicate\n:return: java.util.Optional", - "visit": "*Overload 1* \n :param emptyTable: io.deephaven.qst.table.EmptyTable\n \n*Overload 2* \n :param newTable: io.deephaven.qst.table.NewTable\n \n*Overload 3* \n :param timeTable: io.deephaven.qst.table.TimeTable\n \n*Overload 4* \n :param mergeTable: io.deephaven.qst.table.MergeTable\n \n*Overload 5* \n :param headTable: io.deephaven.qst.table.HeadTable\n \n*Overload 6* \n :param tailTable: io.deephaven.qst.table.TailTable\n \n*Overload 7* \n :param reverseTable: io.deephaven.qst.table.ReverseTable\n \n*Overload 8* \n :param sortTable: io.deephaven.qst.table.SortTable\n \n*Overload 9* \n :param snapshotTable: io.deephaven.qst.table.SnapshotTable\n \n*Overload 10* \n :param whereTable: io.deephaven.qst.table.WhereTable\n \n*Overload 11* \n :param whereInTable: io.deephaven.qst.table.WhereInTable\n \n*Overload 12* \n :param whereNotInTable: io.deephaven.qst.table.WhereNotInTable\n \n*Overload 13* \n :param naturalJoinTable: io.deephaven.qst.table.NaturalJoinTable\n \n*Overload 14* \n :param exactJoinTable: io.deephaven.qst.table.ExactJoinTable\n \n*Overload 15* \n :param joinTable: io.deephaven.qst.table.JoinTable\n \n*Overload 16* \n :param aj: io.deephaven.qst.table.AsOfJoinTable\n \n*Overload 17* \n :param raj: io.deephaven.qst.table.ReverseAsOfJoinTable\n \n*Overload 18* \n :param viewTable: io.deephaven.qst.table.ViewTable\n \n*Overload 19* \n :param selectTable: io.deephaven.qst.table.SelectTable\n \n*Overload 20* \n :param updateViewTable: io.deephaven.qst.table.UpdateViewTable\n \n*Overload 21* \n :param updateTable: io.deephaven.qst.table.UpdateTable\n \n*Overload 22* \n :param groupByTable: io.deephaven.qst.table.GroupByTable\n \n*Overload 23* \n :param aggregationTable: io.deephaven.qst.table.AggregationTable\n \n*Overload 24* \n :param ticketTable: io.deephaven.qst.table.TicketTable\n \n*Overload 25* \n :param inputTable: io.deephaven.qst.table.InputTable" + "visit": "*Overload 1* \n :param emptyTable: io.deephaven.qst.table.EmptyTable\n \n*Overload 2* \n :param newTable: io.deephaven.qst.table.NewTable\n \n*Overload 3* \n :param timeTable: io.deephaven.qst.table.TimeTable\n \n*Overload 4* \n :param mergeTable: io.deephaven.qst.table.MergeTable\n \n*Overload 5* \n :param headTable: io.deephaven.qst.table.HeadTable\n \n*Overload 6* \n :param tailTable: io.deephaven.qst.table.TailTable\n \n*Overload 7* \n :param reverseTable: io.deephaven.qst.table.ReverseTable\n \n*Overload 8* \n :param sortTable: io.deephaven.qst.table.SortTable\n \n*Overload 9* \n :param snapshotTable: io.deephaven.qst.table.SnapshotTable\n \n*Overload 10* \n :param whereTable: io.deephaven.qst.table.WhereTable\n \n*Overload 11* \n :param whereInTable: io.deephaven.qst.table.WhereInTable\n \n*Overload 12* \n :param whereNotInTable: io.deephaven.qst.table.WhereNotInTable\n \n*Overload 13* \n :param naturalJoinTable: io.deephaven.qst.table.NaturalJoinTable\n \n*Overload 14* \n :param exactJoinTable: io.deephaven.qst.table.ExactJoinTable\n \n*Overload 15* \n :param joinTable: io.deephaven.qst.table.JoinTable\n \n*Overload 16* \n :param aj: io.deephaven.qst.table.AsOfJoinTable\n \n*Overload 17* \n :param raj: io.deephaven.qst.table.ReverseAsOfJoinTable\n \n*Overload 18* \n :param viewTable: io.deephaven.qst.table.ViewTable\n \n*Overload 19* \n :param selectTable: io.deephaven.qst.table.SelectTable\n \n*Overload 20* \n :param updateViewTable: io.deephaven.qst.table.UpdateViewTable\n \n*Overload 21* \n :param updateTable: io.deephaven.qst.table.UpdateTable\n \n*Overload 22* \n :param aggAllByTable: io.deephaven.qst.table.AggregateAllByTable\n \n*Overload 23* \n :param aggregationTable: io.deephaven.qst.table.AggregationTable\n \n*Overload 24* \n :param ticketTable: io.deephaven.qst.table.TicketTable\n \n*Overload 25* \n :param inputTable: io.deephaven.qst.table.InputTable" }, "path": "io.deephaven.qst.table.ParentsVisitor", "text": "A visitor that returns the parent tables (if any) of the given table.", diff --git a/Integrations/python/deephaven/doc/io/deephaven/qst/table/SingleAggregationTable.json b/Integrations/python/deephaven/doc/io/deephaven/qst/table/SingleAggregationTable.json new file mode 100644 index 00000000000..922997dff05 --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/qst/table/SingleAggregationTable.json @@ -0,0 +1,10 @@ +{ + "className": "io.deephaven.qst.table.SingleAggregationTable", + "methods": { + "builder": ":return: io.deephaven.qst.table.SingleAggregationTable.Builder", + "key": ":return: io.deephaven.api.agg.key.Key", + "walk": "Note: Java generics information - \n\n:param visitor: V\n:return: V" + }, + "path": "io.deephaven.qst.table.SingleAggregationTable", + "typeName": "class" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/qst/table/SingleAggregationTable/Builder.json b/Integrations/python/deephaven/doc/io/deephaven/qst/table/SingleAggregationTable/Builder.json new file mode 100644 index 00000000000..cfa1548f4df --- /dev/null +++ b/Integrations/python/deephaven/doc/io/deephaven/qst/table/SingleAggregationTable/Builder.json @@ -0,0 +1,12 @@ +{ + "className": "io.deephaven.qst.table.SingleAggregationTable$Builder", + "methods": { + "addAllColumns": ":param elements: java.lang.Iterable\n:return: io.deephaven.qst.table.SingleAggregationTable.Builder", + "addColumns": "*Overload 1* \n :param element: io.deephaven.api.Selectable\n :return: io.deephaven.qst.table.SingleAggregationTable.Builder\n \n*Overload 2* \n :param elements: io.deephaven.api.Selectable...\n :return: io.deephaven.qst.table.SingleAggregationTable.Builder", + "build": ":return: io.deephaven.qst.table.SingleAggregationTable", + "key": ":param key: io.deephaven.api.agg.key.Key\n:return: io.deephaven.qst.table.SingleAggregationTable.Builder", + "parent": ":param parent: io.deephaven.qst.table.TableSpec\n:return: io.deephaven.qst.table.SingleAggregationTable.Builder" + }, + "path": "io.deephaven.qst.table.SingleAggregationTable.Builder", + "typeName": "interface" +} \ No newline at end of file diff --git a/Integrations/python/deephaven/doc/io/deephaven/qst/table/TableBase.json b/Integrations/python/deephaven/doc/io/deephaven/qst/table/TableBase.json index b2af6d7a6e8..757833828db 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/qst/table/TableBase.json +++ b/Integrations/python/deephaven/doc/io/deephaven/qst/table/TableBase.json @@ -1,10 +1,11 @@ { "className": "io.deephaven.qst.table.TableBase", "methods": { + "aggAllBy": "*Overload 1* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :return: io.deephaven.qst.table.AggregateAllByTable\n \n*Overload 2* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: java.lang.String...\n :return: io.deephaven.qst.table.AggregateAllByTable\n \n*Overload 3* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: io.deephaven.api.Selectable...\n :return: io.deephaven.qst.table.AggregateAllByTable\n \n*Overload 4* \n :param spec: io.deephaven.api.agg.spec.AggSpec\n :param groupByColumns: java.util.Collection\n :return: io.deephaven.qst.table.AggregateAllByTable", "aggBy": "*Overload 1* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :return: io.deephaven.qst.table.AggregationTable\n \n*Overload 2* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :param groupByColumns: java.lang.String...\n :return: io.deephaven.qst.table.AggregationTable\n \n*Overload 3* \n :param aggregation: io.deephaven.api.agg.Aggregation\n :param groupByColumns: java.util.Collection\n :return: io.deephaven.qst.table.AggregationTable\n \n*Overload 4* \n :param aggregations: java.util.Collection\n :return: io.deephaven.qst.table.AggregationTable\n \n*Overload 5* \n :param aggregations: java.util.Collection\n :param groupByColumns: java.lang.String...\n :return: io.deephaven.qst.table.AggregationTable\n \n*Overload 6* \n :param aggregations: java.util.Collection\n :param groupByColumns: java.util.Collection\n :return: io.deephaven.qst.table.AggregationTable", "aj": "**Incompatible overloads text - text from the first overload:**\n\nPerform an as-of join with the rightTable.\n\n \n Delegates to TableOperations.aj(Object, Collection, Collection, AsOfJoinRule).\n\n*Overload 1* \n :param rightTable: (io.deephaven.qst.table.TableSpec) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\").\n :return: (io.deephaven.qst.table.AsOfJoinTable) a new table joined according to the specification in columnsToMatch\n \n*Overload 2* \n :param rightTable: (io.deephaven.qst.table.TableSpec) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\").\n :param columnsToAdd: (java.lang.String) - A comma separated list with the columns from the left side that need to be added to the right\n side as a result of the match.\n :return: (io.deephaven.qst.table.AsOfJoinTable) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 3* \n :param rightTable: (io.deephaven.qst.table.TableSpec) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :return: (io.deephaven.qst.table.AsOfJoinTable) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 4* \n :param rightTable: (io.deephaven.qst.table.TableSpec) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :param asOfJoinRule: (io.deephaven.api.AsOfJoinRule) - The binary search operator for the last match pair.\n :return: (io.deephaven.qst.table.AsOfJoinTable) a new table joined according to the specification in columnsToMatch and columnsToAdd", "exactJoin": "**Incompatible overloads text - text from the first overload:**\n\nPerform an exact-join with the rightTable.\n\n \n Delegates to TableOperations.exactJoin(Object, Collection, Collection).\n\n*Overload 1* \n :param rightTable: (io.deephaven.qst.table.TableSpec) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :return: (io.deephaven.qst.table.ExactJoinTable) the exact-joined table\n \n*Overload 2* \n :param rightTable: (io.deephaven.qst.table.TableSpec) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :return: (io.deephaven.qst.table.ExactJoinTable) the exact-joined table\n \n*Overload 3* \n :param rightTable: (io.deephaven.qst.table.TableSpec) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :param columnsToAdd: (java.lang.String) - A comma separated list with the columns from the right side that need to be added to the left\n side as a result of the match.\n :return: (io.deephaven.qst.table.ExactJoinTable) the exact-joined table", - "groupBy": "*Overload 1* \n :return: io.deephaven.qst.table.GroupByTable\n \n*Overload 2* \n :param groupByColumns: java.lang.String...\n :return: io.deephaven.qst.table.GroupByTable\n \n*Overload 3* \n :param groupByColumns: java.util.Collection\n :return: io.deephaven.qst.table.GroupByTable", + "groupBy": "*Overload 1* \n :return: io.deephaven.qst.table.AggregateAllByTable\n \n*Overload 2* \n :param groupByColumns: java.lang.String...\n :return: io.deephaven.qst.table.AggregateAllByTable\n \n*Overload 3* \n :param groupByColumns: java.util.Collection\n :return: io.deephaven.qst.table.AggregateAllByTable", "head": ":param size: long\n:return: io.deephaven.qst.table.HeadTable", "join": "**Incompatible overloads text - text from the first overload:**\n\nPerform a cross join with the rightTable.\n\n \n Delegates to TableOperations.join(Object, Collection, Collection, int).\n\n*Overload 1* \n :param rightTable: (io.deephaven.qst.table.TableSpec) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :return: (io.deephaven.qst.table.JoinTable) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 2* \n :param rightTable: (io.deephaven.qst.table.TableSpec) - The right side table on the join.\n :param columnsToMatch: (java.util.Collection) - The match pair conditions.\n :param columnsToAdd: (java.util.Collection) - The columns from the right side that need to be added to the left side as a result of the\n match.\n :param reserveBits: (int) - The number of bits to reserve for rightTable groups.\n :return: (io.deephaven.qst.table.JoinTable) a new table joined according to the specification in columnsToMatch and columnsToAdd\n \n*Overload 3* \n :param rightTable: (io.deephaven.qst.table.TableSpec) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :return: (io.deephaven.qst.table.JoinTable) a new table joined according to the specification in columnsToMatch and includes all non-key-columns from\n the right table\n \n*Overload 4* \n :param rightTable: (io.deephaven.qst.table.TableSpec) - The right side table on the join.\n :param columnsToMatch: (java.lang.String) - A comma separated list of match conditions (\"leftColumn=rightColumn\" or\n \"columnFoundInBoth\")\n :param columnsToAdd: (java.lang.String) - A comma separated list with the columns from the right side that need to be added to the left\n side as a result of the match.\n :return: (io.deephaven.qst.table.JoinTable) a new table joined according to the specification in columnsToMatch and columnsToAdd", "logic": ":return: io.deephaven.qst.TableCreationLogic", diff --git a/Integrations/python/deephaven/doc/io/deephaven/qst/table/TableSpec/Visitor.json b/Integrations/python/deephaven/doc/io/deephaven/qst/table/TableSpec/Visitor.json index 9f6ba45cca5..5b7c1e8870b 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/qst/table/TableSpec/Visitor.json +++ b/Integrations/python/deephaven/doc/io/deephaven/qst/table/TableSpec/Visitor.json @@ -1,7 +1,7 @@ { "className": "io.deephaven.qst.table.TableSpec$Visitor", "methods": { - "visit": "*Overload 1* \n :param emptyTable: io.deephaven.qst.table.EmptyTable\n \n*Overload 2* \n :param newTable: io.deephaven.qst.table.NewTable\n \n*Overload 3* \n :param timeTable: io.deephaven.qst.table.TimeTable\n \n*Overload 4* \n :param mergeTable: io.deephaven.qst.table.MergeTable\n \n*Overload 5* \n :param headTable: io.deephaven.qst.table.HeadTable\n \n*Overload 6* \n :param tailTable: io.deephaven.qst.table.TailTable\n \n*Overload 7* \n :param reverseTable: io.deephaven.qst.table.ReverseTable\n \n*Overload 8* \n :param sortTable: io.deephaven.qst.table.SortTable\n \n*Overload 9* \n :param snapshotTable: io.deephaven.qst.table.SnapshotTable\n \n*Overload 10* \n :param whereTable: io.deephaven.qst.table.WhereTable\n \n*Overload 11* \n :param whereInTable: io.deephaven.qst.table.WhereInTable\n \n*Overload 12* \n :param whereNotInTable: io.deephaven.qst.table.WhereNotInTable\n \n*Overload 13* \n :param naturalJoinTable: io.deephaven.qst.table.NaturalJoinTable\n \n*Overload 14* \n :param exactJoinTable: io.deephaven.qst.table.ExactJoinTable\n \n*Overload 15* \n :param joinTable: io.deephaven.qst.table.JoinTable\n \n*Overload 16* \n :param aj: io.deephaven.qst.table.AsOfJoinTable\n \n*Overload 17* \n :param raj: io.deephaven.qst.table.ReverseAsOfJoinTable\n \n*Overload 18* \n :param viewTable: io.deephaven.qst.table.ViewTable\n \n*Overload 19* \n :param selectTable: io.deephaven.qst.table.SelectTable\n \n*Overload 20* \n :param updateViewTable: io.deephaven.qst.table.UpdateViewTable\n \n*Overload 21* \n :param updateTable: io.deephaven.qst.table.UpdateTable\n \n*Overload 22* \n :param groupByTable: io.deephaven.qst.table.GroupByTable\n \n*Overload 23* \n :param aggregationTable: io.deephaven.qst.table.AggregationTable\n \n*Overload 24* \n :param ticketTable: io.deephaven.qst.table.TicketTable\n \n*Overload 25* \n :param inputTable: io.deephaven.qst.table.InputTable" + "visit": "*Overload 1* \n :param emptyTable: io.deephaven.qst.table.EmptyTable\n \n*Overload 2* \n :param newTable: io.deephaven.qst.table.NewTable\n \n*Overload 3* \n :param timeTable: io.deephaven.qst.table.TimeTable\n \n*Overload 4* \n :param mergeTable: io.deephaven.qst.table.MergeTable\n \n*Overload 5* \n :param headTable: io.deephaven.qst.table.HeadTable\n \n*Overload 6* \n :param tailTable: io.deephaven.qst.table.TailTable\n \n*Overload 7* \n :param reverseTable: io.deephaven.qst.table.ReverseTable\n \n*Overload 8* \n :param sortTable: io.deephaven.qst.table.SortTable\n \n*Overload 9* \n :param snapshotTable: io.deephaven.qst.table.SnapshotTable\n \n*Overload 10* \n :param whereTable: io.deephaven.qst.table.WhereTable\n \n*Overload 11* \n :param whereInTable: io.deephaven.qst.table.WhereInTable\n \n*Overload 12* \n :param whereNotInTable: io.deephaven.qst.table.WhereNotInTable\n \n*Overload 13* \n :param naturalJoinTable: io.deephaven.qst.table.NaturalJoinTable\n \n*Overload 14* \n :param exactJoinTable: io.deephaven.qst.table.ExactJoinTable\n \n*Overload 15* \n :param joinTable: io.deephaven.qst.table.JoinTable\n \n*Overload 16* \n :param aj: io.deephaven.qst.table.AsOfJoinTable\n \n*Overload 17* \n :param raj: io.deephaven.qst.table.ReverseAsOfJoinTable\n \n*Overload 18* \n :param viewTable: io.deephaven.qst.table.ViewTable\n \n*Overload 19* \n :param selectTable: io.deephaven.qst.table.SelectTable\n \n*Overload 20* \n :param updateViewTable: io.deephaven.qst.table.UpdateViewTable\n \n*Overload 21* \n :param updateTable: io.deephaven.qst.table.UpdateTable\n \n*Overload 22* \n :param aggregationTable: io.deephaven.qst.table.AggregationTable\n \n*Overload 23* \n :param aggAllByTable: io.deephaven.qst.table.AggregateAllByTable\n \n*Overload 24* \n :param ticketTable: io.deephaven.qst.table.TicketTable\n \n*Overload 25* \n :param inputTable: io.deephaven.qst.table.InputTable" }, "path": "io.deephaven.qst.table.TableSpec.Visitor", "typeName": "interface" diff --git a/Integrations/python/deephaven/doc/io/deephaven/qst/table/TableVisitorGeneric.json b/Integrations/python/deephaven/doc/io/deephaven/qst/table/TableVisitorGeneric.json index d8603581227..fbe5b1c8d79 100644 --- a/Integrations/python/deephaven/doc/io/deephaven/qst/table/TableVisitorGeneric.json +++ b/Integrations/python/deephaven/doc/io/deephaven/qst/table/TableVisitorGeneric.json @@ -2,7 +2,7 @@ "className": "io.deephaven.qst.table.TableVisitorGeneric", "methods": { "accept": ":param t: io.deephaven.qst.table.TableSpec", - "visit": "*Overload 1* \n :param emptyTable: io.deephaven.qst.table.EmptyTable\n \n*Overload 2* \n :param newTable: io.deephaven.qst.table.NewTable\n \n*Overload 3* \n :param timeTable: io.deephaven.qst.table.TimeTable\n \n*Overload 4* \n :param mergeTable: io.deephaven.qst.table.MergeTable\n \n*Overload 5* \n :param headTable: io.deephaven.qst.table.HeadTable\n \n*Overload 6* \n :param tailTable: io.deephaven.qst.table.TailTable\n \n*Overload 7* \n :param reverseTable: io.deephaven.qst.table.ReverseTable\n \n*Overload 8* \n :param sortTable: io.deephaven.qst.table.SortTable\n \n*Overload 9* \n :param snapshotTable: io.deephaven.qst.table.SnapshotTable\n \n*Overload 10* \n :param whereTable: io.deephaven.qst.table.WhereTable\n \n*Overload 11* \n :param whereInTable: io.deephaven.qst.table.WhereInTable\n \n*Overload 12* \n :param whereNotInTable: io.deephaven.qst.table.WhereNotInTable\n \n*Overload 13* \n :param naturalJoinTable: io.deephaven.qst.table.NaturalJoinTable\n \n*Overload 14* \n :param exactJoinTable: io.deephaven.qst.table.ExactJoinTable\n \n*Overload 15* \n :param joinTable: io.deephaven.qst.table.JoinTable\n \n*Overload 16* \n :param aj: io.deephaven.qst.table.AsOfJoinTable\n \n*Overload 17* \n :param raj: io.deephaven.qst.table.ReverseAsOfJoinTable\n \n*Overload 18* \n :param viewTable: io.deephaven.qst.table.ViewTable\n \n*Overload 19* \n :param selectTable: io.deephaven.qst.table.SelectTable\n \n*Overload 20* \n :param updateViewTable: io.deephaven.qst.table.UpdateViewTable\n \n*Overload 21* \n :param updateTable: io.deephaven.qst.table.UpdateTable\n \n*Overload 22* \n :param groupByTable: io.deephaven.qst.table.GroupByTable\n \n*Overload 23* \n :param aggregationTable: io.deephaven.qst.table.AggregationTable\n \n*Overload 24* \n :param ticketTable: io.deephaven.qst.table.TicketTable\n \n*Overload 25* \n :param inputTable: io.deephaven.qst.table.InputTable" + "visit": "*Overload 1* \n :param emptyTable: io.deephaven.qst.table.EmptyTable\n \n*Overload 2* \n :param newTable: io.deephaven.qst.table.NewTable\n \n*Overload 3* \n :param timeTable: io.deephaven.qst.table.TimeTable\n \n*Overload 4* \n :param mergeTable: io.deephaven.qst.table.MergeTable\n \n*Overload 5* \n :param headTable: io.deephaven.qst.table.HeadTable\n \n*Overload 6* \n :param tailTable: io.deephaven.qst.table.TailTable\n \n*Overload 7* \n :param reverseTable: io.deephaven.qst.table.ReverseTable\n \n*Overload 8* \n :param sortTable: io.deephaven.qst.table.SortTable\n \n*Overload 9* \n :param snapshotTable: io.deephaven.qst.table.SnapshotTable\n \n*Overload 10* \n :param whereTable: io.deephaven.qst.table.WhereTable\n \n*Overload 11* \n :param whereInTable: io.deephaven.qst.table.WhereInTable\n \n*Overload 12* \n :param whereNotInTable: io.deephaven.qst.table.WhereNotInTable\n \n*Overload 13* \n :param naturalJoinTable: io.deephaven.qst.table.NaturalJoinTable\n \n*Overload 14* \n :param exactJoinTable: io.deephaven.qst.table.ExactJoinTable\n \n*Overload 15* \n :param joinTable: io.deephaven.qst.table.JoinTable\n \n*Overload 16* \n :param aj: io.deephaven.qst.table.AsOfJoinTable\n \n*Overload 17* \n :param raj: io.deephaven.qst.table.ReverseAsOfJoinTable\n \n*Overload 18* \n :param viewTable: io.deephaven.qst.table.ViewTable\n \n*Overload 19* \n :param selectTable: io.deephaven.qst.table.SelectTable\n \n*Overload 20* \n :param updateViewTable: io.deephaven.qst.table.UpdateViewTable\n \n*Overload 21* \n :param updateTable: io.deephaven.qst.table.UpdateTable\n \n*Overload 22* \n :param aggAllByTable: io.deephaven.qst.table.AggregateAllByTable\n \n*Overload 23* \n :param aggregationTable: io.deephaven.qst.table.AggregationTable\n \n*Overload 24* \n :param ticketTable: io.deephaven.qst.table.TicketTable\n \n*Overload 25* \n :param inputTable: io.deephaven.qst.table.InputTable" }, "path": "io.deephaven.qst.table.TableVisitorGeneric", "typeName": "class" diff --git a/engine/api/src/main/java/io/deephaven/engine/table/Table.java b/engine/api/src/main/java/io/deephaven/engine/table/Table.java index ef14ed1cdff..d9d381b01e1 100644 --- a/engine/api/src/main/java/io/deephaven/engine/table/Table.java +++ b/engine/api/src/main/java/io/deephaven/engine/table/Table.java @@ -6,6 +6,7 @@ import io.deephaven.api.*; import io.deephaven.api.agg.Aggregation; +import io.deephaven.api.agg.spec.AggSpec; import io.deephaven.api.filter.Filter; import io.deephaven.engine.liveness.LivenessNode; import io.deephaven.engine.rowset.TrackingRowSet; @@ -957,6 +958,22 @@ Table join(Table rightTable, Collection columnsToMatch, @ConcurrentMethod Table groupBy(); + @Override + @ConcurrentMethod + Table aggAllBy(AggSpec spec); + + @Override + @ConcurrentMethod + Table aggAllBy(AggSpec spec, String... groupByColumns); + + @Override + @ConcurrentMethod + Table aggAllBy(AggSpec spec, Selectable... groupByColumns); + + @Override + @ConcurrentMethod + Table aggAllBy(AggSpec spec, Collection groupByColumns); + @Override @ConcurrentMethod Table aggBy(Aggregation aggregation); @@ -1245,6 +1262,7 @@ Table join(Table rightTable, Collection columnsToMatch, *

* When the input table is empty, zero output rows are produced. */ + @ConcurrentMethod Table stdBy(); /** @@ -1279,6 +1297,7 @@ Table join(Table rightTable, Collection columnsToMatch, *

* When the input table is empty, zero output rows are produced. */ + @ConcurrentMethod Table varBy(); /** diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/AggAllByCopyAttributes.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/AggAllByCopyAttributes.java new file mode 100644 index 00000000000..55ed51c3ff7 --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/AggAllByCopyAttributes.java @@ -0,0 +1,98 @@ +package io.deephaven.engine.table.impl; + +import io.deephaven.api.agg.spec.AggSpec; +import io.deephaven.api.agg.spec.AggSpecAbsSum; +import io.deephaven.api.agg.spec.AggSpecAvg; +import io.deephaven.api.agg.spec.AggSpecCountDistinct; +import io.deephaven.api.agg.spec.AggSpecDistinct; +import io.deephaven.api.agg.spec.AggSpecFirst; +import io.deephaven.api.agg.spec.AggSpecGroup; +import io.deephaven.api.agg.spec.AggSpecLast; +import io.deephaven.api.agg.spec.AggSpecMax; +import io.deephaven.api.agg.spec.AggSpecMedian; +import io.deephaven.api.agg.spec.AggSpecMin; +import io.deephaven.api.agg.spec.AggSpecPercentile; +import io.deephaven.api.agg.spec.AggSpecSortedFirst; +import io.deephaven.api.agg.spec.AggSpecSortedLast; +import io.deephaven.api.agg.spec.AggSpecStd; +import io.deephaven.api.agg.spec.AggSpecSum; +import io.deephaven.api.agg.spec.AggSpecUnique; +import io.deephaven.api.agg.spec.AggSpecVar; +import io.deephaven.api.agg.spec.AggSpecWAvg; +import io.deephaven.api.agg.spec.AggSpecWSum; +import io.deephaven.engine.table.Table; +import io.deephaven.engine.table.impl.BaseTable.CopyAttributeOperation; + +import java.util.Objects; + +class AggAllByCopyAttributes implements AggSpec.Visitor { + + private final BaseTable parent; + private final Table result; + + public AggAllByCopyAttributes(BaseTable parent, Table result) { + this.parent = Objects.requireNonNull(parent); + this.result = Objects.requireNonNull(result); + } + + @Override + public void visit(AggSpecAbsSum absSum) {} + + @Override + public void visit(AggSpecCountDistinct countDistinct) {} + + @Override + public void visit(AggSpecDistinct distinct) {} + + @Override + public void visit(AggSpecGroup group) {} + + @Override + public void visit(AggSpecAvg avg) {} + + @Override + public void visit(AggSpecFirst first) { + parent.copyAttributes(result, CopyAttributeOperation.FirstBy); + } + + @Override + public void visit(AggSpecLast last) { + parent.copyAttributes(result, CopyAttributeOperation.LastBy); + } + + @Override + public void visit(AggSpecMax max) {} + + @Override + public void visit(AggSpecMedian median) {} + + @Override + public void visit(AggSpecMin min) {} + + @Override + public void visit(AggSpecPercentile pct) {} + + @Override + public void visit(AggSpecSortedFirst sortedFirst) {} + + @Override + public void visit(AggSpecSortedLast sortedLast) {} + + @Override + public void visit(AggSpecStd std) {} + + @Override + public void visit(AggSpecSum sum) {} + + @Override + public void visit(AggSpecUnique unique) {} + + @Override + public void visit(AggSpecWAvg wAvg) {} + + @Override + public void visit(AggSpecWSum wSum) {} + + @Override + public void visit(AggSpecVar var) {} +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/BaseTable.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/BaseTable.java index 7449c56c61b..ceaaea47138 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/BaseTable.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/BaseTable.java @@ -6,6 +6,8 @@ import com.google.common.collect.BiMap; import com.google.common.collect.HashBiMap; +import io.deephaven.api.Selectable; +import io.deephaven.api.agg.Aggregation; import io.deephaven.base.Base64; import io.deephaven.base.StringUtils; import io.deephaven.base.log.LogOutput; diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/HierarchicalTable.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/HierarchicalTable.java index 560da1917b8..ca46a8aa6f1 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/HierarchicalTable.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/HierarchicalTable.java @@ -4,6 +4,7 @@ import io.deephaven.api.Selectable; import io.deephaven.api.SortColumn; import io.deephaven.api.agg.Aggregation; +import io.deephaven.api.agg.spec.AggSpec; import io.deephaven.api.filter.Filter; import io.deephaven.engine.rowset.TrackingRowSet; import io.deephaven.engine.table.MatchPair; @@ -153,31 +154,6 @@ public Table join(Table rightTable, MatchPair[] columnsToMatch, MatchPair[] colu return throwUnsupported("join()"); } - @Override - public Table lastBy(Selectable... groupByColumns) { - return throwUnsupported("lastBy()"); - } - - @Override - public Table firstBy(Selectable... groupByColumns) { - return throwUnsupported("firstBy()"); - } - - @Override - public Table minBy(Selectable... groupByColumns) { - return throwUnsupported("minBy()"); - } - - @Override - public Table maxBy(Selectable... groupByColumns) { - return throwUnsupported("maxBy()"); - } - - @Override - public Table medianBy(Selectable... groupByColumns) { - return throwUnsupported("medianBy()"); - } - @Override public Table countBy(String countColumnName, Selectable... groupByColumns) { return throwUnsupported("countBy()"); @@ -199,8 +175,8 @@ public Table tailPct(double percent) { } @Override - public Table groupBy(Collection groupByColumns) { - return throwUnsupported("groupBy()"); + public Table aggAllBy(AggSpec spec, Selectable... groupByColumns) { + return throwUnsupported("aggAllBy(" + spec + ")"); } @Override @@ -225,36 +201,6 @@ public Table applyToAllBy(String formulaColumn, String columnParamName, return throwUnsupported("applyToAllBy()"); } - @Override - public Table sumBy(Selectable... groupByColumns) { - return throwUnsupported("sumBy()"); - } - - @Override - public Table absSumBy(Selectable... groupByColumns) { - return throwUnsupported("absSumBy()"); - } - - @Override - public Table avgBy(Selectable... groupByColumns) { - return throwUnsupported("avgBy()"); - } - - @Override - public Table wavgBy(String weightColumn, Selectable... groupByColumns) { - return throwUnsupported("wavgBy()"); - } - - @Override - public Table stdBy(Selectable... groupByColumns) { - return throwUnsupported("stdBy()"); - } - - @Override - public Table varBy(Selectable... groupByColumns) { - return throwUnsupported("varBy()"); - } - @Override public Table where(Collection filters) { return throwUnsupported("where()"); @@ -275,11 +221,6 @@ public Table select(Collection selectColumns) { return throwUnsupported("select()"); } - @Override - public Table selectDistinct(Collection columns) { - return throwUnsupported("selectDistinct()"); - } - @Override public Table update(Collection columns) { return throwUnsupported("update()"); diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/QueryTable.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/QueryTable.java index 434dba68601..fc75bd8e747 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/QueryTable.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/QueryTable.java @@ -8,8 +8,11 @@ import io.deephaven.api.JoinMatch; import io.deephaven.api.Selectable; import io.deephaven.api.SortColumn; +import io.deephaven.api.Strings; import io.deephaven.api.agg.Aggregation; import io.deephaven.api.agg.AggregationOutputs; +import io.deephaven.api.agg.spec.AggSpec; +import io.deephaven.api.agg.spec.AggSpecColumnReferences; import io.deephaven.api.filter.Filter; import io.deephaven.base.StringUtils; import io.deephaven.base.verify.Assert; @@ -26,6 +29,7 @@ import io.deephaven.engine.updategraph.DynamicNode; import io.deephaven.engine.util.ColumnFormattingValues; import io.deephaven.engine.util.systemicmarking.SystemicObject; +import io.deephaven.qst.table.AggregateAllByTable; import io.deephaven.vector.Vector; import io.deephaven.engine.updategraph.UpdateGraphProcessor; import io.deephaven.engine.updategraph.NotificationQueue; @@ -569,16 +573,41 @@ public Table exactJoin(Table table, MatchPair[] columnsToMatch, MatchPair[] colu () -> naturalJoinInternal(table, columnsToMatch, columnsToAdd, true)); } + private static String toString(Collection groupByList) { + return groupByList.stream().map(Strings::of).collect(Collectors.joining(",", "[", "]")); + } + @Override - public Table groupBy(Collection groupByColumns) { - return QueryPerformanceRecorder.withNugget("groupBy(" + groupByColumns + ")", - sizeForInstrumentation(), - () -> by(new AggregationGroupSpec(), SelectColumn.from(groupByColumns))); + public Table aggAllBy(AggSpec spec, Selectable... groupByColumns) { + for (ColumnName name : AggSpecColumnReferences.of(spec)) { + if (!hasColumns(name.name())) { + throw new IllegalArgumentException( + "aggAllBy spec references column that does not exist: spec=" + spec + ", groupByColumns=" + + toString(Arrays.asList(groupByColumns))); + } + } + final List groupByList = Arrays.asList(groupByColumns); + final List tableColumns = + definition.getColumnNames().stream().map(ColumnName::of).collect(Collectors.toList()); + final Optional agg = AggregateAllByTable.singleAggregation(spec, groupByList, tableColumns); + if (agg.isEmpty()) { + throw new IllegalArgumentException( + "aggAllBy has no columns to aggregate: spec=" + spec + ", groupByColumns=" + toString(groupByList)); + } + final Table result = aggBy(agg.get(), groupByList); + spec.walk(new AggAllByCopyAttributes(this, result)); + return result; } @Override public Table aggBy(final Collection aggregations, final Collection groupByColumns) { + if (aggregations.isEmpty()) { + throw new IllegalArgumentException( + "aggBy must have at least one aggregation, none specified. groupByColumns=" + + toString(groupByColumns)); + } + final List optimized = AggregationFactory.AggregationElement.optimizeAndConvert(aggregations); @@ -603,63 +632,6 @@ public Table aggBy(final Collection aggregations, return aggregationTable.view(resultOrder); } - @Override - public Table lastBy(Selectable... groupByColumns) { - return QueryPerformanceRecorder.withNugget("lastBy(" + Arrays.toString(groupByColumns) + ")", - sizeForInstrumentation(), - () -> { - final Table result = - by(TRACKED_LAST_BY ? new TrackingLastBySpecImpl() : new LastBySpecImpl(), - SelectColumn.from(groupByColumns)); - copyAttributes(result, CopyAttributeOperation.LastBy); - return result; - }); - } - - @Override - public Table firstBy(Selectable... groupByColumns) { - return QueryPerformanceRecorder.withNugget("firstBy(" + Arrays.toString(groupByColumns) + ")", - sizeForInstrumentation(), - () -> { - final Table result = - by(TRACKED_FIRST_BY ? new TrackingFirstBySpecImpl() : new FirstBySpecImpl(), - SelectColumn.from(groupByColumns)); - copyAttributes(result, CopyAttributeOperation.FirstBy); - return result; - }); - } - - @Override - public Table minBy(Selectable... groupByColumns) { - return QueryPerformanceRecorder.withNugget("minBy(" + Arrays.toString(groupByColumns) + ")", - sizeForInstrumentation(), () -> { - if (isRefreshing()) { - return by(new MinMaxBySpecImpl(true), SelectColumn.from(groupByColumns)); - } else { - return by(new AddOnlyMinMaxBySpecImpl(true), SelectColumn.from(groupByColumns)); - } - }); - } - - @Override - public Table maxBy(Selectable... groupByColumns) { - return QueryPerformanceRecorder.withNugget("maxBy(" + Arrays.toString(groupByColumns) + ")", - sizeForInstrumentation(), () -> { - if (isRefreshing()) { - return by(new MinMaxBySpecImpl(false), SelectColumn.from(groupByColumns)); - } else { - return by(new AddOnlyMinMaxBySpecImpl(false), SelectColumn.from(groupByColumns)); - } - }); - } - - @Override - public Table medianBy(Selectable... groupByColumns) { - return QueryPerformanceRecorder.withNugget("medianBy(" + Arrays.toString(groupByColumns) + ")", - sizeForInstrumentation(), - () -> by(new PercentileBySpecImpl(0.50, true), SelectColumn.from(groupByColumns))); - } - @Override public Table countBy(String countColumnName, Selectable... groupByColumns) { return QueryPerformanceRecorder.withNugget( @@ -959,62 +931,6 @@ public Table applyToAllBy(String formulaColumn, String columnParamName, SelectColumn.from(groupByColumns))); } - @Override - public Table sumBy(Selectable... groupByColumns) { - final QueryTable tableToUse = (QueryTable) dropColumnFormats(); - return QueryPerformanceRecorder.withNugget("sumBy(" + Arrays.toString(groupByColumns) + ")", - sizeForInstrumentation(), - () -> tableToUse.by(new SumSpec(), SelectColumn.from(groupByColumns))); - } - - @Override - public Table absSumBy(Selectable... groupByColumns) { - final QueryTable tableToUse = (QueryTable) dropColumnFormats(); - return QueryPerformanceRecorder.withNugget("absSumBy(" + Arrays.toString(groupByColumns) + ")", - sizeForInstrumentation(), - () -> tableToUse.by(new AbsSumSpec(), SelectColumn.from(groupByColumns))); - } - - @Override - public Table avgBy(Selectable... groupByColumns) { - final QueryTable tableToUse = (QueryTable) dropColumnFormats(); - return QueryPerformanceRecorder.withNugget("avgBy(" + Arrays.toString(groupByColumns) + ")", - sizeForInstrumentation(), - () -> tableToUse.by(new AvgSpec(), SelectColumn.from(groupByColumns))); - } - - @Override - public Table wavgBy(String weightColumn, Selectable... groupByColumns) { - final QueryTable tableToUse = (QueryTable) dropColumnFormats(); - return QueryPerformanceRecorder.withNugget( - "wavgBy(" + weightColumn + ", " + Arrays.toString(groupByColumns) + ")", sizeForInstrumentation(), - () -> tableToUse.by(new WeightedAverageSpecImpl(weightColumn), SelectColumn.from(groupByColumns))); - } - - @Override - public Table wsumBy(String weightColumn, Selectable... groupByColumns) { - final QueryTable tableToUse = (QueryTable) dropColumnFormats(); - return QueryPerformanceRecorder.withNugget( - "wsumBy(" + weightColumn + ", " + Arrays.toString(groupByColumns) + ")", sizeForInstrumentation(), - () -> tableToUse.by(new WeightedSumSpecImpl(weightColumn), SelectColumn.from(groupByColumns))); - } - - @Override - public Table stdBy(Selectable... groupByColumns) { - final QueryTable tableToUse = (QueryTable) dropColumnFormats(); - return QueryPerformanceRecorder.withNugget("stdBy(" + Arrays.toString(groupByColumns) + ")", - sizeForInstrumentation(), - () -> tableToUse.by(new StdSpec(), SelectColumn.from(groupByColumns))); - } - - @Override - public Table varBy(Selectable... groupByColumns) { - final QueryTable tableToUse = (QueryTable) dropColumnFormats(); - return QueryPerformanceRecorder.withNugget("varBy(" + Arrays.toString(groupByColumns) + ")", - sizeForInstrumentation(), - () -> tableToUse.by(new VarSpec(), SelectColumn.from(groupByColumns))); - } - public static class FilteredTable extends QueryTable implements WhereFilter.RecomputeListener { private final QueryTable source; private final WhereFilter[] filters; @@ -3438,4 +3354,5 @@ public R apply(Function function) { public Table wouldMatch(WouldMatchPair... matchers) { return getResult(new WouldMatchOperation(this, matchers)); } + } diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/TableWithDefaults.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/TableWithDefaults.java index 9ff9e7fecd2..118dd547ae2 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/TableWithDefaults.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/TableWithDefaults.java @@ -6,6 +6,7 @@ import io.deephaven.api.*; import io.deephaven.api.agg.Aggregation; +import io.deephaven.api.agg.spec.AggSpec; import io.deephaven.api.filter.Filter; import io.deephaven.base.Pair; import io.deephaven.base.StringUtils; @@ -625,6 +626,13 @@ default Table join(Table rightTable, Collection columnsToMa // Aggregation Operations // ----------------------------------------------------------------------------------------------------------------- + + @Override + @ConcurrentMethod + default Table groupBy(Collection groupByColumns) { + return aggAllBy(AggSpec.group(), groupByColumns.toArray(Selectable[]::new)); + } + @Override @ConcurrentMethod default Table groupBy(String... groupByColumns) { @@ -637,6 +645,24 @@ default Table groupBy() { return groupBy(Collections.emptyList()); } + @Override + @ConcurrentMethod + default Table aggAllBy(AggSpec spec) { + return aggAllBy(spec, Collections.emptyList()); + } + + @Override + @ConcurrentMethod + default Table aggAllBy(AggSpec spec, String... groupByColumns) { + return aggAllBy(spec, List.of(groupByColumns)); + } + + @Override + @ConcurrentMethod + default Table aggAllBy(AggSpec spec, Collection groupByColumns) { + return aggAllBy(spec, Selectable.from(groupByColumns).toArray(ZERO_LENGTH_SELECTABLE_ARRAY)); + } + @Override @ConcurrentMethod default Table aggBy(Aggregation aggregation) { @@ -689,6 +715,12 @@ default Table applyToAllBy(String formulaColumn, String... groupByColumns) { return applyToAllBy(formulaColumn, Selectable.from(groupByColumns)); } + @Override + @ConcurrentMethod + default Table sumBy(Selectable... groupByColumns) { + return aggAllBy(AggSpec.sum(), groupByColumns); + } + @Override @ConcurrentMethod default Table sumBy(String... groupByColumns) { @@ -707,6 +739,12 @@ default Table sumBy() { return sumBy(ZERO_LENGTH_SELECTABLE_ARRAY); } + @Override + @ConcurrentMethod + default Table absSumBy(Selectable... groupByColumns) { + return aggAllBy(AggSpec.absSum(), groupByColumns); + } + @Override @ConcurrentMethod default Table absSumBy(String... groupByColumns) { @@ -725,6 +763,12 @@ default Table absSumBy() { return absSumBy(ZERO_LENGTH_SELECTABLE_ARRAY); } + @Override + @ConcurrentMethod + default Table avgBy(Selectable... groupByColumns) { + return aggAllBy(AggSpec.avg(), groupByColumns); + } + @Override @ConcurrentMethod default Table avgBy(String... groupByColumns) { @@ -743,6 +787,12 @@ default Table avgBy() { return avgBy(ZERO_LENGTH_SELECTABLE_ARRAY); } + @Override + @ConcurrentMethod + default Table wavgBy(String weightColumn, Selectable... groupByColumns) { + return aggAllBy(AggSpec.wavg(weightColumn), groupByColumns); + } + @Override @ConcurrentMethod default Table wavgBy(String weightColumn, String... groupByColumns) { @@ -761,6 +811,12 @@ default Table wavgBy(String weightColumn) { return wavgBy(weightColumn, ZERO_LENGTH_SELECTABLE_ARRAY); } + @Override + @ConcurrentMethod + default Table wsumBy(String weightColumn, Selectable... groupByColumns) { + return aggAllBy(AggSpec.wsum(weightColumn), groupByColumns); + } + @Override @ConcurrentMethod default Table wsumBy(String weightColumn) { @@ -779,6 +835,12 @@ default Table wsumBy(String weightColumn, Collection groupByColumns) { return wsumBy(weightColumn, Selectable.from(groupByColumns).toArray(ZERO_LENGTH_SELECTABLE_ARRAY)); } + @Override + @ConcurrentMethod + default Table stdBy(Selectable... groupByColumns) { + return aggAllBy(AggSpec.std(), groupByColumns); + } + @Override @ConcurrentMethod default Table stdBy(String... groupByColumns) { @@ -792,10 +854,17 @@ default Table stdBy(Collection groupByColumns) { } @Override + @ConcurrentMethod default Table stdBy() { return stdBy(ZERO_LENGTH_SELECTABLE_ARRAY); } + @Override + @ConcurrentMethod + default Table varBy(Selectable... groupByColumns) { + return aggAllBy(AggSpec.var(), groupByColumns); + } + @Override @ConcurrentMethod default Table varBy(String... groupByColumns) { @@ -809,10 +878,17 @@ default Table varBy(Collection groupByColumns) { } @Override + @ConcurrentMethod default Table varBy() { return varBy(ZERO_LENGTH_SELECTABLE_ARRAY); } + @Override + @ConcurrentMethod + default Table lastBy(Selectable... groupByColumns) { + return aggAllBy(AggSpec.last(), groupByColumns); + } + @Override @ConcurrentMethod default Table lastBy(String... groupByColumns) { @@ -831,6 +907,12 @@ default Table lastBy() { return lastBy(ZERO_LENGTH_SELECTABLE_ARRAY); } + @Override + @ConcurrentMethod + default Table firstBy(Selectable... groupByColumns) { + return aggAllBy(AggSpec.first(), groupByColumns); + } + @Override @ConcurrentMethod default Table firstBy(String... groupByColumns) { @@ -849,6 +931,12 @@ default Table firstBy() { return firstBy(ZERO_LENGTH_SELECTABLE_ARRAY); } + @Override + @ConcurrentMethod + default Table minBy(Selectable... groupByColumns) { + return aggAllBy(AggSpec.min(), groupByColumns); + } + @Override @ConcurrentMethod default Table minBy(String... groupByColumns) { @@ -867,6 +955,12 @@ default Table minBy() { return minBy(ZERO_LENGTH_SELECTABLE_ARRAY); } + @Override + @ConcurrentMethod + default Table maxBy(Selectable... groupByColumns) { + return aggAllBy(AggSpec.max(), groupByColumns); + } + @Override @ConcurrentMethod default Table maxBy(String... groupByColumns) { @@ -885,6 +979,12 @@ default Table maxBy() { return maxBy(ZERO_LENGTH_SELECTABLE_ARRAY); } + @Override + @ConcurrentMethod + default Table medianBy(Selectable... groupByColumns) { + return aggAllBy(AggSpec.median(), groupByColumns); + } + @Override @ConcurrentMethod default Table medianBy(String... groupByColumns) { diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/UncoalescedTable.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/UncoalescedTable.java index 69a9be2ae5b..2c12dbcb76b 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/UncoalescedTable.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/UncoalescedTable.java @@ -8,6 +8,7 @@ import io.deephaven.api.Selectable; import io.deephaven.api.SortColumn; import io.deephaven.api.agg.Aggregation; +import io.deephaven.api.agg.spec.AggSpec; import io.deephaven.api.filter.Filter; import io.deephaven.base.verify.Assert; import io.deephaven.engine.liveness.Liveness; @@ -341,6 +342,12 @@ public Table groupBy(Collection groupByColumns) { return coalesce().groupBy(groupByColumns); } + @Override + @ConcurrentMethod + public Table aggAllBy(AggSpec spec, Selectable... groupByColumns) { + return coalesce().aggAllBy(spec, groupByColumns); + } + @Override @ConcurrentMethod public Table aggBy(Collection aggregations, diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationAdapterOptimized.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationAdapterOptimized.java deleted file mode 100644 index 56f2623b4fb..00000000000 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationAdapterOptimized.java +++ /dev/null @@ -1,346 +0,0 @@ -package io.deephaven.engine.table.impl.by; - -import io.deephaven.api.ColumnName; -import io.deephaven.api.SortColumn; -import io.deephaven.api.agg.*; -import io.deephaven.engine.table.MatchPair; -import io.deephaven.engine.table.impl.by.AggregationFactory.AggregationElement; -import io.deephaven.tuple.generated.ByteDoubleTuple; - -import java.util.*; - -/** - * Utility for converting collections of {@link Aggregation aggregations} to collections of {@link AggregationElement}, - * grouping compatible aggregations in order to allow optimizations at execution time. - */ -class AggregationAdapterOptimized implements Aggregation.Visitor { - - private final List absSums = new ArrayList<>(); - private final List arrays = new ArrayList<>(); - private final List avgs = new ArrayList<>(); - private final List counts = new ArrayList<>(); - private final Map> countDistincts = new HashMap<>(); - private final Map> distincts = new HashMap<>(); - private final List firsts = new ArrayList<>(); - private final List lasts = new ArrayList<>(); - private final List maxs = new ArrayList<>(); - private final Map> medians = new HashMap<>(); - private final List mins = new ArrayList<>(); - private final Map> pcts = new HashMap<>(); - private final Map, List> sortedFirsts = new HashMap<>(); - private final Map, List> sortedLasts = new HashMap<>(); - private final List stds = new ArrayList<>(); - private final List sums = new ArrayList<>(); - private final Map> uniques = new HashMap<>(); - private final List vars = new ArrayList<>(); - private final Map> wAvgs = new HashMap<>(); - private final Map> wSums = new HashMap<>(); - - /** - * We'll do our best to maintain the original aggregation ordering. This will maintain the user-specified order as - * long as the user aggregation types were all next to each other. - *

- * ie: - *

- * {@code aggBy([ Sum.of(A), Sum.of(B), Avg.of(C), Avg.of(D) ], ...)} will not need to be re-ordered - *

- * {@code aggBy([ Sum.of(A), Avg.of(C), Avg.of(D), Sum.of(B) ], ...)} will need to be re-ordered - */ - private final LinkedHashSet buildOrder = new LinkedHashSet<>(); - - @FunctionalInterface - private interface BuildLogic { - void appendTo(List outs); - } - - // Unfortunately, it doesn't look like we can add ad-hoc lambdas to buildOrder, they don't appear to be equal - // across multiple constructions. - private final BuildLogic buildAbsSums = this::buildAbsSums; - private final BuildLogic buildArrays = this::buildArrays; - private final BuildLogic buildAvgs = this::buildAvgs; - private final BuildLogic buildCounts = this::buildCounts; - private final BuildLogic buildCountDistincts = this::buildCountDistincts; - private final BuildLogic buildDistincts = this::buildDistincts; - private final BuildLogic buildFirsts = this::buildFirsts; - private final BuildLogic buildLasts = this::buildLasts; - private final BuildLogic buildMaxes = this::buildMaxes; - private final BuildLogic buildMedians = this::buildMedians; - private final BuildLogic buildMins = this::buildMins; - private final BuildLogic buildPcts = this::buildPcts; - private final BuildLogic buildSortedFirsts = this::buildSortedFirsts; - private final BuildLogic buildSortedLasts = this::buildSortedLasts; - private final BuildLogic buildStds = this::buildStds; - private final BuildLogic buildSums = this::buildSums; - private final BuildLogic buildUniques = this::buildUniques; - private final BuildLogic buildVars = this::buildVars; - private final BuildLogic buildWAvgs = this::buildWAvgs; - private final BuildLogic buildWSums = this::buildWSums; - - - List build() { - List aggs = new ArrayList<>(); - for (BuildLogic buildLogic : buildOrder) { - buildLogic.appendTo(aggs); - } - return aggs; - } - - private void buildWSums(List aggs) { - for (Map.Entry> e : wSums.entrySet()) { - aggs.add(AggregationFactory.Agg(new WeightedSumSpecImpl(e.getKey().name()), - MatchPair.fromPairs(e.getValue()))); - } - } - - private void buildWAvgs(List aggs) { - for (Map.Entry> e : wAvgs.entrySet()) { - aggs.add(AggregationFactory.Agg(new WeightedAverageSpecImpl(e.getKey().name()), - MatchPair.fromPairs(e.getValue()))); - } - } - - private void buildVars(List aggs) { - if (!vars.isEmpty()) { - aggs.add(AggregationFactory.Agg(AggType.Var, MatchPair.fromPairs(vars))); - } - } - - private void buildUniques(List aggs) { - for (Map.Entry> e : uniques.entrySet()) { - aggs.add(AggregationFactory.Agg(new UniqueSpec(e.getKey()), MatchPair.fromPairs(e.getValue()))); - } - } - - private void buildSums(List aggs) { - if (!sums.isEmpty()) { - aggs.add(AggregationFactory.Agg(AggType.Sum, MatchPair.fromPairs(sums))); - } - } - - private void buildStds(List aggs) { - if (!stds.isEmpty()) { - aggs.add(AggregationFactory.Agg(AggType.Std, MatchPair.fromPairs(stds))); - } - } - - private void buildSortedLasts(List aggs) { - for (Map.Entry, List> e : sortedLasts.entrySet()) { - // TODO(deephaven-core#821): SortedFirst / SortedLast aggregations with sort direction - String[] columns = - e.getKey().stream().map(SortColumn::column).map(ColumnName::name).toArray(String[]::new); - aggs.add(AggregationFactory.Agg(new SortedLastBy(columns), MatchPair.fromPairs(e.getValue()))); - } - } - - private void buildSortedFirsts(List aggs) { - for (Map.Entry, List> e : sortedFirsts.entrySet()) { - // TODO(deephaven-core#821): SortedFirst / SortedLast aggregations with sort direction - String[] columns = - e.getKey().stream().map(SortColumn::column).map(ColumnName::name).toArray(String[]::new); - aggs.add(AggregationFactory.Agg(new SortedFirstBy(columns), MatchPair.fromPairs(e.getValue()))); - } - } - - private void buildPcts(List aggs) { - for (Map.Entry> e : pcts.entrySet()) { - aggs.add(AggregationFactory.Agg(new PercentileBySpecImpl(e.getKey().getSecondElement(), - e.getKey().getFirstElement() != 0), MatchPair.fromPairs(e.getValue()))); - } - } - - private void buildMins(List aggs) { - if (!mins.isEmpty()) { - aggs.add(AggregationFactory.Agg(AggType.Min, MatchPair.fromPairs(mins))); - } - } - - private void buildMedians(List aggs) { - for (Map.Entry> e : medians.entrySet()) { - aggs.add(AggregationFactory.Agg(new PercentileBySpecImpl(0.50d, e.getKey()), - MatchPair.fromPairs(e.getValue()))); - } - } - - private void buildMaxes(List aggs) { - if (!maxs.isEmpty()) { - aggs.add(AggregationFactory.Agg(AggType.Max, MatchPair.fromPairs(maxs))); - } - } - - private void buildLasts(List aggs) { - if (!lasts.isEmpty()) { - aggs.add(AggregationFactory.Agg(AggType.Last, MatchPair.fromPairs(lasts))); - } - } - - private void buildFirsts(List aggs) { - if (!firsts.isEmpty()) { - aggs.add(AggregationFactory.Agg(AggType.First, MatchPair.fromPairs(firsts))); - } - } - - private void buildDistincts(List aggs) { - for (Map.Entry> e : distincts.entrySet()) { - aggs.add(AggregationFactory.Agg(new DistinctSpec(e.getKey()), MatchPair.fromPairs(e.getValue()))); - } - } - - private void buildCountDistincts(List aggs) { - for (Map.Entry> e : countDistincts.entrySet()) { - aggs.add(AggregationFactory.Agg(new CountDistinctSpec(e.getKey()), MatchPair.fromPairs(e.getValue()))); - } - } - - private void buildCounts(List aggs) { - for (ColumnName count : counts) { - aggs.add(new AggregationFactory.CountAggregationElement(count.name())); - } - } - - private void buildAvgs(List aggs) { - if (!avgs.isEmpty()) { - aggs.add(AggregationFactory.Agg(AggType.Avg, MatchPair.fromPairs(avgs))); - } - } - - private void buildArrays(List aggs) { - if (!arrays.isEmpty()) { - aggs.add(AggregationFactory.Agg(AggType.Group, MatchPair.fromPairs(arrays))); - } - } - - private void buildAbsSums(List aggs) { - if (!absSums.isEmpty()) { - aggs.add(AggregationFactory.Agg(AggType.AbsSum, MatchPair.fromPairs(absSums))); - } - } - - @Override - public void visit(AbsSum absSum) { - absSums.add(absSum.pair()); - buildOrder.add(buildAbsSums); - } - - @Override - public void visit(Group group) { - arrays.add(group.pair()); - buildOrder.add(buildArrays); - } - - @Override - public void visit(Avg avg) { - avgs.add(avg.pair()); - buildOrder.add(buildAvgs); - } - - @Override - public void visit(Count count) { - counts.add(count.column()); - buildOrder.add(buildCounts); - } - - @Override - public void visit(CountDistinct countDistinct) { - countDistincts.computeIfAbsent(countDistinct.countNulls(), b -> new ArrayList<>()) - .add(countDistinct.pair()); - buildOrder.add(buildCountDistincts); - } - - @Override - public void visit(Distinct distinct) { - distincts.computeIfAbsent(distinct.includeNulls(), b -> new ArrayList<>()).add(distinct.pair()); - buildOrder.add(buildDistincts); - } - - @Override - public void visit(First first) { - firsts.add(first.pair()); - buildOrder.add(buildFirsts); - } - - @Override - public void visit(Last last) { - lasts.add(last.pair()); - buildOrder.add(buildLasts); - } - - @Override - public void visit(Max max) { - maxs.add(max.pair()); - buildOrder.add(buildMaxes); - } - - @Override - public void visit(Med med) { - medians.computeIfAbsent(med.averageMedian(), b -> new ArrayList<>()).add(med.pair()); - buildOrder.add(buildMedians); - } - - @Override - public void visit(Min min) { - mins.add(min.pair()); - buildOrder.add(buildMins); - } - - @Override - public void visit(Multi multi) { - for (Aggregation aggregation : multi.aggregations()) { - aggregation.walk(this); - } - } - - @Override - public void visit(Pct pct) { - pcts.computeIfAbsent(new ByteDoubleTuple(pct.averageMedian() ? (byte) 1 : (byte) 0, pct.percentile()), - b -> new ArrayList<>()).add(pct.pair()); - buildOrder.add(buildPcts); - } - - @Override - public void visit(SortedFirst sortedFirst) { - sortedFirsts.computeIfAbsent(sortedFirst.columns(), b -> new ArrayList<>()).add(sortedFirst.pair()); - buildOrder.add(buildSortedFirsts); - } - - @Override - public void visit(SortedLast sortedLast) { - sortedLasts.computeIfAbsent(sortedLast.columns(), b -> new ArrayList<>()).add(sortedLast.pair()); - buildOrder.add(buildSortedLasts); - } - - @Override - public void visit(Std std) { - stds.add(std.pair()); - buildOrder.add(buildStds); - } - - @Override - public void visit(Sum sum) { - sums.add(sum.pair()); - buildOrder.add(buildSums); - } - - @Override - public void visit(Unique unique) { - uniques.computeIfAbsent(unique.includeNulls(), b -> new ArrayList<>()).add(unique.pair()); - buildOrder.add(buildUniques); - } - - @Override - public void visit(Var var) { - vars.add(var.pair()); - buildOrder.add(buildVars); - } - - @Override - public void visit(WAvg wAvg) { - wAvgs.computeIfAbsent(wAvg.weight(), b -> new ArrayList<>()).add(wAvg.pair()); - buildOrder.add(buildWAvgs); - } - - @Override - public void visit(WSum wSum) { - wSums.computeIfAbsent(wSum.weight(), b -> new ArrayList<>()).add(wSum.pair()); - buildOrder.add(buildWSums); - } -} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationAdapterOrdered.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationAdapterOrdered.java deleted file mode 100644 index ca550dead62..00000000000 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationAdapterOrdered.java +++ /dev/null @@ -1,143 +0,0 @@ -package io.deephaven.engine.table.impl.by; - -import io.deephaven.api.ColumnName; -import io.deephaven.api.SortColumn; -import io.deephaven.api.agg.*; -import io.deephaven.engine.table.MatchPair; -import io.deephaven.engine.table.impl.by.AggregationFactory.AggregationElement; - -import java.util.ArrayList; -import java.util.List; - -/** - * Utility for converting collections of {@link Aggregation aggregations} to collections of {@link AggregationElement} - * in strict order with no coalescing/optimization. - */ -class AggregationAdapterOrdered implements Aggregation.Visitor { - - private final List aggs = new ArrayList<>(); - - List build() { - return aggs; - } - - @Override - public void visit(AbsSum absSum) { - aggs.add(AggregationFactory.Agg(AggType.AbsSum, MatchPair.of(absSum.pair()))); - } - - @Override - public void visit(Group group) { - aggs.add(AggregationFactory.Agg(AggType.Group, MatchPair.of(group.pair()))); - } - - @Override - public void visit(Avg avg) { - aggs.add(AggregationFactory.Agg(AggType.Avg, MatchPair.of(avg.pair()))); - } - - @Override - public void visit(Count count) { - aggs.add(new AggregationFactory.CountAggregationElement(count.column().name())); - } - - @Override - public void visit(CountDistinct countDistinct) { - aggs.add(AggregationFactory.Agg(new CountDistinctSpec(countDistinct.countNulls()), - MatchPair.of(countDistinct.pair()))); - } - - @Override - public void visit(Distinct distinct) { - aggs.add(AggregationFactory.Agg(new DistinctSpec(distinct.includeNulls()), MatchPair.of(distinct.pair()))); - } - - @Override - public void visit(First first) { - aggs.add(AggregationFactory.Agg(AggType.First, MatchPair.of(first.pair()))); - } - - @Override - public void visit(Last last) { - aggs.add(AggregationFactory.Agg(AggType.Last, MatchPair.of(last.pair()))); - } - - @Override - public void visit(Max max) { - aggs.add(AggregationFactory.Agg(AggType.Max, MatchPair.of(max.pair()))); - } - - @Override - public void visit(Med med) { - aggs.add( - AggregationFactory.Agg(new PercentileBySpecImpl(0.50d, med.averageMedian()), MatchPair.of(med.pair()))); - } - - @Override - public void visit(Min min) { - aggs.add(AggregationFactory.Agg(AggType.Min, MatchPair.of(min.pair()))); - } - - @Override - public void visit(Multi multi) { - final List forMulti = AggregationFactory.AggregationElement.convert(multi); - if (forMulti.size() > 1) { - throw new IllegalArgumentException( - "Expected all elements in a Multi to map to a single operator, encountered aggregations: " - + multi.aggregations()); - } - aggs.add(forMulti.get(0)); - } - - @Override - public void visit(Pct pct) { - aggs.add(AggregationFactory.Agg( - new PercentileBySpecImpl(pct.percentile(), pct.averageMedian()), MatchPair.of(pct.pair()))); - } - - @Override - public void visit(SortedFirst sortedFirst) { - // TODO(deephaven-core#821): SortedFirst / SortedLast aggregations with sort direction - final String[] columns = - sortedFirst.columns().stream().map(SortColumn::column).map(ColumnName::name).toArray(String[]::new); - aggs.add(AggregationFactory.Agg(new SortedFirstBy(columns), MatchPair.of(sortedFirst.pair()))); - } - - @Override - public void visit(SortedLast sortedLast) { - // TODO(deephaven-core#821): SortedFirst / SortedLast aggregations with sort direction - final String[] columns = - sortedLast.columns().stream().map(SortColumn::column).map(ColumnName::name).toArray(String[]::new); - aggs.add(AggregationFactory.Agg(new SortedFirstBy(columns), MatchPair.of(sortedLast.pair()))); - } - - @Override - public void visit(Std std) { - aggs.add(AggregationFactory.Agg(AggType.Std, MatchPair.of(std.pair()))); - } - - @Override - public void visit(Sum sum) { - aggs.add(AggregationFactory.Agg(AggType.Sum, MatchPair.of(sum.pair()))); - } - - @Override - public void visit(Unique unique) { - aggs.add(AggregationFactory.Agg(new UniqueSpec(unique.includeNulls()), MatchPair.of(unique.pair()))); - } - - @Override - public void visit(Var var) { - aggs.add(AggregationFactory.Agg(AggType.Var, MatchPair.of(var.pair()))); - } - - @Override - public void visit(WAvg wAvg) { - aggs.add(AggregationFactory.Agg(new WeightedAverageSpecImpl(wAvg.weight().name()), MatchPair.of(wAvg.pair()))); - } - - @Override - public void visit(WSum wSum) { - aggs.add(AggregationFactory.Agg(new WeightedSumSpecImpl(wSum.weight().name()), MatchPair.of(wSum.pair()))); - } -} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationElementAdapter.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationElementAdapter.java new file mode 100644 index 00000000000..3b7f4b2591e --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationElementAdapter.java @@ -0,0 +1,46 @@ +package io.deephaven.engine.table.impl.by; + +import io.deephaven.api.agg.Aggregation; +import io.deephaven.api.agg.Count; +import io.deephaven.api.agg.NormalAggregation; +import io.deephaven.api.agg.NormalAggregations; +import io.deephaven.engine.table.MatchPair; +import io.deephaven.engine.table.impl.by.AggregationFactory.AggregationElement; +import io.deephaven.engine.table.impl.by.AggregationFactory.AggregationElementImpl; + +import java.util.Objects; + +/** + * Utility for converting an {@link Aggregation} to an {@link AggregationElement}. + */ +class AggregationElementAdapter implements Aggregation.Visitor { + + public static AggregationElement of(Aggregation aggregation) { + return aggregation.walk(new AggregationElementAdapter()).out(); + } + + private AggregationElement out; + + public AggregationElement out() { + return Objects.requireNonNull(out); + } + + @Override + public void visit(Count count) { + out = new AggregationFactory.CountAggregationElement(count.column().name()); + } + + @Override + public void visit(NormalAggregation normalAgg) { + final AggregationSpec spec = AggregationSpecAdapter.of(normalAgg.spec()); + final MatchPair pair = MatchPair.of(normalAgg.pair()); + out = new AggregationElementImpl(spec, pair); + } + + @Override + public void visit(NormalAggregations normalAggs) { + final AggregationSpec spec = AggregationSpecAdapter.of(normalAggs.spec()); + final MatchPair[] pairs = MatchPair.fromPairs(normalAggs.pairs()); + out = new AggregationElementImpl(spec, pairs); + } +} diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationFactory.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationFactory.java index a6d14b786b6..a98c59febf8 100644 --- a/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationFactory.java +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationFactory.java @@ -5,7 +5,7 @@ package io.deephaven.engine.table.impl.by; import io.deephaven.api.agg.Aggregation; -import io.deephaven.api.agg.Multi; +import io.deephaven.api.agg.AggregationOptimizer; import io.deephaven.base.verify.Assert; import io.deephaven.datastructures.util.CollectionUtil; import io.deephaven.datastructures.util.SmartKey; @@ -599,16 +599,13 @@ private String[] getKeyColumns() { public interface AggregationElement { /** - * Equivalent to {@code convertOrdered(Collections.singleton(aggregation))} or - * {@code optimizeAndConvert(Collections.singleton(aggregation))}. + * Converts an {@link Aggregation} to an {@link AggregationElement}. * * @param aggregation The {@link Aggregation aggregation} - * @return A list of {@link AggregationElement aggregation elements} - * @see #optimizeAndConvert(Collection) - * @see #convert(Collection) + * @return The {@link AggregationElement aggregation element} */ - static List convert(Aggregation aggregation) { - return optimizeAndConvert(Collections.singleton(aggregation)); + static AggregationElement of(Aggregation aggregation) { + return AggregationElementAdapter.of(aggregation); } /** @@ -621,31 +618,31 @@ static List convert(Aggregation aggregation) { * * @param aggregations The {@link Aggregation aggregation} * @return A list of {@link AggregationElement aggregation elements} - * @see #convert(Aggregation) + * @see AggregationOptimizer#of(Collection) + * @see #of(Aggregation) * @see #convert(Collection) */ static List optimizeAndConvert(Collection aggregations) { - AggregationAdapterOptimized builder = new AggregationAdapterOptimized(); - aggregations.forEach(a -> a.walk(builder)); - return builder.build(); + return convert(AggregationOptimizer.of(aggregations)); } /** - * Converts and the aggregations, only collapsing {@link Multi multi} aggregations into single - * {@link AggregationElement elements}, leaving singular aggregations as they are. + * Converts the aggregations leaving singular aggregations as they are. * *

* Note: The results will preserve the intended order of the inputs. * * @param aggregations The {@link Aggregation aggregation} * @return A list of {@link AggregationElement aggregation elements} - * @see #convert(Aggregation) + * @see #of(Aggregation) * @see #optimizeAndConvert(Collection) */ static List convert(Collection aggregations) { - AggregationAdapterOrdered builder = new AggregationAdapterOrdered(); - aggregations.forEach(a -> a.walk(builder)); - return builder.build(); + final List out = new ArrayList<>(aggregations.size()); + for (Aggregation aggregation : aggregations) { + out.add(of(aggregation)); + } + return out; } AggregationSpec getSpec(); diff --git a/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationSpecAdapter.java b/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationSpecAdapter.java new file mode 100644 index 00000000000..b95f1627841 --- /dev/null +++ b/engine/table/src/main/java/io/deephaven/engine/table/impl/by/AggregationSpecAdapter.java @@ -0,0 +1,140 @@ +package io.deephaven.engine.table.impl.by; + +import io.deephaven.api.ColumnName; +import io.deephaven.api.SortColumn; +import io.deephaven.api.agg.spec.AggSpec; +import io.deephaven.api.agg.spec.AggSpecAbsSum; +import io.deephaven.api.agg.spec.AggSpecAvg; +import io.deephaven.api.agg.spec.AggSpecCountDistinct; +import io.deephaven.api.agg.spec.AggSpecDistinct; +import io.deephaven.api.agg.spec.AggSpecFirst; +import io.deephaven.api.agg.spec.AggSpecGroup; +import io.deephaven.api.agg.spec.AggSpecLast; +import io.deephaven.api.agg.spec.AggSpecMax; +import io.deephaven.api.agg.spec.AggSpecMedian; +import io.deephaven.api.agg.spec.AggSpecMin; +import io.deephaven.api.agg.spec.AggSpecPercentile; +import io.deephaven.api.agg.spec.AggSpecSortedFirst; +import io.deephaven.api.agg.spec.AggSpecSortedLast; +import io.deephaven.api.agg.spec.AggSpecStd; +import io.deephaven.api.agg.spec.AggSpecSum; +import io.deephaven.api.agg.spec.AggSpecUnique; +import io.deephaven.api.agg.spec.AggSpecVar; +import io.deephaven.api.agg.spec.AggSpecWAvg; +import io.deephaven.api.agg.spec.AggSpecWSum; + +import java.util.Objects; + +import static io.deephaven.engine.table.impl.QueryTable.TRACKED_FIRST_BY; +import static io.deephaven.engine.table.impl.QueryTable.TRACKED_LAST_BY; + +public class AggregationSpecAdapter implements AggSpec.Visitor { + + public static AggregationSpec of(AggSpec spec) { + return spec.walk(new AggregationSpecAdapter()).out(); + } + + private AggregationSpec out; + + + public AggregationSpec out() { + return Objects.requireNonNull(out); + } + + @Override + public void visit(AggSpecAbsSum absSum) { + out = new AbsSumSpec(); + } + + @Override + public void visit(AggSpecCountDistinct countDistinct) { + out = new CountDistinctSpec(countDistinct.countNulls()); + } + + @Override + public void visit(AggSpecDistinct distinct) { + out = new DistinctSpec(distinct.includeNulls()); + } + + @Override + public void visit(AggSpecGroup group) { + out = new AggregationGroupSpec(); + } + + @Override + public void visit(AggSpecAvg avg) { + out = new AvgSpec(); + } + + @Override + public void visit(AggSpecFirst first) { + out = TRACKED_FIRST_BY ? new TrackingFirstBySpecImpl() : new FirstBySpecImpl(); + } + + @Override + public void visit(AggSpecLast last) { + out = TRACKED_LAST_BY ? new TrackingLastBySpecImpl() : new LastBySpecImpl(); + } + + @Override + public void visit(AggSpecMax max) { + out = new MinMaxBySpecImpl(false); + } + + @Override + public void visit(AggSpecMedian median) { + out = new PercentileBySpecImpl(0.50d, median.averageMedian()); + } + + @Override + public void visit(AggSpecMin min) { + out = new MinMaxBySpecImpl(true); + } + + @Override + public void visit(AggSpecPercentile pct) { + out = new PercentileBySpecImpl(pct.percentile(), pct.averageMedian()); + } + + @Override + public void visit(AggSpecSortedFirst sortedFirst) { + out = new SortedFirstBy( + sortedFirst.columns().stream().map(SortColumn::column).map(ColumnName::name).toArray(String[]::new)); + } + + @Override + public void visit(AggSpecSortedLast sortedLast) { + out = new SortedLastBy( + sortedLast.columns().stream().map(SortColumn::column).map(ColumnName::name).toArray(String[]::new)); + } + + @Override + public void visit(AggSpecStd std) { + out = new StdSpec(); + } + + @Override + public void visit(AggSpecSum sum) { + out = new SumSpec(); + } + + @Override + public void visit(AggSpecUnique unique) { + out = new UniqueSpec(unique.includeNulls()); + } + + @Override + public void visit(AggSpecWAvg wAvg) { + out = new WeightedAverageSpecImpl(wAvg.weight().name()); + } + + @Override + public void visit(AggSpecWSum wSum) { + out = new WeightedSumSpecImpl(wSum.weight().name()); + } + + @Override + public void visit(AggSpecVar var) { + out = new VarSpec(); + } +} diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/QueryTableTest.java b/engine/table/src/test/java/io/deephaven/engine/table/impl/QueryTableTest.java index 187e56bab72..cfe75d1c22e 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/QueryTableTest.java +++ b/engine/table/src/test/java/io/deephaven/engine/table/impl/QueryTableTest.java @@ -2828,15 +2828,15 @@ public void testMemoize() { testMemoize(source, t -> t.aggBy(List.of(AggSum("intCol"), AggAbsSum("absInt=intCol"), AggMax("doubleCol"), AggFirst("Sym"), AggCountDistinct("UniqueCountSym=Sym"), AggDistinct("UniqueSym=Sym")))); testMemoize(source, t -> t.aggBy(List.of(AggCountDistinct("UniqueCountSym=Sym")))); - testMemoize(source, t -> t.aggBy(List.of(AggCountDistinct("UniqueCountSym=Sym").withNulls()))); + testMemoize(source, t -> t.aggBy(List.of(AggCountDistinct(true, "UniqueCountSym=Sym")))); testNoMemoize(source, t -> t.aggBy(List.of(AggCountDistinct("UniqueCountSym=Sym"))), - t -> t.aggBy(List.of(AggCountDistinct("UniqueCountSym=Sym").withNulls()))); + t -> t.aggBy(List.of(AggCountDistinct(true, "UniqueCountSym=Sym")))); testMemoize(source, t -> t.aggBy(List.of(AggDistinct("UniqueSym=Sym")))); - testMemoize(source, t -> t.aggBy(List.of(AggDistinct("UniqueSym=Sym").withNulls()))); + testMemoize(source, t -> t.aggBy(List.of(AggDistinct(true, "UniqueSym=Sym")))); testNoMemoize(source, t -> t.aggBy(List.of(AggCountDistinct("UniqueCountSym=Sym"))), t -> t.aggBy(List.of(AggDistinct("UniqueCountSym=Sym")))); testNoMemoize(source, t -> t.aggBy(List.of(AggDistinct("UniqueSym=Sym"))), - t -> t.aggBy(List.of(AggDistinct("UniqueSym=Sym").withNulls()))); + t -> t.aggBy(List.of(AggDistinct(true, "UniqueSym=Sym")))); testNoMemoize(source, t -> t.countBy("Sym"), t -> t.countBy("Count", "Sym")); testNoMemoize(source, t -> t.sumBy("Sym"), t -> t.countBy("Count", "Sym")); testNoMemoize(source, t -> t.sumBy("Sym"), t -> t.avgBy("Sym")); diff --git a/engine/table/src/test/java/io/deephaven/engine/table/impl/util/TestRedirectedColumnSource.java b/engine/table/src/test/java/io/deephaven/engine/table/impl/util/TestRedirectedColumnSource.java index 7e2f47b06a1..a5fba4eb96e 100644 --- a/engine/table/src/test/java/io/deephaven/engine/table/impl/util/TestRedirectedColumnSource.java +++ b/engine/table/src/test/java/io/deephaven/engine/table/impl/util/TestRedirectedColumnSource.java @@ -119,10 +119,10 @@ public void testMixedFillChunk() { final Table a = TableTools.emptyTable(1_000_000L).update("A=(long) (Math.random() * 1_000_000L)"); final Table ab = a.update("B=A % 2"); - final Table expected = ab.groupBy("B", "A").sort("A"); + final Table expected = ab.selectDistinct("B", "A").sort("A"); final Table redirected = a.sort("A").update("B=A % 2"); - final Table actual = redirected.groupBy("B", "A"); + final Table actual = redirected.selectDistinct("B", "A"); assertTableEquals(expected, actual); } diff --git a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/ParquetTableWriter.java b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/ParquetTableWriter.java index 20e0c856af9..b24c9b8edda 100644 --- a/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/ParquetTableWriter.java +++ b/extensions/parquet/table/src/main/java/io/deephaven/parquet/table/ParquetTableWriter.java @@ -4,8 +4,7 @@ import io.deephaven.api.ColumnName; import io.deephaven.api.RawString; import io.deephaven.api.Selectable; -import io.deephaven.api.agg.First; -import io.deephaven.api.agg.Last; +import io.deephaven.api.agg.Aggregation; import io.deephaven.engine.table.*; import io.deephaven.engine.table.impl.CodecLookup; import io.deephaven.vector.Vector; @@ -939,7 +938,7 @@ private static Table groupingAsTable(Table tableToSave, String columnName) { .view(List.of(Selectable.of(ColumnName.of(GROUPING_KEY), ColumnName.of(columnName)), Selectable.of(ColumnName.of(BEGIN_POS), RawString.of("ii")), // Range start, inclusive Selectable.of(ColumnName.of(END_POS), RawString.of("ii+1")))) // Range end, exclusive - .aggBy(List.of(First.of(ColumnName.of(BEGIN_POS)), Last.of(ColumnName.of(END_POS))), + .aggBy(List.of(Aggregation.AggFirst(BEGIN_POS), Aggregation.AggLast(END_POS)), List.of(ColumnName.of(GROUPING_KEY))); final Table invalid = grouped.where(BEGIN_POS + " != 0 && " + BEGIN_POS + " != " + END_POS + "_[ii-1]"); if (!invalid.isEmpty()) { diff --git a/java-client/flight-examples/build.gradle b/java-client/flight-examples/build.gradle index 3cd147f50d5..c90c94226f7 100644 --- a/java-client/flight-examples/build.gradle +++ b/java-client/flight-examples/build.gradle @@ -42,6 +42,7 @@ applicationDistribution.into('bin') { from(createApplication('poll-tsv', 'io.deephaven.client.examples.PollTsv')) from(createApplication('list-tables', 'io.deephaven.client.examples.ListTables')) from(createApplication('excessive', 'io.deephaven.client.examples.ExampleExcessive')) + from(createApplication('aggregate-all', 'io.deephaven.client.examples.AggregateAllExample')) from(createApplication('do-put-new', 'io.deephaven.client.examples.DoPutNew')) from(createApplication('do-put-spray', 'io.deephaven.client.examples.DoPutSpray')) diff --git a/java-client/flight-examples/src/main/java/io/deephaven/client/examples/AggregateAllExample.java b/java-client/flight-examples/src/main/java/io/deephaven/client/examples/AggregateAllExample.java new file mode 100644 index 00000000000..2c41107e86a --- /dev/null +++ b/java-client/flight-examples/src/main/java/io/deephaven/client/examples/AggregateAllExample.java @@ -0,0 +1,149 @@ +package io.deephaven.client.examples; + +import io.deephaven.api.agg.spec.AggSpec; +import io.deephaven.client.impl.FlightSession; +import io.deephaven.client.impl.TableHandle; +import io.deephaven.qst.LabeledValue; +import io.deephaven.qst.LabeledValues; +import io.deephaven.qst.column.header.ColumnHeader; +import io.deephaven.qst.column.header.ColumnHeaders8; +import io.deephaven.qst.table.InMemoryKeyBackedInputTable; +import io.deephaven.qst.table.LabeledTables; +import io.deephaven.qst.table.LabeledTables.Builder; +import io.deephaven.qst.table.TableHeader; +import io.deephaven.qst.table.TableSpec; +import picocli.CommandLine; +import picocli.CommandLine.Command; +import picocli.CommandLine.Option; + +import java.util.Arrays; +import java.util.Collections; +import java.util.List; +import java.util.Random; +import java.util.concurrent.TimeUnit; + +@Command(name = "aggregate-all", mixinStandardHelpOptions = true, + description = "Aggregate all examples", version = "0.1.0") +class AggregateAllExample extends FlightExampleBase { + + private static List aggSpecs() { + return Arrays.asList( + AggSpec.absSum(), + AggSpec.avg(), + // Key.countDistinct(false), + // Key.countDistinct(true), + // Key.distinct(false), + // Key.distinct(true), + AggSpec.first(), + AggSpec.group(), + AggSpec.last(), + AggSpec.max(), + // Key.median(false), + AggSpec.median(true), + AggSpec.min(), + // Key.percentile(0.25, false), + // Key.percentile(0.25, true), + // Key.sortedFirst(...), + // Key.sortedLast(...), + AggSpec.std(), + AggSpec.sum(), + // Key.unique(false), + // Key.unique(true), + AggSpec.var(), + AggSpec.wavg("Z") + // Key.wsum("Z") + ); + } + + @Option(names = {"--input-table-size"}, description = "The input table size, default ${DEFAULT-VALUE}", + defaultValue = "1000") + int inputTableSize; + + @Option(names = {"--num-groups"}, description = "The number of groups, default ${DEFAULT-VALUE}", + defaultValue = "10") + int numGroups; + + @Option(names = {"--update-percentage"}, + description = "The update percentage per input table row per cycle, default ${DEFAULT-VALUE}", + defaultValue = "0.01") + double updatePercentage; + + @Option(names = {"--sleep-millis"}, description = "The sleep milliseconds between cycles, default ${DEFAULT-VALUE}", + defaultValue = "100") + long sleepMillis; + + @Override + protected void execute(FlightSession flight) throws Exception { + final ColumnHeader inputKey = ColumnHeader.ofInt("InputKey"); + final ColumnHeader groupKey = ColumnHeader.ofInt("GroupKey"); + final ColumnHeader u = ColumnHeader.ofByte("U"); + final ColumnHeader v = ColumnHeader.ofShort("V"); + final ColumnHeader w = ColumnHeader.ofInt("W"); + final ColumnHeader x = ColumnHeader.ofLong("X"); + final ColumnHeader y = ColumnHeader.ofFloat("Y"); + final ColumnHeader z = ColumnHeader.ofDouble("Z"); + + final Builder builder = LabeledTables.builder(); + + final TableSpec spec = InMemoryKeyBackedInputTable.of(TableHeader.of(inputKey, groupKey, u, v, w, x, y, z), + Collections.singletonList(inputKey.name())); + builder.putMap("base", spec); + // todo: countBy + for (AggSpec aggSpec : aggSpecs()) { + final String name = aggSpec.toString() + .replace('=', '_') + .replace('{', '_') + .replace('}', '_') + .replace(' ', '_') + .replace('.', '_'); + final TableSpec tableSpec = spec.aggAllBy(aggSpec, groupKey.name()); + builder.putMap(name, tableSpec); + } + final LabeledTables tables = builder.build(); + + final LabeledValues results = flight.session().batch().execute(tables); + try { + for (LabeledValue result : results) { + flight.session().publish(result.name(), result.value()).get(5, TimeUnit.SECONDS); + } + + final ColumnHeaders8 headers = + inputKey.header(groupKey).header(u).header(v).header(w).header(x).header(y).header(z); + + final TableHandle base = results.get("base"); + + final Random random = new Random(); + + final int sizeGuess = (int) Math.round(inputTableSize * updatePercentage); + + while (true) { + final ColumnHeaders8.Rows rows = + headers.start(sizeGuess); + for (int i = 0; i < inputTableSize; ++i) { + if (random.nextDouble() > updatePercentage) { + continue; + } + final int group = random.nextInt(numGroups); + final byte u_ = (byte) random.nextInt(); + final short v_ = (short) random.nextInt(); + final int w_ = random.nextInt(); + final long x_ = random.nextLong(); + final float y_ = random.nextFloat(); + final double z_ = random.nextDouble(); + rows.row(i, group, u_, v_, w_, x_, y_, z_); + } + flight.addToInputTable(base, rows.newTable(), bufferAllocator); + Thread.sleep(sleepMillis); + } + } finally { + for (LabeledValue result : results) { + result.value().close(); + } + } + } + + public static void main(String[] args) { + int execute = new CommandLine(new AggregateAllExample()).execute(args); + System.exit(execute); + } +} diff --git a/java-client/flight-examples/src/main/java/io/deephaven/client/examples/Sum.java b/java-client/flight-examples/src/main/java/io/deephaven/client/examples/Sum.java index edc7929d470..1839a5b6293 100644 --- a/java-client/flight-examples/src/main/java/io/deephaven/client/examples/Sum.java +++ b/java-client/flight-examples/src/main/java/io/deephaven/client/examples/Sum.java @@ -1,6 +1,7 @@ package io.deephaven.client.examples; import io.deephaven.api.TableOperations; +import io.deephaven.api.agg.Aggregation; import io.deephaven.qst.TableCreationLogic; import io.deephaven.qst.TableCreator; import io.deephaven.qst.table.TableSpec; @@ -28,7 +29,7 @@ protected TableCreationLogic logic() { public > T create(TableCreator c) { return c.of(TableSpec.empty(count)) .view("I=i") - .aggBy(Collections.singleton(io.deephaven.api.agg.Sum.of("Sum=I")), Collections.emptyList()); + .aggBy(Collections.singleton(Aggregation.AggSum("Sum=I")), Collections.emptyList()); } public static void main(String[] args) { diff --git a/java-client/session-dagger/src/test/java/io/deephaven/client/AnnotatedTable.java b/java-client/session-dagger/src/test/java/io/deephaven/client/AnnotatedTable.java index f02e4679f0f..175ce618cb5 100644 --- a/java-client/session-dagger/src/test/java/io/deephaven/client/AnnotatedTable.java +++ b/java-client/session-dagger/src/test/java/io/deephaven/client/AnnotatedTable.java @@ -1,29 +1,36 @@ package io.deephaven.client; import io.deephaven.qst.TableCreationLogic; +import io.deephaven.qst.table.TableHeader; import java.util.Objects; public class AnnotatedTable { - public static AnnotatedTable ofStatic(TableCreationLogic logic, long size) { - return new AnnotatedTable(logic, true, size); + public static AnnotatedTable ofStatic(TableHeader header, TableCreationLogic logic, long size) { + return new AnnotatedTable(header, logic, true, size); } - public static AnnotatedTable ofDynamic(TableCreationLogic logic) { - return new AnnotatedTable(logic, false, 0); + public static AnnotatedTable ofDynamic(TableHeader header, TableCreationLogic logic) { + return new AnnotatedTable(header, logic, false, 0); } + private final TableHeader header; private final TableCreationLogic logic; private final boolean isStatic; private final long size; - AnnotatedTable(TableCreationLogic logic, boolean isStatic, long size) { + AnnotatedTable(TableHeader header, TableCreationLogic logic, boolean isStatic, long size) { + this.header = Objects.requireNonNull(header); this.logic = Objects.requireNonNull(logic); this.isStatic = isStatic; this.size = size; } + public TableHeader header() { + return header; + } + public TableCreationLogic logic() { return logic; } diff --git a/java-client/session-dagger/src/test/java/io/deephaven/client/AnnotatedTableTest.java b/java-client/session-dagger/src/test/java/io/deephaven/client/AnnotatedTableTest.java index b5f34b3dba8..6ea0b17e3b3 100644 --- a/java-client/session-dagger/src/test/java/io/deephaven/client/AnnotatedTableTest.java +++ b/java-client/session-dagger/src/test/java/io/deephaven/client/AnnotatedTableTest.java @@ -1,17 +1,22 @@ package io.deephaven.client; +import io.deephaven.client.impl.SchemaAdapter; import io.deephaven.client.impl.TableHandle; import io.deephaven.client.impl.TableHandle.TableHandleException; +import io.deephaven.grpc_api.util.SchemaHelper; import io.deephaven.proto.backplane.grpc.ExportedTableCreationResponse; import io.deephaven.qst.table.ParentsVisitor; import io.deephaven.qst.table.TableCreatorImpl; import io.deephaven.qst.table.TableSpec; +import org.apache.arrow.vector.types.pojo.Field; +import org.apache.arrow.vector.types.pojo.Schema; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; import java.util.Collections; +import java.util.Iterator; import java.util.List; import java.util.Objects; import java.util.Set; @@ -82,5 +87,22 @@ private void checkResponse(TableHandle handle) { assertThat(response.getSuccess()).isTrue(); assertThat(response.getIsStatic()).isFalse(); } + final Schema expected = SchemaAdapter.of(table.header()); + final Schema actual = SchemaHelper.schema(response); + checkLax(expected, actual); + } + + private static void checkLax(Schema expected, Schema actual) { + final Iterator i1 = expected.getFields().iterator(); + final Iterator i2 = actual.getFields().iterator(); + while (i1.hasNext() && i2.hasNext()) { + final Field f1 = i1.next(); + final Field f2 = i2.next(); + assertThat(f1.getName()).isEqualTo(f2.getName()); + assertThat(f1.getType()).isEqualTo(f2.getType()); + assertThat(f1.isNullable()).isEqualTo(f2.isNullable()); + } + assertThat(i1).isExhausted(); + assertThat(i2).isExhausted(); } } diff --git a/java-client/session-dagger/src/test/java/io/deephaven/client/AnnotatedTables.java b/java-client/session-dagger/src/test/java/io/deephaven/client/AnnotatedTables.java index a27daaa96bc..f3e0a014fbd 100644 --- a/java-client/session-dagger/src/test/java/io/deephaven/client/AnnotatedTables.java +++ b/java-client/session-dagger/src/test/java/io/deephaven/client/AnnotatedTables.java @@ -1,9 +1,12 @@ package io.deephaven.client; import io.deephaven.api.TableOperations; +import io.deephaven.api.agg.spec.AggSpec; import io.deephaven.qst.TableCreationLogic; import io.deephaven.qst.TableCreationLogic1Input; import io.deephaven.qst.TableCreator; +import io.deephaven.qst.column.header.ColumnHeader; +import io.deephaven.qst.table.TableHeader; import java.time.Duration; import java.util.LinkedHashMap; @@ -15,33 +18,40 @@ public class AnnotatedTables { - public static final AnnotatedTable EMPTY_0 = ofStatic(AnnotatedTables::empty0, 0); - public static final AnnotatedTable EMPTY_1 = ofStatic(AnnotatedTables::empty1, 1); - public static final AnnotatedTable EMPTY_2 = ofStatic(AnnotatedTables::empty2, 2); + public static final TableHeader TIME = TableHeader.of(ColumnHeader.ofInstant("Timestamp")); - public static final AnnotatedTable TIME_1 = ofDynamic(AnnotatedTables::time1); - public static final AnnotatedTable TIME_2 = ofDynamic(AnnotatedTables::time2); + public static final TableHeader INDEX = TableHeader.of(ColumnHeader.ofLong("I")); - public static final AnnotatedTable MERGE_STATIC = ofStatic(AnnotatedTables::mergeStatic, 3); - public static final AnnotatedTable MERGE = ofDynamic(AnnotatedTables::merge); + public static final TableHeader TIME_INDEX = + TableHeader.of(ColumnHeader.ofInstant("Timestamp"), ColumnHeader.ofLong("I")); - public static final AnnotatedTable VIEW_STATIC = ofStatic(AnnotatedTables::viewStatic, 1); - public static final AnnotatedTable VIEW = ofDynamic(AnnotatedTables::view); + public static final AnnotatedTable EMPTY_0 = ofStatic(TableHeader.empty(), AnnotatedTables::empty0, 0); + public static final AnnotatedTable EMPTY_1 = ofStatic(TableHeader.empty(), AnnotatedTables::empty1, 1); + public static final AnnotatedTable EMPTY_2 = ofStatic(TableHeader.empty(), AnnotatedTables::empty2, 2); - public static final AnnotatedTable UPDATE_VIEW_STATIC = ofStatic(AnnotatedTables::updateViewStatic, 1); - public static final AnnotatedTable UPDATE_VIEW = ofDynamic(AnnotatedTables::updateView); + public static final AnnotatedTable TIME_1 = ofDynamic(TIME, AnnotatedTables::time1); + public static final AnnotatedTable TIME_2 = ofDynamic(TIME, AnnotatedTables::time2); - public static final AnnotatedTable UPDATE_STATIC = ofStatic(AnnotatedTables::updateStatic, 1); - public static final AnnotatedTable UPDATE = ofDynamic(AnnotatedTables::update); + public static final AnnotatedTable MERGE_STATIC = ofStatic(TableHeader.empty(), AnnotatedTables::mergeStatic, 3); + public static final AnnotatedTable MERGE = ofDynamic(TIME, AnnotatedTables::merge); - public static final AnnotatedTable SELECT_STATIC = ofStatic(AnnotatedTables::selectStatic, 1); - public static final AnnotatedTable SELECT = ofDynamic(AnnotatedTables::select); + public static final AnnotatedTable VIEW_STATIC = ofStatic(INDEX, AnnotatedTables::viewStatic, 1); + public static final AnnotatedTable VIEW = ofDynamic(INDEX, AnnotatedTables::view); - public static final AnnotatedTable HEAD_STATIC = ofStatic(AnnotatedTables::headStatic, 1); - public static final AnnotatedTable HEAD = ofDynamic(AnnotatedTables::head); + public static final AnnotatedTable UPDATE_VIEW_STATIC = ofStatic(INDEX, AnnotatedTables::updateViewStatic, 1); + public static final AnnotatedTable UPDATE_VIEW = ofDynamic(TIME_INDEX, AnnotatedTables::updateView); - public static final AnnotatedTable TAIL_STATIC = ofStatic(AnnotatedTables::tailStatic, 1); - public static final AnnotatedTable TAIL = ofDynamic(AnnotatedTables::tail); + public static final AnnotatedTable UPDATE_STATIC = ofStatic(INDEX, AnnotatedTables::updateStatic, 1); + public static final AnnotatedTable UPDATE = ofDynamic(TIME_INDEX, AnnotatedTables::update); + + public static final AnnotatedTable SELECT_STATIC = ofStatic(INDEX, AnnotatedTables::selectStatic, 1); + public static final AnnotatedTable SELECT = ofDynamic(INDEX, AnnotatedTables::select); + + public static final AnnotatedTable HEAD_STATIC = ofStatic(TableHeader.empty(), AnnotatedTables::headStatic, 1); + public static final AnnotatedTable HEAD = ofDynamic(TIME, AnnotatedTables::head); + + public static final AnnotatedTable TAIL_STATIC = ofStatic(TableHeader.empty(), AnnotatedTables::tailStatic, 1); + public static final AnnotatedTable TAIL = ofDynamic(TIME, AnnotatedTables::tail); public static final Adapter REVERSE_ADAPTER = AnnotatedTables::reverse; @@ -57,8 +67,6 @@ public class AnnotatedTables { public static final Adapter TAIL_2_ADAPTER = in -> tail(in, 2); - public static final Adapter GROUP_BY_ADAPTER = AnnotatedTables::groupBy; - public static final Adapter MERGE_2 = in -> { final TableCreationLogic merge2 = new TableCreationLogic() { @Override @@ -68,9 +76,9 @@ public > T create(TableCreator creation) { } }; if (in.isStatic()) { - return AnnotatedTable.ofStatic(merge2, in.size() * 2); + return AnnotatedTable.ofStatic(in.header(), merge2, in.size() * 2); } else { - return AnnotatedTable.ofDynamic(merge2); + return AnnotatedTable.ofDynamic(in.header(), merge2); } }; @@ -83,9 +91,9 @@ public > T create(TableCreator creation) { } }; if (in.isStatic()) { - return AnnotatedTable.ofStatic(merge3, in.size() * 3); + return AnnotatedTable.ofStatic(in.header(), merge3, in.size() * 3); } else { - return AnnotatedTable.ofDynamic(merge3); + return AnnotatedTable.ofDynamic(in.header(), merge3); } }; @@ -123,12 +131,20 @@ public static Map adapters() { map.put("TAIL_0", TAIL_0_ADAPTER); map.put("TAIL_1", TAIL_1_ADAPTER); map.put("TAIL_2", TAIL_2_ADAPTER); - map.put("BY", GROUP_BY_ADAPTER); map.put("MERGE_2", MERGE_2); map.put("MERGE_3", MERGE_3); return map; } + public static Map headerPreservingAggAllBy() { + final Map map = new LinkedHashMap<>(); + map.put("AGGALL_BY_FIRST", a -> headerPreservingAgg(a, AggSpec.first())); + map.put("AGGALL_BY_LAST", a -> headerPreservingAgg(a, AggSpec.last())); + map.put("AGGALL_BY_MAX", a -> headerPreservingAgg(a, AggSpec.max())); + map.put("AGGALL_BY_MIN", a -> headerPreservingAgg(a, AggSpec.min())); + return map; + } + public static Map annotatedTables() { final Map explicit = explicitlyAnnotatedTables(); @@ -156,6 +172,14 @@ private static void addDoubleDips(Map explicit, Map 0) { + for (Entry a1 : headerPreservingAggAllBy().entrySet()) { + final String doubleKey = key + " + " + a1.getKey(); + final AnnotatedTable derivativeSpec = a1.getValue().apply(value); + out.put(doubleKey, derivativeSpec); + } + } } } @@ -207,35 +231,35 @@ public static > T merge(TableCreator c) { } public static > T viewStatic(TableCreator c) { - return empty1(c).view("I=i"); + return empty1(c).view("I=ii"); } public static > T updateStatic(TableCreator c) { - return empty1(c).update("I=i"); + return empty1(c).update("I=ii"); } public static > T updateViewStatic(TableCreator c) { - return empty1(c).updateView("I=i"); + return empty1(c).updateView("I=ii"); } public static > T selectStatic(TableCreator c) { - return empty1(c).select("I=i"); + return empty1(c).select("I=ii"); } public static > T view(TableCreator c) { - return time1(c).view("I=i"); + return time1(c).view("I=ii"); } public static > T update(TableCreator c) { - return time1(c).update("I=i"); + return time1(c).update("I=ii"); } public static > T updateView(TableCreator c) { - return time1(c).updateView("I=i"); + return time1(c).updateView("I=ii"); } public static > T select(TableCreator c) { - return time1(c).select("I=i"); + return time1(c).select("I=ii"); } public static > T headStatic(TableCreator c) { @@ -259,13 +283,24 @@ public interface Adapter { } public static AnnotatedTable reverse(AnnotatedTable in) { - return new AnnotatedTable(in.logic().andThen(TableOperations::reverse), in.isStatic(), in.size()); + return new AnnotatedTable(in.header(), in.logic().andThen(TableOperations::reverse), in.isStatic(), in.size()); } - public static AnnotatedTable groupBy(AnnotatedTable in) { - return new AnnotatedTable(in.logic().andThen(TableOperations::groupBy), in.isStatic(), Math.min(in.size(), 1)); + public static AnnotatedTable headerPreservingAgg(AnnotatedTable in, AggSpec spec) { + return new AnnotatedTable(in.header(), in.logic().andThen(aggAllBy(spec)), in.isStatic(), + Math.min(in.size(), 1)); } + private static TableCreationLogic1Input aggAllBy(AggSpec spec) { + return new TableCreationLogic1Input() { + @Override + public > T create(T t1) { + return t1.aggAllBy(spec); + } + }; + } + + public static AnnotatedTable head(AnnotatedTable in, int size) { final TableCreationLogic1Input op = new TableCreationLogic1Input() { @Override @@ -275,9 +310,9 @@ public > T create(T t1) { }; final TableCreationLogic headLogic = in.logic().andThen(op); if (in.isStatic() || size == 0) { - return AnnotatedTable.ofStatic(headLogic, Math.min(in.size(), size)); + return AnnotatedTable.ofStatic(in.header(), headLogic, Math.min(in.size(), size)); } else { - return AnnotatedTable.ofDynamic(headLogic); + return AnnotatedTable.ofDynamic(in.header(), headLogic); } } @@ -290,9 +325,9 @@ public > T create(T t1) { }; final TableCreationLogic tailLogic = in.logic().andThen(op); if (in.isStatic() || size == 0) { - return AnnotatedTable.ofStatic(tailLogic, Math.min(in.size(), size)); + return AnnotatedTable.ofStatic(in.header(), tailLogic, Math.min(in.size(), size)); } else { - return AnnotatedTable.ofDynamic(tailLogic); + return AnnotatedTable.ofDynamic(in.header(), tailLogic); } } } diff --git a/java-client/session/src/main/java/io/deephaven/client/impl/BatchTableRequestBuilder.java b/java-client/session/src/main/java/io/deephaven/client/impl/BatchTableRequestBuilder.java index 7c1d12ba6ea..04d8237095e 100644 --- a/java-client/session/src/main/java/io/deephaven/client/impl/BatchTableRequestBuilder.java +++ b/java-client/session/src/main/java/io/deephaven/client/impl/BatchTableRequestBuilder.java @@ -11,29 +11,31 @@ import io.deephaven.api.SortColumn; import io.deephaven.api.SortColumn.Order; import io.deephaven.api.Strings; -import io.deephaven.api.agg.AbsSum; import io.deephaven.api.agg.Aggregation; -import io.deephaven.api.agg.Group; -import io.deephaven.api.agg.Avg; import io.deephaven.api.agg.Count; -import io.deephaven.api.agg.CountDistinct; -import io.deephaven.api.agg.Distinct; -import io.deephaven.api.agg.First; -import io.deephaven.api.agg.Last; -import io.deephaven.api.agg.Max; -import io.deephaven.api.agg.Med; -import io.deephaven.api.agg.Min; -import io.deephaven.api.agg.Multi; +import io.deephaven.api.agg.NormalAggregation; +import io.deephaven.api.agg.NormalAggregations; import io.deephaven.api.agg.Pair; -import io.deephaven.api.agg.Pct; -import io.deephaven.api.agg.SortedFirst; -import io.deephaven.api.agg.SortedLast; -import io.deephaven.api.agg.Std; -import io.deephaven.api.agg.Sum; -import io.deephaven.api.agg.Unique; -import io.deephaven.api.agg.Var; -import io.deephaven.api.agg.WAvg; -import io.deephaven.api.agg.WSum; +import io.deephaven.api.agg.spec.AggSpec; +import io.deephaven.api.agg.spec.AggSpecAbsSum; +import io.deephaven.api.agg.spec.AggSpecAvg; +import io.deephaven.api.agg.spec.AggSpecCountDistinct; +import io.deephaven.api.agg.spec.AggSpecDistinct; +import io.deephaven.api.agg.spec.AggSpecFirst; +import io.deephaven.api.agg.spec.AggSpecGroup; +import io.deephaven.api.agg.spec.AggSpecLast; +import io.deephaven.api.agg.spec.AggSpecMax; +import io.deephaven.api.agg.spec.AggSpecMedian; +import io.deephaven.api.agg.spec.AggSpecMin; +import io.deephaven.api.agg.spec.AggSpecPercentile; +import io.deephaven.api.agg.spec.AggSpecSortedFirst; +import io.deephaven.api.agg.spec.AggSpecSortedLast; +import io.deephaven.api.agg.spec.AggSpecStd; +import io.deephaven.api.agg.spec.AggSpecSum; +import io.deephaven.api.agg.spec.AggSpecUnique; +import io.deephaven.api.agg.spec.AggSpecVar; +import io.deephaven.api.agg.spec.AggSpecWAvg; +import io.deephaven.api.agg.spec.AggSpecWSum; import io.deephaven.api.filter.Filter; import io.deephaven.api.filter.FilterAnd; import io.deephaven.api.filter.FilterCondition; @@ -81,11 +83,42 @@ import io.deephaven.proto.backplane.grpc.Ticket; import io.deephaven.proto.backplane.grpc.TimeTableRequest; import io.deephaven.proto.backplane.grpc.UnstructuredFilterTableRequest; -import io.deephaven.qst.table.*; +import io.deephaven.qst.table.AggregateAllByTable; +import io.deephaven.qst.table.AggregationTable; +import io.deephaven.qst.table.AsOfJoinTable; +import io.deephaven.qst.table.ByTableBase; +import io.deephaven.qst.table.EmptyTable; +import io.deephaven.qst.table.ExactJoinTable; +import io.deephaven.qst.table.HeadTable; +import io.deephaven.qst.table.InMemoryAppendOnlyInputTable; +import io.deephaven.qst.table.InMemoryKeyBackedInputTable; +import io.deephaven.qst.table.InputTable; +import io.deephaven.qst.table.JoinTable; +import io.deephaven.qst.table.MergeTable; +import io.deephaven.qst.table.NaturalJoinTable; +import io.deephaven.qst.table.NewTable; +import io.deephaven.qst.table.ReverseAsOfJoinTable; +import io.deephaven.qst.table.ReverseTable; +import io.deephaven.qst.table.SelectTable; +import io.deephaven.qst.table.SingleParentTable; +import io.deephaven.qst.table.SnapshotTable; +import io.deephaven.qst.table.SortTable; +import io.deephaven.qst.table.TableHeader; +import io.deephaven.qst.table.TableSchema; +import io.deephaven.qst.table.TableSpec; +import io.deephaven.qst.table.TailTable; +import io.deephaven.qst.table.TicketTable; import io.deephaven.qst.table.TimeProvider.Visitor; +import io.deephaven.qst.table.TimeProviderSystem; +import io.deephaven.qst.table.TimeTable; +import io.deephaven.qst.table.UpdateTable; +import io.deephaven.qst.table.UpdateViewTable; +import io.deephaven.qst.table.ViewTable; +import io.deephaven.qst.table.WhereInTable; +import io.deephaven.qst.table.WhereNotInTable; +import io.deephaven.qst.table.WhereTable; import java.time.Instant; -import java.util.ArrayList; import java.util.Collection; import java.util.Collections; import java.util.HashMap; @@ -370,17 +403,13 @@ public void visit(SelectTable v) { } @Override - public void visit(GroupByTable groupByTable) { - out = op(Builder::setComboAggregate, singleAgg(groupByTable, AggType.GROUP)); + public void visit(AggregateAllByTable aggAllByTable) { + out = op(Builder::setComboAggregate, aggAllBy(aggAllByTable)); } @Override public void visit(AggregationTable aggregationTable) { - ComboAggregateRequest.Builder builder = groupByColumns(aggregationTable); - for (Aggregation aggregation : aggregationTable.aggregations()) { - builder.addAllAggregates(AggregationAdapter.of(aggregation)); - } - out = op(Builder::setComboAggregate, builder); + out = op(Builder::setComboAggregate, aggBy(aggregationTable)); } @Override @@ -432,15 +461,26 @@ private SelectOrUpdateRequest selectOrUpdate(SingleParentTable x, return builder.build(); } - private ComboAggregateRequest singleAgg(ByTableBase base, AggType type) { - return groupByColumns(base).addAggregates(Aggregate.newBuilder().setType(type).build()).build(); + private ComboAggregateRequest aggAllBy(AggregateAllByTable agg) { + // A single aggregate without any input/output is how the protocol knows this is an "aggregate all by" + // as opposed to an AggregationTable with one agg. + final Aggregate aggregate = agg.spec().walk(new AggregateAdapter(Collections.emptyList())).out(); + return groupByColumns(agg).addAggregates(aggregate).build(); + } + + private ComboAggregateRequest aggBy(AggregationTable agg) { + ComboAggregateRequest.Builder builder = groupByColumns(agg); + for (Aggregation aggregation : agg.aggregations()) { + builder.addAggregates(AggregationAdapter.of(aggregation)); + } + return builder.build(); } private ComboAggregateRequest.Builder groupByColumns(ByTableBase base) { ComboAggregateRequest.Builder builder = ComboAggregateRequest.newBuilder() .setResultId(ticket) .setSourceId(ref(base.parent())); - for (Selectable column : base.columns()) { + for (Selectable column : base.groupByColumns()) { builder.addGroupByColumns(Strings.of(column)); } return builder; @@ -449,149 +489,30 @@ private ComboAggregateRequest.Builder groupByColumns(ByTableBase base) { private static class AggregationAdapter implements Aggregation.Visitor { - public static List of(Aggregation aggregation) { - return aggregation.walk(new AggregationAdapter()).getOut(); + public static Aggregate of(Aggregation aggregation) { + return aggregation.walk(new AggregationAdapter()).out(); } private Aggregate out; - private List multi; - - public List getOut() { - if (multi != null) { - return multi; - } - if (out != null) { - return Collections.singletonList(out); - } - throw new IllegalStateException(); - } - - private Aggregate.Builder of(AggType type, Pair specs) { - return Aggregate.newBuilder().setType(type).addMatchPairs(Strings.of(specs)); - } - - @Override - public void visit(Min min) { - out = of(AggType.MIN, min.pair()).build(); - } - - @Override - public void visit(Max max) { - out = of(AggType.MAX, max.pair()).build(); - } - - @Override - public void visit(Sum sum) { - out = of(AggType.SUM, sum.pair()).build(); - } - - @Override - public void visit(Var var) { - out = of(AggType.VAR, var.pair()).build(); - } - - @Override - public void visit(Avg avg) { - out = of(AggType.AVG, avg.pair()).build(); - } - - @Override - public void visit(First first) { - out = of(AggType.FIRST, first.pair()).build(); - } - - @Override - public void visit(Last last) { - out = of(AggType.LAST, last.pair()).build(); - } - - @Override - public void visit(Std std) { - out = of(AggType.STD, std.pair()).build(); - } - - @Override - public void visit(Med med) { - if (!med.averageMedian()) { - throw new UnsupportedOperationException( - "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); - } - out = of(AggType.MEDIAN, med.pair()).build(); - } - - @Override - public void visit(Pct pct) { - if (pct.averageMedian()) { - throw new UnsupportedOperationException( - "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); - } - out = of(AggType.PERCENTILE, pct.pair()).build(); - } - @Override - public void visit(WSum wSum) { - throw new UnsupportedOperationException( - "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); - } - - @Override - public void visit(WAvg wAvg) { - out = of(AggType.WEIGHTED_AVG, wAvg.pair()).setColumnName(wAvg.weight().name()).build(); + public Aggregate out() { + return Objects.requireNonNull(out); } @Override public void visit(Count count) { - out = Aggregate.newBuilder().setType(AggType.COUNT).setColumnName(count.column().name()) - .build(); - } - - @Override - public void visit(CountDistinct countDistinct) { - throw new UnsupportedOperationException( - "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); - } - - @Override - public void visit(Distinct distinct) { - throw new UnsupportedOperationException( - "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); + out = Aggregate.newBuilder().setType(AggType.COUNT).setColumnName(count.column().name()).build(); } @Override - public void visit(Group group) { - out = of(AggType.GROUP, group.pair()).build(); + public void visit(NormalAggregation normalAgg) { + out = normalAgg.spec() + .walk(new AggregateAdapter(Collections.singletonList(normalAgg.pair()))).out(); } @Override - public void visit(AbsSum absSum) { - out = of(AggType.ABS_SUM, absSum.pair()).build(); - } - - @Override - public void visit(Unique unique) { - throw new UnsupportedOperationException( - "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); - } - - @Override - public void visit(SortedFirst sortedFirst) { - throw new UnsupportedOperationException( - "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); - } - - @Override - public void visit(SortedLast sortedLast) { - throw new UnsupportedOperationException( - "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); - } - - @Override - public void visit(Multi multi) { - List result = new ArrayList<>(); - for (Aggregation aggregation : multi.aggregations()) { - result.addAll(of(aggregation)); - } - this.multi = result; + public void visit(NormalAggregations normalAggs) { + out = normalAggs.spec().walk(new AggregateAdapter(normalAggs.pairs())).out(); } } @@ -710,4 +631,137 @@ public void visit(RawString rawString) { throw new IllegalStateException("Can't build Condition with raw string"); } } + + private static Aggregate.Builder of(AggType type, List pairs) { + final Aggregate.Builder builder = Aggregate.newBuilder().setType(type); + for (Pair pair : pairs) { + builder.addMatchPairs(Strings.of(pair)); + } + return builder; + } + + private static class AggregateAdapter implements AggSpec.Visitor { + + private final List pairs; + + public AggregateAdapter(List pairs) { + this.pairs = Objects.requireNonNull(pairs); + } + + private Aggregate out; + + private Aggregate out() { + return Objects.requireNonNull(out); + } + + @Override + public void visit(AggSpecAbsSum absSum) { + out = of(AggType.ABS_SUM, pairs).build(); + } + + @Override + public void visit(AggSpecCountDistinct countDistinct) { + throw new UnsupportedOperationException( + "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); + } + + @Override + public void visit(AggSpecDistinct distinct) { + throw new UnsupportedOperationException( + "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); + } + + @Override + public void visit(AggSpecGroup group) { + out = of(AggType.GROUP, pairs).build(); + } + + @Override + public void visit(AggSpecAvg avg) { + out = of(AggType.AVG, pairs).build(); + } + + @Override + public void visit(AggSpecFirst first) { + out = of(AggType.FIRST, pairs).build(); + } + + @Override + public void visit(AggSpecLast last) { + out = of(AggType.LAST, pairs).build(); + } + + @Override + public void visit(AggSpecMax max) { + out = of(AggType.MAX, pairs).build(); + } + + @Override + public void visit(AggSpecMedian median) { + if (!median.averageMedian()) { + throw new UnsupportedOperationException( + "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); + } + out = of(AggType.MEDIAN, pairs).build(); + } + + @Override + public void visit(AggSpecMin min) { + out = of(AggType.MIN, pairs).build(); + } + + @Override + public void visit(AggSpecPercentile pct) { + if (pct.averageMedian()) { + throw new UnsupportedOperationException( + "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); + } + out = of(AggType.PERCENTILE, pairs).build(); + } + + @Override + public void visit(AggSpecSortedFirst sortedFirst) { + throw new UnsupportedOperationException( + "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); + } + + @Override + public void visit(AggSpecSortedLast sortedLast) { + throw new UnsupportedOperationException( + "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); + } + + @Override + public void visit(AggSpecStd std) { + out = of(AggType.STD, pairs).build(); + } + + @Override + public void visit(AggSpecSum sum) { + out = of(AggType.SUM, pairs).build(); + } + + @Override + public void visit(AggSpecUnique unique) { + throw new UnsupportedOperationException( + "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); + } + + @Override + public void visit(AggSpecWAvg wAvg) { + out = of(AggType.WEIGHTED_AVG, pairs).setColumnName(wAvg.weight().name()).build(); + + } + + @Override + public void visit(AggSpecWSum wSum) { + throw new UnsupportedOperationException( + "TODO(deephaven-core#991): TableService aggregation coverage, https://github.com/deephaven/deephaven-core/issues/991"); + } + + @Override + public void visit(AggSpecVar var) { + out = of(AggType.VAR, pairs).build(); + } + } } diff --git a/qst/graphviz/src/main/java/io/deephaven/graphviz/LabelBuilder.java b/qst/graphviz/src/main/java/io/deephaven/graphviz/LabelBuilder.java index 4522abbdc36..dd6608b457c 100644 --- a/qst/graphviz/src/main/java/io/deephaven/graphviz/LabelBuilder.java +++ b/qst/graphviz/src/main/java/io/deephaven/graphviz/LabelBuilder.java @@ -1,11 +1,11 @@ package io.deephaven.graphviz; import io.deephaven.api.Strings; +import io.deephaven.qst.table.AggregateAllByTable; import io.deephaven.qst.table.AggregationTable; import io.deephaven.qst.table.AsOfJoinTable; import io.deephaven.qst.table.EmptyTable; import io.deephaven.qst.table.ExactJoinTable; -import io.deephaven.qst.table.GroupByTable; import io.deephaven.qst.table.HeadTable; import io.deephaven.qst.table.InMemoryAppendOnlyInputTable; import io.deephaven.qst.table.InMemoryKeyBackedInputTable; @@ -129,17 +129,18 @@ public void visit(WhereTable whereTable) { } @Override - public void visit(GroupByTable groupByTable) { - sb.append("groupBy("); - append(Strings::of, groupByTable.columns(), sb); + public void visit(AggregateAllByTable aggAllByTable) { + sb.append("aggAllBy("); + sb.append(aggAllByTable.spec()).append(','); + append(Strings::of, aggAllByTable.groupByColumns(), sb); sb.append(')'); } @Override public void visit(AggregationTable aggregationTable) { // TODO(deephaven-core#1116): Add labeling, or structuring, for qst graphviz aggregations - sb.append("groupBy(["); - append(Strings::of, aggregationTable.columns(), sb); + sb.append("aggBy(["); + append(Strings::of, aggregationTable.groupByColumns(), sb); sb.append("],[ todo ])"); } diff --git a/qst/src/main/java/io/deephaven/qst/TableAdapterImpl.java b/qst/src/main/java/io/deephaven/qst/TableAdapterImpl.java index a1bc7280e2a..b8e6a2e8693 100644 --- a/qst/src/main/java/io/deephaven/qst/TableAdapterImpl.java +++ b/qst/src/main/java/io/deephaven/qst/TableAdapterImpl.java @@ -1,12 +1,14 @@ package io.deephaven.qst; +import io.deephaven.api.Selectable; import io.deephaven.api.TableOperations; +import io.deephaven.api.agg.spec.AggSpec; import io.deephaven.qst.TableAdapterResults.Output; +import io.deephaven.qst.table.AggregateAllByTable; import io.deephaven.qst.table.AggregationTable; import io.deephaven.qst.table.AsOfJoinTable; import io.deephaven.qst.table.EmptyTable; import io.deephaven.qst.table.ExactJoinTable; -import io.deephaven.qst.table.GroupByTable; import io.deephaven.qst.table.HeadTable; import io.deephaven.qst.table.InputTable; import io.deephaven.qst.table.JoinTable; @@ -226,14 +228,16 @@ public void visit(ReverseAsOfJoinTable raj) { } @Override - public void visit(GroupByTable groupByTable) { - addOp(groupByTable, parentOps(groupByTable).groupBy(groupByTable.columns())); + public void visit(AggregateAllByTable aggAllByTable) { + final AggSpec spec = aggAllByTable.spec(); + final Selectable[] groupByColumns = aggAllByTable.groupByColumns().toArray(new Selectable[0]); + addOp(aggAllByTable, parentOps(aggAllByTable).aggAllBy(spec, groupByColumns)); } @Override public void visit(AggregationTable aggregationTable) { addOp(aggregationTable, - parentOps(aggregationTable).aggBy(aggregationTable.aggregations(), aggregationTable.columns())); + parentOps(aggregationTable).aggBy(aggregationTable.aggregations(), aggregationTable.groupByColumns())); } @Override diff --git a/qst/src/main/java/io/deephaven/qst/table/AggAllByExclusions.java b/qst/src/main/java/io/deephaven/qst/table/AggAllByExclusions.java new file mode 100644 index 00000000000..a33bf906b5f --- /dev/null +++ b/qst/src/main/java/io/deephaven/qst/table/AggAllByExclusions.java @@ -0,0 +1,146 @@ +package io.deephaven.qst.table; + +import io.deephaven.api.ColumnName; +import io.deephaven.api.Selectable; +import io.deephaven.api.agg.spec.AggSpec; +import io.deephaven.api.agg.spec.AggSpec.Visitor; +import io.deephaven.api.agg.spec.AggSpecAbsSum; +import io.deephaven.api.agg.spec.AggSpecAvg; +import io.deephaven.api.agg.spec.AggSpecCountDistinct; +import io.deephaven.api.agg.spec.AggSpecDistinct; +import io.deephaven.api.agg.spec.AggSpecFirst; +import io.deephaven.api.agg.spec.AggSpecGroup; +import io.deephaven.api.agg.spec.AggSpecLast; +import io.deephaven.api.agg.spec.AggSpecMax; +import io.deephaven.api.agg.spec.AggSpecMedian; +import io.deephaven.api.agg.spec.AggSpecMin; +import io.deephaven.api.agg.spec.AggSpecPercentile; +import io.deephaven.api.agg.spec.AggSpecSortedFirst; +import io.deephaven.api.agg.spec.AggSpecSortedLast; +import io.deephaven.api.agg.spec.AggSpecStd; +import io.deephaven.api.agg.spec.AggSpecSum; +import io.deephaven.api.agg.spec.AggSpecUnique; +import io.deephaven.api.agg.spec.AggSpecVar; +import io.deephaven.api.agg.spec.AggSpecWAvg; +import io.deephaven.api.agg.spec.AggSpecWSum; + +import java.util.Collection; +import java.util.Collections; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +/** + * Computes the columns to exclude from aggregation output + */ +final class AggAllByExclusions implements Visitor { + + public static Set of(AggSpec spec, Collection groupByColumns) { + final Set exclusions = + groupByColumns.stream().map(Selectable::newColumn).collect(Collectors.toSet()); + final Set otherExclusions = spec.walk(new AggAllByExclusions()).out(); + exclusions.addAll(otherExclusions); + return exclusions; + } + + private Set out; + + public Set out() { + return Objects.requireNonNull(out); + } + + @Override + public void visit(AggSpecAbsSum absSum) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecCountDistinct countDistinct) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecDistinct distinct) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecGroup group) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecAvg avg) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecFirst first) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecLast last) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecMax max) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecMedian median) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecMin min) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecPercentile pct) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecSortedFirst sortedFirst) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecSortedLast sortedLast) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecStd std) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecSum sum) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecUnique unique) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecWAvg wAvg) { + out = Collections.singleton(wAvg.weight()); + } + + @Override + public void visit(AggSpecWSum wSum) { + out = Collections.singleton(wSum.weight()); + } + + @Override + public void visit(AggSpecVar var) { + out = Collections.emptySet(); + } +} diff --git a/qst/src/main/java/io/deephaven/qst/table/AggregateAllByTable.java b/qst/src/main/java/io/deephaven/qst/table/AggregateAllByTable.java new file mode 100644 index 00000000000..d03c6552382 --- /dev/null +++ b/qst/src/main/java/io/deephaven/qst/table/AggregateAllByTable.java @@ -0,0 +1,74 @@ +package io.deephaven.qst.table; + +import io.deephaven.annotations.NodeStyle; +import io.deephaven.api.ColumnName; +import io.deephaven.api.Selectable; +import io.deephaven.api.agg.Aggregation; +import io.deephaven.api.agg.spec.AggSpec; +import org.immutables.value.Value.Immutable; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Optional; +import java.util.Set; + +@Immutable +@NodeStyle +public abstract class AggregateAllByTable extends ByTableBase { + + public static Builder builder() { + return ImmutableAggregateAllByTable.builder(); + } + + /** + * Computes the single-aggregation from the agg-all implied by the {@code spec} and {@code groupByColumns} by + * removing the {@code groupByColumns} and any extra columns implied by the {@code spec}. + * + * @param spec the spec + * @param groupByColumns the group by columns + * @param tableColumns the table columns + * @return the aggregation, if non-empty + */ + public static Optional singleAggregation( + AggSpec spec, Collection groupByColumns, + Collection tableColumns) { + Set exclusions = AggAllByExclusions.of(spec, groupByColumns); + List columnsToAgg = new ArrayList<>(tableColumns.size()); + for (ColumnName column : tableColumns) { + if (exclusions.contains(column)) { + continue; + } + columnsToAgg.add(column); + } + return columnsToAgg.isEmpty() ? Optional.empty() : Optional.of(spec.aggregation(columnsToAgg)); + } + + public abstract AggSpec spec(); + + /** + * Transform {@code this} agg-all-by table into an {@link AggregationTable} by constructing the necessary + * {@link Aggregation} from the {@link #spec()} and {@code tableColumns}. + * + * @param tableColumns the table columns + * @return the aggregation table + * @see #singleAggregation(AggSpec, Collection, Collection) + */ + public final AggregationTable asAggregation(Collection tableColumns) { + AggregationTable.Builder builder = AggregationTable.builder() + .parent(parent()) + .addAllGroupByColumns(groupByColumns()); + singleAggregation(spec(), groupByColumns(), tableColumns).ifPresent(builder::addAggregations); + return builder.build(); + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } + + public interface Builder extends ByTableBase.Builder { + Builder spec(AggSpec spec); + } +} diff --git a/qst/src/main/java/io/deephaven/qst/table/AggregationTable.java b/qst/src/main/java/io/deephaven/qst/table/AggregationTable.java index ac5d4946b05..a9b9bd66672 100644 --- a/qst/src/main/java/io/deephaven/qst/table/AggregationTable.java +++ b/qst/src/main/java/io/deephaven/qst/table/AggregationTable.java @@ -1,8 +1,7 @@ package io.deephaven.qst.table; -import io.deephaven.api.Selectable; -import io.deephaven.api.agg.Aggregation; import io.deephaven.annotations.NodeStyle; +import io.deephaven.api.agg.Aggregation; import org.immutables.value.Value.Check; import org.immutables.value.Value.Immutable; @@ -20,10 +19,6 @@ public static Builder builder() { return ImmutableAggregationTable.builder(); } - public abstract TableSpec parent(); - - public abstract List columns(); - public abstract List aggregations(); @Override @@ -39,21 +34,11 @@ final void checkNumAggs() { } } - public interface Builder { - Builder parent(TableSpec parent); - - Builder addColumns(Selectable element); - - Builder addColumns(Selectable... elements); - - Builder addAllColumns(Iterable elements); - + public interface Builder extends ByTableBase.Builder { Builder addAggregations(Aggregation element); Builder addAggregations(Aggregation... elements); Builder addAllAggregations(Iterable elements); - - AggregationTable build(); } } diff --git a/qst/src/main/java/io/deephaven/qst/table/ByTableBase.java b/qst/src/main/java/io/deephaven/qst/table/ByTableBase.java index ffa9286bd13..18ed5bc5ca6 100644 --- a/qst/src/main/java/io/deephaven/qst/table/ByTableBase.java +++ b/qst/src/main/java/io/deephaven/qst/table/ByTableBase.java @@ -6,5 +6,19 @@ public abstract class ByTableBase extends TableBase implements SingleParentTable { - public abstract List columns(); + public abstract TableSpec parent(); + + public abstract List groupByColumns(); + + interface Builder> { + SELF parent(TableSpec parent); + + SELF addGroupByColumns(Selectable element); + + SELF addGroupByColumns(Selectable... elements); + + SELF addAllGroupByColumns(Iterable elements); + + BY build(); + } } diff --git a/qst/src/main/java/io/deephaven/qst/table/GroupByTable.java b/qst/src/main/java/io/deephaven/qst/table/GroupByTable.java deleted file mode 100644 index 4f7f815cd3e..00000000000 --- a/qst/src/main/java/io/deephaven/qst/table/GroupByTable.java +++ /dev/null @@ -1,42 +0,0 @@ -package io.deephaven.qst.table; - -import io.deephaven.api.Selectable; -import io.deephaven.annotations.NodeStyle; -import org.immutables.value.Value.Immutable; - -import java.util.Collection; -import java.util.List; - -/** - * @see io.deephaven.api.TableOperations#groupBy(Collection) - */ -@Immutable -@NodeStyle -public abstract class GroupByTable extends ByTableBase { - - public static Builder builder() { - return ImmutableGroupByTable.builder(); - } - - public abstract TableSpec parent(); - - public abstract List columns(); - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } - - public interface Builder { - Builder parent(TableSpec parent); - - Builder addColumns(Selectable element); - - Builder addColumns(Selectable... elements); - - Builder addAllColumns(Iterable elements); - - GroupByTable build(); - } -} diff --git a/qst/src/main/java/io/deephaven/qst/table/ParentsVisitor.java b/qst/src/main/java/io/deephaven/qst/table/ParentsVisitor.java index bea5a18b64c..658c9a7ab05 100644 --- a/qst/src/main/java/io/deephaven/qst/table/ParentsVisitor.java +++ b/qst/src/main/java/io/deephaven/qst/table/ParentsVisitor.java @@ -240,8 +240,8 @@ public void visit(UpdateTable updateTable) { } @Override - public void visit(GroupByTable groupByTable) { - out = single(groupByTable); + public void visit(AggregateAllByTable aggAllByTable) { + out = single(aggAllByTable); } @Override diff --git a/qst/src/main/java/io/deephaven/qst/table/TableBase.java b/qst/src/main/java/io/deephaven/qst/table/TableBase.java index e5e00b76b22..70cda7027b9 100644 --- a/qst/src/main/java/io/deephaven/qst/table/TableBase.java +++ b/qst/src/main/java/io/deephaven/qst/table/TableBase.java @@ -9,6 +9,7 @@ import io.deephaven.api.Selectable; import io.deephaven.api.SortColumn; import io.deephaven.api.agg.Aggregation; +import io.deephaven.api.agg.spec.AggSpec; import io.deephaven.api.filter.Filter; import io.deephaven.qst.TableCreationLogic; @@ -23,7 +24,6 @@ public abstract class TableBase implements TableSpec { // necessary TableSpec instead of delegating to other methods. The default values are the // responsibility of the TableSpec. - @Override public final TableCreationLogic logic() { return new TableCreationLogicImpl(this); @@ -372,22 +372,42 @@ public final SelectTable select(Collection columns) { } @Override - public final GroupByTable groupBy() { - return GroupByTable.builder().parent(this).build(); + public final AggregateAllByTable groupBy() { + return aggAllBy(AggSpec.group()); } @Override - public final GroupByTable groupBy(String... groupByColumns) { - GroupByTable.Builder builder = GroupByTable.builder().parent(this); - for (String groupByColumn : groupByColumns) { - builder.addColumns(Selectable.parse(groupByColumn)); - } - return builder.build(); + public final AggregateAllByTable groupBy(String... groupByColumns) { + return aggAllBy(AggSpec.group(), groupByColumns); + } + + @Override + public final AggregateAllByTable groupBy(Collection groupByColumns) { + return aggAllBy(AggSpec.group(), groupByColumns.toArray(new Selectable[0])); + } + + @Override + public final AggregateAllByTable aggAllBy(AggSpec spec) { + return AggregateAllByTable.builder().parent(this).spec(spec).build(); } @Override - public final GroupByTable groupBy(Collection groupByColumns) { - return GroupByTable.builder().parent(this).addAllColumns(groupByColumns).build(); + public final AggregateAllByTable aggAllBy(AggSpec spec, String... groupByColumns) { + return aggAllBy(spec, Arrays.asList(groupByColumns)); + } + + @Override + public final AggregateAllByTable aggAllBy(AggSpec spec, Selectable... groupByColumns) { + return AggregateAllByTable.builder().parent(this).spec(spec).addGroupByColumns(groupByColumns).build(); + } + + @Override + public final AggregateAllByTable aggAllBy(AggSpec spec, Collection groupByColumns) { + AggregateAllByTable.Builder builder = AggregateAllByTable.builder().parent(this).spec(spec); + for (String groupByColumn : groupByColumns) { + builder.addGroupByColumns(Selectable.parse(groupByColumn)); + } + return builder.build(); } @Override @@ -399,14 +419,14 @@ public final AggregationTable aggBy(Aggregation aggregation) { public final AggregationTable aggBy(Aggregation aggregation, String... groupByColumns) { final AggregationTable.Builder builder = AggregationTable.builder().parent(this); for (String groupByColumn : groupByColumns) { - builder.addColumns(Selectable.parse(groupByColumn)); + builder.addGroupByColumns(Selectable.parse(groupByColumn)); } return builder.addAggregations(aggregation).build(); } @Override public final AggregationTable aggBy(Aggregation aggregation, Collection groupByColumns) { - return AggregationTable.builder().parent(this).addAllColumns(groupByColumns) + return AggregationTable.builder().parent(this).addAllGroupByColumns(groupByColumns) .addAggregations(aggregation).build(); } @@ -419,7 +439,7 @@ public final AggregationTable aggBy(Collection aggregatio public final AggregationTable aggBy(Collection aggregations, String... groupByColumns) { final AggregationTable.Builder builder = AggregationTable.builder().parent(this); for (String groupByColumn : groupByColumns) { - builder.addColumns(Selectable.parse(groupByColumn)); + builder.addGroupByColumns(Selectable.parse(groupByColumn)); } return builder.addAllAggregations(aggregations).build(); } @@ -427,7 +447,7 @@ public final AggregationTable aggBy(Collection aggregatio @Override public final AggregationTable aggBy(Collection aggregations, Collection groupByColumns) { - return AggregationTable.builder().parent(this).addAllColumns(groupByColumns) + return AggregationTable.builder().parent(this).addAllGroupByColumns(groupByColumns) .addAllAggregations(aggregations).build(); } diff --git a/qst/src/main/java/io/deephaven/qst/table/TableSpec.java b/qst/src/main/java/io/deephaven/qst/table/TableSpec.java index 59bece4785f..c61b9fe2e3c 100644 --- a/qst/src/main/java/io/deephaven/qst/table/TableSpec.java +++ b/qst/src/main/java/io/deephaven/qst/table/TableSpec.java @@ -139,10 +139,10 @@ interface Visitor { void visit(UpdateTable updateTable); - void visit(GroupByTable groupByTable); - void visit(AggregationTable aggregationTable); + void visit(AggregateAllByTable aggAllByTable); + void visit(TicketTable ticketTable); void visit(InputTable inputTable); diff --git a/qst/src/main/java/io/deephaven/qst/table/TableVisitorGeneric.java b/qst/src/main/java/io/deephaven/qst/table/TableVisitorGeneric.java index bf379061b60..8346ea6bbc9 100644 --- a/qst/src/main/java/io/deephaven/qst/table/TableVisitorGeneric.java +++ b/qst/src/main/java/io/deephaven/qst/table/TableVisitorGeneric.java @@ -110,8 +110,8 @@ public void visit(UpdateTable updateTable) { } @Override - public void visit(GroupByTable groupByTable) { - accept(groupByTable); + public void visit(AggregateAllByTable aggAllByTable) { + accept(aggAllByTable); } @Override diff --git a/table-api/src/main/java/io/deephaven/api/TableOperations.java b/table-api/src/main/java/io/deephaven/api/TableOperations.java index 1a9bf49a1f0..9d7c0eb4dd4 100644 --- a/table-api/src/main/java/io/deephaven/api/TableOperations.java +++ b/table-api/src/main/java/io/deephaven/api/TableOperations.java @@ -1,6 +1,7 @@ package io.deephaven.api; import io.deephaven.api.agg.Aggregation; +import io.deephaven.api.agg.spec.AggSpec; import io.deephaven.api.filter.Filter; import java.util.Collection; @@ -489,6 +490,16 @@ TOPS raj(TABLE rightTable, Collection columnsToMatch, // ------------------------------------------------------------------------------------------- + TOPS aggAllBy(AggSpec spec); + + TOPS aggAllBy(AggSpec spec, String... groupByColumns); + + TOPS aggAllBy(AggSpec spec, Selectable... groupByColumns); + + TOPS aggAllBy(AggSpec spec, Collection groupByColumns); + + // ------------------------------------------------------------------------------------------- + TOPS aggBy(Aggregation aggregation); TOPS aggBy(Aggregation aggregation, String... groupByColumns); diff --git a/table-api/src/main/java/io/deephaven/api/TableOperationsAdapter.java b/table-api/src/main/java/io/deephaven/api/TableOperationsAdapter.java index 25bab23f3ba..43f3720db47 100644 --- a/table-api/src/main/java/io/deephaven/api/TableOperationsAdapter.java +++ b/table-api/src/main/java/io/deephaven/api/TableOperationsAdapter.java @@ -1,6 +1,7 @@ package io.deephaven.api; import io.deephaven.api.agg.Aggregation; +import io.deephaven.api.agg.spec.AggSpec; import io.deephaven.api.filter.Filter; import java.util.Collection; @@ -259,6 +260,26 @@ public final TOPS_1 groupBy(Collection groupByColumns) { return adapt(delegate.groupBy(groupByColumns)); } + @Override + public final TOPS_1 aggAllBy(AggSpec spec) { + return adapt(delegate.aggAllBy(spec)); + } + + @Override + public final TOPS_1 aggAllBy(AggSpec spec, String... groupByColumns) { + return adapt(delegate.aggAllBy(spec, groupByColumns)); + } + + @Override + public final TOPS_1 aggAllBy(AggSpec spec, Selectable... groupByColumns) { + return adapt(delegate.aggAllBy(spec, groupByColumns)); + } + + @Override + public final TOPS_1 aggAllBy(AggSpec spec, Collection groupByColumns) { + return adapt(delegate.aggAllBy(spec, groupByColumns)); + } + @Override public final TOPS_1 aggBy(Aggregation aggregation) { return adapt(delegate.aggBy(aggregation)); diff --git a/table-api/src/main/java/io/deephaven/api/agg/AbsSum.java b/table-api/src/main/java/io/deephaven/api/agg/AbsSum.java deleted file mode 100644 index 81812c66db3..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/AbsSum.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.SimpleStyle; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Parameter; - -@Immutable -@SimpleStyle -public abstract class AbsSum implements Aggregation { - - public static AbsSum of(Pair pair) { - return ImmutableAbsSum.of(pair); - } - - public static AbsSum of(String x) { - return of(Pair.parse(x)); - } - - @Parameter - public abstract Pair pair(); - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Aggregation.java b/table-api/src/main/java/io/deephaven/api/agg/Aggregation.java index c75246515bf..bd949b5ded2 100644 --- a/table-api/src/main/java/io/deephaven/api/agg/Aggregation.java +++ b/table-api/src/main/java/io/deephaven/api/agg/Aggregation.java @@ -1,286 +1,151 @@ package io.deephaven.api.agg; -import io.deephaven.api.ColumnName; -import io.deephaven.api.SortColumn; +import io.deephaven.api.agg.NormalAggregations.Builder; +import io.deephaven.api.agg.spec.AggSpec; import java.io.Serializable; import java.util.Collection; -import java.util.stream.Collectors; /** * Represents an aggregation that can be applied to a table. * * @see io.deephaven.api.TableOperations#aggBy(Collection, Collection) + * @see Count + * @see NormalAggregation + * @see NormalAggregations */ public interface Aggregation extends Serializable { - static AbsSum AggAbsSum(String pair) { - return AggregationFinisher.absSum().of(pair); + static NormalAggregation of(AggSpec spec, String pair) { + return NormalAggregation.of(spec, Pair.parse(pair)); } - static Aggregation AggAbsSum(String... pairs) { - return AggregationFinisher.absSum().of(pairs); - } - - static Group AggGroup(String pair) { - return AggregationFinisher.group().of(pair); + static Aggregation of(AggSpec spec, String... pairs) { + if (pairs.length == 1) { + return of(spec, pairs[0]); + } + final Builder builder = NormalAggregations.builder().spec(spec); + for (String pair : pairs) { + builder.addPairs(Pair.parse(pair)); + } + return builder.build(); } - static Aggregation AggGroup(String... pairs) { - return AggregationFinisher.group().of(pairs); - } - - static Avg AggAvg(String pair) { - return AggregationFinisher.avg().of(pair); + static Aggregation AggAbsSum(String... pairs) { + return of(AggSpec.absSum(), pairs); } static Aggregation AggAvg(String... pairs) { - return AggregationFinisher.avg().of(pairs); + return of(AggSpec.avg(), pairs); } - static Count AggCount(String resultColumn) { + static Aggregation AggCount(String resultColumn) { return Count.of(resultColumn); } - static CountDistinct AggCountDistinct(String pair) { - return AggregationFinisher.countDistinct().of(pair); - } - static Aggregation AggCountDistinct(String... pairs) { - return AggregationFinisher.countDistinct().of(pairs); - } - - static CountDistinct AggCountDistinct(boolean countNulls, String pair) { - return AggregationFinisher.countDistinct(countNulls).of(pair); + return of(AggSpec.countDistinct(), pairs); } static Aggregation AggCountDistinct(boolean countNulls, String... pairs) { - return AggregationFinisher.countDistinct(countNulls).of(pairs); - } - - static Distinct AggDistinct(String pair) { - return AggregationFinisher.distinct().of(pair); + return of(AggSpec.countDistinct(countNulls), pairs); } static Aggregation AggDistinct(String... pairs) { - return AggregationFinisher.distinct().of(pairs); - } - - static Distinct AggDistinct(boolean includeNulls, String pair) { - return AggregationFinisher.distinct(includeNulls).of(pair); + return of(AggSpec.distinct(), pairs); } static Aggregation AggDistinct(boolean includeNulls, String... pairs) { - return AggregationFinisher.distinct(includeNulls).of(pairs); - } - - static First AggFirst(String pair) { - return AggregationFinisher.first().of(pair); + return of(AggSpec.distinct(includeNulls), pairs); } static Aggregation AggFirst(String... pairs) { - return AggregationFinisher.first().of(pairs); + return of(AggSpec.first(), pairs); } - static Last AggLast(String pair) { - return AggregationFinisher.last().of(pair); + static Aggregation AggGroup(String... pairs) { + return of(AggSpec.group(), pairs); } static Aggregation AggLast(String... pairs) { - return AggregationFinisher.last().of(pairs); - } - - static Max AggMax(String pair) { - return AggregationFinisher.max().of(pair); + return of(AggSpec.last(), pairs); } static Aggregation AggMax(String... pairs) { - return AggregationFinisher.max().of(pairs); - } - - static Med AggMed(String pair) { - return AggregationFinisher.med().of(pair); + return of(AggSpec.max(), pairs); } static Aggregation AggMed(String... pairs) { - return AggregationFinisher.med().of(pairs); - } - - static Min AggMin(String pair) { - return AggregationFinisher.min().of(pair); - } - - static Med AggMed(boolean average, String pair) { - return AggregationFinisher.med(average).of(pair); + return of(AggSpec.median(), pairs); } static Aggregation AggMed(boolean average, String... pairs) { - return AggregationFinisher.med(average).of(pairs); + return of(AggSpec.median(average), pairs); } static Aggregation AggMin(String... pairs) { - return AggregationFinisher.min().of(pairs); - } - - static Pct AggPct(double percentile, String pair) { - return AggregationFinisher.pct(percentile).of(pair); + return of(AggSpec.min(), pairs); } static Aggregation AggPct(double percentile, String... pairs) { - return AggregationFinisher.pct(percentile).of(pairs); - } - - static Pct AggPct(double percentile, boolean average, String pair) { - return AggregationFinisher.pct(percentile, average).of(pair); + return of(AggSpec.percentile(percentile), pairs); } static Aggregation AggPct(double percentile, boolean average, String... pairs) { - return AggregationFinisher.pct(percentile, average).of(pairs); - } - - static SortedFirst AggSortedFirst(String sortedColumn, String pair) { - return AggregationFinisher.sortedFirst(SortColumn.asc(ColumnName.of(sortedColumn))) - .of(pair); + return of(AggSpec.percentile(percentile, average), pairs); } static Aggregation AggSortedFirst(String sortedColumn, String... pairs) { - return AggregationFinisher.sortedFirst(SortColumn.asc(ColumnName.of(sortedColumn))) - .of(pairs); - } - - static SortedFirst AggSortedFirst(Collection sortedColumns, String pair) { - return AggregationFinisher.sortedFirst( - sortedColumns.stream().map(ColumnName::of).map(SortColumn::asc).collect(Collectors.toList())) - .of(pair); + return of(AggSpec.sortedFirst(sortedColumn), pairs); } static Aggregation AggSortedFirst(Collection sortedColumns, String... pairs) { - return AggregationFinisher.sortedFirst( - sortedColumns.stream().map(ColumnName::of).map(SortColumn::asc).collect(Collectors.toList())) - .of(pairs); - } - - static SortedLast AggSortedLast(String sortedColumn, String pair) { - return AggregationFinisher.sortedLast(SortColumn.asc(ColumnName.of(sortedColumn))) - .of(pair); + return of(AggSpec.sortedFirst(sortedColumns), pairs); } static Aggregation AggSortedLast(String sortedColumn, String... pairs) { - return AggregationFinisher.sortedLast(SortColumn.asc(ColumnName.of(sortedColumn))) - .of(pairs); - } - - static SortedLast AggSortedLast(Collection sortedColumns, String pair) { - return AggregationFinisher.sortedLast( - sortedColumns.stream().map(ColumnName::of).map(SortColumn::asc).collect(Collectors.toList())) - .of(pair); + return of(AggSpec.sortedLast(sortedColumn), pairs); } static Aggregation AggSortedLast(Collection sortedColumns, String... pairs) { - return AggregationFinisher.sortedLast( - sortedColumns.stream().map(ColumnName::of).map(SortColumn::asc).collect(Collectors.toList())) - .of(pairs); - } - - static Std AggStd(String pair) { - return AggregationFinisher.std().of(pair); + return of(AggSpec.sortedLast(sortedColumns), pairs); } static Aggregation AggStd(String... pairs) { - return AggregationFinisher.std().of(pairs); - } - - static Sum AggSum(String pair) { - return AggregationFinisher.sum().of(pair); + return of(AggSpec.std(), pairs); } static Aggregation AggSum(String... pairs) { - return AggregationFinisher.sum().of(pairs); - } - - static Unique AggUnique(String pair) { - return AggregationFinisher.unique().of(pair); + return of(AggSpec.sum(), pairs); } static Aggregation AggUnique(String... pairs) { - return AggregationFinisher.unique().of(pairs); - } - - static Unique AggUnique(boolean includeNulls, String pair) { - return AggregationFinisher.unique(includeNulls).of(pair); + return of(AggSpec.unique(), pairs); } static Aggregation AggUnique(boolean includeNulls, String... pairs) { - return AggregationFinisher.unique(includeNulls).of(pairs); - } - - static Var AggVar(String pair) { - return AggregationFinisher.var().of(pair); + return of(AggSpec.unique(includeNulls), pairs); } static Aggregation AggVar(String... pairs) { - return AggregationFinisher.var().of(pairs); - } - - static WAvg AggWAvg(String weightColumn, String pair) { - return AggregationFinisher.wAvg(ColumnName.of(weightColumn)).of(pair); + return of(AggSpec.var(), pairs); } static Aggregation AggWAvg(String weightColumn, String... pairs) { - return AggregationFinisher.wAvg(ColumnName.of(weightColumn)).of(pairs); - } - - static WSum AggWSum(String weightColumn, String pair) { - return AggregationFinisher.wSum(ColumnName.of(weightColumn)).of(pair); + return of(AggSpec.wavg(weightColumn), pairs); } static Aggregation AggWSum(String weightColumn, String... pairs) { - return AggregationFinisher.wSum(ColumnName.of(weightColumn)).of(pairs); + return of(AggSpec.wsum(weightColumn), pairs); } V walk(V visitor); interface Visitor { - void visit(AbsSum absSum); - - void visit(Group group); - - void visit(Avg avg); - void visit(Count count); - void visit(CountDistinct countDistinct); - - void visit(Distinct distinct); - - void visit(First first); - - void visit(Last last); - - void visit(Max max); - - void visit(Med med); - - void visit(Min min); - - void visit(Multi multi); - - void visit(Pct pct); - - void visit(SortedFirst sortedFirst); - - void visit(SortedLast sortedLast); - - void visit(Std std); - - void visit(Sum sum); - - void visit(Unique unique); - - void visit(Var var); - - void visit(WAvg wAvg); + void visit(NormalAggregation normalAgg); - void visit(WSum wSum); + void visit(NormalAggregations normalAggs); } } diff --git a/table-api/src/main/java/io/deephaven/api/agg/AggregationFinisher.java b/table-api/src/main/java/io/deephaven/api/agg/AggregationFinisher.java deleted file mode 100644 index 1c81114c256..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/AggregationFinisher.java +++ /dev/null @@ -1,180 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.api.ColumnName; -import io.deephaven.annotations.SimpleStyle; -import io.deephaven.api.SortColumn; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Parameter; - -import java.util.Collections; -import java.util.function.Function; - -/** - * The aggregation finisher is a helper to aid in building aggregations whose construction can be finished by a - * {@link Pair}. A vararg overload is provided to build a {@link Multi}, {@link #of(Pair...)}, which can be useful to - * reduce the syntax required to build multiple aggregations of the same basic type. Helpers are provided that translate - * the string-equivalents via {@link Pair#parse(String)}. - * - *

- * Not all aggregations may be suitable for construction in this style. - * - * @param the aggregation type - */ -@Immutable -@SimpleStyle -public abstract class AggregationFinisher { - - public static AggregationFinisher absSum() { - return ImmutableAggregationFinisher.of(AbsSum::of); - } - - public static AggregationFinisher group() { - return ImmutableAggregationFinisher.of(Group::of); - } - - public static AggregationFinisher avg() { - return ImmutableAggregationFinisher.of(Avg::of); - } - - public static AggregationFinisher countDistinct() { - return ImmutableAggregationFinisher.of(CountDistinct::of); - } - - public static AggregationFinisher countDistinct(boolean countNulls) { - if (countNulls) { - return ImmutableAggregationFinisher.of(pair -> CountDistinct.of(pair).withNulls()); - } - return ImmutableAggregationFinisher.of(CountDistinct::of); - } - - public static AggregationFinisher distinct() { - return ImmutableAggregationFinisher.of(Distinct::of); - } - - public static AggregationFinisher distinct(boolean includeNulls) { - if (includeNulls) { - return ImmutableAggregationFinisher.of(pair -> Distinct.of(pair).withNulls()); - } - return ImmutableAggregationFinisher.of(Distinct::of); - } - - - public static AggregationFinisher first() { - return ImmutableAggregationFinisher.of(First::of); - } - - public static AggregationFinisher last() { - return ImmutableAggregationFinisher.of(Last::of); - } - - public static AggregationFinisher max() { - return ImmutableAggregationFinisher.of(Max::of); - } - - public static AggregationFinisher med() { - return ImmutableAggregationFinisher.of(Med::of); - } - - public static AggregationFinisher med(boolean average) { - if (average) { - return med(); - } - return ImmutableAggregationFinisher.of(pair -> Med.of(pair).withoutAverage()); - } - - public static AggregationFinisher min() { - return ImmutableAggregationFinisher.of(Min::of); - } - - public static AggregationFinisher pct(double percentile) { - return ImmutableAggregationFinisher.of(pair -> Pct.of(percentile, pair)); - } - - public static AggregationFinisher pct(double percentile, boolean average) { - if (average) { - return ImmutableAggregationFinisher.of(pair -> Pct.of(percentile, pair).withAverage()); - } - return pct(percentile); - } - - static AggregationFinisher sortedFirst(SortColumn sortColumn) { - return sortedFirst(Collections.singleton(sortColumn)); - } - - static AggregationFinisher sortedFirst(Iterable sortColumns) { - return ImmutableAggregationFinisher - .of(pair -> SortedFirst.builder().addAllColumns(sortColumns).pair(pair).build()); - } - - static AggregationFinisher sortedLast(SortColumn sortColumn) { - return sortedLast(Collections.singleton(sortColumn)); - } - - static AggregationFinisher sortedLast(Iterable sortColumns) { - return ImmutableAggregationFinisher - .of(pair -> SortedLast.builder().addAllColumns(sortColumns).pair(pair).build()); - } - - public static AggregationFinisher std() { - return ImmutableAggregationFinisher.of(Std::of); - } - - public static AggregationFinisher sum() { - return ImmutableAggregationFinisher.of(Sum::of); - } - - public static AggregationFinisher unique() { - return ImmutableAggregationFinisher.of(Unique::of); - } - - public static AggregationFinisher unique(boolean includeNulls) { - if (includeNulls) { - return ImmutableAggregationFinisher.of(pair -> Unique.of(pair).withNulls()); - } - return ImmutableAggregationFinisher.of(Unique::of); - } - - - public static AggregationFinisher var() { - return ImmutableAggregationFinisher.of(Var::of); - } - - public static AggregationFinisher wAvg(ColumnName weightColumn) { - return ImmutableAggregationFinisher.of(pair -> WAvg.of(weightColumn, pair)); - } - - public static AggregationFinisher wSum(ColumnName weightColumn) { - return ImmutableAggregationFinisher.of(pair -> WSum.of(weightColumn, pair)); - } - - @Parameter - public abstract Function function(); - - public final AGG of(Pair pair) { - return function().apply(pair); - } - - public final Multi of(Pair... pairs) { - Multi.Builder builder = Multi.builder(); - for (Pair pair : pairs) { - builder.addAggregations(of(pair)); - } - return builder.build(); - } - - public final AGG of(String arg) { - return of(Pair.parse(arg)); - } - - public final Aggregation of(String... arguments) { - return arguments.length == 1 ? of(arguments[0]) : multiOf(arguments); - } - - public final Multi multiOf(String... arguments) { - Multi.Builder builder = Multi.builder(); - for (String x : arguments) { - builder.addAggregations(of(x)); - } - return builder.build(); - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/AggregationOptimizer.java b/table-api/src/main/java/io/deephaven/api/agg/AggregationOptimizer.java new file mode 100644 index 00000000000..66e1a2e5bc7 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/AggregationOptimizer.java @@ -0,0 +1,66 @@ +package io.deephaven.api.agg; + +import io.deephaven.api.ColumnName; +import io.deephaven.api.agg.spec.AggSpec; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.LinkedHashMap; +import java.util.List; +import java.util.Map.Entry; + +/** + * Optimizes a collection of {@link Aggregation aggregations} by grouping like-speccedd aggregations together. + */ +public final class AggregationOptimizer implements Aggregation.Visitor { + private static final Object COUNT_OBJ = new Object(); + + /** + * Optimizes a collection of {@link Aggregation aggregations} by grouping like-specced aggregations together. The + * input order will be preserved based on the spec-encountered order. + * + * @param aggregations the aggregations + * @return the optimized aggregations + */ + public static List of(Collection aggregations) { + final AggregationOptimizer optimizer = new AggregationOptimizer(); + for (Aggregation aggregation : aggregations) { + aggregation.walk(optimizer); + } + return optimizer.build(); + } + + private final LinkedHashMap> visitOrder = new LinkedHashMap<>(); + + public List build() { + List out = new ArrayList<>(); + for (Entry> e : visitOrder.entrySet()) { + if (e.getKey() == COUNT_OBJ) { + for (Pair pair : e.getValue()) { + out.add(Count.of((ColumnName) pair)); + } + } else if (e.getValue().size() == 1) { + out.add(NormalAggregation.of((AggSpec) e.getKey(), e.getValue().get(0))); + } else { + out.add(NormalAggregations.builder().spec((AggSpec) e.getKey()).addAllPairs(e.getValue()).build()); + } + } + return out; + } + + @Override + public void visit(Count count) { + visitOrder.computeIfAbsent(COUNT_OBJ, k -> new ArrayList<>()).add(count.column()); + } + + @Override + public void visit(NormalAggregation normalAgg) { + visitOrder.computeIfAbsent(normalAgg.spec(), k -> new ArrayList<>()).add(normalAgg.pair()); + } + + @Override + public void visit(NormalAggregations normalAggs) { + visitOrder.computeIfAbsent(normalAggs.spec(), k -> new ArrayList<>()) + .addAll(normalAggs.pairs()); + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/AggregationOutputs.java b/table-api/src/main/java/io/deephaven/api/agg/AggregationOutputs.java index 51cbddaf20a..b145b2b37cc 100644 --- a/table-api/src/main/java/io/deephaven/api/agg/AggregationOutputs.java +++ b/table-api/src/main/java/io/deephaven/api/agg/AggregationOutputs.java @@ -25,112 +25,18 @@ Stream getOut() { return Objects.requireNonNull(out); } - private void visitPair(Pair pair) { - out = Stream.of(pair.output()); - } - - @Override - public void visit(AbsSum absSum) { - visitPair(absSum.pair()); - } - - @Override - public void visit(Group group) { - visitPair(group.pair()); - } - - @Override - public void visit(Avg avg) { - visitPair(avg.pair()); - } - @Override public void visit(Count count) { out = Stream.of(count.column()); } @Override - public void visit(CountDistinct countDistinct) { - visitPair(countDistinct.pair()); - } - - @Override - public void visit(Distinct distinct) { - visitPair(distinct.pair()); - } - - @Override - public void visit(First first) { - visitPair(first.pair()); - } - - @Override - public void visit(Last last) { - visitPair(last.pair()); - } - - @Override - public void visit(Max max) { - visitPair(max.pair()); - } - - @Override - public void visit(Med med) { - visitPair(med.pair()); - } - - @Override - public void visit(Min min) { - visitPair(min.pair()); - } - - @Override - public void visit(Multi multi) { - out = of(multi.aggregations()); - } - - @Override - public void visit(Pct pct) { - visitPair(pct.pair()); - } - - @Override - public void visit(SortedFirst sortedFirst) { - visitPair(sortedFirst.pair()); - } - - @Override - public void visit(SortedLast sortedLast) { - visitPair(sortedLast.pair()); - } - - @Override - public void visit(Std std) { - visitPair(std.pair()); - } - - @Override - public void visit(Sum sum) { - visitPair(sum.pair()); - } - - @Override - public void visit(Unique unique) { - visitPair(unique.pair()); - } - - @Override - public void visit(Var var) { - visitPair(var.pair()); - } - - @Override - public void visit(WAvg wAvg) { - visitPair(wAvg.pair()); + public void visit(NormalAggregation normalAgg) { + out = Stream.of(normalAgg.pair().output()); } @Override - public void visit(WSum wSum) { - visitPair(wSum.pair()); + public void visit(NormalAggregations normalAggs) { + out = normalAggs.pairs().stream().map(Pair::output); } } diff --git a/table-api/src/main/java/io/deephaven/api/agg/Avg.java b/table-api/src/main/java/io/deephaven/api/agg/Avg.java deleted file mode 100644 index e03787ee361..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/Avg.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.SimpleStyle; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Parameter; - -@Immutable -@SimpleStyle -public abstract class Avg implements Aggregation { - - public static Avg of(Pair pair) { - return ImmutableAvg.of(pair); - } - - public static Avg of(String x) { - return of(Pair.parse(x)); - } - - @Parameter - public abstract Pair pair(); - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Count.java b/table-api/src/main/java/io/deephaven/api/agg/Count.java index 7a835f0df5c..35960cde3f4 100644 --- a/table-api/src/main/java/io/deephaven/api/agg/Count.java +++ b/table-api/src/main/java/io/deephaven/api/agg/Count.java @@ -1,7 +1,7 @@ package io.deephaven.api.agg; -import io.deephaven.api.ColumnName; import io.deephaven.annotations.SimpleStyle; +import io.deephaven.api.ColumnName; import org.immutables.value.Value.Immutable; import org.immutables.value.Value.Parameter; @@ -17,8 +17,6 @@ public static Count of(String x) { return of(ColumnName.of(x)); } - // Note: Count doesn't need Pair since there is no column as input. - @Parameter public abstract ColumnName column(); diff --git a/table-api/src/main/java/io/deephaven/api/agg/CountDistinct.java b/table-api/src/main/java/io/deephaven/api/agg/CountDistinct.java deleted file mode 100644 index 1b311b71154..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/CountDistinct.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.BuildableStyle; -import org.immutables.value.Value.Default; -import org.immutables.value.Value.Immutable; - -@Immutable -@BuildableStyle -public abstract class CountDistinct implements Aggregation { - - public static CountDistinct of(Pair pair) { - return ImmutableCountDistinct.builder().pair(pair).build(); - } - - public static CountDistinct of(String x) { - return of(Pair.parse(x)); - } - - public abstract Pair pair(); - - @Default - public boolean countNulls() { - return false; - } - - public final CountDistinct withNulls() { - return ImmutableCountDistinct.builder().pair(pair()).countNulls(true).build(); - } - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Distinct.java b/table-api/src/main/java/io/deephaven/api/agg/Distinct.java deleted file mode 100644 index 993fb8c153e..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/Distinct.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.BuildableStyle; -import org.immutables.value.Value.Default; -import org.immutables.value.Value.Immutable; - -@Immutable -@BuildableStyle -public abstract class Distinct implements Aggregation { - - public static Distinct of(Pair pair) { - return ImmutableDistinct.builder().pair(pair).build(); - } - - public static Distinct of(String x) { - return of(Pair.parse(x)); - } - - public abstract Pair pair(); - - @Default - public boolean includeNulls() { - return false; - } - - public final Distinct withNulls() { - return ImmutableDistinct.builder().pair(pair()).includeNulls(true).build(); - } - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/First.java b/table-api/src/main/java/io/deephaven/api/agg/First.java deleted file mode 100644 index efd9eba497d..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/First.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.SimpleStyle; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Parameter; - -@Immutable -@SimpleStyle -public abstract class First implements Aggregation { - - public static First of(Pair pair) { - return ImmutableFirst.of(pair); - } - - public static First of(String x) { - return of(Pair.parse(x)); - } - - @Parameter - public abstract Pair pair(); - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Group.java b/table-api/src/main/java/io/deephaven/api/agg/Group.java deleted file mode 100644 index 5c7d4017864..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/Group.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.SimpleStyle; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Parameter; - -@Immutable -@SimpleStyle -public abstract class Group implements Aggregation { - - public static Group of(Pair pair) { - return ImmutableGroup.of(pair); - } - - public static Group of(String x) { - return of(Pair.parse(x)); - } - - @Parameter - public abstract Pair pair(); - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Last.java b/table-api/src/main/java/io/deephaven/api/agg/Last.java deleted file mode 100644 index bb11ef37588..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/Last.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.SimpleStyle; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Parameter; - -@Immutable -@SimpleStyle -public abstract class Last implements Aggregation { - - public static Last of(Pair pair) { - return ImmutableLast.of(pair); - } - - public static Last of(String x) { - return of(Pair.parse(x)); - } - - @Parameter - public abstract Pair pair(); - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Max.java b/table-api/src/main/java/io/deephaven/api/agg/Max.java deleted file mode 100644 index dc599c0ac37..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/Max.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.SimpleStyle; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Parameter; - -@Immutable -@SimpleStyle -public abstract class Max implements Aggregation { - - public static Max of(Pair pair) { - return ImmutableMax.of(pair); - } - - public static Max of(String x) { - return of(Pair.parse(x)); - } - - @Parameter - public abstract Pair pair(); - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Med.java b/table-api/src/main/java/io/deephaven/api/agg/Med.java deleted file mode 100644 index beea6b59aa4..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/Med.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.BuildableStyle; -import org.immutables.value.Value.Default; -import org.immutables.value.Value.Immutable; - -@Immutable -@BuildableStyle -public abstract class Med implements Aggregation { - - public static Med of(Pair pair) { - return ImmutableMed.builder().pair(pair).build(); - } - - public static Med of(String x) { - return of(Pair.parse(x)); - } - - public abstract Pair pair(); - - @Default - public boolean averageMedian() { - return true; - } - - public final Med withoutAverage() { - return ImmutableMed.builder().pair(pair()).averageMedian(false).build(); - } - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Min.java b/table-api/src/main/java/io/deephaven/api/agg/Min.java deleted file mode 100644 index fdf97130e65..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/Min.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.SimpleStyle; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Parameter; - -@Immutable -@SimpleStyle -public abstract class Min implements Aggregation { - - public static Min of(Pair pair) { - return ImmutableMin.of(pair); - } - - public static Min of(String x) { - return of(Pair.parse(x)); - } - - @Parameter - public abstract Pair pair(); - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Multi.java b/table-api/src/main/java/io/deephaven/api/agg/Multi.java deleted file mode 100644 index 17fee0d382f..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/Multi.java +++ /dev/null @@ -1,49 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.BuildableStyle; -import org.immutables.value.Value.Check; -import org.immutables.value.Value.Immutable; - -import java.util.List; - -/** - * An aggregation that is a list of other aggregations. Useful as a helper when returning an aggregation constructed via - * a varargs parameter. - * - * @param the aggregation type - * @see AggregationFinisher#of(String...) - */ -@Immutable -@BuildableStyle -public abstract class Multi implements Aggregation { - - static Builder builder() { - return ImmutableMulti.builder(); - } - - public abstract List aggregations(); - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } - - @Check - final void checkSize() { - if (aggregations().size() < 2) { - throw new IllegalArgumentException( - String.format("%s should have at least two aggregations", Multi.class)); - } - } - - public interface Builder { - Builder addAggregations(AGG element); - - Builder addAggregations(AGG... elements); - - Builder addAllAggregations(Iterable elements); - - Multi build(); - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/NormalAggregation.java b/table-api/src/main/java/io/deephaven/api/agg/NormalAggregation.java new file mode 100644 index 00000000000..b115e401f73 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/NormalAggregation.java @@ -0,0 +1,30 @@ +package io.deephaven.api.agg; + +import io.deephaven.annotations.SimpleStyle; +import io.deephaven.api.agg.spec.AggSpec; +import org.immutables.value.Value.Immutable; +import org.immutables.value.Value.Parameter; + +/** + * A normal aggregation is an {@link Aggregation} that is composed of a {@link #spec() spec} and a {@link #pair() pair}. + */ +@Immutable +@SimpleStyle +public abstract class NormalAggregation implements Aggregation { + + public static NormalAggregation of(AggSpec spec, Pair pair) { + return ImmutableNormalAggregation.of(spec, pair); + } + + @Parameter + public abstract AggSpec spec(); + + @Parameter + public abstract Pair pair(); + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/NormalAggregations.java b/table-api/src/main/java/io/deephaven/api/agg/NormalAggregations.java new file mode 100644 index 00000000000..bf05ddc5b25 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/NormalAggregations.java @@ -0,0 +1,51 @@ +package io.deephaven.api.agg; + +import io.deephaven.annotations.BuildableStyle; +import io.deephaven.api.agg.spec.AggSpec; +import org.immutables.value.Value.Check; +import org.immutables.value.Value.Immutable; + +import java.util.List; + +/** + * Normal aggregations is an {@link Aggregation} that is composed of a {@link #spec() spec} and multiple {@link #pairs() + * pairs}. + */ +@Immutable +@BuildableStyle +public abstract class NormalAggregations implements Aggregation { + + public static Builder builder() { + return ImmutableNormalAggregations.builder(); + } + + public abstract AggSpec spec(); + + public abstract List pairs(); + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } + + @Check + final void checkSize() { + if (pairs().size() < 2) { + throw new IllegalArgumentException( + String.format("%s should have at least two pairs", NormalAggregations.class)); + } + } + + public interface Builder { + Builder spec(AggSpec spec); + + Builder addPairs(Pair element); + + Builder addPairs(Pair... elements); + + Builder addAllPairs(Iterable elements); + + NormalAggregations build(); + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Pair.java b/table-api/src/main/java/io/deephaven/api/agg/Pair.java index f48a1702de5..bd527bbb50f 100644 --- a/table-api/src/main/java/io/deephaven/api/agg/Pair.java +++ b/table-api/src/main/java/io/deephaven/api/agg/Pair.java @@ -5,9 +5,10 @@ import java.io.Serializable; /** - * An aggregation pair represents a {@link #input() input} and {@link #output() output} column for some - * {@link Aggregation aggregations}. Aggregations that don't have a one-to-one input/output mapping will not need an agg - * pair. + * A column pair represents an {@link #input() input} and an {@link #output() output} column. + * + * @see NormalAggregation + * @see NormalAggregations */ public interface Pair extends Serializable { diff --git a/table-api/src/main/java/io/deephaven/api/agg/Std.java b/table-api/src/main/java/io/deephaven/api/agg/Std.java deleted file mode 100644 index 1eba67892db..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/Std.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.SimpleStyle; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Parameter; - -@Immutable -@SimpleStyle -public abstract class Std implements Aggregation { - - public static Std of(Pair pair) { - return ImmutableStd.of(pair); - } - - public static Std of(String x) { - return of(Pair.parse(x)); - } - - @Parameter - public abstract Pair pair(); - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Sum.java b/table-api/src/main/java/io/deephaven/api/agg/Sum.java deleted file mode 100644 index caace3d93f4..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/Sum.java +++ /dev/null @@ -1,31 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.SimpleStyle; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Parameter; - -@Immutable -@SimpleStyle -public abstract class Sum implements Aggregation { - - public static Sum of(Pair pair) { - return ImmutableSum.of(pair); - } - - public static Sum of(String x) { - return of(Pair.parse(x)); - } - - @Parameter - public abstract Pair pair(); - - public final AbsSum abs() { - return AbsSum.of(pair()); - } - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Unique.java b/table-api/src/main/java/io/deephaven/api/agg/Unique.java deleted file mode 100644 index b6da88d8eef..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/Unique.java +++ /dev/null @@ -1,35 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.BuildableStyle; -import org.immutables.value.Value.Default; -import org.immutables.value.Value.Immutable; - -@Immutable -@BuildableStyle -public abstract class Unique implements Aggregation { - - public static Unique of(Pair pair) { - return ImmutableUnique.builder().pair(pair).build(); - } - - public static Unique of(String x) { - return of(Pair.parse(x)); - } - - public abstract Pair pair(); - - @Default - public boolean includeNulls() { - return false; - } - - public final Unique withNulls() { - return ImmutableUnique.builder().pair(pair()).includeNulls(true).build(); - } - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Var.java b/table-api/src/main/java/io/deephaven/api/agg/Var.java deleted file mode 100644 index ae195cff22b..00000000000 --- a/table-api/src/main/java/io/deephaven/api/agg/Var.java +++ /dev/null @@ -1,27 +0,0 @@ -package io.deephaven.api.agg; - -import io.deephaven.annotations.SimpleStyle; -import org.immutables.value.Value.Immutable; -import org.immutables.value.Value.Parameter; - -@Immutable -@SimpleStyle -public abstract class Var implements Aggregation { - - public static Var of(Pair pair) { - return ImmutableVar.of(pair); - } - - public static Var of(String x) { - return of(Pair.parse(x)); - } - - @Parameter - public abstract Pair pair(); - - @Override - public final V walk(V visitor) { - visitor.visit(this); - return visitor; - } -} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpec.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpec.java new file mode 100644 index 00000000000..eead6eef1e8 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpec.java @@ -0,0 +1,176 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.api.ColumnName; +import io.deephaven.api.SortColumn; +import io.deephaven.api.agg.Aggregation; +import io.deephaven.api.agg.NormalAggregation; +import io.deephaven.api.agg.Pair; + +import java.util.Arrays; +import java.util.Collection; + +/** + * An aggregation specification represents the configurable options for aggregations. + */ +public interface AggSpec { + + static AggSpecAbsSum absSum() { + return AggSpecAbsSum.of(); + } + + static AggSpecAvg avg() { + return AggSpecAvg.of(); + } + + static AggSpecCountDistinct countDistinct() { + return AggSpecCountDistinct.of(); + } + + static AggSpecCountDistinct countDistinct(boolean countNulls) { + return AggSpecCountDistinct.of(countNulls); + } + + static AggSpecDistinct distinct() { + return AggSpecDistinct.of(); + } + + static AggSpecDistinct distinct(boolean includeNulls) { + return AggSpecDistinct.of(includeNulls); + } + + static AggSpecFirst first() { + return AggSpecFirst.of(); + } + + static AggSpecGroup group() { + return AggSpecGroup.of(); + } + + static AggSpecLast last() { + return AggSpecLast.of(); + } + + static AggSpecMax max() { + return AggSpecMax.of(); + } + + static AggSpecMedian median() { + return AggSpecMedian.of(); + } + + static AggSpecMedian median(boolean averageMedian) { + return AggSpecMedian.of(averageMedian); + } + + static AggSpecMin min() { + return AggSpecMin.of(); + } + + static AggSpecPercentile percentile(double percentile) { + return AggSpecPercentile.of(percentile); + } + + static AggSpecPercentile percentile(double percentile, boolean averageMedian) { + return AggSpecPercentile.of(percentile, averageMedian); + } + + static AggSpecSortedFirst sortedFirst(String... columns) { + return sortedFirst(Arrays.asList(columns)); + } + + static AggSpecSortedFirst sortedFirst(Collection columns) { + final AggSpecSortedFirst.Builder builder = AggSpecSortedFirst.builder(); + for (String column : columns) { + builder.addColumns(SortColumn.asc(ColumnName.of(column))); + } + return builder.build(); + } + + static AggSpecSortedLast sortedLast(String... columns) { + return sortedLast(Arrays.asList(columns)); + } + + static AggSpecSortedLast sortedLast(Collection columns) { + final AggSpecSortedLast.Builder builder = AggSpecSortedLast.builder(); + for (String column : columns) { + builder.addColumns(SortColumn.asc(ColumnName.of(column))); + } + return builder.build(); + } + + static AggSpecStd std() { + return AggSpecStd.of(); + } + + static AggSpecSum sum() { + return AggSpecSum.of(); + } + + static AggSpecUnique unique() { + return AggSpecUnique.of(); + } + + static AggSpecUnique unique(boolean includeNulls) { + return AggSpecUnique.of(includeNulls); + } + + static AggSpecVar var() { + return AggSpecVar.of(); + } + + static AggSpecWAvg wavg(String weightColumn) { + return AggSpecWAvg.of(ColumnName.of(weightColumn)); + } + + static AggSpecWSum wsum(String weightColumn) { + return AggSpecWSum.of(ColumnName.of(weightColumn)); + } + + NormalAggregation aggregation(Pair pair); + + Aggregation aggregation(Pair... pairs); + + Aggregation aggregation(Collection pairs); + + V walk(V visitor); + + interface Visitor { + void visit(AggSpecAbsSum absSum); + + void visit(AggSpecCountDistinct countDistinct); + + void visit(AggSpecDistinct distinct); + + void visit(AggSpecGroup group); + + void visit(AggSpecAvg avg); + + void visit(AggSpecFirst first); + + void visit(AggSpecLast last); + + void visit(AggSpecMax max); + + void visit(AggSpecMedian median); + + void visit(AggSpecMin min); + + void visit(AggSpecPercentile pct); + + void visit(AggSpecSortedFirst sortedFirst); + + void visit(AggSpecSortedLast sortedLast); + + void visit(AggSpecStd std); + + void visit(AggSpecSum sum); + + void visit(AggSpecUnique unique); + + void visit(AggSpecWAvg wAvg); + + void visit(AggSpecWSum wSum); + + void visit(AggSpecVar var); + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecAbsSum.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecAbsSum.java new file mode 100644 index 00000000000..e0427a8e6c0 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecAbsSum.java @@ -0,0 +1,20 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.SimpleStyle; +import io.deephaven.api.agg.spec.ImmutableAggSpecAbsSum; +import org.immutables.value.Value.Immutable; + +@Immutable +@SimpleStyle +public abstract class AggSpecAbsSum extends AggSpecEmptyBase { + + public static AggSpecAbsSum of() { + return ImmutableAggSpecAbsSum.of(); + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecAvg.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecAvg.java new file mode 100644 index 00000000000..899fe996db9 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecAvg.java @@ -0,0 +1,19 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.SimpleStyle; +import org.immutables.value.Value.Immutable; + +@Immutable +@SimpleStyle +public abstract class AggSpecAvg extends AggSpecEmptyBase { + + public static AggSpecAvg of() { + return ImmutableAggSpecAvg.of(); + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecBase.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecBase.java new file mode 100644 index 00000000000..3facbb66fe9 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecBase.java @@ -0,0 +1,32 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.api.agg.Aggregation; +import io.deephaven.api.agg.NormalAggregation; +import io.deephaven.api.agg.NormalAggregations; +import io.deephaven.api.agg.Pair; + +import java.util.Collection; + +public abstract class AggSpecBase implements AggSpec { + + @Override + public final NormalAggregation aggregation(Pair pair) { + return NormalAggregation.of(this, pair); + } + + @Override + public final Aggregation aggregation(Pair... pairs) { + if (pairs.length == 1) { + return aggregation(pairs[0]); + } + return NormalAggregations.builder().spec(this).addPairs(pairs).build(); + } + + @Override + public final Aggregation aggregation(Collection pairs) { + if (pairs.size() == 1) { + return aggregation(pairs.iterator().next()); + } + return NormalAggregations.builder().spec(this).addAllPairs(pairs).build(); + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecColumnReferences.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecColumnReferences.java new file mode 100644 index 00000000000..87a126be017 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecColumnReferences.java @@ -0,0 +1,117 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.api.ColumnName; +import io.deephaven.api.SortColumn; + +import java.util.Collections; +import java.util.Objects; +import java.util.Set; +import java.util.stream.Collectors; + +public class AggSpecColumnReferences implements AggSpec.Visitor { + + public static Set of(AggSpec spec) { + return spec.walk(new AggSpecColumnReferences()).out(); + } + + private Set out; + + public Set out() { + return Objects.requireNonNull(out); + } + + @Override + public void visit(AggSpecAbsSum absSum) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecCountDistinct countDistinct) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecDistinct distinct) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecGroup group) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecAvg avg) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecFirst first) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecLast last) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecMax max) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecMedian median) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecMin min) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecPercentile pct) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecSortedFirst sortedFirst) { + out = sortedFirst.columns().stream().map(SortColumn::column).collect(Collectors.toSet()); + } + + @Override + public void visit(AggSpecSortedLast sortedLast) { + out = sortedLast.columns().stream().map(SortColumn::column).collect(Collectors.toSet()); + } + + @Override + public void visit(AggSpecStd std) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecSum sum) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecUnique unique) { + out = Collections.emptySet(); + } + + @Override + public void visit(AggSpecWAvg wAvg) { + out = Collections.singleton(wAvg.weight()); + } + + @Override + public void visit(AggSpecWSum wSum) { + out = Collections.singleton(wSum.weight()); + } + + @Override + public void visit(AggSpecVar var) { + out = Collections.emptySet(); + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecCountDistinct.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecCountDistinct.java new file mode 100644 index 00000000000..33a28a645d3 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecCountDistinct.java @@ -0,0 +1,29 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.BuildableStyle; +import org.immutables.value.Value.Default; +import org.immutables.value.Value.Immutable; + +@Immutable +@BuildableStyle +public abstract class AggSpecCountDistinct extends AggSpecBase { + + public static AggSpecCountDistinct of() { + return ImmutableAggSpecCountDistinct.builder().build(); + } + + public static AggSpecCountDistinct of(boolean countNulls) { + return ImmutableAggSpecCountDistinct.builder().countNulls(countNulls).build(); + } + + @Default + public boolean countNulls() { + return false; + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecDistinct.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecDistinct.java new file mode 100644 index 00000000000..8d0df906a5c --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecDistinct.java @@ -0,0 +1,29 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.BuildableStyle; +import org.immutables.value.Value.Default; +import org.immutables.value.Value.Immutable; + +@Immutable +@BuildableStyle +public abstract class AggSpecDistinct extends AggSpecBase { + + public static AggSpecDistinct of() { + return ImmutableAggSpecDistinct.builder().build(); + } + + public static AggSpecDistinct of(boolean includeNulls) { + return ImmutableAggSpecDistinct.builder().includeNulls(includeNulls).build(); + } + + @Default + public boolean includeNulls() { + return false; + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecEmptyBase.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecEmptyBase.java new file mode 100644 index 00000000000..719d6fd0f04 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecEmptyBase.java @@ -0,0 +1,12 @@ +package io.deephaven.api.agg.spec; + +public abstract class AggSpecEmptyBase extends AggSpecBase { + + @Override + public final int hashCode() { + // Immutables uses a hashCode of 0 for empty objects. + // Would be better to give them "proper" hashCodes so they don't always collide in map. + // https://github.com/immutables/immutables/issues/1349 + return getClass().hashCode(); + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecFirst.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecFirst.java new file mode 100644 index 00000000000..b624f535faa --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecFirst.java @@ -0,0 +1,19 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.SimpleStyle; +import org.immutables.value.Value.Immutable; + +@Immutable +@SimpleStyle +public abstract class AggSpecFirst extends AggSpecEmptyBase { + + public static AggSpecFirst of() { + return ImmutableAggSpecFirst.of(); + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecGroup.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecGroup.java new file mode 100644 index 00000000000..6134dacee5f --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecGroup.java @@ -0,0 +1,19 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.SimpleStyle; +import org.immutables.value.Value.Immutable; + +@Immutable +@SimpleStyle +public abstract class AggSpecGroup extends AggSpecEmptyBase { + + public static AggSpecGroup of() { + return ImmutableAggSpecGroup.of(); + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecLast.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecLast.java new file mode 100644 index 00000000000..3f2590629f8 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecLast.java @@ -0,0 +1,19 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.SimpleStyle; +import org.immutables.value.Value.Immutable; + +@Immutable +@SimpleStyle +public abstract class AggSpecLast extends AggSpecEmptyBase { + + public static AggSpecLast of() { + return ImmutableAggSpecLast.of(); + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecMax.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecMax.java new file mode 100644 index 00000000000..1f332aebbeb --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecMax.java @@ -0,0 +1,19 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.SimpleStyle; +import org.immutables.value.Value.Immutable; + +@Immutable +@SimpleStyle +public abstract class AggSpecMax extends AggSpecEmptyBase { + + public static AggSpecMax of() { + return ImmutableAggSpecMax.of(); + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecMedian.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecMedian.java new file mode 100644 index 00000000000..1cc4a5bd950 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecMedian.java @@ -0,0 +1,29 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.BuildableStyle; +import org.immutables.value.Value.Default; +import org.immutables.value.Value.Immutable; + +@Immutable +@BuildableStyle +public abstract class AggSpecMedian extends AggSpecBase { + + public static AggSpecMedian of() { + return ImmutableAggSpecMedian.builder().build(); + } + + public static AggSpecMedian of(boolean averageMedian) { + return ImmutableAggSpecMedian.builder().averageMedian(averageMedian).build(); + } + + @Default + public boolean averageMedian() { + return true; + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecMin.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecMin.java new file mode 100644 index 00000000000..9bda455a44d --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecMin.java @@ -0,0 +1,19 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.SimpleStyle; +import org.immutables.value.Value.Immutable; + +@Immutable +@SimpleStyle +public abstract class AggSpecMin extends AggSpecEmptyBase { + + public static AggSpecMin of() { + return ImmutableAggSpecMin.of(); + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/Pct.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecPercentile.java similarity index 60% rename from table-api/src/main/java/io/deephaven/api/agg/Pct.java rename to table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecPercentile.java index 0febc4f513c..161fafd3481 100644 --- a/table-api/src/main/java/io/deephaven/api/agg/Pct.java +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecPercentile.java @@ -1,4 +1,4 @@ -package io.deephaven.api.agg; +package io.deephaven.api.agg.spec; import io.deephaven.annotations.BuildableStyle; import org.immutables.value.Value.Check; @@ -7,13 +7,15 @@ @Immutable @BuildableStyle -public abstract class Pct implements Aggregation { +public abstract class AggSpecPercentile extends AggSpecBase { - public static Pct of(double percentile, Pair pair) { - return ImmutablePct.builder().percentile(percentile).pair(pair).build(); + public static AggSpecPercentile of(double percentile) { + return ImmutableAggSpecPercentile.builder().percentile(percentile).build(); } - public abstract Pair pair(); + public static AggSpecPercentile of(double percentile, boolean averageMedian) { + return ImmutableAggSpecPercentile.builder().percentile(percentile).averageMedian(averageMedian).build(); + } public abstract double percentile(); @@ -22,11 +24,6 @@ public boolean averageMedian() { return false; } - public Pct withAverage() { - return ImmutablePct.builder().percentile(percentile()).pair(pair()).averageMedian(true) - .build(); - } - @Override public final V walk(V visitor) { visitor.visit(this); diff --git a/table-api/src/main/java/io/deephaven/api/agg/SortedFirst.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecSortedFirst.java similarity index 78% rename from table-api/src/main/java/io/deephaven/api/agg/SortedFirst.java rename to table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecSortedFirst.java index 9948950bdef..07429e32f2b 100644 --- a/table-api/src/main/java/io/deephaven/api/agg/SortedFirst.java +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecSortedFirst.java @@ -1,4 +1,4 @@ -package io.deephaven.api.agg; +package io.deephaven.api.agg.spec; import io.deephaven.annotations.BuildableStyle; import io.deephaven.api.SortColumn; @@ -9,20 +9,18 @@ /** * Note: the sorted-first aggregation only supports {@link SortColumn.Order#ASCENDING} columns at the moment. - * + * * @see SortedFirst / SortedLast aggregations with sort * direction */ @Immutable @BuildableStyle -public abstract class SortedFirst implements Aggregation { +public abstract class AggSpecSortedFirst extends AggSpecBase { public static Builder builder() { - return ImmutableSortedFirst.builder(); + return ImmutableAggSpecSortedFirst.builder(); } - public abstract Pair pair(); - public abstract List columns(); @Override @@ -41,9 +39,9 @@ final void nonEmptyColumns() { @Check final void checkSortOrder() { // TODO(deephaven-core#821): SortedFirst / SortedLast aggregations with sort direction - if (!columns().stream().map(SortColumn::order).allMatch(SortedFirst::isAscending)) { + if (!columns().stream().map(SortColumn::order).allMatch(AggSpecSortedFirst::isAscending)) { throw new IllegalArgumentException( - "Can only construct SortedFirst with ascending, see https://github.com/deephaven/deephaven-core/issues/821"); + "Can only construct AggSpecSortedFirst with ascending, see https://github.com/deephaven/deephaven-core/issues/821"); } } @@ -52,14 +50,12 @@ private static boolean isAscending(SortColumn.Order o) { } public interface Builder { - Builder pair(Pair pair); - Builder addColumns(SortColumn element); Builder addColumns(SortColumn... elements); Builder addAllColumns(Iterable elements); - SortedFirst build(); + AggSpecSortedFirst build(); } } diff --git a/table-api/src/main/java/io/deephaven/api/agg/SortedLast.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecSortedLast.java similarity index 79% rename from table-api/src/main/java/io/deephaven/api/agg/SortedLast.java rename to table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecSortedLast.java index 302c38165cc..e8306b1f8db 100644 --- a/table-api/src/main/java/io/deephaven/api/agg/SortedLast.java +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecSortedLast.java @@ -1,4 +1,4 @@ -package io.deephaven.api.agg; +package io.deephaven.api.agg.spec; import io.deephaven.annotations.BuildableStyle; import io.deephaven.api.SortColumn; @@ -9,20 +9,18 @@ /** * Note: the sorted-last aggregation only supports {@link SortColumn.Order#ASCENDING} columns at the moment. - * + * * @see SortedFirst / SortedLast aggregations with sort * direction */ @Immutable @BuildableStyle -public abstract class SortedLast implements Aggregation { +public abstract class AggSpecSortedLast extends AggSpecBase { public static Builder builder() { - return ImmutableSortedLast.builder(); + return ImmutableAggSpecSortedLast.builder(); } - public abstract Pair pair(); - public abstract List columns(); @Override @@ -41,9 +39,9 @@ final void nonEmptyColumns() { @Check final void checkSortOrder() { // TODO(deephaven-core#821): SortedFirst / SortedLast aggregations with sort direction - if (!columns().stream().map(SortColumn::order).allMatch(SortedLast::isAscending)) { + if (!columns().stream().map(SortColumn::order).allMatch(AggSpecSortedLast::isAscending)) { throw new IllegalArgumentException( - "Can only construct SortedLast with ascending, see https://github.com/deephaven/deephaven-core/issues/821"); + "Can only construct AggSpecSortedLast with ascending, see https://github.com/deephaven/deephaven-core/issues/821"); } } @@ -52,14 +50,12 @@ private static boolean isAscending(SortColumn.Order o) { } public interface Builder { - Builder pair(Pair pair); - Builder addColumns(SortColumn element); Builder addColumns(SortColumn... elements); Builder addAllColumns(Iterable elements); - SortedLast build(); + AggSpecSortedLast build(); } } diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecStd.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecStd.java new file mode 100644 index 00000000000..2698bcf18f5 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecStd.java @@ -0,0 +1,19 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.SimpleStyle; +import org.immutables.value.Value.Immutable; + +@Immutable +@SimpleStyle +public abstract class AggSpecStd extends AggSpecEmptyBase { + + public static AggSpecStd of() { + return ImmutableAggSpecStd.of(); + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecSum.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecSum.java new file mode 100644 index 00000000000..b33e471913c --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecSum.java @@ -0,0 +1,19 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.SimpleStyle; +import org.immutables.value.Value.Immutable; + +@Immutable +@SimpleStyle +public abstract class AggSpecSum extends AggSpecEmptyBase { + + public static AggSpecSum of() { + return ImmutableAggSpecSum.of(); + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecUnique.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecUnique.java new file mode 100644 index 00000000000..08bb12b3d57 --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecUnique.java @@ -0,0 +1,29 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.BuildableStyle; +import org.immutables.value.Value.Default; +import org.immutables.value.Value.Immutable; + +@Immutable +@BuildableStyle +public abstract class AggSpecUnique extends AggSpecBase { + + public static AggSpecUnique of() { + return ImmutableAggSpecUnique.builder().build(); + } + + public static AggSpecUnique of(boolean includeNulls) { + return ImmutableAggSpecUnique.builder().includeNulls(includeNulls).build(); + } + + @Default + public boolean includeNulls() { + return false; + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecVar.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecVar.java new file mode 100644 index 00000000000..80d22d75b4d --- /dev/null +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecVar.java @@ -0,0 +1,19 @@ +package io.deephaven.api.agg.spec; + +import io.deephaven.annotations.SimpleStyle; +import org.immutables.value.Value.Immutable; + +@Immutable +@SimpleStyle +public abstract class AggSpecVar extends AggSpecEmptyBase { + + public static AggSpecVar of() { + return ImmutableAggSpecVar.of(); + } + + @Override + public final V walk(V visitor) { + visitor.visit(this); + return visitor; + } +} diff --git a/table-api/src/main/java/io/deephaven/api/agg/WAvg.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecWAvg.java similarity index 61% rename from table-api/src/main/java/io/deephaven/api/agg/WAvg.java rename to table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecWAvg.java index fff72c32f4b..5789950add3 100644 --- a/table-api/src/main/java/io/deephaven/api/agg/WAvg.java +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecWAvg.java @@ -1,21 +1,18 @@ -package io.deephaven.api.agg; +package io.deephaven.api.agg.spec; -import io.deephaven.api.ColumnName; import io.deephaven.annotations.SimpleStyle; +import io.deephaven.api.ColumnName; import org.immutables.value.Value.Immutable; import org.immutables.value.Value.Parameter; @Immutable @SimpleStyle -public abstract class WAvg implements Aggregation { +public abstract class AggSpecWAvg extends AggSpecBase { - public static WAvg of(ColumnName weight, Pair addition) { - return ImmutableWAvg.of(addition, weight); + public static AggSpecWAvg of(ColumnName weight) { + return ImmutableAggSpecWAvg.of(weight); } - @Parameter - public abstract Pair pair(); - @Parameter public abstract ColumnName weight(); diff --git a/table-api/src/main/java/io/deephaven/api/agg/WSum.java b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecWSum.java similarity index 61% rename from table-api/src/main/java/io/deephaven/api/agg/WSum.java rename to table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecWSum.java index 43c1a3c6ca5..c2dcbc265b5 100644 --- a/table-api/src/main/java/io/deephaven/api/agg/WSum.java +++ b/table-api/src/main/java/io/deephaven/api/agg/spec/AggSpecWSum.java @@ -1,21 +1,18 @@ -package io.deephaven.api.agg; +package io.deephaven.api.agg.spec; -import io.deephaven.api.ColumnName; import io.deephaven.annotations.SimpleStyle; +import io.deephaven.api.ColumnName; import org.immutables.value.Value.Immutable; import org.immutables.value.Value.Parameter; @Immutable @SimpleStyle -public abstract class WSum implements Aggregation { +public abstract class AggSpecWSum extends AggSpecBase { - public static WSum of(ColumnName weight, Pair addition) { - return ImmutableWSum.of(addition, weight); + public static AggSpecWSum of(ColumnName weight) { + return ImmutableAggSpecWSum.of(weight); } - @Parameter - public abstract Pair pair(); - @Parameter public abstract ColumnName weight();