import "Vector" effect Python "Simantics/Python/Python" "org.simantics.pythonlink.PythonContext" class PythonCompatible a where setPythonVariable :: String -> a -> () getPythonVariable :: String -> a importJava "org.simantics.pythonlink.NDArray" where data NDArray @JavaName "" ndarray :: Vector Double -> NDArray @JavaName "" ndarrayM :: Integer -> Integer -> Vector Double -> NDArray @JavaName "" ndarrayN :: Vector Integer -> Vector Double -> NDArray @JavaName size ndarraySize :: NDArray -> Integer @JavaName dims ndarrayDims :: NDArray -> Vector Integer @JavaName getValues ndarrayValues :: NDArray -> Vector Double @JavaName getValue ndarrayElement :: NDArray -> Integer -> Double @JavaName getValue ndarrayElementM :: NDArray -> Integer -> Integer -> Double @JavaName getValue ndarrayElementN :: NDArray -> Vector Integer -> Double @JavaName toString ndarrayToString :: NDArray -> String @JavaName equals ndarrayEquals :: NDArray -> NDArray -> Boolean instance Show NDArray where show = ndarrayToString instance Eq NDArray where (==) = ndarrayEquals importJava "org.simantics.pythonlink.PythonContext" where data PythonContext @JavaName close closePythonContext :: PythonContext -> () executePythonStatement :: String -> () setPythonIntegerVariable :: String -> Integer -> () setPythonIntegerArrayVariable :: String -> Vector Integer -> () setPythonDoubleVariable :: String -> Double -> () setPythonDoubleArrayVariable :: String -> Vector Double -> () setPythonStringVariable :: String -> String -> () setPythonStringArrayVariable :: String -> Vector String -> () setPythonNDArrayVariable :: String -> NDArray -> () getPythonIntegerVariable :: String -> Integer getPythonIntegerArrayVariable :: String -> Vector Integer getPythonDoubleVariable :: String -> Double getPythonDoubleArrayVariable :: String -> Vector Double getPythonStringVariable :: String -> String getPythonStringArrayVariable :: String -> Vector String getPythonNDArrayVariable :: String -> NDArray importJava "org.simantics.pythonlink.Python" where openPythonContext :: PythonContext runPythonF :: (() -> a) -> a runWithPythonContextF :: PythonContext -> (() -> a) -> a runPython :: ( a) -> a runPython v = runPythonF (\_ -> v) runWithPythonContext :: PythonContext -> ( a) -> a runWithPythonContext python v = runWithPythonContextF python (\_ -> v) instance (VecComp a, PythonCompatible (Vector a)) => PythonCompatible [a] where setPythonVariable n v = setPythonVariable n (vector v) getPythonVariable = vectorToList . getPythonVariable instance PythonCompatible Double where setPythonVariable = setPythonDoubleVariable getPythonVariable = getPythonDoubleVariable instance PythonCompatible (Vector Double) where setPythonVariable = setPythonDoubleArrayVariable getPythonVariable = getPythonDoubleArrayVariable instance PythonCompatible Integer where setPythonVariable = setPythonIntegerVariable getPythonVariable = getPythonIntegerVariable instance PythonCompatible (Vector Integer) where setPythonVariable = setPythonIntegerArrayVariable getPythonVariable = getPythonIntegerArrayVariable instance PythonCompatible String where setPythonVariable = setPythonStringVariable getPythonVariable = getPythonStringVariable instance PythonCompatible (Vector String) where setPythonVariable = setPythonStringArrayVariable getPythonVariable = getPythonStringArrayVariable instance PythonCompatible NDArray where setPythonVariable = setPythonNDArrayVariable getPythonVariable = getPythonNDArrayVariable