1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433 434 435 436 437 438 439 440 441 442 443 444 445 446 447 448 449 450 451 452 453 454 455 456 457 458 459 460 461 462 463 464 465 466 467 468 469 470 471 472 473 474 475 476 477 478 479 480 481 482 483 484 485 486 487 488 489 490 491 492 493 494 495 496 497 498 499 500 501 502 503 504 505 506 507 508 509 510 511 512 513 514 515 516 517 518 519 520 521 522 523 524 525 526 527 528 529 530 531 532 533 534 535 536 537 538 539 540 541 542 543 544 545 546 547 548 549 550 551 552 553 554 555 556 557 558 559 560 561 562 563 564 565 566 567 568 569 570 571 572 573 574 575 576 577 578 579 580 581 582 583 584 585 586 587 588 589 590 591 592 593 594 595 596 597 598 599 600 601 602 603 604 605 606 607 608 609 610 611 612 613 614 615 616 617 618 619 620 621 622 623 624 625 626 627 628 629 630 631 632 633 634 635 636 637 638 639 640 641 642 643 644 645 646 647 648 649 650 651 652 653 654 655 656 657 658 659 660 661 662 663 664 665 666 667 668 669 670 671 672 673 674 675 676 677 678 679 680 681 682 683 684 685 686 687 688 689 690 691 692 693 694 695 696 697 698 699 700 701 702 703 704 705 706 707 708 709 710 711 712 713 714 715 716 717 718 719 720 721 722 723 724 725 726 727 728 729 730 731 732 733 734 735 736 737 738 739 740 741 742 743 744 745 746 747 748 749 750 751 752 753 754 755 756 757 758 759 760 761 762 763 764 765 766 767 768 769 770 771 772 773 774 775 776 777 778 779 780 781 782 783 784 785 786 787 788 789 790 791 792 793 794 795 796 797 798 799 800 801 802 803 804 805 806 807 808 809 810 811 812 813 814 815 816 817 818 819 820 821 822 823 824 825 826 827 828 829 830 831 832 833 834 835 836 837 838 839 840 841 842 843 844 845 846 847 848 849 850 851 852 853 854 855 856 857 858 859 860 861 862 863 864 865 866 867 868 869 870 871 872 873 874 875 876 877 878 879 880 881 882 883 884 885 886 887 888 889 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906
|
=====================================
Release notes for NumExpr 2.14 series
=====================================
Changes from 2.14.0 to 2.14.1
-----------------------------
* Rolled back static typing support to ensure compatibiity with NumPy 1.26.
* Added CI tests for NumPy 1.26
Changes from 2.13.1 to 2.14.0
-----------------------------
* Numerical stability for overflow has been improved for ``tan`` / ``tanh``
to handle possible overflows for complex numbers.
* Static typing support has been added, making NumExpr compatible with
static type checkers like `mypy` and `pyright`.
Thanks to Joren Hammudoglu (@jorenham) for the work.
Changes from 2.13.0 to 2.13.1
-----------------------------
* Patch to maximum/minimum functions in order to match NumPy NaN handling
* Patch to convert '+'->'|' and '*'->'&' for booleans
Changes from 2.12.1 to 2.13.0
-----------------------------
* New functionality has been added:
* Bitwise operators (and, or, not, xor): `&, |, ~, ^`
* New binary arithmetic operator for floor division: `//`
* New functions: `signbit`, `hypot`, `copysign`, `nextafter`, `maximum`, `minimum`, `log2`, `trunc`, `round` and `sign`.
* Also enables integer outputs for integer inputs for `abs`, `copy`, `ones_like`, `sign` and `round`.
Thanks to Luke Shaw for the contributions.
* New wheels for Python 3.14 and 3.14t are provided.
Changes from 2.12.0 to 2.12.1
-----------------------------
* Added complex counterparts for isnan/isfinite/isinf functions.
Thanks to Luke Shaw.
* Updated documentation for the new functions and instructions
for adding new functions to the virtual machine. Thanks to Luke Shaw.
* Fixed MKL support; it was broken in 2.12.0. Thanks to
Christoph Gohlke for reporting the issue.
Changes from 2.11.0 to 2.12.0
-----------------------------
* Added isnan/isfinite/isinf functions. Thanks to Luke Shaw.
* New instructions for adding new functions to the virtual machine.
They are available at ADDFUNCS.rst. Thanks to Luke Shaw.
* We are distributing binary wheels for Python 3.14 and 3.14t now.
* We are distributing musllinux wheels too! Thanks to Clément Robert.
Changes from 2.10.2 to 2.11.0
-----------------------------
* Initial support for free-threaded Python 3.13t has been added.
This is still experimental, so please report any issues you find.
For more info, see discussions PRs #504, #505 and #508.
Thanks to @andfoy, @rgommers and @FrancescAlted for the work.
* Fix imaginary evaluation in the form of `1.1e1j`. This was
previously not supported and would raise an error. Thanks to @27rabbitlt
for the fix.
* The test suite has been modernized to use `pytest` instead of `unittest`.
This should make it easier to run the tests and contribute to the project.
* Python 3.10 is now the minimum supported version.
Changes from 2.10.1 to 2.10.2
-----------------------------
* Better support for CPUs that do not have a power of 2 number of
cores. See #479 and #490. Thanks to @avalentino.
* Allow numexpr to run with the multithreading package in Python.
See PR #496. Thanks to @emmaai
* Wheels for Python 3.13 are now provided.
Changes from 2.10.0 to 2.10.1
-----------------------------
* The default number of 'safe' threads has been upgraded to 16 (instead of
previous 8). That means that if your CPU has > 16 cores, the default is
to use 16. You can always override this with the "NUMEXPR_MAX_THREADS"
environment variable.
* NumPy 1.23 is now the minimum supported.
* Preliminary support for Python 3.13. Thanks to Karolina Surma.
* Fix tests on nthreads detection (closes: #479). Thanks to @avalentino.
* The build process has been modernized and now uses the `pyproject.toml`
file for more of the configuration options.
Changes from 2.9.0 to 2.10.0
----------------------------
* Support for NumPy 2.0.0. This is still experimental, so please
report any issues you find. Thanks to Clément Robert and Thomas
Caswell for the work.
* Avoid erroring when OMP_NUM_THREADS is empty string. Thanks to
Patrick Hoefler.
* Do not warn if OMP_NUM_THREAD set.
Changes from 2.8.8 to 2.9.0
---------------------------
* Support for PyPy (see PRs #467 and #740). The full test suite
should pass now, at least for the 3.10 version. Thanks to
@27rabbitlt for most of the work and @mgorny and @mattip for
providing help and additional fixes. Fixes #463.
* Fixed more sanitizer issues (see PR #469). Thanks to @27rabbitlt.
* Modernized the test suite to avoid some warnings.
Changes from 2.8.7 to 2.8.8
---------------------------
* Fix re_evaluate not taking global_dict as argument. Thanks to Teng Liu
(@27rabbitlt).
* Fix parsing of simple complex numbers. Now, `ne.evaluate('1.5j')` works.
Thanks to Teng Liu (@27rabbitlt).
* Fixes for upcoming NumPy 2.0:
* Replace npy_cdouble with C++ complex. Thanks to Teng Liu (@27rabbitlt).
* Add NE_MAXARGS for future numpy change NPY_MAXARGS. Now it is set to 64
to match NumPy 2.0 value. Thanks to Teng Liu (@27rabbitlt).
Changes from 2.8.6 to 2.8.7
---------------------------
* More permissive rules in sanitizing regular expression: allow to access digits
after the . with scientific notation. Thanks to Thomas Vincent.
* Don't reject double underscores that are not at the start or end of a variable
name (pandas uses those), or scientific-notation numbers with digits after the
decimal point. Thanks to Rebecca Palmer.
* Do not use `numpy.alltrue` in the test suite, as it has been deprecated
(replaced by `numpy.all`). Thanks to Rebecca Chen.
* Wheels for Python 3.12. Wheels for 3.7 and 3.8 are not generated anymore.
Changes from 2.8.5 to 2.8.6
---------------------------
* The sanitization can be turned off by default by setting an environment variable,
`set NUMEXPR_SANITIZE=0`
* Improved behavior of the blacklist to avoid triggering on private variables
and scientific notation numbers.
Changes from 2.8.4 to 2.8.5
---------------------------
* A `validate` function has been added. This function checks the inputs, returning
`None` on success or raising an exception on invalid inputs. This function was
added as numerous projects seem to be using NumExpr for parsing user inputs.
`re_evaluate` may be called directly following `validate`.
* As an addendum to the use of NumExpr for parsing user inputs, is that NumExpr
calls `eval` on the inputs. A regular expression is now applied to help sanitize
the input expression string, forbidding '__', ':', and ';'. Attribute access
is also banned except for '.r' for real and '.i' for imag.
* Thanks to timbrist for a fix to behavior of NumExpr with integers to negative
powers. NumExpr was pre-checking integer powers for negative values, which
was both inefficient and caused parsing errors in some situations. Now NumExpr
will simply return 0 as a result for such cases. While NumExpr generally tries
to follow NumPy behavior, performance is also critical.
* Thanks to peadar for some fixes to how NumExpr launches threads for embedded
applications.
* Thanks to de11n for making parsing of the `site.cfg` for MKL consistent among
all shared platforms.
Changes from 2.8.3 to 2.8.4
---------------------------
* Support for Python 3.11 has been added.
* Thanks to Tobias Hangleiter for an improved accuracy complex `expm1` function.
While it is 25 % slower, it is significantly more accurate for the real component
over a range of values and matches NumPy outputs much more closely.
* Thanks to Kirill Kouzoubov for a range of fixes to constants parsing that was
resulting in duplicated constants of the same value.
* Thanks to Mark Harfouche for noticing that we no longer need `numpy` version
checks. `packaging` is no longer a requirement as a result.
Changes from 2.8.1 to 2.8.3
---------------------------
* 2.8.2 was skipped due to an error in uploading to PyPi.
* Support for Python 3.6 has been dropped due to the need to substitute the flag
`NPY_ARRAY_WRITEBACKIFCOPY` for `NPY_ARRAY_UPDATEIFCOPY`. This flag change was
initiated in NumPy 1.14 and finalized in 1.23. The only changes were made to
cases where an unaligned constant was passed in with a pre-allocated output
variable:
```
x = np.empty(5, dtype=np.uint8)[1:].view(np.int32)
ne.evaluate('3', out=x)
```
We think the risk of issues is very low, but if you are using NumExpr as a
expression evaluation tool you may want to write a test for this edge case.
* Thanks to Matt Einhorn (@matham) for improvements to the GitHub Actions build process to
add support for Apple Silicon and aarch64.
* Thanks to Biswapriyo Nath (@biswa96) for a fix to allow `mingw` builds on Windows.
* There have been some changes made to not import `platform.machine()` on `sparc`
but it is highly advised to upgrade to Python 3.9+ to avoid this issue with
the Python core package `platform`.
Changes from 2.8.0 to 2.8.1
---------------------------
* Fixed dependency list.
* Added ``pyproject.toml`` and modernize the ``setup.py`` script. Thanks to
Antonio Valentino for the PR.
Changes from 2.7.3 to 2.8.0
---------------------------
* Wheels for Python 3.10 are now provided.
* Support for Python 2.7 and 3.5 has been discontinued.
* All residual support for Python 2.X syntax has been removed, and therefore
the setup build no longer makes calls to the `2to3` script. The `setup.py`
has been refactored to be more modern.
* The examples on how to link into Intel VML/MKL/oneAPI now use the dynamic
library.
Changes from 2.7.2 to 2.7.3
---------------------------
- Pinned Numpy versions to minimum supported version in an effort to alleviate
issues seen in Windows machines not having the same MSVC runtime installed as
was used to build the wheels.
- ARMv8 wheels are now available, thanks to `odidev` for the pull request.
Changes from 2.7.1 to 2.7.2
---------------------------
- Support for Python 2.7 and 3.5 is deprecated and will be discontinued when
`cibuildwheels` and/or GitHub Actions no longer support these versions.
- Wheels are now provided for Python 3.7, 3.5, 3.6, 3.7, 3.8, and 3.9 via
GitHub Actions.
- The block size is now exported into the namespace as `numexpr.__BLOCK_SIZE1__`
as a read-only value.
- If using MKL, the number of threads for VML is no longer forced to 1 on loading
the module. Testing has shown that VML never runs in multi-threaded mode for
the default BLOCKSIZE1 of 1024 elements, and forcing to 1 can have deleterious
effects on NumPy functions when built with MKL. See issue #355 for details.
- Use of `ndarray.tostring()` in tests has been switch to `ndarray.tobytes()`
for future-proofing deprecation of `.tostring()`, if the version of NumPy is
greater than 1.9.
- Added a utility method `get_num_threads` that returns the (maximum) number of
threads currently in use by the virtual machine. The functionality of
`set_num_threads` whereby it returns the previous value has been deprecated
and will be removed in 2.8.X.
Changes from 2.7.0 to 2.7.1
----------------------------
- Python 3.8 support has been added.
- Python 3.4 support is discontinued.
- The tests are now compatible with NumPy 1.18.
- `site.cfg.example` was updated to use the `libraries` tag instead of `mkl_libs`,
which is recommended for newer version of NumPy.
Changes from 2.6.9 to 2.7.0
----------------------------
- The default number of 'safe' threads has been restored to the historical limit
of 8, if the environment variable "NUMEXPR_MAX_THREADS" has not been set.
- Thanks to @eltoder who fixed a small memory leak.
- Support for Python 2.6 has been dropped, as it is no longer available via
TravisCI.
- A typo in the test suite that had a less than rather than greater than symbol
in the NumPy version check has been corrected thanks to dhomeier.
- The file `site.cfg` was being accidently included in the sdists on PyPi.
It has now been excluded.
Changes from 2.6.8 to 2.6.9
---------------------------
- Thanks to Mike Toews for more robust handling of the thread-setting
environment variables.
- With Appveyor updating to Python 3.7.1, wheels for Python 3.7 are now
available in addition to those for other OSes.
Changes from 2.6.7 to 2.6.8
---------------------------
- Add check to make sure that `f_locals` is not actually `f_globals` when we
do the `f_locals` clear to avoid the #310 memory leak issue.
- Compare NumPy versions using `distutils.version.LooseVersion` to avoid issue
#312 when working with NumPy development versions.
- As part of `multibuild`, wheels for Python 3.7 for Linux and MacOSX are now
available on PyPI.
Changes from 2.6.6 to 2.6.7
---------------------------
- Thanks to Lehman Garrison for finding and fixing a bug that exhibited memory
leak-like behavior. The use in `numexpr.evaluate` of `sys._getframe` combined
with `.f_locals` from that frame object results an extra refcount on objects
in the frame that calls `numexpr.evaluate`, and not `evaluate`'s frame. So if
the calling frame remains in scope for a long time (such as a procedural
script where `numexpr` is called from the base frame) garbage collection would
never occur.
- Imports for the `numexpr.test` submodule were made lazy in the `numexpr` module.
Changes from 2.6.5 to 2.6.6
---------------------------
- Thanks to Mark Dickinson for a fix to the thread barrier that occassionally
suffered from spurious wakeups on MacOSX.
Changes from 2.6.4 to 2.6.5
---------------------------
- The maximum thread count can now be set at import-time by setting the
environment variable 'NUMEXPR_MAX_THREADS'. The default number of
max threads was lowered from 4096 (which was deemed excessive) to 64.
- A number of imports were removed (pkg_resources) or made lazy (cpuinfo) in
order to speed load-times for downstream packages (such as `pandas`, `sympy`,
and `tables`). Import time has dropped from about 330 ms to 90 ms. Thanks to
Jason Sachs for pointing out the source of the slow-down.
- Thanks to Alvaro Lopez Ortega for updates to benchmarks to be compatible with
Python 3.
- Travis and AppVeyor now fail if the test module fails or errors.
- Thanks to Mahdi Ben Jelloul for a patch that removed a bug where constants
in `where` calls would raise a ValueError.
- Fixed a bug whereby all-constant power operations would lead to infinite
recursion.
Changes from 2.6.3 to 2.6.4
---------------------------
- Christoph Gohlke noticed a lack of coverage for the 2.6.3
`floor` and `ceil` functions for MKL that caused seg-faults in
test, so thanks to him for that.
Changes from 2.6.2 to 2.6.3
---------------------------
- Documentation now available at readthedocs.io_.
- Support for floor() and ceil() functions added by Caleb P. Burns.
- NumPy requirement increased from 1.6 to 1.7 due to changes in iterator
flags (#245).
- Sphinx autodocs support added for documentation on readthedocs.org.
- Fixed a bug where complex constants would return an error, fixing
problems with `sympy` when using NumExpr as a backend.
- Fix for #277 whereby arrays of shape (1,...) would be reduced as
if they were full reduction. Behavoir now matches that of NumPy.
- String literals are automatically encoded into 'ascii' bytes for
convience (see #281).
.. _readthedocs.io: http://numexpr.readthedocs.io
Changes from 2.6.1 to 2.6.2
---------------------------
- Updates to keep with API changes in newer NumPy versions (#228).
Thanks to Oleksandr Pavlyk.
- Removed several warnings (#226 and #227). Thanks to Oleksander Pavlyk.
- Fix bugs in function `stringcontains()` (#230). Thanks to Alexander Shadchin.
- Detection of the POWER processor (#232). Thanks to Breno Leitao.
- Fix pow result casting (#235). Thanks to Fernando Seiti Furusato.
- Fix integers to negative integer powers (#240). Thanks to Antonio Valentino.
- Detect numpy exceptions in expression evaluation (#240). Thanks to Antonio Valentino.
- Better handling of RC versions (#243). Thanks to Antonio Valentino.
Changes from 2.6.0 to 2.6.1
---------------------------
- Fixed a performance regression in some situations as consequence of
increasing too much the BLOCK_SIZE1 constant. After more careful
benchmarks (both in VML and non-VML modes), the value has been set
again to 1024 (down from 8192). The benchmarks have been made with
a relatively new processor (Intel Xeon E3-1245 v5 @ 3.50GHz), so
they should work well for a good range of processors again.
- Added NetBSD support to CPU detection. Thanks to Thomas Klausner.
Changes from 2.5.2 to 2.6.0
---------------------------
- Introduced a new re_evaluate() function for re-evaluating the
previous executed array expression without any check. This is meant
for accelerating loops that are re-evaluating the same expression
repeatedly without changing anything else than the operands. If
unsure, use evaluate() which is safer.
- The BLOCK_SIZE1 and BLOCK_SIZE2 constants have been re-checked in
order to find a value maximizing most of the benchmarks in bench/
directory. The new values (8192 and 16 respectively) give somewhat
better results (~5%) overall. The CPU used for fine tuning is a
relatively new Haswell processor (E3-1240 v3).
- The '--name' flag for `setup.py` returning the name of the package
is honored now (issue #215).
Changes from 2.5.1 to 2.5.2
---------------------------
- conj() and abs() actually added as VML-powered functions, preventing
the same problems than log10() before (PR #212). Thanks to Tom Kooij
for the fix!
Changes from 2.5 to 2.5.1
-------------------------
- Fix for log10() and conj() functions. These produced wrong results
when numexpr was compiled with Intel's MKL (which is a popular build
since Anaconda ships it by default) and non-contiguous data (issue
#210). Thanks to Arne de Laat and Tom Kooij for reporting and
providing a nice test unit.
- Fix that allows numexpr-powered apps to be profiled with pympler.
Thanks to @nbecker.
Changes from 2.4.6 to 2.5
-------------------------
- Added locking for allowing the use of numexpr in multi-threaded
callers (this does not prevent numexpr to use multiple cores
simultaneously). (PR #199, Antoine Pitrou, PR #200, Jenn Olsen).
- Added new min() and max() functions (PR #195, CJ Carey).
Changes from 2.4.5 to 2.4.6
---------------------------
- Fixed some UserWarnings in Solaris (PR #189, Graham Jones).
- Better handling of MSVC defines. (#168, Francesc Alted).
Changes from 2.4.4 to 2.4.5
---------------------------
- Undone a 'fix' for a harmless data race. (#185 Benedikt Reinartz,
Francesc Alted).
- Ignore NumPy warnings (overflow/underflow, divide by zero and
others) that only show up in Python3. Masking these warnings in
tests is fine because all the results are checked to be
valid. (#183, Francesc Alted).
Changes from 2.4.3 to 2.4.4
---------------------------
- Fix bad #ifdef for including stdint on Windows (PR #186, Mike Sarahan).
Changes from 2.4.3 to 2.4.4
---------------------------
* Honor OMP_NUM_THREADS as a fallback in case NUMEXPR_NUM_THREADS is not
set. Fixes #161. (PR #175, Stefan Erb).
* Added support for AppVeyor (PR #178 Andrea Bedini)
* Fix to allow numexpr to be imported after eventlet.monkey_patch(),
as suggested in #118 (PR #180 Ben Moran).
* Fix harmless data race that triggers false positives in ThreadSanitizer.
(PR #179, Clement Courbet).
* Fixed some string tests on Python 3 (PR #182, Antonio Valentino).
Changes from 2.4.2 to 2.4.3
---------------------------
* Comparisons with empty strings work correctly now. Fixes #121 and
PyTables #184.
Changes from 2.4.1 to 2.4.2
---------------------------
* Improved setup.py so that pip can query the name and version without
actually doing the installation. Thanks to Joris Borgdorff.
Changes from 2.4 to 2.4.1
-------------------------
* Added more configuration examples for compiling with MKL/VML
support. Thanks to Davide Del Vento.
* Symbol MKL_VML changed into MKL_DOMAIN_VML because the former is
deprecated in newer MKL. Thanks to Nick Papior Andersen.
* Better determination of methods in `cpuinfo` module. Thanks to Marc
Jofre.
* Improved NumPy version determination (handy for 1.10.0). Thanks
to Åsmund Hjulstad.
* Benchmarks run now with both Python 2 and Python 3. Thanks to Zoran
Plesivčak.
Changes from 2.3.1 to 2.4
-------------------------
* A new `contains()` function has been added for detecting substrings
in strings. Only plain strings (bytes) are supported for now. See
PR #135 and ticket #142. Thanks to Marcin Krol.
* New version of setup.py that allows better management of NumPy
dependency. See PR #133. Thanks to Aleks Bunin.
Changes from 2.3 to 2.3.1
-------------------------
* Added support for shift-left (<<) and shift-right (>>) binary operators.
See PR #131. Thanks to fish2000!
* Removed the rpath flag for the GCC linker, because it is probably
not necessary and it chokes to clang.
Changes from 2.2.2 to 2.3
-------------------------
* Site has been migrated to https://github.com/pydata/numexpr. All
new tickets and PR should be directed there.
* [ENH] A `conj()` function for computing the conjugate of complex
arrays has been added. Thanks to David Menéndez. See PR #125.
* [FIX] Fixed a DeprecationWarning derived of using oa_ndim -- 0 and
op_axes -- NULL when using NpyIter_AdvancedNew() and NumPy 1.8.
Thanks to Mark Wiebe for advise on how to fix this properly.
Changes from 2.2.1 to 2.2.2
---------------------------
* The `copy_args` argument of `NumExpr` function has been brought
lack. This has been mainly necessary for compatibility with
`PyTables < 3.0`, which I decided to continue to support. Fixed
#115.
* The `__nonzero__` method in `ExpressionNode` class has been
commented out. This is also for compatibility with `PyTables < 3.0`.
See #24 for details.
* Fixed the type of some parameters in the C extension so that s390
architecture compiles. Fixes #116. Thank to Antonio Valentino for
reporting and the patch.
Changes from 2.2 to 2.2.1
-------------------------
* Fixes a secondary effect of "from numpy.testing import `*`", where
division is imported now too, so only then necessary functions from
there are imported now. Thanks to Christoph Gohlke for the patch.
Changes from 2.1 to 2.2
-----------------------
* [LICENSE] Fixed a problem with the license of the
numexpr/win32/pthread.{c,h} files emulating pthreads on Windows
platforms. After persmission from the original authors is granted,
these files adopt the MIT license and can be redistributed without
problems. See issue #109 for details
(https://code.google.com/p/numexpr/issues/detail?id-110).
* [ENH] Improved the algorithm to decide the initial number of threads
to be used. This was necessary because by default, numexpr was
using a number of threads equal to the detected number of cores, and
this can be just too much for moder systems where this number can be
too high (and counterporductive for performance in many cases).
Now, the 'NUMEXPR_NUM_THREADS' environment variable is honored, and
in case this is not present, a maximum number of *8* threads are
setup initially. The new algorithm is fully described in the Users
Guide now in the note of 'General routines' section:
https://code.google.com/p/numexpr/wiki/UsersGuide#General_routines.
Closes #110.
* [ENH] numexpr.test() returns `TestResult` instead of None now.
Closes #111.
* [FIX] Modulus with zero with integers no longer crashes the
interpreter. It nows puts a zero in the result. Fixes #107.
* [API CLEAN] Removed `copy_args` argument of `evaluate`. This should
only be used by old versions of PyTables (< 3.0).
* [DOC] Documented the `optimization` and `truediv` flags of
`evaluate` in Users Guide
(https://code.google.com/p/numexpr/wiki/UsersGuide).
Changes from 2.0.1 to 2.1
---------------------------
* Dropped compatibility with Python < 2.6.
* Improve compatibiity with Python 3:
- switch from PyString to PyBytes API (requires Python >- 2.6).
- fixed incompatibilities regarding the int/long API
- use the Py_TYPE macro
- use the PyVarObject_HEAD_INIT macro instead of PyObject_HEAD_INIT
* Fixed several issues with different platforms not supporting
multithreading or subprocess properly (see tickets #75 and #77).
* Now, when trying to use pure Python boolean operators, 'and',
'or' and 'not', an error is issued suggesting that '&', '|' and
'~' should be used instead (fixes #24).
Changes from 2.0 to 2.0.1
-------------------------
* Added compatibility with Python 2.5 (2.4 is definitely not supported
anymore).
* `numexpr.evaluate` is fully documented now, in particular the new
`out`, `order` and `casting` parameters.
* Reduction operations are fully documented now.
* Negative axis in reductions are not supported (they have never been
actually), and a `ValueError` will be raised if they are used.
Changes from 1.x series to 2.0
------------------------------
- Added support for the new iterator object in NumPy 1.6 and later.
This allows for better performance with operations that implies
broadcast operations, fortran-ordered or non-native byte orderings.
Performance for other scenarios is preserved (except for very small
arrays).
- Division in numexpr is consistent now with Python/NumPy. Fixes #22
and #58.
- Constants like "2." or "2.0" must be evaluated as float, not
integer. Fixes #59.
- `evaluate()` function has received a new parameter `out` for storing
the result in already allocated arrays. This is very useful when
dealing with large arrays, and a allocating new space for keeping
the result is not acceptable. Closes #56.
- Maximum number of threads raised from 256 to 4096. Machines with a
higher number of cores will still be able to import numexpr, but
limited to 4096 (which is an absurdly high number already).
Changes from 1.4.1 to 1.4.2
---------------------------
- Multithreaded operation is disabled for small arrays (< 32 KB).
This allows to remove the overhead of multithreading for such a
small arrays. Closes #36.
- Dividing int arrays by zero gives a 0 as result now (and not a
floating point exception anymore. This behaviour mimics NumPy.
Thanks to Gaëtan de Menten for the fix. Closes #37.
- When compiled with VML support, the number of threads is set to 1
for VML core, and to the number of cores for the native pthreads
implementation. This leads to much better performance. Closes #39.
- Fixed different issues with reduction operations (`sum`, `prod`).
The problem is that the threaded code does not work well for
broadcasting or reduction operations. Now, the serial code is used
in those cases. Closes #41.
- Optimization of "compilation phase" through a better hash. This can
lead up to a 25% of improvement when operating with variable
expressions over small arrays. Thanks to Gaëtan de Menten for the
patch. Closes #43.
- The ``set_num_threads`` now returns the number of previous thread
setting, as stated in the docstrings.
Changes from 1.4 to 1.4.1
-------------------------
- Mingw32 can also work with pthreads compatibility code for win32.
Fixes #31.
- Fixed a problem that used to happen when running Numexpr with
threads in subprocesses. It seems that threads needs to be
initialized whenever a subprocess is created. Fixes #33.
- The GIL (Global Interpreter Lock) is released during computations.
This should allow for better resource usage for multithreaded apps.
Fixes #35.
Changes from 1.3.1 to 1.4
-------------------------
- Added support for multi-threading in pure C. This is to avoid the
GIL and allows to squeeze the best performance in both multi-core
machines.
- David Cooke contributed a thorough refactorization of the opcode
machinery for the virtual machine. With this, it is really easy to
add more opcodes. See:
http://code.google.com/p/numexpr/issues/detail?id-28
as an example.
- Added a couple of opcodes to VM: where_bbbb and cast_ib. The first
allow to get boolean arrays out of the `where` function. The second
allows to cast a boolean array into an integer one. Thanks to
gdementen for his contribution.
- Fix negation of `int64` numbers. Closes #25.
- Using a `npy_intp` datatype (instead of plain `int`) so as to be
able to manage arrays larger than 2 GB.
Changes from 1.3 to 1.3.1
-------------------------
- Due to an oversight, ``uint32`` types were not properly supported.
That has been solved. Fixes #19.
- Function `abs` for computing the absolute value added. However, it
does not strictly follow NumPy conventions. See ``README.txt`` or
website docs for more info on this. Thanks to Pauli Virtanen for
the patch. Fixes #20.
Changes from 1.2 to 1.3
-----------------------
- A new type called internally `float` has been implemented so as to
be able to work natively with single-precision floating points.
This prevents the silent upcast to `double` types that was taking
place in previous versions, so allowing both an improved performance
and an optimal usage of memory for the single-precision
computations. However, the casting rules for floating point types
slightly differs from those of NumPy. See:
http://code.google.com/p/numexpr/wiki/Overview
or the README.txt file for more info on this issue.
- Support for Python 2.6 added.
- When linking with the MKL, added a '-rpath' option to the link step
so that the paths to MKL libraries are automatically included into
the runtime library search path of the final package (i.e. the user
won't need to update its LD_LIBRARY_PATH or LD_RUN_PATH environment
variables anymore). Fixes #16.
Changes from 1.1.1 to 1.2
-------------------------
- Support for Intel's VML (Vector Math Library) added, normally
included in Intel's MKL (Math Kernel Library). In addition, when
the VML support is on, several processors can be used in parallel
(see the new `set_vml_num_threads()` function). With that, the
computations of transcendental functions can be accelerated quite a
few. For example, typical speed-ups when using one single core for
contiguous arrays are 3x with peaks of 7.5x (for the pow() function).
When using 2 cores the speed-ups are around 4x and 14x respectively.
Closes #9.
- Some new VML-related functions have been added:
* set_vml_accuracy_mode(mode): Set the accuracy for VML operations.
* set_vml_num_threads(nthreads): Suggests a maximum number of
threads to be used in VML operations.
* get_vml_version(): Get the VML/MKL library version.
See the README.txt for more info about them.
- In order to easily allow the detection of the MKL, the setup.py has
been updated to use the numpy.distutils. So, if you are already
used to link NumPy/SciPy with MKL, then you will find that giving
VML support to numexpr works almost the same.
- A new `print_versions()` function has been made available. This
allows to quickly print the versions on which numexpr is based on.
Very handy for issue reporting purposes.
- The `numexpr.numexpr` compiler function has been renamed to
`numexpr.NumExpr` in order to avoid name collisions with the name of
the package (!). This function is mainly for internal use, so you
should not need to upgrade your existing numexpr scripts.
Changes from 1.1 to 1.1.1
-------------------------
- The case for multidimensional array operands is properly accelerated
now. Added a new benchmark (based on a script provided by Andrew
Collette, thanks!) for easily testing this case in the future.
Closes #12.
- Added a fix to avoid the caches in numexpr to grow too much. The
dictionary caches are kept now always with less than 256 entries.
Closes #11.
- The VERSION file is correctly copied now (it was not present for the
1.1 tar file, I don't know exactly why). Closes #8.
Changes from 1.0 to 1.1
-----------------------
- Numexpr can work now in threaded environments. Fixes #2.
- The test suite can be run programmatically by using
``numexpr.test()``.
- Support a more complete set of functions for expressions (including
those that are not supported by MSVC 7.1 compiler, like the inverse
hyperbolic or log1p and expm1 functions. The complete list now is:
* where(bool, number1, number2): number
Number1 if the bool condition is true, number2 otherwise.
* {sin,cos,tan}(float|complex): float|complex
Trigonometric sinus, cosinus or tangent.
* {arcsin,arccos,arctan}(float|complex): float|complex
Trigonometric inverse sinus, cosinus or tangent.
* arctan2(float1, float2): float
Trigonometric inverse tangent of float1/float2.
* {sinh,cosh,tanh}(float|complex): float|complex
Hyperbolic sinus, cosinus or tangent.
* {arcsinh,arccosh,arctanh}(float|complex): float|complex
Hyperbolic inverse sinus, cosinus or tangent.
* {log,log10,log1p}(float|complex): float|complex
Natural, base-10 and log(1+x) logarithms.
* {exp,expm1}(float|complex): float|complex
Exponential and exponential minus one.
* sqrt(float|complex): float|complex
Square root.
* {real,imag}(complex): float
Real or imaginary part of complex.
* complex(float, float): complex
Complex from real and imaginary parts.
.. Local Variables:
.. mode: rst
.. coding: utf-8
.. fill-column: 70
.. End:
|