  We introduce bindings that enable the convenient, efficient, and reliable use
of software modules of CGAL (Computational Geometry Algorithm Library), which
are written in C++, from within code written in Python. There are different
tools that facilitate the creation of such bindings. We present a short study
that compares three main tools, which leads to the tool of choice. The
implementation of algorithms and data structures in computational geometry
presents tremendous difficulties, such as obtaining robust software despite the
use of (inexact) floating point arithmetic, found in standard hardware, and
meticulous handling of all degenerate cases, which typically are in abundance.
The code of CGAL extensively uses function and class templates in order to
handle these difficulties, which implies that the programmer has to make many
choices that are resolved during compile time (of the C++ modules). While
bindings take effect at run time (of the Python code), the type of the C++
objects that are bound must be known when the bindings are generated, that is,
when they are compiled. The types of the bound objects are instances
(instantiated types) of C++ function and class templates. The number of object
types that can potentially be bound, in implementation of generic
computational-geometry algorithms, is enormous; thus, the generation of the
bindings for all these types in advance is practically impossible. Often there
are several choices to make, resulting in a prohibitively large number of
combinations. We present a system that rapidly generates bindings for desired
object types according to user prescriptions, which enables the convenient use
of any subset of bound object types concurrently. The introduction of the
bindings made them easily accessible to newcomers and practitioners in
non-computing fields, as we report in the paper.
