U
    vId                     @   s   d dl Z d dlmZ d dlmZmZ d dlZd dl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 ddlmZ eeZeddZdeeeedddZdeeedddZdd Zdd Z dS )    N)Path)PathLikefspath)issparse   )AnnData)
get_logger)WriteWarning   )
write_h5ad)import_functionzanndata._io.zarr
write_zarrT,)dirnameadata	skip_datasepc                 C   s  t | } | jdkr| d} td|   |  sB| jddd | d }| s`|jddd t|j|j	|j
 |j d}|stt|jr|j n|j|d< ||j}d}| D ]\}}	t|	r|rtd	t d
}q| }
|dkr|}
|
| d }
|	}t|	tjst|	}	t|	dkr6|	d }	zt|	}W nJ tk
r } z*td|dt| dt W Y qW 5 d}~X Y nX |j|
||dk|dkd qdS )z(See :meth:`~anndata.AnnData.write_csvs`.z.csv zwriting .csv files to T)parentsexist_okZuns)obsvarobsmvarmXz$Omitting to write sparse annotation.F>   r   r   r   r   r   r   NzOmitting to write z	 of type .>   r   r   r   r   >   r   r   )r   headerindex)r   suffixwith_suffixloggerinfois_dirmkdirdictZ_obsZ_varZ_obsmZto_dfZ_varmpdZ	DataFramer   r   ZtoarrayZ_unsitemswarningswarnr	   
isinstancenparrayndim	ExceptiontypeZto_csv)r   r   r   r   Zdir_unsdZd_writeZnot_yet_raised_sparse_warningkeyvaluefilenameZdfe r4   J/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/anndata/_io/write.py
write_csvs   s`    

$

r6   F)r2   r   write_obsm_varmc                 C   s  t | } dd |jd D }|j}|jd k	r8|jnd}|j||< dd |jd D }|j}|jd k	rv|jnd}|j||< |j	d krt
d|r|j D ]}	|j|	 ||	< q|j D ]}	|j|	 ||	< qnHt|j dkst|j dkr td	|j |j B  d
 d|j	ji}
|j D ]}	|j|	 j|
|	< q6ddlm} |  rl|   |t| |
||d d S )Nc                 S   s   i | ]\}}|t |qS r4   r*   r+   .0kvr4   r4   r5   
<dictcomp>P   s      zwrite_loom.<locals>.<dictcomp>list	var_namesc                 S   s   i | ]\}}|t |qS r4   r8   r9   r4   r4   r5   r=   T   s      	obs_namesz-loompy does not accept empty matrices as datar   z&The loom file will lack these fields:
zA
Use write_obsm_varm=True to export multi-dimensional annotationsr   )create)	row_attrs	col_attrs)r   r   to_dictr&   r?   namevaluesr   r@   r   
ValueErrorr   keysr   lenr    warningTlayersZloompyrA   existsunlinkr   )r2   r   r7   rB   Z	row_namesZrow_dimrC   Z	col_namesZcol_dimr0   rL   rA   r4   r4   r5   
write_loomN   s6    


&
rO   c                    s4    fddt ttt jd  jd  D S )zb    Return all the indices (coordinates) for the chunks in a zarr array,
    even empty ones.
    c              	      s@   g | ]8}t ttt jd   jd   D ]}||fq.qS )r
   rangeintmathceilfloatshapechunks)r:   ijzar4   r5   
<listcomp>y   s   ( z&_get_chunk_indices.<locals>.<listcomp>r   rP   rZ   r4   rZ   r5   _get_chunk_indicess   s    
$r]   c                 C   s   |dkr|| d d < nt | D ]}| jd |d  | jd |d d   }}| jd |d  | jd |d d   }}t||||| t|r|||||f  | ||||f< q|||||f | ||||f< qd S )Nr   r   r
   )r]   rW   printr   Ztodense)r[   r0   r1   cis0Ze0s1e1r4   r4   r5   _write_in_zarr_chunks   s    ***rc   )Tr   )F)!r'   pathlibr   osr   r   Zpandasr%   rS   numpyr*   Zscipy.sparser   r   r   loggingr   Zanndata._warningsr	   Zh5adr   Z_write_h5adutilsr   __name__r    r   boolstrr6   rO   r]   rc   r4   r4   r4   r5   <module>   s0   
      6%