code: def __boost(self, grad, hess):
          
          grad = list_to_1d_numpy(grad, name='gradient')
          hess = list_to_1d_numpy(hess, name='hessian')
          assert grad.flags.c_contiguous
          assert hess.flags.c_contiguous
          if len(grad) != len(hess):
              raise ValueError("Lengths of gradient({}) and hessian({}) don't match"
                               .format(len(grad), len(hess)))
          is_finished = ctypes.c_int(0)
          _safe_call(_LIB.LGBM_BoosterUpdateOneIterCustom(
              self.handle,
              grad.ctypes.data_as(ctypes.POINTER(ctypes.c_float)),
              hess.ctypes.data_as(ctypes.POINTER(ctypes.c_float)),
              ctypes.byref(is_finished)))
          self.__is_predicted_cur_iter = [False for _ in range_(self.__num_dataset)]
          return is_finished.value == 1
docs: Boost Booster for one iteration with customized gradient statistics.
  
          Note
          ----
          For multi-class task, the score is group by class_id first, then group by row_id.
          If you want to get i-th row score in j-th class, the access way is score[j * num_data + i]
          and you should group grad and hess in this way as well.
  
          Parameters
          ----------
          grad : 1-D numpy array or 1-D list
              The first order derivative (gradient).
          hess : 1-D numpy array or 1-D list
              The second order derivative (Hessian).
  
          Returns
          -------
          is_finished : bool
              Whether the boost was successfully finished.