code: def forward(self, is_train=False, **kwargs):
          
          if len(kwargs) != 0:
              arg_dict = self.arg_dict
              for name, array in kwargs.items():
                  if not isinstance(array, (NDArray, np.ndarray)):
                      raise ValueError('only accept keyword argument of NDArrays and numpy.ndarray')
                  if name not in arg_dict:
                      raise TypeError('Unknown argument %s' % name)
                  if arg_dict[name].shape != array.shape:
                      raise ValueError('Shape not match! Argument %s, need: %s, received: %s'
                                       %(name, str(arg_dict[name].shape), str(array.shape)))
                  arg_dict[name][:] = array
  
          check_call(_LIB.MXExecutorForward(
              self.handle,
              ctypes.c_int(int(is_train))))
  
          return self.outputs
docs: Calculate the outputs specified by the bound symbol.
  
          Parameters
          ----------
          is_train: bool, optional
              Whether this forward is for evaluation purpose. If True,
              a backward call is expected to follow.
  
          **kwargs
              Additional specification of input arguments.
  
          Examples
          --------
          >>> # doing forward by specifying data
          >>> texec.forward(is_train=True, data=mydata)
          >>> # doing forward by not specifying things, but copy to the executor before hand
          >>> mydata.copyto(texec.arg_dict['data'])
          >>> texec.forward(is_train=True)
          >>> # doing forward by specifying data and get outputs
          >>> outputs = texec.forward(is_train=True, data=mydata)
          >>> print(outputs[0].asnumpy())