class_docstr: A wrapper for reward shaping, note this wrapper must be the first wrapper 
class_docstr_tok: ["A","wrapper","for","reward","shaping",",","note","this","wrapper","must","be","the","first","wrapper"]
docstr: define your own reward computation function
  Args:
      state_desc(dict): state description for current model
      reward(scalar): generic reward generated by env
      done(bool): generic done flag generated by env
      info(dict): generic info generated by env
docstr_tok: ["define","your","own","reward","computation","function","Args",":","state_desc","(","dict",")",":","state","description","for","current","model","reward","(","scalar",")",":","generic","reward","generated","by","env","done","(","bool",")",":","generic","done","flag","generated","by","env","info","(","dict",")",":","generic","info","generated","by","env"]
code: def reward_shaping(self, state_desc, reward, done, action, info):
      """define your own reward computation function
      Args:
          state_desc(dict): state description for current model
          reward(scalar): generic reward generated by env
          done(bool): generic done flag generated by env
          info(dict): generic info generated by env
      """
      pass
  
imports: import copy
  import numpy
  import gym
  import abc
  import math
  from osim.env import L2M2019Env
  from parl.utils import logger
label_desc: Use image node_id 2 for calling the RewardShaping obj's underlying member method code with example usage: obj.reward_shaping(state_desc, reward, done, action, info) without return types