diff --git a/cmd/prometheus/testdata/features.json b/cmd/prometheus/testdata/features.json
index e530770f8b..ae7490c5b7 100644
--- a/cmd/prometheus/testdata/features.json
+++ b/cmd/prometheus/testdata/features.json
@@ -100,7 +100,9 @@
"log10": true,
"log2": true,
"mad_over_time": false,
+ "max_of": false,
"max_over_time": true,
+ "min_of": false,
"min_over_time": true,
"minute": true,
"month": true,
diff --git a/docs/feature_flags.md b/docs/feature_flags.md
index 5304a30922..7771e02f6d 100644
--- a/docs/feature_flags.md
+++ b/docs/feature_flags.md
@@ -236,7 +236,10 @@ For a **range query**, it resolves to the full range of the query (end time - st
For an **instant query**, it resolves to `0s`.
This is particularly useful in combination with `@end()` to look back over the entire query range, e.g., `max_over_time(metric[range()] @ end())`.
-`min(, )` and `max(, )` can be used to find the minimum or maximum of two duration expressions.
+`min_of(, )` and `max_of(, )` select between two duration expressions.
+`min_of` returns the smaller of the two, which is useful for capping a duration at a maximum value.
+`max_of` returns the larger of the two, which is useful for enforcing a minimum value.
+For example, `max_of(step(), 5s)` ensures the duration is never shorter than `5s`, while `min_of(range(), 1h)` caps the duration at `1h`.
**Note**: Duration expressions are not supported in the @ timestamp operator.
@@ -258,8 +261,8 @@ Examples of equivalent durations:
* `4h % 3h` is equivalent to `1h` or `3600s`
* `(2 ^ 3) * 1m` is equivalent to `8m` or `480s`
* `step() + 1` is equivalent to the query step width increased by 1s.
-* `max(step(), 5s)` is equivalent to the larger of the query step width and `5s`.
-* `min(2 * step() + 5s, 5m)` is equivalent to the smaller of twice the query step increased by `5s` and `5m`.
+* `max_of(step(), 5s)` is equivalent to the larger of the query step width and `5s`.
+* `min_of(2 * step() + 5s, 5m)` is equivalent to the smaller of twice the query step increased by `5s` and `5m`.
## OTLP Native Delta Support
diff --git a/docs/querying/functions.md b/docs/querying/functions.md
index a175064b81..5900da4c62 100644
--- a/docs/querying/functions.md
+++ b/docs/querying/functions.md
@@ -693,6 +693,24 @@ This second example has the same effect than the first example, and illustrates
label_replace(up{job="api-server",service="a:c"}, "foo", "$name", "service", "(?P.*):(?P.*)")
```
+## `max_of()`
+
+**This function has to be enabled via the [feature
+flag](../feature_flags.md#experimental-promql-functions)
+`--enable-feature=promql-experimental-functions`.**
+
+`max_of(a scalar, b scalar)` returns the larger of the two scalar values `a`
+and `b`.
+
+## `min_of()`
+
+**This function has to be enabled via the [feature
+flag](../feature_flags.md#experimental-promql-functions)
+`--enable-feature=promql-experimental-functions`.**
+
+`min_of(a scalar, b scalar)` returns the smaller of the two scalar values `a`
+and `b`.
+
## `ln()`
`ln(v instant-vector)` calculates the natural logarithm for all float samples
diff --git a/promql/durations.go b/promql/durations.go
index 3dc44fbbc6..f0319e1acd 100644
--- a/promql/durations.go
+++ b/promql/durations.go
@@ -135,9 +135,9 @@ func (v *durationVisitor) evaluateDurationExpr(expr parser.Expr) (float64, error
return float64(v.step.Seconds()), nil
case parser.RANGE:
return float64(v.queryRange.Seconds()), nil
- case parser.MIN:
+ case parser.MIN_OF:
return math.Min(lhs, rhs), nil
- case parser.MAX:
+ case parser.MAX_OF:
return math.Max(lhs, rhs), nil
case parser.ADD:
if n.LHS == nil {
diff --git a/promql/durations_test.go b/promql/durations_test.go
index b8225ca8fc..0f4f4df652 100644
--- a/promql/durations_test.go
+++ b/promql/durations_test.go
@@ -228,7 +228,7 @@ func TestCalculateDuration(t *testing.T) {
expected: 150 * time.Second,
},
{
- name: "max of step and range",
+ name: "max_of of step and range",
expr: &parser.DurationExpr{
LHS: &parser.DurationExpr{
Op: parser.STEP,
@@ -236,7 +236,7 @@ func TestCalculateDuration(t *testing.T) {
RHS: &parser.DurationExpr{
Op: parser.RANGE,
},
- Op: parser.MAX,
+ Op: parser.MAX_OF,
},
expected: 5 * time.Minute,
},
diff --git a/promql/functions.go b/promql/functions.go
index 2c66263981..399f979cf7 100644
--- a/promql/functions.go
+++ b/promql/functions.go
@@ -1708,6 +1708,16 @@ func funcSqrt(vectorVals []Vector, _ Matrix, _ parser.Expressions, enh *EvalNode
return simpleFloatFunc(vectorVals, enh, math.Sqrt), nil
}
+// === max_of(a, b parser.ValueTypeScalar) Scalar ===
+func funcMaxOf(vectorVals []Vector, _ Matrix, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) {
+ return append(enh.Out, Sample{F: math.Max(vectorVals[0][0].F, vectorVals[1][0].F)}), nil
+}
+
+// === min_of(a, b parser.ValueTypeScalar) Scalar ===
+func funcMinOf(vectorVals []Vector, _ Matrix, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) {
+ return append(enh.Out, Sample{F: math.Min(vectorVals[0][0].F, vectorVals[1][0].F)}), nil
+}
+
// === ln(Vector parser.ValueTypeVector) (Vector, Annotations) ===
func funcLn(vectorVals []Vector, _ Matrix, _ parser.Expressions, enh *EvalNodeHelper) (Vector, annotations.Annotations) {
return simpleFloatFunc(vectorVals, enh, math.Log), nil
@@ -2565,8 +2575,10 @@ var FunctionCalls = map[string]FunctionCall{
"increase": funcIncrease,
"info": nil,
"irate": funcIrate,
+ "max_of": funcMaxOf,
"label_replace": nil, // evalLabelReplace not called via this map.
"label_join": nil, // evalLabelJoin not called via this map.
+ "min_of": funcMinOf,
"ln": funcLn,
"log10": funcLog10,
"log2": funcLog2,
diff --git a/promql/parser/functions.go b/promql/parser/functions.go
index 6935260826..3e34b71700 100644
--- a/promql/parser/functions.go
+++ b/promql/parser/functions.go
@@ -263,11 +263,23 @@ var Functions = map[string]*Function{
Variadic: -1,
ReturnType: ValueTypeVector,
},
+ "max_of": {
+ Name: "max_of",
+ ArgTypes: []ValueType{ValueTypeScalar, ValueTypeScalar},
+ ReturnType: ValueTypeScalar,
+ Experimental: true,
+ },
"last_over_time": {
Name: "last_over_time",
ArgTypes: []ValueType{ValueTypeMatrix},
ReturnType: ValueTypeVector,
},
+ "min_of": {
+ Name: "min_of",
+ ArgTypes: []ValueType{ValueTypeScalar, ValueTypeScalar},
+ ReturnType: ValueTypeScalar,
+ Experimental: true,
+ },
"ln": {
Name: "ln",
ArgTypes: []ValueType{ValueTypeVector},
diff --git a/promql/parser/generated_parser.y b/promql/parser/generated_parser.y
index 34ce028c1f..1b22593dd2 100644
--- a/promql/parser/generated_parser.y
+++ b/promql/parser/generated_parser.y
@@ -159,6 +159,8 @@ START
END
STEP
RANGE
+MAX_OF
+MIN_OF
%token preprocessorEnd
// Counter reset hints.
@@ -183,7 +185,7 @@ START_METRIC_SELECTOR
// Type definitions for grammar rules.
%type label_match_list
%type label_matcher
-%type - aggregate_op grouping_label match_op maybe_label metric_identifier unary_op at_modifier_preprocessors string_identifier counter_reset_hint min_max
+%type
- aggregate_op grouping_label match_op maybe_label metric_identifier unary_op at_modifier_preprocessors string_identifier counter_reset_hint max_of_min_of
%type
label_set metric
%type label_set_list
%type label_set_item
@@ -526,6 +528,24 @@ function_call : IDENTIFIER function_call_body
},
}
}
+ | max_of_min_of function_call_body
+ {
+ fn, exist := getFunction($1.Val, yylex.(*parser).functions)
+ if !exist{
+ yylex.(*parser).addParseErrf($1.PositionRange(),"unknown function with name %q", $1.Val)
+ }
+ if fn != nil && fn.Experimental && !yylex.(*parser).options.EnableExperimentalFunctions {
+ yylex.(*parser).addParseErrf($1.PositionRange(),"function %q is not enabled", $1.Val)
+ }
+ $$ = &Call{
+ Func: fn,
+ Args: $2.(Expressions),
+ PosRange: posrange.PositionRange{
+ Start: $1.PositionRange().Start,
+ End: yylex.(*parser).lastClosing,
+ },
+ }
+ }
;
function_call_body: LEFT_PAREN function_call_args RIGHT_PAREN
@@ -814,7 +834,7 @@ metric : metric_identifier label_set
;
-metric_identifier: AVG | BOTTOMK | BY | COUNT | COUNT_VALUES | FILL | FILL_LEFT | FILL_RIGHT | GROUP | IDENTIFIER | LAND | LOR | LUNLESS | MAX | METRIC_IDENTIFIER | MIN | OFFSET | QUANTILE | STDDEV | STDVAR | SUM | TOPK | WITHOUT | START | END | LIMITK | LIMIT_RATIO | STEP | RANGE | ANCHORED | SMOOTHED;
+metric_identifier: AVG | BOTTOMK | BY | COUNT | COUNT_VALUES | FILL | FILL_LEFT | FILL_RIGHT | GROUP | IDENTIFIER | LAND | LOR | LUNLESS | MAX | METRIC_IDENTIFIER | MIN | OFFSET | QUANTILE | STDDEV | STDVAR | SUM | TOPK | WITHOUT | START | END | LIMITK | LIMIT_RATIO | STEP | RANGE | ANCHORED | SMOOTHED | MAX_OF | MIN_OF;
label_set : LEFT_BRACE label_set_list RIGHT_BRACE
{ $$ = labels.New($2...) }
@@ -1072,7 +1092,7 @@ counter_reset_hint : UNKNOWN_COUNTER_RESET | COUNTER_RESET | NOT_COUNTER_RESET |
aggregate_op : AVG | BOTTOMK | COUNT | COUNT_VALUES | GROUP | MAX | MIN | QUANTILE | STDDEV | STDVAR | SUM | TOPK | LIMITK | LIMIT_RATIO;
// Inside of grouping options label names can be recognized as keywords by the lexer. This is a list of keywords that could also be a label name.
-maybe_label : AVG | BOOL | BOTTOMK | BY | COUNT | COUNT_VALUES | GROUP | GROUP_LEFT | GROUP_RIGHT | FILL | FILL_LEFT | FILL_RIGHT | IDENTIFIER | IGNORING | LAND | LOR | LUNLESS | MAX | METRIC_IDENTIFIER | MIN | OFFSET | ON | QUANTILE | STDDEV | STDVAR | SUM | TOPK | START | END | ATAN2 | LIMITK | LIMIT_RATIO | STEP | RANGE | ANCHORED | SMOOTHED;
+maybe_label : AVG | BOOL | BOTTOMK | BY | COUNT | COUNT_VALUES | GROUP | GROUP_LEFT | GROUP_RIGHT | FILL | FILL_LEFT | FILL_RIGHT | IDENTIFIER | IGNORING | LAND | LOR | LUNLESS | MAX | METRIC_IDENTIFIER | MIN | OFFSET | ON | QUANTILE | STDDEV | STDVAR | SUM | TOPK | START | END | ATAN2 | LIMITK | LIMIT_RATIO | STEP | RANGE | ANCHORED | SMOOTHED | MAX_OF | MIN_OF;
unary_op : ADD | SUB;
@@ -1247,7 +1267,7 @@ offset_duration_expr : number_duration_literal
yylex.(*parser).experimentalDurationExpr(de)
$$ = de
}
- | min_max LEFT_PAREN duration_expr COMMA duration_expr RIGHT_PAREN
+ | max_of_min_of LEFT_PAREN duration_expr COMMA duration_expr RIGHT_PAREN
{
de := &DurationExpr{
Op: $1.Typ,
@@ -1259,7 +1279,7 @@ offset_duration_expr : number_duration_literal
yylex.(*parser).experimentalDurationExpr(de)
$$ = de
}
- | unary_op min_max LEFT_PAREN duration_expr COMMA duration_expr RIGHT_PAREN
+ | unary_op max_of_min_of LEFT_PAREN duration_expr COMMA duration_expr RIGHT_PAREN
{
de := &DurationExpr{
Op: $1.Typ,
@@ -1293,7 +1313,7 @@ offset_duration_expr : number_duration_literal
| duration_expr
;
-min_max: MIN | MAX ;
+max_of_min_of: MAX_OF | MIN_OF ;
duration_expr : number_duration_literal
{
@@ -1397,7 +1417,7 @@ duration_expr : number_duration_literal
yylex.(*parser).experimentalDurationExpr(de)
$$ = de
}
- | min_max LEFT_PAREN duration_expr COMMA duration_expr RIGHT_PAREN
+ | max_of_min_of LEFT_PAREN duration_expr COMMA duration_expr RIGHT_PAREN
{
de := &DurationExpr{
Op: $1.Typ,
diff --git a/promql/parser/generated_parser.y.go b/promql/parser/generated_parser.y.go
index 9f9f017dfa..b51830cb23 100644
--- a/promql/parser/generated_parser.y.go
+++ b/promql/parser/generated_parser.y.go
@@ -130,19 +130,21 @@ const START = 57437
const END = 57438
const STEP = 57439
const RANGE = 57440
-const preprocessorEnd = 57441
-const counterResetHintsStart = 57442
-const UNKNOWN_COUNTER_RESET = 57443
-const COUNTER_RESET = 57444
-const NOT_COUNTER_RESET = 57445
-const GAUGE_TYPE = 57446
-const counterResetHintsEnd = 57447
-const startSymbolsStart = 57448
-const START_METRIC = 57449
-const START_SERIES_DESCRIPTION = 57450
-const START_EXPRESSION = 57451
-const START_METRIC_SELECTOR = 57452
-const startSymbolsEnd = 57453
+const MAX_OF = 57441
+const MIN_OF = 57442
+const preprocessorEnd = 57443
+const counterResetHintsStart = 57444
+const UNKNOWN_COUNTER_RESET = 57445
+const COUNTER_RESET = 57446
+const NOT_COUNTER_RESET = 57447
+const GAUGE_TYPE = 57448
+const counterResetHintsEnd = 57449
+const startSymbolsStart = 57450
+const START_METRIC = 57451
+const START_SERIES_DESCRIPTION = 57452
+const START_EXPRESSION = 57453
+const START_METRIC_SELECTOR = 57454
+const startSymbolsEnd = 57455
var yyToknames = [...]string{
"$end",
@@ -243,6 +245,8 @@ var yyToknames = [...]string{
"END",
"STEP",
"RANGE",
+ "MAX_OF",
+ "MIN_OF",
"preprocessorEnd",
"counterResetHintsStart",
"UNKNOWN_COUNTER_RESET",
@@ -268,397 +272,410 @@ var yyExca = [...]int16{
-1, 1,
1, -1,
-2, 0,
- -1, 44,
- 1, 166,
- 10, 166,
- 24, 166,
+ -1, 46,
+ 1, 169,
+ 10, 169,
+ 24, 169,
-2, 0,
- -1, 76,
- 2, 209,
- 15, 209,
- 81, 209,
- 92, 209,
- -2, 120,
- -1, 77,
- 2, 210,
- 15, 210,
- 81, 210,
- 92, 210,
- -2, 121,
-1, 78,
- 2, 211,
- 15, 211,
- 81, 211,
- 92, 211,
- -2, 123,
- -1, 79,
2, 212,
15, 212,
81, 212,
92, 212,
- -2, 124,
- -1, 80,
+ -2, 121,
+ -1, 79,
2, 213,
15, 213,
81, 213,
92, 213,
- -2, 128,
- -1, 81,
+ -2, 122,
+ -1, 80,
2, 214,
15, 214,
81, 214,
92, 214,
- -2, 133,
- -1, 82,
+ -2, 124,
+ -1, 81,
2, 215,
15, 215,
81, 215,
92, 215,
- -2, 135,
- -1, 83,
+ -2, 125,
+ -1, 82,
2, 216,
15, 216,
81, 216,
92, 216,
- -2, 137,
- -1, 84,
+ -2, 129,
+ -1, 83,
2, 217,
15, 217,
81, 217,
92, 217,
- -2, 138,
- -1, 85,
+ -2, 134,
+ -1, 84,
2, 218,
15, 218,
81, 218,
92, 218,
- -2, 139,
- -1, 86,
+ -2, 136,
+ -1, 85,
2, 219,
15, 219,
81, 219,
92, 219,
- -2, 140,
- -1, 87,
+ -2, 138,
+ -1, 86,
2, 220,
15, 220,
81, 220,
92, 220,
- -2, 141,
- -1, 88,
+ -2, 139,
+ -1, 87,
2, 221,
15, 221,
81, 221,
92, 221,
- -2, 145,
- -1, 89,
+ -2, 140,
+ -1, 88,
2, 222,
15, 222,
81, 222,
92, 222,
- -2, 146,
+ -2, 141,
+ -1, 89,
+ 2, 223,
+ 15, 223,
+ 81, 223,
+ 92, 223,
+ -2, 142,
-1, 90,
- 15, 92,
- -2, 143,
+ 2, 224,
+ 15, 224,
+ 81, 224,
+ 92, 224,
+ -2, 146,
-1, 91,
+ 2, 225,
+ 15, 225,
+ 81, 225,
+ 92, 225,
+ -2, 147,
+ -1, 92,
15, 93,
-2, 144,
- -1, 150,
- 41, 293,
- 42, 293,
- 54, 293,
- 55, 293,
- 59, 293,
+ -1, 93,
+ 15, 94,
+ -2, 145,
+ -1, 94,
+ 15, 295,
+ -2, 152,
+ -1, 95,
+ 15, 296,
+ -2, 153,
+ -1, 156,
+ 41, 298,
+ 42, 298,
+ 54, 298,
+ 55, 298,
+ 59, 298,
-2, 22,
- -1, 268,
- 9, 278,
- 12, 278,
- 13, 278,
- 18, 278,
- 19, 278,
- 25, 278,
- 41, 278,
- 49, 278,
- 50, 278,
- 53, 278,
- 59, 278,
- 64, 278,
- 65, 278,
- 66, 278,
- 67, 278,
- 68, 278,
- 69, 278,
- 70, 278,
- 71, 278,
- 72, 278,
- 73, 278,
- 74, 278,
- 75, 278,
- 76, 278,
- 77, 278,
- 81, 278,
- 84, 278,
- 85, 278,
- 86, 278,
- 88, 278,
- 89, 278,
- 90, 278,
- 92, 278,
- 95, 278,
- 96, 278,
- 97, 278,
- 98, 278,
+ -1, 274,
+ 9, 283,
+ 12, 283,
+ 13, 283,
+ 18, 283,
+ 19, 283,
+ 25, 283,
+ 41, 283,
+ 49, 283,
+ 50, 283,
+ 53, 283,
+ 59, 283,
+ 64, 283,
+ 65, 283,
+ 66, 283,
+ 67, 283,
+ 68, 283,
+ 69, 283,
+ 70, 283,
+ 71, 283,
+ 72, 283,
+ 73, 283,
+ 74, 283,
+ 75, 283,
+ 76, 283,
+ 77, 283,
+ 81, 283,
+ 84, 283,
+ 85, 283,
+ 86, 283,
+ 88, 283,
+ 89, 283,
+ 90, 283,
+ 92, 283,
+ 95, 283,
+ 96, 283,
+ 97, 283,
+ 98, 283,
+ 99, 283,
+ 100, 283,
-2, 0,
- -1, 269,
- 9, 278,
- 12, 278,
- 13, 278,
- 18, 278,
- 19, 278,
- 25, 278,
- 41, 278,
- 49, 278,
- 50, 278,
- 53, 278,
- 59, 278,
- 64, 278,
- 65, 278,
- 66, 278,
- 67, 278,
- 68, 278,
- 69, 278,
- 70, 278,
- 71, 278,
- 72, 278,
- 73, 278,
- 74, 278,
- 75, 278,
- 76, 278,
- 77, 278,
- 81, 278,
- 84, 278,
- 85, 278,
- 86, 278,
- 88, 278,
- 89, 278,
- 90, 278,
- 92, 278,
- 95, 278,
- 96, 278,
- 97, 278,
- 98, 278,
+ -1, 275,
+ 9, 283,
+ 12, 283,
+ 13, 283,
+ 18, 283,
+ 19, 283,
+ 25, 283,
+ 41, 283,
+ 49, 283,
+ 50, 283,
+ 53, 283,
+ 59, 283,
+ 64, 283,
+ 65, 283,
+ 66, 283,
+ 67, 283,
+ 68, 283,
+ 69, 283,
+ 70, 283,
+ 71, 283,
+ 72, 283,
+ 73, 283,
+ 74, 283,
+ 75, 283,
+ 76, 283,
+ 77, 283,
+ 81, 283,
+ 84, 283,
+ 85, 283,
+ 86, 283,
+ 88, 283,
+ 89, 283,
+ 90, 283,
+ 92, 283,
+ 95, 283,
+ 96, 283,
+ 97, 283,
+ 98, 283,
+ 99, 283,
+ 100, 283,
-2, 0,
}
const yyPrivate = 57344
-const yyLast = 1411
+const yyLast = 1439
var yyAct = [...]int16{
- 61, 377, 200, 445, 203, 447, 365, 307, 257, 211,
- 452, 51, 101, 155, 74, 383, 99, 241, 428, 64,
- 429, 396, 384, 134, 138, 71, 68, 136, 68, 204,
- 171, 135, 199, 137, 199, 139, 67, 405, 67, 442,
- 395, 459, 460, 461, 462, 73, 140, 266, 441, 68,
- 359, 267, 128, 268, 269, 291, 407, 355, 92, 67,
- 92, 263, 264, 265, 474, 360, 6, 356, 165, 208,
- 148, 405, 150, 463, 68, 357, 93, 446, 93, 207,
- 354, 92, 413, 361, 67, 431, 198, 197, 198, 197,
- 209, 141, 142, 143, 145, 232, 122, 412, 127, 93,
- 46, 209, 436, 430, 411, 348, 92, 157, 210, 198,
- 197, 398, 138, 397, 216, 217, 216, 217, 151, 210,
- 347, 435, 414, 139, 93, 196, 124, 126, 125, 213,
- 218, 219, 220, 221, 222, 223, 191, 288, 289, 195,
- 214, 214, 214, 214, 214, 214, 214, 201, 393, 391,
- 192, 390, 261, 237, 215, 215, 215, 215, 215, 215,
- 215, 226, 229, 224, 214, 147, 353, 149, 225, 212,
- 259, 2, 3, 4, 5, 247, 68, 249, 215, 453,
- 253, 68, 199, 228, 378, 132, 67, 94, 388, 352,
- 387, 67, 190, 292, 251, 260, 227, 133, 131, 68,
- 296, 134, 480, 252, 287, 199, 202, 290, 92, 67,
- 476, 214, 386, 208, 298, 299, 292, 250, 215, 42,
- 166, 129, 132, 207, 304, 215, 93, 214, 401, 129,
- 132, 92, 479, 400, 133, 131, 198, 197, 134, 130,
- 208, 215, 133, 131, 303, 209, 134, 130, 399, 93,
- 207, 478, 157, 351, 477, 242, 297, 243, 295, 198,
- 197, 294, 262, 210, 216, 217, 379, 380, 270, 271,
- 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
- 282, 283, 284, 285, 286, 385, 358, 193, 194, 381,
- 382, 293, 389, 140, 152, 146, 392, 245, 144, 205,
- 206, 7, 213, 214, 10, 243, 425, 214, 424, 244,
- 246, 394, 255, 214, 96, 423, 208, 215, 422, 258,
- 467, 215, 421, 261, 420, 419, 207, 215, 172, 173,
- 174, 175, 176, 177, 178, 179, 180, 181, 182, 183,
- 184, 185, 186, 187, 188, 245, 434, 418, 209, 417,
- 403, 416, 415, 164, 129, 132, 8, 244, 246, 439,
- 44, 214, 404, 406, 158, 408, 210, 133, 131, 409,
- 410, 134, 130, 208, 156, 215, 105, 43, 129, 132,
- 129, 132, 350, 207, 302, 481, 1, 103, 301, 432,
- 426, 133, 131, 133, 131, 134, 130, 134, 130, 189,
- 214, 59, 75, 300, 427, 209, 58, 95, 438, 57,
- 163, 240, 162, 440, 215, 102, 239, 433, 444, 448,
- 449, 450, 161, 210, 451, 100, 455, 160, 457, 238,
- 465, 466, 454, 248, 456, 468, 129, 132, 103, 464,
- 159, 310, 56, 55, 402, 170, 214, 469, 470, 133,
- 131, 323, 471, 134, 130, 54, 473, 329, 236, 72,
- 215, 437, 9, 9, 309, 53, 52, 50, 475, 129,
- 132, 168, 230, 49, 169, 48, 167, 129, 132, 214,
- 482, 47, 133, 131, 60, 256, 134, 130, 325, 326,
- 133, 131, 327, 215, 134, 130, 472, 362, 349, 104,
- 340, 254, 305, 311, 313, 315, 316, 317, 328, 330,
- 333, 334, 335, 336, 337, 341, 342, 97, 458, 312,
- 314, 318, 319, 320, 321, 322, 324, 331, 346, 345,
- 332, 310, 129, 132, 338, 339, 343, 344, 308, 62,
- 153, 323, 0, 0, 0, 133, 131, 329, 364, 134,
- 130, 306, 0, 0, 309, 363, 0, 0, 0, 367,
- 368, 366, 373, 375, 372, 374, 369, 370, 371, 376,
- 0, 0, 0, 0, 0, 0, 0, 0, 325, 326,
- 0, 0, 327, 0, 0, 0, 0, 0, 0, 0,
- 340, 0, 0, 311, 313, 315, 316, 317, 328, 330,
- 333, 334, 335, 336, 337, 341, 342, 0, 0, 312,
- 314, 318, 319, 320, 321, 322, 324, 331, 346, 345,
- 332, 0, 0, 0, 338, 339, 343, 344, 68, 0,
- 0, 63, 94, 0, 69, 443, 0, 25, 67, 0,
- 0, 234, 0, 0, 70, 0, 367, 368, 366, 373,
- 375, 372, 374, 369, 370, 371, 376, 158, 0, 0,
- 92, 0, 0, 0, 0, 0, 0, 156, 21, 22,
- 0, 0, 23, 0, 0, 154, 0, 0, 93, 0,
- 103, 0, 0, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 0, 0, 0,
- 13, 0, 102, 16, 17, 18, 0, 27, 41, 40,
- 0, 33, 100, 0, 90, 91, 65, 66, 68, 0,
- 98, 63, 94, 0, 69, 103, 0, 25, 67, 0,
- 0, 233, 0, 0, 70, 0, 0, 0, 0, 0,
+ 63, 386, 205, 455, 374, 457, 314, 208, 263, 216,
+ 462, 53, 209, 105, 160, 6, 103, 438, 141, 439,
+ 66, 392, 74, 247, 132, 140, 139, 469, 470, 471,
+ 472, 144, 242, 207, 142, 69, 176, 393, 272, 132,
+ 213, 415, 273, 132, 76, 143, 269, 270, 271, 138,
+ 212, 110, 112, 113, 452, 114, 115, 116, 117, 118,
+ 119, 120, 121, 122, 123, 124, 125, 112, 126, 127,
+ 131, 111, 214, 154, 451, 156, 274, 275, 213, 123,
+ 124, 456, 489, 126, 417, 131, 111, 126, 212, 131,
+ 215, 145, 146, 147, 149, 151, 365, 142, 128, 130,
+ 129, 488, 238, 170, 487, 484, 357, 48, 143, 364,
+ 214, 473, 162, 128, 130, 129, 441, 128, 130, 129,
+ 157, 356, 2, 3, 4, 5, 210, 211, 215, 201,
+ 440, 362, 363, 218, 224, 225, 226, 227, 228, 229,
+ 196, 407, 406, 259, 219, 219, 219, 219, 219, 219,
+ 219, 197, 206, 241, 361, 220, 220, 220, 220, 220,
+ 220, 220, 402, 415, 200, 230, 258, 231, 223, 223,
+ 223, 223, 223, 223, 223, 153, 400, 155, 265, 71,
+ 232, 235, 255, 266, 399, 204, 253, 257, 261, 70,
+ 132, 136, 213, 267, 446, 264, 213, 423, 298, 267,
+ 463, 424, 212, 137, 135, 302, 212, 138, 491, 293,
+ 256, 96, 422, 445, 387, 397, 219, 110, 112, 421,
+ 220, 298, 304, 305, 214, 490, 396, 220, 214, 97,
+ 123, 124, 219, 296, 126, 127, 131, 111, 368, 71,
+ 223, 213, 215, 220, 133, 136, 215, 98, 395, 70,
+ 234, 212, 311, 369, 310, 309, 223, 137, 135, 162,
+ 360, 138, 134, 233, 128, 130, 129, 221, 222, 202,
+ 203, 370, 388, 389, 268, 367, 303, 301, 300, 299,
+ 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
+ 286, 287, 288, 289, 290, 291, 292, 394, 398, 249,
+ 144, 152, 401, 366, 150, 148, 44, 7, 218, 219,
+ 390, 391, 408, 219, 133, 136, 71, 403, 214, 219,
+ 220, 486, 297, 219, 220, 308, 70, 137, 135, 307,
+ 220, 138, 134, 223, 220, 71, 215, 223, 435, 251,
+ 133, 136, 434, 223, 306, 70, 433, 223, 96, 477,
+ 246, 250, 252, 137, 135, 245, 405, 138, 134, 413,
+ 45, 432, 431, 71, 430, 429, 97, 96, 244, 204,
+ 219, 414, 416, 70, 418, 404, 10, 428, 419, 420,
+ 248, 220, 249, 133, 136, 97, 100, 427, 426, 425,
+ 168, 169, 167, 163, 223, 96, 137, 135, 442, 436,
+ 138, 134, 171, 161, 294, 295, 202, 203, 61, 219,
+ 437, 359, 109, 97, 99, 1, 107, 448, 194, 411,
+ 220, 8, 251, 450, 410, 46, 454, 77, 60, 458,
+ 459, 460, 59, 223, 250, 252, 465, 461, 467, 409,
+ 475, 476, 464, 75, 466, 478, 9, 9, 58, 474,
+ 449, 221, 222, 202, 203, 57, 219, 479, 480, 358,
+ 412, 106, 481, 175, 56, 55, 483, 220, 54, 133,
+ 136, 104, 52, 173, 236, 51, 174, 50, 485, 254,
+ 223, 163, 137, 135, 107, 317, 138, 134, 172, 219,
+ 492, 161, 49, 133, 136, 330, 62, 262, 482, 159,
+ 220, 336, 371, 108, 107, 447, 137, 135, 316, 260,
+ 138, 134, 312, 223, 177, 178, 179, 180, 181, 182,
+ 183, 184, 185, 186, 187, 188, 189, 190, 191, 192,
+ 193, 101, 332, 333, 468, 315, 334, 64, 158, 0,
+ 0, 0, 444, 0, 347, 0, 0, 318, 320, 322,
+ 323, 324, 335, 337, 340, 341, 342, 343, 344, 348,
+ 349, 0, 0, 319, 321, 325, 326, 327, 328, 329,
+ 331, 338, 353, 352, 339, 317, 133, 136, 345, 346,
+ 350, 351, 354, 355, 443, 330, 0, 106, 0, 137,
+ 135, 336, 243, 138, 134, 313, 166, 104, 316, 0,
+ 0, 165, 0, 133, 136, 102, 0, 0, 0, 0,
+ 107, 133, 136, 0, 164, 0, 137, 135, 0, 0,
+ 138, 134, 332, 333, 137, 135, 334, 0, 138, 134,
+ 0, 0, 0, 0, 347, 0, 0, 318, 320, 322,
+ 323, 324, 335, 337, 340, 341, 342, 343, 344, 348,
+ 349, 0, 0, 319, 321, 325, 326, 327, 328, 329,
+ 331, 338, 353, 352, 339, 0, 0, 0, 345, 346,
+ 350, 351, 354, 355, 71, 0, 0, 65, 98, 0,
+ 72, 0, 0, 25, 70, 0, 0, 237, 217, 0,
+ 73, 0, 0, 0, 0, 71, 0, 0, 0, 0,
+ 0, 204, 0, 0, 0, 70, 96, 0, 0, 0,
+ 0, 0, 0, 0, 21, 22, 0, 0, 23, 0,
+ 0, 0, 0, 0, 97, 0, 0, 96, 0, 78,
+ 79, 80, 81, 82, 83, 84, 85, 86, 87, 88,
+ 89, 90, 91, 0, 0, 97, 13, 0, 0, 16,
+ 17, 18, 0, 27, 41, 40, 0, 33, 0, 0,
+ 92, 93, 67, 68, 94, 95, 71, 0, 0, 65,
+ 98, 0, 72, 0, 0, 25, 70, 0, 0, 240,
+ 195, 0, 73, 221, 222, 202, 203, 71, 0, 0,
+ 0, 0, 0, 204, 0, 0, 0, 70, 96, 0,
+ 0, 0, 0, 0, 0, 0, 21, 22, 0, 0,
+ 23, 0, 0, 0, 0, 0, 97, 0, 0, 96,
+ 0, 78, 79, 80, 81, 82, 83, 84, 85, 86,
+ 87, 88, 89, 90, 91, 0, 0, 97, 13, 0,
+ 0, 16, 17, 18, 0, 27, 41, 40, 0, 33,
+ 0, 0, 92, 93, 67, 68, 94, 95, 71, 0,
+ 0, 65, 98, 0, 72, 0, 0, 25, 70, 0,
+ 0, 239, 0, 0, 73, 198, 199, 202, 203, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 92, 0, 0, 0, 0, 0, 0, 0, 21, 22,
- 0, 0, 23, 0, 0, 0, 0, 0, 93, 0,
- 0, 0, 0, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 0, 0, 0,
+ 96, 0, 0, 0, 0, 0, 0, 0, 21, 22,
+ 0, 0, 23, 0, 0, 0, 0, 0, 97, 0,
+ 0, 0, 0, 78, 79, 80, 81, 82, 83, 84,
+ 85, 86, 87, 88, 89, 90, 91, 0, 0, 0,
13, 0, 0, 16, 17, 18, 0, 27, 41, 40,
- 0, 33, 0, 0, 90, 91, 65, 66, 68, 0,
- 0, 63, 94, 0, 69, 0, 0, 25, 67, 0,
- 0, 231, 0, 0, 70, 0, 0, 0, 0, 0,
+ 0, 33, 0, 0, 92, 93, 67, 68, 94, 95,
+ 71, 47, 0, 65, 98, 0, 72, 373, 0, 25,
+ 70, 0, 0, 0, 372, 0, 73, 0, 376, 377,
+ 375, 382, 384, 381, 383, 378, 379, 380, 385, 0,
+ 0, 0, 96, 0, 0, 0, 0, 0, 0, 0,
+ 21, 22, 0, 0, 23, 0, 0, 0, 0, 0,
+ 97, 0, 0, 0, 0, 78, 79, 80, 81, 82,
+ 83, 84, 85, 86, 87, 88, 89, 90, 91, 0,
+ 0, 0, 13, 0, 0, 16, 17, 18, 0, 27,
+ 41, 40, 0, 33, 0, 0, 92, 93, 67, 68,
+ 94, 95, 71, 0, 0, 65, 98, 0, 72, 453,
+ 0, 25, 70, 0, 0, 0, 0, 0, 73, 0,
+ 376, 377, 375, 382, 384, 381, 383, 378, 379, 380,
+ 385, 0, 0, 0, 96, 0, 0, 0, 0, 0,
+ 0, 0, 21, 22, 0, 0, 23, 0, 0, 0,
+ 0, 0, 97, 0, 0, 0, 0, 78, 79, 80,
+ 81, 82, 83, 84, 85, 86, 87, 88, 89, 90,
+ 91, 0, 0, 0, 13, 0, 0, 16, 17, 18,
+ 0, 27, 41, 40, 0, 33, 0, 0, 92, 93,
+ 67, 68, 94, 95, 20, 98, 0, 0, 0, 0,
+ 25, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 92, 0, 0, 0, 0, 0, 0, 0, 21, 22,
- 0, 0, 23, 0, 0, 0, 0, 0, 93, 0,
- 0, 0, 0, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 0, 0, 0,
- 13, 0, 0, 16, 17, 18, 0, 27, 41, 40,
- 0, 33, 0, 0, 90, 91, 65, 66, 68, 45,
- 0, 63, 94, 0, 69, 0, 0, 25, 67, 0,
- 0, 0, 0, 0, 70, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 92, 0, 0, 0, 0, 0, 0, 0, 21, 22,
- 0, 0, 23, 0, 0, 0, 0, 0, 93, 0,
- 0, 0, 0, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 0, 0, 0,
- 13, 0, 0, 16, 17, 18, 0, 27, 41, 40,
- 0, 33, 0, 0, 90, 91, 65, 66, 68, 0,
- 0, 63, 94, 0, 69, 0, 0, 25, 67, 0,
- 0, 0, 0, 0, 70, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 92, 0, 0, 0, 0, 0, 0, 0, 21, 22,
- 0, 0, 23, 0, 0, 0, 0, 0, 93, 0,
- 0, 0, 128, 76, 77, 78, 79, 80, 81, 82,
- 83, 84, 85, 86, 87, 88, 89, 0, 0, 0,
- 13, 0, 0, 16, 17, 18, 0, 27, 41, 40,
- 108, 33, 20, 94, 90, 91, 65, 66, 25, 0,
- 0, 0, 119, 120, 0, 0, 122, 0, 127, 107,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 21,
- 22, 0, 0, 23, 0, 0, 124, 126, 125, 0,
- 0, 0, 0, 0, 11, 12, 14, 15, 19, 24,
- 26, 28, 29, 30, 31, 32, 36, 37, 0, 0,
- 0, 13, 0, 0, 16, 17, 18, 0, 27, 41,
- 40, 0, 33, 20, 42, 34, 35, 38, 39, 25,
+ 0, 21, 22, 0, 0, 23, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 11, 12, 14, 15,
+ 19, 24, 26, 28, 29, 30, 31, 32, 36, 37,
+ 0, 0, 0, 13, 0, 0, 16, 17, 18, 0,
+ 27, 41, 40, 0, 33, 0, 0, 34, 35, 38,
+ 39, 42, 43, 20, 44, 0, 0, 0, 0, 25,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
21, 22, 0, 0, 23, 0, 0, 0, 0, 0,
0, 0, 0, 0, 0, 11, 12, 14, 15, 19,
- 24, 26, 28, 29, 30, 31, 32, 36, 37, 0,
- 128, 0, 13, 0, 0, 16, 17, 18, 235, 27,
+ 24, 26, 28, 29, 30, 31, 32, 36, 37, 132,
+ 0, 0, 13, 0, 0, 16, 17, 18, 0, 27,
41, 40, 0, 33, 0, 0, 34, 35, 38, 39,
- 0, 128, 0, 0, 0, 0, 0, 106, 108, 109,
- 0, 110, 111, 112, 113, 114, 115, 116, 117, 118,
- 119, 120, 121, 0, 122, 123, 127, 107, 106, 108,
- 109, 0, 110, 111, 112, 113, 114, 115, 116, 117,
- 118, 119, 120, 121, 0, 122, 123, 127, 107, 0,
- 0, 128, 0, 0, 124, 126, 125, 0, 0, 0,
+ 42, 43, 132, 0, 0, 0, 110, 112, 113, 0,
+ 114, 115, 116, 117, 118, 119, 120, 121, 122, 123,
+ 124, 125, 0, 126, 127, 131, 111, 0, 0, 110,
+ 112, 113, 0, 114, 115, 116, 117, 118, 0, 120,
+ 121, 122, 123, 124, 125, 0, 126, 127, 131, 111,
+ 0, 0, 132, 128, 130, 129, 0, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 128, 0, 0, 124, 126, 125, 106, 108,
- 109, 0, 110, 111, 112, 113, 114, 0, 116, 117,
- 118, 119, 120, 121, 128, 122, 123, 127, 107, 106,
- 108, 109, 0, 110, 111, 112, 113, 0, 0, 116,
- 117, 0, 119, 120, 121, 0, 122, 123, 127, 107,
- 0, 106, 108, 0, 0, 124, 126, 125, 0, 0,
- 0, 0, 0, 0, 119, 120, 0, 0, 122, 123,
- 127, 107, 0, 0, 0, 0, 124, 126, 125, 0,
+ 0, 0, 0, 0, 0, 0, 128, 130, 129, 110,
+ 112, 113, 0, 114, 115, 116, 117, 0, 0, 120,
+ 121, 0, 123, 124, 125, 0, 126, 127, 131, 111,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 124, 126,
- 125,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 128, 130, 129,
}
var yyPact = [...]int16{
- 64, 291, 1141, 1141, 889, 1060, -1000, -1000, -1000, 206,
+ 13, 297, 1211, 1211, 941, 1122, -1000, -1000, -1000, 293,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, 700, -1000, 374, -1000, 1227, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, 585, -1000, 410, -1000, 1275, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, 428, 31, 278, 278, 283, 280, -1000, -1000, 979,
- -1000, 979, 174, -1000, 279, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, 273, 16, 285, 285, 290, 289, 286,
+ -1000, -1000, 1033, -1000, 1033, 234, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, 655, -1000, -1000, 420, -1000, -1000,
- 408, 349, -1000, -1000, 44, -1000, -50, -50, -50, -50,
- -50, -50, -50, -50, -50, -50, -50, -50, -50, -50,
- -50, -50, -50, -50, 190, -1000, -1000, 204, 167, 17,
- 17, 17, 17, 17, 17, 278, -57, -1000, 181, 181,
- 799, -1000, -1000, -1000, 709, -1000, 619, 1206, 436, 38,
- -35, -1000, 17, 409, -1000, -1000, 253, 301, -1000, -1000,
- 413, -1000, 192, -1000, 178, 307, 979, -1000, -23, -40,
- -29, -1000, 979, 979, 979, 979, 979, 979, 979, 979,
- 979, 979, 979, 979, 979, 979, 979, 979, 979, -1000,
- -1000, -1000, 40, 276, 246, 243, 428, -1000, -1000, 17,
- -1000, 241, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 231,
- 231, 382, -1000, 428, -1000, 17, 229, 209, 143, 143,
- -35, -35, -35, -35, -1000, -1000, -1000, 529, -1000, -1000,
- 98, -1000, 1227, -1000, -1000, -1000, -1000, 491, -1000, 362,
- -1000, 164, -1000, -1000, -1000, -1000, -1000, 55, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, 41, 49, 24, -1000, -1000,
- -1000, 531, 1028, 169, 169, 169, 181, 181, 181, 181,
- 38, 38, 1320, 1320, 1320, 1320, 1320, 1298, 1277, 1320,
- 1320, 1298, 38, 38, 1320, 38, 1028, -1000, 197, 175,
- 173, 17, -35, 129, 127, 17, 436, 126, -1000, -1000,
- -1000, 19, -1000, 91, 89, 226, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 479, -1000,
+ -1000, 594, -1000, -1000, 388, 387, -1000, -1000, 79, -1000,
+ -44, -44, -44, -44, -44, -44, -44, -44, -44, -44,
+ -44, -44, -44, -44, -44, -44, -44, -44, 778, -1000,
+ -1000, 31, 686, 170, 170, 170, 170, 170, 170, 285,
+ -47, -1000, 248, 248, 665, -1000, -1000, -1000, 849, -1000,
+ 757, -1000, 665, 10, 570, 29, -9, -1000, 348, -1000,
+ -1000, 378, 295, -1000, -1000, 459, -1000, 185, -1000, 141,
+ 183, 1033, -1000, -38, -49, -6, -1000, 1033, 1033, 1033,
+ 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033, 1033,
+ 1033, 1033, 1033, 1033, -1000, -1000, -1000, 307, 264, 263,
+ 262, 273, -1000, -1000, 170, -1000, 261, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, 232, 232, 323, -1000, 273, -1000,
+ 170, 240, 239, 237, 149, 149, -9, -9, -9, -9,
+ -1000, -1000, -1000, 573, -1000, -1000, 99, -1000, 1275, -1000,
+ -1000, 452, -1000, -1000, -1000, 391, -1000, 129, -1000, -1000,
+ -1000, -1000, -1000, 107, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, 70, 277, 212, -1000, -1000, -1000, 940, 25, 199,
+ 199, 199, 248, 248, 248, 248, 29, 29, 176, 176,
+ 176, 176, 176, 1348, 1298, 176, 176, 1348, 29, 29,
+ 176, 29, 25, -1000, 233, 211, 200, 170, -9, 162,
+ 154, 170, 570, 140, -1000, -1000, -1000, 354, -1000, 120,
+ 119, 170, 417, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
-1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, -1000, -1000, -1000, -1000, 979, 17,
- -1000, -1000, -1000, -1000, -1000, -1000, 52, 52, 30, 52,
- 136, 136, 80, 105, -1000, -1000, 346, 345, 343, 341,
- 319, 318, 316, 312, 309, 302, 300, -1000, 65, -68,
- -65, -1000, -1000, -1000, -1000, -1000, 81, 63, 17, 395,
- -1000, -1000, 339, -1000, 100, -1000, -1000, -1000, -1000, -1000,
- 439, -1000, 1227, 337, -1000, -1000, -1000, 52, -1000, 22,
- 13, 618, -1000, -1000, -1000, 18, 60, 60, 60, 231,
- 165, 165, 18, 165, 18, -60, 51, 172, 169, 169,
- -1000, -1000, 313, -1000, 17, -1000, -1000, -1000, -1000, -1000,
- -1000, 52, 52, -1000, -1000, -1000, 52, -1000, -1000, -1000,
- -1000, -1000, -1000, 60, -1000, -1000, -1000, -1000, -1000, -1000,
- -1000, -1000, -1000, -1000, 42, -1000, -1000, 17, 188, -1000,
- -1000, -1000, 230, -1000, -1000, 180, -1000, 364, -1000, -1000,
+ -1000, -1000, -1000, -1000, -1000, -1000, -1000, 1033, 170, -1000,
+ -1000, -1000, -1000, -1000, -1000, 144, 144, 58, 144, 177,
+ 177, 195, 184, -1000, -1000, 383, 382, 381, 371, 359,
+ 358, 356, 355, 340, 336, 332, -1000, 326, -69, -66,
+ -1000, -1000, -1000, -1000, -1000, 108, 94, 170, 562, -1000,
+ -1000, 535, -1000, 192, -1000, -1000, -1000, -1000, 452, -1000,
+ 483, -1000, 1275, 428, -1000, -1000, -1000, 144, -1000, 48,
+ 28, 1032, -1000, -1000, -1000, 22, 69, 69, 69, 232,
+ 186, 186, 22, 186, 22, -76, 89, 230, 199, 199,
+ -1000, -1000, 342, -1000, 170, -1000, -1000, -1000, -1000, -1000,
+ -1000, 144, 144, -1000, -1000, -1000, 144, -1000, -1000, -1000,
+ -1000, -1000, -1000, 69, -1000, -1000, -1000, -1000, -1000, -1000,
+ -1000, -1000, -1000, -1000, 83, -1000, -1000, 170, 299, -1000,
+ -1000, -1000, 80, -1000, -1000, 203, -1000, 187, -1000, -1000,
-1000, -1000, -1000,
}
var yyPgo = [...]int16{
- 0, 540, 13, 539, 7, 17, 538, 459, 25, 19,
- 12, 518, 14, 304, 356, 517, 16, 502, 22, 15,
- 501, 499, 8, 497, 6, 10, 496, 3, 5, 4,
- 485, 29, 2, 484, 481, 31, 220, 476, 475, 474,
- 95, 473, 472, 27, 471, 1, 45, 467, 11, 466,
- 465, 455, 445, 443, 442, 409, 406, 401, 0, 402,
- 9, 399, 386, 377,
+ 0, 538, 14, 537, 6, 23, 535, 443, 22, 20,
+ 13, 534, 35, 376, 421, 531, 16, 512, 37, 21,
+ 509, 503, 8, 502, 4, 10, 498, 3, 5, 7,
+ 497, 12, 2, 496, 492, 26, 402, 488, 477, 476,
+ 102, 475, 474, 25, 473, 1, 44, 472, 11, 468,
+ 465, 464, 463, 455, 448, 432, 428, 408, 0, 427,
+ 9, 418, 415, 360,
}
var yyR1 = [...]int8{
@@ -669,30 +686,30 @@ var yyR1 = [...]int8{
38, 38, 38, 38, 38, 38, 38, 36, 39, 39,
52, 52, 44, 44, 44, 44, 37, 37, 37, 37,
37, 37, 18, 18, 18, 18, 17, 17, 17, 4,
- 4, 4, 45, 45, 41, 41, 41, 41, 43, 43,
- 42, 42, 42, 53, 60, 49, 49, 50, 51, 33,
- 33, 33, 9, 9, 47, 55, 55, 55, 55, 55,
- 55, 56, 57, 57, 57, 46, 46, 46, 1, 1,
- 1, 2, 2, 2, 2, 2, 2, 2, 14, 14,
+ 4, 4, 45, 45, 41, 41, 41, 41, 41, 43,
+ 43, 42, 42, 42, 53, 60, 49, 49, 50, 51,
+ 33, 33, 33, 9, 9, 47, 55, 55, 55, 55,
+ 55, 55, 56, 57, 57, 57, 46, 46, 46, 1,
+ 1, 1, 2, 2, 2, 2, 2, 2, 2, 14,
+ 14, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 7, 7, 7, 7, 7, 7, 7, 7, 7,
- 7, 13, 13, 13, 13, 15, 15, 15, 16, 16,
- 16, 16, 16, 16, 16, 63, 21, 21, 21, 21,
- 20, 20, 20, 20, 20, 20, 20, 20, 20, 30,
- 30, 30, 22, 22, 22, 22, 23, 23, 23, 24,
- 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,
- 25, 25, 26, 26, 26, 11, 11, 11, 11, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 3, 3, 3, 6, 6, 6, 6, 6, 6, 6,
+ 7, 7, 7, 7, 13, 13, 13, 13, 15, 15,
+ 15, 16, 16, 16, 16, 16, 16, 16, 63, 21,
+ 21, 21, 21, 20, 20, 20, 20, 20, 20, 20,
+ 20, 20, 30, 30, 30, 22, 22, 22, 22, 23,
+ 23, 23, 24, 24, 24, 24, 24, 24, 24, 24,
+ 24, 24, 24, 25, 25, 26, 26, 26, 11, 11,
+ 11, 11, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 3, 3, 3, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 8,
- 8, 5, 5, 5, 5, 48, 48, 29, 29, 31,
- 31, 32, 32, 28, 27, 27, 54, 10, 19, 19,
- 61, 61, 61, 61, 61, 61, 61, 61, 61, 61,
- 12, 12, 58, 58, 58, 58, 58, 58, 58, 58,
- 58, 58, 58, 58, 59,
+ 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
+ 6, 6, 6, 6, 8, 8, 5, 5, 5, 5,
+ 48, 48, 29, 29, 31, 31, 32, 32, 28, 27,
+ 27, 54, 10, 19, 19, 61, 61, 61, 61, 61,
+ 61, 61, 61, 61, 61, 12, 12, 58, 58, 58,
+ 58, 58, 58, 58, 58, 58, 58, 58, 58, 59,
}
var yyR2 = [...]int8{
@@ -703,134 +720,136 @@ var yyR2 = [...]int8{
4, 4, 4, 4, 4, 4, 4, 1, 0, 1,
3, 3, 1, 1, 3, 3, 1, 3, 3, 3,
5, 5, 3, 4, 2, 1, 3, 1, 2, 1,
- 1, 1, 3, 4, 2, 2, 2, 2, 3, 2,
- 3, 1, 2, 3, 1, 3, 3, 2, 2, 3,
- 5, 3, 1, 1, 4, 6, 5, 6, 5, 4,
- 3, 2, 2, 1, 1, 3, 4, 2, 3, 1,
- 2, 3, 3, 1, 3, 3, 2, 1, 2, 1,
+ 1, 1, 3, 4, 2, 2, 2, 2, 2, 3,
+ 2, 3, 1, 2, 3, 1, 3, 3, 2, 2,
+ 3, 5, 3, 1, 1, 4, 6, 5, 6, 5,
+ 4, 3, 2, 2, 1, 1, 3, 4, 2, 3,
+ 1, 2, 3, 3, 1, 3, 3, 2, 1, 2,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 3, 4, 2, 0, 3, 1, 2, 3, 3,
- 1, 3, 3, 2, 1, 2, 0, 3, 2, 1,
- 1, 3, 1, 3, 4, 1, 3, 5, 5, 1,
- 1, 1, 4, 3, 3, 2, 3, 1, 2, 3,
- 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,
- 4, 3, 3, 1, 2, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 3, 4, 2, 0, 3, 1,
+ 2, 3, 3, 1, 3, 3, 2, 1, 2, 0,
+ 3, 2, 1, 1, 3, 1, 3, 4, 1, 3,
+ 5, 5, 1, 1, 1, 4, 3, 3, 2, 3,
+ 1, 2, 3, 3, 3, 3, 3, 3, 3, 3,
+ 3, 3, 3, 4, 3, 3, 1, 2, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 2,
- 2, 1, 1, 1, 2, 1, 1, 1, 0, 1,
- 1, 2, 3, 3, 4, 4, 6, 7, 4, 1,
- 1, 1, 1, 2, 3, 3, 3, 3, 3, 3,
- 3, 3, 6, 1, 3,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 2, 2, 1, 1, 1, 2,
+ 1, 1, 1, 0, 1, 1, 2, 3, 3, 4,
+ 4, 6, 7, 4, 1, 1, 1, 1, 2, 3,
+ 3, 3, 3, 3, 3, 3, 3, 6, 1, 3,
}
var yyChk = [...]int16{
- -1000, -62, 107, 108, 109, 110, 2, 10, -14, -7,
+ -1000, -62, 109, 110, 111, 112, 2, 10, -14, -7,
-13, 64, 65, 81, 66, 67, 84, 85, 86, 68,
12, 49, 50, 53, 69, 18, 70, 88, 71, 72,
73, 74, 75, 92, 95, 96, 76, 77, 97, 98,
- 90, 89, 13, -63, -14, 10, -40, -34, -38, -41,
- -47, -48, -49, -50, -51, -53, -54, -55, -56, -57,
- -33, -58, -3, 12, -9, 97, 98, 19, 9, 15,
- 25, -8, -7, -46, -12, -59, 64, 65, 66, 67,
- 68, 69, 70, 71, 72, 73, 74, 75, 76, 77,
- 95, 96, 41, 59, 13, -57, -13, -15, 20, -16,
- 12, -10, 2, 25, -21, 2, 41, 61, 42, 43,
- 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
- 55, 56, 58, 59, 88, 90, 89, 60, 14, 41,
- 59, 55, 42, 54, 58, -35, -43, 2, 81, 92,
- 15, -43, -43, -43, 15, -43, 15, -40, -58, -40,
- -58, -46, 15, -1, 20, -2, 12, -10, 2, 20,
- 7, 2, 4, 2, 4, 24, -36, -37, -44, -39,
- -52, 80, -36, -36, -36, -36, -36, -36, -36, -36,
- -36, -36, -36, -36, -36, -36, -36, -36, -36, -61,
- 2, -48, -8, 97, 98, -12, -58, 70, 69, 15,
- -32, -9, 2, -29, -31, 95, 96, 19, 9, 41,
- 59, -60, 2, -58, -48, -8, 97, 98, -58, -58,
- -58, -58, -58, -58, -43, -35, -18, 15, 2, -18,
- -42, 22, -40, 22, 22, 22, 22, -58, 20, 7,
- 2, -5, 2, 4, 56, 44, 57, -5, 20, -16,
- 25, 2, 25, 2, -20, 5, -30, -22, 12, -29,
- -31, 16, -40, 84, 85, 86, 87, 91, 82, 83,
+ 90, 89, 99, 100, 13, -63, -14, 10, -40, -34,
+ -38, -41, -47, -48, -49, -50, -51, -53, -54, -55,
+ -56, -57, -33, -58, -3, 12, -9, 97, 98, -12,
+ 19, 9, 15, 25, -8, -7, -46, -59, 64, 65,
+ 66, 67, 68, 69, 70, 71, 72, 73, 74, 75,
+ 76, 77, 95, 96, 99, 100, 41, 59, 13, -57,
+ -13, -15, 20, -16, 12, -10, 2, 25, -21, 2,
+ 41, 61, 42, 43, 45, 46, 47, 48, 49, 50,
+ 51, 52, 53, 54, 55, 56, 58, 59, 88, 90,
+ 89, 60, 14, 41, 59, 55, 42, 54, 58, -35,
+ -43, 2, 81, 92, 15, -43, -43, -43, 15, -43,
+ 15, -43, 15, -40, -58, -40, -58, -46, -1, 20,
+ -2, 12, -10, 2, 20, 7, 2, 4, 2, 4,
+ 24, -36, -37, -44, -39, -52, 80, -36, -36, -36,
+ -36, -36, -36, -36, -36, -36, -36, -36, -36, -36,
+ -36, -36, -36, -36, -61, 2, -48, -8, 97, 98,
+ -12, -58, 99, 100, 15, -32, -9, 2, -29, -31,
+ 95, 96, 19, 9, 41, 59, -60, 2, -58, -48,
+ -8, 97, 98, -12, -58, -58, -58, -58, -58, -58,
+ -43, -35, -18, 15, 2, -18, -42, 22, -40, 22,
+ 22, -58, 22, 22, 20, 7, 2, -5, 2, 4,
+ 56, 44, 57, -5, 20, -16, 25, 2, 25, 2,
+ -20, 5, -30, -22, 12, -29, -31, 16, -40, 84,
+ 85, 86, 87, 91, 82, 83, -40, -40, -40, -40,
-40, -40, -40, -40, -40, -40, -40, -40, -40, -40,
- -40, -40, -40, -40, -40, -40, -40, -48, 97, 98,
- -12, 15, -58, 15, 15, 15, -58, 15, -29, -29,
- 21, 6, 2, 15, 15, -17, 22, -4, -6, 25,
- 2, 64, 80, 65, 81, 66, 67, 68, 82, 83,
- 84, 85, 86, 12, 87, 49, 50, 53, 69, 18,
- 70, 88, 91, 71, 72, 73, 74, 75, 95, 96,
- 61, 76, 77, 97, 98, 90, 89, 22, 7, 7,
- 20, -2, 25, 2, 25, 2, 26, 26, -31, 26,
- 41, 59, -23, 24, 17, -24, 30, 28, 29, 35,
- 36, 37, 33, 31, 34, 32, 38, -45, 15, -45,
- -45, -18, -18, -19, -18, -19, 15, 15, 15, -58,
- 22, 22, -58, 22, -60, 21, 2, 22, 22, 22,
+ -40, -40, -40, -48, 97, 98, -12, 15, -58, 15,
+ 15, 15, -58, 15, -29, -29, 21, 6, 2, 15,
+ 15, 15, -17, 22, -4, -6, 25, 2, 64, 80,
+ 65, 81, 66, 67, 68, 82, 83, 84, 85, 86,
+ 12, 87, 49, 50, 53, 69, 18, 70, 88, 91,
+ 71, 72, 73, 74, 75, 95, 96, 61, 76, 77,
+ 97, 98, 90, 89, 99, 100, 22, 7, 7, 20,
+ -2, 25, 2, 25, 2, 26, 26, -31, 26, 41,
+ 59, -23, 24, 17, -24, 30, 28, 29, 35, 36,
+ 37, 33, 31, 34, 32, 38, -45, 15, -45, -45,
+ -18, -18, -19, -18, -19, 15, 15, 15, -58, 22,
+ 22, -58, 22, -60, 21, 2, 22, 22, -58, 22,
7, 2, -40, -58, -28, 19, -28, 26, -28, -22,
-22, 24, 17, 2, 17, 6, 6, 6, 6, 6,
6, 6, 6, 6, 6, 6, -48, -8, 86, 85,
22, 22, -58, 22, 7, 21, 2, 22, -4, 22,
-28, 26, 26, 17, -24, -27, 59, -28, -32, -32,
- -32, -29, -25, 14, -25, -27, -25, -27, -11, 101,
- 102, 103, 104, 22, -48, -45, -45, 7, -58, -28,
+ -32, -29, -25, 14, -25, -27, -25, -27, -11, 103,
+ 104, 105, 106, 22, -48, -45, -45, 7, -58, -28,
-28, -28, -26, -32, 22, -58, 22, 24, 21, 2,
22, 21, -32,
}
var yyDef = [...]int16{
- 0, -2, 154, 154, 0, 0, 7, 6, 1, 154,
- 119, 120, 121, 122, 123, 124, 125, 126, 127, 128,
- 129, 130, 131, 132, 133, 134, 135, 136, 137, 138,
- 139, 140, 141, 142, 143, 144, 145, 146, 147, 148,
- 149, 150, 0, 2, -2, 3, 4, 8, 9, 10,
- 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
- 21, 22, 0, 129, 0, 147, 148, 265, 266, 0,
- 276, 0, 103, 104, 0, 303, -2, -2, -2, -2,
+ 0, -2, 157, 157, 0, 0, 7, 6, 1, 157,
+ 120, 121, 122, 123, 124, 125, 126, 127, 128, 129,
+ 130, 131, 132, 133, 134, 135, 136, 137, 138, 139,
+ 140, 141, 142, 143, 144, 145, 146, 147, 148, 149,
+ 150, 151, 152, 153, 0, 2, -2, 3, 4, 8,
+ 9, 10, 11, 12, 13, 14, 15, 16, 17, 18,
+ 19, 20, 21, 22, 0, 130, 0, 148, 149, 0,
+ 270, 271, 0, 281, 0, 104, 105, 308, -2, -2,
-2, -2, -2, -2, -2, -2, -2, -2, -2, -2,
- -2, -2, 259, 260, 0, 5, 118, 0, 153, 156,
- 0, 160, 164, 277, 165, 169, 48, 48, 48, 48,
+ -2, -2, -2, -2, -2, -2, 264, 265, 0, 5,
+ 119, 0, 156, 159, 0, 163, 167, 282, 168, 172,
48, 48, 48, 48, 48, 48, 48, 48, 48, 48,
- 48, 48, 48, 48, 0, 87, 88, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 25, 26, 0, 0,
- 0, 74, 75, 76, 0, 77, 0, 0, 22, 101,
- -2, 102, 0, 0, 107, 109, 0, 113, 117, 151,
- 0, 157, 0, 163, 0, 168, 0, 47, 56, 52,
- 53, 49, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 85,
- 86, 280, 0, 0, 0, 0, 289, 290, 291, 0,
- 89, 0, 91, 271, 272, 92, 93, 267, 268, 0,
- 0, 0, 100, 84, 292, 0, 0, 0, 294, 295,
- 296, 297, 298, 299, 23, 24, 27, 0, 65, 28,
- 0, 79, 81, 79, 79, 83, 304, 0, 105, 0,
- 110, 0, 116, 261, 262, 263, 264, 0, 152, 155,
- 158, 161, 159, 162, 167, 170, 172, 175, 179, 180,
- 181, 0, 29, 0, 0, 0, 0, 0, -2, -2,
- 30, 31, 32, 33, 34, 35, 36, 37, 38, 39,
- 40, 41, 42, 43, 44, 45, 46, 281, 0, 0,
- 0, 0, 293, 0, 0, 0, 0, 0, 269, 270,
- 94, 0, 99, 0, 0, 0, 64, 67, 69, 70,
- 71, 223, 224, 225, 226, 227, 228, 229, 230, 231,
- 232, 233, 234, 235, 236, 237, 238, 239, 240, 241,
- 242, 243, 244, 245, 246, 247, 248, 249, 250, 251,
- 252, 253, 254, 255, 256, 257, 258, 78, 82, 0,
- 106, 108, 111, 115, 112, 114, 0, 0, 0, 0,
- 0, 0, 0, 0, 185, 187, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 57, 0, 58,
- 59, 50, 51, 54, 279, 55, 0, 0, 0, 0,
- 282, 283, 0, 90, 0, 96, 98, 300, 301, 62,
- 0, 68, 80, 0, 171, 273, 173, 0, 176, 0,
- 0, 0, 183, 188, 184, 0, 0, 0, 0, 0,
+ 48, 48, 48, 48, 48, 48, 48, 48, 0, 88,
+ 89, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 25, 26, 0, 0, 0, 74, 75, 76, 0, 77,
+ 0, 78, 0, 0, 22, 102, -2, 103, 0, 108,
+ 110, 0, 114, 118, 154, 0, 160, 0, 166, 0,
+ 171, 0, 47, 56, 52, 53, 49, 0, 0, 0,
0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 284, 285, 0, 288, 0, 95, 97, 63, 66, 302,
- 174, 0, 0, 182, 186, 189, 0, 275, 190, 191,
- 192, 193, 194, 0, 195, 196, 197, 198, 199, 205,
- 206, 207, 208, 72, 0, 60, 61, 0, 0, 177,
- 178, 274, 0, 203, 73, 0, 286, 0, 201, 204,
- 287, 200, 202,
+ 0, 0, 0, 0, 86, 87, 285, 0, 0, 0,
+ 0, 294, 295, 296, 0, 90, 0, 92, 276, 277,
+ 93, 94, 272, 273, 0, 0, 0, 101, 85, 297,
+ 0, 0, 0, 0, 299, 300, 301, 302, 303, 304,
+ 23, 24, 27, 0, 65, 28, 0, 80, 82, 80,
+ 80, 22, 84, 309, 106, 0, 111, 0, 117, 266,
+ 267, 268, 269, 0, 155, 158, 161, 164, 162, 165,
+ 170, 173, 175, 178, 182, 183, 184, 0, 29, 0,
+ 0, 0, 0, 0, -2, -2, 30, 31, 32, 33,
+ 34, 35, 36, 37, 38, 39, 40, 41, 42, 43,
+ 44, 45, 46, 286, 0, 0, 0, 0, 298, 0,
+ 0, 0, 0, 0, 274, 275, 95, 0, 100, 0,
+ 0, 0, 0, 64, 67, 69, 70, 71, 226, 227,
+ 228, 229, 230, 231, 232, 233, 234, 235, 236, 237,
+ 238, 239, 240, 241, 242, 243, 244, 245, 246, 247,
+ 248, 249, 250, 251, 252, 253, 254, 255, 256, 257,
+ 258, 259, 260, 261, 262, 263, 79, 83, 0, 107,
+ 109, 112, 116, 113, 115, 0, 0, 0, 0, 0,
+ 0, 0, 0, 188, 190, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 57, 0, 58, 59,
+ 50, 51, 54, 284, 55, 0, 0, 0, 0, 287,
+ 288, 0, 91, 0, 97, 99, 305, 306, 0, 62,
+ 0, 68, 81, 0, 174, 278, 176, 0, 179, 0,
+ 0, 0, 186, 191, 187, 0, 0, 0, 0, 0,
+ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+ 289, 290, 0, 293, 0, 96, 98, 63, 66, 307,
+ 177, 0, 0, 185, 189, 192, 0, 280, 193, 194,
+ 195, 196, 197, 0, 198, 199, 200, 201, 202, 208,
+ 209, 210, 211, 72, 0, 60, 61, 0, 0, 180,
+ 181, 279, 0, 206, 73, 0, 291, 0, 204, 207,
+ 292, 203, 205,
}
var yyTok1 = [...]int8{
@@ -849,6 +868,7 @@ var yyTok2 = [...]int8{
82, 83, 84, 85, 86, 87, 88, 89, 90, 91,
92, 93, 94, 95, 96, 97, 98, 99, 100, 101,
102, 103, 104, 105, 106, 107, 108, 109, 110, 111,
+ 112, 113,
}
var yyTok3 = [...]int8{
@@ -1576,37 +1596,56 @@ yydefault:
}
}
case 78:
+ yyDollar = yyS[yypt-2 : yypt+1]
+ {
+ fn, exist := getFunction(yyDollar[1].item.Val, yylex.(*parser).functions)
+ if !exist {
+ yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "unknown function with name %q", yyDollar[1].item.Val)
+ }
+ if fn != nil && fn.Experimental && !yylex.(*parser).options.EnableExperimentalFunctions {
+ yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "function %q is not enabled", yyDollar[1].item.Val)
+ }
+ yyVAL.node = &Call{
+ Func: fn,
+ Args: yyDollar[2].node.(Expressions),
+ PosRange: posrange.PositionRange{
+ Start: yyDollar[1].item.PositionRange().Start,
+ End: yylex.(*parser).lastClosing,
+ },
+ }
+ }
+ case 79:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = yyDollar[2].node
}
- case 79:
+ case 80:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.node = Expressions{}
}
- case 80:
+ case 81:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = append(yyDollar[1].node.(Expressions), yyDollar[3].node.(Expr))
}
- case 81:
+ case 82:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.node = Expressions{yyDollar[1].node.(Expr)}
}
- case 82:
+ case 83:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).addParseErrf(yyDollar[2].item.PositionRange(), "trailing commas not allowed in function call args")
yyVAL.node = yyDollar[1].node
}
- case 83:
+ case 84:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = &ParenExpr{Expr: yyDollar[2].node.(Expr), PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[3].item)}
}
- case 84:
+ case 85:
yyDollar = yyS[yypt-1 : yypt+1]
{
if numLit, ok := yyDollar[1].node.(*NumberLiteral); ok {
@@ -1620,7 +1659,7 @@ yydefault:
}
yyVAL.node = yyDollar[1].node
}
- case 85:
+ case 86:
yyDollar = yyS[yypt-3 : yypt+1]
{
if numLit, ok := yyDollar[3].node.(*NumberLiteral); ok {
@@ -1631,41 +1670,41 @@ yydefault:
yylex.(*parser).addOffsetExpr(yyDollar[1].node, yyDollar[3].node.(*DurationExpr))
yyVAL.node = yyDollar[1].node
}
- case 86:
+ case 87:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).unexpected("offset", "number, duration, step(), or range()")
yyVAL.node = yyDollar[1].node
}
- case 87:
+ case 88:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).setAnchored(yyDollar[1].node)
}
- case 88:
+ case 89:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).setSmoothed(yyDollar[1].node)
}
- case 89:
+ case 90:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).setTimestamp(yyDollar[1].node, yyDollar[3].float)
yyVAL.node = yyDollar[1].node
}
- case 90:
+ case 91:
yyDollar = yyS[yypt-5 : yypt+1]
{
yylex.(*parser).setAtModifierPreprocessor(yyDollar[1].node, yyDollar[3].item)
yyVAL.node = yyDollar[1].node
}
- case 91:
+ case 92:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).unexpected("@", "timestamp")
yyVAL.node = yyDollar[1].node
}
- case 94:
+ case 95:
yyDollar = yyS[yypt-4 : yypt+1]
{
var errMsg string
@@ -1695,7 +1734,7 @@ yydefault:
EndPos: yylex.(*parser).lastClosing,
}
}
- case 95:
+ case 96:
yyDollar = yyS[yypt-6 : yypt+1]
{
var rangeNl time.Duration
@@ -1717,7 +1756,7 @@ yydefault:
EndPos: yyDollar[6].item.Pos + 1,
}
}
- case 96:
+ case 97:
yyDollar = yyS[yypt-5 : yypt+1]
{
var rangeNl time.Duration
@@ -1732,31 +1771,31 @@ yydefault:
EndPos: yyDollar[5].item.Pos + 1,
}
}
- case 97:
+ case 98:
yyDollar = yyS[yypt-6 : yypt+1]
{
yylex.(*parser).unexpected("subquery selector", "\"]\"")
yyVAL.node = yyDollar[1].node
}
- case 98:
+ case 99:
yyDollar = yyS[yypt-5 : yypt+1]
{
yylex.(*parser).unexpected("subquery selector", "number, duration, step(), range(), or \"]\"")
yyVAL.node = yyDollar[1].node
}
- case 99:
+ case 100:
yyDollar = yyS[yypt-4 : yypt+1]
{
yylex.(*parser).unexpected("subquery or range", "\":\" or \"]\"")
yyVAL.node = yyDollar[1].node
}
- case 100:
+ case 101:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).unexpected("subquery or range selector", "number, duration, step(), or range()")
yyVAL.node = yyDollar[1].node
}
- case 101:
+ case 102:
yyDollar = yyS[yypt-2 : yypt+1]
{
if nl, ok := yyDollar[2].node.(*NumberLiteral); ok {
@@ -1769,7 +1808,7 @@ yydefault:
yyVAL.node = &UnaryExpr{Op: yyDollar[1].item.Typ, Expr: yyDollar[2].node.(Expr), StartPos: yyDollar[1].item.Pos}
}
}
- case 102:
+ case 103:
yyDollar = yyS[yypt-2 : yypt+1]
{
vs := yyDollar[2].node.(*VectorSelector)
@@ -1778,7 +1817,7 @@ yydefault:
yylex.(*parser).assembleVectorSelector(vs)
yyVAL.node = vs
}
- case 103:
+ case 104:
yyDollar = yyS[yypt-1 : yypt+1]
{
vs := &VectorSelector{
@@ -1789,14 +1828,14 @@ yydefault:
yylex.(*parser).assembleVectorSelector(vs)
yyVAL.node = vs
}
- case 104:
+ case 105:
yyDollar = yyS[yypt-1 : yypt+1]
{
vs := yyDollar[1].node.(*VectorSelector)
yylex.(*parser).assembleVectorSelector(vs)
yyVAL.node = vs
}
- case 105:
+ case 106:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.node = &VectorSelector{
@@ -1804,7 +1843,7 @@ yydefault:
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[3].item),
}
}
- case 106:
+ case 107:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.node = &VectorSelector{
@@ -1812,7 +1851,7 @@ yydefault:
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[4].item),
}
}
- case 107:
+ case 108:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.node = &VectorSelector{
@@ -1820,7 +1859,7 @@ yydefault:
PosRange: mergeRanges(&yyDollar[1].item, &yyDollar[2].item),
}
}
- case 108:
+ case 109:
yyDollar = yyS[yypt-3 : yypt+1]
{
if yyDollar[1].matchers != nil {
@@ -1829,38 +1868,32 @@ yydefault:
yyVAL.matchers = yyDollar[1].matchers
}
}
- case 109:
+ case 110:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.matchers = []*labels.Matcher{yyDollar[1].matcher}
}
- case 110:
+ case 111:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).unexpected("label matching", "\",\" or \"}\"")
yyVAL.matchers = yyDollar[1].matchers
}
- case 111:
- yyDollar = yyS[yypt-3 : yypt+1]
- {
- yyVAL.matcher = yylex.(*parser).newLabelMatcher(yyDollar[1].item, yyDollar[2].item, yyDollar[3].item)
- }
case 112:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.matcher = yylex.(*parser).newLabelMatcher(yyDollar[1].item, yyDollar[2].item, yyDollar[3].item)
}
case 113:
+ yyDollar = yyS[yypt-3 : yypt+1]
+ {
+ yyVAL.matcher = yylex.(*parser).newLabelMatcher(yyDollar[1].item, yyDollar[2].item, yyDollar[3].item)
+ }
+ case 114:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.matcher = yylex.(*parser).newMetricNameMatcher(yyDollar[1].item)
}
- case 114:
- yyDollar = yyS[yypt-3 : yypt+1]
- {
- yylex.(*parser).unexpected("label matching", "string")
- yyVAL.matcher = nil
- }
case 115:
yyDollar = yyS[yypt-3 : yypt+1]
{
@@ -1868,105 +1901,111 @@ yydefault:
yyVAL.matcher = nil
}
case 116:
+ yyDollar = yyS[yypt-3 : yypt+1]
+ {
+ yylex.(*parser).unexpected("label matching", "string")
+ yyVAL.matcher = nil
+ }
+ case 117:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).unexpected("label matching", "label matching operator")
yyVAL.matcher = nil
}
- case 117:
+ case 118:
yyDollar = yyS[yypt-1 : yypt+1]
{
yylex.(*parser).unexpected("label matching", "identifier or \"}\"")
yyVAL.matcher = nil
}
- case 118:
+ case 119:
yyDollar = yyS[yypt-2 : yypt+1]
{
b := labels.NewBuilder(yyDollar[2].labels)
b.Set(labels.MetricName, yyDollar[1].item.Val)
yyVAL.labels = b.Labels()
}
- case 119:
+ case 120:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.labels = yyDollar[1].labels
}
- case 151:
+ case 154:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.labels = labels.New(yyDollar[2].lblList...)
}
- case 152:
+ case 155:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.labels = labels.New(yyDollar[2].lblList...)
}
- case 153:
+ case 156:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.labels = labels.New()
}
- case 154:
+ case 157:
yyDollar = yyS[yypt-0 : yypt+1]
{
yyVAL.labels = labels.New()
}
- case 155:
+ case 158:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.lblList = append(yyDollar[1].lblList, yyDollar[3].label)
}
- case 156:
+ case 159:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.lblList = []labels.Label{yyDollar[1].label}
}
- case 157:
+ case 160:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).unexpected("label set", "\",\" or \"}\"")
yyVAL.lblList = yyDollar[1].lblList
}
- case 158:
- yyDollar = yyS[yypt-3 : yypt+1]
- {
- yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)}
- }
- case 159:
- yyDollar = yyS[yypt-3 : yypt+1]
- {
- yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)}
- }
- case 160:
- yyDollar = yyS[yypt-1 : yypt+1]
- {
- yyVAL.label = labels.Label{Name: labels.MetricName, Value: yyDollar[1].item.Val}
- }
case 161:
yyDollar = yyS[yypt-3 : yypt+1]
{
- yylex.(*parser).unexpected("label set", "string")
- yyVAL.label = labels.Label{}
+ yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)}
}
case 162:
+ yyDollar = yyS[yypt-3 : yypt+1]
+ {
+ yyVAL.label = labels.Label{Name: yyDollar[1].item.Val, Value: yylex.(*parser).unquoteString(yyDollar[3].item.Val)}
+ }
+ case 163:
+ yyDollar = yyS[yypt-1 : yypt+1]
+ {
+ yyVAL.label = labels.Label{Name: labels.MetricName, Value: yyDollar[1].item.Val}
+ }
+ case 164:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).unexpected("label set", "string")
yyVAL.label = labels.Label{}
}
- case 163:
+ case 165:
+ yyDollar = yyS[yypt-3 : yypt+1]
+ {
+ yylex.(*parser).unexpected("label set", "string")
+ yyVAL.label = labels.Label{}
+ }
+ case 166:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).unexpected("label set", "\"=\"")
yyVAL.label = labels.Label{}
}
- case 164:
+ case 167:
yyDollar = yyS[yypt-1 : yypt+1]
{
yylex.(*parser).unexpected("label set", "identifier or \"}\"")
yyVAL.label = labels.Label{}
}
- case 165:
+ case 168:
yyDollar = yyS[yypt-2 : yypt+1]
{
yylex.(*parser).generatedParserResult = &seriesDescription{
@@ -1974,33 +2013,33 @@ yydefault:
values: yyDollar[2].series,
}
}
- case 166:
+ case 169:
yyDollar = yyS[yypt-0 : yypt+1]
{
yyVAL.series = []SequenceValue{}
}
- case 167:
+ case 170:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.series = append(yyDollar[1].series, yyDollar[3].series...)
}
- case 168:
+ case 171:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.series = yyDollar[1].series
}
- case 169:
+ case 172:
yyDollar = yyS[yypt-1 : yypt+1]
{
yylex.(*parser).unexpected("series values", "")
yyVAL.series = nil
}
- case 170:
+ case 173:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.series = []SequenceValue{{Omitted: true}}
}
- case 171:
+ case 174:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.series = []SequenceValue{}
@@ -2008,12 +2047,12 @@ yydefault:
yyVAL.series = append(yyVAL.series, SequenceValue{Omitted: true})
}
}
- case 172:
+ case 175:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.series = []SequenceValue{{Value: yyDollar[1].float}}
}
- case 173:
+ case 176:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.series = []SequenceValue{}
@@ -2022,7 +2061,7 @@ yydefault:
yyVAL.series = append(yyVAL.series, SequenceValue{Value: yyDollar[1].float})
}
}
- case 174:
+ case 177:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.series = []SequenceValue{}
@@ -2032,12 +2071,12 @@ yydefault:
yyDollar[1].float += yyDollar[2].float
}
}
- case 175:
+ case 178:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.series = []SequenceValue{yylex.(*parser).newHistogramSequenceValue(yyDollar[1].histogram)}
}
- case 176:
+ case 179:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.series = []SequenceValue{}
@@ -2048,7 +2087,7 @@ yydefault:
//$1 += $2
}
}
- case 177:
+ case 180:
yyDollar = yyS[yypt-5 : yypt+1]
{
val, err := yylex.(*parser).histogramsIncreaseSeries(yyDollar[1].histogram, yyDollar[3].histogram, yyDollar[5].uint)
@@ -2057,7 +2096,7 @@ yydefault:
}
yyVAL.series = val
}
- case 178:
+ case 181:
yyDollar = yyS[yypt-5 : yypt+1]
{
val, err := yylex.(*parser).histogramsDecreaseSeries(yyDollar[1].histogram, yyDollar[3].histogram, yyDollar[5].uint)
@@ -2066,7 +2105,7 @@ yydefault:
}
yyVAL.series = val
}
- case 179:
+ case 182:
yyDollar = yyS[yypt-1 : yypt+1]
{
if yyDollar[1].item.Val != "stale" {
@@ -2074,130 +2113,130 @@ yydefault:
}
yyVAL.float = math.Float64frombits(value.StaleNaN)
}
- case 182:
+ case 185:
yyDollar = yyS[yypt-4 : yypt+1]
{
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors)
}
- case 183:
+ case 186:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&yyDollar[2].descriptors)
}
- case 184:
- yyDollar = yyS[yypt-3 : yypt+1]
- {
- m := yylex.(*parser).newMap()
- yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m)
- }
- case 185:
- yyDollar = yyS[yypt-2 : yypt+1]
- {
- m := yylex.(*parser).newMap()
- yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m)
- }
- case 186:
- yyDollar = yyS[yypt-3 : yypt+1]
- {
- yyVAL.descriptors = *(yylex.(*parser).mergeMaps(&yyDollar[1].descriptors, &yyDollar[3].descriptors))
- }
case 187:
- yyDollar = yyS[yypt-1 : yypt+1]
+ yyDollar = yyS[yypt-3 : yypt+1]
{
- yyVAL.descriptors = yyDollar[1].descriptors
+ m := yylex.(*parser).newMap()
+ yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m)
}
case 188:
yyDollar = yyS[yypt-2 : yypt+1]
{
- yylex.(*parser).unexpected("histogram description", "histogram description key, e.g. buckets:[5 10 7]")
+ m := yylex.(*parser).newMap()
+ yyVAL.histogram = yylex.(*parser).buildHistogramFromMap(&m)
}
case 189:
yyDollar = yyS[yypt-3 : yypt+1]
{
- yyVAL.descriptors = yylex.(*parser).newMap()
- yyVAL.descriptors["schema"] = yyDollar[3].int
+ yyVAL.descriptors = *(yylex.(*parser).mergeMaps(&yyDollar[1].descriptors, &yyDollar[3].descriptors))
}
case 190:
- yyDollar = yyS[yypt-3 : yypt+1]
+ yyDollar = yyS[yypt-1 : yypt+1]
{
- yyVAL.descriptors = yylex.(*parser).newMap()
- yyVAL.descriptors["sum"] = yyDollar[3].float
+ yyVAL.descriptors = yyDollar[1].descriptors
}
case 191:
- yyDollar = yyS[yypt-3 : yypt+1]
+ yyDollar = yyS[yypt-2 : yypt+1]
{
- yyVAL.descriptors = yylex.(*parser).newMap()
- yyVAL.descriptors["count"] = yyDollar[3].float
+ yylex.(*parser).unexpected("histogram description", "histogram description key, e.g. buckets:[5 10 7]")
}
case 192:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
- yyVAL.descriptors["z_bucket"] = yyDollar[3].float
+ yyVAL.descriptors["schema"] = yyDollar[3].int
}
case 193:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
- yyVAL.descriptors["z_bucket_w"] = yyDollar[3].float
+ yyVAL.descriptors["sum"] = yyDollar[3].float
}
case 194:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
- yyVAL.descriptors["custom_values"] = yyDollar[3].bucket_set
+ yyVAL.descriptors["count"] = yyDollar[3].float
}
case 195:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
- yyVAL.descriptors["buckets"] = yyDollar[3].bucket_set
+ yyVAL.descriptors["z_bucket"] = yyDollar[3].float
}
case 196:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
- yyVAL.descriptors["offset"] = yyDollar[3].int
+ yyVAL.descriptors["z_bucket_w"] = yyDollar[3].float
}
case 197:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
- yyVAL.descriptors["n_buckets"] = yyDollar[3].bucket_set
+ yyVAL.descriptors["custom_values"] = yyDollar[3].bucket_set
}
case 198:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
- yyVAL.descriptors["n_offset"] = yyDollar[3].int
+ yyVAL.descriptors["buckets"] = yyDollar[3].bucket_set
}
case 199:
yyDollar = yyS[yypt-3 : yypt+1]
{
yyVAL.descriptors = yylex.(*parser).newMap()
- yyVAL.descriptors["counter_reset_hint"] = yyDollar[3].item
+ yyVAL.descriptors["offset"] = yyDollar[3].int
}
case 200:
- yyDollar = yyS[yypt-4 : yypt+1]
+ yyDollar = yyS[yypt-3 : yypt+1]
{
- yyVAL.bucket_set = yyDollar[2].bucket_set
+ yyVAL.descriptors = yylex.(*parser).newMap()
+ yyVAL.descriptors["n_buckets"] = yyDollar[3].bucket_set
}
case 201:
yyDollar = yyS[yypt-3 : yypt+1]
{
- yyVAL.bucket_set = yyDollar[2].bucket_set
+ yyVAL.descriptors = yylex.(*parser).newMap()
+ yyVAL.descriptors["n_offset"] = yyDollar[3].int
}
case 202:
yyDollar = yyS[yypt-3 : yypt+1]
{
- yyVAL.bucket_set = append(yyDollar[1].bucket_set, yyDollar[3].float)
+ yyVAL.descriptors = yylex.(*parser).newMap()
+ yyVAL.descriptors["counter_reset_hint"] = yyDollar[3].item
}
case 203:
+ yyDollar = yyS[yypt-4 : yypt+1]
+ {
+ yyVAL.bucket_set = yyDollar[2].bucket_set
+ }
+ case 204:
+ yyDollar = yyS[yypt-3 : yypt+1]
+ {
+ yyVAL.bucket_set = yyDollar[2].bucket_set
+ }
+ case 205:
+ yyDollar = yyS[yypt-3 : yypt+1]
+ {
+ yyVAL.bucket_set = append(yyDollar[1].bucket_set, yyDollar[3].float)
+ }
+ case 206:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.bucket_set = []float64{yyDollar[1].float}
}
- case 265:
+ case 270:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.node = &NumberLiteral{
@@ -2205,7 +2244,7 @@ yydefault:
PosRange: yyDollar[1].item.PositionRange(),
}
}
- case 266:
+ case 271:
yyDollar = yyS[yypt-1 : yypt+1]
{
var err error
@@ -2220,12 +2259,12 @@ yydefault:
Duration: true,
}
}
- case 267:
+ case 272:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.float = yylex.(*parser).number(yyDollar[1].item.Val)
}
- case 268:
+ case 273:
yyDollar = yyS[yypt-1 : yypt+1]
{
var err error
@@ -2236,17 +2275,17 @@ yydefault:
}
yyVAL.float = dur.Seconds()
}
- case 269:
+ case 274:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.float = yyDollar[2].float
}
- case 270:
+ case 275:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.float = -yyDollar[2].float
}
- case 273:
+ case 278:
yyDollar = yyS[yypt-1 : yypt+1]
{
var err error
@@ -2255,17 +2294,17 @@ yydefault:
yylex.(*parser).addParseErrf(yyDollar[1].item.PositionRange(), "invalid repetition in series values: %s", err)
}
}
- case 274:
+ case 279:
yyDollar = yyS[yypt-2 : yypt+1]
{
yyVAL.int = -int64(yyDollar[2].uint)
}
- case 275:
+ case 280:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.int = int64(yyDollar[1].uint)
}
- case 276:
+ case 281:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.node = &StringLiteral{
@@ -2273,7 +2312,7 @@ yydefault:
PosRange: yyDollar[1].item.PositionRange(),
}
}
- case 277:
+ case 282:
yyDollar = yyS[yypt-1 : yypt+1]
{
yyVAL.item = Item{
@@ -2282,12 +2321,12 @@ yydefault:
Val: yylex.(*parser).unquoteString(yyDollar[1].item.Val),
}
}
- case 278:
+ case 283:
yyDollar = yyS[yypt-0 : yypt+1]
{
yyVAL.strings = nil
}
- case 280:
+ case 285:
yyDollar = yyS[yypt-1 : yypt+1]
{
nl := yyDollar[1].node.(*NumberLiteral)
@@ -2298,7 +2337,7 @@ yydefault:
}
yyVAL.node = nl
}
- case 281:
+ case 286:
yyDollar = yyS[yypt-2 : yypt+1]
{
nl := yyDollar[2].node.(*NumberLiteral)
@@ -2313,7 +2352,7 @@ yydefault:
nl.PosRange.Start = yyDollar[1].item.Pos
yyVAL.node = nl
}
- case 282:
+ case 287:
yyDollar = yyS[yypt-3 : yypt+1]
{
de := &DurationExpr{
@@ -2324,7 +2363,7 @@ yydefault:
yylex.(*parser).experimentalDurationExpr(de)
yyVAL.node = de
}
- case 283:
+ case 288:
yyDollar = yyS[yypt-3 : yypt+1]
{
de := &DurationExpr{
@@ -2335,7 +2374,7 @@ yydefault:
yylex.(*parser).experimentalDurationExpr(de)
yyVAL.node = de
}
- case 284:
+ case 289:
yyDollar = yyS[yypt-4 : yypt+1]
{
de := &DurationExpr{
@@ -2350,7 +2389,7 @@ yydefault:
yylex.(*parser).experimentalDurationExpr(de)
yyVAL.node = de
}
- case 285:
+ case 290:
yyDollar = yyS[yypt-4 : yypt+1]
{
de := &DurationExpr{
@@ -2365,7 +2404,7 @@ yydefault:
yylex.(*parser).experimentalDurationExpr(de)
yyVAL.node = de
}
- case 286:
+ case 291:
yyDollar = yyS[yypt-6 : yypt+1]
{
de := &DurationExpr{
@@ -2378,7 +2417,7 @@ yydefault:
yylex.(*parser).experimentalDurationExpr(de)
yyVAL.node = de
}
- case 287:
+ case 292:
yyDollar = yyS[yypt-7 : yypt+1]
{
de := &DurationExpr{
@@ -2396,7 +2435,7 @@ yydefault:
yylex.(*parser).experimentalDurationExpr(de)
yyVAL.node = de
}
- case 288:
+ case 293:
yyDollar = yyS[yypt-4 : yypt+1]
{
de := yyDollar[3].node.(*DurationExpr)
@@ -2411,7 +2450,7 @@ yydefault:
}
yyVAL.node = yyDollar[3].node
}
- case 292:
+ case 297:
yyDollar = yyS[yypt-1 : yypt+1]
{
nl := yyDollar[1].node.(*NumberLiteral)
@@ -2422,7 +2461,7 @@ yydefault:
}
yyVAL.node = nl
}
- case 293:
+ case 298:
yyDollar = yyS[yypt-2 : yypt+1]
{
switch expr := yyDollar[2].node.(type) {
@@ -2455,25 +2494,25 @@ yydefault:
break
}
}
- case 294:
+ case 299:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr))
yyVAL.node = &DurationExpr{Op: ADD, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)}
}
- case 295:
+ case 300:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr))
yyVAL.node = &DurationExpr{Op: SUB, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)}
}
- case 296:
+ case 301:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr))
yyVAL.node = &DurationExpr{Op: MUL, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)}
}
- case 297:
+ case 302:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr))
@@ -2484,7 +2523,7 @@ yydefault:
}
yyVAL.node = &DurationExpr{Op: DIV, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)}
}
- case 298:
+ case 303:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr))
@@ -2495,13 +2534,13 @@ yydefault:
}
yyVAL.node = &DurationExpr{Op: MOD, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)}
}
- case 299:
+ case 304:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).experimentalDurationExpr(yyDollar[1].node.(Expr))
yyVAL.node = &DurationExpr{Op: POW, LHS: yyDollar[1].node.(Expr), RHS: yyDollar[3].node.(Expr)}
}
- case 300:
+ case 305:
yyDollar = yyS[yypt-3 : yypt+1]
{
de := &DurationExpr{
@@ -2512,7 +2551,7 @@ yydefault:
yylex.(*parser).experimentalDurationExpr(de)
yyVAL.node = de
}
- case 301:
+ case 306:
yyDollar = yyS[yypt-3 : yypt+1]
{
de := &DurationExpr{
@@ -2523,7 +2562,7 @@ yydefault:
yylex.(*parser).experimentalDurationExpr(de)
yyVAL.node = de
}
- case 302:
+ case 307:
yyDollar = yyS[yypt-6 : yypt+1]
{
de := &DurationExpr{
@@ -2536,7 +2575,7 @@ yydefault:
yylex.(*parser).experimentalDurationExpr(de)
yyVAL.node = de
}
- case 304:
+ case 309:
yyDollar = yyS[yypt-3 : yypt+1]
{
yylex.(*parser).experimentalDurationExpr(yyDollar[2].node.(Expr))
diff --git a/promql/parser/lex.go b/promql/parser/lex.go
index 99620cacac..ca2cbffd03 100644
--- a/promql/parser/lex.go
+++ b/promql/parser/lex.go
@@ -143,10 +143,12 @@ var key = map[string]ItemType{
"bool": BOOL,
// Preprocessors.
- "start": START,
- "end": END,
- "step": STEP,
- "range": RANGE,
+ "start": START,
+ "end": END,
+ "step": STEP,
+ "range": RANGE,
+ "max_of": MAX_OF,
+ "min_of": MIN_OF,
}
var histogramDesc = map[string]ItemType{
@@ -937,10 +939,10 @@ func lexNumber(l *Lexer) stateFn {
// durationKeywordTokens maps lowercase duration keyword names to their token types.
var durationKeywordTokens = map[string]ItemType{
- "step": STEP,
- "range": RANGE,
- "min": MIN,
- "max": MAX,
+ "step": STEP,
+ "range": RANGE,
+ "max_of": MAX_OF,
+ "min_of": MIN_OF,
}
// durationKeywordStartChars is the set of lowercase runes that can start a duration keyword,
diff --git a/promql/parser/parse_test.go b/promql/parser/parse_test.go
index 6a6c50ee23..fd4f0a16c5 100644
--- a/promql/parser/parse_test.go
+++ b/promql/parser/parse_test.go
@@ -4610,7 +4610,7 @@ var testExpr = []struct {
},
},
{
- input: `foo[max(step(),5s)]`,
+ input: `foo[max_of(step(),5s)]`,
expected: &MatrixSelector{
VectorSelector: &VectorSelector{
Name: "foo",
@@ -4620,83 +4620,83 @@ var testExpr = []struct {
PosRange: posrange.PositionRange{Start: 0, End: 3},
},
RangeExpr: &DurationExpr{
- Op: MAX,
+ Op: MAX_OF,
LHS: &DurationExpr{
Op: STEP,
- StartPos: 8,
- EndPos: 14,
+ StartPos: 11,
+ EndPos: 17,
},
RHS: &NumberLiteral{
Val: 5,
Duration: true,
- PosRange: posrange.PositionRange{Start: 15, End: 17},
+ PosRange: posrange.PositionRange{Start: 18, End: 20},
},
StartPos: 4,
- EndPos: 18,
+ EndPos: 21,
},
- EndPos: 19,
+ EndPos: 22,
},
},
{
- input: `foo offset max(step(),5s)`,
+ input: `foo offset max_of(step(),5s)`,
expected: &VectorSelector{
Name: "foo",
LabelMatchers: []*labels.Matcher{
MustLabelMatcher(labels.MatchEqual, model.MetricNameLabel, "foo"),
},
- PosRange: posrange.PositionRange{Start: 0, End: 25},
+ PosRange: posrange.PositionRange{Start: 0, End: 28},
OriginalOffsetExpr: &DurationExpr{
- Op: MAX,
+ Op: MAX_OF,
LHS: &DurationExpr{
Op: STEP,
- StartPos: 15,
- EndPos: 21,
+ StartPos: 18,
+ EndPos: 24,
},
RHS: &NumberLiteral{
Val: 5,
Duration: true,
- PosRange: posrange.PositionRange{Start: 22, End: 24},
+ PosRange: posrange.PositionRange{Start: 25, End: 27},
},
StartPos: 11,
- EndPos: 25,
+ EndPos: 28,
},
},
},
{
- input: `foo offset -min(5s,step()+8s)`,
+ input: `foo offset -min_of(5s,step()+8s)`,
expected: &VectorSelector{
Name: "foo",
LabelMatchers: []*labels.Matcher{
MustLabelMatcher(labels.MatchEqual, model.MetricNameLabel, "foo"),
},
- PosRange: posrange.PositionRange{Start: 0, End: 29},
+ PosRange: posrange.PositionRange{Start: 0, End: 32},
OriginalOffsetExpr: &DurationExpr{
Op: SUB,
RHS: &DurationExpr{
- Op: MIN,
+ Op: MIN_OF,
LHS: &NumberLiteral{
Val: 5,
Duration: true,
- PosRange: posrange.PositionRange{Start: 16, End: 18},
+ PosRange: posrange.PositionRange{Start: 19, End: 21},
},
RHS: &DurationExpr{
Op: ADD,
LHS: &DurationExpr{
Op: STEP,
- StartPos: 19,
- EndPos: 25,
+ StartPos: 22,
+ EndPos: 28,
},
RHS: &NumberLiteral{
Val: 8,
Duration: true,
- PosRange: posrange.PositionRange{Start: 26, End: 28},
+ PosRange: posrange.PositionRange{Start: 29, End: 31},
},
},
StartPos: 12,
- EndPos: 28,
+ EndPos: 31,
},
StartPos: 11,
- EndPos: 28,
+ EndPos: 31,
},
},
},
@@ -4793,7 +4793,7 @@ var testExpr = []struct {
},
},
{
- input: `foo[max(range(),5s)]`,
+ input: `foo[max_of(range(),5s)]`,
expected: &MatrixSelector{
VectorSelector: &VectorSelector{
Name: "foo",
@@ -4803,21 +4803,21 @@ var testExpr = []struct {
PosRange: posrange.PositionRange{Start: 0, End: 3},
},
RangeExpr: &DurationExpr{
- Op: MAX,
+ Op: MAX_OF,
LHS: &DurationExpr{
Op: RANGE,
- StartPos: 8,
- EndPos: 15,
+ StartPos: 11,
+ EndPos: 18,
},
RHS: &NumberLiteral{
Val: 5,
Duration: true,
- PosRange: posrange.PositionRange{Start: 16, End: 18},
+ PosRange: posrange.PositionRange{Start: 19, End: 21},
},
StartPos: 4,
- EndPos: 19,
+ EndPos: 22,
},
- EndPos: 20,
+ EndPos: 23,
},
},
{
diff --git a/promql/parser/printer.go b/promql/parser/printer.go
index cc5c931975..e81e4ca7b2 100644
--- a/promql/parser/printer.go
+++ b/promql/parser/printer.go
@@ -205,14 +205,14 @@ func (node *DurationExpr) writeTo(b *bytes.Buffer) {
b.WriteString("step()")
case node.Op == RANGE:
b.WriteString("range()")
- case node.Op == MIN:
- b.WriteString("min(")
+ case node.Op == MIN_OF:
+ b.WriteString("min_of(")
b.WriteString(node.LHS.String())
b.WriteString(", ")
b.WriteString(node.RHS.String())
b.WriteByte(')')
- case node.Op == MAX:
- b.WriteString("max(")
+ case node.Op == MAX_OF:
+ b.WriteString("max_of(")
b.WriteString(node.LHS.String())
b.WriteString(", ")
b.WriteString(node.RHS.String())
diff --git a/promql/parser/printer_test.go b/promql/parser/printer_test.go
index eae91d4f88..786109ab9d 100644
--- a/promql/parser/printer_test.go
+++ b/promql/parser/printer_test.go
@@ -270,22 +270,22 @@ func TestExprString(t *testing.T) {
out: "foo offset (5 * 2)",
},
{
- in: "foo offset +min(10s, 20s)",
- out: "foo offset min(10s, 20s)",
+ in: "foo offset +min_of(10s, 20s)",
+ out: "foo offset min_of(10s, 20s)",
},
{
- in: "foo offset -min(10s, 20s)",
+ in: "foo offset -min_of(10s, 20s)",
},
{
- in: "foo offset -min(10s, +max(step() ^ 2, 2))",
- out: "foo offset -min(10s, max(step() ^ 2, 2))",
+ in: "foo offset -min_of(10s, +max_of(step() ^ 2, 2))",
+ out: "foo offset -min_of(10s, max_of(step() ^ 2, 2))",
},
{
- in: "foo[200-min(-step()^+step(),1)]",
- out: "foo[200 - min(-step() ^ step(), 1)]",
+ in: "foo[200-min_of(-step()^+step(),1)]",
+ out: "foo[200 - min_of(-step() ^ step(), 1)]",
},
{
- in: "foo[200 - min(step() + 10s, -max(step() ^ 2, 3))]",
+ in: "foo[200 - min_of(step() + 10s, -max_of(step() ^ 2, 3))]",
},
{
in: "foo[range()]",
@@ -300,7 +300,7 @@ func TestExprString(t *testing.T) {
in: "foo offset -range()",
},
{
- in: "foo[max(range(), 5s)]",
+ in: "foo[max_of(range(), 5s)]",
},
{
in: `predict_linear(foo[1h], 3000)`,
diff --git a/promql/promqltest/testdata/duration_expression.test b/promql/promqltest/testdata/duration_expression.test
index e58b34131b..d135d62050 100644
--- a/promql/promqltest/testdata/duration_expression.test
+++ b/promql/promqltest/testdata/duration_expression.test
@@ -167,13 +167,13 @@ eval range from 50s to 60s step 10s count_over_time(metric1_total[1+(STep()-5)*2
eval range from 50s to 60s step 5s count_over_time(metric1_total[step()+1])
{} 6 6 6
-eval range from 50s to 60s step 5s count_over_time(metric1_total[min(step()+1,1h)])
+eval range from 50s to 60s step 5s count_over_time(metric1_total[min_of(step()+1,1h)])
{} 6 6 6
-eval range from 50s to 60s step 5s count_over_time(metric1_total[max(min(step()+1,1h),1ms)])
+eval range from 50s to 60s step 5s count_over_time(metric1_total[max_of(min_of(step()+1,1h),1ms)])
{} 6 6 6
-eval range from 50s to 60s step 5s count_over_time(metric1_total[((max(min((step()+1),((1h))),1ms)))])
+eval range from 50s to 60s step 5s count_over_time(metric1_total[((max_of(min_of((step()+1),((1h))),1ms)))])
{} 6 6 6
eval range from 50s to 60s step 5s metric1_total offset STEP()
@@ -200,31 +200,31 @@ eval range from 50s to 60s step 5s metric1_total offset (STEP()/10)
eval range from 50s to 60s step 5s metric1_total offset (step())
metric1_total{} 45 50 55
-eval range from 50s to 60s step 5s metric1_total offset min(step(), 1s)
+eval range from 50s to 60s step 5s metric1_total offset min_of(step(), 1s)
metric1_total{} 49 54 59
-eval range from 50s to 60s step 5s metric1_total offset min(step(), 1s)+8000
+eval range from 50s to 60s step 5s metric1_total offset min_of(step(), 1s)+8000
{} 8049 8054 8059
-eval range from 50s to 60s step 5s metric1_total offset -min(step(), 1s)+8000
+eval range from 50s to 60s step 5s metric1_total offset -min_of(step(), 1s)+8000
{} 8051 8056 8061
-eval range from 50s to 60s step 5s metric1_total offset -(min(step(), 1s))+8000
+eval range from 50s to 60s step 5s metric1_total offset -(min_of(step(), 1s))+8000
{} 8051 8056 8061
-eval range from 50s to 60s step 5s metric1_total offset -min(step(), 1s)^0
+eval range from 50s to 60s step 5s metric1_total offset -min_of(step(), 1s)^0
{} 1 1 1
-eval range from 50s to 60s step 5s metric1_total offset +min(step(), 1s)^0
+eval range from 50s to 60s step 5s metric1_total offset +min_of(step(), 1s)^0
{} 1 1 1
-eval range from 50s to 60s step 5s metric1_total offset min(step(), 1s)^0
+eval range from 50s to 60s step 5s metric1_total offset min_of(step(), 1s)^0
{} 1 1 1
-eval range from 50s to 60s step 5s metric1_total offset max(3s,min(step(), 1s))+8000
+eval range from 50s to 60s step 5s metric1_total offset max_of(3s,min_of(step(), 1s))+8000
{} 8047 8052 8057
-eval range from 50s to 60s step 5s metric1_total offset -(min(step(), 2s)-5)+8000
+eval range from 50s to 60s step 5s metric1_total offset -(min_of(step(), 2s)-5)+8000
{} 8047 8052 8057
# Test range() function - resolves to query range (end - start).
@@ -238,7 +238,7 @@ eval range from 50s to 60s step 5s count_over_time(metric1_total[range()])
eval range from 50s to 60s step 5s metric1_total offset range()
metric1_total{} 40 45 50
-eval range from 50s to 60s step 5s metric1_total offset min(range(), 8s)
+eval range from 50s to 60s step 5s metric1_total offset min_of(range(), 8s)
metric1_total{} 42 47 52
clear
diff --git a/promql/promqltest/testdata/functions.test b/promql/promqltest/testdata/functions.test
index 08dff3e80b..fbe7202213 100644
--- a/promql/promqltest/testdata/functions.test
+++ b/promql/promqltest/testdata/functions.test
@@ -2187,3 +2187,55 @@ eval range from 0s to 9s step 3s metric_for_at @ start()
eval range from 1s to 9s step 2s metric_for_at @ end()
{__name__="metric_for_at"} 10 10 10 10 10
+
+# Tests for min_of() and max_of() scalar functions.
+
+# min_of(a, b) returns math.Min(a, b).
+# max_of(a, b) returns math.Max(a, b).
+
+# Basic literal comparisons.
+eval instant at 0s min_of(3, 5)
+ 3
+
+eval instant at 0s min_of(5, 3)
+ 3
+
+eval instant at 0s max_of(3, 5)
+ 5
+
+eval instant at 0s max_of(5, 3)
+ 5
+
+# Equal values.
+eval instant at 0s min_of(4, 4)
+ 4
+
+eval instant at 0s max_of(4, 4)
+ 4
+
+# Negative values.
+eval instant at 0s min_of(-2, -5)
+ -5
+
+eval instant at 0s max_of(-2, -5)
+ -2
+
+# Zero and positive.
+eval instant at 0s min_of(0, 1)
+ 0
+
+eval instant at 0s max_of(0, 1)
+ 1
+
+# NaN propagation: any NaN input yields NaN.
+eval instant at 0s min_of(NaN, 3)
+ NaN
+
+eval instant at 0s min_of(3, NaN)
+ NaN
+
+eval instant at 0s max_of(NaN, 3)
+ NaN
+
+eval instant at 0s max_of(3, NaN)
+ NaN
diff --git a/web/api/v1/translate_ast_test.go b/web/api/v1/translate_ast_test.go
index 84c4019363..6d51d1bfb5 100644
--- a/web/api/v1/translate_ast_test.go
+++ b/web/api/v1/translate_ast_test.go
@@ -75,11 +75,11 @@ func TestTranslateASTDurationExpressions(t *testing.T) {
},
{
name: "complex matrix selector range expression",
- query: `foo[max(step(),5m+3m) ]`,
+ query: `foo[max_of(step(),5m+3m) ]`,
wantType: "matrixSelector",
wantFields: map[string]any{
"range": int64(0),
- "rangeExpr": durationExpr("max",
+ "rangeExpr": durationExpr("max_of",
durationExpr("step", nil, nil, false),
durationExpr("+", durationNumber("300", true), durationNumber("180", true), false),
false,
@@ -87,13 +87,13 @@ func TestTranslateASTDurationExpressions(t *testing.T) {
},
},
{
- name: "nested min and max matrix selector range expression",
- query: `foo[min(max(step(),5m+3m),10m-2m)]`,
+ name: "nested min_of and max_of matrix selector range expression",
+ query: `foo[min_of(max_of(step(),5m+3m),10m-2m)]`,
wantType: "matrixSelector",
wantFields: map[string]any{
"range": int64(0),
- "rangeExpr": durationExpr("min",
- durationExpr("max",
+ "rangeExpr": durationExpr("min_of",
+ durationExpr("max_of",
durationExpr("step", nil, nil, false),
durationExpr("+", durationNumber("300", true), durationNumber("180", true), false),
false,
@@ -149,12 +149,12 @@ func TestTranslateASTDurationExpressions(t *testing.T) {
},
{
name: "vector selector offset expression",
- query: `foo offset -min(5s,step()+8s)`,
+ query: `foo offset -min_of(5s,step()+8s)`,
wantType: "vectorSelector",
wantFields: map[string]any{
"offset": int64(0),
"offsetExpr": durationExpr("-", nil,
- durationExpr("min",
+ durationExpr("min_of",
durationNumber("5", true),
durationExpr("+", durationExpr("step", nil, nil, false), durationNumber("8", true), false),
false,
diff --git a/web/ui/mantine-ui/src/promql/functionDocs.tsx b/web/ui/mantine-ui/src/promql/functionDocs.tsx
index 7ea47c02bb..df47550052 100644
--- a/web/ui/mantine-ui/src/promql/functionDocs.tsx
+++ b/web/ui/mantine-ui/src/promql/functionDocs.tsx
@@ -2228,6 +2228,22 @@ const funcDocs: Record = {
>
),
+ max_of: (
+ <>
+
+
+ This function has to be enabled via the{" "}
+ feature flag
+ --enable-feature=promql-experimental-functions.
+
+
+
+
+ max_of(a scalar, b scalar) returns the larger of the two scalar values a
+ and b.
+
+ >
+ ),
max_over_time: (
<>
@@ -2338,6 +2354,22 @@ const funcDocs: Record = {
>
),
+ min_of: (
+ <>
+
+
+ This function has to be enabled via the{" "}
+ feature flag
+ --enable-feature=promql-experimental-functions.
+
+
+
+
+ min_of(a scalar, b scalar) returns the smaller of the two scalar values a
+ and b.
+
+ >
+ ),
min_over_time: (
<>
diff --git a/web/ui/mantine-ui/src/promql/functionSignatures.ts b/web/ui/mantine-ui/src/promql/functionSignatures.ts
index 0f5d838999..3fe9167ce7 100644
--- a/web/ui/mantine-ui/src/promql/functionSignatures.ts
+++ b/web/ui/mantine-ui/src/promql/functionSignatures.ts
@@ -111,7 +111,9 @@ export const functionSignatures: Record = {
log10: { name: "log10", argTypes: [valueType.vector], variadic: 0, returnType: valueType.vector },
log2: { name: "log2", argTypes: [valueType.vector], variadic: 0, returnType: valueType.vector },
mad_over_time: { name: "mad_over_time", argTypes: [valueType.matrix], variadic: 0, returnType: valueType.vector },
+ max_of: { name: "max_of", argTypes: [valueType.scalar, valueType.scalar], variadic: 0, returnType: valueType.scalar },
max_over_time: { name: "max_over_time", argTypes: [valueType.matrix], variadic: 0, returnType: valueType.vector },
+ min_of: { name: "min_of", argTypes: [valueType.scalar, valueType.scalar], variadic: 0, returnType: valueType.scalar },
min_over_time: { name: "min_over_time", argTypes: [valueType.matrix], variadic: 0, returnType: valueType.vector },
minute: { name: "minute", argTypes: [valueType.vector], variadic: 1, returnType: valueType.vector },
month: { name: "month", argTypes: [valueType.vector], variadic: 1, returnType: valueType.vector },