code: def voight_painting(h):
      
  
      # check inputs
      # N.B., ensure int8 so we can use cython optimisation
      h = HaplotypeArray(np.asarray(h), copy=False)
      if h.max() > 1:
          raise NotImplementedError('only biallelic variants are supported')
      if h.min() < 0:
          raise NotImplementedError('missing calls are not supported')
  
      # sort by prefix
      indices = h.prefix_argsort()
      h = np.take(h, indices, axis=1)
  
      # paint
      painting = paint_shared_prefixes(memoryview_safe(np.asarray(h)))
  
      return painting, indices
docs: Paint haplotypes, assigning a unique integer to each shared haplotype
      prefix.
  
      Parameters
      ----------
      h : array_like, int, shape (n_variants, n_haplotypes)
          Haplotype array.
  
      Returns
      -------
      painting : ndarray, int, shape (n_variants, n_haplotypes)
          Painting array.
      indices : ndarray, int, shape (n_hapotypes,)
          Haplotype indices after sorting by prefix.