'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())'

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
