
    Owg                    r    d dl mZ d dlmZ d dlZd dlZerd dlm	Z	  G d d      Z
d	dZedk(  r e        yy)
    )annotations)TYPE_CHECKINGN)Iterablec                  ^    e Zd ZdZ	 	 	 d
	 	 	 	 	 	 	 ddZddZddZdddZd Zd Z	ddd	Z
y)TablePlotterzg
    Layout some DataFrames in vertical/horizontal layout for explanation.
    Used in merging.rst
    c                .    || _         || _        || _        y N)
cell_widthcell_height	font_size)selfr
   r   r   s       L/var/www/horilla/myenv/lib/python3.12/site-packages/pandas/util/_doctools.py__init__zTablePlotter.__init__   s     %&"    c                    |j                   \  }}||j                  j                  z   ||j                  j                  z   fS )zA
        Calculate table shape considering index levels.
        )shapecolumnsnlevelsindex)r   dfrowcols       r   _shapezTablePlotter._shape   s:     88SRZZ'''rxx/?/?)???r   c                    |r]t        t         fd|D               j                  |      d         }t         fd|D               j                  |      d   z   }||fS t        |D cg c]  } j                  |      d    c} j                  |      d   gz         }t        |D cg c]  } j                  |      d    c} j                  |      d   gz         }||fS c c}w c c}w )zQ
        Calculate appropriate figure size based on left and right data.
        c              3  F   K   | ]  }j                  |      d      ywr   Nr   .0r   r   s     r   	<genexpr>z*TablePlotter._get_cells.<locals>.<genexpr>*   s     ?BT[[_Q/?   !r   c              3  F   K   | ]  }j                  |      d      yw   Nr   r   s     r   r    z*TablePlotter._get_cells.<locals>.<genexpr>+   s     ;R+;r!   r$   )maxsumr   )r   leftrightverticalvcellshcellsr   s   `      r   
_get_cellszTablePlotter._get_cells$   s     ?$??UASTUAVWF;d;;dkk%>PQR>SSF v~ t<$++b/!,<E@RST@U?VVWFt<$++b/!,<E@RST@U?VVWFv~ =<s   *C'+C,c           	         ddl m} ddlm} t	        |t
              s|g}|D cg c]  } j                  |       }} j                  |      } j                  |||      \  }}	|r j                  |z   j                  |	z  f}
n j                  |z   j                  |	z  f}
|j                  |
      }|r|j                  t        |      |      }t         fd|D              }t         fd|D              }t        t        ||            D ]8  \  }\  }}|j!                  ||d|f         } j#                  |||d|z         : |j%                  |dd|df         } j#                  ||d	d
|	z         |j'                  dddd       |S t         fd||gz   D              }dt)        j                  |      z  }|j                  d|      }d}t        ||      D ]Q  \  }} j+                  |      }|j!                  |d|||d   z   f         } j#                  ||||       ||d   z  }S |j%                  |d|df         } j#                  ||d	|       |j'                  dddd       |S c c}w )a  
        Plot left / right DataFrames in specified layout.

        Parameters
        ----------
        left : list of DataFrames before operation is applied
        right : DataFrame of operation result
        labels : list of str to be drawn as titles of left DataFrames
        vertical : bool, default True
            If True, use vertical layout. If False, use horizontal layout.
        r   )gridspecN)figsizec              3  F   K   | ]  }j                  |      d      ywr#   r   r   s     r   r    z$TablePlotter.plot.<locals>.<genexpr>Q        BrB 2Br!   c              3  F   K   | ]  }j                  |      d      ywr   r   r   s     r   r    z$TablePlotter.plot.<locals>.<genexpr>R   r1   r!         ?)titleheightResultg?g?g?gffffff?)topbottomr'   r(   c              3  F   K   | ]  }j                  |      d      ywr   r   r   s     r   r    z$TablePlotter.plot.<locals>.<genexpr>[   s     G"4;;r?1-Gr!   r$   g333333?)
matplotlibr.   matplotlib.pyplotpyplot
isinstancelist_convr,   r
   r   figureGridSpeclenr%   	enumeratezipadd_subplot_make_tablesubplotsubplots_adjustnpr   )r   r'   r(   labelsr)   r.   pltr   r+   r*   r/   figgsmax_left_colsmax_left_rowsi_left_labelaxmax_rowsr5   sps   `                     r   plotzTablePlotter.plot1   s    	('$%6D)-.2

2..

5!uh?oo.0@0@60IIG oo.0@0@60IIGjjj)""3t9f5BBTBBMBTBBM&/D&0A&B V"?E6__R1]?(:%;<  U&}AT UV R=> 123BRhtf}MC4tL" 
 GwGGH266(++F""1f-BA!$/ 
F[[___R1q2a5y=(8%9:  Rvf ERU
	 R12Y'BRhvFDDM
Q /s   I=c                    t        |t        j                        r/|j                  |j	                  d      }n|j	                         }|j                  d      }|S )zF
        Convert each input to appropriate for table outplot.
         )nameNaN)r=   pdSeriesrY   to_framefillna)r   datas     r   r?   zTablePlotter._convl   sJ     dBII&yy }}"}-}}{{5!r   c                   |j                         }|j                  j                  }|dk(  r|j                  dd|j                         n?t	        |      D ]1  }|j                  |d| |j                  j                  |             3 |j                  j                  }|dkD  r|j                  j                  d      }t	        d|      D cg c]'  }|j                  j                  |      j                  ) }}t        j                  |      }|j                  |_        t        j                  ||g      }||_        |S c c}w )Nr$   r   Index)copyr   r   insertrange_get_level_valuesr   _valuesr[   	DataFrameconcat)r   r_   idx_nlevelsrP   col_nlevelsr   valuescol_dfs           r   _insert_indexzTablePlotter._insert_indexx   s   yy{jj((!KK7DJJ/;' MAqc{DJJ,H,H,KLM ll**?,,003CCHKCX>?..q199F  \\&)F!>>DL99fd^,DDLs   ,ENc                   ||j                  d       y ddlm} |j                  j                  }|j
                  j                  }| j                  |      }|j                  ||d      }|j                  | j                         |dt        |      dz   z  }|j                         }	|	d   j                         D ]g  \  \  }
}}|d	k(  r|j                  d       n7|
|k  r||k  r|j                  d       n|
|k  s||k  r|j                  d
       |j                  |       i |j                  || j                         |j!                  d       y )NFr   )plotting	   )locr3   r$   celldz#AAAAAA)sizeoff)set_visiblepandasro   r   r   r   rm   tableset_fontsizer   rB   
propertiesitemsset_facecolor
set_height	set_titleaxis)r   rS   r   r4   r5   ro   ri   rj   tbpropsrccells                r   rF   zTablePlotter._make_table   s)   :NN5!#hh&&jj((#^^B^*
'>CGaK(F!'N002 	$LFQDBw  '[Q_  '[AO""9-OOF#	$ 	U0
r   )gGz?g      ?g      @)r
   floatr   r   r   r   returnNone)r   zpd.DataFramer   tuple[int, int])r   r   ) T)rJ   zIterable[str]r)   boolr	   )r4   strr5   zfloat | Noner   r   )__name__
__module____qualname____doc__r   r   r,   rV   r?   rm   rF   r   r   r   r   r      s]     !!	## # 	#
 
#@9v
,r   r   c                    dd l m}  t               }t        j                  g dg dg dd      }t        j                  ddgdd	gd
      }|j                  ||gt        j                  ||g      ddgd       | j                          t        j                  ddgdd	gd      }|j                  ||gt        j                  ||gd      ddgd       | j                          t        j                  j                  g d      }t        j                  j                  ddg      }t        j                  g dg dd|      }||_
        |j                  ||dg       | j                          y )Nr   )
         )         )          )ABCr   r   r   r   )r   r   df1df2T)rJ   r)   )XZr$   )r   F)r$   r   r$   r   )r$   r   )   r   )r   r   )r   r   r   r   )r$   r               )r   r         rp   r   )v1v2)r   df3)rJ   )r;   r<   r   r[   rg   rV   rh   show
MultiIndexfrom_tuplesr   )rK   pr   r   r   idxcolumns          r   mainr      s4   #A
,,\<P
QC
,,b"XRH5
6CFFC:ryy#s,eU^dFSHHJ
,,b"XRH5
6CFF	c
BIIsCjq15%.SX   HHJ
--
#
#DC ]]&&(';<F
,,08KLTW
XCCKFF3UGF$HHJr   __main__)r   r   )
__future__r   typingr   numpyrI   rw   r[   collections.abcr   r   r   r   r   r   r   <module>r      s=    "    (] ]@8 zF r   