blob: 884ca6f21bcec27ffee2c77a8f10725c3e1d9d68 [file] [log] [blame]
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree.
*/
#pragma once
#include <executorch/runtime/core/memory_allocator.h>
#include <executorch/runtime/executor/method.h>
namespace executorch {
namespace bundled_program {
/**
* An opaque pointer to a serialized bundled program.
*/
using SerializedBundledProgram = const void;
/**
* Load testset_idx-th bundled input of method_idx-th Method test in
* bundled_program_ptr to given Method.
*
* @param[in] method The Method to verify.
* @param[in] bundled_program_ptr The bundled program contains expected output.
* @param[in] testset_idx The index of input needs to be set into given Method.
*
* @returns Return Error::Ok if load successfully, or the error happens during
* execution.
*/
ET_NODISCARD ::executorch::runtime::Error load_bundled_input(
::executorch::runtime::Method& method,
SerializedBundledProgram* bundled_program_ptr,
size_t testset_idx);
/**
* Compare the Method's output with testset_idx-th bundled expected
* output in method_idx-th Method test.
*
* @param[in] method The Method to extract outputs from.
* @param[in] bundled_program_ptr The bundled program contains expected output.
* @param[in] testset_idx The index of expected output needs to be compared.
* @param[in] rtol Relative tolerance used for data comparsion.
* @param[in] atol Absolute tolerance used for data comparsion.
*
* @returns Return Error::Ok if two outputs match, or the error happens during
* execution.
*/
ET_NODISCARD ::executorch::runtime::Error verify_method_outputs(
::executorch::runtime::Method& method,
SerializedBundledProgram* bundled_program_ptr,
size_t testset_idx,
double rtol = 1e-5,
double atol = 1e-8);
/**
* Finds the serialized ExecuTorch program data in the provided bundled program
* file data.
*
* The returned buffer is appropriate for constructing a
* torch::executor::Program.
*
* @param[in] file_data The contents of an ExecuTorch program or bundled program
* file.
* @param[in] file_data_len The length of file_data, in bytes.
* @param[out] out_program_data The serialized Program data, if found.
* @param[out] out_program_data_len The length of out_program_data, in bytes.
*
* @returns Error::Ok if the given file is bundled program, a program was found
* in it, and out_program_data/out_program_data_len point to the data. Other
* values on failure.
*/
ET_NODISCARD ::executorch::runtime::Error get_program_data(
void* file_data,
size_t file_data_len,
const void** out_program_data,
size_t* out_program_data_len);
/**
* Checks whether the given file is a bundled program.
*
* @param[in] file_data The contents of the given file.
* @param[in] file_data_len The length of file_data, in bytes.
*
* @returns true if the given file is a bundled program, false otherwise
*/
bool is_bundled_program(void* file_data, size_t file_data_len);
/// DEPRECATED: Use the version with the file_data_len parameter.
ET_DEPRECATED inline bool is_bundled_program(void* file_data) {
// 128 is enough data to contain the identifier in the flatbuffer header.
return is_bundled_program(file_data, 128);
}
} // namespace bundled_program
} // namespace executorch
namespace torch {
namespace executor {
namespace bundled_program {
// TODO(T197294990): Remove these deprecated aliases once all users have moved
// to the new `::executorch` namespaces.
using serialized_bundled_program =
::executorch::bundled_program::SerializedBundledProgram;
ET_NODISCARD inline ::executorch::runtime::Error LoadBundledInput(
::executorch::runtime::Method& method,
serialized_bundled_program* bundled_program_ptr,
size_t testset_idx) {
return ::executorch::bundled_program::load_bundled_input(
method, bundled_program_ptr, testset_idx);
}
ET_NODISCARD inline ::executorch::runtime::Error
VerifyResultWithBundledExpectedOutput(
::executorch::runtime::Method& method,
serialized_bundled_program* bundled_program_ptr,
size_t testset_idx,
double rtol = 1e-5,
double atol = 1e-8) {
return ::executorch::bundled_program::verify_method_outputs(
method, bundled_program_ptr, testset_idx, rtol, atol);
}
ET_NODISCARD inline ::executorch::runtime::Error GetProgramData(
void* file_data,
size_t file_data_len,
const void** out_program_data,
size_t* out_program_data_len) {
return ::executorch::bundled_program::get_program_data(
file_data, file_data_len, out_program_data, out_program_data_len);
}
inline bool IsBundledProgram(void* file_data) {
// 128 is enough data to contain the identifier in the flatbuffer header.
return ::executorch::bundled_program::is_bundled_program(file_data, 128);
}
} // namespace bundled_program
} // namespace executor
} // namespace torch