@@ -168,13 +168,15 @@ class Module final {
168168 explicit Module (
169169 std::unique_ptr<DataLoader> loader,
170170 std::unique_ptr<ETDumpGen> tracer = nullptr ,
171- size_t debug_buffer_size = 0 )
171+ size_t debug_buffer_size = 0 ,
172+ Program::Verification program_verification =
173+ Program::Verification::InternalConsistency)
172174 : loader_(std::move(loader)),
173175 event_tracer_(std::move(tracer)),
174176 debug_buffer_size_(debug_buffer_size) {
175177 ::executorch::runtime::runtime_init ();
176- Result<Program> program = Program::load (
177- loader_.get (), Program::Verification::InternalConsistency );
178+ Result<Program> program =
179+ Program::load ( loader_.get (), program_verification );
178180 THROW_IF_ERROR (
179181 program.error (),
180182 " loading program failed with error: 0x%" PRIx32,
@@ -388,19 +390,22 @@ inline std::unique_ptr<Module> load_module_from_buffer(
388390 const void * ptr,
389391 size_t ptr_len,
390392 bool enable_etdump,
391- size_t debug_buffer_size) {
393+ size_t debug_buffer_size,
394+ Program::Verification program_verification) {
392395 EXECUTORCH_SCOPE_PROF (" load_module_from_buffer" );
393396 auto loader = std::make_unique<BufferDataLoader>(ptr, ptr_len);
394397 return std::make_unique<Module>(
395398 std::move (loader),
396399 enable_etdump ? std::make_unique<torch::executor::ETDumpGen>() : nullptr ,
397- debug_buffer_size);
400+ debug_buffer_size,
401+ program_verification);
398402}
399403
400404inline std::unique_ptr<Module> load_module_from_file (
401405 const std::string& path,
402406 bool enable_etdump,
403- size_t debug_buffer_size) {
407+ size_t debug_buffer_size,
408+ Program::Verification program_verification) {
404409 EXECUTORCH_SCOPE_PROF (" load_module_from_file" );
405410
406411 Result<MmapDataLoader> res = MmapDataLoader::from (
@@ -415,7 +420,8 @@ inline std::unique_ptr<Module> load_module_from_file(
415420 return std::make_unique<Module>(
416421 std::move (loader),
417422 enable_etdump ? std::make_unique<torch::executor::ETDumpGen>() : nullptr ,
418- debug_buffer_size);
423+ debug_buffer_size,
424+ program_verification);
419425}
420426
421427static constexpr size_t kDEFAULT_BUNDLED_INPUT_POOL_SIZE = 16 * 1024U ;
@@ -578,30 +584,41 @@ struct PyModule final {
578584 explicit PyModule (
579585 const py::bytes& buffer,
580586 bool enable_etdump,
581- size_t debug_buffer_size = 0 )
587+ size_t debug_buffer_size = 0 ,
588+ Program::Verification program_verification =
589+ Program::Verification::InternalConsistency)
582590 : module_(load_module_from_buffer(
583591 buffer.cast<std::string_view>().data(),
584592 py::len(buffer),
585593 enable_etdump,
586- debug_buffer_size)) {}
594+ debug_buffer_size,
595+ program_verification)) {}
587596
588597 explicit PyModule (
589598 const void * ptr,
590599 size_t ptr_len,
591600 bool enable_etdump,
592- size_t debug_buffer_size = 0 )
601+ size_t debug_buffer_size = 0 ,
602+ Program::Verification program_verification =
603+ Program::Verification::InternalConsistency)
593604 : module_(load_module_from_buffer(
594605 ptr,
595606 ptr_len,
596607 enable_etdump,
597- debug_buffer_size)) {}
608+ debug_buffer_size,
609+ program_verification)) {}
598610
599611 explicit PyModule (
600612 const std::string& path,
601613 bool enable_etdump,
602- size_t debug_buffer_size = 0 )
603- : module_(load_module_from_file(path, enable_etdump, debug_buffer_size)) {
604- }
614+ size_t debug_buffer_size = 0 ,
615+ Program::Verification program_verification =
616+ Program::Verification::InternalConsistency)
617+ : module_(load_module_from_file(
618+ path,
619+ enable_etdump,
620+ debug_buffer_size,
621+ program_verification)) {}
605622
606623 PyModule (const PyModule&) = delete ;
607624 PyModule& operator =(const PyModule&) = delete ;
@@ -612,14 +629,20 @@ struct PyModule final {
612629 static std::unique_ptr<PyModule> load_from_buffer (
613630 const py::bytes& buffer,
614631 bool enable_etdump,
615- size_t debug_buffer_size = 0 ) {
616- return std::make_unique<PyModule>(buffer, enable_etdump, debug_buffer_size);
632+ size_t debug_buffer_size = 0 ,
633+ Program::Verification program_verification =
634+ Program::Verification::InternalConsistency) {
635+ return std::make_unique<PyModule>(
636+ buffer, enable_etdump, debug_buffer_size, program_verification);
617637 }
618638 static std::unique_ptr<PyModule> load_from_file (
619639 const std::string& path,
620640 bool enable_etdump,
621- size_t debug_buffer_size = 0 ) {
622- return std::make_unique<PyModule>(path, enable_etdump, debug_buffer_size);
641+ size_t debug_buffer_size = 0 ,
642+ Program::Verification program_verification =
643+ Program::Verification::InternalConsistency) {
644+ return std::make_unique<PyModule>(
645+ path, enable_etdump, debug_buffer_size, program_verification);
623646 }
624647
625648 static std::unique_ptr<PyModule> load_from_bundled_program (
@@ -944,19 +967,29 @@ PYBIND11_MODULE(EXECUTORCH_PYTHON_MODULE_NAME, m) {
944967 // Redirects cout and cerr for function calls this guards to the python env.
945968 auto call_guard = py::
946969 call_guard<py::scoped_ostream_redirect, py::scoped_estream_redirect>();
970+
971+ // Bind the verification enum to python.
972+ py::enum_<Program::Verification>(m, " Verification" )
973+ .value (" Minimal" , Program::Verification::Minimal)
974+ .value (" InternalConsistency" , Program::Verification::InternalConsistency);
975+
947976 m.def (
948977 " _load_for_executorch" ,
949978 PyModule::load_from_file,
950979 py::arg (" path" ),
951980 py::arg (" enable_etdump" ) = false ,
952981 py::arg (" debug_buffer_size" ) = 0 ,
982+ py::arg (" program_verification" ) =
983+ Program::Verification::InternalConsistency,
953984 call_guard);
954985 m.def (
955986 " _load_for_executorch_from_buffer" ,
956987 &PyModule::load_from_buffer,
957988 py::arg (" buffer" ),
958989 py::arg (" enable_etdump" ) = false ,
959990 py::arg (" debug_buffer_size" ) = 0 ,
991+ py::arg (" program_verification" ) =
992+ Program::Verification::InternalConsistency,
960993 call_guard);
961994 m.def (
962995 " _load_for_executorch_from_bundled_program" ,
0 commit comments