blob: 8d1f4d008f26a95972a8ef4a65ebfb3188289fa4 [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_