def forward(self, inputs):
        """
        inputs : (length, batch, size)
        output : (length, batch, size, order)
        # TODO this puts the unsqueeze inside here rather than outside, should make RNN versions the same
        """

        # L, B, S = inputs.shape
        inputs = inputs.unsqueeze(-1)
        u = F.linear(inputs, self.B)
        # output = unroll.unroll(self.A, u)
        output = unroll.parallel_unroll_recursive(self.A, u)
        # output = unroll.parallel_unroll_iterative(self.A, u)
        # output = unroll.variable_unroll(self.A, u, variable=False)

        # m = inputs.new_zeros(B, S, self.order)
        # outputs = []
        # for input in torch.unbind(inputs, dim=0):
        #     m = m + F.linear(m, self.A) + F.linear(input, self.B)

        # output = torch.stack(outputs, dim=0)
        return output

        inputs : (length, batch, size)
        output : (length, batch, size, order)
        # TODO this puts the unsqueeze inside here rather than outside, should make RNN versions the same
        
analyze/convnexts4nd/src/models/sequence/rnns/qrnn.py