docs: def get_visibility(wxdata: [str], units: Units) -> ([str], Number):  # type: ignore
      """
      Returns the report list and removed visibility string
      """
      visibility = ''  # type: ignore
      if wxdata:
          item = copy(wxdata[0])
          # Vis reported in statue miles
          if item.endswith('SM'):  # 10SM
              if item in ('P6SM', 'M1/4SM'):
                  visibility = item[:-2]
              elif '/' not in item:
                  visibility = str(int(item[:item.find('SM')]))
              else:
                  visibility = item[:item.find('SM')]  # 1/2SM
              wxdata.pop(0)
              units.visibility = 'sm'
          # Vis reported in meters
          elif len(item) == 4 and item.isdigit():
              visibility = wxdata.pop(0)
              units.visibility = 'm'
          elif 7 >= len(item) >= 5 and item[:4].isdigit() \
                  and (item[4] in ['M', 'N', 'S', 'E', 'W'] or item[4:] == 'NDV'):
              visibility = wxdata.pop(0)[:4]
              units.visibility = 'm'
          elif len(item) == 5 and item[1:].isdigit() and item[0] in ['M', 'P', 'B']:
              visibility = wxdata.pop(0)[1:]
              units.visibility = 'm'
          elif item.endswith('KM') and item[:item.find('KM')].isdigit():
              visibility = item[:item.find('KM')] + '000'
              wxdata.pop(0)
              units.visibility = 'm'
          # Vis statute miles but split Ex: 2 1/2SM
          elif len(wxdata) > 1 and wxdata[1].endswith('SM') and '/' in wxdata[1] and item.isdigit():
              vis1 = wxdata.pop(0)  # 2
              vis2 = wxdata.pop(0).replace('SM', '')  # 1/2
              visibility = str(int(vis1) * int(vis2[2]) + int(vis2[0])) + vis2[1:]  # 5/2
              units.visibility = 'sm'
      return wxdata, make_number(visibility)