code: def verify_discrete_multi_steps_except_rewards(self, df):
      self.assertEq(
          df["sequence_number"], np.array([1, 2, 3, 4], dtype="int32")
      )
  
      state_features_presence = np.array(
          [
              [True, False, False, False, False],
              [False, True, False, False, False],
              [False, False, True, False, False],
              [False, False, False, True, False],
          ],
          dtype="bool",
      )
      self.assertEq(
          df["state_features_presence"], state_features_presence
      )
      state_features = np.array(
          [
              [1.0, 0.0, 0.0, 0.0, 0.0],
              [0.0, 1.0, 0.0, 0.0, 0.0],
              [0.0, 0.0, 1.0, 0.0, 0.0],
              [0.0, 0.0, 0.0, 1.0, 0.0],
          ],
          dtype="float32",
      )
      self.assertEqWithPresence(
          df["state_features"], state_features_presence, state_features
      )
  
      self.assertEq(df["action"], np.array([0, 1, 2, 3]))
      self.assertEq(
          df["action_probability"],
          np.array([0.3, 0.4, 0.5, 0.6], dtype="float32"),
      )
      self.assertEq(
          df["not_terminal"], np.array([1, 1, 0, 0], dtype="bool")
      )
  
      next_state_features_presence = np.array(
          [
              [False, False, True, False, False],
              [False, False, False, True, False],
              [False, False, False, False, True],
              [False, False, False, False, True],
          ],
          dtype="bool",
      )
      self.assertEq(
          df["next_state_features_presence"],
          next_state_features_presence,
      )
      next_state_features = np.array(
          [
              [0.0, 0.0, 1.0, 0.0, 0.0],
              [0.0, 0.0, 0.0, 1.0, 0.0],
              [0.0, 0.0, 0.0, 0.0, 1.0],
              [0.0, 0.0, 0.0, 0.0, 1.0],
          ],
          dtype="float32",
      )
      self.assertEqWithPresence(
          df["next_state_features"],
          next_state_features_presence,
          next_state_features,
      )
  
      self.assertEq(df["next_action"], np.array([2, 3, 4, 4]))
      self.assertEq(df["time_diff"], np.array([1, 1, 1, 1]))
      self.assertEq(df["step"], np.array([2, 2, 2, 1]))
      self.assertEq(
          df["possible_actions_mask"],
          np.array(
              [[1, 1, 0, 0], [0, 1, 1, 0], [0, 0, 1, 1], [0, 0, 0, 1]]
          ),
      )
      self.assertEq(
          df["possible_next_actions_mask"],
          np.array(
              [[0, 0, 1, 1], [0, 0, 0, 1], [0, 0, 0, 0], [0, 0, 0, 0]]
          ),
      )
  
file_path: ReAgent/reagent/test/workflow/test_query_data.py
imports: import logging
  import unittest
  import numpy
  import pytest
  from pyspark.sql.functions import asc
  from reagent.data.oss_data_fetcher import OssDataFetcher
  from reagent.test.test_data.ex_mdps import generate_discrete_mdp_pandas_df
  from reagent.test.workflow.reagent_sql_test_base import ReagentSQLTestBase
  from reagent.workflow.types import Dataset, TableSpec
label_desc: Use image node_id 6 for calling the TestQueryData obj's underlying member method code with example usage: obj.verify_discrete_multi_steps_except_rewards(df) without return types