--------------------
This release adds several new features, fixes numerous small bug-fixes, and improves performance for common use cases. There are some minor breaking changes, but few user are likely to encounter them. The most important changes in this release are:
1. There is now a :meth:`.TableSet.having` method, which behaves similarly to SQL's ``HAVING`` keyword.
2. :meth:`.Table.from_csv` is much faster. In particular, the type inference routines for parsing numbers have been optimized.
3. The :meth:`.Table.compute` method now accepts a ``replace`` keyword which allows new columns to replace existing columns "in place."" (As with all agate operations, a new table is still created.)
4. There is now a :class:`.Slug` computation which can be used to compute a column of slugs. The :meth:`.Table.rename` method has also added new options for slugifying column and row names.
The complete list of changes is as follows:
* Added a deprecation warning for ``patch`` methods. New extensions should not use it. (594)
* Added :class:`.Slug` computation (466)
* Added ``slug_columns`` and ``slug_rows`` arguments to :meth:`Table.rename`. (466)
* Added :meth:`.utils.slugify` to standardize a sequence of strings. (466)
* :meth:`.Table.__init__` now prints row and column on ``CastError``. (593)
* Fix null sorting in :meth:`.Table.order_by` when ordering by multiple columns. (607)
* Implemented configuration system.
* Fixed bug in :meth:`.Table.print_bars` when ``value_column`` contains ``None`` (608)
* :meth:`.Table.print_table` now restricts header on max_column_width. (605)
* Cookbook: filling gaps in a dataset with Table.homogenize. (538)
* Reduced memory usage and improved performance of :meth:`.Table.from_csv`.
* :meth:`.Table.from_csv` no longer accepts a sequence of row ids for :code:`skip_lines`.
* :meth:`.Number.cast` is now three times as fast.
* :class:`.Number` now accepts :code:`group_symbol`, :code:`decimal_symbol` and :code:`currency_symbols` arguments. (224)
* Tutorial: clean up state data under computing columns (570)
* :meth:`.Table.__init__` now explicitly checks that ``row_names`` are not ints. (322)
* Cookbook: CPI deflation, agate-lookup. (559)
* :meth:`.Table.bins` now includes values outside ``start`` or ``end`` in computed ``column_names``. (596)
* Fixed bug in :meth:`.Table.bins` where ``start`` or ``end`` arguments were ignored when specified alone. (599)
* :meth:`.Table.compute` now accepts a :code:`replace` argument that allows columns to be overwritten. (597)
* :meth:`.Table.from_fixed` now creates an agate table from a fixed-width file. (358)
* :mod:`.fixed` now implements a general-purpose fixed-width file reader. (358)
* :class:`TypeTester` now correctly parses negative currency values as Number. (595)
* Cookbook: removing a column (`select` and `exclude`). (592)
* Cookbook: overriding specific column types. (591)
* :class:`.TableSet` now has a :meth:`.TableSet._fork` method used internally for deriving new tables.
* Added an example of SQL's :code:`HAVING` to the cookbook.
* :meth:`.Table.aggregate` interface has been revised to be more similar to :meth:`.TableSet.aggregate`.
* :meth:`.TableSet.having` is now implemented. (587)
* There is now a better error when a forced column name does not exist. (591)
* Arguments to :meth:`.Table.print_html` now mirror :meth:`.Table.print_table`.