docs: def pa(cls, ab, game, rosters, inning_number, inning_id, out_ct, hit_location):
          """
          plate appearance data
          :param ab: at bat object(type:Beautifulsoup)
          :param game: MLBAM Game object
          :param rosters: Game Rosters
          :param inning_number: Inning Number
          :param inning_id: Inning Id(0:home 1:away)
          :param pitch_list: Pitching
          :param out_ct: out count
          :param hit_location: Hitlocation data(dict)
          :return: {
              'retro_game_id': Retrosheet Game id
              'game_type': Game Type(S/R/F/D/L/W)
              'game_type_des': Game Type Description
              (Spring Training or Regular Season or Wild-card Game or Divisional Series or LCS or World Series)
              'st_fl': Spring Training FLAG(T or F)
              'regseason_fl': Regular Season FLAG(T or F)
              'playoff_fl': Play Off Flag(T or F)
              'local_game_time': Game Time(UTC -5)
              'game_id': Game Id
              'home_team_id': Home Team Id
              'home_team_lg': Home Team league(AL or NL)
              'away_team_id': Away Team Id
              'away_team_lg': Away Team league(AL or NL)
              'home_team_name': Home Team Name
              'away_team_name': Away Team Name
              'home_team_name_full': Home Team Name(Full Name)
              'away_team_name_full': Away Team Name(Full Name)
              'interleague_fl': Inter League Flag(T or F)
              'park_id': Park Id
              'park_name': Park Name
              'park_loc': Park Location
              'inning_number': Inning Number
              'bat_home_id': Batter Id
              'outs_ct': Out count
              'pit_mlbid': Pitcher Id
              'pit_first_name': Pitcher First Name
              'pit_last_name': Pitcher Last Name
              'pit_box_name': Pitcher Box name
              'pit_hand_cd': Pitcher Throw Hand(R or L)
              'bat_first_name': Batter First Name
              'bat_last_name': Batter Last Name
              'bat_box_name': Batter Box name
              'ab_number': At Bat Sequence Number in Game
              'start_bases': Bases(Before At Bat)
              (___, 1__, 12_, 123, etc...)
              'end_bases': Bases(After At Bat)
              (___, 1__, 12_, 123, etc...)
              'event_outs_ct': Event Out Count
              'ab_des': At Bat Description
              'event_tx': Event Text
              'event_cd': Event Code for Retrosheet http://www.retrosheet.org/datause.txt
              'hit_x': Hit Location(x)
              'hit_y': Hit Location(y)
              'event_num': Event Sequence Number(atbat, pitch, action)
              'home_team_runs': Score(Home)
              'away_team_runs': Score(Away)
          }
          """
          ab_des = MlbamUtil.get_attribute_stats(ab, 'des', str, MlbamConst.UNKNOWN_FULL)
          event_tx = MlbamUtil.get_attribute_stats(ab, 'event', str, MlbamConst.UNKNOWN_FULL)
          event_cd = RetroSheet.event_cd(event_tx, ab_des)
          event_outs_ct = MlbamUtil.get_attribute_stats(ab, 'o', int, 0)
          start_bases, end_bases = cls._get_bases(ab)
          pit_mlbid = MlbamUtil.get_attribute_stats(ab, 'pitcher', str, MlbamConst.UNKNOWN_FULL)
          bat_mlbid = MlbamUtil.get_attribute_stats(ab, 'batter', str, MlbamConst.UNKNOWN_FULL)
          pit_player = rosters.get(pit_mlbid)
          bat_player = rosters.get(bat_mlbid)
          location_key = Inning.HITLOCATION_KEY_FORMAT.format(
              inning=inning_number,
              des=event_tx,
              pitcher=pit_mlbid,
              batter=bat_mlbid,
          )
          location = hit_location.get(location_key, {})
          atbat = OrderedDict()
          atbat['retro_game_id'] = game.retro_game_id
          atbat['year'] = game.timestamp.year
          atbat['month'] = game.timestamp.month
          atbat['day'] = game.timestamp.day
          atbat['st_fl'] = game.st_fl
          atbat['regseason_fl'] = game.regseason_fl
          atbat['playoff_fl'] = game.playoff_fl
          atbat['game_type'] = game.game_type
          atbat['game_type_des'] = game.game_type_des
          atbat['local_game_time'] = game.local_game_time
          atbat['game_id'] = game.game_id
          atbat['home_team_id'] = game.home_team_id
          atbat['away_team_id'] = game.away_team_id
          atbat['home_team_lg'] = game.home_team_lg
          atbat['away_team_lg'] = game.away_team_lg
          atbat['interleague_fl'] = game.interleague_fl
          atbat['park_id'] = game.park_id
          atbat['park_name'] = game.park_name
          atbat['park_location'] = game.park_loc
          atbat['inning_number'] = inning_number
          atbat['bat_home_id'] = inning_id
          atbat['outs_ct'] = out_ct
          atbat['pit_mlbid'] = pit_mlbid
          atbat['pit_first_name'] = pit_player.first
          atbat['pit_last_name'] = pit_player.last
          atbat['pit_box_name'] = pit_player.box_name
          atbat['pit_hand_cd'] = MlbamUtil.get_attribute_stats(ab, 'p_throws', str, MlbamConst.UNKNOWN_FULL)
          atbat['bat_mlbid'] = bat_mlbid
          atbat['bat_first_name'] = bat_player.first
          atbat['bat_last_name'] = bat_player.last
          atbat['bat_box_name'] = bat_player.box_name
          atbat['bat_hand_cd'] = MlbamUtil.get_attribute_stats(ab, 'stand', str, MlbamConst.UNKNOWN_FULL)
          atbat['ab_number'] = MlbamUtil.get_attribute_stats(ab, 'num', int, None)
          atbat['start_bases'] = start_bases
          atbat['end_bases'] = end_bases
          atbat['event_outs_ct'] = event_outs_ct
          atbat['ab_des'] = ab_des
          atbat['event_tx'] = event_tx
          atbat['event_cd'] = event_cd
          atbat['hit_x'] = location.get('hit_x', None)
          atbat['hit_y'] = location.get('hit_y', None)
          atbat['event_num'] = MlbamUtil.get_attribute_stats(ab, 'event_num', int, -1)
          atbat['home_team_runs'] = MlbamUtil.get_attribute_stats(ab, 'home_team_runs', int, 0)
          atbat['away_team_runs'] = MlbamUtil.get_attribute_stats(ab, 'away_team_runs', int, 0)
          return atbat