]> gerrit.simantics Code Review - simantics/python.git/commitdiff
Some fixes to Python integration.
authortuorjr <tuorjr@e36c2e66-7d30-0410-bdb2-d9e1f5a6d952>
Mon, 26 Sep 2016 15:44:59 +0000 (15:44 +0000)
committerReino Ruusu <reino.ruusu@vtt.fi>
Tue, 3 Jan 2017 15:09:29 +0000 (17:09 +0200)
git-svn-id: https://www.simantics.org/svn/simantics-incubator/reino@1690 e36c2e66-7d30-0410-bdb2-d9e1f5a6d952

org.simantics.pythonlink/scl/Simantics/Python.scl
org.simantics.pythonlink/src/org/simantics/pythonlink/Python.java
org.simantics.pythonlink/src/org/simantics/pythonlink/PythonContext.java
org.simantics.pythonlink/test/org/simantics/pythonlink/test/ScriptTestBase.java
org.simantics.pythonlink/test/org/simantics/pythonlink/test/ScriptTests.java
org.simantics.pythonlink/test/org/simantics/pythonlink/test/scripts/Python.sts

index 899f577eb2a3c921b8c4f1d9963f43e6dc08b320..375c5498d9312308547f52e0da21f80c382009b0 100644 (file)
@@ -45,7 +45,7 @@ importJava "org.simantics.pythonlink.PythonContext" where
     @JavaName close\r
     closePythonContext :: PythonContext -> <Proc> ()\r
     \r
-    executePythonStatement :: String -> <Python, Proc> Integer\r
+    executePythonStatement :: String -> <Python, Proc> ()\r
     \r
     setPythonIntegerVariable :: String -> Integer -> <Python, Proc> ()\r
     setPythonIntegerArrayVariable :: String -> Vector Integer -> <Python, Proc> ()\r
@@ -63,12 +63,12 @@ importJava "org.simantics.pythonlink.PythonContext" where
     getPythonStringArrayVariable  :: String -> <Python, Proc> Vector String\r
     getPythonNDArrayVariable :: String -> <Python, Proc> NDArray\r
     \r
-    runPythonF :: (() -> <Python, Proc> a) -> <Proc> a\r
-    runWithPythonContextF :: PythonContext -> (() -> <Python, Proc> a) -> <Proc> a\r
-\r
 importJava "org.simantics.pythonlink.Python" where\r
     openPythonContext :: () -> <Proc> PythonContext\r
     \r
+    runPythonF :: (() -> <Python, Proc> a) -> <Proc> a\r
+    runWithPythonContextF :: PythonContext -> (() -> <Python, Proc> a) -> <Proc> a\r
+\r
 runPython :: (<Python, Proc> a) -> <Proc> a\r
 runPython v = runPythonF (\_ -> v)\r
 \r
index af5c9e287b424090137d83f721fd278c5e01758f..07921fd2c530b10a4850544db2f5720a8f814dff 100644 (file)
@@ -12,7 +12,7 @@ public class Python {
     }\r
     \r
     @SuppressWarnings( { "unchecked", "rawtypes" } )\r
-    public static Object runPython(Function f) {\r
+    public static Object runPythonF(Function f) {\r
         SCLContext sclContext = SCLContext.getCurrent();\r
         Object oldContext = sclContext.get(PYTHON_CONTEXT);\r
         try (PythonContext newContext = openPythonContext()) {\r
@@ -25,7 +25,7 @@ public class Python {
     }\r
     \r
     @SuppressWarnings( { "unchecked", "rawtypes" } )\r
-    public static Object runWithPythonContext(PythonContext context, Function f) {\r
+    public static Object runWithPythonContextF(PythonContext context, Function f) {\r
         SCLContext sclContext = SCLContext.getCurrent();\r
         Object oldContext = sclContext.get(PYTHON_CONTEXT);\r
         try {\r
index d237c83eb5afd5ab0c112111adaadeb2120b729e..5341cc233c16c02076e00bbfa8684aa09d14c001 100644 (file)
@@ -6,19 +6,27 @@ public class PythonContext implements Closeable {
     private long contextID;\r
     \r
     PythonContext() {\r
-        contextID = openPythonContextImpl();\r
+        contextID = createContextImpl();\r
     }\r
     \r
     @Override\r
     public void close() {\r
         long id = contextID;\r
         contextID = 0;\r
-        closePythonContextImpl(id);\r
+        if (id != 0) deleteContextImpl(id);\r
+    }\r
+\r
+    @Override\r
+    protected void finalize() throws Throwable {\r
+        super.finalize();\r
+        close();\r
     }\r
     \r
     public void executePythonStatement(String statement) {\r
         executePythonStatementImpl( contextID, statement );\r
     }\r
+\r
+    // Setters\r
     \r
     public void setPythonIntegerVariable(String variableName, int value) {\r
         setPythonIntegerVariableImpl(contextID, variableName, value);\r
@@ -39,6 +47,8 @@ public class PythonContext implements Closeable {
     public void setPythonStringArrayVariable(String variableName, String[] value) {\r
         setPythonStringArrayVariableImpl(contextID, variableName, value);\r
     }\r
+\r
+    // Getters\r
     \r
     public int getPythonIntegerVariable(String variableName) {\r
         return getPythonIntegerVariableImpl(contextID, variableName);\r
@@ -68,10 +78,10 @@ public class PythonContext implements Closeable {
     }\r
 \r
     // Native function declarations\r
-    private static native long openPythonContextImpl();\r
-    private static native void closePythonContextImpl(long contextID);\r
+    private static native long createContextImpl();\r
+    private static native void deleteContextImpl(long contextID);\r
     \r
-    private static native void executePythonStatementImpl(long contextID, String statement);\r
+    private static native int executePythonStatementImpl(long contextID, String statement);\r
     \r
     private static native void setPythonIntegerVariableImpl(long contextID, String variableName, int value);\r
     private static native void setPythonDoubleVariableImpl(long contextID, String variableName, double value);\r
index 6328fec12f47bbac08796b31250c2dcda9d0733d..b6238d6539ba6699f1195719510251ff1f191b52 100644 (file)
@@ -4,14 +4,9 @@ import java.io.BufferedReader;
 import java.io.InputStreamReader;
 import java.nio.charset.Charset;
 
-import org.junit.Before;
 import org.simantics.scl.compiler.commands.CommandSession;
 import org.simantics.scl.compiler.commands.TestScriptExecutor;
-import org.simantics.scl.compiler.module.repository.ModuleRepository;
-import org.simantics.scl.compiler.source.repository.CompositeModuleSourceRepository;
-import org.simantics.scl.compiler.source.repository.SourceRepositories;
 import org.simantics.scl.osgi.SCLOsgi;
-import org.simantics.scl.osgi.internal.ServiceBasedModuleSourceRepository;
 
 public class ScriptTestBase {
     
index 4c5318a87d9f21b4f721ee20adb3f4eddb692070..6a8bdae4fce3bcd777de556191c8528681a73260 100644 (file)
@@ -8,9 +8,5 @@ public class ScriptTests extends ScriptTestBase {
         super("scripts");
     }
 
-    @Test public void Arithmetic() throws Exception { test(); }
-    @Test public void Functions() throws Exception { test(); }
-    @Test public void Functions2() throws Exception { test(); }
-    @Test public void Lists() throws Exception { test(); }
-    
+    @Test public void Python() throws Exception { test(); }
 }
index 409d9b2001e6d8a9061260ea3b3e1267278ce4ed..7464d73ceae34d742dd269620c2bd230ef6b67cd 100644 (file)
@@ -29,10 +29,10 @@ vector [1, 2, 3, 4, 10]
 > ndarray (vector [1, 2, 3])\r
 ndarray(3) [1.0, 2.0, 3.0]\r
 > ndarrayM 2 2 (vector [1, 2, 3, 4])\r
-ndarray(2x2) [1.0, 2.0, 3.0, 4.0]\r
+ndarray(2x2) [[1.0, 2.0], [3.0, 4.0]]\r
 > a = ndarrayN (vector [2, 2, 3]) (vector [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12])\r
 > a\r
-ndarray(2x2x3) [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, ...]\r
+ndarray(2x2x3) [[[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]], [[7.0, 8.0, 9.0], [10.0, 11.0, 12.0]]]\r
 > ndarrayDims a\r
 vector [2, 2, 3]\r
 > ndarrayValues a\r
@@ -45,4 +45,4 @@ vector [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0, 11.0, 12.0]
 >     setPythonNDArrayVariable "foo" (ndarrayM 2 3 (vector [1, 2, 3,  4, 5, 6]))\r
 >     executePythonStatement "bar = foo.cumsum(1)"\r
 >     getPythonNDArrayVariable "bar"\r
-ndarray(2x3) [1.0, 3.0, 6.0, 4.0, 9.0, 15.0]\r
+ndarray(2x3) [[1.0, 3.0, 6.0], [4.0, 9.0, 15.0]]\r