a
    jDf                     @  s6  U d dl mZ d dlmZ d dlmZ d dlmZmZm	Z	 d dl
Zd dlmZ d dlmZ d dlmZmZ eejfZere	d	 Zeee d
f Zd dlmZmZmZ G dd dZi Zde d< dddddZ!dddddZ"dddddZ#dddddZ$ddddd Z%dd!d"d#d$d%Z&d&d!d'd#d(d)Z'dS )*    )annotations)import_module)
ModuleType)TYPE_CHECKINGAnyLiteralN)Version)	is_scalar)is_duck_arrayis_duck_dask_array)daskpintcupysparsecubednumbagg.)_DType
_ShapeType	duckarrayc                   @  sB   e Zd ZU dZded< ded< ded< ded	< d
ddddZdS )DuckArrayModulez
    Solely for internal isinstance and version checks.

    Motivated by having to only import pint when required (as pint currently imports xarray)
    https://github.com/pydata/xarray/pull/5561#discussion_r664815718
    zModuleType | Nonemoduler   versionDuckArrayTypestypebool	availableModTypeNonemodreturnc              	   C  s   zt |}t|j}|dkr*t djf}nZ|dkr<|jf}nH|dkrN|jf}n6|dkr`|jf}n$|dkrr|jf}n|dkrd}ntW n& tt	fy   d }td	}d}Y n0 || _
|| _|| _|d u| _d S )
Nr   z
dask.arrayr   r   r   r   r    z0.0.0)r   r   __version__ArrayZQuantityZndarrayZSparseArrayNotImplementedErrorImportErrorAttributeErrorr   r   r   r   )selfr   Zduck_array_moduleZduck_array_versionZduck_array_typer!   r!   g/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/xarray/namedarray/pycompat.py__init__"   s0    





zDuckArrayModule.__init__N)__name__
__module____qualname____doc____annotations__r)   r!   r!   r!   r(   r      s   
r   zdict[ModType, DuckArrayModule]_cached_duck_array_modulesr   r   c                 C  s(   | t vrt| }|t | < |S t |  S d S N)r/   r   )r   Zduckmodr!   r!   r(   _get_cached_duck_array_moduleH   s
    r1   r   c                 C  s
   t | jS )z3Quick wrapper to get the array class of the module.)r1   r   r   r!   r!   r(   
array_typeQ   s    r3   r   c                 C  s
   t | jS )z/Quick wrapper to get the version of the module.)r1   r   r2   r!   r!   r(   mod_versionV   s    r4   zduckarray[Any, Any]r   )xr    c                 C  s   t | pt| ot| dS )Nchunks)r   r
   hasattrr5   r!   r!   r(   is_chunked_array[   s    r9   c                 C  s   t | ot| S r0   )r   r	   r8   r!   r!   r(   is_0d_dask_array_   s    r:   zdict[str, Any]znp.ndarray[Any, np.dtype[Any]])datakwargsr    c                 K  s   ddl m} ddlm} t| |r*|  } t| rP|| }|j| fi |^} }t| tdrf| 	 } t| tdrz| j
} t| tdr|  } t| } | S )Nr   ExplicitlyIndexedget_chunked_array_typer   r   r   )xarray.core.indexingr>    xarray.namedarray.parallelcompatr@   
isinstanceget_duck_arrayr9   computer3   getZ	magnitudeZtodensenpasarray)r;   r<   r>   r@   chunkmanager_r!   r!   r(   to_numpyc   s    

rK   r   zduckarray[_ShapeType, _DType]c                 K  sn   ddl m} ddlm} t| rB|| }|j| fi |^}}|S t| |rT|  S t| r`| S t	
| S d S )Nr   r=   r?   )rA   r>   rB   r@   r9   rE   rC   rD   r
   rG   rH   )r;   r<   r>   r@   rI   Zloaded_datarJ   r!   r!   r(   to_duck_array|   s    
rL   )(
__future__r   	importlibr   typesr   typingr   r   r   numpyrG   Zpackaging.versionr   Zxarray.core.utilsr	   Zxarray.namedarray.utilsr
   r   intintegerinteger_typesr   tupler   r   Zxarray.namedarray._typingr   r   r   r   r/   r.   r1   r3   r4   r9   r:   rK   rL   r!   r!   r!   r(   <module>   s*   
0	