///|
fn sorted_query_metric_pairs(
report : BenchmarkReport,
metric : String,
) -> Array[(String, Double)] {
let pairs : Array[(String, Double)] = []
for query in report.queries {
pairs.push((query.query_id, query.metrics.get_or_default(metric, 0.0)))
}
pairs.sort_by(fn(a, b) {
let by_value = b.1.compare(a.1)
if by_value == 0 {
a.0.compare(b.0)
} else {
by_value
}
})
pairs
}
///|
pub fn top_query_ids(
report : BenchmarkReport,
metric : String,
limit : Int,
) -> Array[String] {
let pairs = sorted_query_metric_pairs(report, metric)
let result : Array[String] = []
for index in 0.. Array[String] {
let pairs = sorted_query_metric_pairs(report, metric)
pairs.sort_by(fn(a, b) {
let by_value = a.1.compare(b.1)
if by_value == 0 {
a.0.compare(b.0)
} else {
by_value
}
})
let result : Array[String] = []
for index in 0.. BenchmarkReport {
let allowed : Map[String, Unit] = Map([])
for query_id in query_ids {
allowed[query_id] = ()
}
let queries = report.queries.filter(fn(query) {
allowed.contains(query.query_id)
})
{
cutoffs: report.cutoffs.copy(),
relevant_threshold: report.relevant_threshold,
query_count: queries.length(),
queries,
summary: summarize_queries(queries),
}
}
///|
pub fn select_queries_by_score(
report : BenchmarkReport,
metric : String,
minimum : Double,
) -> Array[String] {
sorted_query_metric_pairs(report, metric)
.filter(fn(pair) { pair.1 >= minimum })
.map(fn(pair) { pair.0 })
}
///|
pub fn query_metric_rows(
report : BenchmarkReport,
metric_names : Array[String],
) -> String {
let rows : Array[String] = []
let header = ["query_id", ..metric_names].join(",")
rows.push(header)
for query in report.queries {
let values : Array[String] = [query.query_id]
for name in metric_names {
values.push(query.metrics.get_or_default(name, 0.0).to_string())
}
rows.push(values.join(","))
}
rows.join("\n")
}