code: def set_reward_col_as_reward(
      df,
      custom_reward_expression: Optional[str] = None,
      multi_steps: Optional[int] = None,
      gamma: Optional[float] = None,
  ):
      # after this, reward column should be set to be the reward
      if custom_reward_expression is not None:
          df = calc_custom_reward(df, custom_reward_expression)
      elif multi_steps is not None:
          assert gamma is not None
          df = calc_reward_multi_steps(df, multi_steps, gamma)
      return df
  
imports: import logging
  from typing import List, Optional, Tuple
  from pyspark.sql.functions import col, crc32, explode, map_keys, udf
  from pyspark.sql.types import ArrayType, BooleanType, FloatType, LongType, MapType, StructField, StructType
  from reagent.data.data_fetcher import DataFetcher
  from reagent.data.spark_utils import get_spark_session, get_table_url
  from reagent.workflow.types import Dataset, TableSpec
label_desc: Use image node_id 3 for calling a global function with example usage: set_reward_col_as_reward(df, custom_reward_expression, multi_steps, gamma) and returns: df