14    for cl 
in range(nclasses):
 
   15        decl += 
"class cl%03i;\n" % cl
 
   18    for cl 
in range(nclasses):
 
   19        decl += 
"class cl%03i {\n" % cl
 
   21        bindings += 
'    py::class_<cl%03i>(m, "cl%03i")\n' % (cl, cl)
 
   22        for fn 
in range(nfns):
 
   23            ret = random.randint(0, nclasses - 1)
 
   24            params = [random.randint(0, nclasses - 1) 
for i 
in range(nargs)]
 
   25            decl += 
"    cl%03i *fn_%03i(" % (ret, fn)
 
   26            decl += 
", ".join(
"cl%03i *" % p 
for p 
in params)
 
   28            bindings += 
'        .def("fn_%03i", &cl%03i::fn_%03i)\n' % (fn, cl, fn)
 
   32    result = 
"#include <pybind11/pybind11.h>\n\n" 
   33    result += 
"namespace py = pybind11;\n\n" 
   35    result += 
"PYBIND11_MODULE(example, m) {\n" 
   45    for cl 
in range(nclasses):
 
   46        decl += 
"class cl%03i;\n" % cl
 
   49    for cl 
in range(nclasses):
 
   50        decl += 
"class cl%03i {\n" % cl
 
   52        bindings += 
'    py::class_<cl%03i>("cl%03i")\n' % (cl, cl)
 
   53        for fn 
in range(nfns):
 
   54            ret = random.randint(0, nclasses - 1)
 
   55            params = [random.randint(0, nclasses - 1) 
for i 
in range(nargs)]
 
   56            decl += 
"    cl%03i *fn_%03i(" % (ret, fn)
 
   57            decl += 
", ".join(
"cl%03i *" % p 
for p 
in params)
 
   60                '        .def("fn_%03i", &cl%03i::fn_%03i, py::return_value_policy<py::manage_new_object>())\n' 
   66    result = 
"#include <boost/python.hpp>\n\n" 
   67    result += 
"namespace py = boost::python;\n\n" 
   69    result += 
"BOOST_PYTHON_MODULE(example) {\n" 
   75for codegen 
in [generate_dummy_code_pybind11, generate_dummy_code_boost]:
 
   77    for i 
in range(0, 10):
 
   79        with open(
"test.cpp", 
"w") 
as f:
 
   80            f.write(codegen(nclasses))
 
   81        n1 = dt.datetime.now()
 
   83            "g++ -Os -shared -rdynamic -undefined dynamic_lookup " 
   84            "-fvisibility=hidden -std=c++14 test.cpp -I include " 
   85            "-I /System/Library/Frameworks/Python.framework/Headers -o test.so" 
   87        n2 = dt.datetime.now()
 
   88        elapsed = (n2 - n1).total_seconds()
 
   89        size = os.stat(
"test.so").st_size
 
   90        print(
"   {%i, %f, %i}," % (nclasses * nfns, elapsed, size))
 
def generate_dummy_code_boost(nclasses=10)
 
def generate_dummy_code_pybind11(nclasses=10)