Ë
    ýÿæiæ  ã                  ó®   — d dl mZ d dlmZ d dlZd dlmZ d dlm	Z	m
Z
 d dlmZ erd dlmZ d dlmZ d d	lmZmZ 	 d	 	 	 	 	 dd
„Z	 	 	 	 	 	 	 	 dd„Zdd„Zy)é    )Úannotations)ÚTYPE_CHECKINGN)Úremove_na_arraylike)Ú
MultiIndexÚconcat)Úunpack_single_str_list)ÚHashable)Ú
IndexLabel)Ú	DataFrameÚSeriesc           	     ó  — |dk(  rd}nd}t        | j                  t        «      sJ ‚| j                  j                  |   D �ci c]2  }|| j                  dd…| j                  j                  |«      |k(  f   “Œ4 c}S c c}w )am  
    Create data for iteration given `by` is assigned or not, and it is only
    used in both hist and boxplot.

    If `by` is assigned, return a dictionary of DataFrames in which the key of
    dictionary is the values in groups.
    If `by` is not assigned, return input as is, and this preserves current
    status of iter_data.

    Parameters
    ----------
    data : reformatted grouped data from `_compute_plot_data` method.
    kind : str, plot kind. This function is only used for `hist` and `box` plots.

    Returns
    -------
    iter_data : DataFrame or Dictionary of DataFrames

    Examples
    --------
    If `by` is assigned:

    >>> import numpy as np
    >>> tuples = [("h1", "a"), ("h1", "b"), ("h2", "a"), ("h2", "b")]
    >>> mi = pd.MultiIndex.from_tuples(tuples)
    >>> value = [[1, 3, np.nan, np.nan], [3, 4, np.nan, np.nan], [np.nan, np.nan, 5, 6]]
    >>> data = pd.DataFrame(value, columns=mi)
    >>> create_iter_data_given_by(data)
    {'h1':     h1
         a    b
    0  1.0  3.0
    1  3.0  4.0
    2  NaN  NaN, 'h2':     h2
         a    b
    0  NaN  NaN
    1  NaN  NaN
    2  5.0  6.0}
    Úhistr   é   N)Ú
isinstanceÚcolumnsr   ÚlevelsÚlocÚget_level_values)ÚdataÚkindÚlevelÚcols       úx/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/pandas/plotting/_matplotlib/groupby.pyÚcreate_iter_data_given_byr      s‰   € ð\ ˆv‚~Ø‰àˆô �d—l‘l¤JÔ/Ð/Ð/ð —<‘<×&Ñ& uÒ-óá-ˆCð 	ˆT�X‰X’a˜Ÿ™×6Ñ6°uÓ=ÀÑDÐDÑEÑEØ-ñð ùò s   Á7A<c                óÚ   — t        |«      }| j                  |«      }g }|D ]:  \  }}t        j                  |g|g«      }||   }	||	_        |j                  |	«       Œ< t        |d¬«      } | S )al  
    Internal function to group data, and reassign multiindex column names onto the
    result in order to let grouped data be used in _compute_plot_data method.

    Parameters
    ----------
    data : Original DataFrame to plot
    by : grouped `by` parameter selected by users
    cols : columns of data set (excluding columns used in `by`)

    Returns
    -------
    Output is the reconstructed DataFrame with MultiIndex columns. The first level
    of MI is unique values of groups, and second level of MI is the columns
    selected by users.

    Examples
    --------
    >>> d = {"h": ["h1", "h1", "h2"], "a": [1, 3, 5], "b": [3, 4, 6]}
    >>> df = pd.DataFrame(d)
    >>> reconstruct_data_with_by(df, by="h", cols=["a", "b"])
       h1      h2
       a     b     a     b
    0  1.0   3.0   NaN   NaN
    1  3.0   4.0   NaN   NaN
    2  NaN   NaN   5.0   6.0
    r   )Úaxis)r   Úgroupbyr   Úfrom_productr   Úappendr   )
r   ÚbyÚcolsÚby_modifiedÚgroupedÚ	data_listÚkeyÚgroupr   Ú	sub_groups
             r   Úreconstruct_data_with_byr(   W   sy   € ô< )¨Ó,€KØ�l‰l˜;Ó'€Gà€IÛ‰
ˆˆUô ×)Ñ)¨C¨5°$¨-Ó8ˆØ˜$‘Kˆ	Ø#ˆ	ÔØ×Ñ˜Õ#ð ô �) !Ô$€DØ€Kó    c                óÖ   — |�Xt        | j                  «      dkD  r@t        j                  | j                  D �cg c]  }t        |«      ‘Œ c}«      j                  S t        | «      S c c}w )zàInternal function to reformat y given `by` is applied or not for hist plot.

    If by is None, input y is 1-d with NaN removed; and if by is not None, groupby
    will take place and input y is multi-dimensional array.
    r   )ÚlenÚshapeÚnpÚarrayÚTr   )Úyr    r   s      r   Úreformat_hist_y_given_byr1   …   sW   € ð 
€~œ#˜aŸg™g›,¨Ò*Ü�x‰x¸Q¿SºSÓA¹S°cÔ,¨SÕ1¸SÑAÓB×DÑDÐDÜ˜qÓ!Ð!ùò Bs   ¸A&)r   )r   r   r   ÚstrÚreturnz"dict[Hashable, DataFrame | Series])r   r   r    r
   r!   r
   r3   r   )r0   ú
np.ndarrayr    zIndexLabel | Noner3   r4   )Ú
__future__r   Útypingr   Únumpyr-   Úpandas.core.dtypes.missingr   Úpandasr   r   Ú pandas.plotting._matplotlib.miscr   Úcollections.abcr	   Úpandas._typingr
   r   r   r   r(   r1   © r)   r   Ú<module>r>      sx   ðÝ "å  ã å :÷õ
 DáÝ(å)÷ð "(ð9Ø
ð9Øð9à'ó9ðx+Ø
ð+Ø#ð+Ø+5ð+àó+ô\"r)   