code: def sigmaclip(arr, lo, hi, reps=3):
      
      clipped = np.array(arr)[np.isfinite(arr)]
  
      if len(clipped) < 1:
          return np.nan, np.nan
  
      std = np.std(clipped)
      mean = np.mean(clipped)
      for _ in range(int(reps)):
          clipped = clipped[np.where(clipped > mean-std*lo)]
          clipped = clipped[np.where(clipped < mean+std*hi)]
          pstd = std
          if len(clipped) < 1:
              break
          std = np.std(clipped)
          mean = np.mean(clipped)
          if 2*abs(pstd-std)/(pstd+std) < 0.2:
              break
      return mean, std
docs: Perform sigma clipping on an array, ignoring non finite values.
  
      During each iteration return an array whose elements c obey:
      mean -std*lo < c < mean + std*hi
  
      where mean/std are the mean std of the input array.
  
      Parameters
      ----------
      arr : iterable
          An iterable array of numeric types.
      lo : float
          The negative clipping level.
      hi : float
          The positive clipping level.
      reps : int
          The number of iterations to perform.
          Default = 3.
  
      Returns
      -------
      mean : float
          The mean of the array, possibly nan
      std : float
          The std of the array, possibly nan
  
      Notes
      -----
      Scipy v0.16 now contains a comparable method that will ignore nan/inf values.