Version 1.0.1 February 2013

  * bug fixes
  * refactorings by graingert
  * skip useless tests for pypy
  * new license: MIT License
  * tested with CPython2.7, CPython3.2, CPython3.3, pypy-1.9, pypy-2.0-beta1
  * unified line endings to LF
  * PEP8 refactorings
  * added floor_item/key, ceiling_item/key methods, thanks to Dai Mikurube

Version 1.0.0 29.12.2011

  * bug fixes
  * status: 5 - Production/Stable
  * removed useless TreeIterator() class and T.treeiter() method.
  * patch from Max Motovilov to use Visual Studio 2008 for building C-extensions

Version 0.4.0 14.04.2011

  * API change!!!
  * full Python 3 support, also for Cython implementations
  * removed user defined compare() function - keys have to be comparable!
  * removed T.has_key(), use 'key in T'
  * keys(), items(), values() generating 'views'
  * removed iterkeys(), itervalues(), iteritems() methods
  * replaced index slicing by key slicing
  * removed index() and item_at()
  * repr() produces a correct representation
  * installs on systems without cython (tested with pypy)
  * new license: GNU Library or Lesser General Public License (LGPL)

Version 0.3.2 09.04.2011

  * added itemslice(startkey, endkey), keyslice(startkey, endkey),
    valueslice(startkey, endkey) - slicing by keys
  * tested with pypy 1.4.1, damn fast
  * Pure Python trees are working with Python 3
  * No Cython implementation for Python 3

Version 0.3.1 10.09.2010

  * runs with Python 2.7

Version 0.3.0 11.05.2010

  * low level functions written as c-module only interface to python is a cython
    module
  * support for the pickle protocol

Version 0.2.1 06.05.2010

  * added delslice del T[0:3] -> remove treenodes 0, 1, 2
  * added discard -> remove key without KeyError if not found
  * added heap methods: min, max, nlarges, nsmallest ...
  * added Set methods -> intersection, differnce, union, ...
  * added slicing: T[5:10] get items with position (not key!)  5, 6, 7, 8, 9
          T[5] get item with key! 5
  * added index: T.index(key) -> get position of item <key>
  * added item_at: T.item_at(0) -> get item at position (not key!) 0
          T.item_at(0) O(n)! <==> T.min_item() O(log(n))

Version 0.2.0 - 03.05.2010

  * TreeMixin Class as base for Python-Trees and as Mixin for Cython-Trees

Version 0.1.0 - 27.04.2010

  * Alpha status
  * Initial release
