• Jason Rhinelander's avatar
    vectorize: pass-through of non-vectorizable args · f3ce00ea
    Jason Rhinelander authored
    This extends py::vectorize to automatically pass through
    non-vectorizable arguments.  This removes the need for the documented
    "explicitly exclude an argument" workaround.
    
    Vectorization now applies to arithmetic, std::complex, and POD types,
    passed as plain value or by const lvalue reference (previously only
    pass-by-value types were supported).  Non-const lvalue references and
    any other types are passed through as-is.
    
    Functions with rvalue reference arguments (whether vectorizable or not)
    are explicitly prohibited: an rvalue reference is inherently not
    something that can be passed multiple times and is thus unsuitable to
    being in a vectorized function.
    
    The vectorize returned value is also now more sensitive to inputs:
    previously it would return by value when all inputs are of size 1; this
    is now amended to having all inputs of size 1 *and* 0 dimensions.  Thus
    if you pass in, for example, [[1]], you get back a 1x1, 2D array, while
    previously you got back just the resulting single value.
    
    Vectorization of member function specializations is now also supported
    via `py::vectorize(&Class::method)`; this required passthrough support
    for the initial object pointer on the wrapping function pointer.
    f3ce00ea
test_numpy_vectorize.cpp 3.36 KB