code: def parse_na(txt: str) -> (MetarData, Units):  # type: ignore
      
      units = Units(**NA_UNITS)  # type: ignore
      clean = core.sanitize_report_string(txt)
      wxresp = {'raw': txt, 'sanitized': clean}
      wxdata, wxresp['remarks'] = core.get_remarks(clean)
      wxdata, wxresp['runway_visibility'], _ = core.sanitize_report_list(wxdata)
      wxdata, wxresp['station'], wxresp['time'] = core.get_station_and_time(wxdata)
      wxdata, wxresp['clouds'] = core.get_clouds(wxdata)
      wxdata, wxresp['wind_direction'], wxresp['wind_speed'], \
          wxresp['wind_gust'], wxresp['wind_variable_direction'] = core.get_wind(wxdata, units)
      wxdata, wxresp['altimeter'] = core.get_altimeter(wxdata, units, 'NA')
      wxdata, wxresp['visibility'] = core.get_visibility(wxdata, units)
      wxresp['other'], wxresp['temperature'], wxresp['dewpoint'] = core.get_temp_and_dew(wxdata)
      condition = core.get_flight_rules(wxresp['visibility'], core.get_ceiling(wxresp['clouds']))  # type: ignore
      wxresp['flight_rules'] = FLIGHT_RULES[condition]
      wxresp['remarks_info'] = remarks.parse(wxresp['remarks'])  # type: ignore
      wxresp['time'] = core.make_timestamp(wxresp['time'])  # type: ignore
      return MetarData(**wxresp), units
docs: Parser for the North American METAR variant