code: def save_data(self, iters, times, offsets, X, Y, bo):
      if self.fileout is None:
          return
      if self.write_headline:
          items = ["iteration", "time(sec)", "objective"] + [
              "input[" + str(i + 1) + "]" for i in range(X[0].shape[1])
          ]
          self.fileout.write(",".join(items) + "\n")
          self.write_headline = False
      Y = np.vstack(Y)
      X = np.vstack(X)
      idx = np.argmin(Y)
      items = [str(iters[-1]), str(times[-1]), str(float(Y[idx]))] + [
          str(X[idx, i]) for i in range(X.shape[1])
      ]
      self.fileout.write(",".join(items) + "\n")
  
file_path: GPyOpt/GPyOpt/interface/output.py
imports: import numpy
label_desc: Use image node_id 3 for calling the Logger obj's underlying member method code with example usage: obj.save_data(iters, times, offsets, X, Y, bo) without return types