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)
def get_visibility ( wxdata : [ str ] , units : Units ) -> ( [ str ] , Number ) : visibility = '' if wxdata : item = copy ( wxdata [ 0 ] ) if item . endswith ( 'SM' ) : 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' ) ] wxdata . pop ( 0 ) units . visibility = 'sm' 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' elif len ( wxdata ) > 1 and wxdata [ 1 ] . endswith ( 'SM' ) and '/' in wxdata [ 1 ] and item . isdigit ( ) : vis1 = wxdata . pop ( 0 ) vis2 = wxdata . pop ( 0 ) . replace ( 'SM' , '' ) visibility = str ( int ( vis1 ) * int ( vis2 [ 2 ] ) + int ( vis2 [ 0 ] ) ) + vis2 [ 1 : ] units . visibility = 'sm' return wxdata , make_number ( visibility )
Returns the report list and removed visibility string