
    g                         d Z ddlmZ ddlZddlmZ ddlmZ ddlm	Z	m
Z
mZmZmZmZmZmZmZmZmZ d	ed
edededee         f
dZdd	ededee         fdZdS )z&
Common functions for Mode-S decoding
    )OptionalN   )common)aero   )bds10bds17bds20bds30bds40bds44bds45bds50bds60bds61bds62msgspd_reftrk_refalt_refreturnc                 D   d }t          j        |           rt          j        |           sdS t          j        |           }t          j        |           }t          j        |           }|I|Gt          j        ||t          j	        z            t          j
        z  }t          ||z
            dk    rdS |||dS |t          j        n|}|t          j        n|}t          j        |           }	t          j        |           }
|	|
dS  ||
t          j
        z  |	          } |t          j        ||t          j	        z            |          } |t          j        |t          j
        z  |t          j	        z            |          }g d}t          j        |||g          }t          j         ||t          j
        z  |                    }	 t          j                            ||z
  d          }|t          j        |                   }n# t,          $ r Y dS w xY w|S )	a  Use reference ground speed and trk to determine BDS50 and DBS60.

    Args:
        msg (str): 28 hexdigits string
        spd_ref (float): reference speed (ADS-B ground speed), kts
        trk_ref (float): reference track (ADS-B track angle), deg
        alt_ref (float): reference altitude (ADS-B altitude), ft

    Returns:
        String or None: BDS version, or possible versions,
          or None if nothing matches.

    c                     | t          j        t          j        |                    z  }| t          j        t          j        |                    z  }||fS )N)npsinradianscos)vanglevxvys       N/home/andy/.local/lib/python3.11/site-packages/pyModeS/decoder/bds/__init__.pyvxyzis50or60.<locals>.vxy;   sG    
5))***
5))***2v    N   BDS50zBDS50,BDS60)r&   BDS60r'   r   )axis)r   is50r   is60hdg60mach60ias60r   mach2casftktsabsr   nantrk50gs50mach2tascas2tasarraylinalgnorm	nanargmin
ValueError)r   r   r   r   r#   h60m60i60ias_h50v50XY5XY6mXY6iallbdsXMudistBDSs                      r"   is50or60rJ   *   s   "   JsOO 
3 t +c

C
,s

C
+c

C 	co}S'DG"344tx?sTz??R7
{s{s{}K"&&SCK"&&SC +c

C
*S//C
{ck}
#cDHnc
"
"C3t}S'DG"344c::D3t|C$(NGdg,=>>DDD(((F
#tT"##A	##g('22	3	3By~~a"f1~--R\$''(   }} Js   >H 
HHFmrarc           	         t          j        |           }t          j        |           rdS |dk    rt          j        |           }|dS d|cxk    rdk    rn ndS d|cxk    rdk    rn nd	S d
|cxk    rdk    rn ndS |dk    rdS d|cxk    rdk    rn ndS |dk    rdS |dk    rdS |dk    rdS t	          j        |           }t          j        |           }t          j	        |           }t          j        |           }t          j        |           }t          j        |           }	t!          j        |           }
t%          j        |           }t)          j        |           }|r"t-          j        g d          }||||||||	|
g	}nt-          j        g d          }||||||	|
g}d                    t3          ||                             }t5          |          dk    rdS |S )a4  Estimate the most likely BDS code of an message.

    Args:
        msg (str): 28 hexdigits string
        mrar (bool): Also infer MRAR (BDS 44) and MHR (BDS 45).
          Defaults to False.

    Returns:
        String or None: BDS version, or possible versions,
          or None if nothing matches.

    EMPTY   Nr      BDS08      BDS06	      BDS05   BDS09r%         BDS61   BDS62   BDS65)	BDS10BDS17BDS20BDS30BDS40BDS44BDS45r&   r'   )r`   ra   rb   rc   rd   r&   r'   ,r   )r   dfallzerostypecoder   is10r	   is17r
   is20r   is30r   is40r   r)   r   r*   r   is44r   is45r   r7   joinsortedlen)r   rK   rh   tcIS10IS17IS20IS30IS40IS50IS60IS44IS45rE   maskbdss                   r"   inferr   u   s    
3Bs w 
Rxx_S!!:4<<<<a<<<<<7<<<<a<<<<<7====b=====7887>>>>r>>>>>7887887887 :c??D:c??D:c??D:c??D:c??D:c??D:c??D:c??D:c??D :
 
 

 
 dD$dD$EKKK
 
 dD$dD9
((6&,''
(
(C
3xx1}}t
r$   )F)__doc__typingr   numpyr    r   extrar   r   r	   r
   r   r   r   r   r   r   r   r   strfloatrJ   boolr    r$   r"   <module>r      se  "                                                H	HH',H7<Hc]H H H HVN Ns N$ N8C= N N N N N Nr$   