Skip to content

Commit cec4dee

Browse files
authored
Update ETCoreMLModelManager.mm
1 parent 87eddfd commit cec4dee

File tree

1 file changed

+28
-31
lines changed

1 file changed

+28
-31
lines changed

backends/apple/coreml/runtime/delegate/ETCoreMLModelManager.mm

Lines changed: 28 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)