% for enum in enums:
py::enum_<\
% for n in enum['namespaces']:
${n}::\
% endfor
${enum['name']}>(m, "${enum['name']}")
% for c in enum['constants']:
    .value("${c}", \
% for n in enum['namespaces']:
${n}::\
% endfor
${c})
% endfor
    .export_values();
% endfor


% for func in functions:
m.def("${func['name']}", []
(
  % for p in func['parameters'][:-1]:
  ${p['type']} ${p['name']},
  % endfor
  ${func['parameters'][-1]['type']} ${func['parameters'][-1]['name']}
)
{
  return \
% for n in func['namespaces']:
${n}::\
% endfor
${func['name']}(\
% for p in func['parameters'][:-1]:
${p['name']}, \
% endfor
${func['parameters'][-1]['name']});
}, __doc_\
% for n in func['namespaces']:
${n}_\
% endfor
${func['name']},
% for p in func['parameters'][:-1]:
py::arg("${p['name']}"), \
% endfor
py::arg("${func['parameters'][-1]['name']}"));

% endfor