``0.3.0`` ========= |pypi| |docs| Performance Optimizations ------------------------- - Adding ``__slots__`` for all classes - Removing all usage of ``@property`` calls from internal callers (to avoid function call overhead) - Avoiding un-necessary data copying, e.g. ``nodes[[0], :]`` creates a copy but ``nodes[0, :].reshape((1, 2))`` does not (`more details `__) - Adding ``_verify`` switches to selectively disable overly defensive value checking. Added to ``CurvedPolygon`` `constructor `__, ``Surface.evaluate_barycentric()`` (`doc `__), ``Surface.evaluate_cartesian()`` (`doc `__), ``Surface.evaluate_multi()`` (`doc `__) and ``Surface.intersect()`` (`doc `__). Internal callers with already verified data now skip verification steps - `Bailing out early `__ if surface bounding boxes are disjoint in ``Surface.intersect()`` `method `__ Breaking Changes ---------------- - Requiring ``degree`` in ``Curve`` (`doc `__) and ``Surface`` (`doc `__) constructors, but adding ``Curve.from_nodes()`` (`doc `__) and ``Surface.from_nodes()`` (`doc `__) factories to accept nodes only (computing the degree in the constructor every time is a waste of flops, especially if the caller knows the degree) - `Removing `__ public ``Curve.copy()`` (`doc `__) and ``Surface.copy()`` (`doc `__) - `Removing `__ custom equality checks for ``Curve`` (`doc `__) and ``Surface`` (`doc `__) objects. The previous implementation did not factor in all relevant values - Returning ``1xD`` arrays `instead of flattened `__ ``D``-dimensional 1D arrays from ``Curve.evaluate()`` (`doc `__), ``Surface.evaluate_barycentric()`` (`doc `__), ``Surface.evaluate_cartesian()`` (`doc `__), and related helpers - Renaming ``Intersection.left/right`` `properties `__ as ``first/second`` `properties `__ (They were poorly named originally, since "left" and "right" were in reference to where they were used **in code**, not geometry. This class is not part of the public interface, but it is documented.) Bug Fixes --------- - Handling cases where one corner of a surface touches another but their interiors don't intersect (in the ``Surface.intersect()`` `method `__). Adding ``ignored_corner`` classification to handle these curve-curve intersecions that don't contribute to a surface-surface intersection - Throwing exception in the ``Curve.locate()`` `method `__ when the subdivided intervals are very far apart (`#13 `__) - Improving ``Surface.is_valid`` `property `__ by considering the signs of the Jacobian determinant at corner nodes (`#12 `__) Miscellany ---------- - Adding possible strategy to avoid linear convergence in ``newton_refine()`` `helper `__ - Adding AppVeyor configuration to make sure there are no Windows issues, testing exclusively with ``conda`` install - Updating generated images with ``matplotlib`` 2.0 .. |pypi| image:: https://img.shields.io/pypi/v/bezier/0.3.0.svg :target: https://pypi.org/project/bezier/0.3.0/ :alt: PyPI link to release 0.3.0 .. |docs| image:: https://readthedocs.org/projects/bezier/badge/?version=0.3.0 :target: https://bezier.readthedocs.io/en/0.3.0/ :alt: Documentation for release 0.3.0