@@ -690,15 +690,16 @@ - (BOOL)executeModelWithHandle:(ModelHandle *)handle
690690 loggingOptions : (const executorchcoreml::ModelLoggingOptions&)loggingOptions
691691 eventLogger : (const executorchcoreml::ModelEventLogger* _Nullable)eventLogger
692692 error : (NSError * __autoreleasing *)error {
693+ BOOL result = NO ;
693694 id <ETCoreMLModelExecutor> executor = [self executorWithHandle: handle];
694695 if (!executor) {
695696 ETCoreMLLogErrorAndSetNSError (error,
696697 0 ,
697698 " %@: Model is already unloaded." ,
698699 NSStringFromClass (self.class ));
699- return NO ;
700+ return result ;
700701 }
701-
702+
702703 ETCoreMLModel *model = executor.model ;
703704 if (args.count != model.orderedInputNames .count + model.orderedOutputNames .count ) {
704705 ETCoreMLLogErrorAndSetNSError (error,
@@ -707,51 +708,49 @@ - (BOOL)executeModelWithHandle:(ModelHandle *)handle
707708 NSStringFromClass (self.class ),
708709 static_cast<unsigned long>(model.orderedInputNames.count + model.orderedOutputNames.count),
709710 args.count);
710- return NO ;
711+ return result ;
711712 }
712713 NSError *localError = nil ;
713- NSArray <MLMultiArray *> *modelOutputs = nil ;
714714 @autoreleasepool {
715715 NSArray <MLMultiArray *> *inputs = [args subarrayWithRange: NSMakeRange (0 , model.orderedInputNames.count)];
716716 NSArray <MLMultiArray *> *outputs = [args subarrayWithRange: NSMakeRange (model.orderedInputNames.count, args.count - model.orderedInputNames.count)];
717717 NSArray <MLMultiArray *> *outputBackings = @[];
718718 if (executor.ignoreOutputBackings == NO ) {
719719 outputBackings = outputs;
720720 }
721-
722- modelOutputs = [self executeModelUsingExecutor: executor
723- inputs: inputs
724- outputBackings: outputBackings
725- loggingOptions: loggingOptions
726- eventLogger: eventLogger
727- error: error];
721+ NSArray <MLMultiArray *> *modelOutputs = [self executeModelUsingExecutor: executor
722+ inputs: inputs
723+ outputBackings: outputBackings
724+ loggingOptions: loggingOptions
725+ eventLogger: eventLogger
726+ error: &localError];
728727 if (modelOutputs) {
729728 ::set_outputs (outputs, modelOutputs);
729+ result = YES ;
730730 }
731731 }
732- if (!modelOutputs ) {
732+ if (!result ) {
733733 if (error) {
734734 *error = localError;
735735 }
736- return NO ;
737736 }
738- return YES ;
737+ return result ;
739738}
740739
741740- (BOOL )executeModelWithHandle : (ModelHandle *)handle
742741 argsVec : (std::vector<executorchcoreml::MultiArray>&)argsVec
743742 loggingOptions : (const executorchcoreml::ModelLoggingOptions&)loggingOptions
744743 eventLogger : (const executorchcoreml::ModelEventLogger* _Nullable)eventLogger
745744 error : (NSError * __autoreleasing *)error {
745+ BOOL result = NO ;
746746 id <ETCoreMLModelExecutor> executor = [self executorWithHandle: handle];
747747 if (!executor) {
748748 ETCoreMLLogErrorAndSetNSError (error,
749749 0 ,
750750 " %@: Model is already unloaded." ,
751751 NSStringFromClass (self.class ));
752- return NO ;
752+ return result ;
753753 }
754-
755754 ETCoreMLModel *model = executor.model ;
756755 if (argsVec.size () != model.orderedInputNames .count + model.orderedOutputNames .count ) {
757756 ETCoreMLLogErrorAndSetNSError (error,
@@ -760,46 +759,44 @@ - (BOOL)executeModelWithHandle:(ModelHandle *)handle
760759 NSStringFromClass (self.class ),
761760 static_cast<unsigned long>(model.orderedInputNames.count + model.orderedOutputNames.count),
762761 argsVec.size());
763- return NO ;
762+ return result ;
764763 }
765-
766764 std::vector<executorchcoreml::MultiArray> inputArgs (argsVec.begin (), argsVec.begin () + model.orderedInputNames .count );
767765 std::vector<executorchcoreml::MultiArray> outputArgs (argsVec.begin () + model.orderedInputNames .count , argsVec.end ());
768766 NSError *localError = nil ;
769- NSArray <MLMultiArray *> *modelOutputs = nil ;
770767 @autoreleasepool {
771- NSArray <MLMultiArray *> *inputs = [model prepareInputs: inputArgs error: error ];
768+ NSArray <MLMultiArray *> *inputs = [model prepareInputs: inputArgs error: &localError ];
772769 if (inputs) {
773770 NSArray <MLMultiArray *> *outputBackings = @[];
774771 if (executor.ignoreOutputBackings == NO ) {
775- outputBackings = [model prepareOutputBackings: outputArgs error: error ];
772+ outputBackings = [model prepareOutputBackings: outputArgs error: &localError ];
776773 }
777774 if (outputBackings) {
778- modelOutputs = [self executeModelUsingExecutor: executor
779- inputs: inputs
780- outputBackings: outputBackings
781- loggingOptions: loggingOptions
782- eventLogger: eventLogger
783- error: error ];
784- if (! modelOutputs) {
775+ NSArray <MLMultiArray *> * modelOutputs = [self executeModelUsingExecutor: executor
776+ inputs: inputs
777+ outputBackings: outputBackings
778+ loggingOptions: loggingOptions
779+ eventLogger: eventLogger
780+ error: &localError ];
781+ if (modelOutputs) {
785782 // Resize for dynamic shapes
786783 for (int i = 0 ; i < outputArgs.size (); i++) {
787784 auto new_size = to_vector<size_t >(modelOutputs[i].shape );
788785 outputArgs[i].resize (new_size);
789786 argsVec[model.orderedInputNames.count + i].resize (new_size);
790787 }
791788 ::set_outputs (outputArgs, modelOutputs);
789+ result = YES ;
792790 }
793791 }
794792 }
795793 }
796- if (!modelOutputs ) {
794+ if (!result ) {
797795 if (error) {
798796 *error = localError;
799797 }
800- return NO ;
801798 }
802- return YES ;
799+ return result ;
803800}
804801
805802- (BOOL )unloadModelWithHandle : (ModelHandle *)handle {
0 commit comments