code: def _get_valid_fill_mask(arr, dim, limit):
      '''helper function to determine values that can be filled when limit is not
      None'''
      kw = {dim: limit + 1}
      # we explicitly use construct method to avoid copy.
      new_dim = utils.get_temp_dimname(arr.dims, '_window')
      return (arr.isnull().rolling(min_periods=1, **kw)
              .construct(new_dim, fill_value=False)
              .sum(new_dim, skipna=False)) <= limif _get_valid_fill_mask(arr, dim, limit):
      '''helper function to determine values that can be filled when limit is not
      None'''
      kw = {dim: limit + 1}
      # we explicitly use construct method to avoid copy.
      new_dim = utils.get_temp_dimname(arr.dims, '_window')
      return (arr.isnull().rolling(min_periods=1, **kw)
              .construct(new_dim, fill_value=False)
              .sum(new_dim, skipna=False)) <= limit
docs: helper function to determine values that can be filled when limit is not
      None