]> gerrit.simantics Code Review - simantics/python.git/blob - org.simantics.pythonlink/scl/Python.scl
5fc78318e62b88ce0f7fee4ed2b539613abec558
[simantics/python.git] / org.simantics.pythonlink / scl / Python.scl
1 effect Python\r
2     "Simantics/Python/Python"\r
3     "org.simantics.pythonlink.PythonContext"\r
4 \r
5 class PythonCompatible a where\r
6     setPythonVariable :: String -> a -> <Python> ()\r
7     getPythonVariable :: String -> <Python> a\r
8 \r
9 importJava "org.simantics.pythonlink.NDArray" where\r
10     data NDArray\r
11     \r
12     @JavaName "<init>"\r
13     ndarray :: Vector Double -> NDArray\r
14     @JavaName "<init>"\r
15     ndarrayM :: Integer -> Integer -> Vector Double -> NDArray\r
16     @JavaName "<init>"\r
17     ndarrayN :: Vector Integer -> Vector Double -> NDArray\r
18     \r
19     @JavaName size\r
20     ndarraySize :: NDArray -> Integer\r
21     @JavaName dims\r
22     ndarrayDims :: NDArray -> Vector Integer\r
23     @JavaName getValues\r
24     ndarrayValues :: NDArray -> Vector Double\r
25     @JavaName getValue\r
26     ndarrayElement :: NDArray -> Integer -> Double\r
27     @JavaName getValue\r
28     ndarrayElementM :: NDArray -> Integer -> Integer -> Double\r
29     @JavaName getValue\r
30     ndarrayElementN :: NDArray -> Vector Integer -> Double\r
31     \r
32     @JavaName toString\r
33     ndarrayToString :: NDArray -> String\r
34     @JavaName equals\r
35     ndarrayEquals :: NDArray -> NDArray -> Boolean\r
36 \r
37 class NDArrayInput a where\r
38     ndarrayInput :: a -> ([Integer], [Double])\r
39     \r
40 instance NDArrayInput [Double] where\r
41     ndarrayInput v = ([length v], v)\r
42     \r
43 instance (NDArrayInput [a]) => NDArrayInput [[a]] where\r
44     ndarrayInput v = let\r
45         inp = map ndarrayInput v\r
46         dims = map fst inp\r
47         vals = join $ map snd inp\r
48       in\r
49         if not (all (== (dims!0)) dims) then\r
50             fail "List of lists not of uniform dimension"\r
51           else\r
52             ([length v] + (dims!0), vals)\r
53 \r
54 ndarrayFromList :: NDArrayInput a => a -> NDArray\r
55 ndarrayFromList v = ndarrayN (vector dims) (vector vals) where\r
56     (dims, vals) = ndarrayInput v\r
57 \r
58 instance Show NDArray where\r
59     show = ndarrayToString\r
60 \r
61 instance Eq NDArray where\r
62     (==) = ndarrayEquals\r
63 \r
64 importJava "org.simantics.pythonlink.PythonContext" where\r
65     data PythonContext\r
66     \r
67     @JavaName close\r
68     closePythonContext :: PythonContext -> <Proc> ()\r
69     \r
70     executePythonStatement :: String -> <Python> ()\r
71     \r
72     setPythonBooleanVariable :: String -> Boolean -> <Python> ()\r
73     setPythonIntegerVariable :: String -> Integer -> <Python> ()\r
74     setPythonLongVariable :: String -> Long -> <Python> ()\r
75     setPythonDoubleVariable :: String -> Double -> <Python> ()\r
76     setPythonStringVariable :: String -> String -> <Python> ()\r
77     \r
78     setPythonBooleanArrayVariable :: String -> Vector Boolean -> <Python> ()\r
79     setPythonIntegerArrayVariable :: String -> Vector Integer -> <Python> ()\r
80     setPythonLongArrayVariable :: String -> Vector Long -> <Python> ()\r
81     setPythonDoubleArrayVariable :: String -> Vector Double -> <Python> ()\r
82     setPythonStringArrayVariable :: String -> Vector String -> <Python> ()\r
83     setPythonNDArrayVariable :: String -> NDArray -> <Python> ()\r
84     \r
85     getPythonBooleanVariable :: String -> <Python> Boolean\r
86     getPythonIntegerVariable :: String -> <Python> Integer\r
87     getPythonLongVariable :: String -> <Python> Long\r
88     getPythonDoubleVariable :: String -> <Python> Double\r
89     getPythonStringVariable :: String -> <Python> String\r
90     \r
91     getPythonBooleanArrayVariable :: String -> <Python> Vector Boolean\r
92     getPythonIntegerArrayVariable :: String -> <Python> Vector Integer\r
93     getPythonLongArrayVariable :: String -> <Python> Vector Long\r
94     getPythonDoubleArrayVariable :: String -> <Python> Vector Double\r
95     getPythonStringArrayVariable  :: String -> <Python> Vector String\r
96     getPythonNDArrayVariable :: String -> <Python> NDArray\r
97     \r
98     setPythonVariantVariable :: String -> Variant -> <Python> ()\r
99     getPythonVariantVariable :: String -> <Python> Variant\r
100 \r
101 importJava "org.simantics.pythonlink.Python" where\r
102     openPythonContext :: <Proc> PythonContext\r
103     \r
104     runPythonF :: (() -> <Python, e> a) -> <Proc, e> a\r
105     runWithPythonContextF :: PythonContext -> (() -> <Python, e> a) -> <Proc, e> a\r
106 \r
107 runPython :: (<Python, e> a) -> <Proc, e> a\r
108 runPython v = runPythonF (\_ -> v)\r
109 \r
110 runWithPythonContext :: PythonContext -> (<Python, e> a) -> <Proc, e> a\r
111 runWithPythonContext python v = runWithPythonContextF python (\_ -> v) \r
112 \r
113 instance (VecComp a, PythonCompatible (Vector a)) => PythonCompatible [a] where\r
114     setPythonVariable n v = setPythonVariable n (vector v)\r
115     getPythonVariable = vectorToList . getPythonVariable\r
116     \r
117 instance PythonCompatible Double where\r
118     setPythonVariable = setPythonDoubleVariable\r
119     getPythonVariable = getPythonDoubleVariable\r
120     \r
121 instance PythonCompatible (Vector Double) where\r
122     setPythonVariable = setPythonDoubleArrayVariable\r
123     getPythonVariable = getPythonDoubleArrayVariable\r
124 \r
125 instance PythonCompatible Integer where\r
126     setPythonVariable = setPythonIntegerVariable\r
127     getPythonVariable = getPythonIntegerVariable\r
128     \r
129 instance PythonCompatible (Vector Integer) where\r
130     setPythonVariable = setPythonIntegerArrayVariable\r
131     getPythonVariable = getPythonIntegerArrayVariable\r
132     \r
133 instance PythonCompatible String where\r
134     setPythonVariable = setPythonStringVariable\r
135     getPythonVariable = getPythonStringVariable\r
136     \r
137 instance PythonCompatible (Vector String) where\r
138     setPythonVariable = setPythonStringArrayVariable\r
139     getPythonVariable = getPythonStringArrayVariable\r
140     \r
141 instance PythonCompatible NDArray where\r
142     setPythonVariable = setPythonNDArrayVariable\r
143     getPythonVariable = getPythonNDArrayVariable\r