``0.6.0`` ========= |pypi| |docs| Performance Optimizations ------------------------- - Added recommended performance flags for ``gfortran`` based on `recommendations `__ on ``fortran90.org`` (`3877982 `__). - Extensions can be compiled in debug mode by setting ``DEBUG=True`` (`b62460b `__). - Setting ``BEZIER_NO_EXTENSIONS=True`` will build pure-Python modules only (`3f6280c `__) - Added `QUADPACK `__ to use in ``curve.f90::compute_length`` (`985a4c0 `__). - Implemented curve-curve intersection completely in Fortran (e.g. `4a8f801 `__) which resulted in a 10x speedup when called from Python. Also implemented surface-surface intersection completely in Fortran, resulting in a 3x speedup. Python Changes -------------- New Features ~~~~~~~~~~~~ - Added ``CurvedPolygon._metadata`` to track where edges originated, e.g. from a surface-surface intersection (`871d23d `__). This is used for sanity checking in functional tests (`e253da2 `__). - Made speedup checks specific to the module, not all four. I.e. ``bezier._HAS_SPEEDUP`` was dropped in favor of five members, e.g. ``_HAS_CURVE_SPEEDUP`` (`d798f66 `__). - Added ``bezier.__author__`` and ``bezier.__version__`` `attributes `__. - `Added `__ ``bezier.get_dll()`` for Windows (`699e39b `__). - Added ``bezier/__config__.py`` that adds ``libbezier`` to ``%PATH%`` on Windows (`8538af4 `__). - Fortran / Cython speedups added: - ``_curve_speedup.pyx::subdivide_nodes`` - ``_curve_speedup.pyx::newton_refine`` - ``_curve_speedup.pyx::locate_point`` - ``_curve_speedup.pyx::elevate_nodes`` - ``_curve_speedup.pyx::get_curvature`` - ``_curve_speedup.pyx::reduce_pseudo_inverse`` - ``_curve_speedup.pyx::full_reduce`` - ``_curve_speedup.pyx::compute_length`` - ``_curve_intersection_speedup.pyx::all_intersections`` - ``_curve_intersection_speedup.pyx::free_curve_intersections_workspace`` - ``_helpers_speedup.pyx::contains_nd`` - ``_helpers_speedup.pyx::vector_close`` - ``_helpers_speedup.pyx::in_interval`` - ``_helpers_speedup.pyx::ulps_away`` - ``_surface_speedup.pyx::specialize_surface`` - ``_surface_speedup.pyx::subdivide_nodes`` - ``_surface_speedup.pyx::compute_edge_nodes`` - ``_surface_intersection_speedup.pyx::newton_refine`` - ``_surface_intersection_speedup.pyx::locate_point`` - ``_surface_intersection_speedup.pyx::surface_intersections`` - ``_surface_intersection_speedup.pyx::free_surface_intersections_workspace`` Breaking Changes ~~~~~~~~~~~~~~~~ - ``Curve.intersect()`` `returns `__ ``s-t`` parameters rather than ``x-y`` values (`c309998 `__). - ``Surface.intersect()`` `returns `__ a list with a single ``Surface`` when one of the two surfaces is contained in the other (`05b1fd9 `__). - ``Surface.is_valid`` will only `return `__ ``True`` if the map ``B(s, t)`` determined by the surface has everywhere positive Jacobian. Previously a negative Jacobian was also allowed (`260fb51 `__). - Removed data members from ``Curve``: - ``edge_index`` (`b969488 `__) - ``next_edge`` (`28619e8 `__) - ``previous_edge`` (`28619e8 `__) - ``root`` (`db427f9 `__) - ``start`` (`39ee98b `__) - ``end`` (`39ee98b `__) - Removed data members from ``Surface``: - ``base_x`` (`dea75e3 `__) - ``base_y`` (`dea75e3 `__) - ``width`` (`dea75e3 `__) - Remove ``dimension`` argument in ``_curve_speedup.pyx::elevate_nodes`` since it can be inferred from ``nodes`` (`06501c5 `__). ABI Changes ----------- New Features ~~~~~~~~~~~~ - Fully implemented curve-curve intersection (as ``curve_intersection.h::curve_intersections``) and surface-surface intersection (as ``surface_intersection.h::surface_intersections``) at the ABI level. - Added the ``surface_intersection.h`` header file and implementations for the described functions (`fafd9ff `__). - Newly added functions - ``curve.h::subdivide_nodes_curve`` (`efb3ce6 `__) - ``curve.h::newton_refine_curve`` (`2257344 `__) - ``curve.h::locate_point_curve`` (`2121101 `__, `32b0fa9 `__) - ``curve.h::elevate_nodes_curve`` (`b03fc28 `__) - ``curve.h::get_curvature`` (`69cb2f8 `__) - ``curve.h::reduce_pseudo_inverse`` (`7c3db17 `__) - ``curve.h::full_reduce`` (`4abd309 `__) - ``curve.h::compute_length`` (`985a4c0 `__, `7e71b20 `__) - ``curve_intersection.h::curve_intersections`` (`c92f98d `__) - ``curve_intersection.h::free_curve_intersections_workspace`` (`c92f98d `__) - ``helpers.h::contains_nd`` (`36f4b5e `__) - ``helpers.h::vector_close`` (`9f3716a `__) - ``helpers.h::in_interval`` (`3c0af5d `__) - ``helpers.h::ulps_away`` (`0197237 `__) - ``surface.h::specialize_surface`` (`eb8693e `__, `fcd5bad `__) - ``surface.h::subdivide_nodes_surface`` (`6027210 `__, `4fc5f2a `__, `8beb1ac `__, `0b2b1f3 `__, `d27b86f `__, `88c302b `__) - ``surface.h::compute_edge_nodes`` (`2d02590 `__, `f86649a `__) - ``surface_intersection.h::newton_refine_surface`` (`93c288d `__) - ``surface_intersection.h::locate_point_surface`` (`325ea47 `__, `ca134e6 `__, `bf69852 `__) - ``surface_intersection.h::surface_intersections`` - ``surface_intersection.h::free_surface_intersections_workspace`` - Added `status.h `__ with an enum for failure states. Each Fortran procedure that returns a status documents the possible values and if each value is set directly or by a called procedure (`9fc8575 `__, `c2accf7 `__). Breaking Changes ~~~~~~~~~~~~~~~~ - Removed functions - ``curve.h::specialize_curve_generic`` (`d52453b `__) - ``curve.h::specialize_curve_quadratic`` (`d52453b `__) - ``curve_intersection.h::from_linearized`` (`d62e462 `__) - ``curve_intersection.h::bbox_line_intersect`` (`72c0179 `__) - ``curve_intersection.h::linearization_error`` (`4a3378b `__) - ``curve_intersection.h::segment_intersection`` (`4060590 `__) - ``curve_intersection.h::parallel_different`` (`df3e195 `__) - Renamed functions - ``curve.h::newton_refine`` to ``newton_refine_curve`` (`194ce95 `__) - ``curve.h::elevate_nodes`` to ``elevate_nodes_curve`` (`194ce95 `__) - ``curve_intersection.h::newton_refine_intersect`` to ``newton_refine_curve_intersect`` (`a055525 `__) - Replaced ``degree`` with ``num_nodes (== degree + 1)`` in functions that operate on curves: - ``curve.h::evaluate_curve_barycentric`` (`13eacdd `__) - ``curve.h::evaluate_multi`` (`962c288 `__) - ``curve.h::specialize_curve`` (`ac86233 `__) - ``curve.h::evaluate_hodograph`` (`9170855 `__) - ``curve_intersection.h::newton_refine_curve_intersect`` (`80ec491 `__) Miscellany ---------- - Added documentation for "native extensions" in ``DEVELOPMENT`` (`2f9f2c4 `__). - Overhauled `native-libraries doc `__ with subsections for OS X and Windows (`bfa75ee `__, `72005fb `__, etc.). - Added Fortran unit tests (`758bdd1 `__, `e8afba7 `__, `3164365 `__, etc.). - Began testing in Mac OS X on Travis (`9ac5e8e `__, `85f7619 `__, etc.). - Added a workaround (``include/bezier/_bool_patch.h``) for the missing support for ``bool`` in old MSVC versions that are required to work with Python 2.7 (`5577178 `__). .. |pypi| image:: https://img.shields.io/pypi/v/bezier/0.6.0.svg :target: https://pypi.org/project/bezier/0.6.0/ :alt: PyPI link to release 0.6.0 .. |docs| image:: https://readthedocs.org/projects/bezier/badge/?version=0.6.0 :target: https://bezier.readthedocs.io/en/0.6.0/ :alt: Documentation for release 0.6.0