PyPI link to release 0.5.0 Documentation for release 0.5.0

Performance Optimizations

  • Change wiggle_interval to return success bool instead of raising an exception. This allows the implicitization approach to use it without having to use exceptions for flow-control. (Fixes #22.)
  • Switching Fortran speedups from f2py to Cython (this is because f2py artificially limits the feature set of Fortran, i.e. user defined types)
  • Moving some more code to Fortran (e.g. bbox_line_intersect() 3dcf640)

New Features

  • Making Fortran features available outside of Python (see Native Libraries)
  • C headers for each Fortran module (via the bezier.get_include() function)
    • Cython .pxd declarations for all Fortran modules
    • libbezier static library (via the bezier.get_lib() function)
  • Implementing bezier_roots() polynomial root solver for polynomials written in Bernstein basis. (0dd6369)


  • Getting bezier published in the Journal of Open Source Science (JOSS). See review. (e6c4536 and 975ac6b)
  • Updating error message for locate() methods and adding a note that locate() / evaluate*() are (essentially) inverses. H/T to @pdknsk #36
  • Using Fortran-contiguous arrays in _check_non_simple(). (b06c78e)
  • Moving most of Curve.subdivide() and Surface.subdivide() logic into helpers. This is part of an effort to make all helpers take low-level data types rather than Curves, Surfaces, etc. (34515bd and 1fc80e5)
  • Split speedup.f90 into submodules curve.f90, surface.f90, etc. (75349b7, dfd6bba, 7096a9d, c326c00)
  • Adding BEZIER_JOURNAL option to setup.py. This stores a record of compiler commands invoked during installation. See Native Libraries for more details. (3d832e7 and c64a97a)