Latest Release (2023.7.28)

PyPI link to release 2023.7.28 Documentation for release 2023.7.28

Robustness

  • Fall back to de Casteljau algorithm for evaluation on high degree curves (#264). Fixed #263. The more efficient evaluate_multi_vs() function relies on the ability to compute binomial coefficients (n C k) but after (55 C 26) these values cannot be computed in floating point without roundoff and for very large degrees these values overflow.

Python Changes

Packaging

  • Switched to delvewheel for repairing Windows wheels (#307). This is similar to how Linux and macOS packaging already work. This is vastly superior to the homegrown approach previously used with extra-dll.
  • Dropped support for Python 3.7 and added support for Python 3.10 and 3.11 (#271, #302).
  • Add strict check for Python version on source installs. Fixed #278.
  • Make missing BEZIER_INSTALL_PREFIX error message more helpful. In particular, add a suggestion to set BEZIER_NO_EXTENSION for a source only install if BEZIER_INSTALL_PREFIX cannot be set. Fixed #277.
  • Use cibuildwheel to automate building wheels as part of release (#308).

Bug Fixes

  • Allow the extra DLL directory to be absent on Windows. For binary wheel installs, this directory contains the libbezier DLL (e.g. bezier.libs\bezier-2a44d276.dll). For pure Python installs, the bezier.libs directory will be absent. (#307, #255). Fixed #254.
  • Bug fix for clip_range() (doc). Intersections with the t=0 / t=1 sides of the fat line were not taken into account and a value for s_max could be accidentally left unset if the intersections occurred in an order where the s-value decreased throughout (#259).

Breaking Changes

  • Removing Surface alias for the Triangle type (#252). The Surface type was deprecated (and converted to an alias) in the 2020.1.14 release.

Additive Changes

  • Renaming all “private” _verify args to verify (#251). For example, in Curve.intersect() (doc)
  • Adding provisional support for self-intersection checks in planar curves (#265, #267). Fixed #165 and #171. Supported via Curve.self_intersections() method.
  • Added alpha argument to Triangle.plot() and CurvedPolygon.plot() methods (#296).

Documentation

  • Making all docs pages import external packages at least once (#257). Fixed #210.