
    Mh                        S SK Jr  S SKJr  S SKrS SKJr  S SKJ	r	J
r
  S SKJr  \(       a  S SKJr  S SKJr  S S	KJrJr   S     SS
 jjr        SS jrSS jrg)    )annotations)TYPE_CHECKINGN)remove_na_arraylike)
MultiIndexconcat)unpack_single_str_list)Hashable)
IndexLabel)	DataFrameSeriesc           	        US:X  a  SnOSn[        U R                  [        5      (       d   eU R                  R                  U    Vs0 s H2  nX0R                  SS2U R                  R                  U5      U:H  4   _M4     sn$ s  snf )a  
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       U/var/www/html/env/lib/python3.13/site-packages/pandas/plotting/_matplotlib/groupby.pycreate_iter_data_given_byr      s    ^ v~ dllJ//// <<&&u--C 	XXa66u=DDEE-  s   9Bc                    [        U5      nU R                  U5      n/ nU H9  u  pg[        R                  " U/U/5      nXr   n	Xl        UR                  U	5        M;     [        USS9n U $ )a  
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(   X   ss    < ),Kll;'GI
 ))C5$-8K	##  )!$DK    c                    Ub]  [        U R                  5      S:  aD  [        R                  " U R                   Vs/ s H  n[        U5      PM     sn5      R                  $ [        U 5      $ s  snf )zInternal 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     
~#agg,*xxQSSASc,S1S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() "(:
::':z+
+#++5++\"r)   