U e5dìSã @sdZddlZddlZddlZddlZddlm Z dddddd d gZ d%d ddœdd„Z d&d ddœdd„Z d dœdd „Zdd„Zdd„Zdd„ZGdd„dƒZdd„ZGdd „d ƒZdd„ZeeeeeeeeedƒhƒZdd„Z d'd d!„Z!d"d#„Z"e#d$k�rþe!ƒdS)(a/Support to pretty-print lists, tuples, & dictionaries recursively. Very simple, but useful, especially in debugging data structures. Classes ------- PrettyPrinter() Handle pretty-printing operations onto a stream using a configured set of formatting parameters. Functions --------- pformat() Format a Python object into a pretty-printed representation. pprint() Pretty-print a Python object to a stream [default is sys.stdout]. saferepr() Generate a 'standard' repr()-like value, but protect against recursive data structures. éN)ÚStringIOÚpprintÚpformatÚ isreadableÚ isrecursiveÚsafereprÚ PrettyPrinterÚppééPFT©ÚcompactÚ sort_dictscCs"t||||||d�}| |¡dS)zAPretty-print a Python object to a stream [default is sys.stdout].)ÚstreamÚindentÚwidthÚdepthr rN)rr)Úobjectrrrrr rZprinter©rú/usr/lib64/python3.8/pprint.pyr/sþcCst|||||d� |¡S)z= 0Nzdepth must be > 0zwidth must be != 0) ÚintÚ ValueErrorÚ_depthÚ_indent_per_levelÚ_widthÚ_streamÚ_sysÚstdoutÚboolÚ_compactÚ _sort_dicts)rrrrrr rrrrr hs  zPrettyPrinter.__init__cCs&| ||jddid¡|j d¡dS)NrÚ )Ú_formatr3Úwrite©rrrrrr“szPrettyPrinter.pprintcCs"tƒ}| ||ddid¡| ¡S©Nr)Ú _StringIOr:Úgetvalue)rrZsiorrrr—szPrettyPrinter.pformatcCs| |idd¡dS)Nrr©Úformatr<rrrrœszPrettyPrinter.isrecursivecCs | |idd¡\}}}|o| Sr=r@)rrÚsÚreadableÚ recursiverrrrŸszPrettyPrinter.isreadablec CsÞt|ƒ}||kr.| t|ƒ¡d|_d|_dS| |||¡}|j||} t|ƒ| krÐ|j  t |ƒj d¡} | dk rœd||<| |||||||dƒ||=dSt |t ƒrÐd||<| ||||||d¡||=dS| |¡dS)NTFr )r$r;Ú _recursionÚ _recursiveÚ _readableÚ_reprr2ÚlenÚ _dispatchÚgetr#Ú__repr__Ú isinstanceÚdictÚ _pprint_dict) rrrrÚ allowanceÚcontextÚlevelÚobjidÚrepÚ max_widthÚprrrr:£s0   ÿzPrettyPrinter._formatc Csz|j}|dƒ|jdkr*||jddƒt|ƒ}|rn|jrNt| ¡td�} n| ¡} | | |||d||¡|dƒdS)Nú{r ú ©Úkeyú})r;r1rIr8ÚsortedÚitemsr-Ú_format_dict_items) rrrrrPrQrRr;Zlengthr]rrrrO½s ÿzPrettyPrinter._pprint_dictcCslt|ƒs| t|ƒ¡dS|j}| |jd¡| t| ¡ƒ||t|jƒd|d||¡| d¡dS)Nú(r ú))rIr;ÚreprÚ __class__r'r:Úlistr])rrrrrPrQrRÚclsrrrÚ_pprint_ordered_dictÎsþz"PrettyPrinter._pprint_ordered_dictcCs0| d¡| ||||d||¡| d¡dS)Nú[r ú])r;Ú _format_items©rrrrrPrQrRrrrÚ _pprint_listÛs  ÿzPrettyPrinter._pprint_listcCsH| d¡t|ƒdkrdnd}| ||||t|ƒ||¡| |¡dS)Nr_r z,)r`)r;rIrh)rrrrrPrQrRÚendcharrrrÚ _pprint_tupleãs ÿzPrettyPrinter._pprint_tuplec Cs”t|ƒs| t|ƒ¡dS|j}|tkr8| d¡d}n&| |jd¡d}|t|jƒd7}t|td�}| ||||t|ƒ||¡| |¡dS)NrWr[ú({ú})r rY) rIr;rarbÚsetr'r\rrh) rrrrrPrQrRÚtyprkrrrÚ _pprint_setìs   ÿzPrettyPrinter._pprint_setcCsÌ|j}t|ƒs|t|ƒƒdSg}| d¡} |dkrD|d7}|d7}|j|} } t| ƒD]ø\} } t| ƒ}| t| ƒdkr‚| |8} t|ƒ| krš| |¡qZt d| ¡}|s®t ‚|drºt ‚|  ¡| }d}t|ƒD]l\}}||}|t|ƒdk�r| t| ƒdk�r||8}tt|ƒƒ|k�r:|�r4| t|ƒ¡|}qÒ|}qÒ|rZ| t|ƒ¡qZt|ƒdk�rn||ƒdS|dk�r€|dƒt|ƒD],\} }| dk�rª|dd |ƒ||ƒ�qˆ|dk�rÈ|d ƒdS) NTr z\S*\s*éÿÿÿÿÚr_rr9rXr`) r;rIraÚ splitlinesr2Ú enumerateÚappendÚreÚfindallÚAssertionErrorÚpop)rrrrrPrQrRr;ZchunksÚlinesZ max_width1rUÚiÚlinerTÚpartsZ max_width2ÚcurrentÚjÚpartÚ candidaterrrÚ _pprint_strsX      $    zPrettyPrinter._pprint_strc Cs’|j}t|ƒdkr"|t|ƒƒdS|dk}|rF|d7}|d7}|dƒd} t||j||ƒD]$} || ƒ|| ƒ| s\dd|} q\|rŽ|dƒdS)Nér r_rsr9rXr`)r;rIraÚ_wrap_bytes_reprr2) rrrrrPrQrRr;ZparensÚdelimrTrrrÚ _pprint_bytes3s"  zPrettyPrinter._pprint_bytesc Cs>|j}|dƒ| t|ƒ||d|d||d¡|dƒdS)Nz bytearray(é r r`)r;r‡Úbytes)rrrrrPrQrRr;rrrÚ_pprint_bytearrayHsÿzPrettyPrinter._pprint_bytearraycCs8| d¡| | ¡||d|d||¡| d¡dS)Nz mappingproxy(é r r`)r;r:ÚcopyrirrrÚ_pprint_mappingproxyQs  ÿz"PrettyPrinter._pprint_mappingproxyc Csœ|j}||j7}dd|}t|ƒd} t|ƒD]f\} \} } | | k} | | ||¡}||ƒ|dƒ| | ||t|ƒd| r€|nd||¡| s0||ƒq0dS)Nú, rXr z: r)r;r1rIrurHr:)rr]rrrPrQrRr;ÚdelimnlZ last_indexr|rZÚentÚlastrTrrrr^Ys     þz PrettyPrinter._format_dict_itemscCsL|j}||j7}|jdkr,||jddƒdd|}d} |j|d} } t|ƒ} z t| ƒ} Wntk rxYdSXd}|�sH| }z t| ƒ} Wn(tk r¼d}| |8} | |8} YnX|j�r| |||¡}t|ƒd}| |krô| } | rô|} | |k�r| |8} || ƒd} ||ƒq~|| ƒ|} |  ||||�r<|nd||¡q~dS) Nr rXrŽrsFTrú, ) r;r1r2ÚiterÚnextÚ StopIterationr7rHrIr:)rr]rrrPrQrRr;r�r†rrUÚitZnext_entr‘r�rTÚwrrrrhjsR         þzPrettyPrinter._format_itemscCs4| || ¡|j|¡\}}}|s&d|_|r0d|_|S)NFT)rArŒr0rGrF)rrrQrRrarCrDrrrrH“s ÿ zPrettyPrinter._reprcCst|||||jƒS)zÈFormat object for a specific context, returning a string and flags indicating whether the representation is 'readable' and whether the object represents a recursive construct. )rr8)rrrQÚ maxlevelsrRrrrrAœszPrettyPrinter.formatc Cs‚t|ƒs| t|ƒ¡dS| |j||¡}|j}|t|jƒd7}| d|j|d|f¡| ||||d||¡| d¡dS)Nr z %s(%s, %srXr`)rIr;rarHÚdefault_factoryrbr'rO) rrrrrPrQrRZrdfrdrrrÚ_pprint_default_dict£sz"PrettyPrinter._pprint_default_dictc CsŠt|ƒs| t|ƒ¡dS|j}| |jd¡|jdkrN| |jdd¡| ¡}| |||t|jƒd|d||¡| d¡dS)Nrmr rXrrn)rIr;rarbr'r1Ú most_commonr^) rrrrrPrQrRrdr]rrrÚ_pprint_counter°s þzPrettyPrinter._pprint_counterc Cs¸t|jƒs| t|ƒ¡dS|j}| |jd¡|t|jƒd7}t|jƒD]d\}} |t|jƒdkrŒ| | |||d||¡| d¡qN| | ||d||¡| dd|¡qNdS)Nr_r r`rŽrX)rIÚmapsr;rarbr'rur:) rrrrrPrQrRrdr|ÚmrrrÚ_pprint_chain_mapÀs  zPrettyPrinter._pprint_chain_mapc Cs¸t|ƒs| t|ƒ¡dS|j}| |jd¡|t|jƒd7}| d¡|jdkrz| ||||d||¡| d¡n:| |||d||¡| |j||¡}| dd||f¡dS)Nr_r rfrz])z], %smaxlen=%s)rX)rIr;rarbr'ÚmaxlenrhrH) rrrrrPrQrRrdZrmlrrrÚ _pprint_dequeÑs&  ÿ  ÿzPrettyPrinter._pprint_dequec Cs| |j|||||d¡dS©Nr ©r:ÚdatarirrrÚ_pprint_user_dictåszPrettyPrinter._pprint_user_dictc Cs| |j|||||d¡dSr¢r£rirrrÚ_pprint_user_listêszPrettyPrinter._pprint_user_listc Cs| |j|||||d¡dSr¢r£rirrrÚ_pprint_user_stringïsz!PrettyPrinter._pprint_user_string)r r NN)2r'r(r)r rrrrr:rJrOrNrLreÚ _collectionsÚ OrderedDictrjrcrlÚtuplerqroÚ frozensetrƒr"r‡r‰rŠÚ bytearrayr�Ú_typesÚMappingProxyTyper^rhrHrAršÚ defaultdictrœÚCounterrŸÚChainMapr¡Údequer¥ÚUserDictr¦ÚUserListr§Ú UserStringrrrrrgs^ÿ +      1    )       cCsŽt|ƒ}|tkrt|ƒddfSt|ddƒ}t|tƒ�rD|tjk�rD|sJdSt|ƒ}|rl||krldd||kfS||kr‚t|ƒddfSd||<d}d} g} | j } |d7}|rºt |  ¡t d�} n|  ¡} | D]b\} }t | ||||ƒ\}}}t |||||ƒ\}}}| d||fƒ|�o|�o|}|�s$|rÆd} qÆ||=d d  | ¡|| fSt|tƒ�r\|tjk�stt|tƒ�rn|tjk�rnt|tƒ�r�|�sŠd Sd }n"t|ƒdk�r¤d }n|�s®dSd}t|ƒ}|�rÜ||k�rÜ|dd||kfS||k�rôt|ƒddfSd||<d}d} g} | j } |d7}|D]8}t |||||ƒ\}}}| |ƒ|�sFd}|�rd} �q||=|d  | ¡|| fSt|ƒ}||�oˆ| d¡ dfS)NTFrL)z{}TFz{...}r rYz%s: %sz{%s}r’)z[]TFz[%s]z(%s,))z()TFz(%s)z...ú<)r#Ú_builtin_scalarsraÚgetattrÚ issubclassrNrLr$rErvr\r]r-rÚjoinrcrªrIÚ startswith)rrQr˜rRrrpÚrrSrCrDZ componentsrvr]ÚkÚvZkreprZ kreadableZkrecurZvreprZ vreadableZvrecurrAÚoZoreprZ oreadableZorecurrTrrrrös„    ÿÿ  rcCsdt|ƒjt|ƒfS)Nz)r#r'r$rrrrrE?sÿrEcCs„ddl}|dkr,ddddgdddœfgd }tƒ}| ¡}t|iddd ƒ| ¡}| |¡| ¡}td ||ƒtd ||ƒdS) NrÚstring)r rér„éé)ééi †Tz _safe_repr:zpformat:)ÚtimerÚ perf_counterrrÚprint)rrÆrVÚt1Út2Zt3rrrÚ _perfcheckDs rËccsŒd}t|ƒdd}tdt|ƒdƒD]T}|||d…}||}||krP||8}tt|ƒƒ|krt|rnt|ƒV|}q$|}q$|rˆt|ƒVdS)Nór„r)rIÚrangera)rrrPrr‘r|r�r‚rrrr…Qs r…Ú__main__)Nr r N)r r N)N)$r*Ú collectionsr¨rwÚsysr4Útypesr­Úiorr>Ú__all__rrr rrrrr-rrr«r"r‰r¬r.ÚfloatÚcomplexr6r#r·rErËr…r'rrrrÚ sJ  ÿÿ ÿ Fÿ