blob: b75ebecf96c22b1e90585b7054f726369d615892 [file] [log] [blame]
// Copyright 2024 The IREE Authors
//
// Licensed under the Apache License v2.0 with LLVM Exceptions.
// See https://llvm.org/LICENSE.txt for license information.
// SPDX-License-Identifier: Apache-2.0 WITH LLVM-exception
#ifndef EXPERIMENTAL_HAL_EXECUTABLE_LIBRARY_CALL_HOOKS_STATS_H_
#define EXPERIMENTAL_HAL_EXECUTABLE_LIBRARY_CALL_HOOKS_STATS_H_
#include <cstdio>
#include <vector>
// Returns the sum of all elements.
float sum(const std::vector<float> &v);
// Returns the mean value.
float mean(const std::vector<float> &v);
// Returns the covariance between two vectors.
float covariance(const std::vector<float> &u, const std::vector<float> &v);
// Returns the variance of the vector.
float variance(const std::vector<float> &v);
// Returns the "Pearson correlation coefficient".
// Nothing particularly good about that choice of correlation metric.
// Just done naively.
float correlation(const std::vector<float> &u, const std::vector<float> &v);
// Split input data `v` into buckets i.e. (100/bucket_count)-percentiles.
void splitIntoBuckets(const std::vector<float> &v, int bucket_count,
std::vector<float> *bucket_means,
std::vector<int> *bucket_indices);
// Fills `table` with conditional probabilities of an index falling into a
// y-bucket given that it belongs to a x-bucket.
void computeConditionalProbabilityTable(
int bucket_count, const std::vector<int> &bucket_indices_x,
const std::vector<int> &bucket_indices_y, std::vector<float> *table);
// Render a conditional probability table as semi-graphical grayscale.
void printConditionalProbabilityTable(FILE *file, int bucket_count,
const std::vector<float> &table);
#endif // EXPERIMENTAL_HAL_EXECUTABLE_LIBRARY_CALL_HOOKS_STATS_H_