o
    i6	                     @   sf   d dl Zd dlmZ d dlmZ d dlZd dlm	Z	 d dl
mZ G dd dZG dd	 d	ejjZdS )
    N)Path)Union)check_argument_types)read_2column_textc                   @   sZ   e Zd ZdZdeeef deeef fddZdd Zdd	 Z	d
d Z
dd Zdd ZdS )NpyScpWriteraR  Writer class for a scp file of numpy file.

    Examples:
        key1 /some/path/a.npy
        key2 /some/path/b.npy
        key3 /some/path/c.npy
        key4 /some/path/d.npy
        ...

        >>> writer = NpyScpWriter('./data/', './data/feat.scp')
        >>> writer['aa'] = numpy_array
        >>> writer['bb'] = numpy_array

    outdirscpfilec                 C   sV   t  sJ t|| _| jjddd t|}|jjddd |jddd| _i | _d S )NTparentsexist_okwzutf-8)encoding)r   r   dirmkdirparentopenfscpdata)selfr   r    r   J/home/ubuntu/.local/lib/python3.10/site-packages/espnet2/fileio/npy_scp.py__init__   s   


zNpyScpWriter.__init__c                 C   
   | j | S Nr   r   keyr   r   r   get_path%      
zNpyScpWriter.get_pathc                 C   sr   t |tjsJ t|| j| d }|jjddd tt|| | j	
| d| d t|| j|< d S )Nz.npyTr	    
)
isinstancenpndarraytyper   r   r   savestrr   writer   )r   r   valuepr   r   r   __setitem__(   s   zNpyScpWriter.__setitem__c                 C   s   | S r   r   r   r   r   r   	__enter__2      zNpyScpWriter.__enter__c                 C   s   |    d S r   )close)r   exc_typeexc_valexc_tbr   r   r   __exit__5   s   zNpyScpWriter.__exit__c                 C   s   | j   d S r   )r   r.   r+   r   r   r   r.   8   s   zNpyScpWriter.closeN)__name__
__module____qualname____doc__r   r   r&   r   r   r*   r,   r2   r.   r   r   r   r   r      s    "

r   c                   @   s^   e Zd ZdZdeeef fddZdd Zde	j
fdd	Zd
d Zdd Zdd Zdd ZdS )NpyScpReadera  Reader class for a scp file of numpy file.

    Examples:
        key1 /some/path/a.npy
        key2 /some/path/b.npy
        key3 /some/path/c.npy
        key4 /some/path/d.npy
        ...

        >>> reader = NpyScpReader('npy.scp')
        >>> array = reader['key1']

    fnamec                 C   s"   t  sJ t|| _t|| _d S r   )r   r   r8   r   r   )r   r8   r   r   r   r   K   s   

zNpyScpReader.__init__c                 C   r   r   r   r   r   r   r   r   P   r   zNpyScpReader.get_pathreturnc                 C   s   | j | }t|S r   )r   r"   load)r   r   r)   r   r   r   __getitem__S   s   

zNpyScpReader.__getitem__c                 C   s   |S r   r   )r   itemr   r   r   __contains__W   r-   zNpyScpReader.__contains__c                 C   
   t | jS r   )lenr   r+   r   r   r   __len__Z   r   zNpyScpReader.__len__c                 C   r>   r   )iterr   r+   r   r   r   __iter__]   r   zNpyScpReader.__iter__c                 C   s
   | j  S r   )r   keysr+   r   r   r   rC   `   r   zNpyScpReader.keysN)r3   r4   r5   r6   r   r   r&   r   r   r"   r#   r;   r=   r@   rB   rC   r   r   r   r   r7   <   s    r7   )collections.abccollectionspathlibr   typingr   numpyr"   	typeguardr   espnet2.fileio.read_textr   r   abcMappingr7   r   r   r   r   <module>   s    1