U
    vId                     @   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rt| |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