From 3681d987c28876c633214389236119eb616b17c4 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Wed, 23 Apr 2025 14:31:48 -0700 Subject: [PATCH 1/5] [Android] Add unknown Tensor type instead of crash --- .../java/org/pytorch/executorch/Tensor.java | 23 ++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java b/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java index 6b32d90cda..ea408dabd5 100644 --- a/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java +++ b/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java @@ -630,6 +630,27 @@ public String toString() { } } + static class Tensor_unknown extends Tensor { + private final ByteBuffer data; + private final DType myDtype; + + private Tensor_raw_data_16b(ByteBuffer data, long[] shape, DType dtype) { + super(shape); + this.data = data; + this.myDtype = dtype; + } + + @Override + public DType dtype() { + return myDtype; + } + + @Override + public String toString() { + return String.format("Tensor(%s, dtype=%d)", Arrays.toString(shape), this.myDtype); + } + } + // region checks private static void checkArgument(boolean expression, String errorMessage, Object... args) { if (!expression) { @@ -675,7 +696,7 @@ private static Tensor nativeNewTensor( } else if (DType.INT8.jniCode == dtype) { tensor = new Tensor_int8(data, shape); } else { - throw new IllegalArgumentException("Unknown Tensor dtype"); + tensor = new Tensor_unknown(data, shape, dtype); } tensor.mHybridData = hybridData; return tensor; From db95cd429e59d38d6dc16a5fe01233d48929bbb3 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Wed, 23 Apr 2025 14:47:42 -0700 Subject: [PATCH 2/5] Fix --- .../src/main/java/org/pytorch/executorch/Tensor.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java b/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java index ea408dabd5..29c7a59c86 100644 --- a/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java +++ b/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java @@ -634,7 +634,7 @@ static class Tensor_unknown extends Tensor { private final ByteBuffer data; private final DType myDtype; - private Tensor_raw_data_16b(ByteBuffer data, long[] shape, DType dtype) { + private Tensor_unknown(ByteBuffer data, long[] shape, DType dtype) { super(shape); this.data = data; this.myDtype = dtype; From cb6c439e30f82d617d5ac73d2804dfd3b4c9a675 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Wed, 23 Apr 2025 14:58:01 -0700 Subject: [PATCH 3/5] Fix --- .../src/main/java/org/pytorch/executorch/DType.java | 9 +++++++++ .../main/java/org/pytorch/executorch/Tensor.java | 13 +++++++++---- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/extension/android/executorch_android/src/main/java/org/pytorch/executorch/DType.java b/extension/android/executorch_android/src/main/java/org/pytorch/executorch/DType.java index f5d33d0b71..3aca4871d6 100644 --- a/extension/android/executorch_android/src/main/java/org/pytorch/executorch/DType.java +++ b/extension/android/executorch_android/src/main/java/org/pytorch/executorch/DType.java @@ -73,4 +73,13 @@ public enum DType { DType(int jniCode) { this.jniCode = jniCode; } + + public static DType fromJniCode(int jniCode) { + for (DType dtype : values()) { + if (dtype.jniCode == jniCode) { + return dtype; + } + } + throw new IllegalArgumentException("No DType found for jniCode " + jniCode); + } } diff --git a/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java b/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java index 29c7a59c86..e5f3087f6a 100644 --- a/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java +++ b/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java @@ -8,6 +8,7 @@ package org.pytorch.executorch; +import android.util.Log; import com.facebook.jni.HybridData; import com.facebook.jni.annotations.DoNotStrip; import java.nio.Buffer; @@ -630,14 +631,17 @@ public String toString() { } } - static class Tensor_unknown extends Tensor { + static class Tensor_unsupported extends Tensor { private final ByteBuffer data; private final DType myDtype; - private Tensor_unknown(ByteBuffer data, long[] shape, DType dtype) { + private Tensor_unsupported(ByteBuffer data, long[] shape, DType dtype) { super(shape); this.data = data; this.myDtype = dtype; + Log.e( + "ExecuTorch", + toString() + " in Java. Please consider re-export the model with proper return type"); } @Override @@ -647,7 +651,8 @@ public DType dtype() { @Override public String toString() { - return String.format("Tensor(%s, dtype=%d)", Arrays.toString(shape), this.myDtype); + return String.format( + "Unsupported tensor(%s, dtype=%d)", Arrays.toString(shape), this.myDtype); } } @@ -696,7 +701,7 @@ private static Tensor nativeNewTensor( } else if (DType.INT8.jniCode == dtype) { tensor = new Tensor_int8(data, shape); } else { - tensor = new Tensor_unknown(data, shape, dtype); + tensor = new Tensor_unsupported(data, shape, DType.fromJniCode(dtype)); } tensor.mHybridData = hybridData; return tensor; From 4c038e2f2b35229cebd43ebbe6d8af2dff7dccb1 Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Wed, 23 Apr 2025 17:01:54 -0700 Subject: [PATCH 4/5] myDtype -> mDtype --- .../src/main/java/org/pytorch/executorch/Tensor.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java b/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java index e5f3087f6a..90f03a867a 100644 --- a/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java +++ b/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java @@ -633,12 +633,12 @@ public String toString() { static class Tensor_unsupported extends Tensor { private final ByteBuffer data; - private final DType myDtype; + private final DType mDtype; private Tensor_unsupported(ByteBuffer data, long[] shape, DType dtype) { super(shape); this.data = data; - this.myDtype = dtype; + this.mDtype = dtype; Log.e( "ExecuTorch", toString() + " in Java. Please consider re-export the model with proper return type"); @@ -646,13 +646,13 @@ private Tensor_unsupported(ByteBuffer data, long[] shape, DType dtype) { @Override public DType dtype() { - return myDtype; + return mDtype; } @Override public String toString() { return String.format( - "Unsupported tensor(%s, dtype=%d)", Arrays.toString(shape), this.myDtype); + "Unsupported tensor(%s, dtype=%d)", Arrays.toString(shape), this.mDtype); } } From f5490644dd4fefaf9ccfc43e97f3d40d2d5c322e Mon Sep 17 00:00:00 2001 From: Hansong Zhang Date: Wed, 23 Apr 2025 17:17:41 -0700 Subject: [PATCH 5/5] linter --- .../src/main/java/org/pytorch/executorch/Tensor.java | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java b/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java index 90f03a867a..1a30baba2f 100644 --- a/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java +++ b/extension/android/executorch_android/src/main/java/org/pytorch/executorch/Tensor.java @@ -651,8 +651,7 @@ public DType dtype() { @Override public String toString() { - return String.format( - "Unsupported tensor(%s, dtype=%d)", Arrays.toString(shape), this.mDtype); + return String.format("Unsupported tensor(%s, dtype=%d)", Arrays.toString(shape), this.mDtype); } }