|  | 
| 1 | 1 | /* | 
| 2 | 2 |  * Copyright (c) Meta Platforms, Inc. and affiliates. | 
| 3 | 3 |  * All rights reserved. | 
| 4 |  | - * Copyright 2025 Arm Limited and/or its affiliates. | 
| 5 | 4 |  * | 
| 6 | 5 |  * This source code is licensed under the BSD-style license found in the | 
| 7 | 6 |  * LICENSE file in the root directory of this source tree. | 
| 8 | 7 |  */ | 
| 9 | 8 | 
 | 
| 10 |  | -#include <executorch/runtime/platform/assert.h> | 
| 11 |  | -#include <executorch/schema/program_generated.h> | 
| 12 | 9 | #include <pybind11/pybind11.h> | 
| 13 | 10 | #include <pybind11/stl.h> | 
| 14 | 11 | 
 | 
| 15 |  | -#ifdef ET_BUNDLE_IO | 
| 16 |  | -#include <executorch/devtools/bundled_program/bundled_program.h> | 
| 17 |  | -#include <stdexcept> | 
| 18 |  | -#endif | 
|  | 12 | +#include <executorch/runtime/platform/assert.h> | 
|  | 13 | +#include <executorch/schema/program_generated.h> | 
| 19 | 14 | 
 | 
| 20 | 15 | namespace py = pybind11; | 
| 21 | 16 | 
 | 
| @@ -191,39 +186,8 @@ get_kernel_tensor_metadatas_from_execution_plan( | 
| 191 | 186 | 
 | 
| 192 | 187 | const executorch_flatbuffer::Program* _get_program_from_buffer( | 
| 193 | 188 |     const py::bytes& buffer) { | 
| 194 |  | -  // Access the Python bytes without copying and get raw pointer/size. | 
| 195 |  | -  const std::string_view sv = buffer.cast<std::string_view>(); | 
| 196 |  | -  void* buf_ptr = const_cast<void*>(static_cast<const void*>(sv.data())); | 
| 197 |  | -  const size_t buf_len = sv.size(); | 
| 198 |  | -#ifdef ET_BUNDLE_IO | 
| 199 |  | - | 
| 200 |  | -  // If this is a bundled program, extract the inner ExecuTorch program bytes. | 
| 201 |  | -  if (executorch::bundled_program::is_bundled_program(buf_ptr, buf_len)) { | 
| 202 |  | -    const void* program_data = nullptr; | 
| 203 |  | -    size_t program_size = 0; | 
| 204 |  | - | 
| 205 |  | -    const auto status = executorch::bundled_program::get_program_data( | 
| 206 |  | -        buf_ptr, // serialized BundledProgram start | 
| 207 |  | -        buf_len, // total size of the BundledProgram blob | 
| 208 |  | -        &program_data, // [out] pointer to inner .pte bytes | 
| 209 |  | -        &program_size // [out] size of inner .pte bytes | 
| 210 |  | -    ); | 
| 211 |  | - | 
| 212 |  | -    if (status != ::executorch::runtime::Error::Ok || program_data == nullptr || | 
| 213 |  | -        program_size == 0) { | 
| 214 |  | -      throw std::runtime_error( | 
| 215 |  | -          "bundled_program::get_program_data() failed or returned empty data"); | 
| 216 |  | -    } | 
| 217 |  | - | 
| 218 |  | -    // program_data points directly at the flatbuffer-encoded Program region. | 
| 219 |  | -    return executorch_flatbuffer::GetProgram( | 
| 220 |  | -        reinterpret_cast<const uint8_t*>(program_data)); | 
| 221 |  | -  } | 
| 222 |  | -#endif | 
| 223 |  | -  // Otherwise treat the buffer as a raw .pte (flatbuffer Program with optional | 
| 224 |  | -  // extended header). | 
| 225 | 189 |   return executorch_flatbuffer::GetProgram( | 
| 226 |  | -      reinterpret_cast<const uint8_t*>(sv.data())); | 
|  | 190 | +      buffer.cast<std::string_view>().data()); | 
| 227 | 191 | } | 
| 228 | 192 | 
 | 
| 229 | 193 | py::list _get_program_operators(const executorch_flatbuffer::Program* program) { | 
|  | 
0 commit comments