@@ -157,13 +157,15 @@ class Module final {
157157 explicit Module (
158158 std::unique_ptr<DataLoader> loader,
159159 std::unique_ptr<ETDumpGen> tracer = nullptr ,
160- size_t debug_buffer_size = 0 )
160+ size_t debug_buffer_size = 0 ,
161+ Program::Verification program_verification =
162+ Program::Verification::InternalConsistency)
161163 : loader_(std::move(loader)),
162164 event_tracer_(std::move(tracer)),
163165 debug_buffer_size_(debug_buffer_size) {
164166 ::executorch::runtime::runtime_init ();
165- Result<Program> program = Program::load (
166- loader_.get (), Program::Verification::InternalConsistency );
167+ Result<Program> program =
168+ Program::load ( loader_.get (), program_verification );
167169 THROW_IF_ERROR (
168170 program.error (),
169171 " loading program failed with error: 0x%" PRIx32,
@@ -375,19 +377,22 @@ inline std::unique_ptr<Module> load_module_from_buffer(
375377 const void * ptr,
376378 size_t ptr_len,
377379 bool enable_etdump,
378- size_t debug_buffer_size) {
380+ size_t debug_buffer_size,
381+ Program::Verification program_verification) {
379382 EXECUTORCH_SCOPE_PROF (" load_module_from_buffer" );
380383 auto loader = std::make_unique<BufferDataLoader>(ptr, ptr_len);
381384 return std::make_unique<Module>(
382385 std::move (loader),
383386 enable_etdump ? std::make_unique<torch::executor::ETDumpGen>() : nullptr ,
384- debug_buffer_size);
387+ debug_buffer_size,
388+ program_verification);
385389}
386390
387391inline std::unique_ptr<Module> load_module_from_file (
388392 const std::string& path,
389393 bool enable_etdump,
390- size_t debug_buffer_size) {
394+ size_t debug_buffer_size,
395+ Program::Verification program_verification) {
391396 EXECUTORCH_SCOPE_PROF (" load_module_from_file" );
392397
393398 Result<MmapDataLoader> res = MmapDataLoader::from (
@@ -402,7 +407,8 @@ inline std::unique_ptr<Module> load_module_from_file(
402407 return std::make_unique<Module>(
403408 std::move (loader),
404409 enable_etdump ? std::make_unique<torch::executor::ETDumpGen>() : nullptr ,
405- debug_buffer_size);
410+ debug_buffer_size,
411+ program_verification);
406412}
407413
408414static constexpr size_t kDEFAULT_BUNDLED_INPUT_POOL_SIZE = 16 * 1024U ;
@@ -452,30 +458,41 @@ struct PyModule final {
452458 explicit PyModule (
453459 const py::bytes& buffer,
454460 bool enable_etdump,
455- size_t debug_buffer_size = 0 )
461+ size_t debug_buffer_size = 0 ,
462+ Program::Verification program_verification =
463+ Program::Verification::InternalConsistency)
456464 : module_(load_module_from_buffer(
457465 buffer.cast<std::string_view>().data(),
458466 py::len(buffer),
459467 enable_etdump,
460- debug_buffer_size)) {}
468+ debug_buffer_size,
469+ program_verification)) {}
461470
462471 explicit PyModule (
463472 const void * ptr,
464473 size_t ptr_len,
465474 bool enable_etdump,
466- size_t debug_buffer_size = 0 )
475+ size_t debug_buffer_size = 0 ,
476+ Program::Verification program_verification =
477+ Program::Verification::InternalConsistency)
467478 : module_(load_module_from_buffer(
468479 ptr,
469480 ptr_len,
470481 enable_etdump,
471- debug_buffer_size)) {}
482+ debug_buffer_size,
483+ program_verification)) {}
472484
473485 explicit PyModule (
474486 const std::string& path,
475487 bool enable_etdump,
476- size_t debug_buffer_size = 0 )
477- : module_(load_module_from_file(path, enable_etdump, debug_buffer_size)) {
478- }
488+ size_t debug_buffer_size = 0 ,
489+ Program::Verification program_verification =
490+ Program::Verification::InternalConsistency)
491+ : module_(load_module_from_file(
492+ path,
493+ enable_etdump,
494+ debug_buffer_size,
495+ program_verification)) {}
479496
480497 PyModule (const PyModule&) = delete ;
481498 PyModule& operator =(const PyModule&) = delete ;
@@ -486,14 +503,20 @@ struct PyModule final {
486503 static std::unique_ptr<PyModule> load_from_buffer (
487504 const py::bytes& buffer,
488505 bool enable_etdump,
489- size_t debug_buffer_size = 0 ) {
490- return std::make_unique<PyModule>(buffer, enable_etdump, debug_buffer_size);
506+ size_t debug_buffer_size = 0 ,
507+ Program::Verification program_verification =
508+ Program::Verification::InternalConsistency) {
509+ return std::make_unique<PyModule>(
510+ buffer, enable_etdump, debug_buffer_size, program_verification);
491511 }
492512 static std::unique_ptr<PyModule> load_from_file (
493513 const std::string& path,
494514 bool enable_etdump,
495- size_t debug_buffer_size = 0 ) {
496- return std::make_unique<PyModule>(path, enable_etdump, debug_buffer_size);
515+ size_t debug_buffer_size = 0 ,
516+ Program::Verification program_verification =
517+ Program::Verification::InternalConsistency) {
518+ return std::make_unique<PyModule>(
519+ path, enable_etdump, debug_buffer_size, program_verification);
497520 }
498521
499522 static std::unique_ptr<PyModule> load_from_bundled_program (
@@ -805,19 +828,29 @@ PYBIND11_MODULE(EXECUTORCH_PYTHON_MODULE_NAME, m) {
805828 // Redirects cout and cerr for function calls this guards to the python env.
806829 auto call_guard = py::
807830 call_guard<py::scoped_ostream_redirect, py::scoped_estream_redirect>();
831+
832+ // Bind the verification enum to python.
833+ py::enum_<Program::Verification>(m, " Verification" )
834+ .value (" Minimal" , Program::Verification::Minimal)
835+ .value (" InternalConsistency" , Program::Verification::InternalConsistency);
836+
808837 m.def (
809838 " _load_for_executorch" ,
810839 PyModule::load_from_file,
811840 py::arg (" path" ),
812841 py::arg (" enable_etdump" ) = false ,
813842 py::arg (" debug_buffer_size" ) = 0 ,
843+ py::arg (" program_verification" ) =
844+ Program::Verification::InternalConsistency,
814845 call_guard);
815846 m.def (
816847 " _load_for_executorch_from_buffer" ,
817848 &PyModule::load_from_buffer,
818849 py::arg (" buffer" ),
819850 py::arg (" enable_etdump" ) = false ,
820851 py::arg (" debug_buffer_size" ) = 0 ,
852+ py::arg (" program_verification" ) =
853+ Program::Verification::InternalConsistency,
821854 call_guard);
822855 m.def (
823856 " _load_for_executorch_from_bundled_program" ,
0 commit comments