code: def moving_hfs_rank(h, size, start=0, stop=None):
      
  
      # determine windows
      windows = np.asarray(list(index_windows(h, size=size, start=start,
                                              stop=stop, step=None)))
  
      # setup output
      hr = np.zeros((windows.shape[0], h.shape[1]), dtype='i4')
  
      # iterate over windows
      for i, (window_start, window_stop) in enumerate(windows):
  
          # extract haplotypes for the current window
          hw = h[window_start:window_stop]
  
          # count haplotypes
          hc = hw.distinct_counts()
  
          # ensure sorted descending
          hc.sort()
          hc = hc[::-1]
  
          # compute ranks for non-singleton haplotypes
          cp = 0
          for j, c in enumerate(hc):
              if c > 1:
                  hr[i, cp:cp+c] = j+1
              cp += c
  
      return hr
docs: Helper function for plotting haplotype frequencies in moving windows.
  
      Parameters
      ----------
      h : array_like, int, shape (n_variants, n_haplotypes)
          Haplotype array.
      size : int
          The window size (number of variants).
      start : int, optional
          The index at which to start.
      stop : int, optional
          The index at which to stop.
  
      Returns
      -------
      hr : ndarray, int, shape (n_windows, n_haplotypes)
          Haplotype rank array.