chore: import upstream snapshot with attribution

This commit is contained in:
wehub-resource-sync
2026-07-13 12:47:05 +08:00
commit 4f3b7da785
7394 changed files with 2005594 additions and 0 deletions
+69
View File
@@ -0,0 +1,69 @@
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>org.eclipse.deeplearning4j</groupId>
<artifactId>blas-lapack-generator</artifactId>
<packaging>jar</packaging>
<parent>
<groupId>org.eclipse.deeplearning4j</groupId>
<artifactId>codegen</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<name>blas-lapack-generator</name>
<properties>
<javaparser.version>3.24.4</javaparser.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
<javapoet.version>1.13.0</javapoet.version>
<openblas.version>0.3.28</openblas.version>
<javacpp.version>1.5.11</javacpp.version>
<openblas.javacpp.version>${openblas.version}-${javacpp.version}</openblas.javacpp.version>
</properties>
<dependencies>
<dependency>
<groupId>org.eclipse.deeplearning4j</groupId>
<artifactId>nd4j-cpu-backend-common</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.eclipse.deeplearning4j</groupId>
<artifactId>nd4j-native</artifactId>
<version>${project.version}</version>
</dependency>
<dependency>
<groupId>org.reflections</groupId>
<artifactId>reflections</artifactId>
<version>0.10.2</version>
</dependency>
<dependency>
<groupId>org.bytedeco</groupId>
<artifactId>openblas</artifactId>
<version>${openblas.javacpp.version}</version>
</dependency>
<dependency>
<groupId>com.squareup</groupId>
<artifactId>javapoet</artifactId>
<version>${javapoet.version}</version>
</dependency>
<dependency>
<groupId>com.github.javaparser</groupId>
<artifactId>javaparser-core-serialization</artifactId>
<version>${javaparser.version}</version>
</dependency>
<dependency>
<groupId>com.github.javaparser</groupId>
<artifactId>javaparser-symbol-solver-core</artifactId>
<version>${javaparser.version}</version>
</dependency>
</dependencies>
</project>
@@ -0,0 +1,174 @@
/*
* ******************************************************************************
* *
* *
* * This program and the accompanying materials are made available under the
* * terms of the Apache License, Version 2.0 which is available at
* * https://www.apache.org/licenses/LICENSE-2.0.
* *
* * See the NOTICE file distributed with this work for additional
* * information regarding copyright ownership.
* * Unless required by applicable law or agreed to in writing, software
* * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* * License for the specific language governing permissions and limitations
* * under the License.
* *
* * SPDX-License-Identifier: Apache-2.0
* *****************************************************************************
*/
package org.deeplearning4j;
import com.github.javaparser.ParserConfiguration;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.symbolsolver.JavaSymbolSolver;
import com.github.javaparser.symbolsolver.resolution.typesolvers.CombinedTypeSolver;
import com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver;
import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
import com.github.javaparser.utils.SourceRoot;
import com.squareup.javapoet.*;
import org.apache.commons.io.FileUtils;
import org.bytedeco.javacpp.Pointer;
import org.bytedeco.openblas.global.openblas;
import javax.lang.model.element.Modifier;
import java.io.File;
import java.lang.reflect.Method;
import java.nio.charset.Charset;
import java.util.Arrays;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
public class BlasLapackGenerator {
private SourceRoot sourceRoot;
private File rootDir;
private File targetFile;
private static String copyright =
"/*\n" +
" * ******************************************************************************\n" +
" * *\n" +
" * *\n" +
" * * This program and the accompanying materials are made available under the\n" +
" * * terms of the Apache License, Version 2.0 which is available at\n" +
" * * https://www.apache.org/licenses/LICENSE-2.0.\n" +
" * *\n" +
" * * See the NOTICE file distributed with this work for additional\n" +
" * * information regarding copyright ownership.\n" +
" * * Unless required by applicable law or agreed to in writing, software\n" +
" * * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n" +
" * * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n" +
" * * License for the specific language governing permissions and limitations\n" +
" * * under the License.\n" +
" * *\n" +
" * * SPDX-License-Identifier: Apache-2.0\n" +
" * *****************************************************************************\n" +
" */\n";
private static String codeGenWarning =
"\n//================== GENERATED CODE - DO NOT MODIFY THIS FILE ==================\n\n";
private static Set<String> methodsToSkip = new HashSet<>(Arrays.asList(
"LAPACK_zlangb_base",
"LAPACK_lsame_base",
"LAPACK_clangb_base",
"LAPACK_lsame_base",
"LAPACK_dlangb_base",
"LAPACK_slangb_base"
));
public BlasLapackGenerator(File nd4jApiRootDir) {
this.sourceRoot = initSourceRoot(nd4jApiRootDir);
this.rootDir = nd4jApiRootDir;
}
public SourceRoot getSourceRoot() {
return sourceRoot;
}
public void setSourceRoot(SourceRoot sourceRoot) {
this.sourceRoot = sourceRoot;
}
public File getTargetFile() {
return targetFile;
}
public void setTargetFile(File targetFile) {
this.targetFile = targetFile;
}
public void parse() throws Exception {
targetFile = new File(rootDir,"org/nd4j/linalg/api/blas/BLASLapackDelegator.java");
String packageName = "org.nd4j.linalg.api.blas";
TypeSpec.Builder openblasLapackDelegator = TypeSpec.interfaceBuilder("BLASLapackDelegator");
openblasLapackDelegator.addModifiers(Modifier.PUBLIC);
Class<openblas> clazz = openblas.class;
List<Method> objectMethods = Arrays.asList(Object.class.getMethods());
Arrays.stream(clazz.getMethods())
.filter(input -> !objectMethods.contains(input))
.filter(input -> !input.getName().equals("map") && !input.getName().equals("init"))
.filter(input -> !methodsToSkip.contains(input.getName()))
.forEach(method -> {
MethodSpec.Builder builder = MethodSpec.methodBuilder(
method.getName()
).returns(method.getReturnType())
.addModifiers(Modifier.DEFAULT,Modifier.PUBLIC);
Arrays.stream(method.getParameters()).forEach(param -> {
builder.addParameter(ParameterSpec.builder(
!lapackType(param.getType()) ?
TypeName.get(param.getType()) :
TypeName.get(Pointer.class),
param.getName()
).build());
});
openblasLapackDelegator.addMethod(builder.build());
});
JavaFile finalFile = JavaFile.builder(packageName, openblasLapackDelegator.build())
.addFileComment(copyright)
.build();
finalFile
.writeTo(rootDir);
}
private boolean lapackType(Class<?> clazz) {
return clazz.equals(openblas.LAPACK_C_SELECT1.class) ||
clazz.equals(openblas.LAPACK_C_SELECT2.class) ||
clazz.equals(openblas.LAPACK_D_SELECT2.class) ||
clazz.equals(openblas.LAPACK_S_SELECT2.class) ||
clazz.equals(openblas.LAPACK_Z_SELECT1.class)
|| clazz.equals(openblas.LAPACK_Z_SELECT2.class) ||
clazz.equals(openblas.LAPACK_D_SELECT3.class) ||
clazz.equals(openblas.LAPACK_S_SELECT3.class);
}
private SourceRoot initSourceRoot(File nd4jApiRootDir) {
CombinedTypeSolver typeSolver = new CombinedTypeSolver();
typeSolver.add(new ReflectionTypeSolver(false));
typeSolver.add(new JavaParserTypeSolver(nd4jApiRootDir));
JavaSymbolSolver symbolSolver = new JavaSymbolSolver(typeSolver);
StaticJavaParser.getConfiguration().setSymbolResolver(symbolSolver);
SourceRoot sourceRoot = new SourceRoot(nd4jApiRootDir.toPath(),new ParserConfiguration().setSymbolResolver(symbolSolver));
return sourceRoot;
}
public static void main(String...args) throws Exception {
BlasLapackGenerator blasLapackGenerator = new BlasLapackGenerator(new File("../../nd4j/nd4j-backends/nd4j-api-parent/nd4j-api/src/main/java/"));
blasLapackGenerator.parse();
String generated = FileUtils.readFileToString(blasLapackGenerator.getTargetFile(), Charset.defaultCharset());
generated = generated.replaceAll("\\{\\s+\\}",";");
generated = generated.replace("default","");
FileUtils.write(blasLapackGenerator.getTargetFile(),generated,Charset.defaultCharset());
}
}
@@ -0,0 +1,172 @@
/*
* ******************************************************************************
* *
* *
* * This program and the accompanying materials are made available under the
* * terms of the Apache License, Version 2.0 which is available at
* * https://www.apache.org/licenses/LICENSE-2.0.
* *
* * See the NOTICE file distributed with this work for additional
* * information regarding copyright ownership.
* * Unless required by applicable law or agreed to in writing, software
* * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* * License for the specific language governing permissions and limitations
* * under the License.
* *
* * SPDX-License-Identifier: Apache-2.0
* *****************************************************************************
*/
package org.deeplearning4j;
import com.github.javaparser.ParserConfiguration;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.symbolsolver.JavaSymbolSolver;
import com.github.javaparser.symbolsolver.resolution.typesolvers.CombinedTypeSolver;
import com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver;
import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
import com.github.javaparser.utils.SourceRoot;
import com.squareup.javapoet.*;
import org.apache.commons.io.FileUtils;
import org.bytedeco.javacpp.Pointer;
import org.bytedeco.openblas.global.openblas;
import org.bytedeco.openblas.global.openblas_nolapack;
import org.nd4j.linalg.api.blas.BLASLapackDelegator;
import javax.lang.model.element.Modifier;
import java.io.File;
import java.lang.reflect.Method;
import java.nio.charset.Charset;
import java.util.*;
public class NoOpBlasLapackGenerator {
private SourceRoot sourceRoot;
private File rootDir;
private File targetFile;
private static String copyright =
"/*\n" +
" * ******************************************************************************\n" +
" * *\n" +
" * *\n" +
" * * This program and the accompanying materials are made available under the\n" +
" * * terms of the Apache License, Version 2.0 which is available at\n" +
" * * https://www.apache.org/licenses/LICENSE-2.0.\n" +
" * *\n" +
" * * See the NOTICE file distributed with this work for additional\n" +
" * * information regarding copyright ownership.\n" +
" * * Unless required by applicable law or agreed to in writing, software\n" +
" * * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n" +
" * * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n" +
" * * License for the specific language governing permissions and limitations\n" +
" * * under the License.\n" +
" * *\n" +
" * * SPDX-License-Identifier: Apache-2.0\n" +
" * *****************************************************************************\n" +
" */\n";
private static String codeGenWarning =
"\n//================== GENERATED CODE - DO NOT MODIFY THIS FILE ==================\n\n";
public NoOpBlasLapackGenerator(File nd4jApiRootDir) {
this.sourceRoot = initSourceRoot(nd4jApiRootDir);
this.rootDir = nd4jApiRootDir;
}
public void parse() throws Exception {
targetFile = new File(rootDir,"org/nd4j/linalg/cpu/nativecpu/blas/NoOpBLASDelegator.java");
String packageName = "org.nd4j.linalg.cpu.nativecpu.blas";
TypeSpec.Builder openblasLapackDelegator = TypeSpec.classBuilder("NoOpBLASDelegator");
openblasLapackDelegator.addModifiers(Modifier.PUBLIC);
openblasLapackDelegator.addSuperinterface(BLASLapackDelegator.class);
Class<BLASLapackDelegator> clazz = BLASLapackDelegator.class;
List<Method> objectMethods = Arrays.asList(Object.class.getMethods());
Set<MethodSpec> addedCodeLines = new HashSet<>();
Arrays.stream(clazz.getMethods())
.filter(input -> !objectMethods.contains(input))
.forEach(method -> {
MethodSpec.Builder builder = MethodSpec.methodBuilder(
method.getName()
).addModifiers(Modifier.PUBLIC)
.returns(method.getReturnType())
.addAnnotation(Override.class);
StringBuilder codeStatement = new StringBuilder();
//don't return anything when void
if(method.getReturnType().equals(Void.TYPE)) {
} else if(method.getReturnType().equals(int.class)){
codeStatement.append("return 0;");
} else if(method.getReturnType().equals(double.class)) {
codeStatement.append("return 0.0;");
} else if(method.getReturnType().equals(float.class)) {
codeStatement.append("return 0.0f;");
}
else if(method.getReturnType().equals(long.class)) {
codeStatement.append("return 0L;");
}
Arrays.stream(method.getParameters()).forEach(param -> {
builder.addParameter(ParameterSpec.builder(param.getType(),param.getName())
.build());
});
builder.addCode(CodeBlock
.builder()
.addStatement(codeStatement.toString().replace(",)",")"))
.build());
MethodSpec build = builder.build();
openblasLapackDelegator.addMethod(build);
addedCodeLines.add(build);
});
JavaFile.builder(packageName,openblasLapackDelegator.build())
.addFileComment(copyright)
.build()
.writeTo(rootDir);
}
private SourceRoot initSourceRoot(File nd4jApiRootDir) {
CombinedTypeSolver typeSolver = new CombinedTypeSolver();
typeSolver.add(new ReflectionTypeSolver(false));
typeSolver.add(new JavaParserTypeSolver(nd4jApiRootDir));
JavaSymbolSolver symbolSolver = new JavaSymbolSolver(typeSolver);
StaticJavaParser.getConfiguration().setSymbolResolver(symbolSolver);
SourceRoot sourceRoot = new SourceRoot(nd4jApiRootDir.toPath(),new ParserConfiguration().setSymbolResolver(symbolSolver));
return sourceRoot;
}
public SourceRoot getSourceRoot() {
return sourceRoot;
}
public File getRootDir() {
return rootDir;
}
public File getTargetFile() {
return targetFile;
}
public static void main(String...args) throws Exception {
NoOpBlasLapackGenerator openblasBlasLapackGenerator = new NoOpBlasLapackGenerator(new File("nd4j/nd4j-backends/nd4j-backend-impls/nd4j-cpu-backend-common/src/main/java"));
openblasBlasLapackGenerator.parse();
String generated = FileUtils.readFileToString(openblasBlasLapackGenerator.getTargetFile(), Charset.defaultCharset());
generated = generated.replace(";;",";");
FileUtils.write(openblasBlasLapackGenerator.getTargetFile(),generated);
}
}
@@ -0,0 +1,286 @@
/*
* ******************************************************************************
* *
* *
* * This program and the accompanying materials are made available under the
* * terms of the Apache License, Version 2.0 which is available at
* * https://www.apache.org/licenses/LICENSE-2.0.
* *
* * See the NOTICE file distributed with this work for additional
* * information regarding copyright ownership.
* * Unless required by applicable law or agreed to in writing, software
* * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
* * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
* * License for the specific language governing permissions and limitations
* * under the License.
* *
* * SPDX-License-Identifier: Apache-2.0
* *****************************************************************************
*/
package org.deeplearning4j;
import com.github.javaparser.ParserConfiguration;
import com.github.javaparser.StaticJavaParser;
import com.github.javaparser.symbolsolver.JavaSymbolSolver;
import com.github.javaparser.symbolsolver.resolution.typesolvers.CombinedTypeSolver;
import com.github.javaparser.symbolsolver.resolution.typesolvers.JavaParserTypeSolver;
import com.github.javaparser.symbolsolver.resolution.typesolvers.ReflectionTypeSolver;
import com.github.javaparser.utils.SourceRoot;
import com.squareup.javapoet.*;
import org.apache.commons.io.FileUtils;
import org.bytedeco.javacpp.Pointer;
import org.bytedeco.openblas.global.openblas;
import org.bytedeco.openblas.global.openblas_nolapack;
import org.nd4j.linalg.api.blas.BLASLapackDelegator;
import org.nd4j.shade.guava.collect.HashBasedTable;
import org.nd4j.shade.guava.collect.Table;
import javax.lang.model.element.Modifier;
import java.io.File;
import java.lang.reflect.Method;
import java.nio.charset.Charset;
import java.util.*;
public class OpenblasBlasLapackGenerator {
private SourceRoot sourceRoot;
private File rootDir;
private File targetFile;
private Map<String,String> casting = new HashMap<>() {{
put("LAPACKE_sgees", "openblas.LAPACK_S_SELECT2");
put("LAPACKE_dgees", "openblas.LAPACK_D_SELECT2");
put("LAPACKE_cgees", "openblas.LAPACK_C_SELECT1");
put("LAPACKE_zgees", "openblas.LAPACK_Z_SELECT1");
put("LAPACKE_sgeesx", "openblas.LAPACK_S_SELECT2");
put("LAPACKE_dgeesx", "openblas.LAPACK_D_SELECT2");
put("LAPACKE_cgeesx", "openblas.LAPACK_C_SELECT1");
put("LAPACKE_zgeesx", "openblas.LAPACK_Z_SELECT1");
put("LAPACKE_sgges", "openblas.LAPACK_S_SELECT3");
put("LAPACKE_dgges", "openblas.LAPACK_D_SELECT3");
put("LAPACKE_cgges", "openblas.LAPACK_C_SELECT2");
put("LAPACKE_zgges", "openblas.LAPACK_Z_SELECT2");
put("LAPACKE_sgges3", "openblas.LAPACK_S_SELECT3");
put("LAPACKE_dgges3", "openblas.LAPACK_D_SELECT3");
put("LAPACKE_cgges3", "openblas.LAPACK_C_SELECT2");
put("LAPACKE_zgges3", "openblas.LAPACK_Z_SELECT2");
put("LAPACKE_sggesx", "openblas.LAPACK_S_SELECT3");
put("LAPACKE_dggesx", "openblas.LAPACK_D_SELECT3");
put("LAPACKE_cggesx", "openblas.LAPACK_C_SELECT2");
put("LAPACKE_zggesx", "openblas.LAPACK_Z_SELECT2");
put("LAPACKE_sgees_work", "openblas.LAPACK_S_SELECT2");
put("LAPACKE_dgees_work", "openblas.LAPACK_D_SELECT2");
put("LAPACKE_cgees_work", "openblas.LAPACK_C_SELECT1");
put("LAPACKE_zgees_work", "openblas.LAPACK_Z_SELECT1");
put("LAPACKE_sgeesx_work", "openblas.LAPACK_S_SELECT2");
put("LAPACKE_dgeesx_work", "openblas.LAPACK_D_SELECT2");
put("LAPACKE_cgeesx_work", "openblas.LAPACK_C_SELECT1");
put("LAPACKE_zgeesx_work", "openblas.LAPACK_Z_SELECT1");
put("LAPACKE_sgges_work", "openblas.LAPACK_S_SELECT3");
put("LAPACKE_dgges_work", "openblas.LAPACK_D_SELECT3");
put("LAPACKE_cgges_work", "openblas.LAPACK_C_SELECT2");
put("LAPACKE_zgges_work", "openblas.LAPACK_Z_SELECT2");
put("LAPACKE_sgges3_work", "openblas.LAPACK_S_SELECT3");
put("LAPACKE_dgges3_work", "openblas.LAPACK_D_SELECT3");
put("LAPACKE_cgges3_work", "openblas.LAPACK_C_SELECT2");
put("LAPACKE_zgges3_work", "openblas.LAPACK_Z_SELECT2");
put("LAPACKE_sggesx_work", "openblas.LAPACK_S_SELECT3");
put("LAPACKE_dggesx_work", "openblas.LAPACK_D_SELECT3");
put("LAPACKE_cggesx_work", "openblas.LAPACK_C_SELECT2");
put("LAPACKE_zggesx_work", "openblas.LAPACK_Z_SELECT2");
put("LAPACK_sgges3_base", "openblas.LAPACK_S_SELECT3");
put("LAPACK_dgges3_base", "openblas.LAPACK_D_SELECT3");
put("LAPACK_cgges3_base", "openblas.LAPACK_C_SELECT2");
put("LAPACK_zgges3_base", "openblas.LAPACK_Z_SELECT2");
put("LAPACK_sgges_base", "openblas.LAPACK_S_SELECT3");
put("LAPACK_dgges_base", "openblas.LAPACK_D_SELECT3");
put("LAPACK_cgges_base", "openblas.LAPACK_C_SELECT2");
put("LAPACK_zgges_base", "openblas.LAPACK_Z_SELECT2");
put("LAPACK_sggesx_base", "openblas.LAPACK_S_SELECT3");
put("LAPACK_dggesx_base", "openblas.LAPACK_D_SELECT3");
put("LAPACK_cggesx_base", "openblas.LAPACK_C_SELECT2");
put("LAPACK_zggesx_base", "openblas.LAPACK_Z_SELECT2");
//LAPACK_zgeesx
put("LAPACK_cgees_base", "openblas.LAPACK_C_SELECT1");
put("LAPACK_dgees_base", "openblas.LAPACK_D_SELECT2");
put("LAPACK_zgees_base", "openblas.LAPACK_Z_SELECT1");
put("LAPACK_sgees_base", "openblas.LAPACK_S_SELECT2");
put("LAPACK_cgeesx_base", "openblas.LAPACK_C_SELECT1");
put("LAPACK_dgeesx_base", "openblas.LAPACK_D_SELECT2");
put("LAPACK_zgeesx_base", "openblas.LAPACK_Z_SELECT1");
put("LAPACK_sgeesx_base", "openblas.LAPACK_S_SELECT2");
}};
private static String copyright =
"/*\n" +
" * ******************************************************************************\n" +
" * *\n" +
" * *\n" +
" * * This program and the accompanying materials are made available under the\n" +
" * * terms of the Apache License, Version 2.0 which is available at\n" +
" * * https://www.apache.org/licenses/LICENSE-2.0.\n" +
" * *\n" +
" * * See the NOTICE file distributed with this work for additional\n" +
" * * information regarding copyright ownership.\n" +
" * * Unless required by applicable law or agreed to in writing, software\n" +
" * * distributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\n" +
" * * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\n" +
" * * License for the specific language governing permissions and limitations\n" +
" * * under the License.\n" +
" * *\n" +
" * * SPDX-License-Identifier: Apache-2.0\n" +
" * *****************************************************************************\n" +
" */\n";
private static String codeGenWarning =
"\n//================== GENERATED CODE - DO NOT MODIFY THIS FILE ==================\n\n";
public OpenblasBlasLapackGenerator(File nd4jApiRootDir) {
this.sourceRoot = initSourceRoot(nd4jApiRootDir);
this.rootDir = nd4jApiRootDir;
}
public void parse() throws Exception {
targetFile = new File(rootDir,"org/nd4j/linalg/cpu/nativecpu/OpenblasLapackDelegator.java");
String packageName = "org.nd4j.linalg.cpu.nativecpu";
TypeSpec.Builder openblasLapackDelegator = TypeSpec.classBuilder("OpenblasLapackDelegator");
openblasLapackDelegator.addModifiers(Modifier.PUBLIC);
openblasLapackDelegator.addSuperinterface(BLASLapackDelegator.class);
Class<BLASLapackDelegator> clazz = BLASLapackDelegator.class;
List<Method> objectMethods = Arrays.asList(Object.class.getMethods());
Set<MethodSpec> addedCodeLines = new HashSet<>();
Arrays.stream(clazz.getMethods())
.filter(input -> !objectMethods.contains(input))
.forEach(method -> {
MethodSpec.Builder builder = MethodSpec.methodBuilder(
method.getName()
).addModifiers(Modifier.PUBLIC)
.returns(method.getReturnType())
.addAnnotation(Override.class);
StringBuilder codeStatement = new StringBuilder();
//don't return anything when void
if(method.getReturnType().equals(Void.TYPE)) {
codeStatement.append("openblas." + method.getName() + "(");
} else if(method.getReturnType().equals(int.class)) {
codeStatement.append("return openblas." + method.getName() + "(");
} else if(method.getReturnType().equals(double.class)) {
//codeStatement.append("return 0.0;");
codeStatement.append("return openblas." + method.getName() + "(");
} else if(method.getReturnType().equals(float.class)) {
//codeStatement.append("return 0.0f;");
codeStatement.append("return openblas." + method.getName() + "(");
}
else if(method.getReturnType().equals(long.class)) {
//codeStatement.append("return 0L;");
codeStatement.append("return openblas." + method.getName() + "(");
}
//TODO: LAPACK_cgees
//TODO: LAPACK_dgees
//TODO: LAPACK_zgees
//TODO: LAPACK_cgeesx
//TODO: LAPACK_dgeesx
//TODO: LAPACK_sgeesx
//TODO: LAPACK_zgeesx
//TODO: LAPACK_cgges
//TODO: LAPACK_dgges
//TODO: LAPACK_sgges
//TODO: LAPACK_zgges
//TODO: LAPACK_cgges3
//TODO: LAPACK_dgges3
//TODO: LAPACK_sgges3
//TODO: LAPACK_zgges3
//TODO: LAPACK_cggesx
//TODO: LAPACK_dggesx
//TODO: LAPACK_sggesx
//TODO: LAPACK_zggesx
//TODO: issue could be LAPACK_Z_SELECT_2
//TODO: LAPACK_S_SELECT_3
Arrays.stream(method.getParameters()).forEach(param -> {
if(casting.containsKey(method.getName()) && param.getType().equals(Pointer.class)) {
System.out.println("In function casting for " + method.getName());
codeStatement.append("((" + casting.get(method.getName()) + ")" + param.getName() + ")");
codeStatement.append(",");
} else {
codeStatement.append(param.getName());
codeStatement.append(",");
}
builder.addParameter(ParameterSpec.builder(param.getType(),param.getName())
.build());
});
codeStatement.append(")");
builder.addCode(CodeBlock
.builder()
.addStatement(codeStatement.toString().replace(",)",")"))
.build());
MethodSpec build = builder.build();
openblasLapackDelegator.addMethod(build);
addedCodeLines.add(build);
});
JavaFile.builder(packageName,openblasLapackDelegator.build())
.addFileComment(copyright)
.addStaticImport(openblas.class,"*")
.addStaticImport(openblas_nolapack.class,"*")
.build()
.writeTo(rootDir);
}
private SourceRoot initSourceRoot(File nd4jApiRootDir) {
CombinedTypeSolver typeSolver = new CombinedTypeSolver();
typeSolver.add(new ReflectionTypeSolver(false));
typeSolver.add(new JavaParserTypeSolver(nd4jApiRootDir));
JavaSymbolSolver symbolSolver = new JavaSymbolSolver(typeSolver);
StaticJavaParser.getConfiguration().setSymbolResolver(symbolSolver);
SourceRoot sourceRoot = new SourceRoot(nd4jApiRootDir.toPath(),new ParserConfiguration().setSymbolResolver(symbolSolver));
return sourceRoot;
}
public SourceRoot getSourceRoot() {
return sourceRoot;
}
public File getRootDir() {
return rootDir;
}
public File getTargetFile() {
return targetFile;
}
public static void main(String...args) throws Exception {
OpenblasBlasLapackGenerator openblasBlasLapackGenerator = new OpenblasBlasLapackGenerator(new File("nd4j/nd4j-backends/nd4j-backend-impls/nd4j-native/src/main/java"));
openblasBlasLapackGenerator.parse();
String generated = FileUtils.readFileToString(openblasBlasLapackGenerator.getTargetFile(), Charset.defaultCharset());
generated = generated.replace(";;",";");
generated = generated.replaceAll("import static org.bytedeco.openblas.global.openblas\\.\\*","import org.bytedeco.openblas.global.openblas");
generated = generated.replaceAll("import static org.bytedeco.openblas.global.openblas_nolapack\\.\\*","import org.bytedeco.openblas.global.openblas_nolapack");
FileUtils.write(openblasBlasLapackGenerator.getTargetFile(),generated,Charset.defaultCharset());
}
}