RELEASE_NOTES.rst 28 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810
  1. =======================
  2. Release notes for bcolz
  3. =======================
  4. Changes from 1.2.1 to 1.2.2
  5. ===========================
  6. #XXX version-specific blurb XXX#
  7. Changes from 1.2.0 to 1.2.1
  8. ===========================
  9. - C-Blosc internal sources updated to 1.14.3. This basically means that
  10. internal Zstd sources are bumped to 1.3.4, which may lead to noticeable
  11. improved speeds (specially for low compression ratios).
  12. - `np.datetime64` and other scalar objects that have `__getitem__()` are now
  13. supported in _eval_blocks(). PR #377. Thanks to apalepu23.
  14. - Vendored cpuinfo.py updated to 4.0.0 (ARM aarch64 is recognized now).
  15. - Allow setup.py to work even if not on Intel or ARM or PPC archs are found.
  16. Changes from 1.1.2 to 1.2.0
  17. ===========================
  18. - Support for Python <= 2.6 or Python <= 3.4 has been deprecated.
  19. - C-Blosc internal sources updated to 1.14.2. Using a C-Blosc library
  20. > 1.14 is important for forward compatibility. For more info see:
  21. http://blosc.org/posts/new-forward-compat-policy/
  22. Changes from 1.1.1 to 1.1.2
  23. ===========================
  24. - Updated setup.py to include Zstd codec in Blosc. Fixes #331.
  25. Changes from 1.1.0 to 1.1.1
  26. ===========================
  27. - Allow to delete all the columns in a ctable. Fixes #306.
  28. - Double-check the value of a column that is being overwritten. Fixes
  29. #307.
  30. - Use `pkg_resources.parse_version()` to test for version of packages.
  31. Fixes #322.
  32. - Now all the columns in a ctable are enforced to be a carray instance
  33. in order to simplify the internal logic for handling columns.
  34. - Now, the cparams are preserved during column replacement, e.g.:
  35. `ct['f0'] = x + 1`
  36. will continue to use the same cparams than the original column.
  37. - C-Blosc updated to 1.11.2.
  38. - Added a new `defaults_ctx` context so that users can select defaults
  39. easily without changing global behaviour. For example::
  40. with bcolz.defaults_ctx(vm="python", cparams=bcolz.cparams(clevel=0)):
  41. cout = bcolz.eval("(x + 1) < 0")
  42. - Fixed a crash occurring in `ctable.todataframe()` when both `columns`
  43. and `orient='columns'` were specified. PR #311. Thanks to Peter
  44. Quackenbush.
  45. Changes from 1.0.0 to 1.1.0
  46. ===========================
  47. - Defaults when creating carray/ctable objects are always scalars now.
  48. The new approach follows what was documented and besides it prevents
  49. storing too much JSON data in meta/ directory.
  50. - Fixed an issue with bcolz.iterblocks() not working on multidimensional
  51. carrays.
  52. - It is possible now to create ctables with more than 255 columns. Thanks
  53. to Skipper Seabold. Fixes #131 (via PR #303).
  54. - Added a new `quantize` filter for allowing lossy compression on
  55. floating point data. Data is quantized using
  56. np.around(scale*data)/scale, where scale is 2**bits, and bits is
  57. determined from the quantize value. For example, if quantize=1, bits
  58. will be 4. 0 means that the quantization is disabled.
  59. Here it is an example of what you can get from the new quantize::
  60. In [9]: a = np.cumsum(np.random.random_sample(1000*1000)-0.5)
  61. In [10]: bcolz.carray(a, cparams=bcolz.cparams(quantize=0)) # no quantize
  62. Out[10]:
  63. carray((1000000,), float64)
  64. nbytes: 7.63 MB; cbytes: 6.05 MB; ratio: 1.26
  65. cparams := cparams(clevel=5, shuffle=1, cname='blosclz', quantize=0)
  66. [ -2.80946077e-01 -7.63925274e-01 -5.65575047e-01 ..., 3.59036158e+02
  67. 3.58546624e+02 3.58258860e+02]
  68. In [11]: bcolz.carray(a, cparams=bcolz.cparams(quantize=1))
  69. Out[11]:
  70. carray((1000000,), float64)
  71. nbytes: 7.63 MB; cbytes: 1.41 MB; ratio: 5.40
  72. cparams := cparams(clevel=5, shuffle=1, cname='blosclz', quantize=1)
  73. [ -2.50000000e-01 -7.50000000e-01 -5.62500000e-01 ..., 3.59036158e+02
  74. 3.58546624e+02 3.58258860e+02]
  75. In [12]: bcolz.carray(a, cparams=bcolz.cparams(quantize=2))
  76. Out[12]:
  77. carray((1000000,), float64)
  78. nbytes: 7.63 MB; cbytes: 2.20 MB; ratio: 3.47
  79. cparams := cparams(clevel=5, shuffle=1, cname='blosclz', quantize=2)
  80. [ -2.81250000e-01 -7.65625000e-01 -5.62500000e-01 ..., 3.59036158e+02
  81. 3.58546624e+02 3.58258860e+02]
  82. In [13]: bcolz.carray(a, cparams=bcolz.cparams(quantize=3))
  83. Out[13]:
  84. carray((1000000,), float64)
  85. nbytes: 7.63 MB; cbytes: 2.30 MB; ratio: 3.31
  86. cparams := cparams(clevel=5, shuffle=1, cname='blosclz', quantize=3)
  87. [ -2.81250000e-01 -7.63671875e-01 -5.65429688e-01 ..., 3.59036158e+02
  88. 3.58546624e+02 3.58258860e+02]
  89. As you can see, the compression ratio can improve pretty significantly
  90. when using the quantize filter. It is important to note that by using
  91. quantize you are loosing precision on your floating point data.
  92. Also note how the first elements in the quantized arrays have less
  93. significant digits, but not the last ones. This is a side effect due
  94. to how bcolz stores the trainling data that do not fit in a whole
  95. chunk. But in general you should expect a loss in precision.
  96. - Fixed a bug in carray.__getitem__() when the chunksize was not an
  97. exact multiple of the blocksize. Added test:
  98. test_carray.py::getitemMemoryTest::test06.
  99. - bcolz now follows the convention introduced in NumPy 1.11 for
  100. representing datetime types with TZ="naive" (i.e. with no TZ info in
  101. the representation). See https://github.com/numpy/numpy/blob/master/doc/release/1.11.0-notes.rst#datetime64-changes.
  102. - bcolz now releases the GIL during Blosc compression/decompression. In
  103. multi-threaded environments, a single-threaded, contextual version of
  104. Blosc is used instead (this is useful for frameworks like Dask).
  105. - Removed from the ``cbytes`` count the storage overhead due to the
  106. internal container. This overhead was media-dependent, and it was
  107. just a guess anyway.
  108. - The -O1 compilation flag has been removed and bcolz is compiled now at
  109. full optimization. I have tested that for several weeks, without any
  110. segfault, so this should be pretty safe.
  111. - Added information about the chunklen, chunksize and blocksize (the
  112. size of the internal blocks in a Blosc chunk) in the repr() of a
  113. carray.
  114. - New accelerated codepath for `carray[:] = array` assignation. This
  115. operation should be close in performance to `carray.copy()` now.
  116. - carray object does implement the __array__() special method
  117. (http://docs.scipy.org/doc/numpy-1.10.1/reference/arrays.classes.html#numpy.class.__array__)
  118. now. With this, interoperability with numpy arrays is easier and
  119. faster:
  120. Before __array__()::
  121. >>> a = np.arange(1e7)
  122. >>> b = np.arange(1e7)
  123. >>> ca = bcolz.carray(a)
  124. >>> cb = bcolz.carray(b)
  125. >>> %timeit ca + a
  126. 1 loop, best of 3: 1.06 s per loop
  127. >>> %timeit np.array(bcolz.eval("ca*(cb+1)"))
  128. 1 loop, best of 3: 1.18 s per loop
  129. After __array__()::
  130. >>> %timeit ca + a
  131. 10 loops, best of 3: 45.2 ms per loop
  132. >>> %timeit np.array(bcolz.eval("ca*(cb+1)"))
  133. 1 loop, best of 3: 133 ms per loop
  134. And it also allows to use bcolz carrays more efficiently in some scenarios::
  135. >>> import numexpr
  136. >>> %timeit numexpr.evaluate("ca*(cb+1)")
  137. 10 loops, best of 3: 76.2 ms per loop
  138. >>> %timeit numexpr.evaluate("a*(b+1)")
  139. 10 loops, best of 3: 25.5 ms per loop # ndarrays are still faster
  140. - Internal C-Blosc sources bumped to 1.9.2.
  141. - Dask (dask.pydata.org) is supported as another virtual machine backed
  142. for bcolz.eval(). Now, either Numexpr (the default) or Dask or even
  143. the Python interpreter can be used to evaluate complex expressions.
  144. - The default compressor has been changed from 'blosclz' to 'lz4'.
  145. BloscLZ tends to be a bit faster when decompressing, but LZ4 is
  146. quickly catching up as the compilers are making progress with memory
  147. access optimizations. Also, LZ4 is considerably faster during
  148. compression and in general compresses better too.
  149. - The supported SIMD extensions (SSE2 and AVX2) of the current platform
  150. are auto-detected so that the affected code will selectively be
  151. included from vendored C-Blosc sources.
  152. - Added a new `blen` parameter to bcolz.eval() so that the user can
  153. select the length of the operand blocks to be operated with.
  154. - New fine-tuning of the automatically computed blen in bcolz.eval() for
  155. better times and reduced memory consumption.
  156. - Added a new `out_flavor` parameter to the ctable.iter() and
  157. ctable.where() for specifying the type of result rows. Now one can
  158. select namedtuple (default), tuple or ndarray.
  159. - The performance of carray.whereblocks() has been accelerated 2x due to
  160. the internal use of tuples instead of named tuples.
  161. - New ctable.fetchwhere() method for getting the rows fulfilling some
  162. condition in one go.
  163. - Parameter `outfields` in ctable.whereblocks has been renamed to
  164. `outcols` for consistency with the other methods. The previous
  165. 'outfields' name is considered a bug and hence is not supported
  166. anymore.
  167. - bcolz.fromiter() has been streamlined and optimized. The result is
  168. that it uses less memory and can go faster too (20% ~ 50%, depending
  169. on the use).
  170. - The values for defaults.eval_out_flavor has been changed to ['bcolz',
  171. 'numpy'] instead of previous ['carray', 'numpy']. For backward
  172. compatibility the 'carray' value is still allowed.
  173. - The `bcolz.defaults.eval_out_flavor` and `bcolz.defaults.eval_vm` have
  174. been renamed to `bcolz.defaults.out_flavor` and `bcolz.defaults.vm`
  175. because they can be used in other places than just bcolz.eval(). The
  176. old `eval_out_flavor` and `eval_vm` properties of the `defaults`
  177. object are still kept for backward compatibility, but they are not
  178. documented anymore and its use is discouraged.
  179. - Added a new `user_dict` parameter in all ctable methods that evaluate
  180. expressions. For convenience, this dictionary is updated internally
  181. with ctable columns, locals and globals from the caller.
  182. - Small optimization for using the recently added re_evaluate() function
  183. in numexpr for faster operation of numexpr inside loops using the same
  184. expression (quite common scenario).
  185. - Unicode strings are recognized now when imported from a pandas
  186. dataframe, making the storage much more efficient. Before unicode was
  187. converted into 'O'bject type, but the change to 'U'nicode should be
  188. backward compatible.
  189. - Added a new `vm` parameter to specify the virtual machine for doing
  190. internal operations in ctable.where(), ctable.fetchwhere() and
  191. ctable.whereblocks().
  192. Changes from 0.12.1 to 1.0.0
  193. ============================
  194. - New version of embedded C-Blosc (bumped to 1.8.1). This allows for
  195. using recent C-Blosc features like the BITSHUFFLE filter that
  196. generally allows for better compression ratios at the expense of some
  197. slowdown. Look into the carray tutorial on how to use the new
  198. BITSHUFFLE filter.
  199. - Use the -O1 flag for compiling the included C-Blosc sources on Linux.
  200. This represents slower performance, but fixes nasty segfaults as can
  201. be seen in issue #110 of python-blosc. Also, it prints a warning for
  202. using an external C-Blosc library.
  203. - Improved support for operations with carrays of shape (N, 1). PR #296.
  204. Fixes #165 and #295. Thanks to Kevin Murray.
  205. - Check that column exists before inserting a new one in a ctable via
  206. `__setitem__`. If it exists, the existing column is overwritten.
  207. Fixes #291.
  208. - Some optimisations have been made within ``carray.__getitem__`` to
  209. improve performance when extracting a slice of data from a
  210. carray. This is particularly relevant when running some computation
  211. chunk-by-chunk over a large carray. (#283 @alimanfoo).
  212. Changes from 0.12.0 to 0.12.1
  213. =============================
  214. - ``setup.py`` now defers operations requiring ``numpy`` and ``Cython``
  215. until after those modules have been installed by ``setuptools``. This
  216. means that users no longer need to pre-install ``numpy`` and
  217. ``Cython`` to install ``bcolz``.
  218. Changes from 0.11.4 to 0.12.0
  219. =============================
  220. - Fixes an installation glitch for Windows. (#268 @cgohlke).
  221. - The tutorial is now a Jupyter notebook. (#261 @FrancescElies).
  222. - Replaces numpy float string specifier in test with numpy.longdouble
  223. (#271 @msarahan).
  224. - Fix for allowing the use of variables of type string in `eval()` and
  225. other queries. (#273, @FrancescAlted).
  226. - The size of the tables during import/export to HDF5 are honored now
  227. via the `expectedlen` (bcolz) and `expectedrows` (PyTables)
  228. parameters (@FrancescAlted).
  229. - Update only the valid part of the last chunk during boolean
  230. assignments. Fixes a VisibleDeprecationWarning with NumPy 1.10
  231. (@FrancescAlted).
  232. - More consistent string-type checking to allow use of unicode strings
  233. in Python 2 for queries, column selection, etc. (#274 @BrenBarn).
  234. - Installation no longer fails when listed as dependency of project
  235. installed via setup.py develop or setup.py install. (#280 @mindw,
  236. fixes #277).
  237. - Paver setup has been deprecated (see #275).
  238. Changes from 0.11.3 to 0.11.4
  239. =============================
  240. - The .pyx extension is not packed using the absolute path anymore.
  241. (#266 @FrancescAlted)
  242. Changes from 0.11.2 to 0.11.3
  243. =============================
  244. - Implement feature #255 bcolz.zeros can create new ctables too, either
  245. empty or filled with zeros. (#256 @FrancescElies @FrancescAlted)
  246. Changes from 0.11.1 to 0.11.2
  247. =============================
  248. - Changed the `setuptools>18.3` dependency to `setuptools>18.0` because
  249. Anaconda does not have `setuptools > 18.1` yet.
  250. Changes from 0.11.0 to 0.11.1
  251. =============================
  252. - Do not try to flush when a ctable is opened in 'r'ead-only mode.
  253. See issue #252.
  254. - Added the mock dependency for Python2.
  255. - Added a `setuptools>18.3` dependency.
  256. - Several fixes in the tutorial (Francesc Elies).
  257. Changes from 0.10.0 to 0.11.0
  258. =============================
  259. - Added support for appending a np.void to ctable objects
  260. (closes ticket #229 @eumiro)
  261. - Do not try to flush when an carray is opened in 'r'ead-only mode.
  262. (closes #241 @FrancescAlted).
  263. - Fix appending of object arrays to already existing carrays
  264. (closes #243 @cpcloud)
  265. - Great modernization of setup.py by using new versioning and many
  266. other improvements (PR #239 @mindw).
  267. Changes from 0.9.0 to 0.10.0
  268. ============================
  269. - Fix pickle for in-memory carrays. (#193 #194 @dataisle @esc)
  270. - Implement chunks iterator, which allows the following syntax
  271. ``for chunk_ in ca._chunks``, added "internal use" indicator to carray
  272. chunks attribute. (#153 @FrancescElies and @esc)
  273. - Fix a memory leak and avoid copy in ``chunk.getudata``. (#201 #202 @esc)
  274. - Fix the error message when trying to open a fresh ctable in an existing
  275. rootdir. (#191 @twiecki @esc)
  276. - Solve #22 and be more specific about ``carray`` private methods.
  277. (#209 @FrancescElies @FrancescAlted)
  278. - Implement context manager for ``carray`` and ``ctable``.
  279. (#135 #210 @FrancescElies and @esc)
  280. - Fix handling and API for leftovers. (#72 #132 #211 #213 @FrancescElies @esc)
  281. - Fix bug for incorrect leftover value. (#208 @waylonflinn)
  282. - Documentation: document how to write extensions, update docstrings and
  283. mention the with statement / context manager. (#214 @FrancescElies)
  284. - Various refactorings and cleanups. (#190 #198 #197 #199 #200)
  285. - Fix bug creating carrays from transposed arrays without explicit dtype.
  286. (#217 #218 @sdvillal)
  287. Changes from 0.8.1 to 0.9.0
  288. ===========================
  289. - Implement ``purge``, which removes data for on-disk carrays. (#130 @esc)
  290. - Implement ``addcol/delcol`` to properly handle on-disk ctable (#112/#151 @cpcloud @esc)
  291. - Adding io-mode to the ``repr`` for carrays. (#124 @esc)
  292. - Implement ``auto_flush`` which allows ctables to flush themselves during
  293. operations that modify (write) data.
  294. (#140 #152 @FrancescElies @CarstVaartjes @esc)
  295. - Implement ``move`` for ctable, which allows disk-based carray to be moved
  296. (``mv``) into the root directory of the ctable.
  297. (#140 #152 #170 @FrancescElies @CarstVaartjes @esc)
  298. - Distribute ``carray_ext.pxd`` as part of the package. (#159 @ARF)
  299. - Add ``safe=`` keyword argument to control dtype/stride checking on append
  300. (#163 @mrocklin)
  301. - Hold GIL during c-blosc compression/decompression, avoiding some segfaults
  302. (#166 @mrocklin)
  303. - Fix ``dtype`` for multidimensional columns in a ctable (#136 #172 @alimanfoo)
  304. - Fix to allow adding strings > len 1 to ctable (#178 @brentp)
  305. - Sphinx based API documentation is now built from the docstrings in the Python
  306. sourcecode (#171 @esc)
  307. Changes from 0.8.0 to 0.8.1
  308. ===========================
  309. - Downgrade to Blosc v1.4.1 (#144 @esc)
  310. - Fix license include (#143 @esc)
  311. - Upgrade to Cython 0.22 (#145 @esc)
  312. Changes from 0.7.3 to 0.8.0
  313. ===========================
  314. - Public API for ``carray`` (#98 @FrancescElies and #esc)
  315. A Cython definition file ``carrat_ext.pxd`` was added that contains the
  316. definitions for the ``carray``, ``chunks`` and ``chunk`` classes. This was
  317. done to allow more complex programs to be built on the compressed container
  318. primitives provided by bcolz.
  319. - Overhaul the release procedure
  320. - Other miscellaneous fixes and improvements
  321. Changes from 0.7.2 to 0.7.3
  322. ===========================
  323. - Update to Blosc ``v1.5.2``
  324. - Added support for pickling persistent carray/ctable objects. Basically,
  325. what is serialized is the ``rootdir`` so the data is still sitting on disk
  326. and the original contents in ``rootdir`` are still needed for unpickling.
  327. (#79 @mrocklin)
  328. - Fixed repr-ing of ``datetime64`` ``carray`` objects (#99 @cpcloud)
  329. - Fixed Unicode handling for column addressing (#91 @CarstVaartjes)
  330. - Conda recipe and ``.binstar.yml`` (#88 @mrocklin and @cpcloud)
  331. - Removed ``unittest2`` as a run-time dependency (#90 @mrocklin)
  332. - Various typo fixes. (#75 @talumbau, #86 @catawbasam and #83 @bgrant)
  333. - Other miscellaneous fixes and improvements
  334. Changes from 0.7.1 to 0.7.2
  335. ===========================
  336. - Fix various test that were failing on 32 bit, especially a segfault
  337. - Fix compatibility with Numpy 1.9
  338. - Fix compatibility with Cython 0.21.
  339. - Allow tests to be executed with ``nosetests``.
  340. - Include git hash in version info when applicable.
  341. - Initial support for testing on Travis CI.
  342. - Close file handle when ``nodepath`` arg to ``ctable.fromhdf5`` is incorrect.
  343. - Introduced a new ``carray.view()`` method returning a light-weight
  344. carray object describing the same data than the original carray. This
  345. is mostly useful for iterators, but other uses could be devised as
  346. well.
  347. - Each iterator now return a view (see above) of the original object, so
  348. things like::
  349. >>> bc = bcolz.ctable([[1, 2, 3], [10, 20, 30]], names=['a', 'b'])
  350. >>> bc.where('a >= 2') # call .where but don't do anything with it
  351. <itertools.imap at 0x7fd7a84f5750>
  352. >>> list(bc['b']) # later iterate over table, get where result
  353. [10, 20, 30]
  354. works as expected now.
  355. - Added a workaround for dealing with Unicode types.
  356. - Fix writing absolute paths into the persistent metadata.
  357. - ``next(carray)`` calls now work as they should.
  358. - Fix the ``__repr__`` method of the ``chunk`` class.
  359. - Prevent sometimes incorrect assignment of dtype to name with fromhdf5.
  360. - Various miscellaneous bug-fixes, pep8 improvements and typo-fixes.
  361. Changes from 0.7.0 to 0.7.1
  362. ===========================
  363. - Return the outcome of the test for checking that in standalone
  364. programs. Thanks to Ilan Schnell for suggesting that.
  365. - Avoiding importing lists of ints as this has roundtrip problems in
  366. 32-bit platforms.
  367. - Got rid of the nose dependency for Python 2.6. Thanks to Ilan Schnell
  368. for the suggestion.
  369. Changes from 0.5.1 to 0.7.0
  370. ===========================
  371. - Renamed the ``carray`` package to ``bcolz``.
  372. - Added support for Python 3.
  373. - Added a new function `iterblocks` for quickly returning blocks of
  374. data, not just single elements. ctable receives a new `whereblocks`
  375. method, which is the equivalent of `where` but returning data blocks.
  376. - New pandas import/export functionality via `ctable.fromdataframe()`
  377. and `ctable.todataframe()`.
  378. - New HDF5/PyTables import/export functionality via `ctable.fromhdf5()`
  379. and `ctable.tohdf5()`.
  380. - Support for c-blosc 1.4.1. This allows the use of different
  381. compressors via the new `cname` parameter in the `cparams` class, and
  382. also to be used in platforms not supporting unaligned access.
  383. - Objects are supported in carray containers (not yet for ctable).
  384. - Added a new `free_cachemem()` method for freeing internal caches after
  385. reading/querying carray/ctable objects.
  386. - New `cparams.setdefaults()` method for globally setting defaults in
  387. compression parameters during carray/ctable creation.
  388. - Disabled multi-threading in both Blosc and numexpr because it is not
  389. delivering the promised speedups yet. This can always be re-activated
  390. by using `blosc_set_nthreads(nthreads)` and
  391. `numexpr.set_num_threads(nthreads)`.
  392. Changes from 0.5 to 0.5.1
  393. =========================
  394. - Added the missing bcolz.tests module in setup.py.
  395. Changes from 0.4 to 0.5
  396. =======================
  397. - Introduced support for persistent objects. Now, every carray and
  398. ctable constructor support a new `rootdir` parameter where you can
  399. specify the path where you want to make the data stored.
  400. The format chosen is explained in the 'persistence.rst' file, except
  401. that the blockpack format is still version 1 (that will probably
  402. change in future versions). Also, JSON is used for storing metadata
  403. instead of YAML. This is mainly for avoiding a new library
  404. dependency.
  405. - New `open(rootdir, mode='a')` top level function so as to open on-disk
  406. bcolz objects.
  407. - New `flush()` method for `carray` and `ctable` objects. This is
  408. useful for flushing data to disk in persistent objects.
  409. - New `walk(dir, classname=None, mode='a')` top level function for
  410. listing carray/ctable objects handing from `dir`.
  411. - New `attrs` accessor is provided, so that users can store
  412. its own metadata (in a persistent way, if desired).
  413. - Representation of carray/ctable objects is based now on the same code
  414. than NumPy.
  415. - Reductions (`sum` and `prod`) work now, even with the `axis` parameter
  416. (when using the Numexpr virtual machine).
  417. Changes from 0.3.2 to 0.4
  418. =========================
  419. - Implemented a `skip` parameter for iterators in `carray` and `ctable`
  420. objects. This complements `limit` for selecting the number of
  421. elements to be returned by the iterator.
  422. - Implemented multidimensional indexing for carrays. Than means that
  423. you can do::
  424. >>> a = ca.zeros((2,3))
  425. Now, you can access any element in any dimension::
  426. >>> a[1]
  427. array([ 0., 0., 0.])
  428. >>> a[1,::2]
  429. array([ 0., 0.])
  430. >>> a[1,1]
  431. 0.0
  432. - `dtype` and `shape` attributes follow now ndarray (NumPy) convention.
  433. The `dtype` is always a scalar and the dimensionality is added to the
  434. `shape` attribute. Before, all the additional dimensionality was in
  435. the `dtype`. The new convention should be more familiar for
  436. everybody.
  437. Changes from 0.3.1 to 0.3.2
  438. ===========================
  439. - New `vm` parameter for `eval()` that allows to choose a 'python' or
  440. 'numexpr' virtual machine during operations. If numexpr is not
  441. detected, the default will be 'python'.
  442. That means that you can use any function available in Python for
  443. evaluating bcolz expressions and that numexpr is not necessary
  444. anymore for using `eval()`.
  445. - New `out_flavor` parameter for `eval()` that allows to choose the
  446. output type. It can be 'bcolz' or 'numpy'.
  447. - New `defaults.py` module that enables the user to modify the defaults
  448. for internal bcolz operation. Defaults that are currently
  449. implemented: `eval_out_flavor` and `eval_vm`.
  450. - Fixed a bug with `carray.sum()` for multidimensional types.
  451. Changes from 0.3 to 0.3.1
  452. =========================
  453. - Added a `limit` parameter to `iter`, `where` and `wheretrue` iterators
  454. of carray object and to `iter` and `where` of ctable object.
  455. - Full support for multidimensional carrays. All types are supported,
  456. except the 'object' type (that applies to unidimensional carrays too).
  457. - Added a new `reshape()` for reshaping to new (multidimensional)
  458. carrays. This supports the same functionality than `reshape()` in
  459. NumPy.
  460. - The behaviour of a carray was altered after using an iterator. This
  461. has been fixed. Thanks to Han Genuit for reporting.
  462. Changes from 0.2 to 0.3
  463. =======================
  464. - Added a new `ctable` class that implements a compressed, column-wise
  465. table.
  466. - New `arange()` constructor for quickly building carray objects (this
  467. method is much faster than using `fromiter()`).
  468. - New `zeros()` constructor for quickly building zeroed carray objects.
  469. This is way faster than its NumPy counterpart.
  470. - New `ones()` constructor for quickly building 1's carray objects.
  471. Very fast.
  472. - New `fill()` constructor for quickly building carray objects with a
  473. filling value. This is very fast too.
  474. - New `trim()` method for `carray` and `ctable` objects for trimming
  475. items.
  476. - New `resize()` method for `carray` and `ctable` objects for resizing
  477. lengths.
  478. - New `test()` function that runs the complete test suite.
  479. - Added a new `eval()` function to evaluate expressions including any
  480. combination of carrays, ndarrays, sequences or scalars. Requires
  481. Numexpr being installed.
  482. - Added new `__len__()` and `__sizeof__()` special methods for both
  483. `carray` and `ctable` objects.
  484. - New `sum()` method for `carray` that computes the sum of the array
  485. elements.
  486. - Added new `nbytes` and `cbytes` properties for `carray` and `ctable`
  487. objects. The former accounts for the size of the original
  488. (non-compressed) object, and the later for the actual compressed
  489. object.
  490. - New algorithm for computing an optimal chunk size for carrays based on
  491. the new `expectedlen` argument.
  492. - Added `chunklen` property for `carray` that allows querying the chunk
  493. length (in rows) for the internal I/O buffer.
  494. - Added a new `append(rows)` method to `ctable` class.
  495. - Added a new `wheretrue()` iterator for `carray` that returns the
  496. indices for true values (only valid for boolean arrays).
  497. - Added a new `where(boolarr)` iterator for `carray` that returns the
  498. values where `boolarr` is true.
  499. - New idiom ``carray[boolarr]`` that returns the values where `boolarr`
  500. is true.
  501. - New idiom ``ctable[boolarr]`` that returns the rows where `boolarr` is
  502. true.
  503. - Added a new `eval()` method for `ctable` that is able to evaluate
  504. expressions with columns. It needs numexpr to be installed.
  505. - New idiom ``ctable[boolexpr]`` that returns the rows fulfilling the
  506. boolean expression. Needs numexpr.
  507. - Added fancy indexing (as a list of integers) support to `carray` and
  508. `ctable`.
  509. - Added `copy(clevel, shuffle)` method to both `carray` and `ctable`
  510. objects.
  511. - Removed the `toarray()` method in `carray` as this was equivalent to
  512. ``carray[:]`` idiom.
  513. - Renamed `setBloscMaxThreads()` to `blosc_set_num_threads()` and
  514. `whichLibVersion()` to `blosc_version()` to follow bcolz name
  515. conventions more closely.
  516. - Added a new `set_num_threads()` to set the number of threads in both
  517. Blosc and Numexpr (if available).
  518. - New `fromiter()` constructor for creating `carray` objects from
  519. iterators. It follows the NumPy API convention.
  520. - New `cparams(clevel=5, shuffle=True)` class to host all params related
  521. with compression.
  522. - Added more indexing support for `carray.__getitem__()`. All indexing
  523. modes present in NumPy are supported now, including fancy indexing.
  524. The only exception are negative steps in ``carray[start:stop:-step]``.
  525. - Added support for `bcolz.__setitem__()`. All indexing modes present
  526. in NumPy are supported, including fancy indexing. The only exception
  527. are negative steps in ``carray[start:stop:-step] = values``.
  528. - Added support for `ctable.__setitem__()`. All indexing modes present
  529. in NumPy are supported, including fancy indexing. The only exception
  530. are negative steps in ``ctable[start:stop:-step] = values``.
  531. - Added new `ctable.__iter__()`, `ctable.iter()` and `ctable.where()`
  532. iterators mimicking the functionality in carray object.
  533. Changes from 0.1 to 0.2
  534. =======================
  535. - Added a couple of iterators for carray: `__iter__()` and `iter(start,
  536. stop, step)`. The difference is that the later does accept slices.
  537. - Added a `__len__()` method.
  538. .. Local Variables:
  539. .. mode: rst
  540. .. coding: utf-8
  541. .. fill-column: 72
  542. .. End: