3
���h�M � @ s� d dl Z d dlZd dlZddlmZ ddlmZ ddl m
Z
mZmZ ddl
mZ ddlmZmZmZ ddlmZmZmZ d d
� Zdd� Zd
d� ZG dd� de�ZG dd� dee
�Zeje� eje� G dd� dee�Zeje� eje� dS )� N� )�ops)�concat)�ImplementsArrayReduce�ImplementsDatasetReduce�_maybe_promote)�zip)�peek_at�maybe_wrap_array�safe_cast_to_index)�as_variable�Variable�
Coordinatec C s\ t j| dd�\}}dd� tt|��D �}x*t|�D ]\}}|dkr2|| j|� q2W ||fS )a� Group an array by its unique values.
Parameters
----------
ar : array-like
Input array. This will be flattened if it is not already 1-D.
Returns
-------
values : np.ndarray
Sorted, unique values as returned by `np.unique`.
indices : list of lists of int
Each element provides the integer indices in `ar` with values given by
the corresponding value in `unique_values`.
T)�sortc S s g | ]}g �qS � r )�.0�_r r �3/tmp/pip-build-5_djhm0z/xray/xarray/core/groupby.py�
<listcomp> s z'unique_value_groups.<locals>.<listcomp>r )�pdZ factorize�range�len� enumerate�append)�arZinverse�values�groups�n�gr r r �unique_value_groups s r c C s t | �\} }|S )z\Return a fill value that appropriately promotes types when used with
np.concatenate
)r )�dtypeZ
fill_valuer r r �_get_fill_value( s r! c s� ddl m} ddlm} t� |�r^|tdd� � jj� D ��t� fdd�� jj� D ��� j �}nBt� |�r�|t
� j�t� fdd�� jj� D ��� j� j d�}nt
�|S ) Nr )�Dataset)� DataArrayc s s | ]\}}|t |j�fV qd S )N)r! r )r �k�vr r r � <genexpr>4 s z_dummy_copy.<locals>.<genexpr>c 3 s* | ]"\}}|� j kr|t|j�fV qd S )N)�dimsr! r )r r$ r% )�
xarray_objr r r& |