
    g#                        d dl mZ ddlmZ dedefdZdedee         fdZdedee         fdZ	dedee         fd	Z
dedee         fd
Zdedee         fdZdedee         fdZdedee         fdZdedee         fdZdS )    )Optional   )commonmsgreturnc                    t          j        |           rdS t          j        t          j        |                     }t          j        |ddd          rdS t          j        |ddd          rdS t          j        |dd	d
          rdS t          j        |ddd          rdS t          j        |ddd          rdS t          j        |ddd          rdS t          j        |ddd          rdS t          j        |ddd          rdS t          j        |dd                   dk    rdS t          |           }|r|dk    s|dk     rdS dS )zCheck if a message is likely to be BDS code 4,5.

    Meteorological hazard report

    Args:
        msg (str): 28 hexdigits string

    Returns:
        bool: True or False

    F      r                  	   
                                 &   '   (   3   8   r   <   iT)r   allzeroshex2bindatawrongstatusbin2inttemp45)r   dtemps      K/home/andy/.local/lib/python3.11/site-packages/pyModeS/decoder/bds/bds45.pyis45r+      sx    s uv{3''((A !Q1%% u!Q1%% u!Q1%% u!RR(( u!RR(( u!RR(( u!RR(( u!RR(( u ~a2h1$$u#;;D "99s

54    c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   }|S )zTurbulence.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: Turbulence level. 0=NIL, 1=Light, 2=Moderate, 3=Severe

    r   0Nr	   r   r   r#   r$   r&   )r   r(   turbs      r*   turb45r1   A   sK     	v{3''((Ats{{t>!AaC&!!DKr,   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   }|S )zWind shear.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: Wind shear level. 0=NIL, 1=Light, 2=Moderate, 3=Severe

    r   r.   Nr   r   r/   r   r(   wss      r*   ws45r5   S   K     	v{3''((Ats{{t	!A#		BIr,   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   }|S )zMicroburst.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: Microburst level. 0=NIL, 1=Light, 2=Moderate, 3=Severe

    r   r.   Nr   r   r/   )r   r(   mbs      r*   mb45r9   e   r6   r,   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   }|S )zIcing.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: Icing level. 0=NIL, 1=Light, 2=Moderate, 3=Severe

    r   r.   Nr   r   r/   )r   r(   ics      r*   ic45r<   w   sK     	v{3''((Ats{{t	"R%	!	!BIr,   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   }|S )zWake vortex.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: Wake vortex level. 0=NIL, 1=Light, 2=Moderate, 3=Severe

    r   r.   Nr   r   r/   r3   s      r*   wv45r>      sK     	v{3''((Au||t	"R%	!	!BIr,   c                     t          j        t          j        |                     }t          |d                   }t          j        |dd                   }|r|dz
  }|dz  }|S )zStatic air temperature.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        float: tmeperature in Celsius degree

    r   r   r   i   g      ?)r   r#   r$   intr&   )r   r(   signvaluer)   s        r*   r'   r'      sb     	v{3''((Aqu::DN1RU8$$E 4<DKr,   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   }|S )zAverage static pressure.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: static pressure in hPa

    r   r.   Nr   r   r/   )r   r(   ps      r*   p45rE      sK     	v{3''((Au||tqBx  AHr,   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   dz  }|S )zsRadio height.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: radio height in ft

    r   r.   Nr   r   r   r/   )r   r(   rhs      r*   rh45rH      sP     	v{3''((Au||t	"R%	!	!B	&BIr,   N)typingr    r   strboolr+   r@   r1   r5   r9   r<   r>   floatr'   rE   rH    r,   r*   <module>rO      s              3c 3d 3 3 3 3l     $c hsm    $c hsm    $c hsm    $c hsm    $     .S Xc]    "c hsm      r,   