docs: def forward(self, x):
          """
          Transforms from the packed to unpacked representations (numpy)
          
          :param x: packed numpy array. Must have shape `self.num_matrices x triangular_number
          :return: Reconstructed numpy array y of shape self.num_matrices x N x N
          """
          fwd = np.zeros((self.num_matrices, self.N, self.N), settings.float_type)
          indices = np.tril_indices(self.N, 0)
          z = np.zeros(len(indices[0])).astype(int)
          for i in range(self.num_matrices):
              fwd[(z + i,) + indices] = x[i, :]
          return fwd.squeeze(axis=0) if self.squeeze else fwd