用于GEMSEO的Java接口。
项目描述
包含两个Java-GEMSEO接口
一个基于JNIUS (https://pyjnius.readthedocs.io/en/stable),可以从标准的Python GEMSEO场景调用Java实现。
另一个基于JEP (https://github.com/ninia/je),使Java代码创建并使用GEMSEO场景,最终可能包含用Java实现的GEMSEO学科。
安装
设置 JAVA_HOME:Java JDK根安装目录的路径。
使用以下方式安装
pip install .
在运行时,您应配置
在Linux上,LD_LIBRARY_PATH:添加JEP Python包的路径,
在MacOS上,DYLD_LIBRARY_PATH:添加JEP Python包的路径,
在Windows上,PATH:添加JEP Python包的路径,
CLASSPATH:将安装jep时提供的jep包添加到java类路径中,
有关更多信息,请参阅JEP (https://github.com/ninia/jep/wiki/Getting-Started) 文档。
Java MDODiscipline
Java抽象MDODiscipline定义在包com.irt.saintexupery.discipline中。
Sellar问题的示例:com.irt.saintexupery.problems.sellar
分析导数(《gemseo.discipline.MDODiscipline._compute_jacobian》)尚不支持。
JEP特定问题
对于JEP接口,您应当使用JepMDODisciplineAdapter包装器包装MDODiscipline。
import com.irt.saintexupery.discipline.JepMDODisciplineAdapter;
import com.irt.saintexupery.problems.sellar.Sellar1;
MDODiscipline sellar1 = new JepMDODisciplineAdapter(new Sellar1());
示例
请查看examples/java_examples和examples/python_examples。
常见问题
“在主线程“main”中抛出异常java.lang.UnsatisfiedLinkError: no jep in java.library.path:” 请将Jep添加到classpath。
如果Jep仍然未检测到,请检查编译的“jep.dll”是否作为本地库正确包含。
关于Java-Python桥梁技术的想法
许多库提供了Java-Python进程间通信和序列化。然而,许多库都有局限性,例如Jython不支持Python的所有编译扩展,因为它是在Java中重实现的Python解释器。其他库使用套接字,如py4j,这可以处理性能和安全问题。
JNIUS和JEP都基于CPython的C API和Java JNI(Java本地接口)。这避免了内存复制,从而减少了精度和性能损失,这对于数值计算至关重要。
JNIUS允许从Python调用Java代码,JEP允许从Java调用Python,并重新进入Java代码。然而,这两种技术不能混合使用,JEP不能调用JNIUS代码。
这就是为什么这里提出了这两种解决方案。
许可证
LGPL v3.0