numpysane (0.31) unstable; urgency=medium

  * broadcast_define(): better out_kwarg logic. If the output is written
    in-place, the inner function doesn't need to return anything. And the
    broadcast_define()-wrapped function automatically returns the right
    thing

 -- Dima Kogan <dkogan@debian.org>  Wed, 03 Feb 2021 12:51:54 -0800

numpysane (0.30) unstable; urgency=medium

  * numpysane_pywrap can find its C templates even if installed via pip
  * numpysane.mag() can take a dtype keyword argument
  * mag(), inner(), norm2() now use the given dtype for all their
    computations, so selecting an appropriate dtype can prevent overflows

 -- Dima Kogan <dkogan@debian.org>  Mon, 01 Feb 2021 15:31:03 -0800

numpysane (0.29)

  * numpysane_pywrap: module docstrings can span multiple lines

 -- Dima Kogan <dkogan@debian.org>  Tue, 17 Nov 2020 12:09:00 -0800

numpysane (0.28)

  * more precise logic for size-0 concatenation
    I can once again accumulate arrays from np.array(())

 -- Dima Kogan <dkogan@debian.org>  Wed, 23 Sep 2020 13:06:08 -0700

numpysane (0.27)

  * numpysane_pywrap item__...() macro works with non-trivial arguments

 -- Dima Kogan <dkogan@debian.org>  Mon, 21 Sep 2020 14:09:17 -0700

numpysane (0.26)

  * glue() and cat() handles size-0 arrays better
  * numpysane_pywrap: size-0 arrays are always deemed contiguous

 -- Dima Kogan <dkogan@debian.org>  Sat, 19 Sep 2020 20:13:05 -0700

numpysane (0.25)

  * nps.dummy() supports multiple axes given at once. So I can do
    something like   nps.dummy(x, -2, -2)
  * numpysane_pywrap: generated code can use ctype__NAME and item__NAME to
    simplify handling of non-contiguous data

 -- Dima Kogan <dkogan@debian.org>  Sat, 05 Sep 2020 13:52:19 -0700

numpysane (0.24)

  * C broadcasting: I can pass strings in the extra, non-broadcastable
    arguments
  * C broadcasting: added support for precomputed cookies to do as much of
    the work as possible outside of the slice loop

 -- Dima Kogan <dkogan@debian.org>  Fri, 19 Jun 2020 10:55:47 -0700

numpysane (0.23)

  * Bug fix: C broadcasting doesn't write to uninitialized memory when
    given a size-0 matrix

 -- Dima Kogan <dkogan@debian.org>  Fri, 12 Jun 2020 19:16:25 -0700

numpysane (0.22)

  * broadcast_define() and the generated function checks its arguments for
    validity more thoroughly
  * outer() doesn't require identically-dimensioned input
  * mass rewrite of the documentation
  * Added C-level broadcasting
  * License change: any version of the LGPL instead of LGPL-3+

 -- Dima Kogan <dkogan@debian.org>  Sat, 14 Mar 2020 23:40:29 -0700

numpysane (0.20)

  * nps.matmult(..., out=out) produces in-place results when one of the
    arguments is 1D

 -- Dima Kogan <dkogan@debian.org>  Sat, 30 Nov 2019 18:20:49 -0800

numpysane (0.19)
    
  * Added mag() convenience function. mag(x) = sqrt(norm2(x))
  * Initial support for C-level broadcasting

 -- Dima Kogan <dima@secretsauce.net>  Thu, 28 Nov 2019 18:50:02 -0800
