�
���h�M � �h � d dl Z d dlZd dlZddlmZ ddlmZ ddl m
Z
mZmZ ddl
mZ ddlmZmZmZ ddlmZmZmZ d � Zd
� Zd� Z G d� d
e� � Z G d� dee
� � Z ej e� � ej e� � G d� dee� � Z ej e� � ej e� � dS )� N� )�ops)�concat)�ImplementsArrayReduce�ImplementsDatasetReduce�_maybe_promote)�zip)�peek_at�maybe_wrap_array�safe_cast_to_index)�as_variable�Variable�
Coordinatec �� � t j | d�� � \ }}d� t t |� � � � D � � }t |� � D ]&\ }}|dk r|| � |� � �'||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 � � g | ]}g ��S � r )�.0�_s �H/opt/cloudlinux/venv/lib/python3.11/site-packages/xarray/core/groupby.py�
<listcomp>z'unique_value_groups.<locals>.<listcomp> s � �
-�
-�
-�Q�b�
-�
-�
-� r )�pd� factorize�range�len� enumerate�append)�ar�inverse�values�groups�n�gs r �unique_value_groupsr% s� � � �l�2�D�1�1�1�O�G�V�
-�
-�%��F���,�,�
-�
-�
-�F��'�"�"� � ���1���6�6��1�I���Q������6�>�r c �* � t | � � \ } }|S )z\Return a fill value that appropriately promotes types when used with
np.concatenate
)r )�dtype�
fill_values r �_get_fill_valuer) ( s � � '�u�-�-��E�:��r c � � � ddl m} ddlm} t � |� � rq |t d� � j � � � D � � � � t � fd�� j � � � D � � � � � j � � }nst � |� � r\ |t � j � � t � fd�� j � � � D � � � � � j � j �� � }nt �|S )Nr )�Dataset)� DataArrayc 3 �H K � | ]\ }}|t |j � � fV � �d S �N)r) r' |