"TeܚXddlmZmZmZddlmZmZmZmZm Z m Z m Z m Z m Z ddlmZmZddlmZmZddlmZddlmZmZddlmZdd lmZdd lmZdd lm Z m!Z!dd l"m#Z#dd l$m%Z%ddl&m'Z'm(Z(ddl)m*Z*m+Z+erddl,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2eGddZ3eGddZ4Gdde Z5GddeZ6e7dk(rddl8m-Z-ddl9m:Z:ddl;m6Z6ddle>jd#d$d%d&'e>jd(d)*e>jd+d!d,-e>jd.d/d0e>jd1d2d3e>jd4d5d6d7d&8e>jd9d:d;dfd?ZBe-Z,e:ZCeBd@e,je>dABd&e>_EeBdCe,je>dDe>_FeBdEe,je>dABd>e>_FdFe>_EdGdHge>_GeBdIe,je>dABd>e>_FdFe>_EdGdHge>_Gde>_HeBdJe,je>dABd>e>_FdFe>_EdGdHge>_Gd&e>_Ide>_HeBdKe,je>dABd>d>d>y>y>#1swYy>xYw)L) dataclassfieldreplace) TYPE_CHECKINGDictIterableList NamedTupleOptionalSequenceTupleUnion)boxerrors)loop_first_last loop_last) pick_bool)ratio_distribute ratio_reduce)VerticalAlignMethod) JupyterMixin) Measurement)PaddingPaddingDimensions) is_renderable)Segment)Style StyleType)TextTextType)ConsoleConsoleOptions JustifyMethodOverflowMethodRenderableType RenderResultcfeZdZUdZdZded< dZded< dZeed< dZ eed< dZ eed< d Z d ed < d Z d ed< dZ ded< dZeeed< dZeeed< dZeeed< dZeeed< dZeed< dZeed< eeZeded<d!dZededfdZedefd Zy)"Columna Defines a column within a ~Table. Args: title (Union[str, Text], optional): The title of the table rendered at the top. Defaults to None. caption (Union[str, Text], optional): The table caption rendered below. Defaults to None. width (int, optional): The width in characters of the table, or ``None`` to automatically fit. Defaults to None. min_width (Optional[int], optional): The minimum width of the table, or ``None`` for no minimum. Defaults to None. box (box.Box, optional): One of the constants in box.py used to draw the edges (see :ref:`appendix_box`), or ``None`` for no box lines. Defaults to box.HEAVY_HEAD. safe_box (Optional[bool], optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True. padding (PaddingDimensions, optional): Padding for cells (top, right, bottom, left). Defaults to (0, 1). collapse_padding (bool, optional): Enable collapsing of padding around cells. Defaults to False. pad_edge (bool, optional): Enable padding of edge cells. Defaults to True. expand (bool, optional): Expand the table to fit the available space if ``True``, otherwise the table width will be auto-calculated. Defaults to False. show_header (bool, optional): Show a header row. Defaults to True. show_footer (bool, optional): Show a footer row. Defaults to False. show_edge (bool, optional): Draw a box around the outside of the table. Defaults to True. show_lines (bool, optional): Draw lines between every row. Defaults to False. leading (bool, optional): Number of blank lines between rows (precludes ``show_lines``). Defaults to 0. style (Union[str, Style], optional): Default style for the table. Defaults to "none". row_styles (List[Union, str], optional): Optional list of row styles, if more than one style is given then the styles will alternate. Defaults to None. header_style (Union[str, Style], optional): Style of the header. Defaults to "table.header". footer_style (Union[str, Style], optional): Style of the footer. Defaults to "table.footer". border_style (Union[str, Style], optional): Style of the border. Defaults to None. title_style (Union[str, Style], optional): Style of the title. Defaults to None. caption_style (Union[str, Style], optional): Style of the caption. Defaults to None. title_justify (str, optional): Justify method for title. Defaults to "center". caption_justify (str, optional): Justify method for caption. Defaults to "center". highlight (bool, optional): Highlight cell contents (if str). Defaults to False. r&headerfooter header_style footer_stylestyleleftr$justifytoprverticalellipsisr%overflowNwidth min_width max_widthratioFno_wrapr_index)default_factory_cellsreturnct|gS)zReturn a copy of this Column.r=)rselfs ,/usr/lib/python3/dist-packages/rich/table.pycopyz Column.copyrstB''c#8K|jEd{y7w)z2Get all cells in the column, not including header.Nr@rAs rCcellsz Column.cellsvs;;s c|jduS)z!Check if this column is flexible.N)r9rAs rCflexiblezColumn.flexible{szz%%rE)r>r)) __name__ __module__ __qualname____doc__r+__annotations__r,r-rr.r/r1r3r5r6r intr7r8r9r:boolr;rlistr=r rDpropertyrrGrIrErCr)r)&s(< "F !H!F !H L) - L) -E9-%G_%[&+H#+M!+H+E8C=\#Ix}#_#Ix}#_E8C=wGTRFCO%*4%@FD! "@(x 01&$&&rEr)c6eZdZUdZdZeeed< dZe ed<y)RowzInformation regarding a row.Nr/F end_section) rJrKrLrMr/r rrNrVrPrSrErCrUrUs$&!%E8I % KLrErUc4eZdZUdZeed< ded< eed<y)_CellzA single cell in a table.r/r& renderabler3N)rJrKrLrMrrNrrSrErCrXrXs # !  !!"rErXc7 eZdZUdZeeed<eeed<ddddejddddddddddd dd d dddd d dd de ee fde e de e de ede ede ejde ededededededededededede eed e ed!e ed"e ed#e ed$e ed%d&d'd&d(ed)df6d*Zeddddd+de ee fdedededed)df d,Zed)efd-Zej2ded)dfd.Zed)efd/Zed)efd0Zd1d2d3ed)efd4Zd1d2d5d6d)efd7Zed)eeeeeffd8Z e j2ded)dfd9Z d[dddd:d;dd?d@d?d e ed!e ede edAd&dBdCdDdEde ede edFe edGe edHed)dfdIZ!dddJdKe d?de edLed)dfdMZ"d\dNZ# d]dPZ$d1d2d5d6d)eefdQZ%edReedSeedFed)eefdTZ&d1d2dUedVed)ee'fdWZ(dUed)efdXZ)d1d2d5d6dVed)efdYZ*d1d2d5d6dReed)dOfdZZ+y)^Tablea A console renderable to draw a table. Args: *headers (Union[Column, str]): Column headers, either as a string, or :class:`~rich.table.Column` instance. title (Union[str, Text], optional): The title of the table rendered at the top. Defaults to None. caption (Union[str, Text], optional): The table caption rendered below. Defaults to None. width (int, optional): The width in characters of the table, or ``None`` to automatically fit. Defaults to None. min_width (Optional[int], optional): The minimum width of the table, or ``None`` for no minimum. Defaults to None. box (box.Box, optional): One of the constants in box.py used to draw the edges (see :ref:`appendix_box`), or ``None`` for no box lines. Defaults to box.HEAVY_HEAD. safe_box (Optional[bool], optional): Disable box characters that don't display on windows legacy terminal with *raster* fonts. Defaults to True. padding (PaddingDimensions, optional): Padding for cells (top, right, bottom, left). Defaults to (0, 1). collapse_padding (bool, optional): Enable collapsing of padding around cells. Defaults to False. pad_edge (bool, optional): Enable padding of edge cells. Defaults to True. expand (bool, optional): Expand the table to fit the available space if ``True``, otherwise the table width will be auto-calculated. Defaults to False. show_header (bool, optional): Show a header row. Defaults to True. show_footer (bool, optional): Show a footer row. Defaults to False. show_edge (bool, optional): Draw a box around the outside of the table. Defaults to True. show_lines (bool, optional): Draw lines between every row. Defaults to False. leading (bool, optional): Number of blank lines between rows (precludes ``show_lines``). Defaults to 0. style (Union[str, Style], optional): Default style for the table. Defaults to "none". row_styles (List[Union, str], optional): Optional list of row styles, if more than one style is given then the styles will alternate. Defaults to None. header_style (Union[str, Style], optional): Style of the header. Defaults to "table.header". footer_style (Union[str, Style], optional): Style of the footer. Defaults to "table.footer". border_style (Union[str, Style], optional): Style of the border. Defaults to None. title_style (Union[str, Style], optional): Style of the title. Defaults to None. caption_style (Union[str, Style], optional): Style of the caption. Defaults to None. title_justify (str, optional): Justify method for title. Defaults to "center". caption_justify (str, optional): Justify method for caption. Defaults to "center". highlight (bool, optional): Highlight cell contents (if str). Defaults to False. columnsrowsN)rrFTrnonez table.headerz table.footercenter)titlecaptionr6r7rsafe_boxpaddingcollapse_paddingpad_edgeexpand show_header show_footer show_edge show_linesleadingr/ row_stylesr-r. border_style title_style caption_style title_justifycaption_justify highlightheadersr`rar6r7rrbrcrdrerfrgrhrirjrkr/rlr-r.rmrnrorpr$rqrrr>cg|_g|_||_||_||_||_||_||_tj||_ | |_ | |_ | |_ | |_| |_||_||_||_||_|xsd|_|xsd|_||_||_||_||_||_||_t9|xsg|_|jj<}|D]G}t?|t@r|jC|&tE|j|_#||Iy)Nr*)r+)$r\r]r`rar6r7rrbrunpack_paddingre_expandrgrhrirjrkrdr/r-r.rmrnrorprqrrrQrlappend isinstancestr add_columnlenr;)rBr`rar6r7rrbrcrdrerfrgrhrirjrkr/rlr-r.rmrnrorprqrrrs append_columnr+s rC__init__zTable.__init__s6:&( !    "  w/    &&"$ 0 (.B(.B(&*.;0?"/3J4D"/E ++  &F&#&v. #DLL 1 f%  &rE)rcrdrerfc  ||d||ddd||dS)aGet a table with no lines, headers, or footer. Args: *headers (Union[Column, str]): Column headers, either as a string, or :class:`~rich.table.Column` instance. padding (PaddingDimensions, optional): Get padding around cells. Defaults to 0. collapse_padding (bool, optional): Enable collapsing of padding around cells. Defaults to True. pad_edge (bool, optional): Enable padding around edges of table. Defaults to False. expand (bool, optional): Expand the table to fit the available space if ``True``, otherwise the table width will be auto-calculated. Defaults to False. Returns: Table: A table instance. NF)rrcrdrgrhrirerfrS)clsrcrdrerfrss rCgridz Table.grids,* -  rEc:|jxs|jduS)z-Setting a non-None self.width implies expand.N)rwr6rAs rCrfz Table.expands||5tzz55rEc||_y)z Set expand.N)rw)rBrfs rCrfz Table.expand s  rEcd}|jr|jr|dz }|jr|t|jdz z }|S)z'Get extra width to add to cell content.rr)rrir|r\)rBr6s rC _extra_widthzTable._extra_width%sC 88 QJE 88 S&* *E rEc,t|jS)zGet the current number of rows.)r|r]rAs rC row_countzTable.row_count/s499~rEconsoler"indexctj}|jr7||j|j|t |jzz }|j |j }|||j|z }|S)zGet the current row style.)rnullrl get_styler|r]r/)rBrrr/ row_styles rC get_row_stylezTable.get_row_style4st  ?? W&&tus4???S7S'TU UEIIe$**  W&&y1 1E rEoptionsr#c 6|j}|j |j}|dkr tddS|j}t |j ||j ||z }|j}|jDcgc]}|||j ||}}t d|D|z}|jt d|D|zn |j} t|| } | j|j} | Scc}w)Nrc34K|]}|jywN)minimum.0 measurements rC z)Table.__rich_measure__..TD ##Dc34K|]}|jywr)maximumrs rCrz)Table.__rich_measure__..Wrr) r8r6rrsum_calculate_column_widths update_width_measure_columnr\clampr7) rBrrr8 extra_widthrcolumn measurements minimum_width maximum_widthrs rC__rich_measure__zTable.__rich_measure__>s&%% :: ! I q=q!$ $''   ) )--i+.EF  ..,,  GW%9%9)%Df M  D|D D{ R   " D|D D{ R  "-? !''7  s Dc|jS)zGet cell padding.)rvrAs rCrcz Table.padding_s}}rEc:tj||_|S)zSet cell padding.)rrurv)rBrcs rCrcz Table.paddingds w/  rEr0r2r4) r-r.r/r1r3r5r6r7r8r9r:r+r&r,r1r3rr5r%r8r9r:c tt|j|||xsd|xsd|xsd|||| | | | | }|jj|y)aAdd a column to the table. Args: header (RenderableType, optional): Text or renderable for the header. Defaults to "". footer (RenderableType, optional): Text or renderable for the footer. Defaults to "". header_style (Union[str, Style], optional): Style for the header, or None for default. Defaults to None. footer_style (Union[str, Style], optional): Style for the footer, or None for default. Defaults to None. style (Union[str, Style], optional): Style for the column cells, or None for default. Defaults to None. justify (JustifyMethod, optional): Alignment for cells. Defaults to "left". vertical (VerticalAlignMethod, optional): Vertical alignment, one of "top", "middle", or "bottom". Defaults to "top". overflow (OverflowMethod): Overflow method: "crop", "fold", "ellipsis". Defaults to "ellipsis". width (int, optional): Desired width of column in characters, or None to fit to contents. Defaults to None. min_width (Optional[int], optional): Minimum width of column, or ``None`` for no minimum. Defaults to None. max_width (Optional[int], optional): Maximum width of column, or ``None`` for no maximum. Defaults to None. ratio (int, optional): Flexible ratio for the column (requires ``Table.expand`` or ``Table.width``). Defaults to None. no_wrap (bool, optional): Set to ``True`` to disable wrapping of this column. r*)r;r+r,r-r.r/r1r3r5r6r7r8r9r:N)r)r|r\rx)rBr+r,r-r.r/r1r3r5r6r7r8r9r:rs rCr{zTable.add_columnjsdJt||$%+%++2  F#rEr/rV renderablesrVcdtddddfd}t|}|j}t|t|krg|dgt|t|z z}t |D]\}}|t|k(rKt|} |j D]} || t d|jj| n||} | || dpt|r || |tjd t|jd |j jt|| y) aAdd a row of renderables. Args: *renderables (None or renderable): Each cell in a row must be a renderable object (including str), or ``None`` for a blank cell. style (StyleType, optional): An optional style to apply to the entire row. Defaults to None. end_section (bool, optional): End a section and draw a line. Defaults to False. Raises: errors.NotRenderableError: If you add something that can't be rendered. rrYr&r>Nc:|jj|yr)r=rx)rrYs rCadd_cellzTable.add_row..add_cells MM  ,rE)r;r*zunable to render z1; a string or other renderable object is requiredr)r)rQr\r| enumerater]r rxrrNotRenderableErrortyperJrU) rBr/rVrrcell_renderablesr\rrYr_s rCadd_rowz Table.add_rowsK$ -V -1A -d ->B+=N,,  3w< / ! 3w<#.>*??@  "++;!<  E:G $u-/AVT"X./ ##F+ !$z*,//'Z(8(A(A'BBst  5kBCrEcF|jrd|jd_yy)z2Add a new section (draw a line after current row).TN)r]rVrAs rC add_sectionzTable.add_sections  99(,DIIbM % rEr'c #K|jstdy|j}|j |j}|j}|j |j ||z }t||z}|j||jd d dtdtddddffd }|jrE||jtj|jd |j Ed{|j#|Ed{|j$rF||j$tj|j&d |j( Ed{yy7r7Y7 w)N )r6rrheighttextr/r1r$r>r'ct|trj||dn|}j|j |S)NF)r/rrr1)r)ryrz render_strrenderupdate)rr/r1 render_textrrender_optionss rCrender_annotationz1Table.__rich_console__..render_annotationsY dC(""4u"F  >>^%:%:7%:%K" rEz table.title)r/r1z table.caption)r_)r\rr8r6rrrrrrrr!rr`r pick_firstrnrp_renderrarorq) rBrrr8rwidths table_widthrrs ` @rC__rich_console__zTable.__rich_console__st||$-  %% :: ! I'' .. W)))k*AB &kK/  (  JR  #, 7F    ::( &&t'7'7G**   <<@@@ <<( &&t'9'9?K,,      A s7DE=E7E=E9 AE=0E;1E=9E=;E=c ,|j}|j}|Dcgc]}|j|||}}|Dcgc]}|jxsd}}|j} |j } |j r|D cgc]} | js| jxsd!} } t| rt||Dcgc]\}}|jrdn |j!} }}|Dcgc]1}|jr#|jxsd| |jz3}}|t| z }t|| |}t|}t!|D]&\}}|js| |t#|z||<(t|}||kDr|j%||Dcgc]}|jduxr |j& !c}|}t|}||kDr+||z }t)|dgt+|z||}t|}t||Dcgc]'\}}|j||j-||)}}}|Dcgc]}|jxsd}}||kr |j s|j.i||j.| z krW|j.|nt1|j.| z |}t||z |}t||Dcgc] \}}||z }}}|Scc}wcc}wcc} wcc}}wcc}wcc}wcc}}wcc}wcc}}w)zNCalculate the widths of each column, including padding, not including borders.rrN)r8r\rr_get_padding_widthrrfrIr9anyzipr6r;rriterrnext_collapse_widthsr:rr|rr7min)rBrrr8r\r width_ranges_rangerget_padding_widthrcolratios fixed_widths flex_minimumflexible_width flex_widthsiter_flex_widthsrr excess_widthr6 _max_width pad_widths_widthpads rCrzTable._calculate_column_widthss:%% ,,IP ?ED '6 :  5AA&&..%A%AA 33'' ;;07H3<!>.~v|T #' #4 %.w%7UME6(4U(;dCS>T(Tu U&k  "**MTU6&,,$&=v~~+==UF f+KY&*Y6 %lQC#f+4EvvV!&k &)%9!E6$$Wg.B.B5.I6RL9EEffnn))EFE ) # NN &;$..;:V+W>>)+5yA  **{*BFKJ69&*6MN{vsfslNFN q BI   VFOs:K&K+?K0K0?$K5*6K;$L ,LL Lrwrapablec t|}||z }t|r|r|dkDrtdt||D t fdt||D} |z }t||D cgc]\}} | k(r| rdnd} }} t| r|s |St ||gt |z} t || | |}t|}||z }|r|dkDr|Scc} }w)aMReduce widths so that the total is under max_width. Args: widths (List[int]): List of widths. wrapable (List[bool]): List of booleans that indicate if a column may shrink. max_width (int): Maximum width to reduce to. Returns: List[int]: A new list of widths. rc3,K|] \}}|s |ywrrS)rr6 allow_wraps rCrz)Table._collapse_widths..Ws!/eZJE!s c3:K|]\}}|r|k7r|ndyw)rNrS)rr6r max_columns rCrz)Table._collapse_widths..Zs+()z(EZ,?EQF(sr)rrmaxrrr|r) rrrr8 total_widthrsecond_max_columncolumn_differencer6rr max_reducers @rCrzTable._collapse_widthsEs&k "Y. x=,"2 !36vx3H! %((-0-B(%!%/1B$B!.1-B)z!J.:QAE6{*;  ",0ABCc&kQ %lFJO!&k *Y6 ',"2( s2C column_indexrc #K|j|j|jt}|dk(|t |j dz k(idt dt dtttttfffd }g}|j}|j}|jr=||jxsd||jz} || |jf||jxsd} |jD] } || | f|j r=||j"xsd||j"z} || |j$f|rTt&} t)|D]?\}}\}}t+|| ||||t-|dd xs |j.Ay |D]-\}}t+||t-|dd xs |j./y w) z3Get all the cells with padding and optional header.rr first_rowlast_rowr>cj||f}|r|S \}}}} r" std||z }|std||z } s rd} rd}|rd}|rd}||||f}|||f<|S)Nr)getr)rrcachedr2rightbottomr0rv_padding_cacherd first_column last_columnrercs rC get_paddingz%Table._get_cells..get_padding{s#''H(=>F '. $C#q$,/D C&L1FDECFUFD1H4 << # },fll].Jl9% &!# " && && &??OOGV]]FC D)'7DOOLJD$ t  t   ")C Oq)C Oy  ,y ! "''$$,D&2B2B]2R$$,D 392B2B]2R rEc#z *+,-Kjjxsd}|jjxsdz}fdtjD}t t |}jr;jj|tjjnd}|rjs|jn|}tj} j} j} j} j } j"}j$}t*|r*|j&|*|j(|*|j*|f*|j,|*|j.|*|j0|f*|j2|*|j4|*|j6|fg}| r!*|j9||| ng}j:}j}tt=|D]H\}\}}}|xr| ,|xr| +,s+sj>|| z nd}d}g},s+rtAjB}n||| r|dz n|}t ||| D]\}}}|jE||jF|jH|jJd}jM|jN|||j|z}tQ|tS|}|jU|tQd|D-dtVtVtd d d tXd t@d tVtVtf *+,-fd } t |||| D!cgc]@\}}!}}*j[| ||!j\|||!j|z||Bc}}}!}|dd|r|r#| r!*|j_|d| || ||rdn|rdnd\}"}#}$|$j`jcr|$n)*|$j`|jd|$jz}%tg|D]9}&| r|"ti|D]\}'}(|(|&Ed{|'r|%| r|#| ;n(tg|D]}&|D]}(|(|&Ed{| |r%|r#| r!*|j_|d| || |xr |jj})|s|s|s|)s|r| r|tS|dz k\r| r,r|r!*|j_|d| |z|n*|j_|d| || K|r"| r*|jm||| yyycc}}}!}w77w)Nr*c3JK|]\}}j||ywr)r)rrrrrBs rCrz Table._render..s* $ f OOG\6 : s #)safer)r6r1r:r5rr/c32K|]}t|ywr)r|)rrs rCrz Table._render..>s94SY9srr3rr6r/r>crd}nrd}|dk(rj|||S|dk(rj|||Sj|||S)Nrr2middle) align_top align_middle align_bottom)rr3r6r/_Segment footer_row header_row row_heights rC align_cellz!Table._render..align_cell@sj 'H$Hu$#--dE:uMM)#00uj%PP,,T5*eLLrEfoot)edgerrheadmidrow)7rr/rmrr\rQrr substituterrbrgget_plain_headed_boxrlinerhrirjrk head_left head_right head_vertical foot_left foot_right foot_verticalmid_left mid_right mid_verticalget_toprrr]rrrr1r:r5 render_linesrYrr|rxr rO set_shaper3get_rowrstripbackground_stylerangerrV get_bottom).rBrrr table_stylerm _column_cells row_cells_boxnew_liner\rgrhrirjrk box_segmentsrrrrrrow_cellr# max_heightrGrr6rrrlinesr_cellr0r_dividerdividerline_no last_cell rendered_cellrVrrrrs.`` @@@@rCrz Table._renders '' (8b9 "W%6%6t7H7H7NB%OO  (1$,,(? .2#}2E-F xx HH  i w7G7GH   /34;K;Kt((*QU<<>,,&& && NN __ ,, T^^\:T__l;T//> T^^\:T__l;T//> T]]L9T^^\:T.. =L"t||F3\BBL** %% .7 8R.Su # *E*E4.;J-+J#: %+-.  J/1EZ!JJL %!' 519O (+68W'E $#tV!("NN"NN#__ "0" ,,OO"#DJJ/);- !SZ8  U# $ 9599J M4=) M/ M M  M d7m$  M M836fhw2W  /E5$""!%++.:    E!HK" VV) Dl#N(4%Q4aUV(X%eX  }}**,! y'A'AHNN'R %Z0 #G " 4=e4D*0 =#0#999(")M*!# "N # %Z0#G).: #0#999:"N#+LLiL@,1#//Kw+(Uc)nq6H-H(Z& LLYLG'Q( ' LLYLG#Nku #n I4??62LA AN4I D::sXNV;$AV. )B4V;V6 V;%.V;V9 AV;V;#V;'V;<V;A5V;9V;)r*r*)r>N)rr"rr#r>r'),rJrKrLrMr r)rNrUr HEAVY_HEADrrzr r!rOBoxrPrrrr~ classmethodrrRrfsetterrrrrrr rcr{rrrrrrXrrrrrSrErCr[r[st>&\ s)O %)&*##'!$#'%+!& ! !48,:,:,0+/-1)1+37>& $>&!>&(# >& } >& C= >&cgg >&4.>&#>&>&>&>&>&>&>& !>&"#>&$%>&&Xi01'>&(y))>&*y)+>&,y)->&.i(/>&0 *1>&2'3>&4)5>&67>&8 9>&@&'!%   $ #          @666 ]]Tdc3Ysy +; BsCc12 ^^0W$&#%5$ -1,0%)#)*/%/##'#'#5$ 5$!5$ y) 5$ y) 5$ "5$!5$(5$#5$}5$C=5$C=5$}5$5$ !5$t&*! -D/0-D "-D -D  -D^- - -+;- -^> >+;> c>@$#Y$*.t*$AD$ c$$LG G03G=CG %GR$s$s$&&"& &  &Pr r+;rEI#Yr rrEr[__main__)r")ReprHighlighter)r[)timerz Table renderzStar Wars MovieszRich example tabler)r`rarqReleased bright_cyancyanT)r-r/r:Titlemagentarz Box Officegreen)r1r/z Dec 20, 2019z Star Wars: The Rise of Skywalkerz $952,110,690z May 25, 2018zSolo: A Star Wars Storyz $393,151,347z Dec 15, 2017z!Star Wars Ep. V111: The Last Jediz$1,332,539,889zon blackrz Dec 16, 2016zRogue One: A Star Wars Storyz$1,332,439,889rr>Nctjtjt|tjyr)rprintrulerr)rs rCr+r+s$ MMO LL4 ) MMOrEz Example Tabler_rz expand=True2zwidth=50Fdimr^zrow_styles=['dim', 'none']z%leading=1, row_styles=['dim', 'none']z+show_lines=True, row_styles=['dim', 'none'])J dataclassesrrrtypingrrrr r r r r rr*rr_looprr_pickr_ratiorralignrjupyterrmeasurerrcrrprotocolrsegmentrr/rrrr r!rr"r#r$r%r&r'r)rUrXr[rJ rich.consolerich.highlighterrL rich.table_timerrMtabler{rrzr+rrrUrfr6rlrkrjrSrErCrhs11   -2&! /##  W&W& W&t MM M#J#@ L@ F z$0) ~ G/$(#   ]&$    2 wgF  .   n&?P  /      *      )#%  eX . } e z eX .  !6?+, eX .  !6? 67 eX .  !6? <= eX .OG/G/G/G/s !F5J  J)