o
    Pεi	                     @   s  U d Z ddlZddlZddlZddlZddlZddlZddlZddl	m
Z
mZmZmZmZmZmZmZ ddlmZ ejeeje f Zdaeje ed< 	ddejejejeeef   defdd	Ze Zd
edejeje  fddZ e!dkrej"e ej#ddd dS dS )z5Functions for comparing phonemes by a distance metric    N)_CONSONANTS	_DATA_DIR_SCHWAS_VOWELSFEATURE_KEYS	ConsonantSchwaVowel)	to_vector_CLOSESTsymbolsreturnc                    s   ddl }| stttt} t| }i }|D ]}|j|v rqt|||j< qt	
t| }t	|jd }d|td < d|td < d|td < d	|td
 < d|td < d|td < |jj|dd|d t|  fddtD }|S )zfCreate mapping from each IPA symbol to a list of other IPA symbols reverse ordered by feature distancer   N   g      ?vowel_placevowel_heightg{Gz?vowel_roundedg333333?consonant_placeconsonant_voicedconsonant_sounds_like	minkowski   )metricpwc                    s.   i | ]\}   fd d|   D qS )c                    s    g | ]} | kr | qS  r   ).0j)dist_symbolssr   G/home/ubuntu/.local/lib/python3.10/site-packages/gruut_ipa/distances.py
<listcomp>@   s     z-create_closest.<locals>.<dictcomp>.<listcomp>)argsort)r   idistr   )r   r   
<dictcomp>?   s    z"create_closest.<locals>.<dictcomp>)sklearn.metrics	itertoolschainr   r   r   listipar
   npvstackvaluesonesshaper   metricspairwise_distanceskeys	enumerate)r   sklearnsymbol_listvectorssymbolmatrixr   closestr   r#   r   create_closest   s.   
r:   r*   c              	   C   s   t + tdu r&td }t|d}t|aW d   n1 s!w   Y  W d   n1 s0w   Y  tdus;J t| S )zKGet a list of IPA symbols that are closest, ordered by increasing distance.Nzphoneme_distances.json.gzr)_CLOSEST_LOCKr   r   gzipopenjsonloadget)r*   closest_pathclosest_filer   r   r   get_closestJ   s   
rD   __main__   F)indentensure_ascii)N)$__doc__r=   r'   r?   sys	threadingtypingnumpyr+   gruut_ipa.constantsr   r   r   r   r   r   r   r	   gruut_ipa.featuresr
   MappingstrSequence_CLOSEST_TYPEr   Optional__annotations__IterableUnionr:   Lockr<   rD   __name__dumpstdoutr   r   r   r   <module>   s2   (

+