a
    ~bt                     @   s   d dl mZ d dlZd dlZd dlmZ d dlZddlm	Z	 ddl
mZmZmZ ddlmZmZmZ ddlmZ d	d
lmZ d	dlmZmZ d	dl	mZmZ dd ZG dd deZee dS )    )absolute_importN)OrderedDict   )util)	Dimensionasdimdimension_name)	NdMapping
item_checksorted_context)Element   )GridInterface)	Interface	DataError)dask_array_modulefinite_rangec                 C   s$   dt jvrdS ddlm} t| |S )NcupyFr   )ndarray)sysmodulesr   r   
isinstance)arrayr    r   9lib/python3.9/site-packages/holoviews/core/data/xarray.pyis_cupy   s    
r   c                   @   s  e Zd ZdZdZedd Zedd Zedd Zed	d
 Z	edd Z
ed>ddZedd Zed?ddZedd Zedd Zedd Zedd Zed@ddZedAdd Zed!d" Zed#d$ Zed%d& Zed'd( Zed)d* ZedBd,d-Zeg dfd.d/Zeejfd0d1ZedCd2d3Zed4d5 Zed6d7 Z eg fd8d9Z!ed:d; Z"ed<d= Z#d+S )DXArrayInterfacer   xarrayc                 C   s
   dt jv S )Nr   )r   r   )clsr   r   r   loaded    s    zXArrayInterface.loadedc                 C   s&   |   sdS dd l}t||j|jfS )NFr   )r   r   r   Dataset	DataArray)r   objxrr   r   r   applies$   s    zXArrayInterface.appliesc                 C   s<   |j |ddj}| |r.||jv r.|jjjS |j| jjS NTstrict)get_dimensionnamepackedvdimsdatadtypetyper   datasetdimr)   r   r   r   dimension_type+   s    
zXArrayInterface.dimension_typec                 C   s8   |j |ddj}| |r,||jv r,|jjS |j| jS r%   )r(   r)   r*   r+   r,   r-   r/   r   r   r   r-   2   s    zXArrayInterface.dtypec                 C   s   dd l }t|j|jS )Nr   )r   r   r,   r!   )r   r0   r#   r   r   r   r*   9   s    zXArrayInterface.packedFc                    s~   |  |r|jd }n|j|jd j }|sJtj|jtjdt|	 fS t
t|j|j t fdd|jd d d D S )N).r   r   r-   c                 3   s   | ]}  |jtjV  qd S N)getr)   npnan.0kdZ	shape_mapr   r   	<genexpr>G       z(XArrayInterface.shape.<locals>.<genexpr>)r*   r,   r+   r)   r6   productshapeintplen
dimensionsdictzipdimstuplekdims)r   r0   Zgriddedr   r   r;   r   r@   >   s    
zXArrayInterface.shapec                    s  dd l |j }|d }|d }fddd}tjr^d u rRt|jnt}	|d u rlt|jnt|}
|
dkr|	tjd krjd |
krd	}n|r|d }nj	rt
j	}jd
|_jd|_jd}djv r||_nJt|jdkr4|jd }|j	jv rDtd|j	 | ntd|j | |s^|g}j|j	dtjjfs^d u r|j|d u r|j}dd D dd |D }ttjrjdkrjd t| krttttrdd | D }tt|krttd krttd jd krtd }dd t|d d D d	}ndd t|D n^ttrg krdd | D }dd |d  D fdd|d  D  ttstdfdd D fddD }tdd tt|D d d d }t  }D ]>}|j	 }|jdkr|d |j |f}n|}|||j	< qRd t|dkr|nt|d d d i}|rt|d d d d!g |d < ttt||d!< j|fd"|i|nRi }|D ]>}|j	 }t|jsBj|fd"|i|}|||j	< q|nj!sj"f i d#d j D |d u rtj#}d u rVtj}tj!fd$dj$% D t&fd%d&d'|rd d n^t'|t'krVfd(d|D }j!D ]2  vr"t'  jt'|kr"(  q"fd)dD fd*d|D }g }D ]0t)fd+dj! D s|( qtjjfstd,n|rtd-| | |D ]}|rq|j	 t)fd.dj!D r qg }j!D ]  v s*t  jdks*  jd dkrfq*nBt*fd/d  jD rq*nt) fd0dD rq*|(  q*|r|jj+j,d d1vrtd2|j	|f q|d3i fS )4Nr   rH   r+   c                    s   t | tr| S t| }  | j }| jd u r6|jdn| j}t |trN|d }d|jv rj| j|jd f}n| j| jf}|jd}| j	|||dS )Nunitsr   	long_nameNODATA)unitnodata)
r   r   r   r)   rL   attrsr5   rG   labelclone)r1   coordrL   specrM   r,   r   r   retrieve_unit_and_labelP   s    



z5XArrayInterface.init.<locals>.retrieve_unit_and_labelFr   r>   TrI   rK   rJ   zxarray DataArray does not define a name, and the default of '%s' clashes with a coordinate dimension. Give the DataArray a name or supply an explicit value dimension.zxarray DataArray does not define a name and %s does not define a default value dimension. Give the DataArray a name or supply an explicit vdim.r)   c                 S   s   g | ]}t |qS r   r   r8   r   r   r   
<listcomp>   r=   z(XArrayInterface.init.<locals>.<listcomp>c                 S   s   g | ]}t |qS r   rV   r9   vdr   r   r   rW      r=   r   c                 S   s   g | ]
}|j qS r   rU   r9   dr   r   r   rW      r=   c                 S   s   i | ]\}}||qS r   r   r9   r[   vr   r   r   
<dictcomp>   r=   z(XArrayInterface.init.<locals>.<dictcomp>c                 S   s   i | ]\}}||qS r   r   r\   r   r   r   r^      r=   c                 S   s   g | ]
}|j qS r   rU   rZ   r   r   r   rW      r=   c                 S   s   i | ]}|t g qS r   )r6   r   rZ   r   r   r   r^      r=   c                    s   i | ]}|t d   qS ))r   )r6   emptyrZ   )ndimsr   r   r^      r=   z-XArrayInterface could not interpret data typec                    s(   i | ] \}}|| v r t |n|qS r   )r6   Zasarray)r9   r[   valuesrH   r   r   r^      s   c                    s   g | ]} |j  jqS r   )r)   ndimr8   rS   r   r   rW      r=   c                 s   s   | ]}d | V  qdS )zdim_%dNr   r9   ir   r   r   r<      r=   z'XArrayInterface.init.<locals>.<genexpr>rF   bandcoordsc                 S   s   i | ]\}}|t |qS r   )ranger9   kr]   r   r   r   r^      r=   c                    s"   g | ]}t  | jtjr|qS r   )r   r,   r6   r   )r9   r)   rS   r   r   rW      s   c                    s   |  v r  | ntd| fS )Ninf)indexfloat)x)xrcoordsr   r   <lambda>   r=   z&XArrayInterface.init.<locals>.<lambda>)keyc                    s   g | ]}| vr|qS r   r   )r9   Zxdrb   r   r   rW      r=   c                    s   g | ]} |qS r   r   r8   rT   r   r   rW      r=   c                    s   g | ]} |qS r   r   rX   rr   r   r   rW      r=   c                 3   s4   | ],\}} j |kp*t|jo* j |jv V  qd S r4   )r)   r   r!   rF   ri   )r[   r#   r   r   r<      s   z'Data must be be an xarray Dataset type.zWxarray Dataset must define coordinates for all defined kdims, %s coordinates not found.c                 3   s"   | ]}t  j| jd kV  qdS )r   N)rB   rg   r@   r9   c)dar   r   r<      r=   c                 3   s   | ]}| v V  qd S r4   r   rZ   rb   r   r   r<      r=   c                 3   s,   | ]$ t  fd d jD V  qdS )c                 3   s   | ]}| j  jv V  qd S r4   )r)   rF   rZ   )ru   r:   r   r   r<      r=   z1XArrayInterface.init.<locals>.<genexpr>.<genexpr>N)allrF   )r9   )rt   ru   )r:   r   r<      r=   )r   NaE  The coordinates on the %r DataArray do not match the provided key dimensions (kdims). The following coords were left unspecified: %r. If you are requesting a lower dimensional view such as a histogram cast the xarray to a columnar format using the .to_dataframe or .to_dask_dataframe methods before providing it to HoloViews.)rH   r+   )-r   ZparamZobjectsr   r!   rB   defaultrF   r@   r)   r   rN   r5   rL   rM   rO   r   __name__Z
to_datasetr    r6   r   rc   rG   rE   listupdaterD   	TypeErroritemsrh   maxr   rg   assign_coords	data_varsindexeskeyssortedsetappendanyrv   rH   Zbounds)r   Zeltyper,   rH   r+   Zelement_paramsZ
kdim_paramZ
vdim_paramr*   Zkdim_lenZvdim_lenvdimrO   rC   Zvalue_arrayZ
coord_dimsrF   rg   r:   
coord_valsrQ   Z	xr_kwargsZarraysarrZxrdimsZvirtual_dims	not_foundZ
undeclaredr   )	rt   r[   ru   r,   rH   r`   rT   r#   ro   r   initI   s   
(





2$ 
$
(
 





"



2zXArrayInterface.initTc                    s   dd l }t j|jr$t | n* fdd jD }|rNtdt| | g  jD ](}| 	 |rX
| j|j jf qXrʇfdddd  D }|rdd  g| }tdd	| | d S )
Nr   c                    s    g | ]}|j  jjvr|j qS r   )r)   r,   rg   r8   r0   r   r   rW      r=   z,XArrayInterface.validate.<locals>.<listcomp>z`Supplied data does not contain specified dimensions, the following dimensions were not found: %sc                    s4   g | ],\}}t |t  d  d krd||f qS )r   r   %s: %s)r   )r9   r:   rF   	irregularr   r   rW     s   r   r   zThe dimensions of coordinate arrays on irregular data must match. The following kdims were found to have non-matching array dimensions:

%s
)r   r   r,   r    r   validaterH   r   reprr   r   r)   rF   join)r   r0   r+   r#   r   r:   Znonmatchingr   )r0   r   r   r      s.    
zXArrayInterface.validatec                 C   s   | |j S r4   )rP   r,   computer   r0   r   r   r   r     s    zXArrayInterface.computec                 C   s   | |j S r4   )rP   r,   persistr   r   r   r   r     s    zXArrayInterface.persistc           	      C   s  |j |dd}|j}|jo"||jv }|r:| j||dd}nP| |rh||jv rh|jjd|j	|f }n
|j| }|j
d ur| ||j
}t|stjtj }}nL|jjdks|s| |  }}|s|j|j }}nt|t| }}t }|rt||jr|||\}}t|tjr:|jdkr:|d }t|tjr\|jdkr\|d }t|svt|tjrz|n| }t|st|tjr|n| }t|||S )NTr&   )edges.Mr   ) r(   r)   Z_binnedrH   rg   r*   r+   r,   ra   rl   rM   Zreplace_valuerB   r6   ZNaNr-   kindminr}   ZnanminZnanmaxr   r   Arrayr   r   r@   isscalarr   Zdatetime_typesitemr   )	r   r0   	dimensionr1   r   r,   ZdminZdmaxru   r   r   r   rh     s6    

&&zXArrayInterface.rangec              	      s  fdd|D fddj D }fddD }|r`t|dkrTd|d  }td| i |d	krt|trtt|d
| t	fdd|D }dd D }	g }
t|dkrj
d jD ]2\}}|r|  }|
|||fi f qnv fdd|	D }tt| }|D ]N}j
jf i tt|	|}|rh|  }|
|||fi f q6t|trtdT td* ||
d
W  d    W  d    S 1 s0    Y  W d    n1 s0    Y  n||
S d S )Nc                    s   g | ]} j |d dqS )Tr&   )r(   rZ   r   r   r   rW   >  r=   z+XArrayInterface.groupby.<locals>.<listcomp>c                    s   g | ]}| vr|qS r   r   )r9   Zkdim)
index_dimsr   r   rW   ?  s   c                    s"   g | ]} j |j jd kr|qS r   )r,   r)   rc   rZ   r   r   r   rW   B  r=   r   z'%s'r   z3Cannot groupby irregularly sampled dimension(s) %s.rawrb   c                 3   s   | ]}| d  vV  qdS )rH   Nr   rZ   )group_kwargsr   r   r<   N  r=   z*XArrayInterface.groupby.<locals>.<genexpr>c                 S   s   g | ]
}|j qS r   rU   rZ   r   r   r   rW   P  r=   c                    s   g | ]}  |d qS )F)ra   rZ   r   r   r   rW   X  r=   F)rH   rB   
ValueError
issubclassr   rD   r   Zget_param_valuesrz   r   r,   groupbyr)   to_dataframereset_indexr   rE   Zcartesian_productselr	   r
   r   )r   r0   rC   Zcontainer_typeZ
group_typekwargsZelement_dimsZinvalidZdrop_dimZgroup_byr,   rj   r]   Zunique_itersr   r   r   )r   r0   r   r   r   r   <  sB    

\zXArrayInterface.groupbyc                 C   sv  dd l }||}|d u r|n|j}| ||}|s8|r|rH|j| }	nt||}	|rt| j|	dd}	| j|	dd}	t|	|j	r|	j
S |	S t|j| j}	|r|	jrt|	dd  |	d d k r|	d d d }	| |d}
||jv r$||}t|
|jko t|	|
|j| d  d k}nd}|r@|s@| |	}	n|s^|r^t|	ddgd}	t|	|j	rr|	j
S |	S )	Nr   r   )Zaxisr>   TFg      ?Zvalid)r   r(   r)   r   r,   r   Zexpand_grid_coordsZ_infer_interval_breaksr   r!   ra   r6   
atleast_1dr@   rv   rH   Zget_dimension_indexrB   r`   Zconvolve)r   r0   r   orderedexpandedr   r#   r1   r   r,   r@   idxZisedgesr   r   r   rg   g  s2    
(
0zXArrayInterface.coordsc                    s  j |dd} o |jv }|r@jjdj|f }nj|j }|sV|j}|jv rl |nd}	 fddjD }
|
rtj|
d j j	j
}ng }|jv s|	rZ|rtjj
d d }ntj|j j
}t }|r|rt||jr| }t|r(dd l}||}|s@ j|||d	}|rV|sV|j S |S |r j	|jdd
}|r|j S |S |rj|j S  j	|jddS d S )NTr&   .Fc                    s   g | ]}  |r|qS r   r   rZ   r   r   r   rW     r=   z*XArrayInterface.values.<locals>.<listcomp>r   r>   )data_coordsvirtual_coordsr   )r   )r(   r*   r+   r,   rl   r)   rH   r   ry   rg   rF   r   r   r   r   r   r   ZasnumpycanonicalizeTZflatten)r   r0   r1   r   Zflatr   Z
keep_indexr*   r,   r   Zirregular_kdimsr   r   ru   r   r   r   r   ra     sB    


zXArrayInterface.valuesc                    s0    fdd|j D }|jj|fd|i|g fS )Nc                    s   g | ]}| vr|j qS r   rU   rZ   rC   r   r   rW     r=   z-XArrayInterface.aggregate.<locals>.<listcomp>r1   )rH   r,   reduce)r   r0   rC   functionr   Zreduce_dimsr   r   r   	aggregate  s    zXArrayInterface.aggregatec                 C   sF   |  |sBt|jdkrB||jd j  }t|jdkrB| S |S )z~
        Given a dataset object and data in the appropriate format for
        the interface, return a simple scalar.
        r   r   )r*   rB   r   r+   r)   Zsqueezer@   r   )r   r0   r,   r   r   r   r   unpack_scalar  s
    zXArrayInterface.unpack_scalarc                    sX  dd  j d d d D }g }g }t||D ]\}}|  |r fdd jjD } j|j j||j }	 j|j j||j }
t	
|
}n|  |d}|j}	||	 t|t	|dd  |d d k rt	|r| d }nt|trF|jd u rd n|j }|jd u r,d n|j }t|||j}nPt|t	jrr|jjdkrr|d d d }n$t|t	jtfrfdd|D }t|trt	|}t|t	jr|jjdkrt	|d	 }|| q,tt||}ttt	j|}|rLt|t|krLt jdkrL j jd	 j jf i |j S td
d |D ont|t|k}|s|rBt|t|krBd	d l | ! r  jfdd|" D }|#ddg j$}dd  jD }|j%dd t&|D d| S |rdd |" D } jfdd|" D }|# ' S  jjf i |S d S )Nc                 S   s   g | ]}|qS r   r   rZ   r   r   r   rW     r=   z)XArrayInterface.ndloc.<locals>.<listcomp>r>   c                    s   g | ]}| j jvr|qS r   r,   rF   rs   r   r   r   rW     r=   Fr   bc                    s   g | ]} | d  qS r   r   rd   )ncoordsr   r   rW     r=   r   c                 s   s&   | ]}t |tjo|jjd kV  qdS )r   N)r   r6   r   r-   r   )r9   indr   r   r   r<     s   z(XArrayInterface.ndloc.<locals>.<genexpr>c                    s   i | ]\}}|  |qS r   r!   ri   r#   r   r   r^     r=   z)XArrayInterface.ndloc.<locals>.<dictcomp>r+   c                 S   s   g | ]
}|j qS r   rU   rX   r   r   r   rW     r=   c                 S   s   i | ]\}}||qS r   r   )r9   re   r[   r   r   r   r^     r=   )columnsc                 S   s   i | ]\}}||gqS r   r   ri   r   r   r   r^     r=   c                    s   i | ]\}}|  |qS r   r   ri   r   r   r   r^     r=   )(rH   rE   r   r,   rg   r)   rF   rl   r@   r6   Zaranger   rB   rv   r   r   slicestopstartstepr   r-   r   ry   r   whererD   mapr+   iselra   r   r   r*   r|   r   r   rename	enumerater   )r   r0   indicesrH   Zadjusted_indicesZ
slice_dimsr:   r   rg   r1   r@   r   r   r   Z
all_scalarZsampledZselectedZdfr+   r   )r0   r   r#   r   ndloc  sb    
 

($
zXArrayInterface.ndlocc                    s*   dd l }|j fdd| D  jdS )Nr   c                    s&   g | ]\}}|j f i  j|iqS r   )r~   r)   )r9   rt   Zdsr1   r   r   rW     r=   z.XArrayInterface.concat_dim.<locals>.<listcomp>r   )r   concatr|   r)   )r   Zdatasetsr1   r+   r#   r   r   r   
concat_dim  s    zXArrayInterface.concat_dimc                 C   s   dd |  D }|j|S )Nc                 S   s   i | ]\}}||j qS r   rU   ri   r   r   r   r^     r=   z)XArrayInterface.redim.<locals>.<dictcomp>)r|   r,   r   )r   r0   rC   renamesr   r   r   redim  s    zXArrayInterface.redimNc           	         s   fdd j D }i }|D ]0}| j |jdd}t|dkr|d ||j< qt|t|kr jjf i  fdd| D }|r|  r|jf i  jj	d	  fd
d|D iS |S |rt
 |  S  jS )Nc                    s   g | ]}| vr|qS r   r   r8   rb   r   r   rW     r=   z+XArrayInterface.reindex.<locals>.<listcomp>Fr   r   r   c                    s"   i | ]\}}| j jv r||qS r   r   ri   r   r   r   r^     s   z+XArrayInterface.reindex.<locals>.<dictcomp>r>   c                    s   g | ]} j |qS r   )r+   rl   rX   r   r   r   rW     r=   )rH   ra   r)   rB   r,   r   r|   r*   r   rF   rG   r   )	r   r0   rH   r+   Zdropped_kdimsZconstantr:   Zvalsdroppedr   )r0   rH   r   reindex  s    $*zXArrayInterface.reindexc                 C   s   |S r4   r   )r   r0   Zbyreverser   r   r   sort  s    zXArrayInterface.sortc                    s(    }j }|rrtjjd d } ||}z||j|< W n& tyn   |d}||j|< Y n0 n|}j	D ]}tj|j
 jt fddjD r}ndd jD d d d } ||}|krfdd|D }	||	}||j
 d ||j
< }
||
j|< q||S )Nr>   rm   c                 3   s   | ]}  |V  qd S r4   r   r8   r   r   r   r<   ,  r=   z'XArrayInterface.mask.<locals>.<genexpr>c                 S   s   g | ]
}|j qS r   rU   r8   r   r   r   rW   /  r=   z(XArrayInterface.mask.<locals>.<listcomp>c                    s   g | ]}  |qS r   )rl   rZ   )rF   r   r   rW   2  r=   )r*   r,   copyry   rF   r   ra   r   Zastyper+   r)   r   rH   Z	transpose)r   r0   maskZmask_valr*   Zmaskedr   Z	orig_maskrY   ZindsZmarrr   )r   r0   rF   r   r     s.    




zXArrayInterface.maskc                    s  |d ur|j j|ddS i }| D ](\}}|j|dd}| ||r`tj||fi |  S |j}t|t	r||j
|jf}t|trt|||< q$t|tr&|j | j}|d d u rd n|d tjjd  }	|d |	f}|jjdvrt|dd  |d d k r|d d d }t	| ||< q$t|tjrF||| ||< q$|||< q$|j jf i | | ||}
t fd	d
|jD }|r|
sĈ |   D ]}t|j drd|j j_ qt! }|
r2t" j#dkr2t" |j$d j j%dkr2 |j$d j }|r*t|j |j&r*|' }|( S |
rg }|j$D ]<} |j }|rnt|j |j&rn|' }|)|(  qBt*|S  S )NT)dropr&   r   
   r   ZOSUr>   c                 3   s2   | ]*} |j  jjs|j t |j  fV  qd S r4   )r)   r,   r@   r6   r   rZ   rS   r   r   r<   W  s   z)XArrayInterface.select.<locals>.<genexpr>flags)+r,   r   r|   r(   r   r   selectr)   r   r   r   r   r   ry   rG   ra   r   
float_infoepsilonr-   r   r6   rv   typesFunctionTyper   indexedr   rH   Zexpand_dimshasattrr   Z	writeabler   rB   r   r+   r@   r   r   r   r   r   )r   r0   Zselection_maskZ	selectionZ	validatedrj   r]   r1   Zdim_valsupperr   r   r[   ru   valuera   rY   r   rS   r   r   8  sb    

$.




zXArrayInterface.selectc                    s    t j fdd jD t jdS )Nc                    s   g | ]}t  j|j qS r   )rB   r,   r)   rZ   r   r   r   rW   v  r=   z*XArrayInterface.length.<locals>.<listcomp>r3   )r6   r?   rH   rA   r   r   r   r   lengtht  s    zXArrayInterface.lengthc                    sX   dd l }|  r6 fddt jD }||}n j}|  }|rT|| S |S )Nr   c                    s(   i | ] \}}|j  jd |f dqS ).rf   )r)   r,   r   )r9   re   rY   r   r   r   r^   |  s   z*XArrayInterface.dframe.<locals>.<dictcomp>)r   r*   r   r+   r    r,   r   r   )r   r0   rC   r#   Zbandsr,   r   r   r   dframex  s    

zXArrayInterface.dframec                    s0   dd  j D  fdd|D }tj|S )Nc                 S   s   g | ]
}|j qS r   rU   r8   r   r   r   rW     r=   z*XArrayInterface.sample.<locals>.<listcomp>c              	      s6   g | ].} j jf i d d t|D   qS )c                 S   s   i | ]\}}||gqS r   r   ri   r   r   r   r^     r=   z5XArrayInterface.sample.<locals>.<listcomp>.<dictcomp>)r,   r   rE   r   r   )r9   sr0   namesr   r   rW     s   )rH   r   pdr   )r   r0   Zsamplesr   r   r   sample  s
    zXArrayInterface.samplec           
   
      st   dd l }|stdt|} fddjD }|j|||tdd jd d d D d}	jjf i ||	iS )	Nr   z3Cannot add key dimension to a dense representation.c                    s   i | ]}|j  |j qS r   )r)   rg   rZ   r   r   r   r^     r=   z1XArrayInterface.add_dimension.<locals>.<dictcomp>c                 s   s   | ]}|j V  qd S r4   rU   rZ   r   r   r   r<     r=   z0XArrayInterface.add_dimension.<locals>.<genexpr>r>   )rg   r)   rF   )r   	Exceptionr   rH   r!   rG   r,   assign)
r   r0   r   Zdim_posra   r   r#   r1   rg   r   r   r   r   add_dimension  s    
zXArrayInterface.add_dimensionc                    s  dd l }|j tjdd  j D  }t }| D ]\}}||jvrLq6n(t	||j
rt|jf i |j|i||< q6| ||}|jdkst|dd  |d d k r|d d d }||f||< q6|r؈ jf i | tdd |jd d d D }	t }
| D ]J\}}||jv rqt	||j
r4||
|< n|	| j|||	df|
|< qt|
dkrt|
d	d |jD kr|
|jd j  t j}n*|
r |
 tjd
d  j D  }t||}  fdd|D t|fS )Nr   c                 S   s   g | ]}t |jqS r   r   rg   r9   varr   r   r   rW     s   z*XArrayInterface.assign.<locals>.<listcomp>r   r>   c                 s   s   | ]}|j V  qd S r4   rU   r8   r   r   r   r<     r=   z)XArrayInterface.assign.<locals>.<genexpr>)r   c                 S   s   g | ]
}|j qS r   rU   rX   r   r   r   rW     r=   c                 S   s   g | ]}t |jqS r   r   r   r   r   r   rW     r=   c                    s   g | ]}| j v r|qS r   )rg   rs   rS   r   r   rW     r=   )r   r,   r   intersectionr   ra   r   r|   rH   r   r!   r   r)   rg   rc   r6   rv   r~   rG   r   rB   ry   r+   r   symmetric_differencer   )r   r0   Znew_datar#   Zprev_coordsrg   rj   r]   r   rF   varsZused_coordsZdrop_coordsr   rS   r   r     sD    

(
(
zXArrayInterface.assign)F)T)FFF)TTTF)NN)N)$rx   
__module____qualname__r   Zdatatypeclassmethodr   r$   r2   r-   r*   r@   r   r   r   r   rh   r   rg   ra   r   r   r   r   r   r   r   r6   r7   r   r   r   r   r   r   r   r   r   r   r   r      sv   






 *


#
*"'


5

;



r   )Z
__future__r   r   r   collectionsr   Znumpyr6    r   r   r   r   r   Z	ndmappingr	   r
   r   elementr   Zgridr   Z	interfacer   r   r   r   r   r   registerr   r   r   r   <module>   s&        -