code: def get_energy(self, y_true, input_energy, mask):
          
          input_energy = K.sum(input_energy * y_true, 2)  # (B, T)
          chain_energy = K.sum(K.dot(y_true[:, :-1, :], self.chain_kernel) * y_true[:, 1:, :], 2)  # (B, T-1)
  
          if mask is not None:
              mask = K.cast(mask, K.floatx())
              chain_mask = mask[:, :-1] * mask[:, 1:]  # (B, T-1), mask[:,:-1]*mask[:,1:] makes it work with any padding
              input_energy = input_energy * mask
              chain_energy = chain_energy * chain_mask
          total_energy = K.sum(input_energy, -1) + K.sum(chain_energy, -1)  # (B, )
  
          return total_energy
docs: Energy = a1' y1 + u1' y1 + y1' U y2 + u2' y2 + y2' U y3 + u3' y3 + an' y3