TST: add tests for roll function
FIX: roll raises a ValueError is axis > ndim
FIX: handle empty arrays in roll
First attempt at BF for 2028 and added better tests for scalarmath pow function
fixed some style problems
DOC: Used regex to find colons missing spaces which render wrong online, also other spacing or formatting mistakes
STY: drop some else clauses in roll
Fixed a mistake in linalg.eig() documentation.
Avoid conversion to NumPy Scalar

After profiling I noticed that a bottleneck for NumPy scalar operations
occurs when trying to extract the underlying C value from a Python float
because it first converts the Python scalar into its matching NumPy
scalar (e.g. PyFloat -> float64) and then it extracts the C value from
the NumPy scalar.

For some types, it is a lot faster to just extract the value directly
from the Python scalar.

I only did for PyFloat in this modified code but the code is laid out
such that it can be easily extended to other types such as Integers. I
did not do them because I was unsure if there was a special scenario to
handle across OS and/or between 32 and 64 bit platforms. The ratio of
speed to do different operations are listed below (Old time / New time
with modifications). In other words, the bigger the number, the bigger
the speed up we get.

Tested in Python 2.6 Windows

RATIO  TEST
1.1  Array * Array
1.1  PyFloat * Array
1.1  Float64 * Array
1.0  PyFloat + Array
1.3  Float64 + Array
1.1  PyFloat * PyFloat
1.0  Float64 * Float64
4.0  PyFloat * Float64
2.9  PyFloat * vector1[1]
3.9  PyFloat + Float64
9.8  PyFloat < Float64
9.9  PyFloat < Float64
1.0  Create array from list
1.0  Assign PyFloat to all
1.0  Assign Float64 to all
4.2  Float64 * pyFloat * pyFloat * pyFloat * pyFloat
1.0  pyFloat * pyFloat * pyFloat * pyFloat * pyFloat
1.0  Float64 * Float64 * Float64 * Float64 * Float64
1.0  Float64 ** 2
1.0  pyFloat ** 2
Fix indentation
Added example for 2D-histogram with variable bin size.
Fixed two typos.
API: Make nditer support ndim == 0 for 0-d iterations.

There are relatively few changes necessare here. However there is a
conceptionally there are no axes for the 0-d case, and no axesdata
needs to be used. This still uses the first axisdata. Which means that
in a few places ndim == 0 is special cased or special cased to act like
ndim == 1.
It would probably be a little cleaner to to use the base pointers directly
in the 0-d case and no axes iteration at all. That would require similar
special cases though.

This also makes oa_ndim == -1 the "correct" way to signal that no op_axes
are given with oa_ndim == 0 being, for the time being, dual use. Either
meaning that nothing may be given, or if something something was given
enforcing a 0-d iteration.

The necessary changes to the ufunc machinery are also done.

Documented that the dtype transfer functions do not handle the scalar
case unless even shape is set.
ENH: Allow np.nditer to support scalar op_axes

Also uses oa_ndim == -1 to signal no op_axes were given. This is slightly
cleaner inside pywrap itself and is a cleaner signal for the iterator.
TST: Add basic tests for 0-d np.nditer/np.nested_iter support
TST: Add test that einsum multiplies scalars fine
MAINT: Remove np.ndindex 0-d hack.
DOC: Add documentation clarifying the use of oa_ndim
DOC: mention AdvancedNew iterator change in the release notes.
MAINT: Remove 0-d iterator special case from ufunc_object.c