B @`@srddlmZmZddlZddlZGdddZedkrnddl m Z eZ e dddgd d d gd d dgdZe ddgd dgdZe jeegeeegddgdde e ddgd dgdZe jeegejeegddddgdde ejddddddgZejddgZej ddd d!d"d#gd"d#d$d%d&dgd'ed(Zee_e jeed)gd*e dS)+)OptionalTupleNc@seZdZdZdeeedddZejee e fdd d Z ee e fd d d Z de dddZ ddZddZdeeedddZdS) TablePlotterzg Layout some DataFrames in vertical/horizontal layout for explanation. Used in merging.rst Gz??@) cell_width cell_height font_sizecCs||_||_||_dS)N)rr r )selfrr r r 9/tmp/pip-unpacked-wheel-q9tj5l6a/pandas/util/_doctools.py__init__szTablePlotter.__init__)dfreturncCs"|j\}}||jj||jjfS)zA Calculate table shape considering index levels. )shapecolumnsnlevelsindex)r rrowcolr r r _shapes zTablePlotter._shape)rcs|rPttfdd|D|d}tfdd|D|d}nLtfdd|D|dg}tfdd|D|dg}||fS) zQ Calculate appropriate figure size based on left and right data. c3s|]}|dVqdS)rN)r).0r)r r r %sz*TablePlotter._get_cells..rc3s|]}|dVqdS)N)r)rr)r r r r&srcsg|]}|dqS)r)r)rr)r r r (sz+TablePlotter._get_cells..csg|]}|dqS)r)r)rr)r r r r)s)maxsumr)r leftrightverticalvcellshcellsr )r r _get_cellss &&&&zTablePlotter._get_cellsNT)r c s:ddlm}ddlm}t|ts(|g}fdd|D}|}|||\}}|rpj|j |f} nj|j |f} |j | d} |rb| t ||} t fdd|D} t fdd|D} xJtt||D]8\}\}}| | |d| f}j|||d | d qW|| dd| df}j||d d |d | jd ddddnt fdd||gD}d t |}| d|} d}x^t||D]P\}}|}| | d|||df}j||||d ||d7}qW|| d|df}j||d |d | jddddd| S)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. rNcsg|]}|qSr )_conv)rr)r r r r=sz%TablePlotter.plot..)figsizec3s|]}|dVqdS)rN)r)rr)r r r rLsz$TablePlotter.plot..c3s|]}|dVqdS)rN)r)rr)r r r rMsg?)titleheightZResultg?g?g?gffffff?)topZbottomrrc3s|]}|dVqdS)rN)r)rr)r r r rVsrg333333?)Zmatplotlib.gridspecgridspecmatplotlib.pyplotpyplot isinstancelistr$r#rr figureZGridSpeclenr enumeratezipZ add_subplot _make_tableZsubplotZsubplots_adjustnpr)r rrlabelsr r)pltr"r!r%ZfigZgsZ max_left_colsZ max_left_rowsillabelaxZmax_rowsr'rspr )r r plot,sD       zTablePlotter.plotcCs:t|tjr,|jdkr$|jdd}n|}|d}|S)zF Convert each input to appropriate for table outplot. N)nameNaN)r,pdZSeriesr=Zto_frameZfillna)r datar r r r$gs    zTablePlotter._convcsjj}|dkr*ddjn.x,t|D] }|d|j|q4Wjj}|dkrjd}fddtd|D}t|}|j_t |g|_S)NrrZIndexcsg|]}j|jqSr )r_get_level_valuesZ_values)rr6)r@r r rsz.TablePlotter._insert_index..) copyrrinsertrangerArr? DataFrameconcat)r r@ idx_nlevelsr6 col_nlevelsrvaluesZcol_dfr )r@r _insert_indexss   zTablePlotter._insert_index)r&r'c Cs|dkr|ddSddlm}|jj}|jj}||}|j||dd}||j |dkrpdt |d}| } xp| d D]`\\} } } | dkr| dn6| |kr| |kr| dn| |ks| |kr| d | |qW|j||j d |d dS) NFr )locg?rZcelldz#AAAAAA)sizeoff)Z set_visibleZpandas.plottingplottingrrrrJtableZ set_fontsizer r/Z propertiesitemsZ set_facecolorZ set_height set_titleaxis) r r9rr&r'rPrGrHtbpropsrccellr r r r2s,       zTablePlotter._make_table)rrr)NT)N)__name__ __module__ __qualname____doc__floatrr?rErintrr#boolr;r$rJstrrr2r r r r rs ; r__main__  )ABC)rlrndf1df2T)r4r )XZr)rTF)rrl)rrm)rrn)rl)rsrm)rsrnrsrK)Zv1Zv2)rdf3)r4)typingrrZnumpyr3Zpandasr?rrZr*r+r5prErorpr;rFshowrzZ MultiIndex from_tuplesidxrrr r r r s,!  $$$,