Here are a couple of issues that are important to me that might be relevant to the design discussion. I have attached some code that illustrates part of the pain we have experienced developing libraries of algorithms that can handle both arrays and scalars. The attached library is the reusable part. The other part of this problem is that we have lots of logic sprinkled throughout our algorithms to enable them to handle both arrays and scalars. Secondly, I have just been bitten by this declaration which suggests that the new Numeric might handle default values better:. _vp_mod = zeros(num_pts) It would be less surprising to someone developing numeric algorithms if functions like this defaulted to creating a double precision array rather than integers. Regards, Duncan

3) Always returning rank-0 arrays.

This may be a bit controversial as it is a bit of a change.

Indeed. So you really do intend that if foo=array([1,2]), foo[0] should evaluate to array(1) rather than 1?

import scipy from scipy import take, amin, amax, arange, asarray, PyObject, mean, \ product, shape, array, Float64, nonzero """ The following safe_ methods were written to handle both arrays amd scalars to save the developer of numerical methods having to clutter their code with tests to determine the type of the data. """ def safe_take(a,indices): # Slice the input if it is an array but not if it is a scalar try: a = take(a,indices) except ValueError: # a is scalar pass return a def safe_copy(a): # Return a copy for both scalar and array input try: b = a.copy() except AttributeError: # a is a scalar b = a return b # Note: if x is a scalar and y = asarray(x), amin(y) FAILS but min(y) works # Note: BUT IF z=convert(y,frac,frac), THEN min(z) FAILS!!! def safe_min(a): # Return the minimum of the input array or the input if it is a scalar try: safemin = amin(a) except: safemin = a return safemin def safe_max(a): # Return the maximum of the input array or the input if it is a scalar try: safemax = amax(a) except: safemax = a return safemax def safe_mean(a): # Return the mean of the input array or the input if it is a scalar try: safemean = mean(a) except: safemean = a return safemean def safe_len(a): # Return the length of the input array or 1 if it is a scalar try: safelen = len(a) except: safelen = 1 return safelen def safe_flat(a): # Return a flat version of the input array or input if it is a scalar try: safeflat = a.flat except: safeflat = a return safeflat