o
    iw                     @   st   d dl mZ d dlZd dlmZ d dlmZ d dlmZ d dlmZ d dlm	Z	 G dd	 d	e
ZG d
d de
ZdS )    )unicode_literalsN)load_ark)load_scp_sequential)save_ark)open_like_kaldi)parse_specifierc                   @   sB   e Zd ZdZdddZdd Zdd Zd	d
 Zdd Zdd Z	dS )WriteHelperzA heghlevel interface to write ark or/and scp

    >>> helper = WriteHelper('ark,scp:a.ark,b.ark')
    >>> helper('uttid', array)

    Nc                 C   s   d| _ d| _|| _|| _t|}|d d ur |d d u r td|D ]}|| r4|dvr4td| q"|d | _	|d | _
|d }t|d	| _|d d urXt|d d
| _nd | _d| _ d S )NFscparkzWWriting only in a scp file is not supported. Please specify a ark file with a scp file.)r	   r
   tf2{} option is given, but currently it never affectsr   r   wbwT)initializedclosedcompression_methodwrite_functionr   
ValueErrorwarningswarnformattextflushr   farkfscp)self
wspecifierr   r   	spec_dictkark_file r!   E/home/ubuntu/.local/lib/python3.10/site-packages/kaldiio/highlevel.py__init__   s.   


zWriteHelper.__init__c                 C   sj   | j rtdt| j||i| j| j| j| jd | jr1| jd ur%| j  | jd ur3| j  d S d S d S )Nz#WriteHelper has been already closed)r	   r   r   r   )	r   RuntimeErrorr   r   r   r   r   r   r   )r   keyarrayr!   r!   r"   __call__0   s"   	


zWriteHelper.__call__c                 C   s   | || d S Nr!   )r   r%   valuer!   r!   r"   __setitem__B   s   zWriteHelper.__setitem__c                 C      | S r(   r!   r   r!   r!   r"   	__enter__E      zWriteHelper.__enter__c                 C   s   |    d S r(   )closer   exc_typeexc_valexc_tbr!   r!   r"   __exit__H   s   zWriteHelper.__exit__c                 C   s<   | j r| js| j  | jd ur| j  d| _d S d S d S NT)r   r   r   r/   r   r,   r!   r!   r"   r/   K   s   



zWriteHelper.close)NN)
__name__
__module____qualname____doc__r#   r'   r*   r-   r4   r/   r!   r!   r!   r"   r      s    
r   c                   @   s:   e Zd ZdZdddZdd Zdd Zd	d
 Zdd ZdS )
ReadHelpera,  A highlevel interface to load ark or scp

    >>> import numpy
    >>> array_in = numpy.random.randn(10, 10)
    >>> save_ark('feats.ark', {'foo': array_in}, scp='feats.scp')
    >>> helper = ReadHelper('ark:cat feats.ark |')
    >>> for uttid, array_out in helper:
    ...     assert uttid == 'foo'
    ...     numpy.testing.assert_array_equal(array_in, array_out)
    >>> helper = ReadHelper('scp:feats.scp')
    >>> for uttid, array_out in helper:
    ...     assert uttid == 'foo'
    ...     numpy.testing.assert_array_equal(array_in, array_out)

    Nc                 C   s   d| _ d | _d| _d | _|| _t|}|d d ur#|d d ur#td|D ]}|| r7|dvr7td	| q%|d | _
|d d urI|d | _nd| _| jr\t|d |d| _d | _n|d urdtd	t|d d
| _d| _ d S )NFr	   r
   z'Specify one of scp or ark in rspecifier)r	   r
   pr   r;   )segmentsz0Not supporting "segments" argument with ark filerbT)r   r	   r   	generatorr<   r   r$   r   r   r   
permissiver   filer   r   )r   r   r<   r   r   r!   r!   r"   r#   d   s2   

zReadHelper.__init__c              	   c   s    | j r,	 z	t| j\}}W n ty   Y d S  ty%   | jr$Y d S  w ||fV  q| j1}t|}	 zt|\}}W n tyF   Y n tyR   | jrQY n w ||fV  q5W d    n1 scw   Y  d| _d S r5   )	r	   nextr>   StopIteration	Exceptionr?   r@   r   r   )r   r   vr   itr!   r!   r"   __iter__   s>   


zReadHelper.__iter__c                 C   r+   r(   r!   r,   r!   r!   r"   r-      r.   zReadHelper.__enter__c                 C   s    | j s| js|   d S d S d S r(   )r	   r   r/   r0   r!   r!   r"   r4      s   zReadHelper.__exit__c                 C   s2   | j r| js| js| j  d| _d S d S d S d S r5   )r   r	   r   r@   r/   r,   r!   r!   r"   r/      s   

zReadHelper.closer(   )	r6   r7   r8   r9   r#   rF   r-   r4   r/   r!   r!   r!   r"   r:   S   s    
  r:   )
__future__r   r   kaldiio.matior   r   r   kaldiio.utilsr   r   objectr   r:   r!   r!   r!   r"   <module>   s    G