2 "Simantics/Python/Python"
\r
3 "org.simantics.pythonlink.PythonContext"
\r
5 class PythonCompatible a where
\r
6 setPythonVariable :: String -> a -> <Python> ()
\r
7 getPythonVariable :: String -> <Python> a
\r
9 importJava "org.simantics.pythonlink.NDArray" where
\r
13 ndarray :: Vector Double -> NDArray
\r
15 ndarrayM :: Integer -> Integer -> Vector Double -> NDArray
\r
17 ndarrayN :: Vector Integer -> Vector Double -> NDArray
\r
20 ndarraySize :: NDArray -> Integer
\r
22 ndarrayDims :: NDArray -> Vector Integer
\r
24 ndarrayValues :: NDArray -> Vector Double
\r
26 ndarrayElement :: NDArray -> Integer -> Double
\r
28 ndarrayElementM :: NDArray -> Integer -> Integer -> Double
\r
30 ndarrayElementN :: NDArray -> Vector Integer -> Double
\r
33 ndarrayToString :: NDArray -> String
\r
35 ndarrayEquals :: NDArray -> NDArray -> Boolean
\r
37 class NDArrayInput a where
\r
38 ndarrayInput :: a -> ([Integer], [Double])
\r
40 instance NDArrayInput [Double] where
\r
41 ndarrayInput v = ([length v], v)
\r
43 instance (NDArrayInput [a]) => NDArrayInput [[a]] where
\r
44 ndarrayInput v = let
\r
45 inp = map ndarrayInput v
\r
47 vals = join $ map snd inp
\r
49 if not (all (== (dims!0)) dims) then
\r
50 fail "List of lists not of uniform dimension"
\r
52 ([length v] + (dims!0), vals)
\r
54 ndarrayFromList :: NDArrayInput a => a -> NDArray
\r
55 ndarrayFromList v = ndarrayN (vector dims) (vector vals) where
\r
56 (dims, vals) = ndarrayInput v
\r
58 instance Show NDArray where
\r
59 show = ndarrayToString
\r
61 instance Eq NDArray where
\r
62 (==) = ndarrayEquals
\r
64 importJava "org.simantics.pythonlink.PythonContext" where
\r
68 closePythonContext :: PythonContext -> <Proc> ()
\r
70 executePythonStatement :: String -> <Python> ()
\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
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
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
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
98 setPythonVariantVariable :: String -> Variant -> <Python> ()
\r
99 getPythonVariantVariable :: String -> <Python> Variant
\r
101 importJava "org.simantics.pythonlink.Python" where
\r
102 openPythonContext :: <Proc> PythonContext
\r
104 runPythonF :: (() -> <Python, e> a) -> <Proc, e> a
\r
105 runWithPythonContextF :: PythonContext -> (() -> <Python, e> a) -> <Proc, e> a
\r
107 runPython :: (<Python, e> a) -> <Proc, e> a
\r
108 runPython v = runPythonF (\_ -> v)
\r
110 runWithPythonContext :: PythonContext -> (<Python, e> a) -> <Proc, e> a
\r
111 runWithPythonContext python v = runWithPythonContextF python (\_ -> v)
\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
117 instance PythonCompatible Double where
\r
118 setPythonVariable = setPythonDoubleVariable
\r
119 getPythonVariable = getPythonDoubleVariable
\r
121 instance PythonCompatible (Vector Double) where
\r
122 setPythonVariable = setPythonDoubleArrayVariable
\r
123 getPythonVariable = getPythonDoubleArrayVariable
\r
125 instance PythonCompatible Integer where
\r
126 setPythonVariable = setPythonIntegerVariable
\r
127 getPythonVariable = getPythonIntegerVariable
\r
129 instance PythonCompatible (Vector Integer) where
\r
130 setPythonVariable = setPythonIntegerArrayVariable
\r
131 getPythonVariable = getPythonIntegerArrayVariable
\r
133 instance PythonCompatible String where
\r
134 setPythonVariable = setPythonStringVariable
\r
135 getPythonVariable = getPythonStringVariable
\r
137 instance PythonCompatible (Vector String) where
\r
138 setPythonVariable = setPythonStringArrayVariable
\r
139 getPythonVariable = getPythonStringArrayVariable
\r
141 instance PythonCompatible NDArray where
\r
142 setPythonVariable = setPythonNDArrayVariable
\r
143 getPythonVariable = getPythonNDArrayVariable
\r