Browse Source

Added automatic binding generator script with basic template, updated/extended parser and added generated error and file listing

Former-commit-id: cb25fb2ce7ce47aae6e430d83758c23748537f58
Sebastian Koch 9 years ago
parent
commit
dce8825124

+ 46 - 0
python/scripts/basic_function.mako

@@ -0,0 +1,46 @@
+% 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

+ 894 - 0
python/scripts/errors.txt

@@ -0,0 +1,894 @@
+empty: 10 
+Function C_STR contains no parseable content in cpp header. Something might be wrong.
+Function REDRUM contains no parseable content in cpp header. Something might be wrong.
+Function STR contains no parseable content in cpp header. Something might be wrong.
+Function copyleft_marching_cubes_tables contains no parseable content in cpp header. Something might be wrong.
+Function deprecated contains no parseable content in cpp header. Something might be wrong.
+Function embree_Embree_convenience contains no parseable content in cpp header. Something might be wrong.
+Function igl_inline contains no parseable content in cpp header. Something might be wrong.
+Function opengl_OpenGL_convenience contains no parseable content in cpp header. Something might be wrong.
+Function viewer_TextRenderer contains no parseable content in cpp header. Something might be wrong.
+Function viewer_TextRenderer_fonts contains no parseable content in cpp header. Something might be wrong.
+
+
+incorrect: 364 
+Incorrect function in adjacency_list: adjacency_list, Unknown typechain: std::vector<std::vector<IndexVector> > &,Unknown typechain: bool
+
+Incorrect function in all_pairs_distances: all_pairs_distances, Unknown typechain: Mat &,Unknown typechain: Mat &,Empty typechain: bool,Unknown typechain: Mat &
+
+Incorrect function in ambient_occlusion: ambient_occlusion, Unknown typechain: std::function<bool (const Eigen::Vector3f &, const Eigen::Vector3f &)> &,Empty typechain: int
+
+Incorrect function in ambient_occlusion: ambient_occlusion, Unknown typechain: igl::AABB<DerivedV, DIM> &,Empty typechain: int
+
+Incorrect function in angular_distance: angular_distance, Unknown typechain: Eigen::Quaterniond &,Unknown typechain: Eigen::Quaterniond &
+
+Incorrect function in any_of: any_of, Unknown typechain: Mat &
+
+Incorrect function in arap_linear_block: arap_linear_block, Unknown typechain: MatV &,Unknown typechain: MatF &,Empty typechain: int,Empty typechain: int,Empty typechain: int &
+
+Incorrect function in arap_linear_block: arap_linear_block_spokes, Unknown typechain: MatV &,Unknown typechain: MatF &,Empty typechain: int,Empty typechain: int &
+
+Incorrect function in arap_linear_block: arap_linear_block_spokes_and_rims, Unknown typechain: MatV &,Unknown typechain: MatF &,Empty typechain: int,Empty typechain: int &
+
+Incorrect function in arap_linear_block: arap_linear_block_elements, Unknown typechain: MatV &,Unknown typechain: MatF &,Empty typechain: int,Empty typechain: int &
+
+Incorrect function in arap_rhs: arap_rhs, Empty typechain: int,Empty typechain: int,Empty typechain: int &
+
+Incorrect function in average_onto_faces: average_onto_faces, Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &,Unknown typechain: Eigen::Matrix<I, Eigen::Dynamic, Eigen::Dynamic> &,Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &,Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &
+
+Incorrect function in axis_angle_to_quat: axis_angle_to_quat, Unknown typechain: Q_type *,Unknown typechain: Q_type,Unknown typechain: Q_type *
+
+Incorrect function in biharmonic_coordinates: biharmonic_coordinates, Unknown typechain: std::vector<std::vector<SType> > &
+
+Incorrect function in biharmonic_coordinates: biharmonic_coordinates, Unknown typechain: std::vector<std::vector<SType> > &,Empty typechain: int
+
+Incorrect function in boundary_conditions: boundary_conditions, Unknown typechain: Eigen::VectorXi &,Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in boundary_facets: boundary_facets, Unknown typechain: std::vector<std::vector<IntegerT> > &,Unknown typechain: std::vector<std::vector<IntegerF> > &
+
+Incorrect function in boundary_loop: boundary_loop, Unknown typechain: std::vector<Index> &
+
+Incorrect function in cat: cat, Empty typechain: int,Unknown typechain: MatC &
+
+Incorrect function in cat: cat, Empty typechain: int,Unknown typechain: Mat &,Unknown typechain: Mat &
+
+Incorrect function in cat: cat, Unknown typechain: std::vector<std::vector<Mat> > &,Unknown typechain: Mat &
+
+Incorrect function in centroid: centroid, Unknown typechain: Derivedvol &
+
+Incorrect function in circulation: circulation, Empty typechain: int,Empty typechain: bool,Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in circulation: circulation, Empty typechain: int,Empty typechain: bool,Unknown typechain: Eigen::VectorXi &,Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in collapse_edge: collapse_edge, Empty typechain: int,Unknown typechain: Eigen::RowVectorXd &,Unknown typechain: Eigen::VectorXi &,Empty typechain: int &,Empty typechain: int &,Empty typechain: int &,Empty typechain: int &
+
+Incorrect function in collapse_edge: collapse_edge, Empty typechain: int,Unknown typechain: Eigen::RowVectorXd &,Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in collapse_edge: collapse_edge, Unknown typechain: std::function<void (const int, const Eigen::MatrixXd &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, const Eigen::VectorXi &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, double &, Eigen::RowVectorXd &)> &,Unknown typechain: Eigen::VectorXi &,Unknown typechain: std::set<std::pair<double, int> > &,Unknown typechain: std::vector<std::set<std::pair<double, int> >::iterator> &
+
+Incorrect function in collapse_edge: collapse_edge, Unknown typechain: std::function<void (const int, const Eigen::MatrixXd &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, const Eigen::VectorXi &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, double &, Eigen::RowVectorXd &)> &,Unknown typechain: Eigen::VectorXi &,Unknown typechain: std::set<std::pair<double, int> > &,Unknown typechain: std::vector<std::set<std::pair<double, int> >::iterator> &,Empty typechain: int &,Empty typechain: int &,Empty typechain: int &,Empty typechain: int &,Empty typechain: int &
+
+Incorrect function in collapse_small_triangles: collapse_small_triangles, Empty typechain: double
+
+Incorrect function in colon: colon, Unknown typechain: L,Unknown typechain: S,Unknown typechain: H,Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, 1> &
+
+Incorrect function in colon: colon, Unknown typechain: L,Unknown typechain: H,Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, 1> &
+
+Incorrect function in colon: colon, Unknown typechain: L,Unknown typechain: H
+
+Incorrect function in column_to_quats: column_to_quats, Unknown typechain: std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> > &
+
+Incorrect function in components: components, Unknown typechain: Eigen::SparseMatrix<AScalar> &
+
+Incorrect function in components: components, Unknown typechain: Eigen::SparseMatrix<AScalar> &
+
+Incorrect function in copyleft_cgal_assign_scalar: assign_scalar, Unknown typechain: typename CGAL::Epeck::FT &,Unknown typechain: CGAL::Epeck::FT &
+
+Incorrect function in copyleft_cgal_assign_scalar: assign_scalar, Unknown typechain: typename CGAL::Epeck::FT &,Empty typechain: double &
+
+Incorrect function in copyleft_cgal_assign_scalar: assign_scalar, Empty typechain: double &,Empty typechain: double &
+
+Incorrect function in copyleft_cgal_cell_adjacency: cell_adjacency, Unknown typechain: size_t,Unknown typechain: std::vector<std::set<std::tuple<typename DerivedC::Scalar, bool, size_t> > > &
+
+Incorrect function in copyleft_cgal_closest_facet: closest_facet, Unknown typechain: std::vector<std::vector<uE2EType> > &
+
+Incorrect function in copyleft_cgal_closest_facet: closest_facet, Unknown typechain: std::vector<std::vector<uE2EType> > &
+
+Incorrect function in copyleft_cgal_closest_facet: closest_facet, Unknown typechain: std::vector<std::vector<uE2EType> > &,Unknown typechain: std::vector<std::vector<size_t> > &,Unknown typechain: std::vector<std::vector<size_t> > &,Unknown typechain: CGAL::AABB_tree<CGAL::AABB_traits<Kernel, CGAL::AABB_triangle_primitive<Kernel, typename std::vector<typename Kernel::Triangle_3>::iterator> > > &,Unknown typechain: std::vector<typename Kernel::Triangle_3> &,Unknown typechain: std::vector<bool> &
+
+Incorrect function in copyleft_cgal_complex_to_mesh: complex_to_mesh, Unknown typechain: CGAL::Complex_2_in_triangulation_3<Tr> &
+
+Incorrect function in copyleft_cgal_extract_cells: extract_cells, Unknown typechain: std::vector<std::vector<uE2EType> > &
+
+Incorrect function in copyleft_cgal_extract_cells: extract_cells_single_component, Unknown typechain: std::vector<std::vector<uE2EType> > &
+
+Incorrect function in copyleft_cgal_half_space_box: half_space_box, Unknown typechain: CGAL::Plane_3<CGAL::Epeck> &,Unknown typechain: Eigen::Matrix<CGAL::Epeck::FT, 8, 3> &,Unknown typechain: Eigen::Matrix<int, 12, 3> &
+
+Incorrect function in copyleft_cgal_half_space_box: half_space_box, Unknown typechain: Eigen::Matrix<CGAL::Epeck::FT, 8, 3> &,Unknown typechain: Eigen::Matrix<int, 12, 3> &
+
+Incorrect function in copyleft_cgal_half_space_box: half_space_box, Unknown typechain: Eigen::Matrix<CGAL::Epeck::FT, 8, 3> &,Unknown typechain: Eigen::Matrix<int, 12, 3> &
+
+Incorrect function in copyleft_cgal_intersect_other: intersect_other, Unknown typechain: igl::copyleft::cgal::RemeshSelfIntersectionsParam &
+
+Incorrect function in copyleft_cgal_mesh_boolean: mesh_boolean, Unknown typechain: igl::MeshBooleanType &
+
+Incorrect function in copyleft_cgal_mesh_boolean: mesh_boolean, Unknown typechain: std::function<int (const Eigen::Matrix<int, 1, Eigen::Dynamic>)> &,Unknown typechain: std::function<int (const int, const int)> &
+
+Incorrect function in copyleft_cgal_mesh_boolean: mesh_boolean, Unknown typechain: std::vector<DerivedV> &,Unknown typechain: std::vector<DerivedF> &,Unknown typechain: std::function<int (const Eigen::Matrix<int, 1, Eigen::Dynamic>)> &,Unknown typechain: std::function<int (const int, const int)> &
+
+Incorrect function in copyleft_cgal_mesh_boolean: mesh_boolean, Unknown typechain: std::function<int (const Eigen::Matrix<int, 1, Eigen::Dynamic>)> &,Unknown typechain: std::function<int (const int, const int)> &
+
+Incorrect function in copyleft_cgal_mesh_boolean: mesh_boolean, Unknown typechain: igl::MeshBooleanType &
+
+Incorrect function in copyleft_cgal_mesh_boolean_type_to_funcs: mesh_boolean_type_to_funcs, Unknown typechain: igl::MeshBooleanType &,Unknown typechain: std::function<int (const Eigen::Matrix<int, 1, Eigen::Dynamic>)> &,Unknown typechain: std::function<int (const int, const int)> &
+
+Incorrect function in copyleft_cgal_mesh_to_cgal_triangle_list: mesh_to_cgal_triangle_list, Unknown typechain: std::vector<CGAL::Triangle_3<Kernel> > &
+
+Incorrect function in copyleft_cgal_mesh_to_polyhedron: mesh_to_polyhedron, Unknown typechain: Polyhedron &
+
+Incorrect function in copyleft_cgal_minkowski_sum: minkowski_sum, Unknown typechain: Eigen::Matrix<sType, 1, sCols, sOptions> &,Unknown typechain: Eigen::Matrix<dType, 1, dCols, dOptions> &,Empty typechain: bool
+
+Incorrect function in copyleft_cgal_minkowski_sum: minkowski_sum, Unknown typechain: Eigen::Matrix<sType, 1, sCols, sOptions> &,Unknown typechain: Eigen::Matrix<dType, 1, dCols, dOptions> &
+
+Incorrect function in copyleft_cgal_order_facets_around_edge: order_facets_around_edge, Unknown typechain: size_t,Unknown typechain: size_t,Unknown typechain: std::vector<int> &,Unknown typechain: bool
+
+Incorrect function in copyleft_cgal_order_facets_around_edge: order_facets_around_edge, Unknown typechain: size_t,Unknown typechain: size_t,Unknown typechain: std::vector<int> &
+
+Incorrect function in copyleft_cgal_order_facets_around_edges: order_facets_around_edges, Unknown typechain: std::vector<std::vector<uE2EType> > &,Unknown typechain: std::vector<std::vector<uE2oEType> > &,Unknown typechain: std::vector<std::vector<uE2CType> > &
+
+Incorrect function in copyleft_cgal_order_facets_around_edges: order_facets_around_edges, Unknown typechain: std::vector<std::vector<uE2EType> > &,Unknown typechain: std::vector<std::vector<uE2oEType> > &,Unknown typechain: std::vector<std::vector<uE2CType> > &
+
+Incorrect function in copyleft_cgal_order_facets_around_edges: order_facets_around_edges, Unknown typechain: std::vector<std::vector<uE2EType> > &,Unknown typechain: std::vector<std::vector<uE2oEType> > &,Unknown typechain: std::vector<std::vector<uE2CType> > &
+
+Incorrect function in copyleft_cgal_outer_element: outer_vertex, Unknown typechain: IndexType &
+
+Incorrect function in copyleft_cgal_outer_element: outer_edge, Unknown typechain: IndexType &,Unknown typechain: IndexType &
+
+Incorrect function in copyleft_cgal_outer_facet: outer_facet, Unknown typechain: IndexType &,Empty typechain: bool &
+
+Incorrect function in copyleft_cgal_outer_facet: outer_facet, Unknown typechain: IndexType &,Empty typechain: bool &
+
+Incorrect function in copyleft_cgal_point_mesh_squared_distance: point_mesh_squared_distance, Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in copyleft_cgal_point_mesh_squared_distance: point_mesh_squared_distance_precompute, Unknown typechain: CGAL::AABB_tree<CGAL::AABB_traits<Kernel, CGAL::AABB_triangle_primitive<Kernel, typename std::vector<CGAL::Triangle_3<Kernel> >::iterator> > > &,Unknown typechain: std::vector<CGAL::Triangle_3<Kernel> > &
+
+Incorrect function in copyleft_cgal_point_mesh_squared_distance: point_mesh_squared_distance, Unknown typechain: CGAL::AABB_tree<CGAL::AABB_traits<Kernel, CGAL::AABB_triangle_primitive<Kernel, typename std::vector<CGAL::Triangle_3<Kernel> >::iterator> > > &,Unknown typechain: std::vector<CGAL::Triangle_3<Kernel> > &,Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in copyleft_cgal_polyhedron_to_mesh: polyhedron_to_mesh, Unknown typechain: Polyhedron &
+
+Incorrect function in copyleft_cgal_projected_delaunay: projected_delaunay, Unknown typechain: CGAL::Triangle_3<Kernel> &,Unknown typechain: std::vector<CGAL::Object> &,Unknown typechain: CGAL::Constrained_triangulation_plus_2<CGAL::Constrained_Delaunay_triangulation_2<Kernel, CGAL::Triangulation_data_structure_2<CGAL::Triangulation_vertex_base_2<Kernel>, CGAL::Constrained_triangulation_face_base_2<Kernel> >, CGAL::Exact_intersections_tag> > &
+
+Incorrect function in copyleft_cgal_propagate_winding_numbers: propagate_winding_numbers, Unknown typechain: std::vector<std::vector<uE2EType> > &,Unknown typechain: size_t,Unknown typechain: size_t
+
+Incorrect function in copyleft_cgal_relabel_small_immersed_cells: relabel_small_immersed_cells, Unknown typechain: size_t,Unknown typechain: size_t,Unknown typechain: FT
+
+Incorrect function in copyleft_cgal_remesh_intersections: remesh_intersections, Unknown typechain: std::vector<CGAL::Triangle_3<Kernel> > &,Unknown typechain: std::map<typename DerivedF::Index, std::vector<std::pair<typename DerivedF::Index, CGAL::Object> > > &,Unknown typechain: std::map<std::pair<typename DerivedF::Index, typename DerivedF::Index>, std::vector<typename DerivedF::Index> > &,Empty typechain: bool
+
+Incorrect function in copyleft_cgal_remesh_intersections: remesh_intersections, Unknown typechain: std::vector<CGAL::Triangle_3<Kernel> > &,Unknown typechain: std::map<typename DerivedF::Index, std::vector<std::pair<typename DerivedF::Index, CGAL::Object> > > &,Unknown typechain: std::map<std::pair<typename DerivedF::Index, typename DerivedF::Index>, std::vector<typename DerivedF::Index> > &
+
+Incorrect function in copyleft_cgal_remesh_self_intersections: remesh_self_intersections, Unknown typechain: igl::copyleft::cgal::RemeshSelfIntersectionsParam &
+
+Incorrect function in copyleft_cgal_signed_distance_isosurface: signed_distance_isosurface, Empty typechain: double,Empty typechain: double,Empty typechain: double,Empty typechain: double,Unknown typechain: igl::SignedDistanceType
+
+Incorrect function in copyleft_cgal_string_to_mesh_boolean_type: string_to_mesh_boolean_type, Unknown typechain: igl::MeshBooleanType &
+
+Incorrect function in copyleft_cgal_submesh_aabb_tree: submesh_aabb_tree, Unknown typechain: CGAL::AABB_tree<CGAL::AABB_traits<Kernel, CGAL::AABB_triangle_primitive<Kernel, typename std::vector<typename Kernel::Triangle_3>::iterator> > > &,Unknown typechain: std::vector<typename Kernel::Triangle_3> &,Unknown typechain: std::vector<bool> &
+
+Incorrect function in copyleft_comiso_miq: miq, Unknown typechain: double,Unknown typechain: double,Unknown typechain: bool,Unknown typechain: int,Unknown typechain: int,Unknown typechain: bool,Unknown typechain: bool,Unknown typechain: std::vector<int>,Unknown typechain: std::vector<std::vector<int> >
+
+Incorrect function in copyleft_comiso_miq: miq, Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 3> &,Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &,Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 3> &,Unknown typechain: double,Unknown typechain: double,Unknown typechain: bool,Unknown typechain: int,Unknown typechain: int,Unknown typechain: bool,Unknown typechain: bool,Unknown typechain: std::vector<int>,Unknown typechain: std::vector<std::vector<int> >
+
+Incorrect function in copyleft_comiso_nrosy: nrosy, Unknown typechain: Eigen::VectorXi &,Unknown typechain: Eigen::VectorXi &,Empty typechain: int,Empty typechain: double
+
+Incorrect function in copyleft_comiso_nrosy: nrosy, Unknown typechain: Eigen::VectorXi &,Empty typechain: int
+
+Incorrect function in copyleft_cork_from_cork_mesh: from_cork_mesh, Empty typechain: int &
+
+Incorrect function in copyleft_cork_mesh_boolean: mesh_boolean, Unknown typechain: igl::MeshBooleanType &
+
+Incorrect function in copyleft_cork_to_cork_mesh: to_cork_mesh, Empty typechain: int &
+
+Incorrect function in copyleft_marching_cubes: marching_cubes, Empty typechain: unsigned int,Empty typechain: unsigned int,Empty typechain: unsigned int
+
+Incorrect function in copyleft_progressive_hulls: progressive_hulls, Unknown typechain: size_t
+
+Incorrect function in copyleft_progressive_hulls_cost_and_placement: progressive_hulls_cost_and_placement, Empty typechain: int,Unknown typechain: Eigen::VectorXi &,Empty typechain: double &,Unknown typechain: Eigen::RowVectorXd &
+
+Incorrect function in copyleft_tetgen_mesh_to_tetgenio: mesh_to_tetgenio, Empty typechain: int &,Empty typechain: int &,Empty typechain: int &
+
+Incorrect function in copyleft_tetgen_mesh_with_skeleton: mesh_with_skeleton, Unknown typechain: Eigen::VectorXi &,Empty typechain: int
+
+Incorrect function in copyleft_tetgen_mesh_with_skeleton: mesh_with_skeleton, Unknown typechain: Eigen::VectorXi &,Empty typechain: int
+
+Incorrect function in copyleft_tetgen_read_into_tetgenio: read_into_tetgenio, Empty typechain: int &
+
+Incorrect function in copyleft_tetgen_tetgenio_to_tetmesh: tetgenio_to_tetmesh, Empty typechain: int &,Empty typechain: int &,Empty typechain: int &,Empty typechain: int &
+
+Incorrect function in copyleft_tetgen_tetrahedralize: tetrahedralize, Empty typechain: int &,Empty typechain: int &,Empty typechain: int &,Empty typechain: int &,Empty typechain: int &
+
+Incorrect function in covariance_scatter_matrix: covariance_scatter_matrix, Unknown typechain: igl::ARAPEnergyType,Unknown typechain: Eigen::SparseMatrix<double> &
+
+Incorrect function in cross: cross, Empty typechain: double *,Empty typechain: double *,Empty typechain: double *
+
+Incorrect function in crouzeix_raviart_massmatrix: crouzeix_raviart_massmatrix, Unknown typechain: Eigen::SparseMatrix<MT> &
+
+Incorrect function in crouzeix_raviart_massmatrix: crouzeix_raviart_massmatrix, Unknown typechain: Eigen::SparseMatrix<MT> &
+
+Incorrect function in cut_mesh: cut_mesh, Unknown typechain: std::vector<std::vector<VFType> > &,Unknown typechain: std::vector<std::vector<VFType> > &,Unknown typechain: std::vector<bool> &
+
+Incorrect function in decimate: decimate, Unknown typechain: size_t
+
+Incorrect function in decimate: decimate, Unknown typechain: std::function<void (const int, const Eigen::MatrixXd &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, const Eigen::VectorXi &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, double &, Eigen::RowVectorXd &)> &,Unknown typechain: std::function<bool (const Eigen::MatrixXd &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, const Eigen::VectorXi &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, const std::set<std::pair<double, int> > &, const std::vector<std::set<std::pair<double, int> >::iterator> &, const Eigen::MatrixXd &, const int, const int, const int, const int, const int)> &
+
+Incorrect function in deform_skeleton: deform_skeleton, Unknown typechain: std::vector<Eigen::Affine3d, Eigen::aligned_allocator<Eigen::Affine3d> > &
+
+Incorrect function in dijkstra: dijkstra_compute_paths, Unknown typechain: IndexType &,Unknown typechain: std::set<IndexType> &,Unknown typechain: std::vector<std::vector<IndexType> > &
+
+Incorrect function in dijkstra: dijkstra_get_shortest_path_to, Unknown typechain: IndexType &,Unknown typechain: std::vector<IndexType> &
+
+Incorrect function in directed_edge_orientations: directed_edge_orientations, Unknown typechain: std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> > &
+
+Incorrect function in dot: dot, Empty typechain: double *,Empty typechain: double *
+
+Incorrect function in dqs: dqs, Unknown typechain: std::vector<Q, QAlloc> &,Unknown typechain: std::vector<T> &
+
+Incorrect function in edge_collapse_is_valid: edge_collapse_is_valid, Empty typechain: int,Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in edge_flaps: edge_flaps, Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in edge_flaps: edge_flaps, Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in eigs: eigs, Unknown typechain: Eigen::SparseMatrix<Atype> &,Unknown typechain: Eigen::SparseMatrix<Btype> &,Unknown typechain: size_t
+
+Incorrect function in embree_bone_heat: bone_heat, Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in example_fun: example_fun, Unknown typechain: Printable &
+
+Incorrect function in extract_manifold_patches: extract_manifold_patches, Unknown typechain: std::vector<std::vector<uE2EType> > &
+
+Incorrect function in extract_non_manifold_edge_curves: extract_non_manifold_edge_curves, Unknown typechain: std::vector<std::vector<uE2EType> > &,Unknown typechain: std::vector<std::vector<size_t> > &
+
+Incorrect function in face_occurrences: face_occurrences, Unknown typechain: std::vector<std::vector<IntegerF> > &,Unknown typechain: std::vector<IntegerC> &
+
+Incorrect function in faces_first: faces_first, Unknown typechain: MatV &,Unknown typechain: MatF &,Unknown typechain: MatV &,Unknown typechain: MatF &,Unknown typechain: VecI &
+
+Incorrect function in faces_first: faces_first, Unknown typechain: MatV &,Unknown typechain: MatF &,Unknown typechain: VecI &
+
+Incorrect function in facet_components: facet_components, Unknown typechain: std::vector<std::vector<std::vector<TTIndex> > > &
+
+Incorrect function in find: find, Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &,Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, 1> &
+
+Incorrect function in find_cross_field_singularities: find_cross_field_singularities, Unknown typechain: bool
+
+Incorrect function in fit_plane: fit_plane, Unknown typechain: Eigen::RowVector3d &,Unknown typechain: Eigen::RowVector3d &
+
+Incorrect function in fit_rotations: fit_rotations_SSE, Unknown typechain: Eigen::MatrixXf &,Unknown typechain: Eigen::MatrixXf &
+
+Incorrect function in forward_kinematics: forward_kinematics, Unknown typechain: Eigen::VectorXi &,Unknown typechain: std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> > &,Unknown typechain: std::vector<Eigen::Vector3d> &,Unknown typechain: std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> > &,Unknown typechain: std::vector<Eigen::Vector3d> &
+
+Incorrect function in forward_kinematics: forward_kinematics, Unknown typechain: Eigen::VectorXi &,Unknown typechain: std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> > &,Unknown typechain: std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> > &,Unknown typechain: std::vector<Eigen::Vector3d> &
+
+Incorrect function in forward_kinematics: forward_kinematics, Unknown typechain: Eigen::VectorXi &,Unknown typechain: std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> > &,Unknown typechain: std::vector<Eigen::Vector3d> &
+
+Incorrect function in forward_kinematics: forward_kinematics, Unknown typechain: Eigen::VectorXi &,Unknown typechain: std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> > &
+
+Incorrect function in frame_field_deformer: frame_field_deformer, Unknown typechain: int,Unknown typechain: double,Unknown typechain: bool
+
+Incorrect function in frustum: frustum, Unknown typechain: typename DerivedP::Scalar,Unknown typechain: typename DerivedP::Scalar,Unknown typechain: typename DerivedP::Scalar,Unknown typechain: typename DerivedP::Scalar,Unknown typechain: typename DerivedP::Scalar,Unknown typechain: typename DerivedP::Scalar
+
+Incorrect function in grad: grad, Unknown typechain: Eigen::SparseMatrix<typename DerivedV::Scalar> &
+
+Incorrect function in group_sum_matrix: group_sum_matrix, Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &,Empty typechain: int
+
+Incorrect function in group_sum_matrix: group_sum_matrix, Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &
+
+Incorrect function in harwell_boeing: harwell_boeing, Empty typechain: int &,Unknown typechain: std::vector<Scalar> &,Unknown typechain: std::vector<Index> &,Unknown typechain: std::vector<Index> &
+
+Incorrect function in hausdorff: hausdorff, Unknown typechain: Scalar &
+
+Incorrect function in histc: histc, Unknown typechain: typename DerivedE::Scalar &,Unknown typechain: typename DerivedE::Index &
+
+Incorrect function in hsv_to_rgb: hsv_to_rgb, Unknown typechain: T *,Unknown typechain: T *
+
+Incorrect function in hsv_to_rgb: hsv_to_rgb, Unknown typechain: T &,Unknown typechain: T &,Unknown typechain: T &,Unknown typechain: T &,Unknown typechain: T &,Unknown typechain: T &
+
+Incorrect function in in_element: in_element, Unknown typechain: AABB<DerivedV, DIM> &,Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in in_element: in_element, Unknown typechain: AABB<DerivedV, DIM> &
+
+Incorrect function in intersect: intersect, Unknown typechain: M &,Unknown typechain: M &,Unknown typechain: M &
+
+Incorrect function in intersect: intersect, Unknown typechain: M &,Unknown typechain: M &
+
+Incorrect function in is_dir: is_dir, Empty typechain: char *
+
+Incorrect function in is_file: is_file, Empty typechain: char *
+
+Incorrect function in is_readable: is_readable, Empty typechain: char *
+
+Incorrect function in is_symmetric: is_symmetric, Unknown typechain: Eigen::SparseMatrix<AT> &
+
+Incorrect function in is_symmetric: is_symmetric, Unknown typechain: Eigen::SparseMatrix<AT> &,Unknown typechain: epsilonT
+
+Incorrect function in is_writable: is_writable, Empty typechain: char *
+
+Incorrect function in jet: jet, Unknown typechain: T,Unknown typechain: T *
+
+Incorrect function in jet: jet, Unknown typechain: T,Unknown typechain: T &,Unknown typechain: T &,Unknown typechain: T &
+
+Incorrect function in jet: jet, Empty typechain: double,Empty typechain: double
+
+Incorrect function in lbs_matrix: lbs_matrix_column, Unknown typechain: Eigen::SparseMatrix<double> &
+
+Incorrect function in lbs_matrix: lbs_matrix_column, Unknown typechain: Eigen::SparseMatrix<double> &
+
+Incorrect function in lim_lim: lim, Empty typechain: int &,Empty typechain: int &,Empty typechain: int &,Empty typechain: int &,Empty typechain: int &,Empty typechain: double,Empty typechain: int,Empty typechain: bool
+
+Incorrect function in limit_faces: limit_faces, Unknown typechain: MatF &,Unknown typechain: VecL &,Empty typechain: bool,Unknown typechain: MatF &
+
+Incorrect function in line_segment_in_rectangle: line_segment_in_rectangle, Unknown typechain: Eigen::Vector2d &,Unknown typechain: Eigen::Vector2d &,Unknown typechain: Eigen::Vector2d &,Unknown typechain: Eigen::Vector2d &
+
+Incorrect function in list_to_matrix: list_to_matrix, Unknown typechain: std::vector<std::vector<T> > &
+
+Incorrect function in list_to_matrix: list_to_matrix, Unknown typechain: std::vector<std::vector<T> > &,Empty typechain: int,Unknown typechain: T &
+
+Incorrect function in list_to_matrix: list_to_matrix, Unknown typechain: std::vector<T> &
+
+Incorrect function in lscm: lscm, Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in map_vertices_to_circle: map_vertices_to_circle, Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in mat_max: mat_max, Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &,Empty typechain: int,Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, 1> &,Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &
+
+Incorrect function in mat_min: mat_min, Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &,Empty typechain: int,Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, 1> &,Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &
+
+Incorrect function in mat_to_quat: mat4_to_quat, Unknown typechain: Q_type *,Unknown typechain: Q_type *
+
+Incorrect function in mat_to_quat: mat3_to_quat, Unknown typechain: Q_type *,Unknown typechain: Q_type *
+
+Incorrect function in matlab_format: matlab_format, Unknown typechain: Eigen::SparseMatrix<DerivedS> &
+
+Incorrect function in matlab_matlabinterface: mlinit, Empty typechain: int **
+
+Incorrect function in matlab_matlabinterface: mlclose, Empty typechain: int **
+
+Incorrect function in matlab_matlabinterface: mlsetmatrix, Empty typechain: int **
+
+Incorrect function in matlab_matlabinterface: mlgetmatrix, Empty typechain: int **
+
+Incorrect function in matlab_matlabinterface: mlsetscalar, Empty typechain: int **,Empty typechain: double
+
+Incorrect function in matlab_matlabinterface: mlgetscalar, Empty typechain: int **
+
+Incorrect function in matlab_matlabinterface: mleval, Empty typechain: int **
+
+Incorrect function in matlab_mexErrMsgTxt: mexErrMsgTxt, Empty typechain: bool,Empty typechain: char *
+
+Incorrect function in matlab_requires_arg: requires_arg, Empty typechain: int,Empty typechain: int,Empty typechain: char *
+
+Incorrect function in matlab_validate_arg: validate_arg_scalar, Empty typechain: int,Empty typechain: int,Empty typechain: int *[],Empty typechain: char *
+
+Incorrect function in matlab_validate_arg: validate_arg_logical, Empty typechain: int,Empty typechain: int,Empty typechain: int *[],Empty typechain: char *
+
+Incorrect function in matlab_validate_arg: validate_arg_char, Empty typechain: int,Empty typechain: int,Empty typechain: int *[],Empty typechain: char *
+
+Incorrect function in matlab_validate_arg: validate_arg_double, Empty typechain: int,Empty typechain: int,Empty typechain: int *[],Empty typechain: char *
+
+Incorrect function in matlab_validate_arg: validate_arg_function_handle, Empty typechain: int,Empty typechain: int,Empty typechain: int *[],Empty typechain: char *
+
+Incorrect function in matrix_to_list: matrix_to_list, Unknown typechain: std::vector<std::vector<typename DerivedM::Scalar> > &
+
+Incorrect function in matrix_to_list: matrix_to_list, Unknown typechain: std::vector<typename DerivedM::Scalar> &
+
+Incorrect function in max_faces_stopping_condition: max_faces_stopping_condition, Empty typechain: int &,Empty typechain: int,Unknown typechain: std::function<bool (const Eigen::MatrixXd &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, const Eigen::VectorXi &, const Eigen::MatrixXi &, const Eigen::MatrixXi &, const std::set<std::pair<double, int> > &, const std::vector<std::set<std::pair<double, int> >::iterator> &, const Eigen::MatrixXd &, const int, const int, const int, const int, const int)> &
+
+Incorrect function in max_faces_stopping_condition: max_faces_stopping_condition, Unknown typechain: Eigen::VectorXi &,Unknown typechain: std::set<std::pair<double, int> > &,Unknown typechain: std::vector<std::set<std::pair<double, int> >::iterator> &,Empty typechain: int,Empty typechain: int,Empty typechain: int,Empty typechain: int,Empty typechain: int,Empty typechain: int &,Empty typechain: int
+
+Incorrect function in max_size: max_size, Unknown typechain: std::vector<T> &
+
+Incorrect function in median: median, Empty typechain: double &
+
+Incorrect function in min_quad_dense: min_quad_dense_precompute, Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &,Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &,Empty typechain: bool,Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &
+
+Incorrect function in min_size: min_size, Unknown typechain: std::vector<T> &
+
+Incorrect function in mode: mode, Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &,Empty typechain: int,Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, 1> &
+
+Incorrect function in mosek_mosek_linprog: mosek_linprog, Unknown typechain: Eigen::SparseMatrix<double> &
+
+Incorrect function in n_polyvector: n_polyvector, Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in n_polyvector_general: n_polyvector_general, Unknown typechain: Eigen::VectorXi &,Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in normalize_quat: normalize_quat, Unknown typechain: Q_type *,Unknown typechain: Q_type *
+
+Incorrect function in on_boundary: on_boundary, Unknown typechain: std::vector<std::vector<IntegerT> > &,Unknown typechain: std::vector<bool> &,Unknown typechain: std::vector<std::vector<bool> > &
+
+Incorrect function in opengl2_draw_floor: draw_floor, Empty typechain: float *,Empty typechain: float *,Unknown typechain: int,Unknown typechain: int
+
+Incorrect function in opengl2_draw_floor: draw_floor_outline, Empty typechain: float *,Empty typechain: float *,Unknown typechain: int,Unknown typechain: int
+
+Incorrect function in opengl2_draw_mesh: draw_mesh, Unknown typechain: GLuint,Unknown typechain: GLuint
+
+Incorrect function in opengl2_draw_mesh: draw_mesh, Unknown typechain: GLuint,Unknown typechain: GLuint
+
+Incorrect function in opengl2_draw_point: draw_point, Empty typechain: double,Empty typechain: double,Empty typechain: double,Unknown typechain: double,Unknown typechain: bool
+
+Incorrect function in opengl2_draw_point: draw_point, Unknown typechain: double,Unknown typechain: bool
+
+Incorrect function in opengl2_draw_skeleton_3d: draw_skeleton_3d, Unknown typechain: double
+
+Incorrect function in opengl2_draw_skeleton_vector_graphics: draw_skeleton_vector_graphics, Empty typechain: float *,Empty typechain: float *
+
+Incorrect function in opengl2_draw_skeleton_vector_graphics: draw_skeleton_vector_graphics, Empty typechain: float *,Empty typechain: float *
+
+Incorrect function in opengl2_print_gl_get: print_gl_get, Unknown typechain: GLenum
+
+Incorrect function in opengl2_project: project, Empty typechain: double,Empty typechain: double,Empty typechain: double,Empty typechain: double *,Empty typechain: double *,Empty typechain: double *
+
+Incorrect function in opengl2_right_axis: right_axis, Empty typechain: double *,Empty typechain: double *,Empty typechain: double *
+
+Incorrect function in opengl2_right_axis: right_axis, Empty typechain: double *,Empty typechain: double *,Empty typechain: double *,Empty typechain: double *
+
+Incorrect function in opengl2_unproject: unproject, Empty typechain: double,Empty typechain: double,Empty typechain: double,Empty typechain: double *,Empty typechain: double *,Empty typechain: double *
+
+Incorrect function in opengl2_unproject_to_zero_plane: unproject_to_zero_plane, Empty typechain: double,Empty typechain: double,Empty typechain: double *,Empty typechain: double *,Empty typechain: double *
+
+Incorrect function in opengl2_up_axis: up_axis, Empty typechain: double *,Empty typechain: double *,Empty typechain: double *
+
+Incorrect function in opengl2_up_axis: up_axis, Empty typechain: double *,Empty typechain: double *,Empty typechain: double *,Empty typechain: double *
+
+Incorrect function in opengl2_view_axis: view_axis, Empty typechain: double *,Empty typechain: double *,Empty typechain: double *,Empty typechain: double *
+
+Incorrect function in opengl2_view_axis: view_axis, Empty typechain: double *,Empty typechain: double *,Empty typechain: double *
+
+Incorrect function in opengl_compile_and_link_program: compile_and_link_program, Empty typechain: char *,Empty typechain: char *
+
+Incorrect function in opengl_compile_shader: compile_shader, Unknown typechain: GLint,Empty typechain: char *
+
+Incorrect function in opengl_create_index_vbo: create_index_vbo, Unknown typechain: GLuint &
+
+Incorrect function in opengl_create_mesh_vbo: create_mesh_vbo, Unknown typechain: GLuint &,Unknown typechain: GLuint &
+
+Incorrect function in opengl_create_mesh_vbo: create_mesh_vbo, Unknown typechain: GLuint &,Unknown typechain: GLuint &,Unknown typechain: GLuint &
+
+Incorrect function in opengl_create_shader_program: create_shader_program, Unknown typechain: std::map<std::string, GLuint> &,Unknown typechain: GLuint &
+
+Incorrect function in opengl_create_shader_program: create_shader_program, Unknown typechain: std::map<std::string, GLuint> &,Unknown typechain: GLuint &
+
+Incorrect function in opengl_create_shader_program: create_shader_program, Unknown typechain: std::map<std::string, GLuint> &
+
+Incorrect function in opengl_create_shader_program: create_shader_program, Unknown typechain: std::map<std::string, GLuint> &
+
+Incorrect function in opengl_create_vector_vbo: create_vector_vbo, Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &,Unknown typechain: GLuint &
+
+Incorrect function in opengl_destroy_shader_program: destroy_shader_program, Unknown typechain: GLuint
+
+Incorrect function in opengl_gl_type_size: gl_type_size, Unknown typechain: GLenum
+
+Incorrect function in opengl_init_render_to_texture: init_render_to_texture, Unknown typechain: size_t,Unknown typechain: size_t,Unknown typechain: GLuint &,Unknown typechain: GLuint &,Unknown typechain: GLuint &
+
+Incorrect function in opengl_load_shader: load_shader, Empty typechain: char *,Unknown typechain: GLenum
+
+Incorrect function in opengl_print_program_info_log: print_program_info_log, Unknown typechain: GLuint
+
+Incorrect function in opengl_print_shader_info_log: print_shader_info_log, Unknown typechain: GLuint
+
+Incorrect function in opengl_texture_from_tga: texture_from_tga, Unknown typechain: GLuint &
+
+Incorrect function in opengl_uniform_type_to_string: uniform_type_to_string, Unknown typechain: GLenum
+
+Incorrect function in ortho: ortho, Unknown typechain: typename DerivedP::Scalar,Unknown typechain: typename DerivedP::Scalar,Unknown typechain: typename DerivedP::Scalar,Unknown typechain: typename DerivedP::Scalar,Unknown typechain: typename DerivedP::Scalar,Unknown typechain: typename DerivedP::Scalar
+
+Incorrect function in outer_element: outer_vertex, Unknown typechain: IndexType &
+
+Incorrect function in outer_element: outer_edge, Unknown typechain: IndexType &,Unknown typechain: IndexType &
+
+Incorrect function in outer_element: outer_facet, Unknown typechain: IndexType &,Empty typechain: bool &
+
+Incorrect function in partition: partition, Empty typechain: int,Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &,Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &,Unknown typechain: Eigen::Matrix<double, Eigen::Dynamic, 1> &
+
+Incorrect function in parula: parula, Unknown typechain: T,Unknown typechain: T *
+
+Incorrect function in parula: parula, Unknown typechain: T,Unknown typechain: T &,Unknown typechain: T &,Unknown typechain: T &
+
+Incorrect function in parula: parula, Empty typechain: double,Empty typechain: double
+
+Incorrect function in per_corner_normals: per_corner_normals, Empty typechain: double
+
+Incorrect function in per_corner_normals: per_corner_normals, Empty typechain: double
+
+Incorrect function in per_corner_normals: per_corner_normals, Unknown typechain: std::vector<std::vector<IndexType> > &,Empty typechain: double
+
+Incorrect function in piecewise_constant_winding_number: piecewise_constant_winding_number, Unknown typechain: std::vector<std::vector<uE2EType> > &
+
+Incorrect function in planarize_quad_mesh: planarize_quad_mesh, Empty typechain: int,Empty typechain: double &
+
+Incorrect function in png_texture_from_file: texture_from_file, Unknown typechain: GLuint &
+
+Incorrect function in png_texture_from_png: texture_from_png, Empty typechain: bool,Unknown typechain: GLuint &
+
+Incorrect function in png_texture_from_png: texture_from_png, Unknown typechain: GLuint &
+
+Incorrect function in png_texture_from_png: texture_from_png, Unknown typechain: Eigen::Matrix<char, Eigen::Dynamic, Eigen::Dynamic> &,Unknown typechain: Eigen::Matrix<char, Eigen::Dynamic, Eigen::Dynamic> &,Unknown typechain: Eigen::Matrix<char, Eigen::Dynamic, Eigen::Dynamic> &,Unknown typechain: Eigen::Matrix<char, Eigen::Dynamic, Eigen::Dynamic> &
+
+Incorrect function in point_in_circle: point_in_circle, Empty typechain: double,Empty typechain: double,Empty typechain: double,Empty typechain: double,Empty typechain: double
+
+Incorrect function in point_in_poly: point_in_poly, Unknown typechain: std::vector<std::vector<unsigned int> > &,Empty typechain: unsigned int,Empty typechain: unsigned int
+
+Incorrect function in point_simplex_squared_distance: point_simplex_squared_distance, Unknown typechain: typename DerivedEle::Index,Unknown typechain: Derivedsqr_d &
+
+Incorrect function in polar_svd3x3: polar_svd3x3, Unknown typechain: Mat &,Unknown typechain: Mat &
+
+Incorrect function in polar_svd3x3: polar_svd3x3_sse, Unknown typechain: Eigen::Matrix<T, 3 * 4, 3> &,Unknown typechain: Eigen::Matrix<T, 3 * 4, 3> &
+
+Incorrect function in polyroots: polyRoots, Unknown typechain: Eigen::Matrix<S, Eigen::Dynamic, 1> &,Unknown typechain: Eigen::Matrix<std::complex<T>, Eigen::Dynamic, 1> &
+
+Incorrect function in polyvector_field_cut_mesh_with_singularities: polyvector_field_cut_mesh_with_singularities, Unknown typechain: std::vector<std::vector<VFType> > &,Unknown typechain: std::vector<std::vector<VVType> > &
+
+Incorrect function in polyvector_field_singularities_from_matchings: polyvector_field_one_ring_matchings, Unknown typechain: std::vector<std::vector<VFType> > &,Empty typechain: int,Empty typechain: int,Unknown typechain: Eigen::VectorXi &,Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in polyvector_field_singularities_from_matchings: polyvector_field_singularities_from_matchings, Unknown typechain: std::vector<bool> &,Unknown typechain: std::vector<std::vector<VFType> > &
+
+Incorrect function in principal_curvature: principal_curvature, Unknown typechain: unsigned int,Unknown typechain: bool
+
+Incorrect function in print_ijv: print_ijv, Unknown typechain: int
+
+Incorrect function in print_vector: print_vector, Unknown typechain: std::vector<T> &
+
+Incorrect function in print_vector: print_vector, Unknown typechain: std::vector<std::vector<T> > &
+
+Incorrect function in print_vector: print_vector, Unknown typechain: std::vector<std::vector<std::vector<T> > > &
+
+Incorrect function in procrustes: procrustes, Empty typechain: bool,Empty typechain: bool,Unknown typechain: Scalar &
+
+Incorrect function in procrustes: procrustes, Empty typechain: bool,Empty typechain: bool,Unknown typechain: Eigen::Transform<Scalar, DIM, TType> &
+
+Incorrect function in procrustes: procrustes, Unknown typechain: Eigen::Rotation2D<Scalar> &
+
+Incorrect function in project: project, Unknown typechain: Eigen::Matrix<Scalar, 3, 1> &,Unknown typechain: Eigen::Matrix<Scalar, 4, 4> &,Unknown typechain: Eigen::Matrix<Scalar, 4, 4> &,Unknown typechain: Eigen::Matrix<Scalar, 4, 1> &
+
+Incorrect function in project: project, Unknown typechain: Eigen::Matrix<Scalar, 4, 4> &,Unknown typechain: Eigen::Matrix<Scalar, 4, 4> &,Unknown typechain: Eigen::Matrix<Scalar, 4, 1> &
+
+Incorrect function in project_to_line: project_to_line, Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar &,Unknown typechain: Scalar &,Unknown typechain: Scalar &,Unknown typechain: Scalar &,Unknown typechain: Scalar &
+
+Incorrect function in project_to_line: project_to_line, Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar,Unknown typechain: Scalar &,Unknown typechain: Scalar &
+
+Incorrect function in pseudonormal_test: pseudonormal_test, Unknown typechain: Eigen::VectorXi &,Unknown typechain: Eigen::RowVector3d &,Empty typechain: int,Unknown typechain: Eigen::RowVector3d &,Empty typechain: double &,Unknown typechain: Eigen::RowVector3d &
+
+Incorrect function in pseudonormal_test: pseudonormal_test, Unknown typechain: Eigen::RowVector2d &,Empty typechain: int,Unknown typechain: Eigen::RowVector2d &,Empty typechain: double &,Unknown typechain: Eigen::RowVector2d &
+
+Incorrect function in quat_conjugate: quat_conjugate, Unknown typechain: Q_type *,Unknown typechain: Q_type *
+
+Incorrect function in quat_mult: quat_mult, Unknown typechain: Q_type *,Unknown typechain: Q_type *,Unknown typechain: Q_type *
+
+Incorrect function in quat_to_axis_angle: quat_to_axis_angle, Unknown typechain: Q_type *,Unknown typechain: Q_type *,Unknown typechain: Q_type &
+
+Incorrect function in quat_to_axis_angle: quat_to_axis_angle_deg, Unknown typechain: Q_type *,Unknown typechain: Q_type *,Unknown typechain: Q_type &
+
+Incorrect function in quat_to_mat: quat_to_mat, Unknown typechain: Q_type *,Unknown typechain: Q_type *
+
+Incorrect function in quats_to_column: quats_to_column, Unknown typechain: std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> >
+
+Incorrect function in quats_to_column: quats_to_column, Unknown typechain: std::vector<Eigen::Quaterniond, Eigen::aligned_allocator<Eigen::Quaterniond> >
+
+Incorrect function in random_points_on_mesh: random_points_on_mesh, Empty typechain: int,Unknown typechain: Eigen::SparseMatrix<ScalarB> &
+
+Incorrect function in ray_box_intersect: ray_box_intersect, Unknown typechain: Eigen::AlignedBox<Scalar, 3> &,Unknown typechain: Scalar &,Unknown typechain: Scalar &,Unknown typechain: Scalar &,Unknown typechain: Scalar &
+
+Incorrect function in ray_mesh_intersect: ray_mesh_intersect, Unknown typechain: std::vector<igl::Hit> &
+
+Incorrect function in ray_mesh_intersect: ray_mesh_intersect, Unknown typechain: igl::Hit &
+
+Incorrect function in ray_sphere_intersect: ray_sphere_intersect, Unknown typechain: r_type,Unknown typechain: t_type &,Unknown typechain: t_type &
+
+Incorrect function in readPLY: readPLY, Unknown typechain: std::vector<std::vector<Vtype> > &,Unknown typechain: std::vector<std::vector<Ftype> > &,Unknown typechain: std::vector<std::vector<Ntype> > &,Unknown typechain: std::vector<std::vector<UVtype> > &
+
+Incorrect function in readSTL: readSTL, Unknown typechain: std::vector<std::vector<TypeV> > &,Unknown typechain: std::vector<std::vector<TypeF> > &,Unknown typechain: std::vector<std::vector<TypeN> > &
+
+Incorrect function in readTGF: readTGF, Unknown typechain: std::vector<std::vector<double> > &,Unknown typechain: std::vector<std::vector<int> > &,Unknown typechain: std::vector<int> &,Unknown typechain: std::vector<std::vector<int> > &,Unknown typechain: std::vector<std::vector<int> > &,Unknown typechain: std::vector<std::vector<int> > &
+
+Incorrect function in readTGF: readTGF, Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in remove_duplicate_vertices: remove_duplicate_vertices, Empty typechain: double
+
+Incorrect function in remove_duplicate_vertices: remove_duplicate_vertices, Empty typechain: double
+
+Incorrect function in remove_duplicates: remove_duplicates, Unknown typechain: Eigen::Matrix<typename DerivedF::Scalar, Eigen::Dynamic, 1> &,Unknown typechain: double
+
+Incorrect function in remove_unreferenced: remove_unreferenced, Unknown typechain: size_t
+
+Incorrect function in reorder: reorder, Unknown typechain: std::vector<T> &,Unknown typechain: std::vector<size_t> &,Unknown typechain: std::vector<T> &
+
+Incorrect function in repdiag: repdiag, Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &,Empty typechain: int,Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &
+
+Incorrect function in repdiag: repdiag, Unknown typechain: Mat &,Empty typechain: int
+
+Incorrect function in rgb_to_hsv: rgb_to_hsv, Unknown typechain: R *,Unknown typechain: H *
+
+Incorrect function in rotate_by_quat: rotate_by_quat, Unknown typechain: Q_type *,Unknown typechain: Q_type *,Unknown typechain: Q_type *
+
+Incorrect function in rotation_matrix_from_directions: rotation_matrix_from_directions, Unknown typechain: Eigen::Matrix<Scalar, 3, 1>,Unknown typechain: Eigen::Matrix<Scalar, 3, 1>
+
+Incorrect function in round: round, Unknown typechain: DerivedX
+
+Incorrect function in rows_to_matrix: rows_to_matrix, Unknown typechain: std::vector<Row> &,Unknown typechain: Mat &
+
+Incorrect function in signed_distance: signed_distance, Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in signed_distance: signed_distance_pseudonormal, Unknown typechain: AABB<Eigen::MatrixXd, 3> &,Unknown typechain: Eigen::VectorXi &,Unknown typechain: Eigen::RowVector3d &
+
+Incorrect function in signed_distance: signed_distance_pseudonormal, Unknown typechain: AABB<Eigen::MatrixXd, 3> &,Unknown typechain: Eigen::VectorXi &,Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in signed_distance: signed_distance_pseudonormal, Unknown typechain: AABB<Eigen::MatrixXd, 3> &,Unknown typechain: Eigen::VectorXi &,Unknown typechain: Eigen::RowVector3d &,Empty typechain: double &,Empty typechain: double &,Empty typechain: int &,Unknown typechain: Eigen::RowVector3d &,Unknown typechain: Eigen::RowVector3d &
+
+Incorrect function in signed_distance: signed_distance_pseudonormal, Unknown typechain: AABB<Eigen::MatrixXd, 2> &,Unknown typechain: Eigen::RowVector2d &,Empty typechain: double &,Empty typechain: double &,Empty typechain: int &,Unknown typechain: Eigen::RowVector2d &,Unknown typechain: Eigen::RowVector2d &
+
+Incorrect function in signed_distance: signed_distance_winding_number, Unknown typechain: AABB<Eigen::MatrixXd, 3> &,Unknown typechain: igl::WindingNumberAABB<Eigen::Vector3d> &,Unknown typechain: Eigen::RowVector3d &
+
+Incorrect function in slice: slice, Unknown typechain: Eigen::SparseMatrix<TX> &,Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &,Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &,Unknown typechain: Eigen::SparseMatrix<TY> &
+
+Incorrect function in slice: slice, Unknown typechain: MatX &,Empty typechain: int
+
+Incorrect function in slice: slice, Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &
+
+Incorrect function in slice: slice, Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &
+
+Incorrect function in slice: slice, Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &,Empty typechain: int
+
+Incorrect function in slice_into: slice_into, Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &,Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &
+
+Incorrect function in slice_into: slice_into, Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &,Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &
+
+Incorrect function in slice_into: slice_into, Unknown typechain: Mat &,Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &,Empty typechain: int,Unknown typechain: Mat &
+
+Incorrect function in slice_into: slice_into, Unknown typechain: Eigen::Matrix<int, Eigen::Dynamic, 1> &
+
+Incorrect function in slice_mask: slice_mask, Unknown typechain: Eigen::Array<bool, Eigen::Dynamic, 1> &,Unknown typechain: Eigen::Array<bool, Eigen::Dynamic, 1> &
+
+Incorrect function in slice_mask: slice_mask, Unknown typechain: Eigen::Array<bool, Eigen::Dynamic, 1> &,Empty typechain: int
+
+Incorrect function in slice_mask: slice_mask, Unknown typechain: Eigen::Array<bool, Eigen::Dynamic, 1> &,Unknown typechain: Eigen::Array<bool, Eigen::Dynamic, 1> &
+
+Incorrect function in slice_mask: slice_mask, Unknown typechain: Eigen::Array<bool, Eigen::Dynamic, 1> &,Empty typechain: int
+
+Incorrect function in slice_tets: slice_tets, Unknown typechain: Eigen::SparseMatrix<BCType> &
+
+Incorrect function in snap_to_canonical_view_quat: snap_to_canonical_view_quat, Unknown typechain: Q_type *,Unknown typechain: Q_type,Unknown typechain: Q_type *
+
+Incorrect function in snap_to_canonical_view_quat: snap_to_canonical_view_quat, Unknown typechain: Eigen::Quaternion<Scalarq> &,Empty typechain: double,Unknown typechain: Eigen::Quaternion<Scalars> &
+
+Incorrect function in snap_to_fixed_up: snap_to_fixed_up, Unknown typechain: Eigen::Quaternion<Qtype> &,Unknown typechain: Eigen::Quaternion<Qtype> &
+
+Incorrect function in sort: sort, Unknown typechain: std::vector<T> &,Empty typechain: bool,Unknown typechain: std::vector<T> &,Unknown typechain: std::vector<size_t> &
+
+Incorrect function in sparse: sparse, Unknown typechain: IndexVector &,Unknown typechain: IndexVector &,Unknown typechain: ValueVector &
+
+Incorrect function in sparse: sparse, Unknown typechain: IndexVector &,Unknown typechain: IndexVector &,Unknown typechain: ValueVector &,Unknown typechain: size_t,Unknown typechain: size_t
+
+Incorrect function in stdin_to_temp: stdin_to_temp, Unknown typechain: FILE **
+
+Incorrect function in svd3x3: svd3x3, Unknown typechain: Eigen::Matrix<T, 3, 3> &,Unknown typechain: Eigen::Matrix<T, 3, 3> &,Unknown typechain: Eigen::Matrix<T, 3, 1> &,Unknown typechain: Eigen::Matrix<T, 3, 3> &
+
+Incorrect function in svd3x3_avx: svd3x3_avx, Unknown typechain: Eigen::Matrix<T, 3 * 8, 3> &,Unknown typechain: Eigen::Matrix<T, 3 * 8, 3> &,Unknown typechain: Eigen::Matrix<T, 3 * 8, 1> &,Unknown typechain: Eigen::Matrix<T, 3 * 8, 3> &
+
+Incorrect function in svd3x3_sse: svd3x3_sse, Unknown typechain: Eigen::Matrix<T, 3 * 4, 3> &,Unknown typechain: Eigen::Matrix<T, 3 * 4, 3> &,Unknown typechain: Eigen::Matrix<T, 3 * 4, 1> &,Unknown typechain: Eigen::Matrix<T, 3 * 4, 3> &
+
+Incorrect function in trackball: trackball, Empty typechain: double,Empty typechain: double,Unknown typechain: Q_type,Empty typechain: double,Empty typechain: double,Empty typechain: double,Empty typechain: double,Unknown typechain: Q_type *
+
+Incorrect function in trackball: trackball, Empty typechain: double,Empty typechain: double,Unknown typechain: Q_type,Unknown typechain: Q_type *,Empty typechain: double,Empty typechain: double,Empty typechain: double,Empty typechain: double,Unknown typechain: Q_type *
+
+Incorrect function in trackball: trackball, Empty typechain: double,Empty typechain: double,Empty typechain: double,Unknown typechain: Eigen::Quaternion<Scalardown_quat> &,Empty typechain: double,Empty typechain: double,Empty typechain: double,Empty typechain: double,Unknown typechain: Eigen::Quaternion<Scalarquat> &
+
+Incorrect function in transpose_blocks: transpose_blocks, Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &,Unknown typechain: size_t,Unknown typechain: size_t,Unknown typechain: Eigen::Matrix<T, Eigen::Dynamic, Eigen::Dynamic> &
+
+Incorrect function in two_axis_valuator_fixed_up: two_axis_valuator_fixed_up, Empty typechain: int,Empty typechain: int,Empty typechain: double,Unknown typechain: Eigen::Quaternion<Scalardown_quat> &,Empty typechain: int,Empty typechain: int,Empty typechain: int,Empty typechain: int,Unknown typechain: Eigen::Quaternion<Scalarquat> &
+
+Incorrect function in uniformly_sample_two_manifold: uniformly_sample_two_manifold, Empty typechain: int,Empty typechain: double
+
+Incorrect function in uniformly_sample_two_manifold: uniformly_sample_two_manifold_at_vertices, Empty typechain: int,Empty typechain: double,Unknown typechain: Eigen::VectorXi &
+
+Incorrect function in unique: unique, Unknown typechain: std::vector<T> &,Unknown typechain: std::vector<T> &,Unknown typechain: std::vector<size_t> &,Unknown typechain: std::vector<size_t> &
+
+Incorrect function in unique: unique, Unknown typechain: std::vector<T> &,Unknown typechain: std::vector<T> &
+
+Incorrect function in unique_edge_map: unique_edge_map, Unknown typechain: std::vector<std::vector<uE2EType> > &
+
+Incorrect function in unproject: unproject, Unknown typechain: Eigen::Matrix<Scalar, 3, 1> &,Unknown typechain: Eigen::Matrix<Scalar, 4, 4> &,Unknown typechain: Eigen::Matrix<Scalar, 4, 4> &,Unknown typechain: Eigen::Matrix<Scalar, 4, 1> &
+
+Incorrect function in unproject_in_mesh: unproject_in_mesh, Unknown typechain: Eigen::Vector2f &,Unknown typechain: Eigen::Matrix4f &,Unknown typechain: Eigen::Matrix4f &,Unknown typechain: Eigen::Vector4f &,Unknown typechain: std::vector<igl::Hit> &
+
+Incorrect function in unproject_in_mesh: unproject_in_mesh, Unknown typechain: Eigen::Vector2f &,Unknown typechain: Eigen::Matrix4f &,Unknown typechain: Eigen::Matrix4f &,Unknown typechain: Eigen::Vector4f &,Unknown typechain: std::function<void (const Eigen::Vector3f &, const Eigen::Vector3f &, std::vector<igl::Hit> &)> &,Unknown typechain: std::vector<igl::Hit> &
+
+Incorrect function in unproject_in_mesh: unproject_in_mesh, Unknown typechain: Eigen::Vector2f &,Unknown typechain: Eigen::Matrix4f &,Unknown typechain: Eigen::Matrix4f &,Unknown typechain: Eigen::Vector4f &
+
+Incorrect function in unproject_onto_mesh: unproject_onto_mesh, Unknown typechain: Eigen::Vector2f &,Unknown typechain: Eigen::Matrix4f &,Unknown typechain: Eigen::Matrix4f &,Unknown typechain: Eigen::Vector4f &,Empty typechain: int &
+
+Incorrect function in unproject_onto_mesh: unproject_onto_mesh, Unknown typechain: Eigen::Vector2f &,Unknown typechain: Eigen::Matrix4f &,Unknown typechain: Eigen::Matrix4f &,Unknown typechain: Eigen::Vector4f &,Unknown typechain: std::function<bool (const Eigen::Vector3f &, const Eigen::Vector3f &, igl::Hit &)> &,Empty typechain: int &
+
+Incorrect function in unzip_corners: unzip_corners, Unknown typechain: std::vector<std::reference_wrapper<DerivedA> > &
+
+Incorrect function in upsample: upsample, Unknown typechain: MatV &,Unknown typechain: MatF &
+
+Incorrect function in verbose: verbose, Empty typechain: char *
+
+Incorrect function in verbose: verbose, Empty typechain: char *
+
+Incorrect function in volume: volume_single, Unknown typechain: VecA &,Unknown typechain: VecB &,Unknown typechain: VecC &,Unknown typechain: VecD &
+
+Incorrect function in winding_number: winding_number_3, Unknown typechain: Scalar *,Empty typechain: int,Unknown typechain: DerivedF *,Empty typechain: int,Unknown typechain: Scalar *,Empty typechain: int,Unknown typechain: Scalar *
+
+Incorrect function in winding_number: winding_number_2, Empty typechain: double *,Empty typechain: int,Unknown typechain: DerivedF *,Empty typechain: int,Empty typechain: double *,Empty typechain: int,Empty typechain: double *
+
+Incorrect function in writeDMAT: writeDMAT, Unknown typechain: Mat &,Unknown typechain: bool
+
+Incorrect function in writeDMAT: writeDMAT, Unknown typechain: std::vector<std::vector<Scalar> >
+
+Incorrect function in writeDMAT: writeDMAT, Unknown typechain: std::vector<Scalar>
+
+Incorrect function in writePLY: writePLY, Unknown typechain: bool
+
+Incorrect function in writePLY: writePLY, Unknown typechain: bool
+
+Incorrect function in writeSTL: writeSTL, Unknown typechain: bool
+
+Incorrect function in writeSTL: writeSTL, Unknown typechain: bool
+
+Incorrect function in writeTGF: writeTGF, Unknown typechain: std::vector<std::vector<double> > &,Unknown typechain: std::vector<std::vector<int> > &
+
+Incorrect function in write_triangle_mesh: write_triangle_mesh, Unknown typechain: bool
+
+Incorrect function in xml_write_triangle_mesh: write_triangle_mesh, Unknown typechain: bool
+
+
+
+missing: 45 
+No cpp source file for function ARAPEnergyType found.
+No cpp source file for function C_STR found.
+No cpp source file for function Camera found.
+No cpp source file for function ConjugateFFSolverData found.
+No cpp source file for function HalfEdgeIterator found.
+No cpp source file for function Hit found.
+No cpp source file for function IndexComparison found.
+No cpp source file for function MeshBooleanType found.
+No cpp source file for function NormalType found.
+No cpp source file for function ONE found.
+No cpp source file for function PI found.
+No cpp source file for function REDRUM found.
+No cpp source file for function STR found.
+No cpp source file for function SolverStatus found.
+No cpp source file for function SortableRow found.
+No cpp source file for function Timer found.
+No cpp source file for function Viewport found.
+No cpp source file for function WindingNumberAABB found.
+No cpp source file for function WindingNumberMethod found.
+No cpp source file for function WindingNumberTree found.
+No cpp source file for function ZERO found.
+No cpp source file for function copyleft_cgal_BinaryWindingNumberOperations found.
+No cpp source file for function copyleft_cgal_CSGTree found.
+No cpp source file for function copyleft_cgal_RemeshSelfIntersectionsParam found.
+No cpp source file for function copyleft_cgal_SelfIntersectMesh found.
+No cpp source file for function copyleft_marching_cubes_tables found.
+No cpp source file for function deprecated found.
+No cpp source file for function embree_EmbreeIntersector found.
+No cpp source file for function embree_Embree_convenience found.
+No cpp source file for function igl_inline found.
+No cpp source file for function material_colors found.
+No cpp source file for function matlab_MatlabWorkspace found.
+No cpp source file for function matlab_MexStream found.
+No cpp source file for function opengl2_MouseController found.
+No cpp source file for function opengl2_RotateWidget found.
+No cpp source file for function opengl2_TranslateWidget found.
+No cpp source file for function opengl2_flare_textures found.
+No cpp source file for function opengl2_shine_textures found.
+No cpp source file for function opengl_OpenGL_convenience found.
+No cpp source file for function ply found.
+No cpp source file for function serialize found.
+No cpp source file for function verbose found.
+No cpp source file for function viewer_ViewerPlugin found.
+No cpp source file for function xml_ReAntTweakBarXMLSerialization found.
+No cpp source file for function xml_XMLSerializable found.
+
+
+others: 48 
+Function AABB contains classes/structs in cpp header. Skipping
+Function Camera contains classes/structs in cpp header. Skipping
+Function ConjugateFFSolverData contains classes/structs in cpp header. Skipping
+Function HalfEdgeIterator contains classes/structs in cpp header. Skipping
+Function Hit contains classes/structs in cpp header. Skipping
+Function IndexComparison contains classes/structs in cpp header. Skipping
+Function SortableRow contains classes/structs in cpp header. Skipping
+Function Timer contains classes/structs in cpp header. Skipping
+Function Viewport contains classes/structs in cpp header. Skipping
+Function WindingNumberAABB contains classes/structs in cpp header. Skipping
+Function WindingNumberTree contains classes/structs in cpp header. Skipping
+Function active_set contains classes/structs in cpp header. Skipping
+Function angle_bound_frame_fields contains classes/structs in cpp header. Skipping
+Function anttweakbar_ReAntTweakBar contains classes/structs in cpp header. Skipping
+Function arap contains classes/structs in cpp header. Skipping
+Function arap_dof contains classes/structs in cpp header. Skipping
+Function bbw_bbw contains classes/structs in cpp header. Skipping
+Function conjugate_frame_fields contains classes/structs in cpp header. Skipping
+Function copyleft_cgal_BinaryWindingNumberOperations contains classes/structs in cpp header. Skipping
+Function copyleft_cgal_CSGTree contains classes/structs in cpp header. Skipping
+Function copyleft_cgal_RemeshSelfIntersectionsParam contains classes/structs in cpp header. Skipping
+Function copyleft_cgal_SelfIntersectMesh contains classes/structs in cpp header. Skipping
+Function copyleft_tetgen_cdt contains classes/structs in cpp header. Skipping
+Function embree_EmbreeIntersector contains classes/structs in cpp header. Skipping
+Function embree_ambient_occlusion contains classes/structs in cpp header. Skipping
+Function embree_unproject_in_mesh contains classes/structs in cpp header. Skipping
+Function embree_unproject_onto_mesh contains classes/structs in cpp header. Skipping
+Function integrable_polyvector_fields contains classes/structs in cpp header. Skipping
+Function matlab_MatlabWorkspace contains classes/structs in cpp header. Skipping
+Function matlab_MexStream contains classes/structs in cpp header. Skipping
+Function min_quad_with_fixed contains classes/structs in cpp header. Skipping
+Function mosek_mosek_quadprog contains classes/structs in cpp header. Skipping
+Function opengl2_MouseController contains classes/structs in cpp header. Skipping
+Function opengl2_RotateWidget contains classes/structs in cpp header. Skipping
+Function opengl2_TranslateWidget contains classes/structs in cpp header. Skipping
+Function opengl2_lens_flare contains classes/structs in cpp header. Skipping
+Function opengl_tga contains classes/structs in cpp header. Skipping
+Function ply contains classes/structs in cpp header. Skipping
+Function serialize contains classes/structs in cpp header. Skipping
+Function viewer_OpenGL_shader contains classes/structs in cpp header. Skipping
+Function viewer_OpenGL_state contains classes/structs in cpp header. Skipping
+Function viewer_Viewer contains classes/structs in cpp header. Skipping
+Function viewer_ViewerCore contains classes/structs in cpp header. Skipping
+Function viewer_ViewerData contains classes/structs in cpp header. Skipping
+Function viewer_ViewerPlugin contains classes/structs in cpp header. Skipping
+Function xml_ReAntTweakBarXMLSerialization contains classes/structs in cpp header. Skipping
+Function xml_XMLSerializable contains classes/structs in cpp header. Skipping
+Function xml_serialize_xml contains classes/structs in cpp header. Skipping
+
+
+render: 0 
+
+
+
+various: 22 
+Function without pars in EPS: EPS, 
+
+Function without pars in EPS: EPS_SQ, 
+
+Function without pars in EPS: EPS, 
+
+Function without pars in EPS: EPS, 
+
+Function without pars in EPS: EPS_SQ, 
+
+Function without pars in EPS: EPS_SQ, 
+
+Function without pars in barycentric_to_global: barycentric_to_global, 
+
+Function without pars in dot_row: dot_row, 
+
+Function without pars in embree_line_mesh_intersection: line_mesh_intersection, 
+
+Function without pars in file_dialog_open: file_dialog_open, 
+
+Function without pars in file_dialog_save: file_dialog_save, 
+
+Function without pars in get_seconds: get_seconds, 
+
+Function without pars in get_seconds_hires: get_seconds_hires, 
+
+Function without pars in matlab_format: matlab_format, 
+
+Function without pars in mosek_mosek_guarded: mosek_guarded, 
+
+Function without pars in opengl2_draw_beach_ball: draw_beach_ball, 
+
+Function without pars in opengl2_draw_floor: draw_floor, 
+
+Function without pars in opengl2_draw_floor: draw_floor_outline, 
+
+Function without pars in opengl_report_gl_error: report_gl_error, 
+
+Function without pars in path_to_executable: path_to_executable, 
+
+Function without pars in random_dir: random_dir, 
+
+Function without pars in random_quaternion: random_quaternion, 
+
+
+

+ 470 - 0
python/scripts/files.txt

@@ -0,0 +1,470 @@
+complete: 135 
+ARAPEnergyType
+MeshBooleanType
+NormalType
+SolverStatus
+WindingNumberMethod
+adjacency_matrix
+all_edges
+anttweakbar_cocoa_key_to_anttweakbar_key
+average_onto_vertices
+avg_edge_length
+barycenter
+barycentric_coordinates
+basename
+bone_parents
+bounding_box
+bounding_box_diagonal
+canonical_quaternions
+ceil
+columnize
+comb_cross_field
+comb_frame_field
+comb_line_field
+compute_frame_field_bisectors
+copyleft_cgal_component_inside_component
+copyleft_cgal_intersect_with_half_space
+copyleft_cgal_outer_hull
+copyleft_cgal_peel_outer_hull_layers
+copyleft_cgal_peel_winding_number_layers
+copyleft_cgal_piecewise_constant_winding_number
+copyleft_cgal_points_inside_component
+copyleft_quadprog
+cotmatrix
+cotmatrix_entries
+cross_field_missmatch
+cumsum
+cut_mesh_from_singularities
+dated_copy
+diag
+dihedral_angles
+directed_edge_parents
+dirname
+doublearea
+edge_lengths
+edge_topology
+edges
+embree_reorient_facets_raycast
+exterior_edges
+face_areas
+false_barycentric_subdivision
+field_local_global_conversions
+file_contents_as_string
+file_exists
+floor
+frame_to_cross_field
+gaussian_curvature
+harmonic
+internal_angles
+invert_diag
+is_border_vertex
+is_boundary_edge
+is_edge_manifold
+is_irregular_vertex
+is_planar
+is_sparse
+is_vertex_manifold
+launch_medit
+line_field_missmatch
+linprog
+local_basis
+look_at
+massmatrix
+mod
+mvc
+nchoosek
+next_filename
+normal_derivative
+normalize_row_lengths
+normalize_row_sums
+null
+opengl2_draw_rectangular_marquee
+opengl2_model_proj_viewport
+opengl2_sort_triangles
+opengl_render_to_tga
+opengl_report_gl_error
+orient_outward
+orth
+parallel_transport_angles
+pathinfo
+per_edge_normals
+per_face_normals
+per_vertex_attribute_smoothing
+per_vertex_normals
+point_mesh_squared_distance
+polar_dec
+polar_svd
+polygon_mesh_to_triangle_mesh
+polyvector_field_comb_from_matchings_and_cuts
+polyvector_field_matchings
+polyvector_field_poisson_reconstruction
+project_isometrically_to_plane
+project_to_line_segment
+quad_planarity
+random_dir
+randperm
+readBF
+readDMAT
+readMESH
+readNODE
+readOBJ
+readOFF
+readWRL
+read_triangle_mesh
+repmat
+resolve_duplicated_faces
+rotate_vectors
+sample_edges
+setdiff
+snap_points
+sort_angles
+sort_triangles
+sort_vectors_ccw
+sortrows
+speye
+sum
+triangle_fan
+triangles_from_strip
+unique_simplices
+unproject_ray
+vector_area_matrix
+writeBF
+writeMESH
+writeOBJ
+writeOFF
+writeWRL
+xml_writeDAE
+
+
+empty: 10 
+C_STR
+REDRUM
+STR
+copyleft_marching_cubes_tables
+deprecated
+embree_Embree_convenience
+igl_inline
+opengl_OpenGL_convenience
+viewer_TextRenderer
+viewer_TextRenderer_fonts
+
+
+errors: 203 
+EPS
+ONE
+PI
+ZERO
+all_pairs_distances
+angular_distance
+any_of
+arap_linear_block
+arap_rhs
+average_onto_faces
+axis_angle_to_quat
+barycentric_to_global
+bfs_orient
+biharmonic_coordinates
+boundary_conditions
+circulation
+collapse_edge
+collapse_small_triangles
+colon
+column_to_quats
+copyleft_cgal_assign_scalar
+copyleft_cgal_cell_adjacency
+copyleft_cgal_closest_facet
+copyleft_cgal_complex_to_mesh
+copyleft_cgal_half_space_box
+copyleft_cgal_mesh_boolean_type_to_funcs
+copyleft_cgal_mesh_to_cgal_triangle_list
+copyleft_cgal_mesh_to_polyhedron
+copyleft_cgal_order_facets_around_edge
+copyleft_cgal_order_facets_around_edges
+copyleft_cgal_outer_element
+copyleft_cgal_outer_facet
+copyleft_cgal_point_mesh_squared_distance
+copyleft_cgal_polyhedron_to_mesh
+copyleft_cgal_projected_delaunay
+copyleft_cgal_relabel_small_immersed_cells
+copyleft_cgal_remesh_intersections
+copyleft_cgal_remesh_self_intersections
+copyleft_cgal_signed_distance_isosurface
+copyleft_cgal_submesh_aabb_tree
+copyleft_comiso_frame_field
+copyleft_comiso_miq
+copyleft_comiso_nrosy
+copyleft_cork_from_cork_mesh
+copyleft_cork_mesh_boolean
+copyleft_cork_to_cork_mesh
+copyleft_marching_cubes
+copyleft_progressive_hulls
+copyleft_progressive_hulls_cost_and_placement
+copyleft_tetgen_mesh_to_tetgenio
+copyleft_tetgen_mesh_with_skeleton
+copyleft_tetgen_read_into_tetgenio
+copyleft_tetgen_tetgenio_to_tetmesh
+covariance_scatter_matrix
+crouzeix_raviart_massmatrix
+decimate
+dijkstra
+directed_edge_orientations
+dot
+dot_row
+dqs
+edge_collapse_is_valid
+edge_flaps
+eigs
+embree_bone_heat
+embree_bone_visible
+embree_line_mesh_intersection
+example_fun
+extract_manifold_patches
+extract_non_manifold_edge_curves
+face_occurrences
+faces_first
+file_dialog_open
+file_dialog_save
+fit_plane
+forward_kinematics
+frame_field_deformer
+frustum
+get_seconds
+get_seconds_hires
+grad
+group_sum_matrix
+harwell_boeing
+hausdorff
+in_element
+intersect
+is_dir
+is_file
+is_readable
+is_writable
+lim_lim
+limit_faces
+line_segment_in_rectangle
+list_to_matrix
+lscm
+map_vertices_to_circle
+mat_max
+mat_min
+mat_to_quat
+material_colors
+matlab_matlabinterface
+matlab_mexErrMsgTxt
+matlab_parse_rhs
+matlab_prepare_lhs
+matlab_requires_arg
+matlab_validate_arg
+max_faces_stopping_condition
+max_size
+median
+min_quad_dense
+min_size
+mode
+mosek_mosek_guarded
+mosek_mosek_linprog
+n_polyvector
+n_polyvector_general
+normalize_quat
+opengl2_draw_beach_ball
+opengl2_draw_floor
+opengl2_draw_point
+opengl2_flare_textures
+opengl2_print_gl_get
+opengl2_right_axis
+opengl2_shine_textures
+opengl2_up_axis
+opengl_compile_and_link_program
+opengl_compile_shader
+opengl_create_index_vbo
+opengl_create_mesh_vbo
+opengl_create_shader_program
+opengl_create_vector_vbo
+opengl_destroy_shader_program
+opengl_gl_type_size
+opengl_init_render_to_texture
+opengl_load_shader
+opengl_print_program_info_log
+opengl_print_shader_info_log
+opengl_texture_from_tga
+opengl_uniform_type_to_string
+orientable_patches
+ortho
+outer_element
+partition
+path_to_executable
+per_corner_normals
+planarize_quad_mesh
+png_render_to_png
+png_render_to_png_async
+png_texture_from_file
+png_texture_from_png
+point_in_circle
+point_in_poly
+point_simplex_squared_distance
+polar_svd3x3
+polyroots
+principal_curvature
+print_ijv
+print_vector
+project
+pseudonormal_test
+quat_conjugate
+quat_mult
+quat_to_axis_angle
+quat_to_mat
+quats_to_column
+random_quaternion
+ray_box_intersect
+ray_mesh_intersect
+ray_sphere_intersect
+readCSV
+remove_duplicate_vertices
+remove_duplicates
+reorder
+rotate_by_quat
+rotation_matrix_from_directions
+rows_to_matrix
+signed_distance
+slice_into
+slice_mask
+slice_tets
+snap_to_canonical_view_quat
+snap_to_fixed_up
+stdin_to_temp
+svd3x3
+svd3x3_avx
+svd3x3_sse
+trackball
+transpose_blocks
+triangle_triangle_adjacency
+triangle_triangulate
+two_axis_valuator_fixed_up
+uniformly_sample_two_manifold
+unique_edge_map
+unproject_in_mesh
+unproject_onto_mesh
+unzip_corners
+verbose
+vertex_triangle_adjacency
+writeDMAT
+writePLY
+writeSTL
+write_triangle_mesh
+xml_write_triangle_mesh
+
+
+others: 48 
+AABB
+Camera
+ConjugateFFSolverData
+HalfEdgeIterator
+Hit
+IndexComparison
+SortableRow
+Timer
+Viewport
+WindingNumberAABB
+WindingNumberTree
+active_set
+angle_bound_frame_fields
+anttweakbar_ReAntTweakBar
+arap
+arap_dof
+bbw_bbw
+conjugate_frame_fields
+copyleft_cgal_BinaryWindingNumberOperations
+copyleft_cgal_CSGTree
+copyleft_cgal_RemeshSelfIntersectionsParam
+copyleft_cgal_SelfIntersectMesh
+copyleft_tetgen_cdt
+embree_EmbreeIntersector
+embree_ambient_occlusion
+embree_unproject_in_mesh
+embree_unproject_onto_mesh
+integrable_polyvector_fields
+matlab_MatlabWorkspace
+matlab_MexStream
+min_quad_with_fixed
+mosek_mosek_quadprog
+opengl2_MouseController
+opengl2_RotateWidget
+opengl2_TranslateWidget
+opengl2_lens_flare
+opengl_tga
+ply
+serialize
+viewer_OpenGL_shader
+viewer_OpenGL_state
+viewer_Viewer
+viewer_ViewerCore
+viewer_ViewerData
+viewer_ViewerPlugin
+xml_ReAntTweakBarXMLSerialization
+xml_XMLSerializable
+xml_serialize_xml
+
+
+partial: 59 
+adjacency_list
+ambient_occlusion
+boundary_facets
+boundary_loop
+cat
+centroid
+components
+copyleft_cgal_extract_cells
+copyleft_cgal_intersect_other
+copyleft_cgal_mesh_boolean
+copyleft_cgal_minkowski_sum
+copyleft_cgal_propagate_winding_numbers
+copyleft_cgal_string_to_mesh_boolean_type
+copyleft_tetgen_tetrahedralize
+cross
+cut_mesh
+deform_skeleton
+facet_components
+find
+find_cross_field_singularities
+fit_rotations
+histc
+hsv_to_rgb
+is_symmetric
+jet
+lbs_matrix
+matlab_format
+matrix_to_list
+on_boundary
+opengl2_draw_mesh
+opengl2_draw_skeleton_3d
+opengl2_draw_skeleton_vector_graphics
+opengl2_project
+opengl2_unproject
+opengl2_unproject_to_zero_plane
+opengl2_view_axis
+parula
+piecewise_constant_winding_number
+polyvector_field_cut_mesh_with_singularities
+polyvector_field_singularities_from_matchings
+procrustes
+project_to_line
+random_points_on_mesh
+readPLY
+readSTL
+readTGF
+remove_unreferenced
+repdiag
+rgb_to_hsv
+round
+slice
+sort
+sparse
+unique
+unproject
+upsample
+volume
+winding_number
+writeTGF
+
+

+ 298 - 0
python/scripts/generate_bindings.py

@@ -0,0 +1,298 @@
+#!/usr/bin/env python3
+#
+#  Syntax: generate_docstrings.py <path_to_c++_header_files> <path_to_python_files>
+#
+#  Extract documentation from C++ header files to use it in libiglPython bindings
+#
+
+import os, sys, glob
+import pickle
+
+import shutil
+from joblib import Parallel, delayed
+from multiprocessing import cpu_count
+from mako.template import Template
+from parser import parse
+
+
+# http://stackoverflow.com/questions/3207219/how-to-list-all-files-of-a-directory-in-python
+def get_filepaths(directory):
+    """
+    This function will generate the file names in a directory
+    tree by walking the tree either top-down or bottom-up. For each
+    directory in the tree rooted at directory top (including top itself),
+    it yields a 3-tuple (dirpath, dirnames, filenames).
+    """
+    file_paths = []  # List which will store all of the full filepaths.
+
+    # Walk the tree.
+    for root, directories, files in os.walk(directory):
+        for filename in files:
+            # Join the two strings in order to form the full filepath.
+            filepath = os.path.join(root, filename)
+            file_paths.append(filepath)  # Add it to the list.
+
+    return file_paths  # Self-explanatory.
+
+
+def get_name_from_path(path, basepath, prefix, postfix):
+    f_clean = path[len(basepath):]
+    f_clean = f_clean.replace(basepath, "")
+    f_clean = f_clean.replace(postfix, "")
+    f_clean = f_clean.replace(prefix, "")
+    f_clean = f_clean.replace("/", "_")
+    f_clean = f_clean.replace("\\", "_")
+    f_clean = f_clean.replace(" ", "_")
+    f_clean = f_clean.replace(".", "_")
+    return f_clean
+
+
+def map_parameter_types(name, cpp_type, parsed_types, errors, enum_types):
+    # TODO Replace with proper regex matching and derive types from templates, comment parsing, names in cpp files
+    # CAUTION: This is work in progress mapping code to get a grip of the problem
+    # Types to map
+    #    const int dim -> const int& dim ?
+    result = []
+
+    if cpp_type.startswith("const"):
+        result.append("const ")
+        cpp_type = cpp_type[6:]  # Strip const part
+
+    # Handle special types
+    skip_parsing = False
+    if cpp_type.startswith("MatY"):
+        result.append("Eigen::SparseMatrix<double>&")
+        skip_parsing = True
+    if cpp_type == "std::vector<std::vector<Scalar> > &":
+        result.append("std::vector<std::vector<double> > &")
+        skip_parsing = True
+    if cpp_type == "std::vector<std::vector<Index> > &":
+        result.append("std::vector<std::vector<int> > &")
+        skip_parsing = True
+    for constant in enum_types:
+        if cpp_type.endswith(constant):
+            result.append(cpp_type)
+            skip_parsing = True
+
+    if len(parsed_types) == 0:
+        errors.append("Empty typechain: %s" % cpp_type)
+        if cpp_type == "int" or cpp_type == "bool":
+            return cpp_type, True
+        else:
+            return cpp_type, False
+
+    # print(parsed_types, cpp_type)
+    if not skip_parsing:
+        for i, t in enumerate(parsed_types):
+
+            if t == "Eigen":
+                result.append("Eigen::")
+                continue
+            if t == "std":
+                result.append("std::")
+                continue
+
+            if t == "PlainObjectBase" or t == "MatrixBase":
+                if name == "F":
+                    result.append("MatrixXi&")
+                elif name == "V":
+                    result.append("MatrixXd&")
+                else:
+                    result.append("MatrixXd&")
+                break
+            if t == "MatrixXi":
+                result.append("MatrixXi&")
+                break
+            if t == "MatrixXd" or t == "VectorXd":
+                result.append("MatrixXd&")
+                break
+            if t == "SparseMatrix" and len(parsed_types) >= i + 2 and (
+                    parsed_types[i + 1] == "Scalar" or parsed_types[i + 1] == "T"):
+                result.append("SparseMatrix<double>&")
+                break
+            if t == "SparseVector" and len(parsed_types) >= i + 2 and (parsed_types[i + 1] == "Scalar" or parsed_types[
+                    i + 1] == "T"):
+                result.append("SparseMatrix<double>&")
+                break
+
+            if t == "bool" or t == "int" or t == "double" or t == "unsigned" or t == "string":
+                if cpp_type.endswith("&"):
+                    result.append(t + " &")
+                else:
+                    result.append(t)
+                break
+
+            else:
+                errors.append("Unknown typechain: %s" % cpp_type)
+                return cpp_type, False
+
+
+    return "".join(result), True
+
+
+if __name__ == '__main__':
+
+    if len(sys.argv) != 2:
+        print('Syntax: %s <path_to_c++_files>' % sys.argv[0])
+        exit(-1)
+
+    errors = {"missing": [], "empty": [], "others": [], "incorrect": [], "render": [], "various": []}
+    files = {"complete": [], "partial": [], "errors": [], "others": [], "empty": []}
+
+    # List all files in the given folder and subfolders
+    cpp_base_path = sys.argv[1]
+    cpp_file_paths = get_filepaths(cpp_base_path)
+
+    # Add all the .h filepaths to a dict
+    print("Collecting cpp files for parsing...")
+    mapping = {}
+    cppmapping = {}
+    for f in cpp_file_paths:
+        if f.endswith(".h"):
+            name = get_name_from_path(f, cpp_base_path, "", ".h")
+            mapping[name] = f
+
+        if f.endswith(".cpp"):
+            name = get_name_from_path(f, cpp_base_path, "", ".cpp")
+            cppmapping[name] = f
+
+    # Add all python binding files to a list
+    implemented_names = list(mapping.keys())  # ["point_mesh_squared_distance"]
+    implemented_names.sort()
+    single_postfix = ""
+    single_prefix = ""
+
+    # Create a list of all cpp header files
+    files_to_parse = []
+    cppfiles_to_parse = []
+    for n in implemented_names:
+        files_to_parse.append(mapping[n])
+
+        if n not in cppmapping:
+            errors["missing"].append("No cpp source file for function %s found." % n)
+        else:
+            cppfiles_to_parse.append(cppmapping[n])
+
+    # Parse c++ header files
+    print("Parsing header files...")
+    load_headers = False
+    if load_headers:
+        with open("headers.dat", 'rb') as fs:
+            dicts = pickle.load(fs)
+    else:
+        job_count = cpu_count()
+        dicts = Parallel(n_jobs=job_count)(delayed(parse)(path) for path in files_to_parse)
+
+    if not load_headers:
+        print("Saving parsed header files...")
+        with open("headers.dat", 'wb') as fs:
+            pickle.dump(dicts, fs)
+
+    # Not yet needed, as explicit template parsing does not seem to be supported in clang
+    # Parse c++ source files
+    # cppdicts = Parallel(n_jobs=job_count)(delayed(parse)(path) for path in cppfiles_to_parse)
+
+    # Change directory to become independent of execution directory
+    print("Generating directory tree for binding files...")
+    path = os.path.dirname(__file__)
+    if path != "":
+        os.chdir(path)
+    shutil.rmtree("generated")
+    os.makedirs("generated/complete")
+    os.mkdir("generated/partial")
+
+    print("Generating and writing binding files...")
+    for idx, n in enumerate(implemented_names):
+        d = dicts[idx]
+        contained_elements = sum(map(lambda x: len(x), d.values()))
+
+        # Skip files that don't contain functions/enums/classes
+        if contained_elements == 0:
+            errors["empty"].append("Function %s contains no parseable content in cpp header. Something might be wrong." % n)
+            files["empty"].append(n)
+            continue
+
+        # Add functions with classes to others
+        if len(d["classes"]) != 0 or len(d["structs"]) != 0:
+            errors["others"].append("Function %s contains classes/structs in cpp header. Skipping" % n)
+            files["others"].append(n)
+            continue
+
+        # Work on files that contain only functions/enums and namespaces
+        if len(d["functions"]) + len(d["namespaces"]) + len(d["enums"]) == contained_elements:
+            correct_functions = []
+            incorrect_functions = []
+
+            # Collect enums to generate binding files
+            enums = []
+            enum_types = []
+            for e in d["enums"]:
+                enums.append({"name": e.name, "namespaces": d["namespaces"], "constants": e.constants})
+                enum_types.append(e.name)
+
+            # Collect functions to generate binding files
+            for f in d["functions"]:
+                parameters = []
+                correct_function = True
+                f_errors = []
+                for p in f.parameters:
+                    typ, correct = map_parameter_types(p[0], p[1], p[2], f_errors, enum_types)
+                    correct_function &= correct
+                    parameters.append({"name": p[0], "type": typ})
+
+                if correct_function and len(parameters) > 0: #TODO add constants like EPS
+                    correct_functions.append({"parameters": parameters, "namespaces": d["namespaces"], "name": f.name})
+                elif len(parameters) > 0:
+                    incorrect_functions.append({"parameters": parameters, "namespaces": d["namespaces"], "name": f.name})
+                    errors["incorrect"].append("Incorrect function in %s: %s, %s\n" % (n, f.name, ",".join(f_errors)))
+                else:
+                    errors["various"].append("Function without pars in %s: %s, %s\n" % (n, f.name, ","
+                                                                                                     "".join(f_errors)))
+
+            # Write binding files
+            try:
+                tpl = Template(filename='basic_function.mako')
+                rendered = tpl.render(functions=correct_functions, enums=enums)
+                tpl1 = Template(filename='basic_function.mako')
+                rendered1 = tpl.render(functions=incorrect_functions, enums=enums)
+                path = "generated/"
+                if len(incorrect_functions) == 0 and (len(correct_functions) != 0 or len(enums) != 0):
+                    path += "complete/"
+                    with open(path + single_prefix + "py_" + n + ".cpp", 'w') as fs:
+                        fs.write(rendered)
+                    files["complete"].append(n)
+                else:
+                    path += "partial/"
+                    with open(path + single_prefix + "py_" + n + ".cpp", 'w') as fs:
+                        fs.write("// COMPLETE BINDINGS ========================\n")
+                        fs.write(rendered)
+                        fs.write("\n\n\n\n// INCOMPLETE BINDINGS ========================\n")
+                        fs.write(rendered1)
+
+                    if len(correct_functions) != 0:
+                        files["partial"].append(n)
+                    else:
+                        files["errors"].append(n)
+
+            except Exception as e:
+                files["errors"].append(n)
+                errors["render"].append("Template rendering failed:" + n + " " + str(correct_functions) + ", incorrect "
+                                                                                                "functions are " + str(
+                    incorrect_functions) + str(e) + "\n")
+
+    print("Writing error and overview files...")
+    with open("errors.txt" + single_postfix, 'w') as fs:
+        l = list(errors.keys())
+        l.sort()
+        for k in l:
+            fs.write("%s: %i \n" %(k, len(errors[k])))
+            fs.writelines("\n".join(errors[k]))
+            fs.write("\n\n\n")
+
+    with open("files.txt" + single_postfix, 'w') as fs:
+        l = list(files.keys())
+        l.sort()
+        for k in l:
+            fs.write("%s: %i \n" %(k, len(files[k])))
+            fs.writelines("\n".join(files[k]))
+            fs.write("\n\n\n")

+ 4 - 4
python/scripts/generate_docstrings.py

@@ -87,16 +87,16 @@ if __name__ == '__main__':
     cpplines = []
 
     for idx, n in enumerate(implemented_names):
-        dict = dicts[idx]
-        contained_elements = sum(map(lambda x: len(x), dict.values()))
+        d = dicts[idx]
+        contained_elements = sum(map(lambda x: len(x), d.values()))
         # Check for files that don't contain functions/enums/classes
         if contained_elements == 0:
             print("Function %s contains no parseable content in cpp header. Something might be wrong." % n)
             continue
         else:
             names = []
-            namespaces = "_".join(dict["namespaces"])  # Assumption that all entities lie in deepest namespace
-            for f in dict["functions"]:
+            namespaces = "_".join(d["namespaces"])  # Assumption that all entities lie in deepest namespace
+            for f in d["functions"]:
                 h_string = "extern const char *__doc_" + namespaces + "_" + f.name + ";\n"
                 docu_string = "See " + f.name + " for the documentation."
                 if f.documentation != "":

+ 50 - 39
python/scripts/parser.py

@@ -3,10 +3,16 @@ import os
 from threading import Thread
 
 import clang.cindex
+import ccsyspath
 import itertools
 from mako.template import Template
 
 
+
+
+
+
+
 def get_annotations(node):
     return [c.displayname for c in node.get_children()
             if c.kind == clang.cindex.CursorKind.ANNOTATE_ATTR]
@@ -17,33 +23,33 @@ class Function(object):
         self.name = cursor.spelling
         self.annotations = get_annotations(cursor)
         self.access = cursor.access_specifier
-        #        template_pars = [c.extent for c in cursor.get_children() if c.kind == clang.cindex.CursorKind.TEMPLATE_TYPE_PARAMETER]
-        #        parameter_dec = [c for c in cursor.get_children() if c.kind == clang.cindex.CursorKind.PARM_DECL]
-        #        print(parameter_dec, template_pars)
-        #        print(cursor.get_num_template_arguments(), cursor.get_template_argument_type(0), cursor.get_template_argument_value(0), template_pars, parameter_dec)
-        self.parameters = []
-        self.parnames = []
+#        template_pars = [c.extent for c in cursor.get_children() if c.kind == clang.cindex.CursorKind.TEMPLATE_TYPE_PARAMETER]
+        parameter_dec = [c for c in cursor.get_children() if c.kind == clang.cindex.CursorKind.PARM_DECL]
+        
+        parameters = []
+        for p in parameter_dec:
+            children = []
+            for c in p.get_children():
+#                print(c.spelling)
+                children.append(c.spelling)
+            parameters.append((p.spelling, p.type.spelling, children))
+
+        self.parameters = parameters
         self.documentation = cursor.raw_comment
 
 
 class Enum(object):
     def __init__(self, cursor):
         self.name = cursor.spelling
-        self.annotations = get_annotations(cursor)
-        self.access = cursor.access_specifier
-        #        template_pars = [c.extent for c in cursor.get_children() if c.kind == clang.cindex.CursorKind.TEMPLATE_TYPE_PARAMETER]
-        #        parameter_dec = [c for c in cursor.get_children() if c.kind == clang.cindex.CursorKind.PARM_DECL]
-        #        print(parameter_dec, template_pars)
-        #        print(cursor.get_num_template_arguments(), cursor.get_template_argument_type(0), cursor.get_template_argument_value(0), template_pars, parameter_dec)
-        self.parameters = []
-        self.parnames = []
+        self.constants = [c.spelling for c in cursor.get_children() if c.kind ==
+                       clang.cindex.CursorKind.ENUM_CONSTANT_DECL]
         self.documentation = cursor.raw_comment
 
-# class Class(object):
-#    def __init__(self, cursor):
-#        self.name = cursor.spelling
+class Class(object):
+    def __init__(self, cursor):
+        self.name = cursor.spelling
 #        self.functions = []
-#        self.annotations = get_annotations(cursor)
+        self.annotations = get_annotations(cursor)
 
 #        for c in cursor.get_children():
 #            if (c.kind == clang.cindex.CursorKind.CXX_METHOD and
@@ -51,19 +57,16 @@ class Enum(object):
 #                f = Function(c)
 #                self.functions.append(f)
 
-def find_namespace_node(c):
-    if (c.kind == clang.cindex.CursorKind.NAMESPACE and c.spelling == "igl"):
-        return c
-    else:
-        for child_node in c.get_children():
-            return find_namespace_node(child_node)
 
 
 def traverse(c, path, objects):
     if c.location.file and not c.location.file.name.endswith(path):
         return
 
-    # print(c.kind, c.spelling)
+    if c.spelling == "PARULA_COLOR_MAP": # Fix to prevent python stack overflow from infinite recursion
+        return
+
+#    print(c.kind, c.spelling)
 
 
     if c.kind == clang.cindex.CursorKind.TRANSLATION_UNIT or c.kind == clang.cindex.CursorKind.UNEXPOSED_DECL:
@@ -76,7 +79,7 @@ def traverse(c, path, objects):
         pass
 
     elif c.kind == clang.cindex.CursorKind.FUNCTION_TEMPLATE:
-        # print("Function Template", c.spelling, c.raw_comment)
+#        print("Function Template", c.spelling, c.raw_comment)
         objects["functions"].append(Function(c))
         return
 
@@ -90,6 +93,18 @@ def traverse(c, path, objects):
         objects["enums"].append(Enum(c))
         return
 
+    elif c.kind == clang.cindex.CursorKind.CLASS_DECL:
+        objects["classes"].append(Class(c))
+        return
+
+    elif c.kind == clang.cindex.CursorKind.CLASS_TEMPLATE:
+        objects["classes"].append(Class(c))
+        return
+
+    elif c.kind == clang.cindex.CursorKind.STRUCT_DECL:
+        objects["structs"].append(Class(c))
+        return
+
     else:
         # print("Unknown", c.kind, c.spelling)
         pass
@@ -100,20 +115,16 @@ def traverse(c, path, objects):
 
 def parse(path):
     index = clang.cindex.Index.create()
-    tu = index.parse(path, ['-x', 'c++', '-std=c++11', '-fparse-all-comments', '-DIGL_STATIC_LIBRARY'])
-    # Clang can't parse files with missing definitions, add static library definition
-    objects = {"functions": [], "enums": [], "namespaces": [], "classes": []}
+    # Clang can't parse files with missing definitions, add static library definition or not?
+    args = ['-x', 'c++', '-std=c++11', '-fparse-all-comments', '-DIGL_STATIC_LIBRARY']
+    args.append('-I/usr/include/eigen3/') # TODO Properly add all needed includes
+    syspath = ccsyspath.system_include_paths('clang++-3.7') # Add the system libraries
+    incargs = [(b'-I' + inc).decode("utf-8") for inc in syspath]
+    args.extend(incargs)
+
+    tu = index.parse(path, args)
+    objects = {"functions": [], "enums": [], "namespaces": [], "classes": [], "structs": []}
     traverse(tu.cursor, path, objects)
-
-    #    tpl = Template(filename='bind.mako')
-    #    rendered = tpl.render(functions=functions)
-
-    #    OUTPUT_DIR = 'generated'
-
-    #    if not os.path.isdir(OUTPUT_DIR): os.mkdir(OUTPUT_DIR)
-
-    #    with open("generated/{}.bind.cc".format(sys.argv[1]), "w") as f:
-    #        f.write(rendered)
     return objects
 
 if __name__ == '__main__':