@@ -711,112 +711,113 @@ - (BOOL)executeModelWithHandle:(ModelHandle *)handle
711711 loggingOptions : (const executorchcoreml::ModelLoggingOptions&)loggingOptions
712712 eventLogger : (const executorchcoreml::ModelEventLogger* _Nullable)eventLogger
713713 error : (NSError * __autoreleasing *)error {
714+ BOOL result = NO ;
714715 id <ETCoreMLModelExecutor> executor = [self executorWithHandle: handle];
715716 if (!executor) {
716717 ETCoreMLLogErrorAndSetNSError (error,
717- ETCoreMLErrorInternalError,
718- " Model is already unloaded." );
719- return NO ;
718+ 0 ,
719+ " %@: Model is already unloaded." ,
720+ NSStringFromClass (self.class ));
721+ return result;
720722 }
721-
723+
722724 ETCoreMLModel *model = executor.model ;
723725 if (args.count != model.orderedInputNames .count + model.orderedOutputNames .count ) {
724726 ETCoreMLLogErrorAndSetNSError (error,
725727 ETCoreMLErrorCorruptedModel,
726- " Model is invalid, expected args count to be %lu but got %lu." ,
728+ " %@: Model is invalid, expected args count to be %lu but got %lu." ,
729+ NSStringFromClass (self.class ),
727730 static_cast<unsigned long>(model.orderedInputNames.count + model.orderedOutputNames.count),
728731 args.count);
729- return NO ;
732+ return result ;
730733 }
731734 NSError *localError = nil ;
732- NSArray <MLMultiArray *> *modelOutputs = nil ;
733735 @autoreleasepool {
734736 NSArray <MLMultiArray *> *inputs = [args subarrayWithRange: NSMakeRange (0 , model.orderedInputNames.count)];
735737 NSArray <MLMultiArray *> *outputs = [args subarrayWithRange: NSMakeRange (model.orderedInputNames.count, args.count - model.orderedInputNames.count)];
736738 NSArray <MLMultiArray *> *outputBackings = @[];
737739 if (executor.ignoreOutputBackings == NO ) {
738740 outputBackings = outputs;
739741 }
740-
741- modelOutputs = [self executeModelUsingExecutor: executor
742- inputs: inputs
743- outputBackings: outputBackings
744- loggingOptions: loggingOptions
745- eventLogger: eventLogger
746- error: error];
742+ NSArray <MLMultiArray *> *modelOutputs = [self executeModelUsingExecutor: executor
743+ inputs: inputs
744+ outputBackings: outputBackings
745+ loggingOptions: loggingOptions
746+ eventLogger: eventLogger
747+ error: &localError];
747748 if (modelOutputs) {
748749 ::set_outputs (outputs, modelOutputs);
750+ result = YES ;
749751 }
750752 }
751- if (!modelOutputs ) {
753+ if (!result ) {
752754 if (error) {
753755 *error = localError;
754756 }
755- return NO ;
756757 }
757- return YES ;
758+ return result ;
758759}
759760
760761- (BOOL )executeModelWithHandle : (ModelHandle *)handle
761762 argsVec : (std::vector<executorchcoreml::MultiArray>&)argsVec
762763 loggingOptions : (const executorchcoreml::ModelLoggingOptions&)loggingOptions
763764 eventLogger : (const executorchcoreml::ModelEventLogger* _Nullable)eventLogger
764765 error : (NSError * __autoreleasing *)error {
766+ BOOL result = NO ;
765767 id <ETCoreMLModelExecutor> executor = [self executorWithHandle: handle];
766768 if (!executor) {
767769 ETCoreMLLogErrorAndSetNSError (error,
768- ETCoreMLErrorInternalError,
769- " Model is already unloaded." );
770- return NO ;
770+ 0 ,
771+ " %@: Model is already unloaded." ,
772+ NSStringFromClass (self.class ));
773+ return result;
771774 }
772-
773775 ETCoreMLModel *model = executor.model ;
774776 if (argsVec.size () != model.orderedInputNames .count + model.orderedOutputNames .count ) {
775777 ETCoreMLLogErrorAndSetNSError (error,
776778 ETCoreMLErrorCorruptedModel,
777- " Model is invalid, expected args count to be %lu but got %lu." ,
779+ " %@: Model is invalid, expected args count to be %lu but got %lu." ,
780+ NSStringFromClass (self.class ),
778781 static_cast<unsigned long>(model.orderedInputNames.count + model.orderedOutputNames.count),
779782 argsVec.size());
780- return NO ;
783+ return result ;
781784 }
782-
783785 std::vector<executorchcoreml::MultiArray> inputArgs (argsVec.begin (), argsVec.begin () + model.orderedInputNames .count );
784786 std::vector<executorchcoreml::MultiArray> outputArgs (argsVec.begin () + model.orderedInputNames .count , argsVec.end ());
785787 NSError *localError = nil ;
786- NSArray <MLMultiArray *> *modelOutputs = nil ;
787788 @autoreleasepool {
788- NSArray <MLMultiArray *> *inputs = [model prepareInputs: inputArgs error: error ];
789+ NSArray <MLMultiArray *> *inputs = [model prepareInputs: inputArgs error: &localError ];
789790 if (inputs) {
790791 NSArray <MLMultiArray *> *outputBackings = @[];
791792 if (executor.ignoreOutputBackings == NO ) {
792- outputBackings = [model prepareOutputBackings: outputArgs error: error ];
793+ outputBackings = [model prepareOutputBackings: outputArgs error: &localError ];
793794 }
794795 if (outputBackings) {
795- modelOutputs = [self executeModelUsingExecutor: executor
796- inputs: inputs
797- outputBackings: outputBackings
798- loggingOptions: loggingOptions
799- eventLogger: eventLogger
800- error: error ];
801- if (! modelOutputs) {
796+ NSArray <MLMultiArray *> * modelOutputs = [self executeModelUsingExecutor: executor
797+ inputs: inputs
798+ outputBackings: outputBackings
799+ loggingOptions: loggingOptions
800+ eventLogger: eventLogger
801+ error: &localError ];
802+ if (modelOutputs) {
802803 // Resize for dynamic shapes
803804 for (int i = 0 ; i < outputArgs.size (); i++) {
804805 auto new_size = to_vector<size_t >(modelOutputs[i].shape );
805806 outputArgs[i].resize (new_size);
806807 argsVec[model.orderedInputNames.count + i].resize (new_size);
807808 }
808809 ::set_outputs (outputArgs, modelOutputs);
810+ result = YES ;
809811 }
810812 }
811813 }
812814 }
813- if (!modelOutputs ) {
815+ if (!result ) {
814816 if (error) {
815817 *error = localError;
816818 }
817- return NO ;
818819 }
819- return YES ;
820+ return result ;
820821}
821822
822823- (BOOL )unloadModelWithHandle : (ModelHandle *)handle {
0 commit comments