o
    °©i€   ã                   @   s\   d dl mZ d dlZd dlZdZdZdZdZdZ	dZ
d	ZG d
d„ deƒZG dd„ deƒZdS )é    )Úunicode_literalsNé   é   é   é   é   é   é   c                   @   s\   e Zd ZdZddd„Zedd„ ƒZeddd	„ƒZddd„Z	eddd„ƒZ
dd„ Zdd„ Zd
S )ÚGlobalHeaderz:This is a imitation class of the structure "GlobalHeader" ú<c                 C   sX   |dv rd}n|dkrd}nt d |¡ƒ‚|| _|| _|| _|| _|| _|| _|| _d S )N)ÚCMÚCM2ç    àÿï@ÚCM3ç     ào@zNot supported type={})	ÚRuntimeErrorÚformatÚtypeÚcÚ	min_valueÚrangeÚrowsÚcolsÚendian)Úselfr   r   r   r   r   r   r   © r   úN/home/ubuntu/.local/lib/python3.10/site-packages/kaldiio/compression_header.pyÚ__init__   s   
zGlobalHeader.__init__c                 C   s   dt | jƒ S )Né   )Úlenr   ©r   r   r   r   Úsize#   s   zGlobalHeader.sizer   c                 C   sz   t  |d |  d¡¡d }t  |d |  d¡¡d }t  |d |  d¡¡d }t  |d |  d¡¡d }t||||||ƒS )NÚfr   r   Úi)ÚstructÚunpackÚreadr
   )Úfdr   r   r   r   r   r   r   r   r   r&   '   s
   zGlobalHeader.readNc                 C   sˆ   |d u r| j }| | j ¡ d ¡ | t |d | j¡¡ | t |d | j¡¡ | t |d | j¡¡ | t |d | j	¡¡ | j
S )Nó    r"   r#   )r   Úwriter   Úencoder$   Úpackr   r   r   r   r!   )r   r'   r   r   r   r   r)   /   s   zGlobalHeader.writec                 C   s  |t kr| jd dkrt}nt}|tkrd}n!|tks|tkr"d}n|tks.|tks.|tkr1d}ntd 	|¡ƒ‚|tksD|tksD|tkr]|  
¡ }|  ¡ }||krX|dt|ƒ  }|| }n"|tkrfd}d	}n|tkrod
}d}n|tkrxd
}d}ntd 	|¡ƒ‚t|||| jd | jd |ƒS )Nr   é   r   r   r   zUnknown compression_method: {}g      ð?g      àÀr   ç        r   r   )ÚkAutomaticMethodÚshapeÚkSpeechFeatureÚkTwoByteAutoÚkTwoByteSignedIntegerÚkOneByteAutoÚkOneByteUnsignedIntegerÚkOneByteZeroOneÚ
ValueErrorr   ÚminÚmaxÚabsr
   )ÚarrayÚcompression_methodr   Úmatrix_typer   Ú	max_valueÚrange_r   r   r   Úcompute9   sN   ÿ
ÿÿzGlobalHeader.computec                 C   sV   | j dkrt | jd ¡}nt | jd ¡}|| j | j | j  d }| t |¡¡S )Nr   Úu2Úu1gV-²ïß?)r   ÚnpÚdtyper   r   r   Úastype)r   r:   rC   r   r   r   Úfloat_to_uinto   s
   
zGlobalHeader.float_to_uintc                 C   s"   |  tj¡}| j|| j | j  S ©N)rD   rB   Úfloat32r   r   r   )r   r:   r   r   r   Úuint_to_floatx   s   zGlobalHeader.uint_to_float©r   )r   r   rF   )Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   Úpropertyr!   Ústaticmethodr&   r)   r?   rE   rH   r   r   r   r   r
      s    



5	r
   c                   @   sX   e Zd ZdZddd„Zedd„ ƒZedd„ ƒZdd
d„Z	edd„ ƒZ
dd„ Zdd„ Zd	S )ÚPerColHeaderz:This is a imitation class of the structure "PerColHeader" r   c                 C   s"   || _ || _|| _|| _|| _d S rF   )Úp0Úp25Úp75Úp100r   )r   rQ   rR   rS   rT   r   r   r   r   r   €   s
   
zPerColHeader.__init__c                 C   s   d| j jd  S )Nr,   r   )rQ   r/   r    r   r   r   r!   ˆ   s   zPerColHeader.sizec                 C   s˜   |j }d}|  ||j ¡}tj|t |d ¡d}t |tj¡}| |¡}| 	ddd¡}t
|d d …df |d d …df |d d …df |d d …d	f |ƒS )
Nr,   r@   )rC   éÿÿÿÿr   r   r   r   r   )r   r&   r   rB   Ú
frombufferrC   ÚasarrayrG   rH   ÚreshaperP   )r'   Úglobal_headerr   Úsize_of_percolheaderÚbufÚheader_arrayr   r   r   r&   Œ   s   
ûzPerColHeader.readNc                 C   sd   |d u r| j }tj| j| j| j| jgdd}| |¡}| t 	|d ¡¡}| 
¡ }| |¡ t|ƒS )Nr   ©Úaxisr@   )r   rB   ÚconcatenaterQ   rR   rS   rT   rE   rD   rC   Útobytesr)   r   )r   r'   rY   r   r\   Úbyte_strr   r   r   r)   Ÿ   s   

zPerColHeader.writec                 C   sÖ  | j d d }| j d dkr9tj| d|d| | j d d gdd}|d }|| }|d|  }|| j d d  }n;tj| dd}|d }| j d dkrP|d }n|d }| j d dkr`|d }n|d }| j d dkrp|d }n|d }| |¡}| |¡}| |¡}| |¡}t |d¡}t t ||d ¡d	¡}t t ||d ¡d
¡}t ||d ¡}| |¡}| |¡}| |¡}| |¡}|d d …d f }|d d …d f }|d d …d f }|d d …d f }t|||||j	ƒS )Nr   r   r   r   r   r]   r   iüÿ  iýÿ  iþÿ  )
r/   rB   Ú	partitionÚsortrE   ÚminimumÚmaximumrH   rP   r   )r:   rY   Ú
quarter_nrÚsrowsrQ   rR   rS   rT   r   r   r   r?   ©   sJ   ÿ










zPerColHeader.computec              	   C   s  | j | j| j| jf\}}}}||k }||k}| |  }|| ||  d d }	t |	dk dt |	dkd|	¡¡}	|| ||  d d }
t |
dk dt |
dkd|
¡¡}
|| ||  d d }t |dk dt |d	kd	|¡¡}t ||	t ||
|¡¡}| t | jd
 ¡¡S )Nç      P@g      à?r-   g      `@g      P@ç      h@g     €O@g     h@r   rA   )	rQ   rR   rS   rT   rB   ÚwhererD   rC   r   )r   r:   rQ   rR   rS   rT   Úma1Úma3Úma2ÚtmpÚtmp2Útmp3r   r   r   Úfloat_to_charØ   s      zPerColHeader.float_to_charc           	      C   s”   |  tj¡}| j| j| j| jf\}}}}|dk}|dk}| |  }t |||| | d  t |||| |d  d  ||| |d  d  ¡¡S )Né@   éÀ   g      ?rh   g      €?ri   gAA?)rD   rB   rG   rQ   rR   rS   rT   rj   )	r   r:   rQ   rR   rS   rT   rk   rl   rm   r   r   r   Úchar_to_floatë   s   ýýzPerColHeader.char_to_floatrI   rF   )rJ   rK   rL   rM   r   rN   r!   rO   r&   r)   r?   rq   rt   r   r   r   r   rP   }   s    





.rP   )Ú
__future__r   r$   ÚnumpyrB   r.   r0   r1   r2   r3   r4   r5   Úobjectr
   rP   r   r   r   r   Ú<module>   s    l