new_contents: """Backward compatible with arrayfns from Numeric
  """
  
  __all__ = ['array_set', 'construct3', 'digitize', 'error', 'find_mask', 'histogram', 'index_sort',
             'interp', 'nz', 'reverse', 'span', 'to_corners', 'zmin_zmax']
  
  import numpy as nx
  from numpy import asarray
  
  class error(Exception):
      pass
  
  def array_set(vals1, indices, vals2):
      indices = asarray(indices)
      if indices.ndim != 1:
          raise ValueError, "index array must be 1-d"
      if not isinstance(vals1, ndarray):
          raise TypeError, "vals1 must be an ndarray"
      vals1 = asarray(vals1)
      vals2 = asarray(vals2)
      if vals1.ndim != vals2.ndim or vals1.ndim < 1:
          raise error, "vals1 and vals2 must have same number of dimensions (>=1)"
      vals1[indices] = vals2
  
  def construct3(mask, itype):
      raise NotImplementedError
  
  from numpy import digitize
  
  def find_mask(fs, node_edges):
      raise NotImplementedError
  
  def histogram(lst, weight=None):
      raise NotImplementedError
  
  def index_sort(arr):
      return asarray(arr).argsort(kind='heap')
  
  def interp(y, x, z, typ=None):
      """y(z) interpolated by treating y(x) as piecewise function
      """
      res = numpy.interp(z, x, y)
      if typ is None or typ == 'd':
          return res
      if typ == 'f':
          return res.astype('f')
  
      raise error, "incompatible typecode"
  
  def nz(x):
      x = asarray(x,dtype=nx.ubyte)
      if x.ndim != 1:
          raise TypeError, "intput must have 1 dimension."
      indxs = nx.flatnonzero(x != 0)
      return indxs[-1].item()+1
  
  def reverse(x, n):
      x = asarray(x,dtype='d')
      if x.ndim != 2:
          raise ValueError, "input must be 2-d"
      y = nx.empty_like(x)
      if n == 0:
          y[...] = x[::-1,:]
      elif n == 1:
          y[...] = x[:,::-1]
      return y
  
  def span(lo, hi, num, d2=0):
      x = linspace(lo, hi, num)
      if d2 <= 0
          return x
      else:
          ret = empty((d2,num),x.dtype)
          ret[...] = x
          return ret
  
  def to_corners(arr, nv, nvsum):
      raise NotImplementedError
  
  def zmin_zmax(z, ireg):
      raise NotImplementedError
          
  
subject: Add the arrayfns compatibility library -- not finished.