'Apply the forward pass transformation to the input data.
Arguments:
inputs (Tensor): input data
inference (bool): is inference only
beta (float, optional): scale to apply to the outputs
Returns:
Tensor: output data'

def fprop(self, inputs, inference=False, beta=0.0):

    self.inputs = inputs
    if ((self.actual_bsz is None) and (self.actual_seq_len is None)):
        self.be.compound_dot(A=self.W, B=self.inputs, C=self.outputs, beta=beta, bsum=self.batch_sum)
    else:
        bsz = (self.be.bsz if (self.actual_bsz is None) else self.actual_bsz)
        steps = (self.nsteps if (self.actual_seq_len is None) else self.actual_seq_len)
        self.be.compound_dot(A=self.W, B=self.inputs[:, :(bsz * steps)], C=self.outputs[:, :(bsz * steps)], beta=beta, bsum=self.batch_sum)
    return self.outputs
