DyND-Python Release Notes
=========================

Release 0.6.6
-------------

Commits by author since last release:

    38  Mark Wiebe
     9  Irwin Zaid
     1  stonebig

- Interpret 'O' numpy dtype with h5py string metadata as a string type.
- Updates to track libdynd changes.
- Update some of the docs and notebooks.

Release 0.6.5
-------------

Commits by author since last release:

     6  Mark Wiebe
     1  Phillip Cloud

- Initialization/cleanup of libdynd changed to use libdynd_init
  and libdynd_cleanup functions, update to reflect that.
- Reinstate the array_from_ptr function, with some enhancements
  to allow it to work with default-constructed arrmeta, as
  well as blockref types like pointer[T].

Release 0.6.4
-------------

Commits by author since last release:

    19  Mark Wiebe
     6  Phillip Cloud

- Add handling of NULL/empty array cases.
- Fixes for initializing option type arrays.
- Updated vagrant file for creating VM dev environment.
- Removed the array_from_ptr function.

Release 0.6.3
-------------

Commits by author since last release:

   105  Mark Wiebe
     4  T.J. Alumbaugh

- Expose float16 and UTC datetime as ndt.float16 and ndt.datetimeutc.
- Add tuple= option to nd.as_py, which outputs structs as tuples instead
  of dicts.
- Change default build configuration to build libdynd and dynd-python
  separately.
- Expose nd::arrfunc to Python.
- Enable nd.arrfunc constructor to accept a python function and type
  as initialization, for example
  "nd.arrfunc(lambda x: x + 1.0, '(float64) -> float64')".
- Improve speed/flexibility of DyND <-> NumPy copying, including support
  for NumPy's object type.
- Add detection of the special object dtype created by h5py for variable
  length string support.

Release 0.6.2
-------------

Commits by author since last release:

    73  Mark Wiebe
     3  T.J. Alumbaugh
     1  Andy R. Terrel
     1  Damien Garaud

- Updates to reflect libdynd ndt.type changes, including changes to
  new datashape spelling from the datashape project, data/time/datetime,
  cfixed[N] and fixed[N].
- Expose various ckernel updates from libdynd to Python.
- Slicing handles out of bounds indices more like Python now.
- Add type= parameter to nd.view, to switch between some common dimension
  types, view bytes as POD data, and POD data as bytes.

Release 0.6.1
-------------

- Improve some type conversion error messages.
- Support NumPy's struct scalar objects.
- Expose creation functions for the 'property' type.
- Convert 'str' and 'unicode' to dynd 'string',
  and 'bytes' to dynd 'bytes' on Python 3.
- Add nd.inf and nd.nan floating-point values.
- Add __int__, __float__, __complex__ to the nd.array
  object, so int(arr), float(arr), complex(arr) work.
- Add detection of blaze.Array objects in conversion code
  for some cases.

Release 0.6.0
-------------

- Add nd.is_c_contiguous(a) and nd.is_f_contiguous(a) to
  check array strides.
- Add nd.memmap(filename, ...) to memory map a file as bytes.
- Replace type "cfloat##" with "complex[float##]".
- Add an algorithm which can construct dynd arrays from
  nested Python iterators, dynamically promoting the data
  type and dimension types as it goes.

Release 0.5.0
-------------

- Make nd.array(a, ...) always produce a new array, in the same
  way the built in list(a) creates a new list.
- Add nd.asarray(a) and and nd.view(a) to support producing an
  array which is a view when possible, or requiring a view.
- Shuffle some things around in the _lowlevel namespace, including
  new ckernel interfaces.
- Change nd.empty(shape, type) to nd.empty(shape, dtype),
  also accepting nd.empty(shape0, ..., shape(n-1), dtype).
- Add nd.ones, nd.zeros, and nd.full constructor functions.
- Add nd.squeeze, behaving like numpy.squeeze.
- Add .shape property to the ndt.type object.
- Add .as_numpy() method to the ndt.type object.

Release 0.4.2
-------------

- Support assignment from Python iterators to dynd array dimensions.
- Use float64 as the default type when the type cannot be deduced
  from the input, like for "nd.array([])". This matches NumPy's
  behavior in the same case.
- Rename nd.dtype to ndt.type.
- Previous "udtype=" parameters are now "dtype=", and "dtype="
  parameters are now "type=". This helps make it a bit more
  intuitive for those accustomed to NumPy.
- Some array attributes have moved into free functions.
  "a.type" -> "nd.type_of(a)", "a.dtype" -> "nd.dtype_of(a)",
  "a.dshape" -> "nd.dshape_of(a)", "a.ndim" -> "nd.ndim_of(a)".

Release 0.4.1
-------------

- Rename nd.arange to nd.range, the "a" prefix is unneeded because
  the nd namespace is always used.
- Finish the rename of nd.ndobject to nd.array throughout the system.
- Change string/bytes conversion and assignment to be similar to
  Python 3 on both Python 2 and 3.

Release 0.4.0
-------------

- Updates to notebooks and other documentation
- Some API tweaks, like adding ndt.make_bytes_dtype
- Rename nd.ndobject to nd.array
- Add initial basic datetime type, with 64-bit int storage

Release 0.3.1
-------------

- Add dynd._lowlevel submodule which exposes low level details as
  ctypes function pointers and structures.
- Rename var_dim from "VarDim" to "var" in dshape parsing/printing.
- Rename fixedstruct to cstruct dtype, make it follow the C/C++
  layout properly.

Release 0.3.0
-------------

- Support Python 3.3 (Python 2.6, 2.7, 3.3 using one code base).
- Implement more __*__ methods so ndobject integrates better in Python.
- Add function nd.fields, which extracts fields from a struct array.
- Rename cast_udtype to ucast.
- Functions ndt.replace_udtype and ndt.extract_udtype for manipulating dtypes.
- Improved var_dim support.
- Implement a groupby function which produces a ragged array with a
  var_dim type.
- More sophisticated initialization and assignment from Python objects.

Release 0.2.0
-------------

- Convert from a NumPy-style array/dtype data model to a datashape
  based approach. This unifies the treatment of dimensions and types.
- Add a prototype computed fields mechanism, based on numpy/scipy expressions
- Split the dynd.nd namespace into dynd.nd and dynd.ndt
- Improved conversion to/from native Python types and NumPy arrays.
- Add datashape to/from dynd types.
- Add a typed JSON parsing function, that parses into an object of
  specified dtype.

Release 0.1.0
-------------

This is the first preview release of dynd-python, a component of
of the Blaze project. Blaze will layer a broader distributed storage and
compute system on top of dynd-python, numpy, and other systems.

DyND-Python is a multi-dimensional array library for Python
which provides functionality augmenting the NumPy/Matplotlib/SciPy
computing stack. It is built using the libdynd library,
a C++ library which is also in preview release.

This initial release includes a basic dtype system, a multi-dimensional
array primitive, interoperability with NumPy, lazy evaluation,
and an early gfunc library supporting kernels provided via ctypes.

As a preview release, there are many bugs, missing features, and
features that will change drastically as development proceeds.
