docstr: Parameters
  ----------
  X : np.array
      Data array containing NaN entries
  
  missing_mask : np.array
      Boolean array indicating where NaN entries are
  
  fill_method : str
      "zero": fill missing entries with zeros
      "mean": fill with column means
      "median" : fill with column medians
      "min": fill with min value per column
      "random": fill with gaussian samples according to mean/std of column
  
  inplace : bool
      Modify matrix or fill a copy
docstr_tok: ["Parameters","--","--","--","--","--","X",":","np.array","Data","array","containing","NaN","entries","missing_mask",":","np.array","Boolean","array","indicating","where","NaN","entries","are","fill_method",":","str","``","zero","''",":","fill","missing","entries","with","zeros","``","mean","''",":","fill","with","column","means","``","median","''",":","fill","with","column","medians","``","min","''",":","fill","with","min","value","per","column","``","random","''",":","fill","with","gaussian","samples","according","to","mean\/std","of","column","inplace",":","bool","Modify","matrix","or","fill","a","copy"]
code: def fill(self, X, missing_mask, fill_method=None, inplace=False):
      """
      Parameters
      ----------
      X : np.array
          Data array containing NaN entries
  
      missing_mask : np.array
          Boolean array indicating where NaN entries are
  
      fill_method : str
          "zero": fill missing entries with zeros
          "mean": fill with column means
          "median" : fill with column medians
          "min": fill with min value per column
          "random": fill with gaussian samples according to mean/std of column
  
      inplace : bool
          Modify matrix or fill a copy
      """
      X = check_array(X, force_all_finite=False)
  
      if not inplace:
          X = X.copy()
  
      if not fill_method:
          fill_method = self.fill_method
  
      if fill_method not in ("zero", "mean", "median", "min", "random"):
          raise ValueError("Invalid fill method: '%s'" % (fill_method))
      elif fill_method == "zero":
          # replace NaN's with 0
          X[missing_mask] = 0
      elif fill_method == "mean":
          self._fill_columns_with_fn(X, missing_mask, np.nanmean)
      elif fill_method == "median":
          self._fill_columns_with_fn(X, missing_mask, np.nanmedian)
      elif fill_method == "min":
          self._fill_columns_with_fn(X, missing_mask, np.nanmin)
      elif fill_method == "random":
          self._fill_columns_with_fn(
              X, missing_mask, col_fn=generate_random_column_samples
          )
      return X
  
file_path: fancyimpute/fancyimpute/solver.py
imports: import warnings
  import numpy
  from sklearn.utils import check_array
  from .common import generate_random_column_samples
label_desc: Use image node_id 7 for calling the Solver obj's underlying member method code with example usage: obj.fill(X, missing_mask, fill_method, inplace) and returns: X