U
    vIÀd  ã                   @   s8  d dl mZ d dlmZ d dlmZmZ d dlmZ d dl	Z
d dlmZ d dlZd dlZddlmZ dd	lmZmZ dd
lmZmZ ddlmZmZ ddlmZmZ d dlmZ edƒZ deee!ef eddœdd„Z"ee!eeej#f edœdd„Z$eej%dœdd„ƒZ&eej%ej'dœdd„ƒZ(eej'dœdd„ƒZ)dS ) é    )ÚMutableMapping)ÚPath)ÚTypeVarÚUnion)ÚwarnN)Úsparseé   )ÚAnnData)Ú_from_fixed_length_stringsÚ
_clean_uns)Úread_dispatchedÚwrite_dispatchedé   )Úreport_read_key_on_errorÚ_read_legacy_raw)Ú	read_elemÚ
write_elem)ÚOldFormatWarningÚT)ÚstoreÚadataÚreturnc                    s~   t | tƒrt| ƒ} | ¡  |jd k	r2| |jj¡ tj| dd�}|j 	dd¡ |j 	dd¡ ‡ fdd„}t
|d	|||d
� d S )NÚw©Úmodezencoding-typeÚanndatazencoding-versionz0.1.0c                    sP   ˆ d k	r<t |tjƒs<|dkr<| |||tf dˆ i|—Žd� n| ||||d� d S )Nz/XÚchunks)Údataset_kwargs)Ú
isinstancer   ZspmatrixÚdict)ÚfuncÚsÚkÚelemr   Úiospec©r   © úI/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/anndata/_io/zarr.pyÚcallback,   s     zwrite_zarr.<locals>.callbackú/)r(   r   )r   r   ÚstrZstrings_to_categoricalsÚrawÚvarÚzarrÚopenÚattrsÚ
setdefaultr   )r   r   r   Z	ds_kwargsÚfr(   r&   r%   r'   Ú
write_zarr   s    

r2   )r   r   c                    sš   t | tƒrt| ƒ} t | tjƒr$| ‰ntj| dd�‰tdœ‡ ‡fdd„‰ tˆˆ d�}dˆkr~tf tˆ|j	t
tƒŽ}|j|_||_	t ˆd tjƒr–t|ƒ |S )	z®    Read from a hierarchical Zarr array store.

    Parameters
    ----------
    store
        The filename, a :class:`~typing.MutableMapping`, or a Zarr storage class.
    Úrr   )Ú	elem_namec                    sp   |j dks| d¡r0tf ‡ fdd„| ¡ D ƒŽS | d¡r>d S |dkrNt|ƒS |dkrhtˆ| |ƒt| ƒS | |ƒS )Nr   r)   c                    s&   i | ]\}}|  d ¡s|t|ˆ ƒ“qS )zraw.)Ú
startswithr   )Ú.0r"   Úv©r(   r&   r'   Ú
<dictcomp>J   s   
þ z/read_zarr.<locals>.callback.<locals>.<dictcomp>z/raw.>   ú/obsú/varz/raw)Zencoding_typeÚendswithr	   Úitemsr5   Úread_dataframer   )r    r4   r#   r$   ©r(   r1   r&   r'   r(   G   s    
þÿ
zread_zarr.<locals>.callbackr8   zraw.XZobs)r   r   r*   r-   ÚGroupr.   r   r	   r   r+   r>   r   Z	obs_namesÚArrayr   )r   r   r+   r&   r?   r'   Ú	read_zarr5   s    	
rB   )Údatasetc                 C   s�   | d }t |dƒs|S t|jtƒr$nVt|jjtjƒr@| t	¡}n:t|jjtj
ƒrb| t¡ t	¡}nt|jjƒdkrzt|ƒ}|jdkrŒ|d }|S )N.Údtyper   r&   )Úhasattrr   rD   r*   Ú
issubclassÚtypeÚnpZstr_ZastypeÚobjectZstring_ÚlenÚdescrr
   Úshape)rC   Úvaluer&   r&   r'   Úread_dataseth   s    

rN   )rC   r   c                 C   s>   t d| j› d�tƒ t t| d ƒ¡}|j|jd dd� |S )zReads old format of dataframesú'zH' was written with a very old version of AnnData. Consider rewriting it.r&   r   T)Zinplace)r   Únamer   ÚpdÚ	DataFramer
   Z	set_indexÚcolumns)rC   Zdfr&   r&   r'   Úread_dataframe_legacy{   s    ýrT   )r   c                 C   s,   ddl m} t| tjƒr t| ƒS t| ƒS d S )Nr   )Ú	_REGISTRY)ÚspecsrU   r   r-   rA   rT   r   )ÚgrouprU   r&   r&   r'   r>   ‰   s    r>   )N)*Úcollections.abcr   Úpathlibr   Útypingr   r   Úwarningsr   ÚnumpyrH   Zscipyr   ZpandasrQ   r-   Z_core.anndatar	   Úcompatr
   r   Zexperimentalr   r   Úutilsr   r   rV   r   r   Zanndata._warningsr   r   r*   r2   r@   rB   rA   rN   rR   rT   r>   r&   r&   r&   r'   Ú<module>   s6    ýû3