docstr: Mimic I/O of Seq2RewardNetwork but return fake reward
  Reward is the concatenation of action indices, independent
  of state.
  
  For example, when seq_len = 3, batch_size = 1, action_num = 2,
  acc_reward = tensor(
      [[  0.],
      [  1.],
      [ 10.],
      [ 11.],
      [100.],
      [101.],
      [110.],
      [111.]]
  )
  
  Input action shape: seq_len, batch_size, num_action
  Output acc_reward shape: batch_size, 1
docstr_tok: ["Mimic","I\/O","of","Seq2RewardNetwork","but","return","fake","reward","Reward","is","the","concatenation","of","action","indices",",","independent","of","state",".","For","example",",","when","seq_len","=","3",",","batch_size","=","1",",","action_num","=","2",",","acc_reward","=","tensor","(","[","[","0",".","]",",","[","1",".","]",",","[","10",".","]",",","[","11",".","]",",","[","100",".","]",",","[","101",".","]",",","[","110",".","]",",","[","111",".","]","]",")","Input","action","shape",":","seq_len",",","batch_size",",","num_action","Output","acc_reward","shape",":","batch_size",",","1"]
code: def forward(
      self,
      state: rlt.FeatureData,
      action: rlt.FeatureData,
      valid_reward_len: Optional[torch.Tensor] = None,
  ):
      """
      Mimic I/O of Seq2RewardNetwork but return fake reward
      Reward is the concatenation of action indices, independent
      of state.
  
      For example, when seq_len = 3, batch_size = 1, action_num = 2,
      acc_reward = tensor(
          [[  0.],
          [  1.],
          [ 10.],
          [ 11.],
          [100.],
          [101.],
          [110.],
          [111.]]
      )
  
      Input action shape: seq_len, batch_size, num_action
      Output acc_reward shape: batch_size, 1
      """
      # pyre-fixme[9]: action has type `FeatureData`; used as `Tensor`.
      action = action.float_features.transpose(0, 1)
      # pyre-fixme[6]: For 1st param expected `Tensor` but got `FeatureData`.
      action_indices = torch.argmax(action, dim=2).tolist()
      acc_reward = torch.tensor(
          list(
              map(lambda x: float("".join(map(str, x))), action_indices)
          )
      ).reshape(-1, 1)
      logger.info(f"acc_reward: {acc_reward}")
      return rlt.Seq2RewardOutput(acc_reward=acc_reward)
  
imports: import logging
  import os
  import random
  import unittest
  from typing import Optional
  import numpy
  import pytorch_lightning
  import torch
  import torch.nn
  from parameterized import parameterized
  from reagent.core import types
  from reagent.core.parameters import NormalizationData, NormalizationParameters, ProblemDomain, Seq2RewardTrainerParameters
  from reagent.gym.envs import Gym
  from reagent.gym.utils import create_df_from_replay_buffer
  from reagent.models.seq2reward_model import Seq2RewardNetwork
  from reagent.net_builder.value.fully_connected import FullyConnected
  from reagent.prediction.predictor_wrapper import FAKE_STATE_ID_LIST_FEATURES, FAKE_STATE_ID_SCORE_LIST_FEATURES, Seq2RewardPlanShortSeqWithPreprocessor, Seq2RewardWithPreprocessor
  from reagent.preprocessing.identify_types import DO_NOT_PREPROCESS
  from reagent.preprocessing.preprocessor import Preprocessor
  from reagent.training.utils import gen_permutations
  from reagent.training.world_model.compress_model_trainer import CompressModelTrainer
  from reagent.training.world_model.seq2reward_trainer import get_Q, Seq2RewardTrainer
  from torch.utils.data import DataLoader
label_desc: Use image node_id 1 for calling the FakeSeq2RewardNetwork obj's underlying member method code with example usage: obj.forward(state, action, valid_reward_len) and returns: rlt