This commit is contained in:
98
script/tutorial/57_EmbeddingCPython.js
Executable file
98
script/tutorial/57_EmbeddingCPython.js
Executable file
@@ -0,0 +1,98 @@
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
// Embedding CPython with JEP: USe of numpy, pandas and matpplotlib in the same process.
|
||||
// Requires cpython.py to be put in the scripts folder, or else in the python path.
|
||||
///////////////////////////////////////////////////////////////////////////////////////////////////
|
||||
|
||||
//Requirements to the use of JEP:
|
||||
// 1- PYTHONHOME is set to the python interpreter home folder.
|
||||
// 2- jep*.so is in LD_LIBRARY_PATH (e.g. in extensions folder )
|
||||
// 3- jep*.jar is in the CLASS_PATH (e.g. in extensions folder )
|
||||
//JEP works with python 2 and 3.
|
||||
|
||||
run("jeputils")
|
||||
|
||||
//In order to use matplotlib we must set Tk backend before importing plt
|
||||
eval_jep("import matplotlib")
|
||||
eval_jep("matplotlib.use('TkAgg')")
|
||||
|
||||
|
||||
//Evaluating statements
|
||||
eval_jep("import sys")
|
||||
eval_jep("import numpy as np")
|
||||
eval_jep("a = np.array((100, 100), )")
|
||||
eval_jep("print (a)")
|
||||
|
||||
eval_jep("\
|
||||
def stderr(str): \n\
|
||||
if sys.version_info < (3,0) :\n\
|
||||
exec(\"print >> sys.stderr, '\" + str + \"'\") \n\
|
||||
else: \n\
|
||||
exec(\"print ('\" + str + \"', file=sys.stderr)\") \n\
|
||||
")
|
||||
|
||||
eval_jep("stderr('Testing stderr')")
|
||||
|
||||
|
||||
//Accessing a numpy array
|
||||
a=get_jep("a")
|
||||
print (a.getData()
|
||||
)
|
||||
print (a.getDimensions()
|
||||
)
|
||||
|
||||
|
||||
//Setting numpy array with scan data
|
||||
steps = [3,4]
|
||||
dims = [steps[0]+1 , steps[1]+1 ]
|
||||
r = ascan([m1,m2], [ai1], [0.0,0.0], [0.2,0.2], steps)
|
||||
data = r.getReadable(0)
|
||||
a = new_numpy_array(data, dims,'d')
|
||||
print (to_array(a.getDimensions()))
|
||||
print (to_array(a.getData()))
|
||||
plot( Convert.reshape(a.getData(),a.getDimensions()),null, null, null, "Scan Data")
|
||||
|
||||
|
||||
//Calling a module function
|
||||
b = call_jep("numpy", "transpose", [a,])
|
||||
print (to_array(b.getDimensions()))
|
||||
print (to_array(b.getData()))
|
||||
plot( Convert.reshape(b.getData(),b.getDimensions()),null, null, null, title="Transposed")
|
||||
|
||||
|
||||
|
||||
|
||||
//More calculations calling numpy
|
||||
a = call_jep("numpy", "ones", [[400,200],'d'])
|
||||
for (var i=0; i<100; i++){
|
||||
b = call_jep("numpy", "ones", [[400,200],'d'])
|
||||
a = call_jep("numpy", "add", [a,b])
|
||||
s = call_jep("numpy", "sum", [a,])
|
||||
print (a.getData()[0] + " " + s
|
||||
)
|
||||
sleep(0.001)
|
||||
}
|
||||
|
||||
//Calling a local function
|
||||
data = [1,2,3,4,5,6,7,8,9,0]
|
||||
dims = [2,5]
|
||||
array = new_numpy_array(data, dims,'d') //Auxiliary function to create numpy arrays from lists or java arrays.
|
||||
ret = call_jep("cpython", "calc", [array,])
|
||||
print (ret.getDimensions() + " - " + ret.getData()
|
||||
)
|
||||
|
||||
|
||||
//Testing pandas
|
||||
ret = call_jep("cpython", "test_pandas")
|
||||
|
||||
|
||||
//Testing tkinter
|
||||
ret = call_jep("cpython", "test_tkinter")
|
||||
|
||||
|
||||
//Testing matplotlib
|
||||
ret = call_jep("cpython", "test_matplotlib", [0.1, 4, 0.4])
|
||||
|
||||
|
||||
//Running a modole
|
||||
run_jep("cpython")
|
||||
|
||||
Reference in New Issue
Block a user