a
    jDf                     @   s8  U d dl mZ d dlmZmZ d dlZd dlmZ d dl	m
Z
 G dd deZG dd	 d	eje
ZG d
d deZG dd dejZi Zeeef ed< dd Zeejd ded ddddZeejd ded ddddZeejejdddZeejeedf dddddZG dd dZdS )     )Iterable)AnyCallableN)utils)ExplicitlyIndexedc                   @   s   e Zd ZdS )UnexpectedDataAccessN)__name__
__module____qualname__ r   r   `/nfs/NAS7/SABIOD/METHODE/ermites/ermites_venv/lib/python3.9/site-packages/xarray/tests/arrays.pyr      s   r   c                   @   s<   e Zd ZdZdd Zdd Zdejjddd	Z	d
d Z
dS )InaccessibleArrayzDisallows any loading.c                 C   s
   || _ d S Narrayselfr   r   r   r   __init__   s    zInaccessibleArray.__init__c                 C   s   t dd S NzTried accessing datar   r   r   r   r   get_duck_array   s    z InaccessibleArray.get_duck_arrayNdtypec                 C   s   t dd S r   r   r   r   r   r   r   	__array__   s    zInaccessibleArray.__array__c                 C   s   t dd S )NTried accessing data.r   r   keyr   r   r   __getitem__   s    zInaccessibleArray.__getitem__)N)r   r	   r
   __doc__r   r   nptyping	DTypeLiker   r   r   r   r   r   r      s
   r   c                   @   s   e Zd Zdd ZdS )FirstElementAccessibleArrayc                 C   s$   |j }t|dkrtd| j| S )N   z&Tried accessing more than one element.)tuplelenr   r   )r   r   Z
tuple_idxrr   r   r   r   #   s    z'FirstElementAccessibleArray.__getitem__N)r   r	   r
   r   r   r   r   r   r$   "   s   r$   c                   @   sD   e Zd ZdZejdddZdd Zdejj	dd	d
Z
dd ZdS )DuckArrayWrapperzBArray-like that prevents casting to array.
    Modeled after cupy.r   c                 C   s
   || _ d S r   r   r   r   r   r   r   .   s    zDuckArrayWrapper.__init__c                 C   s   t | | j| S r   )typer   r   r   r   r   r   1   s    zDuckArrayWrapper.__getitem__Nr   c                 C   s   t dd S r   r   r   r   r   r   r   4   s    zDuckArrayWrapper.__array__c                 C   s   dS )z&Present to satisfy is_duck_array test.Nr   r   r   r   r   __array_namespace__7   s    z$DuckArrayWrapper.__array_namespace__)N)r   r	   r
   r    r!   Zndarrayr   r   r"   r#   r   r*   r   r   r   r   r(   *   s
   r(   +CONCATENATABLEARRAY_HANDLED_ARRAY_FUNCTIONSc                    s    fdd}|S )zNRegister an __array_function__ implementation for ConcatenatableArray objects.c                    s   | t  < | S r   )r+   )funcnumpy_functionr   r   	decoratorA   s    zimplements.<locals>.decoratorr   )r.   r/   r   r-   r   
implements>   s    r0   axisConcatenatableArray)arraysreturnc               C   s6   t dd | D rttjdd | D |d}t|S )Nc                 s   s   | ]}t |t V  qd S r   
isinstancer3   .0arrr   r   r   	<genexpr>L       zconcatenate.<locals>.<genexpr>c                 S   s   g | ]
}|j qS r   _arrayr8   r   r   r   
<listcomp>O   r<   zconcatenate.<locals>.<listcomp>r1   )any	TypeErrorr!   concatenater3   r4   r2   resultr   r   r   rB   H   s    rB   c               C   s6   t dd | D rttjdd | D |d}t|S )Nc                 s   s   | ]}t |t V  qd S r   r6   r8   r   r   r   r;   W   r<   zstack.<locals>.<genexpr>c                 S   s   g | ]
}|j qS r   r=   r8   r   r   r   r?   Z   r<   zstack.<locals>.<listcomp>r1   )r@   rA   r!   stackr3   rC   r   r   r   rE   S   s    rE   r5   c                  G   s0   dd | D ^}}|D ]}||krt dq|S )zGCalled by xarray to ensure all arguments to concat have the same dtype.c                 s   s   | ]}t |V  qd S r   )r!   r   )r9   objr   r   r   r;   a   r<   zresult_type.<locals>.<genexpr>zdtypes not all consistent)
ValueError)Zarrays_and_dtypesZfirst_dtypeZother_dtypesZother_dtyper   r   r   result_type^   s
    
rI   .)shapexr5   c                C   s&   t | tsttj| j|d}t|S )zx
    Broadcasts an array to a specified shape, by either manipulating chunk keys or copying chunk manifest entries.
    )rJ   )r7   r3   rA   r!   broadcast_tor>   )rK   rJ   rD   r   r   r   rL   h   s    
rL   c                   @   s   e Zd ZdZdd ZeeejdddZeee	e
df ddd	Zeee
dd
dZeedddZdd Zd ejjdddZd dddZedddZedddZddejed dddZdS )!r3   zTDisallows loading or coercing to an index but does support concatenation / stacking.c                 C   s
   || _ d S r   r=   r   r   r   r   r   y   s    zConcatenatableArray.__init__)r   r5   c                 C   s   | j jS r   )r>   r   r   r   r   r   r   }   s    zConcatenatableArray.dtype.c                 C   s   | j jS r   )r>   rJ   r   r   r   r   rJ      s    zConcatenatableArray.shapec                 C   s   | j jS r   )r>   ndimr   r   r   r   rM      s    zConcatenatableArray.ndimc                 C   s   t | j d| jdS )Nz(array=))r)   r   r>   r   r   r   r   __repr__   s    zConcatenatableArray.__repr__c                 C   s   t dd S r   r   r   r   r   r   r      s    z"ConcatenatableArray.get_duck_arrayNr   c                 C   s   t dd S r   r   r   r   r   r   r      s    zConcatenatableArray.__array__rF   c                 C   sH   | j }t|D ]0\}}|du r,t||}q|tu r6qtdqt|S )zNSome cases of concat require supporting expanding dims by dimensions of size 1Nr   )r>   	enumerater!   Zexpand_dimsEllipsisr   r3   )r   r   r:   r2   Z
indexer_1dr   r   r   r      s    
zConcatenatableArray.__getitem__c                 C   s4   |t vrtS tdd |D s"tS t | |i |S )Nc                 s   s   | ]}t |tV  qd S r   )
issubclassr3   )r9   tr   r   r   r;      r<   z9ConcatenatableArray.__array_function__.<locals>.<genexpr>)r+   NotImplementedall)r   r,   typesargskwargsr   r   r   __array_function__   s
    z&ConcatenatableArray.__array_function__c                 O   s   t S )z|We have to define this in order to convince xarray that this class is a duckarray, even though we will never support ufuncs.)rT   )r   ZufuncmethodinputsrX   r   r   r   __array_ufunc__   s    z#ConcatenatableArray.__array_ufunc__T)copy)r   r]   r5   c               C   s   || j krt n| S dS )z;Needed because xarray will call this even when it's a no-opN)r   NotImplementedError)r   r   r]   r   r   r   astype   s    
zConcatenatableArray.astype)N)r   r	   r
   r    r   propertyr   r!   r   r&   intrJ   rM   strrO   r   r"   r#   r   r   rY   r\   boolr_   r   r   r   r   r3   v   s   )collections.abcr   r"   r   r   numpyr!   Zxarray.corer   Zxarray.core.indexingr   	Exceptionr   ZNDArrayMixinr   r$   r(   r+   dictrb   __annotations__r0   rB   rE   rI   r   rL   r&   ra   r3   r   r   r   r   <module>   s:   


	