code: def parent(idx, dim, axis=None):
      
      idxm = multi_index(idx, dim)
      if axis is None:
          axis = dim - numpy.argmin(1*(numpy.array(idxm)[::-1] == 0))-1
  
      if not idx:
          return idx, axis
  
      if idxm[axis] == 0:
          idxi = parent(parent(idx, dim)[0], dim)[0]
          while child(idxi+1, dim, axis) < idx:
              idxi += 1
          return idxi, axis
  
      out = numpy.array(idxm) - 1*(numpy.eye(dim)[axis])
      return single_index(out), axis
docs: Parent node according to Bertran's notation.
  
      Parameters
      ----------
      idx : int
          Index of the child node.
      dim : int
          Dimensionality of the problem.
      axis : int
          Assume axis direction.
  
      Returns
      -------
      out : int
          Index of parent node with `j<=i`, and `j==i` iff `i==0`.
      axis : int
          Dimension direction the parent was found.