o
    Pεi`!                     @   s  d 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mZmZmZmZmZmZmZmZmZmZmZ dejeeeef deje fddZdeje dejeeeef fd	d
Zdedejeeeef fddZdejeef deje fddZdeje dejeef fddZ dS )zAFunctions for converting IPA symbols to and from feature vectors.    N)
CONSONANTSFEATURE_COLUMNSFEATURE_EMPTYFEATURE_KEYSFEATURE_ORDINAL_COLUMNSIPASCHWASVOWELSBreak	BreakType	ConsonantConsonantPlaceConsonantTypePhonemeLengthSchwaStressVowelVowelHeightVowelPlacementsymbolreturnc                 C   s\  i }t | tr@d|d< d|d< | jj|d< | jj|d< | jr dnd|d	< | jj|d
< | jr1d|d< | jdur<| jj|d< t|S t | t	ryd|d< d|d< | j
rRdnd|d< | jj|d< | jj|d< | jj|d< | jj|d
< | jrud|d< t|S t | trd|d< d|d< | jj|d
< | jrd|d< t|S t | trd|d< | jj|d< t|S t| )z'Converts a symbol into a feature vectorphonemesymbol_typevowelphoneme_typevowel_heightvowel_placerounded	unroundedvowel_roundedphoneme_length	nasalated	diacriticNvowel_stress	consonantvoicedunvoicedconsonant_voicedconsonant_typeconsonant_placeconsonant_sounds_like	velarizedschwarbreak
break_type)
isinstancer   heightvalue	placementr   lengthr!   stressr   r%   typeplacesounds_liker+   r   
r_colouredr
   
ValueErrorfeatures_to_vector)r   features r=   F/home/ubuntu/.local/lib/python3.10/site-packages/gruut_ipa/features.py	to_vector   sH   



	
r?   vectorc                 C   sJ  t | }|d dkrt|d }t|S |d dkr|d dkrt|d }t|d }|d	 d
k}|d dk}t|d }d}|d }	|	tkrMt|	}t	 D ],}
|
j
|kr}|
j|kr}|
j|kr}|
j|kr}|du rt|tjkrt|
  S tj|
|d  S qQtd| |d dkrt|d }t|d }|d dk}|d dk}t|d }t	 D ](}|j|kr|j|kr|j|kr|j|kr|tjkr|  S tj||d  S qtd| |d dkr|d dk}t|d }t	 D ]}|j|kr|tjkr|  S tj||d  S qtd| td| td| )z,Converts a feature vector back into a symbolr   r.   r/   r   r   r   r   r   r   r   r"   r!   r    Nr#   )r5   zUnknown vowel: r$   r(   r)   r'   r%   r+   r4   r,   r*   r-   zUnknown phoneme type: zUnknown symbol type: )vector_to_featuresr   r
   r   r   r   r   r   r	   valuesr1   r3   r   r!   NORMALdataclassesreplacer:   r   r   r   r6   r7   r%   r+   r   r9   )r@   r<   r/   r1   r3   r   r!   r4   r5   
stress_valr   c_typer7   r%   r+   r$   r9   r,   r=   r=   r>   from_vectorO   sj   








rI   
symbol_strc                 C   s^  | st d| tjkrttjS | tjkrttjS | tjkr$ttj	S d}| d tj
kr7tj}| dd } n| d tjkrGtj}| dd } | sMt dtj}| d tjkratj}| dd } n| d tjkrqtj}| dd } | swt dt| }|durtj|||dS t| }|durtj||dS t| }|durtj||dS t d	|  )
z#Get gruut IPA object for IPA symbolzEmpty symbolNr      z
No letters)r5   r4   rA   zUnsupported symbol type: )r:   r   
BREAK_WORDr
   r   WORDBREAK_MINORMINORBREAK_MAJORMAJORSTRESS_PRIMARYr   PRIMARYSTRESS_SECONDARY	SECONDARYr   rD   	HALF_LONGSHORTLONGr	   getrE   rF   r   r   )rJ   maybe_stressr4   maybe_vowelmaybe_consonantmaybe_schwar=   r=   r>   string_to_symbol   sH   








r_   r<   c                 C   sh   g }t  D ]+\}}| |t}|tv r!|||t|  q|D ]}|||kr-dnd q#q|S )z*Create phoneme feature vector from mapping      ?g        )r   itemsrZ   r   r   appendindexlen)r<   r@   colrC   r2   vr=   r=   r>   r;      s   r;   c                 C   s   i }t  D ]A\}}t| }|tv r$t|tsJ t| | t| }nt|ts+J d| | vr:J ||| | f| | d}|| ||< q|S )z*Create mapping from phoneme feature vectorr`   )	r   ra   r   r   r0   intrd   slicerc   )r@   r<   col_namerC   col_keyval_idxr=   r=   r>   rB      s   rB   )!__doc__rE   typinggruut_ipa.constantsr   r   r   r   r   r   r   r	   r
   r   r   r   r   r   r   r   r   r   r   UnionSequencefloatr?   rI   strr_   Mappingr;   rB   r=   r=   r=   r>   <module>   s"   T
2
 P"7&