From cc6aa640fd5f914d9ae0505dfc65920261cc676f Mon Sep 17 00:00:00 2001 From: Dennis Zhuang Date: Tue, 20 Oct 2026 22:57:41 +0800 Subject: [PATCH] feat(promql): add stddev, stdvar, quantile and count_values aggregates Signed-off-by: Dennis Zhuang --- src/promql/src/aggregate.rs | 230 ++- src/promql/src/aggregate/stat_cases.txt | 2051 +++++++++++++++++++++++ src/promql/src/aggregate/tests.rs | 88 +- src/promql/src/map.rs | 1 + src/promql/src/map/broadcast.rs | 5 +- src/promql/src/range_eval.rs | 1 + src/promql/src/range_eval/function.rs | 2 +- 7 files changed, 2344 insertions(+), 34 deletions(-) create mode 100644 src/promql/src/aggregate/stat_cases.txt diff --git a/src/promql/src/aggregate.rs b/src/promql/src/aggregate.rs index 9629b781c0e..22e65d79359 100644 --- a/src/promql/src/aggregate.rs +++ b/src/promql/src/aggregate.rs @@ -19,6 +19,7 @@ #[cfg(test)] mod tests; +use std::collections::hash_map::Entry; use std::collections::{BTreeMap, HashMap}; use std::sync::Arc; @@ -26,10 +27,11 @@ use datafusion::error::{DataFusionError, Result}; use datatypes::series::MetricName; use datatypes::series::samples::{SampleRef, Series, SeriesSchema}; -use crate::grid_series::GridSeriesBuilder; -use crate::map::{drop_empty_labels, validate_float_series}; +use crate::grid_series::{GridSeriesBuilder, external}; +use crate::map::{drop_empty_labels, validate_float_series, validate_scalar}; +use crate::range_eval::quantile; -/// Basic float aggregations. +/// Float aggregations without a parameter. #[derive(Clone, Copy, Debug)] pub enum AggregateOp { Sum, @@ -38,6 +40,8 @@ pub enum AggregateOp { Min, Max, Group, + Stddev, + Stdvar, } /// Grouping by series labels. No modifier is `By(&[])`, as in Prometheus. @@ -66,19 +70,150 @@ pub fn aggregate_float( grouping: Grouping<'_>, ) -> Result> { validate_input(schema, input, grouping)?; + let groups = group_series(input, grouping, |state: &mut FloatState, sample| { + state.update(op, sample) + })?; + build_output( + schema, + groups, + |state| state.seen, + |state, _| state.finish(op), + ) +} + +/// `quantile(q, v)`, with `q` read at each grid point from an unlabelled single-field scalar on +/// the same grid, as Prometheus evaluates the parameter at every step. A point where `q` has no +/// value has no result; `q` outside `[0, 1]` or NaN gives what Prometheus' `quantile` gives. +pub fn aggregate_quantile( + schema: &Arc, + input: &[Series], + q: &Series, + grouping: Grouping<'_>, +) -> Result> { + validate_input(schema, input, grouping)?; + let q_axis = validate_scalar(schema, q)?; + let q: Vec<(usize, f64)> = q_axis + .positions() + .zip(q.fields.as_slice()[0].iter()) + .filter_map(|((point, _), sample)| match sample { + SampleRef::Float(value) => Some((point, value)), + _ => None, + }) + .collect(); + let groups = group_series(input, grouping, |values: &mut Vec, sample| { + values.push(sample) + })?; + let mut sorted = Vec::new(); + build_output( + schema, + groups, + |values| !values.is_empty(), + |values, point| { + let index = q.binary_search_by_key(&point, |&(point, _)| point).ok()?; + Some(quantile(q[index].1, values, &mut sorted)) + }, + ) +} + +/// `count_values(label, v)`: at each grid point, the number of samples in each group of series +/// that share a value, with the value written to `label` in Prometheus' `FormatFloat(v, 'f', -1)` +/// form. With `by`, `label` is part of the grouping; with `without`, it is dropped if listed. +pub fn count_values( + schema: &Arc, + input: &[Series], + label: &str, + grouping: Grouping<'_>, +) -> Result> { + validate_input(schema, input, grouping)?; + if label.is_empty() { + return Err(DataFusionError::Execution(format!( + "invalid label name {label:?}" + ))); + } + let by_labels: Vec<&str>; + let grouping = match grouping { + Grouping::By(labels) => { + by_labels = labels.iter().copied().chain([label]).collect(); + Grouping::By(&by_labels) + } + without => without, + }; + let width = schema.fields.len(); + let mut group_index = HashMap::new(); + let mut groups: Vec> = Vec::new(); + for series in input { + // Equal bits format to the same label value, so each distinct value of a series + // resolves its group once. + let mut group_of_value: HashMap = HashMap::new(); + for (field_index, field) in series.fields.iter().enumerate() { + for ((point, _), sample) in series.time.positions().zip(field.iter()) { + let SampleRef::Float(value) = sample else { + continue; + }; + let group = match group_of_value.entry(value.to_bits()) { + Entry::Occupied(entry) => *entry.get(), + Entry::Vacant(entry) => { + let mut metric = series.metric.clone(); + metric + .set(label, Arc::from(format_value(value))) + .map_err(external)?; + let metric = grouping.apply(&metric)?; + let index = *group_index.entry(label_key(&metric)).or_insert_with(|| { + groups.push(Group::new(metric)); + groups.len() - 1 + }); + *entry.insert(index) + } + }; + groups[group].update_point(point, width, field_index, |count| *count += 1.0); + } + } + } + build_output( + schema, + groups, + |count| *count > 0.0, + |count, _| Some(*count), + ) +} + +/// Go's `strconv.FormatFloat(value, 'f', -1, 64)`; Rust's shortest round-trip decimal matches it +/// for finite values. +fn format_value(value: f64) -> String { + match value { + f64::INFINITY => "+Inf".to_string(), + f64::NEG_INFINITY => "-Inf".to_string(), + _ => value.to_string(), + } +} + +/// Groups `input` by `grouping` in first-seen order and folds each series into its group. +fn group_series( + input: &[Series], + grouping: Grouping<'_>, + mut update: impl FnMut(&mut S, f64), +) -> Result>> { let mut group_index = HashMap::new(); let mut groups = Vec::new(); for series in input { let metric = grouping.apply(&series.metric)?; let index = *group_index.entry(label_key(&metric)).or_insert_with(|| { - groups.push(Group { - metric, - blocks: BTreeMap::new(), - }); + groups.push(Group::new(metric)); groups.len() - 1 }); - groups[index].accumulate(series, op)?; + groups[index].accumulate(series, &mut update); } + Ok(groups) +} + +/// Writes one series per group, from the points where any field's state has a sample. `finish` +/// receives the absolute grid index. +fn build_output( + schema: &Arc, + groups: Vec>, + seen: impl Fn(&S) -> bool, + mut finish: impl FnMut(&S, usize) -> Option, +) -> Result> { let mut builder = GridSeriesBuilder::try_new(schema.clone())?; let mut output = Vec::with_capacity(groups.len()); let mut row = Vec::with_capacity(schema.fields.len()); @@ -88,12 +223,19 @@ pub fn aggregate_float( for (&block, states) in &group.blocks { // The last block can extend past the grid; only points with a sample are pushed. for (offset, point) in states.chunks_exact(schema.fields.len()).enumerate() { - if !point.iter().any(|state| state.seen) { + if !point.iter().any(&seen) { continue; } + let index = block * BLOCK_POINTS + offset; row.clear(); - row.extend(point.iter().map(|state| state.finish(op))); - builder.push(block * BLOCK_POINTS + offset, &row)?; + row.extend(point.iter().map(|state| { + if seen(state) { + finish(state, index) + } else { + None + } + })); + builder.push(index, &row)?; } } output.extend(builder.finish(group.metric)?); @@ -162,15 +304,22 @@ fn label_key(metric: &MetricName) -> Vec<(Arc, Arc)> { /// input never expands to the full grid and dense input costs one allocation per block. const BLOCK_POINTS: usize = 64; -struct Group { +struct Group { metric: MetricName, /// Keyed by absolute grid index / `BLOCK_POINTS`; each block holds one state per field for /// each of its points, point by point. - blocks: BTreeMap>, + blocks: BTreeMap>, } -impl Group { - fn accumulate(&mut self, series: &Series, op: AggregateOp) -> Result<()> { +impl Group { + fn new(metric: MetricName) -> Self { + Self { + metric, + blocks: BTreeMap::new(), + } + } + + fn accumulate(&mut self, series: &Series, update: &mut impl FnMut(&mut S, f64)) { let width = series.fields.len(); let mut pending = Vec::with_capacity(BLOCK_POINTS); for (field_index, field) in series.fields.iter().enumerate() { @@ -181,16 +330,15 @@ impl Group { let mut block = usize::MAX; for ((index, _), sample) in series.time.positions().zip(field.iter()) { if index / BLOCK_POINTS != block { - self.update_block(block, width, field_index, op, &mut pending); + self.update_block(block, width, field_index, update, &mut pending); block = index / BLOCK_POINTS; } if let SampleRef::Float(sample) = sample { pending.push((index % BLOCK_POINTS, sample)); } } - self.update_block(block, width, field_index, op, &mut pending); + self.update_block(block, width, field_index, update, &mut pending); } - Ok(()) } /// Applies one field's samples within a block, so a block costs one lookup per field run. @@ -199,19 +347,35 @@ impl Group { block: usize, width: usize, field_index: usize, - op: AggregateOp, + update: &mut impl FnMut(&mut S, f64), pending: &mut Vec<(usize, f64)>, ) { if pending.is_empty() { return; } - let states = self.blocks.entry(block).or_insert_with(|| { - vec![FloatState::default(); BLOCK_POINTS * width].into_boxed_slice() - }); + let states = self.block(block, width); for (offset, sample) in pending.drain(..) { - states[offset * width + field_index].update(op, sample); + update(&mut states[offset * width + field_index], sample); } } + + /// Updates the state of one field at absolute grid `point`. + fn update_point( + &mut self, + point: usize, + width: usize, + field_index: usize, + update: impl FnOnce(&mut S), + ) { + let states = self.block(point / BLOCK_POINTS, width); + update(&mut states[point % BLOCK_POINTS * width + field_index]); + } + + fn block(&mut self, block: usize, width: usize) -> &mut [S] { + self.blocks + .entry(block) + .or_insert_with(|| vec![S::default(); BLOCK_POINTS * width].into_boxed_slice()) + } } /// The float part of Prometheus' `groupedAggregation`. @@ -230,10 +394,13 @@ impl FloatState { if !self.seen { *self = Self { seen: true, - value: if matches!(op, AggregateOp::Group) { - 1.0 - } else { - sample + value: match op { + AggregateOp::Group => 1.0, + // The running sum of squared deviations; Prometheus starts it at NaN for a + // non-finite first sample. + AggregateOp::Stddev | AggregateOp::Stdvar if !sample.is_finite() => f64::NAN, + AggregateOp::Stddev | AggregateOp::Stdvar => 0.0, + _ => sample, }, mean: sample, count: 1.0, @@ -258,6 +425,13 @@ impl FloatState { } } AggregateOp::Group => {} + // Welford's update, uncompensated as in Prometheus. + AggregateOp::Stddev | AggregateOp::Stdvar => { + self.count += 1.0; + let delta = sample - self.mean; + self.mean += delta / self.count; + self.value += delta * (sample - self.mean); + } } } @@ -289,6 +463,8 @@ impl FloatState { AggregateOp::Avg => self.value / self.count + self.compensation / self.count, AggregateOp::Count => self.count, AggregateOp::Min | AggregateOp::Max | AggregateOp::Group => self.value, + AggregateOp::Stdvar => self.value / self.count, + AggregateOp::Stddev => (self.value / self.count).sqrt(), }) } } diff --git a/src/promql/src/aggregate/stat_cases.txt b/src/promql/src/aggregate/stat_cases.txt new file mode 100644 index 00000000000..1a835860d25 --- /dev/null +++ b/src/promql/src/aggregate/stat_cases.txt @@ -0,0 +1,2051 @@ +# Generated by promql-compat cmd/narthex-golden-aggstat built for amd64 (Prometheus v3.15.0 +# engine, seed 1, 12 cases per operation and grouping). The header is `agg +# `: param is count_values' label, `-` otherwise; quantile's q at each +# point is the `scalar` line. Points are `grid index:hex value bits`. +case agg stddev none - - +expr stddev (a) +grid 0 1000 2 +series __name__=a,i=0,job=y ; 0:7ff0000000000000 +series __name__=a,i=1,job=x ; 1:c0c170a000000000 +series __name__=a,i=2,job=x ; 0:ffe1ccf385ebc8a0 1:8000000000000000 +result - ; 0:fff8000000000000 1:40b170a000000000 +end +case agg stddev none - - +expr stddev (a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; 0:c0c1e8a600000000 +result - ; 0:0 +end +case agg stddev none - - +expr stddev (a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 0:40cd01a600000000 1:c0cae8be00000000 3:7ff0000000000000 4:ffe1ccf385ebc8a0 5:c0ba99f800000000 6:40c739fc00000000 7:c0c891c600000000 +series __name__=a,i=1,job=y ; 0:4008000000000000 2:3ff0000000000000 3:c0a17db000000000 4:8000000000000000 5:c06aca0000000000 6:8000000000000000 7:fff0000000000000 +series __name__=a,i=2,job=x ; 0:c0c68b1400000000 1:4008000000000000 2:c0c94c3e00000000 3:0 4:c0c316c800000000 5:7ff8000000000001 6:7ff0000000000000 +result - ; 0:40c5199624b0fa68 1:40baea3e00000000 2:40b94cbe00000000 3:fff8000000000000 4:7ff0000000000000 5:7ff8000000000001 6:fff8000000000000 7:fff8000000000000 +end +case agg stddev none - - +expr stddev (a) +grid 0 1000 4 +series __name__=a,i=0,job=y ; +series __name__=a,i=1,job=x ; 0:c0ce66c000000000 1:fff0000000000000 2:1 3:c0ccea1c00000000 +series __name__=a,i=2,job=x ; 1:40a69d0000000000 2:7ff8000000000001 +result - ; 0:0 1:fff8000000000000 2:7ff8000000000001 3:0 +end +case agg stddev none - - +expr stddev (a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 0:0 1:7ff8000000000001 2:0 3:40a5d27000000000 4:40a5a00800000000 6:0 +series __name__=a,i=1,job=y ; 0:4000000000000000 1:40b2cdcc00000000 2:4000000000000000 3:0 4:4000000000000000 +result - ; 0:3ff0000000000000 1:7ff8000000000001 2:3ff0000000000000 3:4095d27000000000 4:40959c0800000000 6:0 +end +case agg stddev none - - +expr stddev (a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; +series __name__=a,i=1,job=y ; +series __name__=a,i=2,job=x ; 0:c0b297f400000000 +result - ; 0:0 +end +case agg stddev none - - +expr stddev (a) +grid 0 1000 1 +series __name__=a,i=0,job=x ; +series __name__=a,i=1,job=y ; +end +case agg stddev none - - +expr stddev (a) +grid 0 1000 5 +series __name__=a,i=0,job=x ; 1:c0c8e52a00000000 2:7ff0000000000000 4:4008000000000000 +result - ; 1:0 2:7ff8000000000001 4:0 +end +case agg stddev none - - +expr stddev (a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; 0:c0c97bc200000000 +series __name__=a,i=1,job=y ; 0:7ff8000000000001 +series __name__=a,i=2,job=y ; 0:40b1b47800000000 +series __name__=a,i=3,job=x ; 0:40c02cc000000000 +series __name__=a,i=4,job=x ; 0:c0ca187e00000000 +result - ; 0:7ff8000000000001 +end +case agg stddev none - - +expr stddev (a) +grid 0 1000 5 +series __name__=a,i=0,job=x ; 0:7ff8000000000001 1:40c4740000000000 2:40b01d1c00000000 3:fff0000000000000 4:fff0000000000000 +series __name__=a,i=1,job=y ; 0:7ff8000000000001 1:0 2:fff0000000000000 3:4000000000000000 4:7ff0000000000000 +series __name__=a,i=2,job=x ; 0:4008000000000000 1:c0cbe5da00000000 2:0 3:4000000000000000 4:4008000000000000 +series __name__=a,i=3,job=x ; 0:40b17b2000000000 1:4008000000000000 2:40c3a8b400000000 3:1a56e1fc2f8f359 4:7ff8000000000001 +series __name__=a,i=4,job=y ; 0:4008000000000000 1:40cc9c2800000000 2:1 3:1 4:7ff8000000000001 +series __name__=a,i=5,job=y ; 0:1a56e1fc2f8f359 1:40b9b9c000000000 2:40c9028600000000 3:7ff8000000000001 4:c09726f000000000 +result - ; 0:7ff8000000000001 1:40c23354ee2808b9 2:fff8000000000000 3:7ff8000000000001 4:7ff8000000000001 +end +case agg stddev none - - +expr stddev (a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 0:7ff8000000000001 1:40a32d7000000000 2:40cb80fc00000000 +series __name__=a,i=1,job=x ; 1:40c9f7f000000000 2:0 +series __name__=a,i=2,job=x ; 0:4008000000000000 1:40cddab000000000 +result - ; 0:7ff8000000000001 1:40b6064e81e436f8 2:40bb80fc00000000 +end +case agg stddev none - - +expr stddev (a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 0:4008000000000000 1:40beab4400000000 2:4008000000000000 3:40c8602e00000000 4:4000000000000000 6:7ff8000000000001 7:40a7d1e000000000 +series __name__=a,i=1,job=x ; 0:c0c0856000000000 1:fff0000000000000 2:3ff0000000000000 3:c0cb988e00000000 4:7fe1ccf385ebc8a0 6:40c996da00000000 7:40c035d200000000 +series __name__=a,i=2,job=y ; 1:8000000000000000 2:4008000000000000 3:fff0000000000000 4:40920e9000000000 5:ffe1ccf385ebc8a0 6:3ff0000000000000 7:40bdcb4400000000 +series __name__=a,i=3,job=x ; 0:7ff8000000000001 1:4000000000000000 2:0 5:1 6:fff0000000000000 7:c0c682a800000000 +result - ; 0:7ff8000000000001 1:fff8000000000000 2:3ff4c8dc2e423980 3:fff8000000000000 4:7ff0000000000000 5:7ff0000000000000 6:7ff8000000000001 7:40bf3537fa76fc81 +end +case agg stddev by job - +expr stddev by (job) (a) +grid 0 1000 8 +series __name__=a,i=0,job=y ; 0:0 1:40a014a800000000 2:0 3:40c2f1b000000000 4:4000000000000000 7:7ff0000000000000 +series __name__=a,i=1,job=y ; 0:c0cd2ab400000000 1:409f2c9000000000 2:c0bbd39800000000 3:c09acac000000000 4:c0b08d8000000000 6:8000000000000000 7:3ff0000000000000 +result job=y ; 0:40bd2ab400000000 1:403f980000000000 2:40abd39800000000 3:40b64b0800000000 4:40a08f8000000000 6:0 7:fff8000000000000 +end +case agg stddev by job - +expr stddev by (job) (a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 0:c0ce3e5a00000000 +series __name__=a,i=1,job=x ; 1:40c155d200000000 2:0 +series __name__=a,i=2,job=y ; 1:40ca33d000000000 2:c0b6a21000000000 +result job=x ; 0:0 1:0 2:0 +result job=y ; 1:0 2:0 +end +case agg stddev by job - +expr stddev by (job) (a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 0:0 1:c0b27be000000000 2:3ff0000000000000 3:c0bce9a000000000 4:40bf3b6800000000 5:40af58c800000000 +series __name__=a,i=1,job=y ; 1:c0b2b38400000000 2:40c760f400000000 3:7ff8000000000001 4:c0c87bec00000000 +series __name__=a,i=2,job=x ; 0:4008000000000000 1:fff0000000000000 2:c0c8a0ce00000000 3:c0babb7400000000 4:c0c1fa2600000000 5:8000000000000000 +result job=x ; 0:0 1:7ff8000000000001 2:0 3:0 4:0 5:0 +result job=y ; 0:0 1:403bd20000000000 2:40b7607400000000 3:7ff8000000000001 4:40c40cd000000000 5:0 +end +case agg stddev by job - +expr stddev by (job) (a) +grid 0 1000 7 +series __name__=a,i=0,job=x ; 0:4000000000000000 1:0 2:1a56e1fc2f8f359 3:c0c4624e00000000 4:3ff0000000000000 5:40cc1a3200000000 6:40ac2cb800000000 +series __name__=a,i=1,job=x ; 0:40bb5c0c00000000 1:0 2:4008000000000000 3:c094716000000000 5:c0a6dab000000000 6:1a56e1fc2f8f359 +series __name__=a,i=2,job=x ; 1:4000000000000000 2:7ff8000000000001 3:c0cb4c1200000000 4:40c0b50400000000 6:4000000000000000 +series __name__=a,i=3,job=y ; 0:7ff8000000000001 1:c0c6158600000000 2:c0cb26da00000000 3:4093f15000000000 4:7ff8000000000001 6:8000000000000000 +result job=x ; 0:40ab5a0c00000000 1:3fee2b7dddfefa66 2:7ff8000000000001 3:40b4d8bbf80dcc6b 4:40b0b48400000000 5:40c0e86f00000000 6:409a8e54e4f00aec +result job=y ; 0:7ff8000000000001 1:0 2:0 3:0 4:7ff8000000000001 6:0 +end +case agg stddev by job - +expr stddev by (job) (a) +grid 0 1000 1 +series __name__=a,i=0,job=x ; 0:7ff8000000000001 +series __name__=a,i=1,job=x ; 0:3ff0000000000000 +series __name__=a,i=2,job=y ; +result job=x ; 0:7ff8000000000001 +end +case agg stddev by job - +expr stddev by (job) (a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 0:40c38b6800000000 2:0 3:c0ca1b6600000000 4:c090d08000000000 5:40c45f9200000000 +series __name__=a,i=1,job=y ; 0:8000000000000000 1:c084d72000000000 2:8000000000000000 3:0 4:c0c857aa00000000 5:7ff8000000000001 +series __name__=a,i=2,job=y ; 2:3ff0000000000000 3:4008000000000000 4:c0a27c0000000000 5:40b0e9d800000000 +series __name__=a,i=3,job=x ; 0:8000000000000000 1:4000000000000000 2:c0cd4df400000000 3:4008000000000000 4:0 5:3ff0000000000000 +result job=x ; 0:0 1:0 2:0 3:0 4:0 5:0 +result job=y ; 0:40b38b6800000000 1:0 2:3fde2b7dddfefa66 3:40b89de02df393a0 4:40b3e34225bc9ec9 5:7ff8000000000001 +end +case agg stddev by job - +expr stddev by (job) (a) +grid 0 1000 2 +series __name__=a,i=0,job=y ; 0:0 1:c09183d000000000 +series __name__=a,i=1,job=x ; 1:40aafb8000000000 +result job=x ; 1:0 +result job=y ; 0:0 1:0 +end +case agg stddev by job - +expr stddev by (job) (a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 0:3ff0000000000000 1:c0be6fa800000000 2:40c2462e00000000 3:7fe1ccf385ebc8a0 +result job=y ; 0:0 1:0 2:0 3:0 +end +case agg stddev by job - +expr stddev by (job) (a) +grid 0 1000 8 +series __name__=a,i=0,job=y ; 1:40afa33800000000 2:40bb9a9400000000 3:c08fa50000000000 4:4000000000000000 5:40bcc4a400000000 6:7ff8000000000001 7:0 +series __name__=a,i=1,job=y ; 0:ffe1ccf385ebc8a0 1:3ff0000000000000 3:1a56e1fc2f8f359 4:ffe1ccf385ebc8a0 6:0 7:4008000000000000 +series __name__=a,i=2,job=y ; 0:1 1:408144a000000000 2:0 3:7ff0000000000000 4:3ff0000000000000 5:8000000000000000 6:ffe1ccf385ebc8a0 7:40c9820a00000000 +result job=y ; 0:7ff0000000000000 1:409c02e46aee11a4 2:40ab9a9400000000 3:fff8000000000000 4:7ff0000000000000 5:40acc4a400000000 6:7ff8000000000001 7:40b80bdf75653dad +end +case agg stddev by job - +expr stddev by (job) (a) +grid 0 1000 3 +series __name__=a,i=0,job=y ; 1:40c8fc1400000000 2:ffe1ccf385ebc8a0 +result job=y ; 1:0 2:0 +end +case agg stddev by job - +expr stddev by (job) (a) +grid 0 1000 2 +series __name__=a,i=0,job=x ; 0:ffe1ccf385ebc8a0 +series __name__=a,i=1,job=y ; 0:40a838a800000000 1:40b976d400000000 +series __name__=a,i=2,job=x ; 0:c0a3c06000000000 1:7ff8000000000001 +result job=x ; 0:7ff0000000000000 1:7ff8000000000001 +result job=y ; 0:0 1:0 +end +case agg stddev by job - +expr stddev by (job) (a) +grid 0 1000 3 +series __name__=a,i=0,job=y ; 0:7ff8000000000001 1:7ff0000000000000 2:7ff0000000000000 +result job=y ; 0:7ff8000000000001 1:7ff8000000000001 2:7ff8000000000001 +end +case agg stddev without i - +expr stddev without (i) (a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 0:3ff0000000000000 1:4008000000000000 +series __name__=a,i=1,job=y ; 0:c0bf3b9c00000000 1:7ff8000000000001 2:8000000000000000 +series __name__=a,i=2,job=y ; 0:4000000000000000 1:7ff0000000000000 2:7ff8000000000001 +series __name__=a,i=3,job=y ; 1:7fe1ccf385ebc8a0 2:c0c70d5000000000 +result job=x ; 0:0 1:0 +result job=y ; 0:40af3d9c00000000 1:7ff8000000000001 2:7ff8000000000001 +end +case agg stddev without i - +expr stddev without (i) (a) +grid 0 1000 6 +series __name__=a,i=0,job=x ; 1:7ff0000000000000 2:7fe1ccf385ebc8a0 3:40b1289c00000000 4:3ff0000000000000 5:7ff0000000000000 +series __name__=a,i=1,job=y ; 0:4000000000000000 1:0 2:0 3:7ff0000000000000 4:0 5:4000000000000000 +series __name__=a,i=2,job=x ; 0:0 1:3ff0000000000000 2:8000000000000000 3:7ff8000000000001 4:4000000000000000 5:c0c26d5600000000 +series __name__=a,i=3,job=x ; 0:40cb117400000000 1:40966f7000000000 2:4000000000000000 3:fff0000000000000 4:3ff0000000000000 +result job=x ; 0:40bb117400000000 1:fff8000000000000 2:7ff0000000000000 3:7ff8000000000001 4:3fde2b7dddfefa66 5:fff8000000000000 +result job=y ; 0:0 1:0 2:0 3:7ff8000000000001 4:0 5:0 +end +case agg stddev without i - +expr stddev without (i) (a) +grid 0 1000 4 +series __name__=a,i=0,job=x ; 1:c0c6329a00000000 +series __name__=a,i=1,job=y ; 0:3ff0000000000000 3:3ff0000000000000 +result job=x ; 1:0 +result job=y ; 0:0 3:0 +end +case agg stddev without i - +expr stddev without (i) (a) +grid 0 1000 4 +series __name__=a,i=0,job=x ; 0:c0b6159800000000 1:0 2:c0b6c66800000000 3:40cce46a00000000 +series __name__=a,i=1,job=x ; 0:fff0000000000000 1:0 2:8000000000000000 3:4008000000000000 +result job=x ; 0:fff8000000000000 1:0 2:40a6c66800000000 3:40bce2ea00000000 +end +case agg stddev without i - +expr stddev without (i) (a) +grid 0 1000 8 +series __name__=a,i=0,job=y ; 0:c0cad61e00000000 1:7ff8000000000001 2:40c7d67800000000 3:4000000000000000 4:40c8f9f200000000 5:7ff8000000000001 6:ffe1ccf385ebc8a0 7:40b78ff800000000 +series __name__=a,i=1,job=x ; 0:fff0000000000000 1:c0a8f2d800000000 2:7ff0000000000000 3:c0c6732400000000 4:7fe1ccf385ebc8a0 5:40c406a600000000 6:40cc816200000000 7:c0a3848800000000 +series __name__=a,i=2,job=y ; 0:4008000000000000 1:c0aac50000000000 3:40be97ac00000000 4:3ff0000000000000 5:4008000000000000 7:0 +series __name__=a,i=3,job=x ; 0:1 1:0 2:c090056000000000 3:3ff0000000000000 4:c0c2729800000000 5:4008000000000000 6:7ff0000000000000 7:0 +series __name__=a,i=4,job=y ; 0:3ff0000000000000 1:7ff0000000000000 3:1 4:c0adc97800000000 6:c0cbce1400000000 +result job=x ; 0:fff8000000000000 1:4098f2d800000000 2:fff8000000000000 3:40b673a400000000 4:7ff0000000000000 5:40b4052600000000 6:fff8000000000000 7:4093848800000000 +result job=y ; 0:40b94e26c62ffa47 1:7ff8000000000001 2:0 3:40acd6d413ba231a 4:40bbbb8797967443 5:7ff8000000000001 6:7ff0000000000000 7:40a78ff800000000 +end +case agg stddev without i - +expr stddev without (i) (a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 0:c0c342ce00000000 1:40ca54de00000000 2:7ff8000000000001 4:8000000000000000 5:4000000000000000 +series __name__=a,i=1,job=x ; 0:40c04cbc00000000 1:40a9823000000000 2:40c7efec00000000 3:c0beae6400000000 4:40c6b71600000000 5:3ff0000000000000 +series __name__=a,i=2,job=y ; 0:c0825cc000000000 2:407941c000000000 3:0 4:7ff8000000000001 5:7ff8000000000001 +series __name__=a,i=3,job=x ; 0:4000000000000000 1:40b8fed400000000 2:c0b0f25400000000 3:4000000000000000 4:3ff0000000000000 5:fff0000000000000 +result job=x ; 0:40b04bbc00000000 1:40987b7800000000 2:40c0348b00000000 3:40aeb06400000000 4:40b6b69600000000 5:fff8000000000000 +result job=y ; 0:40b21d0200000000 1:0 2:7ff8000000000001 3:0 4:7ff8000000000001 5:7ff8000000000001 +end +case agg stddev without i - +expr stddev without (i) (a) +grid 0 1000 4 +series __name__=a,i=0,job=x ; 0:4095360000000000 1:c0b2781400000000 3:7ff8000000000001 +result job=x ; 0:0 1:0 3:7ff8000000000001 +end +case agg stddev without i - +expr stddev without (i) (a) +grid 0 1000 3 +series __name__=a,i=0,job=y ; 0:0 2:c0836b6000000000 +series __name__=a,i=1,job=y ; 0:7ff8000000000001 1:c0b2b40400000000 2:40a6e5a000000000 +result job=y ; 0:7ff8000000000001 1:0 2:409bc07800000000 +end +case agg stddev without i - +expr stddev without (i) (a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; 0:ffe1ccf385ebc8a0 +series __name__=a,i=1,job=y ; 0:c0c5866e00000000 +series __name__=a,i=2,job=x ; 0:4094d7b000000000 +result job=x ; 0:0 +result job=y ; 0:7ff0000000000000 +end +case agg stddev without i - +expr stddev without (i) (a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 0:c0a8457000000000 1:4008000000000000 2:c093704000000000 3:4000000000000000 5:8000000000000000 6:1a56e1fc2f8f359 7:7ff8000000000001 +series __name__=a,i=1,job=x ; 0:3ff0000000000000 1:40cbd8a800000000 2:7ff8000000000001 3:8000000000000000 4:fff0000000000000 5:0 6:3ff0000000000000 +series __name__=a,i=2,job=x ; 0:8000000000000000 1:c0b3768c00000000 3:4000000000000000 5:4008000000000000 6:40b5bb7800000000 7:40c085ce00000000 +series __name__=a,i=3,job=x ; 0:4098802000000000 1:40b185c400000000 2:1 3:8000000000000000 4:ffe1ccf385ebc8a0 5:8000000000000000 7:40c5d1ca00000000 +result job=x ; 0:409a84051ade78b1 1:40bbae41b8678e89 2:7ff8000000000001 3:3ff0000000000000 4:fff8000000000000 5:3ff4c8dc2e423980 6:40a47cd13a836ca8 7:7ff8000000000001 +end +case agg stddev without i - +expr stddev without (i) (a) +grid 0 1000 4 +series __name__=a,i=0,job=y ; 2:7ff0000000000000 3:fff0000000000000 +series __name__=a,i=1,job=y ; 0:4008000000000000 1:7fe1ccf385ebc8a0 2:7ff8000000000001 3:4068df0000000000 +result job=y ; 0:0 1:0 2:7ff8000000000001 3:fff8000000000000 +end +case agg stddev without i - +expr stddev without (i) (a) +grid 0 1000 5 +series __name__=a,i=0,job=x ; 0:3ff0000000000000 2:0 3:40ca511e00000000 +result job=x ; 0:0 2:0 3:0 +end +case agg stddev by i - +expr stddev by (i) (a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 0:40a3db1800000000 1:40c5a27c00000000 2:40c7207000000000 3:c0c87c3e00000000 5:3ff0000000000000 +series __name__=a,i=1,job=y ; 0:4000000000000000 1:4000000000000000 2:7ff8000000000001 3:1 4:7ff8000000000001 +result i=0 ; 0:0 1:0 2:0 3:0 5:0 +result i=1 ; 0:0 1:0 2:7ff8000000000001 3:0 4:7ff8000000000001 +end +case agg stddev by i - +expr stddev by (i) (a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 0:c0cbecf800000000 3:7ff0000000000000 4:c09fc25000000000 +series __name__=a,i=1,job=y ; 0:0 1:4000000000000000 2:3ff0000000000000 4:3ff0000000000000 +series __name__=a,i=2,job=y ; 0:40b665fc00000000 1:40cb661e00000000 2:1a56e1fc2f8f359 3:0 4:4008000000000000 +result i=0 ; 0:0 3:7ff8000000000001 4:0 +result i=1 ; 0:0 1:0 2:0 4:0 +result i=2 ; 0:0 1:0 2:0 3:0 4:0 +end +case agg stddev by i - +expr stddev by (i) (a) +grid 0 1000 7 +series __name__=a,i=0,job=x ; 1:fff0000000000000 3:4008000000000000 4:c0cca2d200000000 5:40bc2d2c00000000 +series __name__=a,i=1,job=x ; 2:0 4:1a56e1fc2f8f359 5:c0c4a9e800000000 6:0 +result i=0 ; 1:7ff8000000000001 3:0 4:0 5:0 +result i=1 ; 2:0 4:0 5:0 6:0 +end +case agg stddev by i - +expr stddev by (i) (a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 0:c0c3733000000000 1:fff0000000000000 2:7ff8000000000001 +series __name__=a,i=1,job=x ; 2:40bc9da400000000 +result i=0 ; 0:0 1:7ff8000000000001 2:7ff8000000000001 +result i=1 ; 2:0 +end +case agg stddev by i - +expr stddev by (i) (a) +grid 0 1000 7 +series __name__=a,i=0,job=x ; 0:40b6b7dc00000000 1:4008000000000000 2:c0c639b200000000 3:8000000000000000 5:7ff8000000000001 6:0 +result i=0 ; 0:0 1:0 2:0 3:0 5:7ff8000000000001 6:0 +end +case agg stddev by i - +expr stddev by (i) (a) +grid 0 1000 2 +series __name__=a,i=0,job=x ; 0:7ff8000000000001 1:0 +series __name__=a,i=1,job=y ; 0:c0c7fc8c00000000 1:40c4708a00000000 +series __name__=a,i=2,job=x ; 0:c0bc47c400000000 1:40b4517000000000 +series __name__=a,i=3,job=y ; 1:40bfa4b800000000 +series __name__=a,i=4,job=x ; 0:4000000000000000 1:fff0000000000000 +result i=0 ; 0:7ff8000000000001 1:0 +result i=1 ; 0:0 1:0 +result i=2 ; 0:0 1:0 +result i=3 ; 1:0 +result i=4 ; 0:0 1:7ff8000000000001 +end +case agg stddev by i - +expr stddev by (i) (a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; 0:0 +result i=0 ; 0:0 +end +case agg stddev by i - +expr stddev by (i) (a) +grid 0 1000 8 +series __name__=a,i=0,job=y ; 0:fff0000000000000 1:3ff0000000000000 3:40c3f8ca00000000 5:8000000000000000 7:c0c8f18c00000000 +result i=0 ; 0:7ff8000000000001 1:0 3:0 5:0 7:0 +end +case agg stddev by i - +expr stddev by (i) (a) +grid 0 1000 5 +series __name__=a,i=0,job=x ; 0:0 1:3ff0000000000000 2:3ff0000000000000 3:4000000000000000 +series __name__=a,i=1,job=y ; 1:c09fd37000000000 2:40c2c21200000000 3:7ff8000000000001 4:8000000000000000 +series __name__=a,i=2,job=y ; 0:3ff0000000000000 1:7ff8000000000001 2:0 3:0 4:0 +series __name__=a,i=3,job=y ; 2:40b92f4000000000 3:fff0000000000000 +result i=0 ; 0:0 1:0 2:0 3:0 +result i=1 ; 1:0 2:0 3:7ff8000000000001 4:0 +result i=2 ; 0:0 1:7ff8000000000001 2:0 3:0 4:0 +result i=3 ; 2:0 3:7ff8000000000001 +end +case agg stddev by i - +expr stddev by (i) (a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 0:c0b953c000000000 2:c0b61a2c00000000 3:40c50fba00000000 +series __name__=a,i=1,job=y ; 0:1 1:40b0f04c00000000 4:7ff0000000000000 +series __name__=a,i=2,job=y ; 0:40a0735800000000 1:0 2:0 3:c0a34ce000000000 +series __name__=a,i=3,job=y ; 0:40c555ae00000000 3:40a87c1000000000 4:40cdf68400000000 +result i=0 ; 0:0 2:0 3:0 +result i=1 ; 0:0 1:0 4:7ff8000000000001 +result i=2 ; 0:0 1:0 2:0 3:0 +result i=3 ; 0:0 3:0 4:0 +end +case agg stddev by i - +expr stddev by (i) (a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 1:7ff8000000000001 2:4008000000000000 4:7ff0000000000000 5:408ea96000000000 6:40acccd800000000 7:c09c3fe000000000 +series __name__=a,i=1,job=x ; 0:7ff0000000000000 2:3ff0000000000000 3:7ff8000000000001 4:c0b908b400000000 5:7ff0000000000000 6:8000000000000000 7:1 +result i=0 ; 1:7ff8000000000001 2:0 4:7ff8000000000001 5:0 6:0 7:0 +result i=1 ; 0:7ff8000000000001 2:0 3:7ff8000000000001 4:0 5:7ff8000000000001 6:0 7:0 +end +case agg stddev by i - +expr stddev by (i) (a) +grid 0 1000 1 +series __name__=a,i=0,job=x ; +series __name__=a,i=1,job=x ; +end +case agg stdvar none - - +expr stdvar (a) +grid 0 1000 5 +series __name__=a,i=0,job=x ; 0:3ff0000000000000 2:7ff8000000000001 3:4000000000000000 4:3ff0000000000000 +series __name__=a,i=1,job=x ; 0:c08361c000000000 1:7ff0000000000000 3:4000000000000000 4:0 +series __name__=a,i=2,job=x ; 0:c0b1072c00000000 1:4008000000000000 2:40bb3d1000000000 3:3ff0000000000000 4:7ff0000000000000 +result - ; 0:414c4b39aa771c71 1:fff8000000000000 2:7ff8000000000001 3:3fcc71c71c71c71d 4:fff8000000000000 +end +case agg stdvar none - - +expr stdvar (a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 0:4000000000000000 1:3ff0000000000000 2:40c8d7a800000000 3:c0be516400000000 +series __name__=a,i=1,job=x ; 0:c0c4f63000000000 1:40b1a40800000000 3:c0c02e6e00000000 4:7ff0000000000000 +series __name__=a,i=2,job=y ; 0:7ff8000000000001 1:0 3:1a56e1fc2f8f359 4:40c7e40e00000000 +series __name__=a,i=3,job=x ; 1:4000000000000000 2:c0cd40da00000000 3:0 4:7fe1ccf385ebc8a0 +series __name__=a,i=4,job=x ; 0:4000000000000000 1:7ff8000000000001 2:7ff8000000000001 3:4008000000000000 4:ffe1ccf385ebc8a0 +result - ; 0:7ff8000000000001 1:7ff8000000000001 2:7ff8000000000001 3:416d86aedac87ae2 4:fff8000000000000 +end +case agg stdvar none - - +expr stdvar (a) +grid 0 1000 8 +series __name__=a,i=0,job=y ; 1:40ce7b8e00000000 2:7ff0000000000000 3:7ff8000000000001 4:40cd245400000000 5:7ff0000000000000 6:7ff8000000000001 7:c0ca73ae00000000 +series __name__=a,i=1,job=y ; 0:0 2:40c3dbc000000000 4:40c1c07600000000 5:7ff8000000000001 6:c09155e000000000 7:3ff0000000000000 +series __name__=a,i=2,job=y ; 1:c0c0a56000000000 2:409cb53000000000 3:7ff8000000000001 4:c0bc839c00000000 5:c0a54f2800000000 6:7ff8000000000001 7:7ff8000000000001 +series __name__=a,i=3,job=y ; 0:3ff0000000000000 1:c0b60e1000000000 2:7fe1ccf385ebc8a0 3:4008000000000000 4:40c30af200000000 6:c0c4a8c000000000 7:7ff8000000000001 +result - ; 0:3fd0000000000000 1:419b9c068330b8e4 2:fff8000000000000 3:7ff8000000000001 4:41909a4e8c78ac00 5:7ff8000000000001 6:7ff8000000000001 7:7ff8000000000001 +end +case agg stdvar none - - +expr stdvar (a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 0:c0c4537200000000 1:ffe1ccf385ebc8a0 3:fff0000000000000 4:fff0000000000000 6:c0a1a1f000000000 7:c0cb6fa000000000 +series __name__=a,i=1,job=y ; 0:40a9923800000000 1:c07d5d0000000000 2:40c007f200000000 3:409d26a000000000 4:7ff8000000000001 5:c0b6a41400000000 7:c0c3241200000000 +series __name__=a,i=2,job=y ; 0:fff0000000000000 2:8000000000000000 3:7ff0000000000000 4:1a56e1fc2f8f359 5:0 +result - ; 0:fff8000000000000 1:7ff0000000000000 2:41700fe7f20c4000 3:fff8000000000000 4:7ff8000000000001 5:416004e4cd0c8000 6:0 7:415133cb20b10000 +end +case agg stdvar none - - +expr stdvar (a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 1:3ff0000000000000 2:8000000000000000 +series __name__=a,i=1,job=x ; 0:0 2:c0cb1a7800000000 +result - ; 0:0 1:0 2:4186f4c064c20000 +end +case agg stdvar none - - +expr stdvar (a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; +series __name__=a,i=1,job=x ; 0:8000000000000000 +result - ; 0:0 +end +case agg stdvar none - - +expr stdvar (a) +grid 0 1000 6 +series __name__=a,i=0,job=x ; 1:c0c9cf6000000000 2:4000000000000000 3:7ff8000000000001 +series __name__=a,i=1,job=x ; 0:0 2:0 3:c0a05d8800000000 4:c0cd679800000000 5:40bdede400000000 +series __name__=a,i=2,job=x ; 0:c0bfa24000000000 1:7ff0000000000000 2:ffe1ccf385ebc8a0 4:7ff8000000000001 +result - ; 0:416f4592a8800000 1:fff8000000000000 2:7ff0000000000000 3:7ff8000000000001 4:7ff8000000000001 5:0 +end +case agg stdvar none - - +expr stdvar (a) +grid 0 1000 8 +series __name__=a,i=0,job=y ; 0:4000000000000000 1:4008000000000000 2:c092f42000000000 3:c0b9356800000000 4:0 5:40c18d1800000000 7:4000000000000000 +result - ; 0:0 1:0 2:0 3:0 4:0 5:0 7:0 +end +case agg stdvar none - - +expr stdvar (a) +grid 0 1000 2 +series __name__=a,i=0,job=x ; 0:7ff0000000000000 1:7ff8000000000001 +series __name__=a,i=1,job=x ; 0:3ff0000000000000 +result - ; 0:fff8000000000000 1:7ff8000000000001 +end +case agg stdvar none - - +expr stdvar (a) +grid 0 1000 1 +series __name__=a,i=0,job=x ; 0:fff0000000000000 +series __name__=a,i=1,job=y ; 0:c0c62a3e00000000 +series __name__=a,i=2,job=y ; 0:3ff0000000000000 +series __name__=a,i=3,job=y ; 0:c0b4274800000000 +result - ; 0:fff8000000000000 +end +case agg stdvar none - - +expr stdvar (a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 1:8000000000000000 2:c0b8777800000000 3:c0ca7d8c00000000 4:4008000000000000 5:c0b09d7c00000000 6:4000000000000000 +series __name__=a,i=1,job=x ; 0:0 1:0 2:40cbd95e00000000 3:40bdb68400000000 4:c09ca93000000000 5:4000000000000000 +result - ; 0:0 1:0 2:41991a67751a9000 3:419ab64329171000 4:4129c115e7480000 5:4151452db4410000 6:0 +end +case agg stdvar none - - +expr stdvar (a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 0:3ff0000000000000 1:7ff0000000000000 2:7ff8000000000001 4:40c597f400000000 5:c0beb08800000000 +series __name__=a,i=1,job=y ; 0:40a1b4d800000000 1:c0ad465800000000 2:0 3:0 4:3ff0000000000000 5:40be5ee000000000 +result - ; 0:413393da11640000 1:fff8000000000000 2:7ff8000000000001 3:0 4:417d232a20c90000 5:418d20b0fab48000 +end +case agg stdvar by job - +expr stdvar by (job) (a) +grid 0 1000 6 +series __name__=a,i=0,job=x ; 0:0 1:c0c0936400000000 2:40bd3f9400000000 3:40ccdc4e00000000 5:c0c1830000000000 +series __name__=a,i=1,job=y ; 0:40b3de0c00000000 1:40cb7a1e00000000 2:0 3:40c171be00000000 4:0 5:7ff0000000000000 +result job=x ; 0:0 1:0 2:0 3:0 5:0 +result job=y ; 0:0 1:0 2:0 3:0 4:0 5:7ff8000000000001 +end +case agg stdvar by job - +expr stdvar by (job) (a) +grid 0 1000 7 +series __name__=a,i=0,job=x ; 0:7ff8000000000001 1:0 2:7ff0000000000000 3:fff0000000000000 4:40c7c53a00000000 5:c0c5016000000000 6:7ff0000000000000 +series __name__=a,i=1,job=x ; 0:40b53a8000000000 3:0 5:0 6:4000000000000000 +result job=x ; 0:7ff8000000000001 1:0 2:7ff8000000000001 3:fff8000000000000 4:0 5:417b939c1e400000 6:fff8000000000000 +end +case agg stdvar by job - +expr stdvar by (job) (a) +grid 0 1000 6 +series __name__=a,i=0,job=x ; 1:7ff8000000000001 2:4008000000000000 4:4000000000000000 5:40c2af0c00000000 +series __name__=a,i=1,job=y ; 0:c0ca374e00000000 1:7ff8000000000001 2:40cd4f8800000000 3:7ff0000000000000 4:8000000000000000 +result job=x ; 1:7ff8000000000001 2:0 4:0 5:0 +result job=y ; 0:0 1:7ff8000000000001 2:0 3:7ff8000000000001 4:0 +end +case agg stdvar by job - +expr stdvar by (job) (a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 0:4083f08000000000 1:40c7a3e000000000 2:4091633000000000 3:c09d114000000000 4:8000000000000000 5:1 6:3ff0000000000000 +series __name__=a,i=1,job=y ; 0:c0c7206600000000 1:c0859d4000000000 2:7fe1ccf385ebc8a0 3:c0b391a800000000 4:c08a78e000000000 5:0 6:40b6367000000000 +series __name__=a,i=2,job=y ; 0:c0c4d7c200000000 1:0 2:8000000000000000 3:0 4:c0af50b000000000 5:7fe1ccf385ebc8a0 6:7ff8000000000001 +series __name__=a,i=3,job=y ; 0:1a56e1fc2f8f359 1:8000000000000000 2:8000000000000000 3:4000000000000000 4:4008000000000000 5:3ff0000000000000 6:0 +series __name__=a,i=4,job=x ; 0:40b83acc00000000 1:408c79a000000000 2:1 3:c0914e6000000000 4:3ff0000000000000 6:4000000000000000 +result job=x ; 0:0 1:0 2:0 3:0 4:0 6:0 +result job=y ; 0:418013f891b74000 1:417b47a755f6c000 2:7ff0000000000000 3:414ffa1eb4e5ffff 4:4144c936f2858000 5:7ff0000000000000 6:7ff8000000000001 +end +case agg stdvar by job - +expr stdvar by (job) (a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 0:7ff8000000000001 1:1a56e1fc2f8f359 2:4008000000000000 +series __name__=a,i=1,job=y ; 0:c0c0357a00000000 1:7fe1ccf385ebc8a0 2:1a56e1fc2f8f359 +series __name__=a,i=2,job=y ; 0:40c73daa00000000 1:0 2:7ff8000000000001 +result job=x ; 0:7ff8000000000001 1:0 2:0 +result job=y ; 0:4198512305744000 1:7ff0000000000000 2:7ff8000000000001 +end +case agg stdvar by job - +expr stdvar by (job) (a) +grid 0 1000 6 +series __name__=a,i=0,job=x ; 1:8000000000000000 2:c0c1bbfe00000000 3:1a56e1fc2f8f359 4:c0b70dc000000000 5:fff0000000000000 +series __name__=a,i=1,job=y ; 0:8000000000000000 2:4000000000000000 3:0 4:40cba47200000000 5:7fe1ccf385ebc8a0 +series __name__=a,i=2,job=y ; 0:1 1:c0a2c23800000000 3:0 4:4008000000000000 5:4008000000000000 +result job=x ; 1:0 2:0 3:0 4:0 5:7ff8000000000001 +result job=y ; 0:0 1:0 2:0 3:0 4:4187de3619662000 5:7ff0000000000000 +end +case agg stdvar by job - +expr stdvar by (job) (a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 0:4000000000000000 2:40c6031800000000 +series __name__=a,i=1,job=y ; 0:40ab5fc000000000 1:40b8286000000000 2:40c4f1fa00000000 +series __name__=a,i=2,job=y ; 0:40cae4d000000000 1:7ff8000000000001 +series __name__=a,i=3,job=x ; 0:1a56e1fc2f8f359 1:0 2:1a56e1fc2f8f359 +result job=x ; 0:3ff0000000000000 1:0 2:417e488299240000 +result job=y ; 0:4179203a5c400000 1:7ff8000000000001 2:0 +end +case agg stdvar by job - +expr stdvar by (job) (a) +grid 0 1000 4 +series __name__=a,i=0,job=x ; 0:c0aef92800000000 1:40c7952e00000000 2:3ff0000000000000 3:c0c550b400000000 +series __name__=a,i=1,job=y ; 1:7ff0000000000000 2:40c4bc7800000000 3:7ff8000000000001 +result job=x ; 0:0 1:0 2:0 3:0 +result job=y ; 1:7ff8000000000001 2:0 3:7ff8000000000001 +end +case agg stdvar by job - +expr stdvar by (job) (a) +grid 0 1000 4 +series __name__=a,i=0,job=x ; 1:4000000000000000 2:1 +result job=x ; 1:0 2:0 +end +case agg stdvar by job - +expr stdvar by (job) (a) +grid 0 1000 8 +series __name__=a,i=0,job=y ; 0:7ff0000000000000 1:7ff8000000000001 2:40bc4c8000000000 3:40a017b000000000 4:40adb98800000000 5:3ff0000000000000 7:40ce024200000000 +series __name__=a,i=1,job=x ; 0:c0bb328000000000 1:40ce6af000000000 2:1a56e1fc2f8f359 4:4000000000000000 5:0 6:7fe1ccf385ebc8a0 7:c0ab11a000000000 +series __name__=a,i=2,job=x ; 0:1a56e1fc2f8f359 1:c0b4571c00000000 2:7ff0000000000000 3:7ff8000000000001 4:c0afa89800000000 5:40cdd29e00000000 6:0 7:8000000000000000 +result job=x ; 0:41671d87b2000000 1:4199bd7f5f981000 2:fff8000000000000 3:7ff8000000000001 4:414f5a0964d20000 5:418bcb289ccc2000 6:7ff0000000000000 7:4146e5c7b5200000 +result job=y ; 0:7ff8000000000001 1:7ff8000000000001 2:0 3:0 4:0 5:0 7:0 +end +case agg stdvar by job - +expr stdvar by (job) (a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; +series __name__=a,i=1,job=x ; 0:40c8a13000000000 +result job=x ; 0:0 +end +case agg stdvar by job - +expr stdvar by (job) (a) +grid 0 1000 3 +series __name__=a,i=0,job=y ; 0:4095b68000000000 +series __name__=a,i=1,job=x ; 0:c0cbdcd400000000 1:fff0000000000000 +series __name__=a,i=2,job=y ; 0:0 1:c097573000000000 +series __name__=a,i=3,job=y ; 0:3ff0000000000000 1:c0a4802000000000 2:7ff8000000000001 +result job=x ; 0:0 1:7ff8000000000001 +result job=y ; 0:411a2c3d58e38e38 1:41137e3c62100000 2:7ff8000000000001 +end +case agg stdvar without i - +expr stdvar without (i) (a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 1:4008000000000000 +series __name__=a,i=1,job=x ; 1:40c831f600000000 2:7ff0000000000000 +series __name__=a,i=2,job=x ; 0:405f250000000000 1:0 +series __name__=a,i=3,job=x ; 0:c0ad84a800000000 1:fff0000000000000 2:0 +series __name__=a,i=4,job=y ; 2:1 +result job=x ; 0:414d0dd4a6480000 1:fff8000000000000 2:fff8000000000000 +result job=y ; 2:0 +end +case agg stdvar without i - +expr stdvar without (i) (a) +grid 0 1000 8 +series __name__=a,i=0,job=y ; 0:3ff0000000000000 2:7ff0000000000000 3:4000000000000000 7:7ff0000000000000 +series __name__=a,i=1,job=x ; 0:40b3c2b400000000 2:c0c7b66000000000 3:c075878000000000 4:40af1bd800000000 5:40ca3f9a00000000 6:7ff8000000000001 7:4008000000000000 +series __name__=a,i=2,job=x ; 0:3ff0000000000000 1:4008000000000000 2:40c14fa000000000 3:3ff0000000000000 5:8000000000000000 6:4008000000000000 7:0 +series __name__=a,i=3,job=y ; 1:1a56e1fc2f8f359 2:c0c50a0600000000 3:40a5e5a800000000 4:3ff0000000000000 5:40c3151e00000000 6:0 7:0 +series __name__=a,i=4,job=y ; 0:ffe1ccf385ebc8a0 1:7ff8000000000001 2:7ff8000000000001 3:4000000000000000 4:7ff0000000000000 5:7ff0000000000000 6:7ff8000000000001 +result job=x ; 0:415865348e690000 1:0 2:419a4bb090000000 3:40dd234a84000000 4:0 5:418587d8a9452000 6:7ff8000000000001 7:4002000000000000 +result job=y ; 0:7ff0000000000000 1:7ff8000000000001 2:7ff8000000000001 3:413a9994ee200000 4:fff8000000000000 5:fff8000000000000 6:7ff8000000000001 7:fff8000000000000 +end +case agg stdvar without i - +expr stdvar without (i) (a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 0:7ff0000000000000 1:c0bd6da800000000 2:40c7655600000000 4:7ff8000000000001 5:8000000000000000 6:0 +result job=y ; 0:7ff8000000000001 1:0 2:0 4:7ff8000000000001 5:0 6:0 +end +case agg stdvar without i - +expr stdvar without (i) (a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 0:c07dc68000000000 1:c0c72b8600000000 3:7ff8000000000001 4:40ca8a0c00000000 +series __name__=a,i=1,job=x ; 0:c0cb758000000000 1:0 +series __name__=a,i=2,job=y ; 0:7ff0000000000000 1:1a56e1fc2f8f359 2:c088346000000000 4:c0cb549200000000 +series __name__=a,i=3,job=x ; 0:7ff8000000000001 1:7ff8000000000001 3:fff0000000000000 4:40c4a6fa00000000 +series __name__=a,i=4,job=y ; 0:7ff0000000000000 1:4000000000000000 2:3ff0000000000000 3:4084a00000000000 4:0 +result job=x ; 0:7ff8000000000001 1:7ff8000000000001 3:7ff8000000000001 4:0 +result job=y ; 0:fff8000000000000 1:417dd47b0b9038e4 2:41025b01e9200000 3:7ff8000000000001 4:419e3b0bc6342aab +end +case agg stdvar without i - +expr stdvar without (i) (a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; 0:4008000000000000 +series __name__=a,i=1,job=x ; +series __name__=a,i=2,job=y ; 0:4008000000000000 +series __name__=a,i=3,job=x ; 0:c0be15f800000000 +result job=x ; 0:0 +result job=y ; 0:0 +end +case agg stdvar without i - +expr stdvar without (i) (a) +grid 0 1000 2 +series __name__=a,i=0,job=x ; +series __name__=a,i=1,job=x ; +end +case agg stdvar without i - +expr stdvar without (i) (a) +grid 0 1000 4 +series __name__=a,i=0,job=y ; 0:7ff0000000000000 2:c0cbac7e00000000 3:c0c08d0000000000 +series __name__=a,i=1,job=x ; 0:0 1:c0580a0000000000 2:c05ab40000000000 3:4000000000000000 +result job=x ; 0:0 1:0 2:0 3:0 +result job=y ; 0:7ff8000000000001 2:0 3:0 +end +case agg stdvar without i - +expr stdvar without (i) (a) +grid 0 1000 8 +series __name__=a,i=0,job=y ; 0:4000000000000000 1:40a480a000000000 2:1a56e1fc2f8f359 3:3ff0000000000000 5:c0a9118000000000 7:3ff0000000000000 +series __name__=a,i=1,job=y ; 0:7ff0000000000000 1:c0cd41b600000000 2:1a56e1fc2f8f359 3:4000000000000000 4:c0caf4a000000000 5:0 6:0 7:7ff8000000000001 +series __name__=a,i=2,job=x ; 0:40b67ccc00000000 1:c063298000000000 2:fff0000000000000 3:c08167a000000000 5:40ccc19400000000 6:0 7:0 +series __name__=a,i=3,job=y ; 0:0 1:408930a000000000 2:c0bb8f0000000000 3:40a91e2800000000 5:40c7a9fa00000000 6:c0c2e75c00000000 +result job=x ; 0:0 1:0 2:7ff8000000000001 3:0 5:0 6:0 7:0 +result job=y ; 0:fff8000000000000 1:418dcbc26cd571c8 2:416518b8071c71c8 3:4141823de6d71c73 4:0 5:4184c4030962c71d 6:417655a072910000 7:7ff8000000000001 +end +case agg stdvar without i - +expr stdvar without (i) (a) +grid 0 1000 4 +series __name__=a,i=0,job=x ; 0:7fe1ccf385ebc8a0 1:40726a0000000000 3:3ff0000000000000 +series __name__=a,i=1,job=y ; 0:8000000000000000 2:3ff0000000000000 3:0 +series __name__=a,i=2,job=x ; 0:4000000000000000 1:40b2a68400000000 2:7ff8000000000001 3:40b9db2800000000 +series __name__=a,i=3,job=y ; 0:ffe1ccf385ebc8a0 1:40c9c4c600000000 3:0 +result job=x ; 0:7ff0000000000000 1:415323c2c0310000 2:7ff8000000000001 3:4164e2adc1320000 +result job=y ; 0:7ff0000000000000 1:0 2:0 3:0 +end +case agg stdvar without i - +expr stdvar without (i) (a) +grid 0 1000 2 +series __name__=a,i=0,job=x ; 0:1 1:fff0000000000000 +result job=x ; 0:0 1:7ff8000000000001 +end +case agg stdvar without i - +expr stdvar without (i) (a) +grid 0 1000 4 +series __name__=a,i=0,job=x ; 0:c0bf015400000000 1:8000000000000000 2:0 3:408195e000000000 +series __name__=a,i=1,job=y ; 1:c0c6d10c00000000 2:fff0000000000000 3:4008000000000000 +series __name__=a,i=2,job=y ; 0:c0c266fc00000000 2:4008000000000000 +series __name__=a,i=3,job=x ; 1:40caa2a600000000 2:ffe1ccf385ebc8a0 3:7ff8000000000001 +series __name__=a,i=4,job=x ; 0:3ff0000000000000 2:4000000000000000 3:7ff8000000000001 +series __name__=a,i=5,job=x ; 0:8000000000000000 1:4008000000000000 2:40c7818a00000000 3:8000000000000000 +result job=x ; 0:416ab4ed398b1c71 1:4183b3cf05a10000 2:7ff0000000000000 3:7ff8000000000001 +result job=y ; 0:0 1:0 2:fff8000000000000 3:0 +end +case agg stdvar without i - +expr stdvar without (i) (a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 0:c0c33d8c00000000 1:1a56e1fc2f8f359 2:c0ac4ff800000000 3:4008000000000000 4:40c52a6400000000 5:3ff0000000000000 +series __name__=a,i=1,job=x ; 0:4008000000000000 1:c0c7b7a000000000 2:c0c1cd0c00000000 3:fff0000000000000 4:40c867b400000000 +series __name__=a,i=2,job=y ; 2:0 3:c0c14ff600000000 4:4008000000000000 5:0 +result job=x ; 0:0 1:0 2:0 3:7ff8000000000001 4:0 +result job=y ; 0:0 1:0 2:41490cb9d8020000 3:4172beb97e264000 4:417bfbbf00b10000 5:3fd0000000000000 +end +case agg stdvar by i - +expr stdvar by (i) (a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 0:fff0000000000000 1:40c572ce00000000 3:fff0000000000000 5:409672d000000000 6:4000000000000000 7:c0b387a000000000 +series __name__=a,i=1,job=x ; 0:c0b2ae7400000000 1:0 2:4000000000000000 3:4000000000000000 5:3ff0000000000000 6:c0c69f4000000000 7:c0c0836400000000 +series __name__=a,i=2,job=x ; 0:40a5e7f800000000 1:7ff8000000000001 2:0 3:7fe1ccf385ebc8a0 4:8000000000000000 5:7ff8000000000001 6:ffe1ccf385ebc8a0 +series __name__=a,i=3,job=y ; 0:7ff8000000000001 1:40a16ef000000000 2:4008000000000000 3:4008000000000000 5:7ff8000000000001 6:7ff0000000000000 7:c0c62a3a00000000 +result i=0 ; 0:7ff8000000000001 1:0 3:7ff8000000000001 5:0 6:0 7:0 +result i=1 ; 0:0 1:0 2:0 3:0 5:0 6:0 7:0 +result i=2 ; 0:0 1:7ff8000000000001 2:0 3:0 4:0 5:7ff8000000000001 6:0 +result i=3 ; 0:7ff8000000000001 1:0 2:0 3:0 5:7ff8000000000001 6:7ff8000000000001 7:0 +end +case agg stdvar by i - +expr stdvar by (i) (a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 1:c0c1c3ba00000000 2:8000000000000000 3:c0ccfb9e00000000 +series __name__=a,i=1,job=x ; 0:c0a7ec7800000000 1:40c90c3e00000000 2:40ba0c8c00000000 3:3ff0000000000000 4:ffe1ccf385ebc8a0 +series __name__=a,i=2,job=x ; 0:c0c7848a00000000 1:c091044000000000 2:40c9e60400000000 3:0 4:c0c3d83400000000 +series __name__=a,i=3,job=x ; 0:40cb623200000000 2:0 4:c0bba6a400000000 +series __name__=a,i=4,job=x ; 0:c0c2ffbe00000000 1:7ff0000000000000 2:4008000000000000 3:40a81eb800000000 4:c0b99e1000000000 +result i=0 ; 1:0 2:0 3:0 +result i=1 ; 0:0 1:0 2:0 3:0 4:0 +result i=2 ; 0:0 1:0 2:0 3:0 4:0 +result i=3 ; 0:0 2:0 4:0 +result i=4 ; 0:0 1:7ff8000000000001 2:0 3:0 4:0 +end +case agg stdvar by i - +expr stdvar by (i) (a) +grid 0 1000 5 +series __name__=a,i=0,job=x ; 0:408ba60000000000 1:c0ce3af000000000 2:3ff0000000000000 3:4084f8a000000000 4:c0bcb35c00000000 +series __name__=a,i=1,job=y ; 0:4008000000000000 1:40b3f9e000000000 2:c0b564f000000000 3:4008000000000000 4:c0c4f5d400000000 +series __name__=a,i=2,job=y ; 1:40c28ec600000000 2:7ff8000000000001 3:4008000000000000 +series __name__=a,i=3,job=y ; 2:40c5a69400000000 3:c0bb0c0000000000 +series __name__=a,i=4,job=y ; 1:7ff0000000000000 2:8000000000000000 3:ffe1ccf385ebc8a0 4:ffe1ccf385ebc8a0 +result i=0 ; 0:0 1:0 2:0 3:0 4:0 +result i=1 ; 0:0 1:0 2:0 3:0 4:0 +result i=2 ; 1:0 2:7ff8000000000001 3:0 +result i=3 ; 2:0 3:0 +result i=4 ; 1:7ff8000000000001 2:0 3:0 4:0 +end +case agg stdvar by i - +expr stdvar by (i) (a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 0:8000000000000000 2:c0abfbf000000000 3:40bb7fb800000000 4:3ff0000000000000 +series __name__=a,i=1,job=x ; 0:40b0d6e000000000 1:40b5c4fc00000000 2:ffe1ccf385ebc8a0 4:c0b7606c00000000 5:8000000000000000 +series __name__=a,i=2,job=y ; 1:7ff8000000000001 2:0 3:7ff8000000000001 4:c0af83a000000000 5:40c4da3a00000000 +series __name__=a,i=3,job=x ; 0:0 1:fff0000000000000 2:0 3:40c4bdce00000000 4:c0be9d2800000000 5:7ff8000000000001 +series __name__=a,i=4,job=y ; 0:c0b86a7000000000 1:0 2:8000000000000000 3:40bc7bd800000000 4:fff0000000000000 5:8000000000000000 +result i=0 ; 0:0 2:0 3:0 4:0 +result i=1 ; 0:0 1:0 2:0 4:0 5:0 +result i=2 ; 1:7ff8000000000001 2:0 3:7ff8000000000001 4:0 5:0 +result i=3 ; 0:0 1:7ff8000000000001 2:0 3:0 4:0 5:7ff8000000000001 +result i=4 ; 0:0 1:0 2:0 3:0 4:7ff8000000000001 5:0 +end +case agg stdvar by i - +expr stdvar by (i) (a) +grid 0 1000 2 +series __name__=a,i=0,job=y ; 0:7ff8000000000001 +series __name__=a,i=1,job=y ; 0:c0c98bbe00000000 1:c0b7919c00000000 +result i=0 ; 0:7ff8000000000001 +result i=1 ; 0:0 1:0 +end +case agg stdvar by i - +expr stdvar by (i) (a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 0:8000000000000000 1:40c5147a00000000 2:0 3:40c0e99000000000 4:40c140e800000000 5:4008000000000000 6:0 7:c0913cd000000000 +series __name__=a,i=1,job=y ; 0:3ff0000000000000 2:1a56e1fc2f8f359 3:4000000000000000 4:407f888000000000 5:4092c8e000000000 +series __name__=a,i=2,job=y ; 0:ffe1ccf385ebc8a0 1:40c6bf9a00000000 2:4008000000000000 3:4000000000000000 4:7ff0000000000000 5:7fe1ccf385ebc8a0 6:c0c9116800000000 7:40a5bd8800000000 +series __name__=a,i=3,job=y ; 0:40b1291400000000 1:0 2:4008000000000000 3:4000000000000000 5:4000000000000000 6:4083964000000000 7:7ff0000000000000 +series __name__=a,i=4,job=x ; 0:40bd58ec00000000 1:c085676000000000 3:0 4:c0cc89ea00000000 5:4000000000000000 6:c0a628a000000000 7:c092692000000000 +result i=0 ; 0:0 1:0 2:0 3:0 4:0 5:0 6:0 7:0 +result i=1 ; 0:0 2:0 3:0 4:0 5:0 +result i=2 ; 0:0 1:0 2:0 3:0 4:7ff8000000000001 5:0 6:0 7:0 +result i=3 ; 0:0 1:0 2:0 3:0 5:0 6:0 7:7ff8000000000001 +result i=4 ; 0:0 1:0 3:0 4:0 5:0 6:0 7:0 +end +case agg stdvar by i - +expr stdvar by (i) (a) +grid 0 1000 3 +series __name__=a,i=0,job=y ; 0:c0ce34b800000000 1:7ff0000000000000 2:4000000000000000 +series __name__=a,i=1,job=x ; 0:8000000000000000 1:40b43b4c00000000 2:c0b9677c00000000 +series __name__=a,i=2,job=x ; 0:7ff0000000000000 2:40cac5aa00000000 +result i=0 ; 0:0 1:7ff8000000000001 2:0 +result i=1 ; 0:0 1:0 2:0 +result i=2 ; 0:7ff8000000000001 2:0 +end +case agg stdvar by i - +expr stdvar by (i) (a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; 0:7ff0000000000000 +result i=0 ; 0:7ff8000000000001 +end +case agg stdvar by i - +expr stdvar by (i) (a) +grid 0 1000 1 +series __name__=a,i=0,job=x ; 0:c0c6f49a00000000 +series __name__=a,i=1,job=y ; 0:c0c4f17600000000 +series __name__=a,i=2,job=x ; 0:c05fec0000000000 +series __name__=a,i=3,job=x ; 0:fff0000000000000 +series __name__=a,i=4,job=y ; 0:40cdcad600000000 +result i=0 ; 0:0 +result i=1 ; 0:0 +result i=2 ; 0:0 +result i=3 ; 0:7ff8000000000001 +result i=4 ; 0:0 +end +case agg stdvar by i - +expr stdvar by (i) (a) +grid 0 1000 3 +series __name__=a,i=0,job=y ; 0:0 1:c09ee62000000000 2:1a56e1fc2f8f359 +series __name__=a,i=1,job=y ; 0:7fe1ccf385ebc8a0 1:40c0eda000000000 2:4008000000000000 +result i=0 ; 0:0 1:0 2:0 +result i=1 ; 0:0 1:0 2:0 +end +case agg stdvar by i - +expr stdvar by (i) (a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 0:4000000000000000 1:40c9659200000000 3:0 4:c0b09f7400000000 5:c0cb93c000000000 +result i=0 ; 0:0 1:0 3:0 4:0 5:0 +end +case agg stdvar by i - +expr stdvar by (i) (a) +grid 0 1000 5 +series __name__=a,i=0,job=x ; 0:40cc39dc00000000 1:c07a100000000000 2:7ff8000000000001 3:7ff8000000000001 4:40ca253200000000 +series __name__=a,i=1,job=x ; 0:3ff0000000000000 1:c0c13ace00000000 2:c0c9b3e000000000 3:8000000000000000 4:8000000000000000 +result i=0 ; 0:0 1:0 2:7ff8000000000001 3:7ff8000000000001 4:0 +result i=1 ; 0:0 1:0 2:0 3:0 4:0 +end +case agg quantile none - - +expr quantile (1, a) +grid 0 1000 2 +series __name__=a,i=0,job=x ; 0:7ff8000000000001 1:40cb9e5c00000000 +series __name__=a,i=1,job=y ; 1:1 +series __name__=a,i=2,job=y ; 0:8000000000000000 1:7ff8000000000001 +series __name__=a,i=3,job=y ; 0:7ff8000000000001 +scalar - ; 0:3ff0000000000000 1:3ff0000000000000 +result - ; 0:8000000000000000 1:40cb9e5c00000000 +end +case agg quantile none - - +expr quantile (scalar(q), a) +grid 0 1000 6 +series __name__=a,i=0,job=x ; 0:40bc56a800000000 1:4000000000000000 2:1a56e1fc2f8f359 3:40a2aea800000000 4:40c06d2200000000 5:7ff0000000000000 +series __name__=a,i=1,job=y ; 0:c0ce57bc00000000 2:4008000000000000 3:7ff8000000000001 +series __name__=a,i=2,job=y ; 0:4008000000000000 1:c0a2873000000000 3:7ff8000000000001 4:40ce4d8e00000000 5:c0a48c3000000000 +series __name__=a,i=3,job=y ; 1:40c8ff2400000000 2:7ff8000000000001 3:7ff8000000000001 4:7ff0000000000000 +scalar - ; 0:3ff8000000000000 1:bfe0000000000000 2:bfe0000000000000 3:0 4:3fd0000000000000 5:0 +result - ; 0:7ff0000000000000 1:fff0000000000000 2:fff0000000000000 3:7ff8000000000001 4:40c75d5800000000 5:fff8000000000000 +end +case agg quantile none - - +expr quantile (1.5, a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 0:4000000000000000 1:7ff0000000000000 2:c0c2563000000000 4:c0c5517e00000000 +series __name__=a,i=1,job=y ; 1:7fe1ccf385ebc8a0 3:c0bc8e9000000000 4:c0c5080800000000 +series __name__=a,i=2,job=x ; 0:c0b7178800000000 2:c0ca878a00000000 3:7ff0000000000000 4:4008000000000000 +scalar - ; 0:3ff8000000000000 1:3ff8000000000000 2:3ff8000000000000 3:3ff8000000000000 4:3ff8000000000000 +result - ; 0:7ff0000000000000 1:7ff0000000000000 2:7ff0000000000000 3:7ff0000000000000 4:7ff0000000000000 +end +case agg quantile none - - +expr quantile (0.25, a) +grid 0 1000 4 +series __name__=a,i=0,job=x ; 0:8000000000000000 1:c0cc7d8000000000 2:40c2dee000000000 3:0 +series __name__=a,i=1,job=y ; 0:3ff0000000000000 1:c0a36b7800000000 2:4008000000000000 3:4008000000000000 +scalar - ; 0:3fd0000000000000 1:3fd0000000000000 2:3fd0000000000000 3:3fd0000000000000 +result - ; 0:3fd0000000000000 1:c0c694d780000000 2:40a2e36000000000 3:3fe8000000000000 +end +case agg quantile none - - +expr quantile (scalar(q), a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 0:7ff8000000000001 1:3ff0000000000000 2:7ff0000000000000 3:c0c2c6a400000000 6:c0c30fc600000000 +series __name__=a,i=1,job=x ; 0:8000000000000000 1:c0b1a6b800000000 2:c0b4bfd400000000 3:40a0a8a000000000 4:7ff8000000000001 5:3ff0000000000000 6:8000000000000000 +scalar - ; 0:bfe0000000000000 1:3feccccccccccccd 2:3feccccccccccccd 3:3fe0000000000000 4:0 5:3feccccccccccccd 6:7ff8000000000001 +result - ; 0:fff0000000000000 1:c07c2f8ccccccccb 2:7ff0000000000000 3:c0ad38f800000000 4:7ff8000000000001 5:3ff0000000000000 6:7ff8000000000001 +end +case agg quantile none - - +expr quantile (scalar(q), a) +grid 0 1000 2 +series __name__=a,i=0,job=y ; 1:c0b140d000000000 +series __name__=a,i=1,job=x ; 0:7ff0000000000000 1:0 +scalar - ; 0:3feccccccccccccd 1:7ff8000000000001 +result - ; 0:fff8000000000000 1:7ff8000000000001 +end +case agg quantile none - - +expr quantile (scalar(q), a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 0:4008000000000000 1:4008000000000000 +series __name__=a,i=1,job=y ; 2:8000000000000000 +scalar - ; 0:0 1:3fe0000000000000 2:7ff8000000000001 +result - ; 0:4008000000000000 1:4008000000000000 2:7ff8000000000001 +end +case agg quantile none - - +expr quantile (0.1, a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 0:3ff0000000000000 1:c0b58e1c00000000 3:40c61a7200000000 4:c09e22f000000000 5:4008000000000000 +series __name__=a,i=1,job=y ; 1:40c9948c00000000 2:0 3:1 4:7ff8000000000001 +series __name__=a,i=2,job=x ; 1:fff0000000000000 3:7ff0000000000000 4:c0a246e000000000 5:c0c1d8e200000000 +scalar - ; 0:3fb999999999999a 1:3fb999999999999a 2:3fb999999999999a 3:3fb999999999999a 4:3fb999999999999a 5:3fb999999999999a +result - ; 0:3ff0000000000000 1:fff0000000000000 2:0 3:40a1aec19999999a 4:7ff8000000000001 5:c0c00fd833333334 +end +case agg quantile none - - +expr quantile (scalar(q), a) +grid 0 1000 7 +series __name__=a,i=0,job=x ; 0:0 1:4008000000000000 2:8000000000000000 4:7ff8000000000001 5:c0a6bb6000000000 6:0 +series __name__=a,i=1,job=x ; 0:c07de34000000000 1:7fe1ccf385ebc8a0 2:c0a0702800000000 3:c0c7692a00000000 4:fff0000000000000 5:fff0000000000000 6:fff0000000000000 +series __name__=a,i=2,job=y ; 0:7ff8000000000001 2:3ff0000000000000 3:1a56e1fc2f8f359 4:0 5:c0be6f6800000000 6:3ff0000000000000 +series __name__=a,i=3,job=y ; 0:ffe1ccf385ebc8a0 2:7ff8000000000001 3:40c8d68400000000 4:4008000000000000 5:fff0000000000000 6:c0a862b000000000 +scalar - ; 0:3ff8000000000000 1:bfe0000000000000 2:3ff0000000000000 3:3ff0000000000000 4:3ff0000000000000 5:3fe0000000000000 6:0 +result - ; 0:7ff0000000000000 1:fff0000000000000 2:3ff0000000000000 3:40c8d68400000000 4:4008000000000000 5:fff0000000000000 6:fff0000000000000 +end +case agg quantile none - - +expr quantile (1.5, a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 0:8000000000000000 1:1 3:40bbd76400000000 4:40c9914c00000000 5:7ff8000000000001 6:0 +series __name__=a,i=1,job=y ; 0:7ff8000000000001 1:40c6f78e00000000 2:7ff0000000000000 5:c0c00cb200000000 6:0 +series __name__=a,i=2,job=y ; 0:fff0000000000000 1:8000000000000000 2:3ff0000000000000 3:7ff0000000000000 4:c0c404f400000000 +scalar - ; 0:3ff8000000000000 1:3ff8000000000000 2:3ff8000000000000 3:3ff8000000000000 4:3ff8000000000000 5:3ff8000000000000 6:3ff8000000000000 +result - ; 0:7ff0000000000000 1:7ff0000000000000 2:7ff0000000000000 3:7ff0000000000000 4:7ff0000000000000 5:7ff0000000000000 6:7ff0000000000000 +end +case agg quantile none - - +expr quantile (scalar(q), a) +grid 0 1000 1 +series __name__=a,i=0,job=x ; +series __name__=a,i=1,job=x ; 0:7fe1ccf385ebc8a0 +scalar - ; 0:bfe0000000000000 +result - ; 0:fff0000000000000 +end +case agg quantile none - - +expr quantile (1.5, a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 0:ffe1ccf385ebc8a0 2:c0c916ac00000000 3:fff0000000000000 4:40b85a5000000000 +series __name__=a,i=1,job=x ; 0:7ff8000000000001 2:8000000000000000 3:c0a49ab000000000 4:7ff8000000000001 +series __name__=a,i=2,job=y ; 3:4000000000000000 4:7ff8000000000001 +series __name__=a,i=3,job=x ; 0:4000000000000000 1:40c8d03c00000000 2:7fe1ccf385ebc8a0 3:c0b557d800000000 4:c0c1739e00000000 +scalar - ; 0:3ff8000000000000 1:3ff8000000000000 2:3ff8000000000000 3:3ff8000000000000 4:3ff8000000000000 +result - ; 0:7ff0000000000000 1:7ff0000000000000 2:7ff0000000000000 3:7ff0000000000000 4:7ff0000000000000 +end +case agg quantile by job - +expr quantile by (job) (0.1, a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 1:c0ba92d800000000 2:4000000000000000 3:4008000000000000 4:c0cac21600000000 +series __name__=a,i=1,job=x ; 0:40bee0b800000000 1:fff0000000000000 2:3ff0000000000000 3:4008000000000000 4:fff0000000000000 +scalar - ; 0:3fb999999999999a 1:3fb999999999999a 2:3fb999999999999a 3:3fb999999999999a 4:3fb999999999999a +result job=x ; 0:40bee0b800000000 1:fff8000000000000 2:3ff0000000000000 3:4008000000000000 4:fff8000000000000 +result job=y ; 1:c0ba92d800000000 2:4000000000000000 3:4008000000000000 4:c0cac21600000000 +end +case agg quantile by job - +expr quantile by (job) (0, a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 0:c0cbbccc00000000 1:fff0000000000000 2:40ba665c00000000 3:0 4:7ff8000000000001 +series __name__=a,i=1,job=x ; 0:7ff8000000000001 1:1a56e1fc2f8f359 2:7ff0000000000000 +series __name__=a,i=2,job=x ; 0:7fe1ccf385ebc8a0 2:7ff8000000000001 3:40b5766c00000000 4:fff0000000000000 +series __name__=a,i=3,job=y ; 0:7ff0000000000000 1:c0c128c400000000 2:3ff0000000000000 4:40c7f45200000000 +scalar - ; 0:0 1:0 2:0 3:0 4:0 +result job=x ; 0:7ff8000000000001 1:1a56e1fc2f8f359 2:fff8000000000000 3:40b5766c00000000 4:fff8000000000000 +result job=y ; 0:fff8000000000000 1:fff0000000000000 2:3ff0000000000000 3:0 4:7ff8000000000001 +end +case agg quantile by job - +expr quantile by (job) (1.5, a) +grid 0 1000 4 +series __name__=a,i=0,job=y ; 1:7ff8000000000001 2:1 3:408bc36000000000 +series __name__=a,i=1,job=y ; 0:8000000000000000 1:4000000000000000 2:1 3:c0cd5d9200000000 +series __name__=a,i=2,job=x ; 0:40cd64b000000000 1:8000000000000000 3:0 +scalar - ; 0:3ff8000000000000 1:3ff8000000000000 2:3ff8000000000000 3:3ff8000000000000 +result job=x ; 0:7ff0000000000000 1:7ff0000000000000 3:7ff0000000000000 +result job=y ; 0:7ff0000000000000 1:7ff0000000000000 2:7ff0000000000000 3:7ff0000000000000 +end +case agg quantile by job - +expr quantile by (job) (scalar(q), a) +grid 0 1000 2 +series __name__=a,i=0,job=x ; 0:0 1:0 +series __name__=a,i=1,job=y ; 0:40b0fee000000000 1:40ce4e4600000000 +scalar - ; 0:3fd0000000000000 1:3fd0000000000000 +result job=x ; 0:0 1:0 +result job=y ; 0:40b0fee000000000 1:40ce4e4600000000 +end +case agg quantile by job - +expr quantile by (job) (0.1, a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 0:40bc838c00000000 1:c0b21a0000000000 2:fff0000000000000 3:4008000000000000 4:1a56e1fc2f8f359 +scalar - ; 0:3fb999999999999a 1:3fb999999999999a 2:3fb999999999999a 3:3fb999999999999a 4:3fb999999999999a +result job=y ; 0:40bc838c00000000 1:c0b21a0000000000 2:fff8000000000000 3:4008000000000000 4:1a56e1fc2f8f359 +end +case agg quantile by job - +expr quantile by (job) (0.1, a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 0:8000000000000000 1:c0c997ba00000000 3:4008000000000000 4:4008000000000000 5:7fe1ccf385ebc8a0 6:8000000000000000 +series __name__=a,i=1,job=y ; 0:c0cabac600000000 1:7ff8000000000001 2:c0c638fa00000000 3:c0c0e56e00000000 4:0 5:c0b5a32800000000 6:3ff0000000000000 +series __name__=a,i=2,job=x ; 0:0 2:7ff8000000000001 3:40bc768c00000000 4:40cd744e00000000 5:c086724000000000 6:7ff0000000000000 +scalar - ; 0:3fb999999999999a 1:3fb999999999999a 2:3fb999999999999a 3:3fb999999999999a 4:3fb999999999999a 5:3fb999999999999a 6:3fb999999999999a +result job=x ; 0:0 2:7ff8000000000001 3:40bc768c00000000 4:40cd744e00000000 5:c086724000000000 6:fff8000000000000 +result job=y ; 0:c0c80e7f00000000 1:7ff8000000000001 2:c0c638fa00000000 3:c0be697933333333 4:3fd3333333333334 5:7fac7b1f3cac7434 6:3fb999999999999a +end +case agg quantile by job - +expr quantile by (job) (0.9, a) +grid 0 1000 4 +series __name__=a,i=0,job=x ; 0:7ff8000000000001 1:7ff8000000000001 2:c0cb124400000000 3:ffe1ccf385ebc8a0 +scalar - ; 0:3feccccccccccccd 1:3feccccccccccccd 2:3feccccccccccccd 3:3feccccccccccccd +result job=x ; 0:7ff8000000000001 1:7ff8000000000001 2:c0cb124400000000 3:ffe1ccf385ebc8a0 +end +case agg quantile by job - +expr quantile by (job) (scalar(q), a) +grid 0 1000 5 +series __name__=a,i=0,job=x ; 0:c0c1e28000000000 1:1 2:c0c5aa7c00000000 +scalar - ; 0:3ff8000000000000 1:bfe0000000000000 2:7ff8000000000001 3:3ff8000000000000 4:3ff0000000000000 +result job=x ; 0:7ff0000000000000 1:fff0000000000000 2:7ff8000000000001 +end +case agg quantile by job - +expr quantile by (job) (0, a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 0:c0c3335a00000000 1:1a56e1fc2f8f359 2:c095eef000000000 +series __name__=a,i=1,job=x ; 1:c0c7010400000000 2:4000000000000000 4:1a56e1fc2f8f359 +series __name__=a,i=2,job=y ; 0:7ff8000000000001 1:0 2:0 3:40b0996c00000000 4:fff0000000000000 +series __name__=a,i=3,job=y ; 0:0 1:7ff8000000000001 2:40bf900400000000 3:0 4:40c1034a00000000 +scalar - ; 0:0 1:0 2:0 3:0 4:0 +result job=x ; 1:c0c7010400000000 2:4000000000000000 4:1a56e1fc2f8f359 +result job=y ; 0:7ff8000000000001 1:7ff8000000000001 2:c095eef000000000 3:0 4:fff0000000000000 +end +case agg quantile by job - +expr quantile by (job) (scalar(q), a) +grid 0 1000 4 +series __name__=a,i=0,job=y ; 1:7fe1ccf385ebc8a0 2:40c6b5b000000000 3:4008000000000000 +scalar - ; 0:3fe0000000000000 1:0 2:3ff8000000000000 3:bfe0000000000000 +result job=y ; 1:7fe1ccf385ebc8a0 2:7ff0000000000000 3:fff0000000000000 +end +case agg quantile by job - +expr quantile by (job) (0.9, a) +grid 0 1000 8 +series __name__=a,i=0,job=y ; 0:7fe1ccf385ebc8a0 1:40c4dc6e00000000 2:c0c0e51200000000 4:40901ce000000000 5:c0b4f54000000000 6:1 7:c0bb3e0800000000 +series __name__=a,i=1,job=x ; 1:0 2:4000000000000000 3:7ff0000000000000 5:4000000000000000 7:40b20d7400000000 +scalar - ; 0:3feccccccccccccd 1:3feccccccccccccd 2:3feccccccccccccd 3:3feccccccccccccd 4:3feccccccccccccd 5:3feccccccccccccd 6:3feccccccccccccd 7:3feccccccccccccd +result job=x ; 1:0 2:4000000000000000 3:fff8000000000000 5:4000000000000000 7:40b20d7400000000 +result job=y ; 0:7fe1ccf385ebc8a0 1:40c4dc6e00000000 2:c0c0e51200000000 4:40901ce000000000 5:c0b4f54000000000 6:1 7:c0bb3e0800000000 +end +case agg quantile by job - +expr quantile by (job) (1.5, a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 0:c0cc2ad000000000 1:4000000000000000 2:fff0000000000000 4:7ff8000000000001 5:1 6:0 7:40c6520400000000 +series __name__=a,i=1,job=y ; 0:3ff0000000000000 1:c091b06000000000 3:40c47ecc00000000 4:1a56e1fc2f8f359 6:7ff0000000000000 +series __name__=a,i=2,job=x ; 0:0 1:4008000000000000 2:40ba9c9000000000 4:c0cd107000000000 5:3ff0000000000000 6:3ff0000000000000 7:40cd4bd600000000 +series __name__=a,i=3,job=y ; 0:40ca7e1e00000000 1:0 2:ffe1ccf385ebc8a0 3:40bd9b9000000000 4:3ff0000000000000 6:8000000000000000 7:7ff8000000000001 +scalar - ; 0:3ff8000000000000 1:3ff8000000000000 2:3ff8000000000000 3:3ff8000000000000 4:3ff8000000000000 5:3ff8000000000000 6:3ff8000000000000 7:3ff8000000000000 +result job=x ; 0:7ff0000000000000 1:7ff0000000000000 2:7ff0000000000000 4:7ff0000000000000 5:7ff0000000000000 6:7ff0000000000000 7:7ff0000000000000 +result job=y ; 0:7ff0000000000000 1:7ff0000000000000 2:7ff0000000000000 3:7ff0000000000000 4:7ff0000000000000 6:7ff0000000000000 7:7ff0000000000000 +end +case agg quantile without i - +expr quantile without (i) (scalar(q), a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; 0:c0bc320800000000 +series __name__=a,i=1,job=x ; 0:0 +series __name__=a,i=2,job=x ; 0:0 +series __name__=a,i=3,job=y ; 0:8000000000000000 +scalar - ; 0:7ff8000000000001 +result job=x ; 0:7ff8000000000001 +result job=y ; 0:7ff8000000000001 +end +case agg quantile without i - +expr quantile without (i) (0, a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 0:ffe1ccf385ebc8a0 1:fff0000000000000 3:4000000000000000 4:40bdb43000000000 +series __name__=a,i=1,job=y ; 0:c0ac911800000000 2:7ff8000000000001 4:3ff0000000000000 +series __name__=a,i=2,job=y ; 0:0 1:c0c9b80800000000 2:40c83bb400000000 3:40c9f05a00000000 4:40864f0000000000 +scalar - ; 0:0 1:0 2:0 3:0 4:0 +result job=y ; 0:ffe1ccf385ebc8a0 1:fff0000000000000 2:7ff8000000000001 3:4000000000000000 4:3ff0000000000000 +end +case agg quantile without i - +expr quantile without (i) (scalar(q), a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 1:7ff8000000000001 3:4008000000000000 4:4000000000000000 5:40c3390800000000 6:4008000000000000 7:c09d830000000000 +series __name__=a,i=1,job=x ; 0:ffe1ccf385ebc8a0 1:3ff0000000000000 2:40cc3fd400000000 3:3ff0000000000000 6:40a345e000000000 +scalar - ; 0:7ff8000000000001 1:3feccccccccccccd 2:7ff8000000000001 3:3ff8000000000000 4:7ff8000000000001 5:3fe0000000000000 6:7ff8000000000001 7:3feccccccccccccd +result job=x ; 0:7ff8000000000001 1:7ff8000000000001 2:7ff8000000000001 3:7ff0000000000000 4:7ff8000000000001 5:40c3390800000000 6:7ff8000000000001 7:c09d830000000000 +end +case agg quantile without i - +expr quantile without (i) (NaN, a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 0:fff0000000000000 1:c0b6fcb000000000 2:c0b2b2e400000000 3:4008000000000000 4:40cd47a000000000 5:3ff0000000000000 6:0 +series __name__=a,i=1,job=x ; 0:c087d80000000000 1:4000000000000000 2:c0c4b3e400000000 4:4008000000000000 5:7ff8000000000001 6:c0a288a000000000 +scalar - ; 0:7ff8000000000001 1:7ff8000000000001 2:7ff8000000000001 3:7ff8000000000001 4:7ff8000000000001 5:7ff8000000000001 6:7ff8000000000001 +result job=x ; 0:7ff8000000000001 1:7ff8000000000001 2:7ff8000000000001 4:7ff8000000000001 5:7ff8000000000001 6:7ff8000000000001 +result job=y ; 0:7ff8000000000001 1:7ff8000000000001 2:7ff8000000000001 3:7ff8000000000001 4:7ff8000000000001 5:7ff8000000000001 6:7ff8000000000001 +end +case agg quantile without i - +expr quantile without (i) (0.75, a) +grid 0 1000 2 +series __name__=a,i=0,job=y ; 0:4000000000000000 1:3ff0000000000000 +series __name__=a,i=1,job=x ; 0:7ff8000000000001 +series __name__=a,i=2,job=x ; 0:4008000000000000 +series __name__=a,i=3,job=x ; 0:c0b4075000000000 1:c0c8038400000000 +scalar - ; 0:3fe8000000000000 1:3fe8000000000000 +result job=x ; 0:c0a4045000000000 1:c0c8038400000000 +result job=y ; 0:4000000000000000 1:3ff0000000000000 +end +case agg quantile without i - +expr quantile without (i) (scalar(q), a) +grid 0 1000 7 +series __name__=a,i=0,job=x ; 0:7ff8000000000001 1:4008000000000000 3:1 4:7ff8000000000001 +series __name__=a,i=1,job=y ; 0:40c4725200000000 1:40c00e4000000000 3:4008000000000000 6:c051120000000000 +series __name__=a,i=2,job=y ; 0:4008000000000000 5:c0bfe23c00000000 +scalar - ; 0:3ff0000000000000 1:3feccccccccccccd 2:0 3:0 4:3fd0000000000000 5:3fd0000000000000 6:3ff8000000000000 +result job=x ; 0:7ff8000000000001 1:4008000000000000 3:1 4:7ff8000000000001 +result job=y ; 0:40c4725200000000 1:40c00e4000000000 3:4008000000000000 5:c0bfe23c00000000 6:7ff0000000000000 +end +case agg quantile without i - +expr quantile without (i) (0.75, a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 0:7ff8000000000001 1:1 2:4000000000000000 3:fff0000000000000 4:c0ca50e200000000 5:8000000000000000 +scalar - ; 0:3fe8000000000000 1:3fe8000000000000 2:3fe8000000000000 3:3fe8000000000000 4:3fe8000000000000 5:3fe8000000000000 6:3fe8000000000000 +result job=y ; 0:7ff8000000000001 1:1 2:4000000000000000 3:fff8000000000000 4:c0ca50e200000000 5:8000000000000000 +end +case agg quantile without i - +expr quantile without (i) (scalar(q), a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 0:c0bf679000000000 1:c09dd4b000000000 +series __name__=a,i=1,job=y ; 1:fff0000000000000 +scalar - ; 0:3fe0000000000000 1:bfe0000000000000 2:3fd0000000000000 +result job=x ; 0:c0bf679000000000 1:fff0000000000000 +result job=y ; 1:fff0000000000000 +end +case agg quantile without i - +expr quantile without (i) (0.9, a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 2:c077028000000000 3:ffe1ccf385ebc8a0 4:40c800da00000000 5:ffe1ccf385ebc8a0 +series __name__=a,i=1,job=x ; 1:c0ab2ea800000000 2:40c4063000000000 3:7ff8000000000001 4:7ff0000000000000 5:c0bdd80c00000000 6:40b0a16800000000 +series __name__=a,i=2,job=y ; 0:c0c4e06600000000 1:40bbac5000000000 3:0 5:40bfc85400000000 6:3ff0000000000000 +series __name__=a,i=3,job=y ; 0:3ff0000000000000 1:c0be6ff400000000 2:c09019c000000000 3:3ff0000000000000 4:c0b464a400000000 5:40888d6000000000 +scalar - ; 0:3feccccccccccccd 1:3feccccccccccccd 2:3feccccccccccccd 3:3feccccccccccccd 4:3feccccccccccccd 5:3feccccccccccccd 6:3feccccccccccccd +result job=x ; 1:c0ab2ea800000000 2:40c4063000000000 3:7ff8000000000001 4:fff8000000000000 5:c0bdd80c00000000 6:40b0a16800000000 +result job=y ; 0:c090afeb33333332 1:40b5dcaf9999999a 2:c07b262666666666 3:3fe999999999999a 4:40c495559999999a 5:40ba0a3266666666 6:3ff0000000000000 +end +case agg quantile without i - +expr quantile without (i) (scalar(q), a) +grid 0 1000 4 +series __name__=a,i=0,job=x ; 0:40babaac00000000 1:1 2:fff0000000000000 3:c0ca81e800000000 +series __name__=a,i=1,job=x ; 0:40a52ea000000000 2:7ff0000000000000 3:7ff8000000000001 +scalar - ; 0:3feccccccccccccd 1:3ff0000000000000 2:7ff8000000000001 3:7ff8000000000001 +result job=x ; 0:40b91d8933333334 1:1 2:7ff8000000000001 3:7ff8000000000001 +end +case agg quantile without i - +expr quantile without (i) (0.75, a) +grid 0 1000 4 +series __name__=a,i=0,job=y ; 2:7ff8000000000001 3:40c365c000000000 +series __name__=a,i=1,job=x ; 0:40c9183000000000 1:c0c25c6a00000000 3:c0cc3d0000000000 +scalar - ; 0:3fe8000000000000 1:3fe8000000000000 2:3fe8000000000000 3:3fe8000000000000 +result job=x ; 0:40c9183000000000 1:c0c25c6a00000000 3:c0cc3d0000000000 +result job=y ; 2:7ff8000000000001 3:40c365c000000000 +end +case agg quantile without i - +expr quantile without (i) (1, a) +grid 0 1000 8 +series __name__=a,i=0,job=y ; 0:c0cbcc3a00000000 2:40c329a200000000 3:0 4:0 6:c0c9376c00000000 +series __name__=a,i=1,job=x ; 1:4000000000000000 2:c0a255a000000000 3:c0cc6eec00000000 4:40c5c94c00000000 5:0 6:408aa6a000000000 +scalar - ; 0:3ff0000000000000 1:3ff0000000000000 2:3ff0000000000000 3:3ff0000000000000 4:3ff0000000000000 5:3ff0000000000000 6:3ff0000000000000 7:3ff0000000000000 +result job=x ; 1:4000000000000000 2:c0a255a000000000 3:c0cc6eec00000000 4:40c5c94c00000000 5:0 6:408aa6a000000000 +result job=y ; 0:c0cbcc3a00000000 2:40c329a200000000 3:0 4:0 6:c0c9376c00000000 +end +case agg quantile by i - +expr quantile by (i) (scalar(q), a) +grid 0 1000 4 +series __name__=a,i=0,job=x ; +series __name__=a,i=1,job=x ; 0:0 1:40cd0d3000000000 2:1a56e1fc2f8f359 3:7ff8000000000001 +scalar - ; 0:3ff8000000000000 1:3fd0000000000000 2:3ff8000000000000 3:bfe0000000000000 +result i=1 ; 0:7ff0000000000000 1:40cd0d3000000000 2:7ff0000000000000 3:fff0000000000000 +end +case agg quantile by i - +expr quantile by (i) (-0.5, a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 1:0 2:c074278000000000 +series __name__=a,i=1,job=y ; 0:4000000000000000 1:8000000000000000 2:40c00a8800000000 +series __name__=a,i=2,job=y ; 0:7ff8000000000001 1:40b8654000000000 +scalar - ; 0:bfe0000000000000 1:bfe0000000000000 2:bfe0000000000000 +result i=0 ; 1:fff0000000000000 2:fff0000000000000 +result i=1 ; 0:fff0000000000000 1:fff0000000000000 2:fff0000000000000 +result i=2 ; 0:fff0000000000000 1:fff0000000000000 +end +case agg quantile by i - +expr quantile by (i) (0.5, a) +grid 0 1000 2 +series __name__=a,i=0,job=y ; 1:40ce82c400000000 +series __name__=a,i=1,job=y ; 0:408497a000000000 1:40cc3d1a00000000 +series __name__=a,i=2,job=x ; 0:40b00d0000000000 1:c0c5c04400000000 +series __name__=a,i=3,job=x ; 0:7ff8000000000001 1:c0a9af2800000000 +scalar - ; 0:3fe0000000000000 1:3fe0000000000000 +result i=0 ; 1:40ce82c400000000 +result i=1 ; 0:408497a000000000 1:40cc3d1a00000000 +result i=2 ; 0:40b00d0000000000 1:c0c5c04400000000 +result i=3 ; 0:7ff8000000000001 1:c0a9af2800000000 +end +case agg quantile by i - +expr quantile by (i) (0.9, a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; 0:c0bb3e9400000000 +series __name__=a,i=1,job=y ; 0:3ff0000000000000 +series __name__=a,i=2,job=x ; 0:c0c4d78600000000 +series __name__=a,i=3,job=y ; 0:0 +scalar - ; 0:3feccccccccccccd +result i=0 ; 0:c0bb3e9400000000 +result i=1 ; 0:3ff0000000000000 +result i=2 ; 0:c0c4d78600000000 +result i=3 ; 0:0 +end +case agg quantile by i - +expr quantile by (i) (scalar(q), a) +grid 0 1000 2 +series __name__=a,i=0,job=x ; 0:40b6d41000000000 1:c088468000000000 +series __name__=a,i=1,job=y ; 0:40c9a45400000000 1:40aa2ee800000000 +series __name__=a,i=2,job=y ; 0:40c5ce2a00000000 1:7ff8000000000001 +series __name__=a,i=3,job=y ; 0:7ff8000000000001 1:7ff8000000000001 +series __name__=a,i=4,job=x ; 0:ffe1ccf385ebc8a0 1:1a56e1fc2f8f359 +scalar - ; 0:3ff0000000000000 1:0 +result i=0 ; 0:40b6d41000000000 1:c088468000000000 +result i=1 ; 0:40c9a45400000000 1:40aa2ee800000000 +result i=2 ; 0:40c5ce2a00000000 1:7ff8000000000001 +result i=3 ; 0:7ff8000000000001 1:7ff8000000000001 +result i=4 ; 0:ffe1ccf385ebc8a0 1:1a56e1fc2f8f359 +end +case agg quantile by i - +expr quantile by (i) (0.5, a) +grid 0 1000 3 +series __name__=a,i=0,job=y ; 0:1 1:3ff0000000000000 2:409fa10000000000 +series __name__=a,i=1,job=y ; 1:0 2:7fe1ccf385ebc8a0 +scalar - ; 0:3fe0000000000000 1:3fe0000000000000 2:3fe0000000000000 +result i=0 ; 0:1 1:3ff0000000000000 2:409fa10000000000 +result i=1 ; 1:0 2:7fe1ccf385ebc8a0 +end +case agg quantile by i - +expr quantile by (i) (0.5, a) +grid 0 1000 4 +series __name__=a,i=0,job=x ; 1:7fe1ccf385ebc8a0 3:40c2c72200000000 +series __name__=a,i=1,job=x ; 0:40b5884c00000000 2:fff0000000000000 3:7ff0000000000000 +series __name__=a,i=2,job=x ; 0:40b1044c00000000 1:7fe1ccf385ebc8a0 2:7ff0000000000000 3:7ff8000000000001 +series __name__=a,i=3,job=x ; 0:c0c643f200000000 1:3ff0000000000000 2:7ff8000000000001 3:40ab7a8000000000 +scalar - ; 0:3fe0000000000000 1:3fe0000000000000 2:3fe0000000000000 3:3fe0000000000000 +result i=0 ; 1:7fe1ccf385ebc8a0 3:40c2c72200000000 +result i=1 ; 0:40b5884c00000000 2:fff8000000000000 3:fff8000000000000 +result i=2 ; 0:40b1044c00000000 1:7fe1ccf385ebc8a0 2:fff8000000000000 3:7ff8000000000001 +result i=3 ; 0:c0c643f200000000 1:3ff0000000000000 2:7ff8000000000001 3:40ab7a8000000000 +end +case agg quantile by i - +expr quantile by (i) (1, a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 1:0 2:3ff0000000000000 +series __name__=a,i=1,job=y ; 0:ffe1ccf385ebc8a0 1:4000000000000000 +scalar - ; 0:3ff0000000000000 1:3ff0000000000000 2:3ff0000000000000 +result i=0 ; 1:0 2:3ff0000000000000 +result i=1 ; 0:ffe1ccf385ebc8a0 1:4000000000000000 +end +case agg quantile by i - +expr quantile by (i) (0.5, a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 0:3ff0000000000000 1:4008000000000000 2:ffe1ccf385ebc8a0 +series __name__=a,i=1,job=y ; 0:1 1:1a56e1fc2f8f359 2:c0b747a800000000 3:40c7435a00000000 4:ffe1ccf385ebc8a0 5:7ff8000000000001 +scalar - ; 0:3fe0000000000000 1:3fe0000000000000 2:3fe0000000000000 3:3fe0000000000000 4:3fe0000000000000 5:3fe0000000000000 +result i=0 ; 0:3ff0000000000000 1:4008000000000000 2:ffe1ccf385ebc8a0 +result i=1 ; 0:1 1:1a56e1fc2f8f359 2:c0b747a800000000 3:40c7435a00000000 4:ffe1ccf385ebc8a0 5:7ff8000000000001 +end +case agg quantile by i - +expr quantile by (i) (scalar(q), a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; 0:c0abfcb800000000 +series __name__=a,i=1,job=y ; 0:c0c107fa00000000 +series __name__=a,i=2,job=x ; 0:40c3f39e00000000 +series __name__=a,i=3,job=x ; 0:7ff8000000000001 +series __name__=a,i=4,job=y ; 0:c0b0fd1800000000 +scalar - ; 0:3ff0000000000000 +result i=0 ; 0:c0abfcb800000000 +result i=1 ; 0:c0c107fa00000000 +result i=2 ; 0:40c3f39e00000000 +result i=3 ; 0:7ff8000000000001 +result i=4 ; 0:c0b0fd1800000000 +end +case agg quantile by i - +expr quantile by (i) (0.25, a) +grid 0 1000 7 +series __name__=a,i=0,job=x ; 0:ffe1ccf385ebc8a0 2:c0ab1df000000000 3:40c7c01600000000 4:fff0000000000000 5:40b6779800000000 +series __name__=a,i=1,job=x ; 1:40bb8db000000000 2:4000000000000000 3:4008000000000000 4:c0c0d92a00000000 5:c0bf439c00000000 6:40b6fdc000000000 +series __name__=a,i=2,job=y ; 0:0 1:40a16bd000000000 2:40c8753e00000000 3:fff0000000000000 4:4008000000000000 5:c0bd146800000000 6:40b75b3800000000 +series __name__=a,i=3,job=y ; 0:40c6170400000000 1:c0bf513000000000 2:c0b0b5b400000000 3:40a24aa800000000 4:0 5:7fe1ccf385ebc8a0 6:0 +scalar - ; 0:3fd0000000000000 1:3fd0000000000000 2:3fd0000000000000 3:3fd0000000000000 4:3fd0000000000000 5:3fd0000000000000 6:3fd0000000000000 +result i=0 ; 0:ffe1ccf385ebc8a0 2:c0ab1df000000000 3:40c7c01600000000 4:fff8000000000000 5:40b6779800000000 +result i=1 ; 1:40bb8db000000000 2:4000000000000000 3:4008000000000000 4:c0c0d92a00000000 5:c0bf439c00000000 6:40b6fdc000000000 +result i=2 ; 0:0 1:40a16bd000000000 2:40c8753e00000000 3:fff8000000000000 4:4008000000000000 5:c0bd146800000000 6:40b75b3800000000 +result i=3 ; 0:40c6170400000000 1:c0bf513000000000 2:c0b0b5b400000000 3:40a24aa800000000 4:0 5:7fe1ccf385ebc8a0 6:0 +end +case agg quantile by i - +expr quantile by (i) (0.5, a) +grid 0 1000 2 +series __name__=a,i=0,job=x ; 0:7ff0000000000000 1:4000000000000000 +series __name__=a,i=1,job=x ; 0:1 +series __name__=a,i=2,job=y ; 1:7fe1ccf385ebc8a0 +scalar - ; 0:3fe0000000000000 1:3fe0000000000000 +result i=0 ; 0:fff8000000000000 1:4000000000000000 +result i=1 ; 0:1 +result i=2 ; 1:7fe1ccf385ebc8a0 +end +case agg count_values none - job +expr count_values ("job", a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 1:ffe1ccf385ebc8a0 2:4096b48000000000 3:c0c70dca00000000 4:c0b84f8800000000 5:c0b45f1c00000000 6:0 7:1 +series __name__=a,i=1,job=y ; 0:c0cc34ce00000000 1:7ff8000000000001 2:7ff8000000000001 3:3ff0000000000000 4:fff0000000000000 5:40847e0000000000 6:0 7:c0c9b97800000000 +result job=-100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ; 1:3ff0000000000000 +result job=-11803.578125 ; 3:3ff0000000000000 +result job=-13170.9375 ; 7:3ff0000000000000 +result job=-14441.609375 ; 0:3ff0000000000000 +result job=-5215.109375 ; 5:3ff0000000000000 +result job=-6223.53125 ; 4:3ff0000000000000 +result job=-Inf ; 4:3ff0000000000000 +result job=0 ; 6:4000000000000000 +result job=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005 ; 7:3ff0000000000000 +result job=1 ; 3:3ff0000000000000 +result job=1453.125 ; 2:3ff0000000000000 +result job=655.75 ; 5:3ff0000000000000 +result job=NaN ; 1:3ff0000000000000 2:3ff0000000000000 +end +case agg count_values none - value +expr count_values ("value", a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 0:7ff8000000000001 1:4000000000000000 2:7ff8000000000001 3:3ff0000000000000 5:7ff0000000000000 6:c0ca32d800000000 +result value=+Inf ; 5:3ff0000000000000 +result value=-13413.6875 ; 6:3ff0000000000000 +result value=1 ; 3:3ff0000000000000 +result value=2 ; 1:3ff0000000000000 +result value=NaN ; 0:3ff0000000000000 2:3ff0000000000000 +end +case agg count_values none - job +expr count_values ("job", a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 0:0 1:c0c69bf600000000 2:40c1002c00000000 3:1a56e1fc2f8f359 4:c0b9a9f000000000 +series __name__=a,i=1,job=y ; 0:0 1:7ff8000000000001 2:c0c6950600000000 3:40c431fc00000000 4:ffe1ccf385ebc8a0 5:7ff8000000000001 +series __name__=a,i=2,job=y ; 0:0 2:4000000000000000 3:c0a084d000000000 4:c0afbef800000000 5:0 +series __name__=a,i=3,job=x ; 0:1a56e1fc2f8f359 1:c0bfdd5800000000 3:40a2535000000000 4:4000000000000000 5:c0bb2f7000000000 +result job=-100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ; 4:3ff0000000000000 +result job=-11562.046875 ; 2:3ff0000000000000 +result job=-11575.921875 ; 1:3ff0000000000000 +result job=-2114.40625 ; 3:3ff0000000000000 +result job=-4063.484375 ; 4:3ff0000000000000 +result job=-6569.9375 ; 4:3ff0000000000000 +result job=-6959.4375 ; 5:3ff0000000000000 +result job=-8157.34375 ; 1:3ff0000000000000 +result job=0 ; 0:4008000000000000 5:3ff0000000000000 +result job=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 ; 0:3ff0000000000000 3:3ff0000000000000 +result job=10339.96875 ; 3:3ff0000000000000 +result job=2 ; 2:3ff0000000000000 4:3ff0000000000000 +result job=2345.65625 ; 3:3ff0000000000000 +result job=8704.34375 ; 2:3ff0000000000000 +result job=NaN ; 1:3ff0000000000000 5:3ff0000000000000 +end +case agg count_values none - value +expr count_values ("value", a) +grid 0 1000 1 +series __name__=a,i=0,job=x ; 0:40b80e2800000000 +result value=6158.15625 ; 0:3ff0000000000000 +end +case agg count_values none - value +expr count_values ("value", a) +grid 0 1000 1 +series __name__=a,i=0,job=x ; +series __name__=a,i=1,job=x ; 0:40c4e0d200000000 +series __name__=a,i=2,job=x ; 0:c0cd186600000000 +series __name__=a,i=3,job=y ; +series __name__=a,i=4,job=x ; 0:c0a2c91000000000 +result value=-14896.796875 ; 0:3ff0000000000000 +result value=-2404.53125 ; 0:3ff0000000000000 +result value=10689.640625 ; 0:3ff0000000000000 +end +case agg count_values none - job +expr count_values ("job", a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 1:c0be93a800000000 2:c0c7795e00000000 3:40aec96000000000 4:7ff8000000000001 5:c0c2970200000000 +series __name__=a,i=1,job=x ; 1:fff0000000000000 2:40c2d9aa00000000 3:0 4:408b9ee000000000 5:4000000000000000 +series __name__=a,i=2,job=x ; 0:40b80f1c00000000 2:c0c95a8000000000 3:7ff8000000000001 4:4008000000000000 5:3ff0000000000000 +series __name__=a,i=3,job=y ; 1:40c1726000000000 2:7fe1ccf385ebc8a0 4:7fe1ccf385ebc8a0 5:7ff8000000000001 +series __name__=a,i=4,job=x ; 0:4000000000000000 1:c0c0c96200000000 2:c038640000000000 3:1a56e1fc2f8f359 4:fff0000000000000 5:3ff0000000000000 +result job=-12018.734375 ; 2:3ff0000000000000 +result job=-12981 ; 2:3ff0000000000000 +result job=-24.390625 ; 2:3ff0000000000000 +result job=-7827.65625 ; 1:3ff0000000000000 +result job=-8594.765625 ; 1:3ff0000000000000 +result job=-9518.015625 ; 5:3ff0000000000000 +result job=-Inf ; 1:3ff0000000000000 4:3ff0000000000000 +result job=0 ; 3:3ff0000000000000 +result job=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 ; 3:3ff0000000000000 +result job=1 ; 5:4000000000000000 +result job=100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ; 2:3ff0000000000000 4:3ff0000000000000 +result job=2 ; 0:3ff0000000000000 5:3ff0000000000000 +result job=3 ; 4:3ff0000000000000 +result job=3940.6875 ; 3:3ff0000000000000 +result job=6159.109375 ; 0:3ff0000000000000 +result job=883.859375 ; 4:3ff0000000000000 +result job=8932.75 ; 1:3ff0000000000000 +result job=9651.328125 ; 2:3ff0000000000000 +result job=NaN ; 3:3ff0000000000000 4:3ff0000000000000 5:3ff0000000000000 +end +case agg count_values none - job +expr count_values ("job", a) +grid 0 1000 2 +series __name__=a,i=0,job=x ; 0:7ff0000000000000 +series __name__=a,i=1,job=y ; 0:c0c40f8a00000000 1:7ff8000000000001 +result job=+Inf ; 0:3ff0000000000000 +result job=-10271.078125 ; 0:3ff0000000000000 +result job=NaN ; 1:3ff0000000000000 +end +case agg count_values none - value +expr count_values ("value", a) +grid 0 1000 4 +series __name__=a,i=0,job=x ; 0:c0a350c800000000 1:4000000000000000 2:4008000000000000 +series __name__=a,i=1,job=x ; 1:4090b2c000000000 2:0 3:c0ccb91000000000 +series __name__=a,i=2,job=x ; 0:40a4315000000000 1:c0ce5d3800000000 2:40cb336a00000000 3:fff0000000000000 +series __name__=a,i=3,job=y ; 0:4000000000000000 1:7ff0000000000000 2:c0c0b58a00000000 +result value=+Inf ; 1:3ff0000000000000 +result value=-14706.125 ; 3:3ff0000000000000 +result value=-15546.4375 ; 1:3ff0000000000000 +result value=-2472.390625 ; 0:3ff0000000000000 +result value=-8555.078125 ; 2:3ff0000000000000 +result value=-Inf ; 3:3ff0000000000000 +result value=0 ; 2:3ff0000000000000 +result value=1068.6875 ; 1:3ff0000000000000 +result value=13926.828125 ; 2:3ff0000000000000 +result value=2 ; 0:3ff0000000000000 1:3ff0000000000000 +result value=2584.65625 ; 0:3ff0000000000000 +result value=3 ; 2:3ff0000000000000 +end +case agg count_values none - value +expr count_values ("value", a) +grid 0 1000 5 +series __name__=a,i=0,job=x ; 0:4083e3a000000000 2:40b31f1000000000 3:4008000000000000 4:40c128a400000000 +result value=3 ; 3:3ff0000000000000 +result value=4895.0625 ; 2:3ff0000000000000 +result value=636.453125 ; 0:3ff0000000000000 +result value=8785.28125 ; 4:3ff0000000000000 +end +case agg count_values none - value +expr count_values ("value", a) +grid 0 1000 2 +series __name__=a,i=0,job=y ; 0:40bbbc7c00000000 +series __name__=a,i=1,job=y ; 0:c0b1e3e000000000 1:3ff0000000000000 +series __name__=a,i=2,job=y ; 0:0 +series __name__=a,i=3,job=x ; 0:40c38f7c00000000 1:c0c5a63a00000000 +result value=-11084.453125 ; 1:3ff0000000000000 +result value=-4579.875 ; 0:3ff0000000000000 +result value=0 ; 0:3ff0000000000000 +result value=1 ; 1:3ff0000000000000 +result value=10014.96875 ; 0:3ff0000000000000 +result value=7100.484375 ; 0:3ff0000000000000 +end +case agg count_values none - job +expr count_values ("job", a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 0:8000000000000000 1:c0c77aea00000000 +series __name__=a,i=1,job=x ; 0:4000000000000000 1:409805f000000000 2:4008000000000000 4:7ff8000000000001 +series __name__=a,i=2,job=x ; 0:0 1:7ff8000000000001 3:7ff8000000000001 4:c0beb6d400000000 +series __name__=a,i=3,job=y ; 0:4000000000000000 2:c0c17a0c00000000 3:8000000000000000 4:c0b9924c00000000 +result job=-0 ; 0:3ff0000000000000 3:3ff0000000000000 +result job=-12021.828125 ; 1:3ff0000000000000 +result job=-6546.296875 ; 4:3ff0000000000000 +result job=-7862.828125 ; 4:3ff0000000000000 +result job=-8948.09375 ; 2:3ff0000000000000 +result job=0 ; 0:3ff0000000000000 +result job=1537.484375 ; 1:3ff0000000000000 +result job=2 ; 0:4000000000000000 +result job=3 ; 2:3ff0000000000000 +result job=NaN ; 1:3ff0000000000000 3:3ff0000000000000 4:3ff0000000000000 +end +case agg count_values none - value +expr count_values ("value", a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; 0:40a64fe800000000 +series __name__=a,i=1,job=y ; +series __name__=a,i=2,job=x ; 0:0 +result value=0 ; 0:3ff0000000000000 +result value=2855.953125 ; 0:3ff0000000000000 +end +case agg count_values by job value +expr count_values by (job) ("value", a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 0:c0a53ce000000000 1:c0cc7ef200000000 3:c0c858e400000000 6:c0c8fba800000000 7:40c1f36200000000 +series __name__=a,i=1,job=y ; 0:c0c0595200000000 1:c0c8d72800000000 2:7ff8000000000001 3:c0cdd35800000000 4:c0a8001800000000 5:0 6:0 7:8000000000000000 +series __name__=a,i=2,job=y ; 2:0 3:4000000000000000 4:40c3764c00000000 5:4000000000000000 7:0 +series __name__=a,i=3,job=x ; 0:7ff8000000000001 1:4008000000000000 3:40b4f44400000000 4:c0c10e1a00000000 5:40b17d0000000000 6:7ff8000000000001 +result job=x,value=-12465.78125 ; 3:3ff0000000000000 +result job=x,value=-12791.3125 ; 6:3ff0000000000000 +result job=x,value=-14589.890625 ; 1:3ff0000000000000 +result job=x,value=-2718.4375 ; 0:3ff0000000000000 +result job=x,value=-8732.203125 ; 4:3ff0000000000000 +result job=x,value=3 ; 1:3ff0000000000000 +result job=x,value=4477 ; 5:3ff0000000000000 +result job=x,value=5364.265625 ; 3:3ff0000000000000 +result job=x,value=9190.765625 ; 7:3ff0000000000000 +result job=x,value=NaN ; 0:3ff0000000000000 6:3ff0000000000000 +result job=y,value=-0 ; 7:3ff0000000000000 +result job=y,value=-12718.3125 ; 1:3ff0000000000000 +result job=y,value=-15270.6875 ; 3:3ff0000000000000 +result job=y,value=-3072.046875 ; 4:3ff0000000000000 +result job=y,value=-8370.640625 ; 0:3ff0000000000000 +result job=y,value=0 ; 2:3ff0000000000000 5:3ff0000000000000 6:3ff0000000000000 7:3ff0000000000000 +result job=y,value=2 ; 3:3ff0000000000000 5:3ff0000000000000 +result job=y,value=9964.59375 ; 4:3ff0000000000000 +result job=y,value=NaN ; 2:3ff0000000000000 +end +case agg count_values by job __name__ +expr count_values by (job) ("__name__", a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 1:4000000000000000 2:1 3:0 4:0 +series __name__=a,i=1,job=x ; 0:3ff0000000000000 1:40c815ea00000000 3:4091b2a000000000 4:1 5:40a2421800000000 +result __name__=0,job=y ; 3:3ff0000000000000 4:3ff0000000000000 +result __name__=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005,job=x ; 4:3ff0000000000000 +result __name__=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005,job=y ; 2:3ff0000000000000 +result __name__=1,job=x ; 0:3ff0000000000000 +result __name__=1132.65625,job=x ; 3:3ff0000000000000 +result __name__=12331.828125,job=x ; 1:3ff0000000000000 +result __name__=2,job=y ; 1:3ff0000000000000 +result __name__=2337.046875,job=x ; 5:3ff0000000000000 +end +case agg count_values by job value +expr count_values by (job) ("value", a) +grid 0 1000 6 +series __name__=a,i=0,job=x ; 0:7ff8000000000001 1:c085538000000000 2:7fe1ccf385ebc8a0 3:c0aba9d000000000 5:7ff0000000000000 +series __name__=a,i=1,job=y ; 0:0 1:1a56e1fc2f8f359 2:c0c233cc00000000 4:0 5:4000000000000000 +series __name__=a,i=2,job=y ; 0:40a8546800000000 1:4000000000000000 4:7ff8000000000001 +result job=x,value=+Inf ; 5:3ff0000000000000 +result job=x,value=-3540.90625 ; 3:3ff0000000000000 +result job=x,value=-682.4375 ; 1:3ff0000000000000 +result job=x,value=100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ; 2:3ff0000000000000 +result job=x,value=NaN ; 0:3ff0000000000000 +result job=y,value=-9319.59375 ; 2:3ff0000000000000 +result job=y,value=0 ; 0:3ff0000000000000 4:3ff0000000000000 +result job=y,value=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 ; 1:3ff0000000000000 +result job=y,value=2 ; 1:3ff0000000000000 5:3ff0000000000000 +result job=y,value=3114.203125 ; 0:3ff0000000000000 +result job=y,value=NaN ; 4:3ff0000000000000 +end +case agg count_values by job job +expr count_values by (job) ("job", a) +grid 0 1000 2 +series __name__=a,i=0,job=y ; 0:40a4529800000000 1:1a56e1fc2f8f359 +series __name__=a,i=1,job=x ; 0:407e2f0000000000 1:1 +series __name__=a,i=2,job=y ; 1:8000000000000000 +series __name__=a,i=3,job=x ; 0:3ff0000000000000 1:7ff8000000000001 +result job=-0 ; 1:3ff0000000000000 +result job=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005 ; 1:3ff0000000000000 +result job=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 ; 1:3ff0000000000000 +result job=1 ; 0:3ff0000000000000 +result job=2601.296875 ; 0:3ff0000000000000 +result job=482.9375 ; 0:3ff0000000000000 +result job=NaN ; 1:3ff0000000000000 +end +case agg count_values by job job +expr count_values by (job) ("job", a) +grid 0 1000 5 +series __name__=a,i=0,job=x ; 0:4000000000000000 1:40cd4bf000000000 3:40b7219c00000000 4:7fe1ccf385ebc8a0 +series __name__=a,i=1,job=y ; 0:7ff8000000000001 1:c0bf4a6000000000 2:0 3:7ff0000000000000 +series __name__=a,i=2,job=x ; 1:7ff8000000000001 2:c075360000000000 3:c0b3152400000000 4:40b63ecc00000000 +result job=+Inf ; 3:3ff0000000000000 +result job=-339.375 ; 2:3ff0000000000000 +result job=-4885.140625 ; 3:3ff0000000000000 +result job=-8010.375 ; 1:3ff0000000000000 +result job=0 ; 2:3ff0000000000000 +result job=100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ; 4:3ff0000000000000 +result job=14999.875 ; 1:3ff0000000000000 +result job=2 ; 0:3ff0000000000000 +result job=5694.796875 ; 4:3ff0000000000000 +result job=5921.609375 ; 3:3ff0000000000000 +result job=NaN ; 0:3ff0000000000000 1:3ff0000000000000 +end +case agg count_values by job job +expr count_values by (job) ("job", a) +grid 0 1000 5 +series __name__=a,i=0,job=x ; 0:40cd8f3c00000000 1:7ff0000000000000 2:7ff0000000000000 3:1a56e1fc2f8f359 4:0 +series __name__=a,i=1,job=x ; 0:7ff8000000000001 1:0 2:0 3:4000000000000000 4:8000000000000000 +series __name__=a,i=2,job=x ; 0:7ff8000000000001 1:40c1522c00000000 2:4008000000000000 3:40c6de0e00000000 4:40ca5fe400000000 +result job=+Inf ; 1:3ff0000000000000 2:3ff0000000000000 +result job=-0 ; 4:3ff0000000000000 +result job=0 ; 1:3ff0000000000000 2:3ff0000000000000 4:3ff0000000000000 +result job=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 ; 3:3ff0000000000000 +result job=11708.109375 ; 3:3ff0000000000000 +result job=13503.78125 ; 4:3ff0000000000000 +result job=15134.46875 ; 0:3ff0000000000000 +result job=2 ; 3:3ff0000000000000 +result job=3 ; 2:3ff0000000000000 +result job=8868.34375 ; 1:3ff0000000000000 +result job=NaN ; 0:4000000000000000 +end +case agg count_values by job value +expr count_values by (job) ("value", a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 0:4000000000000000 1:c0b9cadc00000000 +result job=x,value=-6602.859375 ; 1:3ff0000000000000 +result job=x,value=2 ; 0:3ff0000000000000 +end +case agg count_values by job job +expr count_values by (job) ("job", a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; +series __name__=a,i=1,job=x ; 0:7ff0000000000000 +series __name__=a,i=2,job=y ; 0:3ff0000000000000 +series __name__=a,i=3,job=y ; +result job=+Inf ; 0:3ff0000000000000 +result job=1 ; 0:3ff0000000000000 +end +case agg count_values by job value +expr count_values by (job) ("value", a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; +series __name__=a,i=1,job=x ; +end +case agg count_values by job job +expr count_values by (job) ("job", a) +grid 0 1000 3 +series __name__=a,i=0,job=y ; 0:4080c46000000000 1:0 2:0 +result job=0 ; 1:3ff0000000000000 2:3ff0000000000000 +result job=536.546875 ; 0:3ff0000000000000 +end +case agg count_values by job job +expr count_values by (job) ("job", a) +grid 0 1000 7 +series __name__=a,i=0,job=y ; 0:7ff8000000000001 1:0 2:0 4:4000000000000000 5:0 6:4008000000000000 +series __name__=a,i=1,job=y ; 0:3ff0000000000000 1:c0cd3b8c00000000 2:4094bc2000000000 3:7ff8000000000001 6:7ff8000000000001 +result job=-14967.09375 ; 1:3ff0000000000000 +result job=0 ; 1:3ff0000000000000 2:3ff0000000000000 5:3ff0000000000000 +result job=1 ; 0:3ff0000000000000 +result job=1327.03125 ; 2:3ff0000000000000 +result job=2 ; 4:3ff0000000000000 +result job=3 ; 6:3ff0000000000000 +result job=NaN ; 0:3ff0000000000000 3:3ff0000000000000 6:3ff0000000000000 +end +case agg count_values by job job +expr count_values by (job) ("job", a) +grid 0 1000 2 +series __name__=a,i=0,job=y ; 0:40cd231600000000 1:40b4ed4000000000 +series __name__=a,i=1,job=y ; 0:4008000000000000 1:c0b9b9e800000000 +series __name__=a,i=2,job=y ; 0:fff0000000000000 1:c0ce442a00000000 +result job=-15496.328125 ; 1:3ff0000000000000 +result job=-6585.90625 ; 1:3ff0000000000000 +result job=-Inf ; 0:3ff0000000000000 +result job=14918.171875 ; 0:3ff0000000000000 +result job=3 ; 0:3ff0000000000000 +result job=5357.25 ; 1:3ff0000000000000 +end +case agg count_values without i __name__ +expr count_values without (i) ("__name__", a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 0:40b48f0800000000 1:0 2:c0cd439800000000 4:4000000000000000 6:7ff8000000000001 7:40b7a24800000000 +series __name__=a,i=1,job=x ; 0:4000000000000000 1:4000000000000000 2:c0c5bbac00000000 3:3ff0000000000000 4:0 5:4008000000000000 6:4000000000000000 7:0 +series __name__=a,i=2,job=y ; 0:0 1:8000000000000000 2:1 3:7ff8000000000001 5:c0c6211e00000000 6:4089cc0000000000 7:7ff8000000000001 +series __name__=a,i=3,job=y ; 0:c0b9a6bc00000000 1:4008000000000000 3:7ff8000000000001 4:7ff0000000000000 6:40c9833600000000 7:40c9c19400000000 +result job=x ; 0:4000000000000000 1:4000000000000000 2:4000000000000000 3:3ff0000000000000 4:4000000000000000 5:3ff0000000000000 6:4000000000000000 7:4000000000000000 +result job=y ; 0:4000000000000000 1:4000000000000000 2:3ff0000000000000 3:4000000000000000 4:3ff0000000000000 5:3ff0000000000000 6:4000000000000000 7:4000000000000000 +end +case agg count_values without i __name__ +expr count_values without (i) ("__name__", a) +grid 0 1000 3 +series __name__=a,i=0,job=y ; 0:3ff0000000000000 1:7ff0000000000000 2:c0b28fc400000000 +series __name__=a,i=1,job=x ; 0:8000000000000000 1:fff0000000000000 2:c0c357f200000000 +series __name__=a,i=2,job=y ; 0:7fe1ccf385ebc8a0 1:3ff0000000000000 +series __name__=a,i=3,job=x ; 0:4008000000000000 1:fff0000000000000 2:c0bf4bd000000000 +result job=x ; 0:4000000000000000 1:4000000000000000 2:4000000000000000 +result job=y ; 0:4000000000000000 1:4000000000000000 2:3ff0000000000000 +end +case agg count_values without i job +expr count_values without (i) ("job", a) +grid 0 1000 2 +series __name__=a,i=0,job=x ; 0:7ff0000000000000 1:c0c701da00000000 +series __name__=a,i=1,job=x ; 0:0 1:40af710800000000 +series __name__=a,i=2,job=y ; 0:fff0000000000000 1:c0c8c29200000000 +series __name__=a,i=3,job=y ; 0:0 1:4008000000000000 +series __name__=a,i=4,job=x ; 1:40c3383c00000000 +result job=+Inf ; 0:3ff0000000000000 +result job=-11779.703125 ; 1:3ff0000000000000 +result job=-12677.140625 ; 1:3ff0000000000000 +result job=-Inf ; 0:3ff0000000000000 +result job=0 ; 0:4000000000000000 +result job=3 ; 1:3ff0000000000000 +result job=4024.515625 ; 1:3ff0000000000000 +result job=9840.46875 ; 1:3ff0000000000000 +end +case agg count_values without i value +expr count_values without (i) ("value", a) +grid 0 1000 6 +series __name__=a,i=0,job=x ; 0:40b53efc00000000 2:409ef45000000000 3:c0caa74800000000 4:4058ba0000000000 +series __name__=a,i=1,job=x ; 0:1a56e1fc2f8f359 1:0 2:4008000000000000 4:0 5:c095fdd000000000 +series __name__=a,i=2,job=y ; 0:0 1:40cd1fc600000000 2:40af829000000000 3:4000000000000000 +result job=x,value=-13646.5625 ; 3:3ff0000000000000 +result job=x,value=-1407.453125 ; 5:3ff0000000000000 +result job=x,value=0 ; 1:3ff0000000000000 4:3ff0000000000000 +result job=x,value=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 ; 0:3ff0000000000000 +result job=x,value=1981.078125 ; 2:3ff0000000000000 +result job=x,value=3 ; 2:3ff0000000000000 +result job=x,value=5438.984375 ; 0:3ff0000000000000 +result job=x,value=98.90625 ; 4:3ff0000000000000 +result job=y,value=0 ; 0:3ff0000000000000 +result job=y,value=14911.546875 ; 1:3ff0000000000000 +result job=y,value=2 ; 3:3ff0000000000000 +result job=y,value=4033.28125 ; 2:3ff0000000000000 +end +case agg count_values without i value +expr count_values without (i) ("value", a) +grid 0 1000 1 +series __name__=a,i=0,job=x ; 0:1 +result job=x,value=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005 ; 0:3ff0000000000000 +end +case agg count_values without i __name__ +expr count_values without (i) ("__name__", a) +grid 0 1000 2 +series __name__=a,i=0,job=y ; 0:7ff0000000000000 1:1a56e1fc2f8f359 +series __name__=a,i=1,job=y ; 0:40bd646000000000 1:3ff0000000000000 +series __name__=a,i=2,job=y ; 0:4008000000000000 1:4008000000000000 +result job=y ; 0:4008000000000000 1:4008000000000000 +end +case agg count_values without i value +expr count_values without (i) ("value", a) +grid 0 1000 7 +series __name__=a,i=0,job=x ; 1:4000000000000000 3:7ff8000000000001 5:3ff0000000000000 6:4000000000000000 +series __name__=a,i=1,job=y ; 0:0 1:c0c4227200000000 3:3ff0000000000000 4:3ff0000000000000 5:408c4e8000000000 6:c0bb6af400000000 +result job=x,value=1 ; 5:3ff0000000000000 +result job=x,value=2 ; 1:3ff0000000000000 6:3ff0000000000000 +result job=x,value=NaN ; 3:3ff0000000000000 +result job=y,value=-10308.890625 ; 1:3ff0000000000000 +result job=y,value=-7018.953125 ; 6:3ff0000000000000 +result job=y,value=0 ; 0:3ff0000000000000 +result job=y,value=1 ; 3:3ff0000000000000 4:3ff0000000000000 +result job=y,value=905.8125 ; 5:3ff0000000000000 +end +case agg count_values without i value +expr count_values without (i) ("value", a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 2:4008000000000000 3:7ff0000000000000 4:4090615000000000 5:40b93d1c00000000 +series __name__=a,i=1,job=x ; 2:c0704c4000000000 4:40c2e22000000000 +series __name__=a,i=2,job=x ; 0:40b48f9800000000 1:4000000000000000 2:c0bae19400000000 3:7ff8000000000001 4:4081dd6000000000 5:c0c9efb600000000 +series __name__=a,i=3,job=y ; 2:c0c116c200000000 3:7ff8000000000001 4:406a6b0000000000 5:40c00ce000000000 +series __name__=a,i=4,job=x ; 1:c0c3226200000000 3:c09d736000000000 5:40b3700000000000 +result job=x,value=-13279.421875 ; 5:3ff0000000000000 +result job=x,value=-1884.84375 ; 3:3ff0000000000000 +result job=x,value=-260.765625 ; 2:3ff0000000000000 +result job=x,value=-6881.578125 ; 2:3ff0000000000000 +result job=x,value=-9796.765625 ; 1:3ff0000000000000 +result job=x,value=2 ; 1:3ff0000000000000 +result job=x,value=4976 ; 5:3ff0000000000000 +result job=x,value=5263.59375 ; 0:3ff0000000000000 +result job=x,value=571.671875 ; 4:3ff0000000000000 +result job=x,value=9668.25 ; 4:3ff0000000000000 +result job=x,value=NaN ; 3:3ff0000000000000 +result job=y,value=+Inf ; 3:3ff0000000000000 +result job=y,value=-8749.515625 ; 2:3ff0000000000000 +result job=y,value=1048.328125 ; 4:3ff0000000000000 +result job=y,value=211.34375 ; 4:3ff0000000000000 +result job=y,value=3 ; 2:3ff0000000000000 +result job=y,value=6461.109375 ; 5:3ff0000000000000 +result job=y,value=8217.75 ; 5:3ff0000000000000 +result job=y,value=NaN ; 3:3ff0000000000000 +end +case agg count_values without i value +expr count_values without (i) ("value", a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 1:7ff8000000000001 3:40c9d56600000000 4:c0b49f3400000000 5:ffe1ccf385ebc8a0 +series __name__=a,i=1,job=x ; 2:40bece3000000000 3:1a56e1fc2f8f359 5:c0c8bea400000000 +series __name__=a,i=2,job=y ; 0:3ff0000000000000 1:8000000000000000 2:7ff8000000000001 3:8000000000000000 4:ffe1ccf385ebc8a0 5:c0c1014400000000 +series __name__=a,i=3,job=y ; 0:40ca7f5200000000 3:c095e20000000000 4:40add8f000000000 5:7ff0000000000000 +result job=x,value=-12669.28125 ; 5:3ff0000000000000 +result job=x,value=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 ; 3:3ff0000000000000 +result job=x,value=7886.1875 ; 2:3ff0000000000000 +result job=y,value=+Inf ; 5:3ff0000000000000 +result job=y,value=-0 ; 1:3ff0000000000000 3:3ff0000000000000 +result job=y,value=-100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ; 4:3ff0000000000000 5:3ff0000000000000 +result job=y,value=-1400.5 ; 3:3ff0000000000000 +result job=y,value=-5279.203125 ; 4:3ff0000000000000 +result job=y,value=-8706.53125 ; 5:3ff0000000000000 +result job=y,value=1 ; 0:3ff0000000000000 +result job=y,value=13226.796875 ; 3:3ff0000000000000 +result job=y,value=13566.640625 ; 0:3ff0000000000000 +result job=y,value=3820.46875 ; 4:3ff0000000000000 +result job=y,value=NaN ; 1:3ff0000000000000 2:3ff0000000000000 +end +case agg count_values without i __name__ +expr count_values without (i) ("__name__", a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; +series __name__=a,i=1,job=x ; +series __name__=a,i=2,job=y ; 0:409554f000000000 +result job=y ; 0:3ff0000000000000 +end +case agg count_values without i job +expr count_values without (i) ("job", a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 0:40ae74e800000000 1:7ff8000000000001 2:40b961ec00000000 3:40be49d400000000 5:7ff8000000000001 6:40c3351a00000000 +series __name__=a,i=1,job=y ; 1:1 2:4008000000000000 3:40ca238000000000 5:c0cd0ce400000000 6:0 7:4000000000000000 +series __name__=a,i=2,job=x ; 0:40c0ac1e00000000 2:4000000000000000 3:4061fe0000000000 4:40cd33b000000000 5:40ac695000000000 7:c0b6c5f000000000 +series __name__=a,i=3,job=y ; 0:4000000000000000 2:3ff0000000000000 4:1a56e1fc2f8f359 5:7ff8000000000001 6:fff0000000000000 7:40c307c600000000 +result job=-14873.78125 ; 5:3ff0000000000000 +result job=-5829.9375 ; 7:3ff0000000000000 +result job=-Inf ; 6:3ff0000000000000 +result job=0 ; 6:3ff0000000000000 +result job=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005 ; 1:3ff0000000000000 +result job=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 ; 4:3ff0000000000000 +result job=1 ; 2:3ff0000000000000 +result job=13383 ; 3:3ff0000000000000 +result job=143.9375 ; 3:3ff0000000000000 +result job=14951.375 ; 4:3ff0000000000000 +result job=2 ; 0:3ff0000000000000 2:3ff0000000000000 7:3ff0000000000000 +result job=3 ; 2:3ff0000000000000 +result job=3636.65625 ; 5:3ff0000000000000 +result job=3898.453125 ; 0:3ff0000000000000 +result job=6497.921875 ; 2:3ff0000000000000 +result job=7753.828125 ; 3:3ff0000000000000 +result job=8536.234375 ; 0:3ff0000000000000 +result job=9743.546875 ; 7:3ff0000000000000 +result job=9834.203125 ; 6:3ff0000000000000 +result job=NaN ; 1:3ff0000000000000 5:4000000000000000 +end +case agg count_values without i job +expr count_values without (i) ("job", a) +grid 0 1000 7 +series __name__=a,i=0,job=x ; 3:40ce296400000000 4:40a2b01800000000 5:c0cb8cd400000000 6:40c58f9a00000000 +series __name__=a,i=1,job=y ; 2:7ff8000000000001 3:c0c4c67800000000 4:4008000000000000 5:4000000000000000 +series __name__=a,i=2,job=x ; 1:4000000000000000 2:40c1054000000000 3:7ff0000000000000 4:c0aadca000000000 5:40a182d800000000 6:4000000000000000 +series __name__=a,i=3,job=x ; 0:7ff0000000000000 1:c0a233f800000000 4:4000000000000000 5:40af700000000000 6:7ff8000000000001 +series __name__=a,i=4,job=y ; 0:7ff8000000000001 1:c0c070ec00000000 2:3ff0000000000000 3:7fe1ccf385ebc8a0 4:c0b61cdc00000000 5:c0c07a2e00000000 6:7ff0000000000000 +series __name__=a,i=5,job=x ; 0:c07b8e0000000000 1:1a56e1fc2f8f359 3:8000000000000000 4:0 5:4008000000000000 +result job=+Inf ; 0:3ff0000000000000 3:3ff0000000000000 6:3ff0000000000000 +result job=-0 ; 3:3ff0000000000000 +result job=-10636.9375 ; 3:3ff0000000000000 +result job=-14105.65625 ; 5:3ff0000000000000 +result job=-2329.984375 ; 1:3ff0000000000000 +result job=-3438.3125 ; 4:3ff0000000000000 +result job=-440.875 ; 0:3ff0000000000000 +result job=-5660.859375 ; 4:3ff0000000000000 +result job=-8417.84375 ; 1:3ff0000000000000 +result job=-8436.359375 ; 5:3ff0000000000000 +result job=0 ; 4:3ff0000000000000 +result job=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 ; 1:3ff0000000000000 +result job=1 ; 2:3ff0000000000000 +result job=100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ; 3:3ff0000000000000 +result job=11039.203125 ; 6:3ff0000000000000 +result job=15442.78125 ; 3:3ff0000000000000 +result job=2 ; 1:3ff0000000000000 4:3ff0000000000000 5:3ff0000000000000 6:3ff0000000000000 +result job=2241.421875 ; 5:3ff0000000000000 +result job=2392.046875 ; 4:3ff0000000000000 +result job=3 ; 4:3ff0000000000000 5:3ff0000000000000 +result job=4024 ; 5:3ff0000000000000 +result job=8714.5 ; 2:3ff0000000000000 +result job=NaN ; 0:3ff0000000000000 2:3ff0000000000000 6:3ff0000000000000 +end +case agg count_values by i value +expr count_values by (i) ("value", a) +grid 0 1000 7 +series __name__=a,i=0,job=x ; 3:c0abee3800000000 4:c0c0a9c800000000 5:c069dc0000000000 6:4008000000000000 +series __name__=a,i=1,job=y ; 0:8000000000000000 1:40c4d7f200000000 3:8000000000000000 4:40c8939000000000 5:ffe1ccf385ebc8a0 6:c0c663f000000000 +result i=0,value=-206.875 ; 5:3ff0000000000000 +result i=0,value=-3575.109375 ; 3:3ff0000000000000 +result i=0,value=-8531.5625 ; 4:3ff0000000000000 +result i=0,value=3 ; 6:3ff0000000000000 +result i=1,value=-0 ; 0:3ff0000000000000 3:3ff0000000000000 +result i=1,value=-100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ; 5:3ff0000000000000 +result i=1,value=-11463.875 ; 6:3ff0000000000000 +result i=1,value=10671.890625 ; 1:3ff0000000000000 +result i=1,value=12583.125 ; 4:3ff0000000000000 +end +case agg count_values by i value +expr count_values by (i) ("value", a) +grid 0 1000 5 +series __name__=a,i=0,job=y ; 1:40c08e0e00000000 2:7ff0000000000000 +result i=0,value=+Inf ; 2:3ff0000000000000 +result i=0,value=8476.109375 ; 1:3ff0000000000000 +end +case agg count_values by i job +expr count_values by (i) ("job", a) +grid 0 1000 8 +series __name__=a,i=0,job=x ; 0:3ff0000000000000 1:4000000000000000 2:409d23a000000000 5:40b0594800000000 7:7ff0000000000000 +series __name__=a,i=1,job=x ; 0:0 1:7ff8000000000001 2:4000000000000000 3:40b1063400000000 5:40c56b2400000000 6:40823fc000000000 +series __name__=a,i=2,job=y ; 0:4008000000000000 1:40bd521c00000000 2:40b6231800000000 3:40c9f99800000000 4:4000000000000000 5:c0c32bae00000000 6:4008000000000000 7:ffe1ccf385ebc8a0 +series __name__=a,i=3,job=x ; 0:c0c7bd8a00000000 1:7ff8000000000001 4:8000000000000000 7:4000000000000000 +result i=0,job=+Inf ; 7:3ff0000000000000 +result i=0,job=1 ; 0:3ff0000000000000 +result i=0,job=1864.90625 ; 2:3ff0000000000000 +result i=0,job=2 ; 1:3ff0000000000000 +result i=0,job=4185.28125 ; 5:3ff0000000000000 +result i=1,job=0 ; 0:3ff0000000000000 +result i=1,job=10966.28125 ; 5:3ff0000000000000 +result i=1,job=2 ; 2:3ff0000000000000 +result i=1,job=4358.203125 ; 3:3ff0000000000000 +result i=1,job=583.96875 ; 6:3ff0000000000000 +result i=1,job=NaN ; 1:3ff0000000000000 +result i=2,job=-100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ; 7:3ff0000000000000 +result i=2,job=-9815.359375 ; 5:3ff0000000000000 +result i=2,job=13299.1875 ; 3:3ff0000000000000 +result i=2,job=2 ; 4:3ff0000000000000 +result i=2,job=3 ; 0:3ff0000000000000 6:3ff0000000000000 +result i=2,job=5667.09375 ; 2:3ff0000000000000 +result i=2,job=7506.109375 ; 1:3ff0000000000000 +result i=3,job=-0 ; 4:3ff0000000000000 +result i=3,job=-12155.078125 ; 0:3ff0000000000000 +result i=3,job=2 ; 7:3ff0000000000000 +result i=3,job=NaN ; 1:3ff0000000000000 +end +case agg count_values by i value +expr count_values by (i) ("value", a) +grid 0 1000 5 +series __name__=a,i=0,job=x ; 0:40c7509c00000000 2:c0c934e200000000 4:c040940000000000 +series __name__=a,i=1,job=y ; 0:fff0000000000000 1:4008000000000000 2:0 4:7ff8000000000001 +series __name__=a,i=2,job=x ; 0:c0c3d8cc00000000 1:c0cc859200000000 2:4000000000000000 3:0 4:4008000000000000 +series __name__=a,i=3,job=x ; 0:c0b3972800000000 1:7ff8000000000001 2:c0b42d2000000000 4:4000000000000000 +result i=0,value=-12905.765625 ; 2:3ff0000000000000 +result i=0,value=-33.15625 ; 4:3ff0000000000000 +result i=0,value=11937.21875 ; 0:3ff0000000000000 +result i=1,value=-Inf ; 0:3ff0000000000000 +result i=1,value=0 ; 2:3ff0000000000000 +result i=1,value=3 ; 1:3ff0000000000000 +result i=1,value=NaN ; 4:3ff0000000000000 +result i=2,value=-10161.59375 ; 0:3ff0000000000000 +result i=2,value=-14603.140625 ; 1:3ff0000000000000 +result i=2,value=0 ; 3:3ff0000000000000 +result i=2,value=2 ; 2:3ff0000000000000 +result i=2,value=3 ; 4:3ff0000000000000 +result i=3,value=-5015.15625 ; 0:3ff0000000000000 +result i=3,value=-5165.125 ; 2:3ff0000000000000 +result i=3,value=2 ; 4:3ff0000000000000 +result i=3,value=NaN ; 1:3ff0000000000000 +end +case agg count_values by i value +expr count_values by (i) ("value", a) +grid 0 1000 6 +series __name__=a,i=0,job=y ; 0:40aac7e000000000 1:c0b757f400000000 3:c0c76c9800000000 5:c090e41000000000 +series __name__=a,i=1,job=y ; 0:8000000000000000 1:4008000000000000 3:4008000000000000 4:40a233e800000000 5:c0b425bc00000000 +series __name__=a,i=2,job=y ; 0:c0badb0800000000 1:c0c35b8e00000000 2:40c4b99000000000 3:7ff0000000000000 4:3ff0000000000000 5:7ff8000000000001 +result i=0,value=-1081.015625 ; 5:3ff0000000000000 +result i=0,value=-11993.1875 ; 3:3ff0000000000000 +result i=0,value=-5975.953125 ; 1:3ff0000000000000 +result i=0,value=3427.9375 ; 0:3ff0000000000000 +result i=1,value=-0 ; 0:3ff0000000000000 +result i=1,value=-5157.734375 ; 5:3ff0000000000000 +result i=1,value=2329.953125 ; 4:3ff0000000000000 +result i=1,value=3 ; 1:3ff0000000000000 3:3ff0000000000000 +result i=2,value=+Inf ; 3:3ff0000000000000 +result i=2,value=-6875.03125 ; 0:3ff0000000000000 +result i=2,value=-9911.109375 ; 1:3ff0000000000000 +result i=2,value=1 ; 4:3ff0000000000000 +result i=2,value=10611.125 ; 2:3ff0000000000000 +result i=2,value=NaN ; 5:3ff0000000000000 +end +case agg count_values by i __name__ +expr count_values by (i) ("__name__", a) +grid 0 1000 7 +series __name__=a,i=0,job=x ; 2:4008000000000000 3:7ff0000000000000 4:4000000000000000 6:fff0000000000000 +series __name__=a,i=1,job=y ; 0:8000000000000000 1:1a56e1fc2f8f359 2:c0cdce1c00000000 3:40b824bc00000000 4:c0c5d4d000000000 5:40a5990800000000 6:ffe1ccf385ebc8a0 +series __name__=a,i=2,job=x ; 0:0 1:c0a6113000000000 2:4000000000000000 5:40bbe3fc00000000 +result __name__=+Inf,i=0 ; 3:3ff0000000000000 +result __name__=-0,i=1 ; 0:3ff0000000000000 +result __name__=-100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000,i=1 ; 6:3ff0000000000000 +result __name__=-11177.625,i=1 ; 4:3ff0000000000000 +result __name__=-15260.21875,i=1 ; 2:3ff0000000000000 +result __name__=-2824.59375,i=2 ; 1:3ff0000000000000 +result __name__=-Inf,i=0 ; 6:3ff0000000000000 +result __name__=0,i=2 ; 0:3ff0000000000000 +result __name__=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001,i=1 ; 1:3ff0000000000000 +result __name__=2,i=0 ; 4:3ff0000000000000 +result __name__=2,i=2 ; 2:3ff0000000000000 +result __name__=2764.515625,i=1 ; 5:3ff0000000000000 +result __name__=3,i=0 ; 2:3ff0000000000000 +result __name__=6180.734375,i=1 ; 3:3ff0000000000000 +result __name__=7139.984375,i=2 ; 5:3ff0000000000000 +end +case agg count_values by i value +expr count_values by (i) ("value", a) +grid 0 1000 6 +series __name__=a,i=0,job=x ; 0:4008000000000000 1:c0b8012c00000000 2:7ff0000000000000 3:0 +series __name__=a,i=1,job=x ; 0:ffe1ccf385ebc8a0 1:40c7f9e600000000 2:404f540000000000 3:1 4:40c6115000000000 5:fff0000000000000 +series __name__=a,i=2,job=x ; 0:0 1:40c9b74c00000000 2:40c9e6b600000000 3:40b0947000000000 4:7ff8000000000001 5:4008000000000000 +result i=0,value=+Inf ; 2:3ff0000000000000 +result i=0,value=-6145.171875 ; 1:3ff0000000000000 +result i=0,value=0 ; 3:3ff0000000000000 +result i=0,value=3 ; 0:3ff0000000000000 +result i=1,value=-100000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 ; 0:3ff0000000000000 +result i=1,value=-Inf ; 5:3ff0000000000000 +result i=1,value=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000005 ; 3:3ff0000000000000 +result i=1,value=11298.625 ; 4:3ff0000000000000 +result i=1,value=12275.796875 ; 1:3ff0000000000000 +result i=1,value=62.65625 ; 2:3ff0000000000000 +result i=2,value=0 ; 0:3ff0000000000000 +result i=2,value=13166.59375 ; 1:3ff0000000000000 +result i=2,value=13261.421875 ; 2:3ff0000000000000 +result i=2,value=3 ; 5:3ff0000000000000 +result i=2,value=4244.4375 ; 3:3ff0000000000000 +result i=2,value=NaN ; 4:3ff0000000000000 +end +case agg count_values by i value +expr count_values by (i) ("value", a) +grid 0 1000 3 +series __name__=a,i=0,job=x ; 0:0 1:1a56e1fc2f8f359 +series __name__=a,i=1,job=y ; 0:4008000000000000 1:40cdd4ca00000000 +result i=0,value=0 ; 0:3ff0000000000000 +result i=0,value=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 ; 1:3ff0000000000000 +result i=1,value=15273.578125 ; 1:3ff0000000000000 +result i=1,value=3 ; 0:3ff0000000000000 +end +case agg count_values by i value +expr count_values by (i) ("value", a) +grid 0 1000 3 +series __name__=a,i=0,job=y ; 0:40c0ce0800000000 1:40bf391800000000 2:8000000000000000 +series __name__=a,i=1,job=x ; 0:0 1:40a772a000000000 2:7ff8000000000001 +series __name__=a,i=2,job=y ; 0:4000000000000000 1:c0c48fc200000000 2:7ff8000000000001 +result i=0,value=-0 ; 2:3ff0000000000000 +result i=0,value=7993.09375 ; 1:3ff0000000000000 +result i=0,value=8604.0625 ; 0:3ff0000000000000 +result i=1,value=0 ; 0:3ff0000000000000 +result i=1,value=3001.3125 ; 1:3ff0000000000000 +result i=1,value=NaN ; 2:3ff0000000000000 +result i=2,value=-10527.515625 ; 1:3ff0000000000000 +result i=2,value=2 ; 0:3ff0000000000000 +result i=2,value=NaN ; 2:3ff0000000000000 +end +case agg count_values by i job +expr count_values by (i) ("job", a) +grid 0 1000 1 +series __name__=a,i=0,job=y ; 0:40ca78c800000000 +series __name__=a,i=1,job=x ; 0:40c9e1c800000000 +series __name__=a,i=2,job=y ; 0:c09f5ce000000000 +result i=0,job=13553.5625 ; 0:3ff0000000000000 +result i=1,job=13251.5625 ; 0:3ff0000000000000 +result i=2,job=-2007.21875 ; 0:3ff0000000000000 +end +case agg count_values by i job +expr count_values by (i) ("job", a) +grid 0 1000 2 +series __name__=a,i=0,job=x ; 0:fff0000000000000 1:40cb866c00000000 +series __name__=a,i=1,job=x ; 0:8000000000000000 1:3ff0000000000000 +series __name__=a,i=2,job=y ; 1:1a56e1fc2f8f359 +series __name__=a,i=3,job=y ; 0:8000000000000000 +result i=0,job=-Inf ; 0:3ff0000000000000 +result i=0,job=14092.84375 ; 1:3ff0000000000000 +result i=1,job=-0 ; 0:3ff0000000000000 +result i=1,job=1 ; 1:3ff0000000000000 +result i=2,job=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 ; 1:3ff0000000000000 +result i=3,job=-0 ; 0:3ff0000000000000 +end +case agg count_values by i value +expr count_values by (i) ("value", a) +grid 0 1000 2 +series __name__=a,i=0,job=y ; 0:c0b4069000000000 1:4008000000000000 +series __name__=a,i=1,job=x ; 0:3ff0000000000000 1:1a56e1fc2f8f359 +series __name__=a,i=2,job=x ; 0:40ce81e600000000 1:40c99c9c00000000 +series __name__=a,i=3,job=x ; 0:4000000000000000 1:8000000000000000 +result i=0,value=-5126.5625 ; 0:3ff0000000000000 +result i=0,value=3 ; 1:3ff0000000000000 +result i=1,value=0.000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000001 ; 1:3ff0000000000000 +result i=1,value=1 ; 0:3ff0000000000000 +result i=2,value=13113.21875 ; 1:3ff0000000000000 +result i=2,value=15619.796875 ; 0:3ff0000000000000 +result i=3,value=-0 ; 1:3ff0000000000000 +result i=3,value=2 ; 0:3ff0000000000000 +end diff --git a/src/promql/src/aggregate/tests.rs b/src/promql/src/aggregate/tests.rs index e166ddf7243..fec26f0c5c9 100644 --- a/src/promql/src/aggregate/tests.rs +++ b/src/promql/src/aggregate/tests.rs @@ -199,6 +199,42 @@ fn aggregates_match_prometheus() { } } +/// `stddev`, `stdvar`, `quantile` and `count_values` evaluated by the Prometheus v3.15.0 engine; +/// see the header of `stat_cases.txt`. +#[test] +fn stat_aggregates_match_prometheus() { + let mut matched = BTreeMap::::new(); + for case in cases(include_str!("stat_cases.txt")) { + let h = &case.header; + let labels = h[3] + .split(',') + .filter(|label| *label != "-") + .collect::>(); + let grouping = grouping(h, &labels); + let output = match h[1].as_str() { + "stddev" => aggregate_float(&case.schema, &case.series, AggregateOp::Stddev, grouping), + "stdvar" => aggregate_float(&case.schema, &case.series, AggregateOp::Stdvar, grouping), + "quantile" => { + let q = case.scalar.as_ref().expect("quantile cases carry q"); + aggregate_quantile(&case.schema, &case.series, q, grouping) + } + "count_values" => count_values(&case.schema, &case.series, &h[4], grouping), + other => panic!("unmapped aggregate {other}"), + }; + assert_result(&case, output.unwrap()); + *matched.entry(format!("{} {}", h[1], h[2])).or_default() += 1; + } + for op in ["stddev", "stdvar", "quantile", "count_values"] { + for grouping in ["none", "by", "without"] { + let count = matched + .get(&format!("{op} {grouping}")) + .copied() + .unwrap_or_default(); + assert!(count >= 12, "{op} {grouping}: {count}"); + } + } +} + #[test] fn compensated_sum_and_overflowing_avg_follow_prometheus() { let schema = schema(&["value"]); @@ -351,18 +387,50 @@ fn fields_are_aggregated_independently() { }) .collect() }; + let grid_len = multi.eval_grid.as_ref().unwrap().timestamps().len(); + let q_values: Vec> = (0..grid_len) + .map(|i| Some([0.0, 0.25, 0.5, 0.9, 1.0][i % 5])) + .collect(); + let q = input( + &schema(&["scalar"]), + MetricName::try_new(None, Vec::new()).unwrap(), + 0, + &[q_values], + ); + type Kernel<'a> = Box, &[Series], Grouping<'_>) -> Vec + 'a>; + let mut kernels: Vec<(String, Kernel<'_>)> = OPS + .iter() + .chain(&[AggregateOp::Stddev, AggregateOp::Stdvar]) + .map(|&op| -> (String, Kernel<'_>) { + ( + format!("{op:?}"), + Box::new(move |schema, input, grouping| { + aggregate_float(schema, input, op, grouping).unwrap() + }), + ) + }) + .collect(); + kernels.push(( + "quantile".into(), + Box::new(|schema, input, grouping| { + aggregate_quantile(schema, input, &q, grouping).unwrap() + }), + )); + kernels.push(( + "count_values".into(), + Box::new(|schema, input, grouping| count_values(schema, input, "value", grouping).unwrap()), + )); for grouping in [ Grouping::By(&[]), Grouping::By(&["host"]), Grouping::Without(&["i"]), ] { - for op in OPS { - let output = aggregate_float(&multi, &series, op, grouping).unwrap(); + for (op, kernel) in &kernels { + let output = kernel(&multi, &series, grouping); for field in [0, 1] { - let expected = aggregate_float(&single, &project(field), op, grouping).unwrap(); + let expected = kernel(&single, &project(field), grouping); // The multi-field result is cut into pieces where its values are interrupted, so // the comparison is over the dense values of each label set, not over pieces. - let grid_len = multi.eval_grid.as_ref().unwrap().timestamps().len(); let grouped = |pieces: &[Series], field: usize| { let mut by_metric: BTreeMap = BTreeMap::new(); for piece in pieces { @@ -394,7 +462,7 @@ fn fields_are_aggregated_independently() { }; let actual = grouped(&output, field); let expected = grouped(&expected, 0); - assert_eq!(actual, expected, "{op:?} {grouping:?} field {field}"); + assert_eq!(actual, expected, "{op} {grouping:?} field {field}"); } } } @@ -632,6 +700,16 @@ fn unsupported_shapes_and_mutated_schema_fail_without_partial_output() { 11, &[vec![Some(1.0)], vec![Some(2.0)]], ); + // Prometheus rejects an empty `count_values` label name at evaluation. + assert!(matches!( + count_values( + &schema, + std::slice::from_ref(&source), + "", + Grouping::By(&[]) + ), + Err(DataFusionError::Execution(_)) + )); assert!(matches!( aggregate_float( &schema, diff --git a/src/promql/src/map.rs b/src/promql/src/map.rs index ffc7383f37e..f980fec1b3c 100644 --- a/src/promql/src/map.rs +++ b/src/promql/src/map.rs @@ -23,6 +23,7 @@ mod go_math; #[cfg(test)] mod tests; +pub(crate) use broadcast::validate_scalar; pub use broadcast::{ScalarSeriesOperand, map_arithmetic_series, map_compare_series}; pub use comparison::{Comparison, ComparisonOp, map_compare, scalar_arithmetic, scalar_compare}; diff --git a/src/promql/src/map/broadcast.rs b/src/promql/src/map/broadcast.rs index b94605a7c28..092dd9e588d 100644 --- a/src/promql/src/map/broadcast.rs +++ b/src/promql/src/map/broadcast.rs @@ -127,7 +127,10 @@ fn map_grid_scalar( builder.finish(metric) } -fn validate_scalar<'a>(schema: &SeriesSchema, scalar: &'a Series) -> Result<&'a TimeAxis> { +pub(crate) fn validate_scalar<'a>( + schema: &SeriesSchema, + scalar: &'a Series, +) -> Result<&'a TimeAxis> { if scalar.metric.name().is_some() || !scalar.metric.tags().is_empty() { return Err(DataFusionError::Execution( "grid scalar must be unlabelled".into(), diff --git a/src/promql/src/range_eval.rs b/src/promql/src/range_eval.rs index 428f9f0f9af..5d7d8e0b0f2 100644 --- a/src/promql/src/range_eval.rs +++ b/src/promql/src/range_eval.rs @@ -39,6 +39,7 @@ mod histogram; mod tests; pub use function::RangeFunction; +pub(crate) use function::quantile; /// The samples a range selector reads at evaluation time `T`: source timestamps in /// `(E - range_ms, E]`, where `E` is `T - offset_ms`, or `anchor_ms - offset_ms` with `@`. diff --git a/src/promql/src/range_eval/function.rs b/src/promql/src/range_eval/function.rs index f2765d1a543..7e49247834b 100644 --- a/src/promql/src/range_eval/function.rs +++ b/src/promql/src/range_eval/function.rs @@ -216,7 +216,7 @@ fn variance(values: &[f64]) -> f64 { } /// Prometheus `quantile`, which sorts NaN before every number. -fn quantile(q: f64, values: &[f64], sorted: &mut Vec) -> f64 { +pub(crate) fn quantile(q: f64, values: &[f64], sorted: &mut Vec) -> f64 { if q.is_nan() { return f64::NAN; }