diff --git a/matrix/pom.xml b/matrix/pom.xml
new file mode 100644
index 00000000..93fe1843
--- /dev/null
+++ b/matrix/pom.xml
@@ -0,0 +1,176 @@
+
+
+ 4.0.0
+
+
+ com.gluonhq.samples
+ samples
+ 1.0.0-SNAPSHOT
+
+
+ matrix
+ 1.0.0-SNAPSHOT
+ jar
+
+ Matrix
+
+
+ com.gluonhq.samples.matrix.Main
+ 1.5.4
+ 1.0.0-beta7
+
+
+
+
+ org.openjfx
+ javafx-controls
+ ${javafx.version}
+
+
+ org.bytedeco
+ javacpp
+ ${javacpp.version}
+ ${cl}
+
+
+ org.bytedeco
+ javacpp
+ ${javacpp.version}
+
+
+ org.bytedeco
+ openblas
+ 0.3.10-${javacpp.version}
+ ${cl}
+
+
+ org.bytedeco
+ openblas
+ 0.3.10-${javacpp.version}
+
+
+ org.slf4j
+ slf4j-nop
+ 1.7.26
+
+
+ org.nd4j
+ nd4j-native
+ ${dl4j.version}
+ ${cl}
+
+
+ org.nd4j
+ nd4j-native
+ ${dl4j.version}
+
+
+ com.gluonhq
+ charm-glisten
+ ${charm.version}
+
+
+ com.gluonhq.attach
+ display
+ ${attach.version}
+
+
+ com.gluonhq.attach
+ lifecycle
+ ${attach.version}
+
+
+ com.gluonhq.attach
+ statusbar
+ ${attach.version}
+
+
+ com.gluonhq.attach
+ storage
+ ${attach.version}
+
+
+ com.gluonhq.attach
+ util
+ ${attach.version}
+
+
+
+
+
+
+ org.apache.maven.plugins
+ maven-compiler-plugin
+ 3.8.1
+
+
+
+ org.openjfx
+ javafx-maven-plugin
+ ${javafx.maven.plugin.version}
+
+ ${main.class}
+ true
+
+
+
+
+
+ com.gluonhq
+ client-maven-plugin
+ ${client.maven.plugin.version}
+
+ ${client.target}
+ ${main.class}
+
+ - nd4j-native.properties
+
+
+ display
+ lifecycle
+ statusbar
+ storage
+
+
+
+
+
+
+
+
+ desktop
+
+ true
+
+
+ host
+ linux-x86_64
+ macosx-x86_64
+
+
+
+ ios
+
+ ios
+
+
+
+ android
+
+ android
+ android-arm64
+
+
+
+
+
+
+ gluon-releases
+ https://nexus.gluonhq.com/nexus/content/repositories/releases/
+
+
+
diff --git a/matrix/src/main/java/com/gluonhq/samples/matrix/Main.java b/matrix/src/main/java/com/gluonhq/samples/matrix/Main.java
new file mode 100644
index 00000000..6448512a
--- /dev/null
+++ b/matrix/src/main/java/com/gluonhq/samples/matrix/Main.java
@@ -0,0 +1,128 @@
+package com.gluonhq.samples.matrix;
+
+import com.gluonhq.attach.display.DisplayService;
+import com.gluonhq.attach.util.Platform;
+import com.gluonhq.charm.glisten.application.MobileApplication;
+import com.gluonhq.charm.glisten.control.AppBar;
+import com.gluonhq.charm.glisten.control.FloatingActionButton;
+import com.gluonhq.charm.glisten.mvc.View;
+import com.gluonhq.charm.glisten.visual.MaterialDesignIcon;
+import com.gluonhq.charm.glisten.visual.Swatch;
+import org.nd4j.linalg.api.buffer.DataType;
+import org.nd4j.linalg.api.ndarray.INDArray;
+import org.nd4j.linalg.factory.Nd4j;
+
+import javafx.application.Application;
+import javafx.collections.FXCollections;
+import javafx.collections.ObservableList;
+import javafx.geometry.Dimension2D;
+import javafx.geometry.Pos;
+import javafx.scene.Scene;
+import javafx.scene.chart.Chart;
+import javafx.scene.chart.LineChart;
+import javafx.scene.control.Label;
+import javafx.scene.layout.VBox;
+import javafx.stage.Stage;
+import javafx.scene.chart.NumberAxis;
+import javafx.scene.chart.XYChart;
+import javafx.scene.chart.XYChart.Series;
+
+public class Main extends MobileApplication {
+
+ Series series = new Series<>();
+
+ @Override
+ public void init() {
+ addViewFactory(HOME_VIEW, () -> {
+ FloatingActionButton fab = new FloatingActionButton(MaterialDesignIcon.SEARCH.text,
+ e -> System.out.println("Search"));
+
+ Chart chart = createChart();
+
+ Label label = new Label("Hello, ND4J with Gluon Mobile!");
+
+ VBox root = new VBox(20, chart, label);
+ root.setAlignment(Pos.CENTER);
+
+ View view = new View(root) {
+ @Override
+ protected void updateAppBar(AppBar appBar) {
+ appBar.setTitleText("Gluon Mobile and ND4J");
+ }
+ };
+
+ fab.showOn(view);
+
+ return view;
+ });
+ train();
+ }
+ @Override
+ public void postInit(Scene scene) {
+ Swatch.LIGHT_GREEN.assignTo(scene);
+ scene.getStylesheets().add(Main.class.getResource("styles.css").toExternalForm());
+
+ if (Platform.isDesktop()) {
+ Dimension2D dimension2D = DisplayService.create()
+ .map(DisplayService::getDefaultDimensions)
+ .orElse(new Dimension2D(640, 480));
+ scene.getWindow().setWidth(dimension2D.getWidth());
+ scene.getWindow().setHeight(dimension2D.getHeight());
+ }
+ }
+
+ private long multiplyMatrix(int dim) {
+ double[] a = new double[dim * dim];
+ double[] b = new double[dim * dim];
+ for (int i = 0; i < dim * dim; i++) {
+ a[i] = Math.random()-.5;
+ b[i] = Math.random()-.5;
+ }
+ long s0 = System.currentTimeMillis();
+ INDArray na = Nd4j.create(a,new int[]{dim,dim});
+ INDArray nb = Nd4j.create(b,new int[]{dim,dim});
+ INDArray nc = na.mmul(nb);
+ long s1 = System.currentTimeMillis();
+ long d = s1-s0;
+ return d;
+ }
+
+ private void train() {
+ Thread thread = new Thread(){
+ @Override public void run() {
+ double warmup = multiplyMatrix(1);
+ warmup = multiplyMatrix(5);
+ for (int i = 2; i < 40; i++) {
+ double t = multiplyMatrix(10*i);
+ final int x = 10*i;
+ final double y = t;
+ System.err.println("points "+i+", "+y);
+ javafx.application.Platform.runLater(() -> series.getData().add(new XYChart.Data(x, y)));
+ }
+ }
+ };
+ thread.start();
+ }
+
+ private Chart createChart() {
+ NumberAxis xAxis = new NumberAxis();
+ NumberAxis yAxis = new NumberAxis();
+ xAxis.setLabel("matrix dimension");
+ yAxis.setLabel("Time (ms)");
+ series.setName("nd4j");
+ LineChart lineChart = new LineChart(xAxis, yAxis);
+ ObservableList> chartData = FXCollections.observableArrayList();
+ chartData.add(series);
+ lineChart.setData(chartData);
+ return lineChart;
+ }
+
+ public static void main(String[] args) {
+ if (Platform.isAndroid()) {
+ System.setProperty("org.bytedeco.javacpp.platform", "arm64-v8a");
+ System.setProperty("org.bytedeco.javacpp.platform.library.path", "/lib");
+ System.setProperty("org.bytedeco.javacpp.pathsFirst", "true");
+ }
+ launch(args);
+ }
+}
diff --git a/matrix/src/main/resources/META-INF/native-image/jni-config.json b/matrix/src/main/resources/META-INF/native-image/jni-config.json
new file mode 100644
index 00000000..d8992594
--- /dev/null
+++ b/matrix/src/main/resources/META-INF/native-image/jni-config.json
@@ -0,0 +1,18 @@
+[
+{
+ "name":"java.lang.ClassLoader",
+ "methods":[
+ {"name":"getPlatformClassLoader","parameterTypes":[] },
+ {"name":"loadClass","parameterTypes":["java.lang.String"] }
+ ]
+},
+{
+ "name":"java.lang.ClassNotFoundException"
+},
+{
+ "name":"java.lang.NoSuchMethodError"
+},
+{
+ "name":"java.lang.String"
+}
+]
diff --git a/matrix/src/main/resources/META-INF/native-image/proxy-config.json b/matrix/src/main/resources/META-INF/native-image/proxy-config.json
new file mode 100644
index 00000000..0d4f101c
--- /dev/null
+++ b/matrix/src/main/resources/META-INF/native-image/proxy-config.json
@@ -0,0 +1,2 @@
+[
+]
diff --git a/matrix/src/main/resources/META-INF/native-image/reflect-config.json b/matrix/src/main/resources/META-INF/native-image/reflect-config.json
new file mode 100644
index 00000000..ffae01b6
--- /dev/null
+++ b/matrix/src/main/resources/META-INF/native-image/reflect-config.json
@@ -0,0 +1,1894 @@
+[
+{
+ "name":"java.lang.NullPointerException"
+},
+{
+ "name":"java.lang.Object"
+},
+{
+ "name":"java.lang.RuntimeException"
+},
+{
+ "name":"java.lang.String"
+},
+{
+ "name":"java.lang.UnsatisfiedLinkError"
+},
+{
+ "name":"java.nio.Buffer"
+},
+{
+ "name":"java.security.MessageDigestSpi"
+},
+{
+ "name":"java.security.SecureRandomParameters"
+},
+{
+ "name":"long[]"
+},
+{
+ "name":"org.bytedeco.javacpp.BoolPointer"
+},
+{
+ "name":"org.bytedeco.javacpp.BooleanPointer"
+},
+{
+ "name":"org.bytedeco.javacpp.BytePointer"
+},
+{
+ "name":"org.bytedeco.javacpp.CLongPointer"
+},
+{
+ "name":"org.bytedeco.javacpp.CharPointer"
+},
+{
+ "name":"org.bytedeco.javacpp.DoublePointer"
+},
+{
+ "name":"org.bytedeco.javacpp.FloatPointer"
+},
+{
+ "name":"org.bytedeco.javacpp.IntPointer"
+},
+{
+ "name":"org.bytedeco.javacpp.Loader"
+},
+{
+ "name":"org.bytedeco.javacpp.LongPointer"
+},
+{
+ "name":"org.bytedeco.javacpp.Pointer"
+},
+{
+ "name":"org.bytedeco.javacpp.Pointer$NativeDeallocator"
+},
+{
+ "name":"org.bytedeco.javacpp.PointerPointer"
+},
+{
+ "name":"org.bytedeco.javacpp.ShortPointer"
+},
+{
+ "name":"org.bytedeco.javacpp.SizeTPointer"
+},
+{
+ "name":"org.bytedeco.javacpp.presets.javacpp",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.bytedeco.openblas.global.openblas"
+},
+{
+ "name":"org.bytedeco.openblas.global.openblas$LAPACK_C_SELECT1"
+},
+{
+ "name":"org.bytedeco.openblas.global.openblas$LAPACK_C_SELECT2"
+},
+{
+ "name":"org.bytedeco.openblas.global.openblas$LAPACK_D_SELECT2"
+},
+{
+ "name":"org.bytedeco.openblas.global.openblas$LAPACK_D_SELECT3"
+},
+{
+ "name":"org.bytedeco.openblas.global.openblas$LAPACK_S_SELECT2"
+},
+{
+ "name":"org.bytedeco.openblas.global.openblas$LAPACK_S_SELECT3"
+},
+{
+ "name":"org.bytedeco.openblas.global.openblas$LAPACK_Z_SELECT1"
+},
+{
+ "name":"org.bytedeco.openblas.global.openblas$LAPACK_Z_SELECT2"
+},
+{
+ "name":"org.bytedeco.openblas.global.openblas_nolapack"
+},
+{
+ "name":"org.bytedeco.openblas.presets.openblas",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.bytedeco.openblas.presets.openblas_nolapack",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.bytedeco.openblas.presets.openblas_nolapack$MklDomainSetNumThreads"
+},
+{
+ "name":"org.bytedeco.openblas.presets.openblas_nolapack$MklSetNumThreadsLocal"
+},
+{
+ "name":"org.bytedeco.openblas.presets.openblas_nolapack$SetNumThreads"
+},
+{
+ "name":"org.nd4j.linalg.api.rng.distribution.factory.DefaultDistributionFactory",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.nd4j.linalg.convolution.DefaultConvolutionInstance",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.nd4j.linalg.cpu.nativecpu.BlasWrapper",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.nd4j.linalg.cpu.nativecpu.CpuAffinityManager",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.nd4j.linalg.cpu.nativecpu.CpuMemoryManager",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.nd4j.linalg.cpu.nativecpu.CpuNDArrayFactory",
+ "methods":[{"name":"","parameterTypes":["org.nd4j.linalg.api.buffer.DataType","char"] }]
+},
+{
+ "name":"org.nd4j.linalg.cpu.nativecpu.DirectShapeInfoProvider",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.nd4j.linalg.cpu.nativecpu.buffer.DefaultDataBufferFactory",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.nd4j.linalg.cpu.nativecpu.cache.ConstantBuffersCache",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.nd4j.linalg.cpu.nativecpu.ops.NativeOpExecutioner",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.nd4j.linalg.cpu.nativecpu.rng.CpuNativeRandom",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.nd4j.linalg.cpu.nativecpu.workspace.CpuWorkspaceManager",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ArgumentsList"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Assert"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Conditional"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ConstNDArrayVector"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ConstNDArrayVector$Iterator"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ConstantDataBuffer"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ConstantDescriptor"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Context"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ContextBuffers"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ContextPrototype"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$CurrentIndexing"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$DataBuffer"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$DebugInfo"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$DeclarableOp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Environment",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ErrorReference"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ExternalWorkspace"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Floor"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$FlowPath"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$GraphProfile"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$GraphState"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$IntIntPair"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$IntVectorVector"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Intervals"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$KeyPair"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$LaunchContext"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Log1p"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$LogicOp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$LongVectorVector"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$NDArray"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$NDArrayList"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$NDArrayVector"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$NDArrayVector$Iterator"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$NDIndex"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$NDIndexAll"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$NDIndexInterval"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$NDIndexPoint"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$NodeProfile"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$OpArgsHolder"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$OpDescriptor"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$OpRegistrator"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Pair"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$PlatformHelper"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Pow"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Pow_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$RandomBuffer"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$RandomGenerator"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ResultSet"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ResultWrapper"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Return"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Scope"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ShapeDescriptor"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ShapeInformation"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ShapeList"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Stash"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Switch"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$TadDescriptor"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$TadPack"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Variable"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$VariableSpace"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$VariablesSet"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Where"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$While"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Workspace"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$Xoroshiro128"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$_loader"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$absolute_difference_loss"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$absolute_difference_loss_grad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$add"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$add_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$adjust_contrast"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$adjust_contrast_v2"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$adjust_hue"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$adjust_saturation"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$alpha_dropout_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$apply_sgd"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$argmax"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$argmin"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$assign"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$assign_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$avgpool2d"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$avgpool2d_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$avgpool3dnew"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$avgpool3dnew_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$axpy"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$batch_to_space"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$batch_to_space_nd"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$batched_gemm"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$batchnorm"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$batchnorm_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$betainc"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$biasadd"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$biasadd_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$bincount"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$bitcast"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$bits_hamming_distance"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$bitwise_and"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$bitwise_or"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$bitwise_xor"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$boolean_and"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$boolean_not"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$boolean_or"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$boolean_xor"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$broadcast_dynamic_shape"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$broadcast_to"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$broadcastgradientargs"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$cast"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$check_numerics"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$cholesky"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$choose"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$clip_by_global_norm"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$clipbyavgnorm"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$clipbyavgnorm_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$clipbynorm"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$clipbynorm_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$clipbyvalue"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$clone_list"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$col2im"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$compare_and_bitpack"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$concat"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$concat_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$confusion_matrix"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$conv1d"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$conv1d_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$conv2d"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$conv2d_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$conv2d_input_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$conv3dnew"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$conv3dnew_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$cosine_distance_loss"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$cosine_distance_loss_grad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$create"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$create_list"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$crelu"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$crelu_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$crop_and_resize"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$cross"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$cube"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$cube_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$cumprod"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$cumprod_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$cumsum"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$cumsum_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$cyclic_rshift_bits"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$cyclic_shift_bits"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$deconv2d"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$deconv2d_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$deconv2d_tf"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$deconv3d"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$deconv3d_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$depth_to_space"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$depthwise_conv2d"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$depthwise_conv2d_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$diag"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$diag_part"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$digamma"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$dilation2d"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$divide"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$divide_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$divide_no_nan"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$dot_product_attention"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$dot_product_attention_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$draw_bounding_boxes"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$dropout"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$dropout_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$dynamic_bidirectional_rnn"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$dynamic_partition"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$dynamic_partition_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$dynamic_rnn"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$dynamic_stitch"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$elu"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$elu_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$embedding_lookup"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$eq_scalar"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$equals"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$evaluate_reduction_shape"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$expand_dims"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$expose"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$extract_image_patches"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$eye"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$fake_quant_with_min_max_vars"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$fake_quant_with_min_max_vars_per_channel"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$fill"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$fill_as"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$firas_sparse"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$flatten"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$floordiv"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$floordiv_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$floormod"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$floormod_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$fused_batch_norm"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$gather"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$gather_list"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$gather_nd"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$get_seed"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$greater"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$greater_equal"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$gru"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$gruCell"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$gruCell_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$gru_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$gt_scalar"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$gte_scalar"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$hardsigmoid"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$hardsigmoid_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$hardtanh"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$hardtanh_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$hashcode"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$hinge_loss"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$hinge_loss_grad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$histogram"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$histogram_fixed_width"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$huber_loss"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$huber_loss_grad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$identity"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$identity_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$identity_n"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$igamma"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$igammac"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$im2col"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$im2col_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$image_resize"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$in_top_k"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$invert_permutation"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$is_non_decreasing"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$is_numeric_tensor"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$is_strictly_increasing"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ismax"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$l2_loss"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$layer_norm"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$layer_norm_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$less"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$less_equal"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lgamma"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lin_space"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$listdiff"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$log_loss"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$log_loss_grad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$log_matrix_determinant"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$log_poisson_loss"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$log_poisson_loss_grad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$log_softmax"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$log_softmax_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$logdet"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lrelu"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lrelu_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lrn"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lrn_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lstm"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lstmBlock"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lstmBlockCell"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lstmCell"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lstmLayer"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lstmLayerCell"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lstmLayerCellBp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lstmLayer_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lstsq"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lt_scalar"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lte_scalar"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$lu"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$matmul"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$matmul_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$matrix_band_part"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$matrix_determinant"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$matrix_diag"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$matrix_diag_part"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$matrix_inverse"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$matrix_set_diag"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$max_pool_with_argmax"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$maximum"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$maximum_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$maxpool2d"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$maxpool2d_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$maxpool3dnew"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$maxpool3dnew_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mean_pairwssqerr_loss"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mean_pairwssqerr_loss_grad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mean_sqerr_loss"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mean_sqerr_loss_grad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mergeadd"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mergeadd_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mergeavg"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mergeavg_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mergemax"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mergemax_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mergemaxindex"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$meshgrid"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$minimum"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$minimum_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mirror_pad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mod"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$mod_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$moments"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$multi_head_dot_product_attention"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$multi_head_dot_product_attention_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$multiply"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$multiply_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$neq_scalar"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$non_max_suppression"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$non_max_suppression_overlaps"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$non_max_suppression_v3"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$noop"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$norm"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$normalize_moments"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$not_equals"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$nth_element"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$onehot"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$ones_as"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$order"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$pad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$parallel_stack"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$percentile"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$permute"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$pick_list"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$pnormpool2d"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$pnormpool2d_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$pointwise_conv2d"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$polygamma"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$prelu"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$prelu_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$qr"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$random_bernoulli"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$random_crop"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$random_exponential"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$random_gamma"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$random_multinomial"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$random_normal"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$random_poisson"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$random_shuffle"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$randomuniform"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$range"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$rank"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$rationaltanh"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$rationaltanh_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$read_list"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$realdiv"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$realdiv_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$rectifiedtanh"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$rectifiedtanh_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_dot_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_logsumexp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_max"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_max_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_mean"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_mean_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_min"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_min_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_norm1"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_norm1_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_norm2"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_norm2_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_norm_max"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_norm_max_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_prod"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_prod_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_sqnorm"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_sqnorm_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_stdev"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_stdev_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_sum"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_sum_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_variance"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reduce_variance_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$relu"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$relu6"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$relu6_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$relu_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$relu_layer"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$repeat"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reshape"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reshapeas"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$resize_area"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$resize_bicubic"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$resize_bilinear"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$resize_nearest_neighbor"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reverse"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reverse_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reverse_sequence"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reversedivide"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reversedivide_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reversemod"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reversemod_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reversesubtract"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$reversesubtract_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$rint"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$roll"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$rshift_bits"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$scatter_add"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$scatter_div"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$scatter_list"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$scatter_max"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$scatter_min"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$scatter_mul"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$scatter_nd"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$scatter_nd_add"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$scatter_nd_sub"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$scatter_nd_update"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$scatter_sub"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$scatter_upd"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$scatter_update"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sconv2d"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sconv2d_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$segment_max"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$segment_max_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$segment_mean"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$segment_mean_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$segment_min"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$segment_min_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$segment_prod"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$segment_prod_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$segment_sum"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$segment_sum_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$select"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$selu"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$selu_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sequence_mask"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$set_seed"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$shape_of"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$shapes_of"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$shift_bits"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sigm_cross_entropy_loss"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sigm_cross_entropy_loss_grad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sigmoid"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sigmoid_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$size"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$size_at"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$size_list"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$slice"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$slice_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$softmax"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$softmax_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$softmax_cross_entropy_loss"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$softmax_cross_entropy_loss_grad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$softmax_cross_entropy_loss_with_logits"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$softmax_cross_entropy_loss_with_logits_grad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$softplus"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$softplus_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$softsign"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$softsign_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$solve"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$solve_ls"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$space_to_batch"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$space_to_batch_nd"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$space_to_depth"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sparse_softmax_cross_entropy_loss_with_logits"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sparse_softmax_cross_entropy_loss_with_logits_grad"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$split"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$split_list"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$split_v"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$square"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$squaredsubtract"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$squaredsubtract_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$squeeze"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sru"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sruCell"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sru_bi"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sru_bi_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sru_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$stack"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$stack_list"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$standardize"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$standardize_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$static_bidirectional_rnn"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$static_rnn"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$stop_gradient"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$strided_slice"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$strided_slice_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$subtract"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$subtract_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$sufficient_statistics"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$svd"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$tanh"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$tanh_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$tear"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$tensormmul"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$tensormmul_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$test_output_reshape"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$test_scalar"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$testcustom"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$testop2i2o"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$testreduction"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$tf_atan2"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$thresholdedrelu"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$thresholdedrelu_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$tile"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$tile_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$tile_to_shape"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$tile_to_shape_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$to_double"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$to_float16"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$to_float32"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$to_int32"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$to_int64"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$to_uint32"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$to_uint64"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$toggle_bits"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$top_k"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$trace"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$transpose"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$tri"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$triangular_solve"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$triu"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$triu_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$truncatediv"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unique"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unique_with_counts"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unsorted_segment_max"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unsorted_segment_max_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unsorted_segment_mean"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unsorted_segment_mean_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unsorted_segment_min"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unsorted_segment_min_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unsorted_segment_prod"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unsorted_segment_prod_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unsorted_segment_sqrt_n"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unsorted_segment_sqrt_n_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unsorted_segment_sum"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unsorted_segment_sum_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unstack"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$unstack_list"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$upsampling2d"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$upsampling2d_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$upsampling3d"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$upsampling3d_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$utf8string"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$weighted_cross_entropy_with_logits"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$where_np"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$write_list"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$xw_plus_b"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$xw_plus_b_bp"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$zero_fraction"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$zeros_as"
+},
+{
+ "name":"org.nd4j.nativeblas.Nd4jCpu$zeta"
+},
+{
+ "name":"org.nd4j.nativeblas.OpaqueConstantDataBuffer",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+},
+{
+ "name":"org.nd4j.nativeblas.OpaqueContext",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+},
+{
+ "name":"org.nd4j.nativeblas.OpaqueDataBuffer",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+},
+{
+ "name":"org.nd4j.nativeblas.OpaqueLaunchContext",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+},
+{
+ "name":"org.nd4j.nativeblas.OpaqueRandomGenerator",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+},
+{
+ "name":"org.nd4j.nativeblas.OpaqueResultWrapper",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+},
+{
+ "name":"org.nd4j.nativeblas.OpaqueShapeList",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+},
+{
+ "name":"org.nd4j.nativeblas.OpaqueTadPack",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+},
+{
+ "name":"org.nd4j.nativeblas.OpaqueVariable",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+},
+{
+ "name":"org.nd4j.nativeblas.OpaqueVariablesSet",
+ "allDeclaredFields":true,
+ "allPublicFields":true,
+ "allDeclaredMethods":true,
+ "allPublicMethods":true,
+ "allDeclaredConstructors":true,
+ "allPublicConstructors":true
+},
+{
+ "name":"sun.misc.Unsafe",
+ "fields":[{"name":"theUnsafe"}],
+ "methods":[
+ {"name":"arrayBaseOffset","parameterTypes":["java.lang.Class"] },
+ {"name":"getByte","parameterTypes":["long"] },
+ {"name":"getChar","parameterTypes":["long"] },
+ {"name":"getDouble","parameterTypes":["long"] },
+ {"name":"getFloat","parameterTypes":["long"] },
+ {"name":"getInt","parameterTypes":["long"] },
+ {"name":"getLong","parameterTypes":["long"] },
+ {"name":"getShort","parameterTypes":["long"] }
+ ]
+},
+{
+ "name":"sun.security.provider.NativePRNG",
+ "methods":[{"name":"","parameterTypes":[] }]
+},
+{
+ "name":"sun.security.provider.SHA",
+ "methods":[{"name":"","parameterTypes":[] }]
+}
+]
diff --git a/matrix/src/main/resources/META-INF/native-image/resource-config-android-arm64.json b/matrix/src/main/resources/META-INF/native-image/resource-config-android-arm64.json
new file mode 100644
index 00000000..8452a987
--- /dev/null
+++ b/matrix/src/main/resources/META-INF/native-image/resource-config-android-arm64.json
@@ -0,0 +1,26 @@
+{
+ "resources":[
+ {"pattern":"\\QMETA-INF/services/java.nio.file.spi.FileSystemProvider\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.common.base.PreconditionsFormat\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.compression.NDArrayCompressor\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.env.EnvironmentalAction\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.factory.Nd4jBackend\\E"},
+ {"pattern":"\\Qai/skymind/\\E"},
+ {"pattern":"\\Qnd4j-native.properties\\E"},
+ {"pattern":"\\Qorg/bytedeco/javacpp/arm64-v8a/libjnijavacpp.so\\E"},
+ {"pattern":"\\Qorg/bytedeco/javacpp/properties/android-arm64.properties\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/arm64-v8a/libgcc_s.so.1\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/arm64-v8a/libgfortran.so.4\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/arm64-v8a/libjniopenblas.so\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/arm64-v8a/libjniopenblas_nolapack.so\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/arm64-v8a/libopenblas.so.0\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/arm64-v8a/libquadmath.so.0\\E"},
+ {"pattern":"\\Qorg/nd4j/nativeblas/arm64-v8a/libgomp.so.1\\E"},
+ {"pattern":"\\Qorg/nd4j/nativeblas/arm64-v8a/libjnind4jcpu.so\\E"},
+ {"pattern":"\\Qorg/nd4j/nativeblas/arm64-v8a/libnd4jcpu.so\\E"},
+ {"pattern":"\\Qorg/slf4j/impl/StaticLoggerBinder.class\\E"}
+ ],
+ "bundles":[]
+}
+
+
diff --git a/matrix/src/main/resources/META-INF/native-image/resource-config-linux-arm64.json b/matrix/src/main/resources/META-INF/native-image/resource-config-linux-arm64.json
new file mode 100644
index 00000000..8de8a16c
--- /dev/null
+++ b/matrix/src/main/resources/META-INF/native-image/resource-config-linux-arm64.json
@@ -0,0 +1,26 @@
+{
+ "resources":[
+ {"pattern":"\\QMETA-INF/services/java.nio.file.spi.FileSystemProvider\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.common.base.PreconditionsFormat\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.compression.NDArrayCompressor\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.env.EnvironmentalAction\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.factory.Nd4jBackend\\E"},
+ {"pattern":"\\Qai/skymind/\\E"},
+ {"pattern":"\\Qnd4j-native.properties\\E"},
+ {"pattern":"\\Qorg/bytedeco/javacpp/linux-arm64/libjnijavacpp.so\\E"},
+ {"pattern":"\\Qorg/bytedeco/javacpp/properties/android-arm64.properties\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/linux-arm64/libgcc_s.so.1\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/linux-arm64/libgfortran.so.4\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/linux-arm64/libjniopenblas.so\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/linux-arm64/libjniopenblas_nolapack.so\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/linux-arm64/libopenblas.so.0\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/linux-arm64/libquadmath.so.0\\E"},
+ {"pattern":"\\Qorg/nd4j/nativeblas/linux-arm64/libgomp.so.1\\E"},
+ {"pattern":"\\Qorg/nd4j/nativeblas/linux-arm64/libjnind4jcpu.so\\E"},
+ {"pattern":"\\Qorg/nd4j/nativeblas/linux-arm64/libnd4jcpu.so\\E"},
+ {"pattern":"\\Qorg/slf4j/impl/StaticLoggerBinder.class\\E"}
+ ],
+ "bundles":[]
+}
+
+
diff --git a/matrix/src/main/resources/META-INF/native-image/resource-config.json b/matrix/src/main/resources/META-INF/native-image/resource-config.json
new file mode 100644
index 00000000..31823914
--- /dev/null
+++ b/matrix/src/main/resources/META-INF/native-image/resource-config.json
@@ -0,0 +1,15 @@
+{
+ "resources":[
+ {"pattern":"\\QMETA-INF/services/java.nio.file.spi.FileSystemProvider\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.common.base.PreconditionsFormat\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.compression.NDArrayCompressor\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.env.EnvironmentalAction\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.factory.Nd4jBackend\\E"},
+ {"pattern":"\\Qai/skymind/\\E"},
+ {"pattern":"\\Qnd4j-native.properties\\E"},
+ {"pattern":"\\Qorg/slf4j/impl/StaticLoggerBinder.class\\E"}
+ ],
+ "bundles":[]
+}
+
+
diff --git a/matrix/src/main/resources/META-INF/substrate/config/resourceconfig-aarch64-android.json b/matrix/src/main/resources/META-INF/substrate/config/resourceconfig-aarch64-android.json
new file mode 100644
index 00000000..55aa3c4d
--- /dev/null
+++ b/matrix/src/main/resources/META-INF/substrate/config/resourceconfig-aarch64-android.json
@@ -0,0 +1,28 @@
+{
+ "resources":[
+ {"pattern":"\\QMETA-INF/services/java.nio.file.spi.FileSystemProvider\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.common.base.PreconditionsFormat\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.compression.NDArrayCompressor\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.env.EnvironmentalAction\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.factory.Nd4jBackend\\E"},
+ {"pattern":"\\Qai/skymind/\\E"},
+ {"pattern":"\\Qnd4j-native.properties\\E"},
+ {"pattern":"\\Qorg/bytedeco/javacpp/android-arm64/libjnijavacpp.so\\E"},
+ {"pattern":"\\Qorg/bytedeco/javacpp/properties/android-arm64.properties\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/android-arm64/libgcc_s.so.1\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/android-arm64/libgfortran.so.4\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/android-arm64/libjniopenblas.so\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/android-arm64/libjniopenblas_nolapack.so\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/android-arm64/libopenblas.so.0\\E"},
+ {"pattern":"\\Qorg/bytedeco/openblas/android-arm64/libquadmath.so.0\\E"},
+ {"pattern":"\\Qorg/nd4j/nativeblas/android-arm64/libgomp.so.1\\E"},
+ {"pattern":"\\Qorg/nd4j/nativeblas/android-arm64/libjnind4jcpu.so\\E"},
+ {"pattern":"\\Qorg/nd4j/nativeblas/android-arm64/libnd4jcpu.so\\E"},
+ {"pattern": ".*/libnd4jcpu.so"},
+ {"pattern": ".*/libjnind4jcpu.so"},
+ {"pattern":"\\Qorg/slf4j/impl/StaticLoggerBinder.class\\E"}
+ ],
+ "bundles":[]
+}
+
+
diff --git a/matrix/src/main/resources/META-INF/substrate/config/resourceconfig-x86_64-darwin.json b/matrix/src/main/resources/META-INF/substrate/config/resourceconfig-x86_64-darwin.json
new file mode 100644
index 00000000..4ab21d31
--- /dev/null
+++ b/matrix/src/main/resources/META-INF/substrate/config/resourceconfig-x86_64-darwin.json
@@ -0,0 +1,10 @@
+{
+ "resources":[
+ {"pattern":"\\Qai/skymind/\\E"},
+ {"pattern":"\\Qnd4j-native.properties\\E"},
+ {"pattern": ".*/libnd4jcpu.dylib"},
+ {"pattern": ".*/libjnind4jcpu.dylib"},
+ {"pattern":"\\Qorg/slf4j/impl/StaticLoggerBinder.class\\E"}
+ ],
+ "bundles":[]
+}
diff --git a/matrix/src/main/resources/META-INF/substrate/config/resourceconfig-x86_64-linux.json b/matrix/src/main/resources/META-INF/substrate/config/resourceconfig-x86_64-linux.json
new file mode 100644
index 00000000..238f5aca
--- /dev/null
+++ b/matrix/src/main/resources/META-INF/substrate/config/resourceconfig-x86_64-linux.json
@@ -0,0 +1,17 @@
+{
+ "resources":[
+ {"pattern":"\\QMETA-INF/services/java.nio.file.spi.FileSystemProvider\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.common.base.PreconditionsFormat\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.compression.NDArrayCompressor\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.env.EnvironmentalAction\\E"},
+ {"pattern":"\\QMETA-INF/services/org.nd4j.linalg.factory.Nd4jBackend\\E"},
+ {"pattern":"\\Qai/skymind/\\E"},
+ {"pattern":"\\Qnd4j-native.properties\\E"},
+ {"pattern": ".*/libnd4jcpu.so"},
+ {"pattern": ".*/libjnind4jcpu.so"},
+ {"pattern":"\\Qorg/slf4j/impl/StaticLoggerBinder.class\\E"}
+ ],
+ "bundles":[]
+}
+
+
diff --git a/matrix/src/main/resources/com/gluonhq/samples/matrix/styles.css b/matrix/src/main/resources/com/gluonhq/samples/matrix/styles.css
new file mode 100644
index 00000000..88c8d12a
--- /dev/null
+++ b/matrix/src/main/resources/com/gluonhq/samples/matrix/styles.css
@@ -0,0 +1,4 @@
+Label {
+ -fx-font-size: 2em;
+ -fx-text-fill: -primary-swatch-700;
+}
\ No newline at end of file