GitXplorerGitXplorer
j

pythonlib

public
100 stars
12 forks
12 issues

Commits

List of commits on branch master.
Unverified
113621f94a7e4f3974a5505c0763a5ae5fd17515

v0.17~preview.128.42+83

ppublic-release committed a year ago
Unverified
642925f9d72a781c00a6843f432d7afadaf3936f

v0.17~preview.128.41+46

ppublic-release committed a year ago
Unverified
89ab5effd87a2de472eb8a5c52c3df705a175400

v0.17~preview.128.41+46

ppublic-release committed a year ago
Unverified
e4773741fd1d2778cf5bc2229c18ea61f7ec31ce

v0.17~preview.128.37+01

ppublic-release committed a year ago
Unverified
8613a84578bebe601621b8d457299e2f86d231db

v0.17~preview.128.37+01

ppublic-release committed a year ago
Unverified
f273ec97439f0d60c27620e00a3d5ec2aa1e6a76

v0.17~preview.128.30+99

ppublic-release committed a year ago

README

The README file for this repository.

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.