@@ -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,
@@ -386,19 +388,22 @@ inline std::unique_ptr<Module> load_module_from_buffer(
386388 const void * ptr,
387389 size_t ptr_len,
388390 bool enable_etdump,
389- size_t debug_buffer_size) {
391+ size_t debug_buffer_size,
392+ Program::Verification program_verification) {
390393 EXECUTORCH_SCOPE_PROF (" load_module_from_buffer" );
391394 auto loader = std::make_unique<BufferDataLoader>(ptr, ptr_len);
392395 return std::make_unique<Module>(
393396 std::move (loader),
394397 enable_etdump ? std::make_unique<torch::executor::ETDumpGen>() : nullptr ,
395- debug_buffer_size);
398+ debug_buffer_size,
399+ program_verification);
396400}
397401
398402inline std::unique_ptr<Module> load_module_from_file (
399403 const std::string& path,
400404 bool enable_etdump,
401- size_t debug_buffer_size) {
405+ size_t debug_buffer_size,
406+ Program::Verification program_verification) {
402407 EXECUTORCH_SCOPE_PROF (" load_module_from_file" );
403408
404409 Result<MmapDataLoader> res = MmapDataLoader::from (
@@ -413,7 +418,8 @@ inline std::unique_ptr<Module> load_module_from_file(
413418 return std::make_unique<Module>(
414419 std::move (loader),
415420 enable_etdump ? std::make_unique<torch::executor::ETDumpGen>() : nullptr ,
416- debug_buffer_size);
421+ debug_buffer_size,
422+ program_verification);
417423}
418424
419425static constexpr size_t kDEFAULT_BUNDLED_INPUT_POOL_SIZE = 16 * 1024U ;
@@ -576,30 +582,41 @@ struct PyModule final {
576582 explicit PyModule (
577583 const py::bytes& buffer,
578584 bool enable_etdump,
579- size_t debug_buffer_size = 0 )
585+ size_t debug_buffer_size = 0 ,
586+ Program::Verification program_verification =
587+ Program::Verification::InternalConsistency)
580588 : module_(load_module_from_buffer(
581589 buffer.cast<std::string_view>().data(),
582590 py::len(buffer),
583591 enable_etdump,
584- debug_buffer_size)) {}
592+ debug_buffer_size,
593+ program_verification)) {}
585594
586595 explicit PyModule (
587596 const void * ptr,
588597 size_t ptr_len,
589598 bool enable_etdump,
590- size_t debug_buffer_size = 0 )
599+ size_t debug_buffer_size = 0 ,
600+ Program::Verification program_verification =
601+ Program::Verification::InternalConsistency)
591602 : module_(load_module_from_buffer(
592603 ptr,
593604 ptr_len,
594605 enable_etdump,
595- debug_buffer_size)) {}
606+ debug_buffer_size,
607+ program_verification)) {}
596608
597609 explicit PyModule (
598610 const std::string& path,
599611 bool enable_etdump,
600- size_t debug_buffer_size = 0 )
601- : module_(load_module_from_file(path, enable_etdump, debug_buffer_size)) {
602- }
612+ size_t debug_buffer_size = 0 ,
613+ Program::Verification program_verification =
614+ Program::Verification::InternalConsistency)
615+ : module_(load_module_from_file(
616+ path,
617+ enable_etdump,
618+ debug_buffer_size,
619+ program_verification)) {}
603620
604621 PyModule (const PyModule&) = delete ;
605622 PyModule& operator =(const PyModule&) = delete ;
@@ -610,14 +627,20 @@ struct PyModule final {
610627 static std::unique_ptr<PyModule> load_from_buffer (
611628 const py::bytes& buffer,
612629 bool enable_etdump,
613- size_t debug_buffer_size = 0 ) {
614- return std::make_unique<PyModule>(buffer, enable_etdump, debug_buffer_size);
630+ size_t debug_buffer_size = 0 ,
631+ Program::Verification program_verification =
632+ Program::Verification::InternalConsistency) {
633+ return std::make_unique<PyModule>(
634+ buffer, enable_etdump, debug_buffer_size, program_verification);
615635 }
616636 static std::unique_ptr<PyModule> load_from_file (
617637 const std::string& path,
618638 bool enable_etdump,
619- size_t debug_buffer_size = 0 ) {
620- return std::make_unique<PyModule>(path, enable_etdump, debug_buffer_size);
639+ size_t debug_buffer_size = 0 ,
640+ Program::Verification program_verification =
641+ Program::Verification::InternalConsistency) {
642+ return std::make_unique<PyModule>(
643+ path, enable_etdump, debug_buffer_size, program_verification);
621644 }
622645
623646 static std::unique_ptr<PyModule> load_from_bundled_program (
@@ -934,19 +957,29 @@ PYBIND11_MODULE(EXECUTORCH_PYTHON_MODULE_NAME, m) {
934957 // Redirects cout and cerr for function calls this guards to the python env.
935958 auto call_guard = py::
936959 call_guard<py::scoped_ostream_redirect, py::scoped_estream_redirect>();
960+
961+ // Bind the verification enum to python.
962+ py::enum_<Program::Verification>(m, " Verification" )
963+ .value (" Minimal" , Program::Verification::Minimal)
964+ .value (" InternalConsistency" , Program::Verification::InternalConsistency);
965+
937966 m.def (
938967 " _load_for_executorch" ,
939968 PyModule::load_from_file,
940969 py::arg (" path" ),
941970 py::arg (" enable_etdump" ) = false ,
942971 py::arg (" debug_buffer_size" ) = 0 ,
972+ py::arg (" program_verification" ) =
973+ Program::Verification::InternalConsistency,
943974 call_guard);
944975 m.def (
945976 " _load_for_executorch_from_buffer" ,
946977 &PyModule::load_from_buffer,
947978 py::arg (" buffer" ),
948979 py::arg (" enable_etdump" ) = false ,
949980 py::arg (" debug_buffer_size" ) = 0 ,
981+ py::arg (" program_verification" ) =
982+ Program::Verification::InternalConsistency,
950983 call_guard);
951984 m.def (
952985 " _load_for_executorch_from_bundled_program" ,
0 commit comments