package pythonlib
Install
Dune Dependency
Authors
Maintainers
Sources
sha256=9154942162dfc513857f102cdb6b4ea2a4292f752cfa8316ce698f199d23527c
md5=0a214302759fa718ea50dd047a002b74
Description
This library helps exposing ocaml functions to python. The python runtime interaction is handled by pyml.
Published: 31 May 2020
README
README.md
pythonlib
makes it easier to write wrappers around ocaml functions so that they can be called from python.
Example
This example is taken from the examples
directory. The ocaml code defines a function that takes as argument an integer n, performs some computations based on n and return a float value. This function is attached to a newly defined python module named ocaml_module
.
open Base
let approx_pi =
let%map_open.Python_lib n = positional "n" int ~docstring:""
in
let sum =
List.init n ~f:(fun i -> let i = Float.of_int (1 + i) in 1.0 /. (i *. i))
|> List.reduce_exn ~f:(+.)
in
Float.sqrt (sum *. 6.) |> python_of_float
let () =
if not (Py.is_initialized ())
then Py.initialize ();
let mod_ = Py_module.create "example_module" in
Py_module.set mod_ "approx_pi" approx_pi
This code is compiled to a static library ocaml.so
, together with a small C library defining the PyInit_ocaml
function that starts the ocaml runtime and exposes the example module. The python code then imports this library and can use the ocaml functions.
# This requires the ocaml.bc.so file to be copied as ocaml.so in the python path
from ocaml import example_module, toploop
# Import the module defined in the ocaml code and run the function.
import ocaml_module
print(ocaml_module.approx_pi(1000))
pythonlib
also handles keyword arguments as well as basic types such as int, float, string, list, etc. Further examples can be found in the examples
directory.
Dependencies (9)
-
pyml
>= "20200115"
-
dune
>= "2.0.0"
-
typerep
>= "v0.14" & < "v0.15"
-
stdio
>= "v0.14" & < "v0.15"
-
ppx_python
>= "v0.14" & < "v0.15"
-
ppx_let
>= "v0.14" & < "v0.15"
-
ppx_expect
>= "v0.14" & < "v0.15"
-
base
>= "v0.14" & < "v0.15"
-
ocaml
>= "4.08.0"
Dev Dependencies
None
Used by
None
Conflicts
None