code: def etree(A):
      
      assert isinstance(A,spmatrix), "A must be a sparse matrix"
      assert A.size[0] == A.size[1], "A must be a square matrix"
  
      n = A.size[0]
      cp,ri,_ = A.CCS
      parent = matrix(0,(n,1))
      w = matrix(0,(n,1))
  
      for k in range(n):
          parent[k] = k
          w[k] = -1
          for p in range(cp[k],cp[k+1]):
              i = ri[p]
              while ((not i == -1) and (i < k)):
                  inext = w[i]
                  w[i] = k
                  if inext == -1: parent[i] = k
                  i = inext;
  
      return parent
docs: Compute elimination tree from upper triangle of A.