@@ -157,13 +157,15 @@ class Module final {
157
157
explicit Module (
158
158
std::unique_ptr<DataLoader> loader,
159
159
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)
161
163
: loader_(std::move(loader)),
162
164
event_tracer_(std::move(tracer)),
163
165
debug_buffer_size_(debug_buffer_size) {
164
166
::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 );
167
169
THROW_IF_ERROR (
168
170
program.error (),
169
171
" loading program failed with error: 0x%" PRIx32,
@@ -375,19 +377,22 @@ inline std::unique_ptr<Module> load_module_from_buffer(
375
377
const void * ptr,
376
378
size_t ptr_len,
377
379
bool enable_etdump,
378
- size_t debug_buffer_size) {
380
+ size_t debug_buffer_size,
381
+ Program::Verification program_verification) {
379
382
EXECUTORCH_SCOPE_PROF (" load_module_from_buffer" );
380
383
auto loader = std::make_unique<BufferDataLoader>(ptr, ptr_len);
381
384
return std::make_unique<Module>(
382
385
std::move (loader),
383
386
enable_etdump ? std::make_unique<torch::executor::ETDumpGen>() : nullptr ,
384
- debug_buffer_size);
387
+ debug_buffer_size,
388
+ program_verification);
385
389
}
386
390
387
391
inline std::unique_ptr<Module> load_module_from_file (
388
392
const std::string& path,
389
393
bool enable_etdump,
390
- size_t debug_buffer_size) {
394
+ size_t debug_buffer_size,
395
+ Program::Verification program_verification) {
391
396
EXECUTORCH_SCOPE_PROF (" load_module_from_file" );
392
397
393
398
Result<MmapDataLoader> res = MmapDataLoader::from (
@@ -402,7 +407,8 @@ inline std::unique_ptr<Module> load_module_from_file(
402
407
return std::make_unique<Module>(
403
408
std::move (loader),
404
409
enable_etdump ? std::make_unique<torch::executor::ETDumpGen>() : nullptr ,
405
- debug_buffer_size);
410
+ debug_buffer_size,
411
+ program_verification);
406
412
}
407
413
408
414
static constexpr size_t kDEFAULT_BUNDLED_INPUT_POOL_SIZE = 16 * 1024U ;
@@ -452,30 +458,41 @@ struct PyModule final {
452
458
explicit PyModule (
453
459
const py::bytes& buffer,
454
460
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)
456
464
: module_(load_module_from_buffer(
457
465
buffer.cast<std::string_view>().data(),
458
466
py::len(buffer),
459
467
enable_etdump,
460
- debug_buffer_size)) {}
468
+ debug_buffer_size,
469
+ program_verification)) {}
461
470
462
471
explicit PyModule (
463
472
const void * ptr,
464
473
size_t ptr_len,
465
474
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)
467
478
: module_(load_module_from_buffer(
468
479
ptr,
469
480
ptr_len,
470
481
enable_etdump,
471
- debug_buffer_size)) {}
482
+ debug_buffer_size,
483
+ program_verification)) {}
472
484
473
485
explicit PyModule (
474
486
const std::string& path,
475
487
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)) {}
479
496
480
497
PyModule (const PyModule&) = delete ;
481
498
PyModule& operator =(const PyModule&) = delete ;
@@ -486,14 +503,20 @@ struct PyModule final {
486
503
static std::unique_ptr<PyModule> load_from_buffer (
487
504
const py::bytes& buffer,
488
505
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);
491
511
}
492
512
static std::unique_ptr<PyModule> load_from_file (
493
513
const std::string& path,
494
514
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);
497
520
}
498
521
499
522
static std::unique_ptr<PyModule> load_from_bundled_program (
@@ -805,19 +828,29 @@ PYBIND11_MODULE(EXECUTORCH_PYTHON_MODULE_NAME, m) {
805
828
// Redirects cout and cerr for function calls this guards to the python env.
806
829
auto call_guard = py::
807
830
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
+
808
837
m.def (
809
838
" _load_for_executorch" ,
810
839
PyModule::load_from_file,
811
840
py::arg (" path" ),
812
841
py::arg (" enable_etdump" ) = false ,
813
842
py::arg (" debug_buffer_size" ) = 0 ,
843
+ py::arg (" program_verification" ) =
844
+ Program::Verification::InternalConsistency,
814
845
call_guard);
815
846
m.def (
816
847
" _load_for_executorch_from_buffer" ,
817
848
&PyModule::load_from_buffer,
818
849
py::arg (" buffer" ),
819
850
py::arg (" enable_etdump" ) = false ,
820
851
py::arg (" debug_buffer_size" ) = 0 ,
852
+ py::arg (" program_verification" ) =
853
+ Program::Verification::InternalConsistency,
821
854
call_guard);
822
855
m.def (
823
856
" _load_for_executorch_from_bundled_program" ,
0 commit comments