-------------------------
This release adds SVG charting via the `leather <https://leather.rtfd.io>`_ charting library. Charts methods have been added for both :class:`.Table` and :class:`.TableSet`. (The latter create lattice plots.) See the revised tutorial and new cookbook entries for examples. Leather is still an early library. Please `report any bugs <https://github.com/wireservice/agate/issues>`_.
Also in this release are a :class:`.Slugify` computation and a variety of small fixes and improvements.
The complete list of changes is as follows:
* Remove support for monkey-patching of extensions. (594)
* :class:`.TableSet` methods which proxy :class:`.Table` methods now appear in the API docs. (640)
* :class:`.Any` and :class:`.All` aggregations no longer behave differently for boolean data. (636)
* :class:`.Any` and :class:`.All` aggregations now accept a single value as a test argument, in addition to a function.
* :class:`.Any` and :class:`.All` aggregations now require a test argument.
* Tables rendered by :meth:`.Table.print_table` are now GitHub Flavored Markdown (GFM) compatible. (626)
* The agate tutorial has been converted to a Jupyter Notebook.
* :class:`.Table` now supports ``len`` as a proxy for ``len(table.rows)``.
* Simple SVG charting is now integrated via `leather <https://leather.rtfd.io>`_.
* Added :class:`.First` computation. (634)
* :meth:`.Table.print_table` now has a `max_precision` argument to limit Number precision. (544)
* Slug computation now accepts an array of column names to merge. (617)
* Cookbook: standardize column values with :class:`.Slugify` computation. (613)
* Cookbook: slugify/standardize row and column names. (612)
* Fixed condition that prevents integer row names to allow bools in :meth:`.Table.__init__`. (627)
* :class:`.PercentChange` is now null-safe, returns None for null values. (623)
* :class:`.Table` can now be iterated, yielding :class:`Row` instances. (Previously it was necessarily to iterate :code:`table.rows`.)