Release 0.8.3
-------------

:Release: 0.8.3
:Date: September 15, 2015

New Expressions
~~~~~~~~~~~~~~~

* Adds :class:`~blaze.expr.collections.Tail` which acts as an opposite to
  head. This is exposed throught the :func:`~blaze.expr.collections.tail`
  function.
  This returns the last ``n`` elements from a collection. (:issue:`1187`)
* Adds :class:`~blaze.expr.math.notnull` returning an indicator of whether
  values in a field are null (:issue:`697`, :issue:`733`)

Improved Expressions
~~~~~~~~~~~~~~~~~~~~

* :class:`~blaze.expr.collections.Distinct` expressions now support an `on`
  parameter to allow distinct on a subset of columns (:issue:`1159`)
* :class:`~blaze.expr.reductions.Reduction` instances are now named as their
  class name if their ``_child`` attribute is named ``'_'`` (:issue:`1198`)
* :class:`~blaze.expr.collections.Join` expressions now promotes the types of
  the fields being joined on. This allows us to join things like ``int32``
  and ``int64`` and have the result be an int64. This also allows us to join
  any type ``a`` with ``?a``. (:issue:`1193`, :issue:`1218`).

New Backends
~~~~~~~~~~~~

Improved Backends
~~~~~~~~~~~~~~~~~

* Blaze now tries a bit harder to avoid generating ``ScalarSelects`` when using
  the SQL backend (:issue:`1201`, :issue:`1205`)
* ReLabel expressions on the SQL backend are now flattened (:issue:`1217`).

API Changes
~~~~~~~~~~~

* Serialization format in blaze server is now passed in as a mimetype
  (:issue:`1176`)
* We only allow and use HTTP ``POST`` requests when sending a computation to
  Blaze server for consistency with the HTTP spec (:issue:`1172`)
* Allow :class:`~blaze.server.client.Client` objects to explicitly disable
  verification of ssl certificates by passing ``verify_ssl=False``.
  (:issue:`1170`)
* Enable basic auth for the blaze server. The server now accepts an
  ``authorization`` keyword which must be a callable that accepts an
  object holding the username and password, or None if no auth was given and
  returns a bool indicating if the request should be allowed.
  :class:`~blaze.server.client.Client` objects can pass an optional
  ``auth`` keyword which should be a tuple of (username, password) to
  send to the server. (:issue:`1175`)
* We now allow :class:`~blaze.expr.collections.Distinct` expressions on
  ``ColumnElement`` to be more general and let things like
  ``sa.sql.elements.Label`` objects through (:issue:`1212`)
* Methods now take priority over field names when using attribute access
  for :class:`~blaze.expr.expressions.Field` instances to fix a bug that
  prevented accessing the method at all (:issue:`1204`). Here's an
  example of how this works::

     >>> from blaze import symbol
     >>> t = symbol('t', 'var * {max: float64, isin: int64, count: int64}')
     >>> t['count'].max()
     t.count.max()
     >>> t.count()  # calls the count method on t
     t.count()
     >>> t.count.max()  # AttributeError
     Traceback (most recent call last):
        ...
     AttributeError: ...

Bug Fixes
~~~~~~~~~

* Upgrade versioneer so that our version string is now :pep:`440` compliant
  (:issue:`1171`)
* Computed columns (e.g., the result of a call to
  :func:`~blaze.expr.collections.transform`) can now be accessed via standard
  attribute access when using the SQL backend (:issue:`1201`)
* Fixed a bug where blaze server was depending on an implementation detail of
  CPython regarding ``builtins`` (:issue:`1196`)
* Fixed incorrect SQL generated by count on a subquery (:issue:`1202`).
* Fixed an ``ImportError`` generated by an API change in dask.
* Fixed an issue where columns were getting trampled if there were column name
  collisions in a sql join. (:issue:`1208`)
* Fixed an issue where arithmetic in a Merge expression wouldn't work
  because arithmetic wasn't defined on ``sa.sql.Select`` objects
  (:issue:`1207`)
* Fixed a bug where the wrong value was being passed into
  :func:`~blaze.expr.datetime.time` (:issue:`1213`)
* Fixed a bug in sql relabel that prevented relabeling anything that generated
  a subselect. (:issue:`1216`)
* Fixed a bug where methods weren't accessible on fields with the same
  name (:issue:`1204`)
* Fixed a bug where optimized expressions going into a pandas group by were
  incorrectly assigning extra values to the child DataFrame (:issue:`1221`)
* Fixed a bug where multiple same-named operands caused incorrect scope
  to be constructed ultimately resulting in incorrect results on
  expressions like ``x + x + x`` (:issue:`1227`). Thanks to @llllllllll and
  @jcrist for discussion around solving the issue.
* Fixed a bug where :func:`~blaze.expr.datetime.minute` and
  :class:`~blaze.expr.datetime.Minute` were not being exported which made them
  unusable from the blaze server (:issue:`1232`).
* Fixed a bug where repr was being called on data resources rather than
  string, which caused massive slowdowns on largish expressions running
  against blaze server (:issue:`1240`, :issue:`1247`).
* Skip a test on Win32 + Python 3.4 and PyTables until this gets sorted out on
  the library side (:issue:`1251`).

Miscellaneous
~~~~~~~~~~~~~

* We now run tests against pandas master to catch incompatibility issues
  (:issue:`1243`).
