/opt/cloudlinux/venv/lib/python3.11/site-packages/coverage/__pycache__
NameSizeModeActions
annotate.cpython-311.pyc60170644editdlrm
bytecode.cpython-311.pyc10240644editdlrm
cmdline.cpython-311.pyc366770644editdlrm
collector.cpython-311.pyc217640644editdlrm
config.cpython-311.pyc255990644editdlrm
context.cpython-311.pyc34500644editdlrm
control.cpython-311.pyc601880644editdlrm
data.cpython-311.pyc107570644editdlrm
debug.cpython-311.pyc306280644editdlrm
disposition.cpython-311.pyc26360644editdlrm
env.cpython-311.pyc47380644editdlrm
exceptions.cpython-311.pyc30960644editdlrm
execfile.cpython-311.pyc143110644editdlrm
files.cpython-311.pyc254920644editdlrm
html.cpython-311.pyc331020644editdlrm
inorout.cpython-311.pyc271180644editdlrm
jsonreport.cpython-311.pyc64400644editdlrm
lcovreport.cpython-311.pyc70070644editdlrm
misc.cpython-311.pyc205150644editdlrm
multiproc.cpython-311.pyc57050644editdlrm
numbits.cpython-311.pyc71230644editdlrm
parser.cpython-311.pyc659940644editdlrm
phystokens.cpython-311.pyc87550644editdlrm
plugin.cpython-311.pyc235730644editdlrm
plugin_support.cpython-311.pyc196740644editdlrm
python.cpython-311.pyc119060644editdlrm
pytracer.cpython-311.pyc115880644editdlrm
report.cpython-311.pyc166490644editdlrm
report_core.cpython-311.pyc56020644editdlrm
results.cpython-311.pyc197380644editdlrm
sqldata.cpython-311.pyc770690644editdlrm
templite.cpython-311.pyc153960644editdlrm
tomlconfig.cpython-311.pyc119890644editdlrm
types.cpython-311.pyc89970644editdlrm
version.cpython-311.pyc16240644editdlrm
xmlreport.cpython-311.pyc148420644editdlrm
__init__.cpython-311.pyc9090644editdlrm
__main__.cpython-311.pyc4230644editdlrm
Edit: /opt/cloudlinux/venv/lib/python3.11/site-packages/coverage/__pycache__/parser.cpython-311.pyc (65994B)
§ <'?Ñ @1ãó®—dZddlmZddlZddlZddlZddlZddlZddlZddl Z ddl m Z ddl m Z mZmZmZmZmZmZmZmZmZddlmZddlmZddlmZdd lmZmZdd l m!Z!m"Z"dd l#m$Z$dd l%m&Z&m'Z'm(Z(Gd „d¦«Z)Gd„d¦«Z*Gd„dej+dd¦«¦«Z,Gd„de&¦«Z-ee'eeee.ee.ffZ/Gd„d¦«Z0Gd„de0¦«Z1Gd„de0¦«Z2Gd„de0¦«Z3Gd„d e0¦«Z4Gd!„d"ej5¦«Z6d7d'„Z7Gd(„d)¦«Z8d*gZ9d8d.„Z:de;fd9d6„ZNr)Úget_python_sourcezNo source for code: 'z': ú F)rrÚcoverage.pythonr#ÚOSErrorrrÚsplitÚlinesÚsetÚ statementsÚexcludedÚraw_statementsÚ raw_excludedÚ raw_classdefsÚraw_docstringsÚ show_tokensÚ _multilineÚ _all_arcsÚ_missing_arc_fragments)Úselfrrrr#Úerrs úc/builddir/build/BUILD/cloudlinux-venv-1.0.12/venv/lib64/python3.11/site-packages/coverage/parser.pyÚ__init__zPythonParser.__init__%sJ€ðÐM�xÐMÐMÐ!MÑMÔMÐØ Ð, HˆŒ Ø Ð Ø!ˆDŒIˆIà 9Ð 9Ð 9Ð 9Ð 9Ð 9ð YØ-Ð-¨d¬mÑ<Ô<�” � øÝð Yð Yð YÝÐN°t´}ÐNÐNÈÐNÐNÑOÔOÐUXÐXøøøøð YøøøðˆŒ ð!%¤ §¢°Ñ 5Ô 5ˆŒ õ ),©¬ˆŒõ'*¡e¤eˆŒ õ-0©E¬EˆÔõ+.©%¬%ˆÔõ,/©5¬5ˆÔõ-0©E¬EˆÔð!ˆÔð35ˆŒð/3ˆŒØ?CˆÔ#Ð#Ð#s©?¿ A)Á A$Á$A)ÚregexesÚstrú Set[TLineNo]cóô—t|¦«}tj|¦«}t¦«}t |jd¬¦«D]/\}}| |¦«r| |¦«Œ0|S)zêFind the lines matching one of a list of regexes. Returns a set of line numbers, the lines that contain a match for one of the regexes in `regexes`. The entire line needn't match, just a part of it. é©Ústart)rÚreÚcompiler)Ú enumerater(ÚsearchÚadd)r4r8ÚcombinedÚregex_cÚmatchesÚiÚltexts r6Úlines_matchingzPythonParser.lines_matchingest€õ˜gÑ&Ô&ˆÝ”*˜XÑ&Ô&ˆÝ‘%”%ˆÝ! $¤*°AÐ6Ñ6Ô6ð ð ‰HˆAˆuØ�~Š~˜eÑ$Ô$ð Ø— ’ ˜A‘”�øØˆóc ó&—|jr| |j¦«|_d}d}d}d}tj}d}d}d}d} |j€J‚t |j¦«} | D�],\} } \} }\}}}|jrJttj   | | ¦«d›dt| |f¦«d›d| d›d|›�¦«| tjkr|d z }�na| tj kr|d z}�nJ| tjkr"| d kr|j | ¦«�n| tjkr€| d kr6| dkr0||jvp|}|s"|r |j |¦«|}d}d}nÌ| d kr*|r(||jvrd}|r|j |¦«nœ| d vr| d z } n’| dvr| d z} nˆ| tjkr<|tjkr,|j t+| |d z¦«¦«n<| tjkr,|�&||kr t+||d z¦«D] }||j|<Œ d}d}|  ¦«r>| tjkr.d}|€*| }|r||krd}|r|j |¦«d}| }�Œ.|sGt5|j|j¬¦«}|j | ¦«¦«t<jj r%|jr tC|j¦«|jd <dSdSdS)zwParse the source to find the interesting facts about its lines. A handful of attributes are updated. rFNTz>10ú z>5Ú20r<Úclassú:ú@z([{z)]})r)"rrIr-ÚtokenÚINDENTrrr0ÚprintÚtokenizeÚtok_nameÚgetrÚDEDENTÚNAMEr.rCÚOPÚSTRINGr/ÚupdateÚrangeÚNEWLINEr1ÚstripÚCOMMENTÚ ByteParserrr,Ú_find_statementsrÚ PYBEHAVIORÚmodule_firstline_1Úmin)r4ÚindentÚexclude_indentÚ excludingÚexcluding_decoratorsÚ prev_toktypeÚ first_lineÚemptyÚ first_on_lineÚnestingÚtokgenÚtoktypeÚttextÚslinenoÚ_ÚelinenorHÚshould_excludeÚlÚ byte_parsers r6Ú _raw_parsezPythonParser._raw_parseusÊ€ð Œ<ð BØ $× 3Ò 3°D´LÑ AÔ AˆDÔ ðˆØˆØˆ Ø$ÐÝ”|ˆ ؈ ؈؈ ؈àŒyÐ$Ð$Ð$Ý  ¤Ñ+Ô+ˆØAGðB #ñB #Ñ =ˆG�U™L˜W a©,¨7°A¸ØÔð ÝÝÔ%×)Ò)¨'°7Ñ;Ô;Ð;Ð;Ð;ݘw¨Ð0Ñ1Ô1Ð1Ð1Ð1°5°5°5°5¸%¸%ðñôðð�%œ,Ò&Ð&ؘ!‘ �‘Ø�EœLÒ(Ð(ؘ!‘ �‘Ø�EœJÒ&Ð&ؘGÒ#Ð#ðÔ&×*Ò*¨7Ñ3Ô3Ð3ùØ�EœHÒ$Ð$ؘC’<�< G¨q¢L LØ&-°Ô1BÐ&BÐ%[ÐG[�NØ$ð5¨ð5ðÔ)×-Ò-¨gÑ6Ô6Ð6Ø)/˜Ø$(˜ Ø/4Ð,øØ˜c’\�\ m�\à $Ô"3Ð3Ð3Ø/3Ð,Ø+ð7ØÔ)×-Ò-¨gÑ6Ô6Ð6øØ˜e�^�^ؘq‘L�G�Gؘe�^�^ؘq‘L�GøØ�EœLÒ(Ð(¨\½U¼\Ò-IÐ-Ið Ô#×*Ò*­5°¸'À!¹)Ñ+DÔ+DÑEÔEÐEÐEØ�EœMÒ)Ð)ØÐ)¨g¸Ò.CÐ.Cõ# :¨w°q©yÑ9Ô9ð8ð8˜Ø-7˜œ¨Ñ*Ð*Ø!� Ø $� à�{Š{‰}Œ}ð * ­HÔ,<Ò!<Ð!<à�ØÐ%à!(�Jà ð* V¨~Ò%=Ð%=Ø$)˜ Ø ð7ØÔ)×-Ò-¨gÑ6Ô6Ð6Ø$)�Mà"ˆL‰Lðð GÝ$ T¤Y¸¼ÐGÑGÔGˆKØ Ô × &Ò & {×'CÒ'CÑ'EÔ'EÑ FÔ FÐ Fõ Œ>Ô ,ð :°´ð :Ý!$ TÔ%8Ñ!9Ô!9ˆDŒO˜AÑ Ð Ð ð :ð :ð :ð :rJÚlinenorcó†—|dkr|j | | ¦« }n|j ||¦«}|S)zAReturn the first line number of the statement including `lineno`.r)r1rV)r4rxs r6rjzPythonParser.first_lineÜsG€à �AŠ:ˆ:Ø”o×)Ò)¨6¨'°F°7Ñ;Ô;Ð;ˆFˆFà”_×(Ò(¨°Ñ8Ô8ˆF؈ rJÚlinenosúIterable[TLineNo]có ‡—ˆfd„|D¦«S)zŠMap the line numbers in `linenos` to the correct first line of the statement. Returns a set of the first lines. có:•—h|]}‰ |¦«’ŒS©©rj)Ú.0rur4s €r6ú z+PythonParser.first_lines..ës%ø€Ð4Ð4Ð4 q�—’ Ñ"Ô"Ð4Ð4Ð4rJr~)r4rzs` r6Ú first_lineszPythonParser.first_linesäsø€ð5Ð4Ð4Ð4¨GÐ4Ñ4Ô4Ð4rJr(có,—| |¦«S)z)Implement `FileReporter.translate_lines`.)r‚)r4r(s r6Útranslate_lineszPythonParser.translate_linesís€à×Ò Ñ&Ô&Ð&rJÚarcsúIterable[TArc]ú Set[TArc]có ‡—ˆfd„|D¦«S)z(Implement `FileReporter.translate_arcs`.cój•—h|]/\}}‰ |¦«‰ |¦«f’Œ0Sr~r)r€ÚaÚbr4s €r6r�z.PythonParser.translate_arcs..ós:ø€ÐLÐLÐL¹V¸aÀ�—’ Ñ#Ô# T§_¢_°QÑ%7Ô%7Ð8ÐLÐLÐLrJr~)r4r…s` r6Útranslate_arcszPythonParser.translate_arcsñsø€àLÐLÐLÐLÀtÐLÑLÔLÐLrJcóÒ— | ¦«n{#tjttf$r\}t |d¦«r|j}n|jdd}td|j ›d�|jd›d|›�z¦«|‚d}~wwxYw|  |j ¦«|_ |j |j z}|j|z }|  |¦«|z |_dS)zÁParse source text to find executable lines, excluded lines, etc. Sets the .excluded and .statements attributes, normalized to the first line of multi-line statements. rxr<rzCouldn't parse 'z' as Python source: z at line N)rwrTÚ TokenErrorÚIndentationErrorÚ SyntaxErrorÚhasattrrxÚargsrrr‚r-r+r/r,r*)r4r5rxÚignoreÚstartss r6Ú parse_sourcezPythonParser.parse_sourceõs€ð Ø �OŠOÑ Ô Ð Ð øÝÔ#Õ%5µ{ÐCð ð ð Ý�s˜HÑ%Ô%ð (Øœ��àœ !œ Qœ�ÝØF 4¤=ÐFÐFÐFØ”8˜A”;Ð3Ð3¨6Ð3Ð3ñ4ñôðð øøøøð  øøøð×(Ò(¨Ô):Ñ;Ô;ˆŒ à” Ô!4Ñ4ˆØÔ$ vÑ-ˆØ×*Ò*¨6Ñ2Ô2°VÑ;ˆŒˆˆs‚—B³AB  BcóX—|j€| ¦«|j€J‚|jS)zÃGet information about the arcs available in the code. Returns a set of line number pairs. Line numbers have been normalized to the first line of multi-line statements. )r2Ú _analyze_ast©r4s r6r…zPythonParser.arcss4€ð Œ>Ð !Ø × Ò Ñ Ô Ð ØŒ~Ð)Ð)Ð)ØŒ~ÐrJcó^—t|j|j|j¦«}| ¦«t ¦«|_|jD]Q\}}| |¦«}| |¦«}||kr|j  ||f¦«ŒR|j |_ dS)zkRun the AstArcAnalyzer and save its results. `_all_arcs` is the set of arcs in the code. N) ÚAstArcAnalyzerrr,r1Úanalyzer)r2r…rjrCÚmissing_arc_fragmentsr3)r4ÚaaaÚl1Úl2Úfl1Úfl2s r6r—zPythonParser._analyze_asts €õ ˜TœY¨Ô(;¸T¼_ÑMÔMˆØ � Š ‰ Œ ˆ 噜ˆŒØ”hð /ð /‰FˆB�Ø—/’/ "Ñ%Ô%ˆCØ—/’/ "Ñ%Ô%ˆCØ�cŠzˆzØ”×"Ò" C¨ :Ñ.Ô.Ð.øà&)Ô&?ˆÔ#Ð#Ð#rJúDict[TLineNo, int]cóþ—tjt¦«}| ¦«D]0\}}|dkrŒ ||jvrŒ||jvrŒ ||xxdz cc<Œ1|jD]}||vr||xxdzcc<Œ|S)zYGet a count of exits from that each line. Excluded lines are excluded. rr<)Ú collectionsÚ defaultdictÚintr…r+r.)r4Ú exit_countsržrŸrus r6r§zPythonParser.exit_counts,s¯€õ +6Ô*AÅ#Ñ*FÔ*Fˆ Ø—i’i‘k”kð !ð !‰FˆB�Ø�AŠvˆvàØ�T”]Ð"Ð"àØ�T”]Ð"Ð"àØ ˜ˆOˆOŒO˜qÑ ˆOˆO‰OˆOðÔ#ð $ð $ˆAà�KÐÐØ˜A��” !Ñ#��‘øàÐrJr>ÚendÚ executed_arcsúOptional[Iterable[TArc]]có—|j€| ¦«|j€J‚|}|r"|dkr|| kr||f|vr||f|jvr||}}|j ||fdg¦«}g}|D]ˆ\}}|€0|dkr(| |f|jvr| | |¦«cSd}nd}| |¬¦«}d|›d|›�} |�| d | |¬¦«›�z } | | ¦«Œ‰d  |¦«S) z5Provide an English sentence describing a missing arc.Nr©NNz didn't jump to the function exitzdidn't jump to line {lineno}©rxzline rLz , because ú or )r3r—rVÚmissing_arc_descriptionÚformatÚappendÚjoin) r4r>r¨r©Ú actual_startÚfragment_pairsÚmsgsÚsmsgÚemsgÚmsgs r6r¯z$PythonParser.missing_arc_descriptionGst€ð Ô &Ð .Ø × Ò Ñ Ô Ð ØÔ.Ð:Ð:Ð:àˆ ð ð $à �!ŠGˆG˜ ˜vš ˜ Ø �%ˆL  Ð -Ð -Ø �%ˆL˜DÔ7Ð 7Ð 7ð˜e�3ˆEàÔ4×8Ò8¸%À¸È À~ÑVÔVˆàˆØ(ð ð ‰JˆD�$؈|ؘ’7�7à˜˜c�{ dÔ&AÐAÐAØ#×;Ò;¸S¸DÀ#ÑFÔFÐFÐFÐFØ=�D�Dà9�DØ—;’; c�;Ñ*Ô*ˆDà/˜,Ð/Ð/¨Ð/Ð/ˆCØÐØÐF D§K¢K°| KÑ$DÔ$DÐFÐFÑF�à �KŠK˜Ñ Ô Ð Ð à�{Š{˜4Ñ Ô Ð rJ)NNN)rrrrrrr r!)r8r9r r:©r r!)rxrr r)rzr{r r:)r(r{r r:)r…r†r r‡)r r‡)r r¢©N)r>rr¨rr©rªr r9)Ú__name__Ú __module__Ú __qualname__Ú__doc__r7rIrwrjr‚r„rŒr•r…r—r§r¯r~rJr6rrs;€€€€€ððð#Ø"&Ø!%ð >Dð>Dð>Dð>Dð>Dð@ðððð e:ðe:ðe:ðe:ðNðððð5ð5ð5ð5ð'ð'ð'ð'ðMðMðMðMð<ð<ð<ð<ð2 ð ð ð ð@ð@ð@ð@ð$ðððð>37ð +!ð+!ð+!ð+!ð+!ð+!ð+!rJrcó8—eZdZdZ ddd „Zdd „Zdd„Zdd„ZdS)r`z3Parse bytecode to understand the structure of code.Nrr9ÚcodeúOptional[CodeType]rrr r!cóÌ—||_|� ||_dS|€J‚ t||dd¬¦«|_dS#t$r'}t d||j|jpdfz¦«|‚d}~wwxYw)NÚexecT)Ú dont_inheritz5Couldn't parse '%s' as Python source: '%s' at line %dr)rrÀr@r�rr¸rx)r4rrÀrÚsynerrs r6r7zByteParser.__init__xs�€ð ˆŒ Ø Ð ØˆDŒIˆIˆIàÐ'Ð'Ð'ð Ý# D¨(°FÈÐNÑNÔN�” � � øÝð ð ð ÝØKØ  &¤*¨f¬mÐ.@¸qðOññôðð øøøøð øøøs˜2² A#¼"AÁA#úIterable[ByteParser]cóD‡—ˆfd„t‰j¦«D¦«S)z~Iterate over all the code objects nested within this one. The iteration includes `self` as its first value. c3óD•K—|]}t‰j|¬¦«V—ŒdS))rÀN)r`r)r€Úcr4s €r6ú z+ByteParser.child_parsers..’s2øèè€ÐOÐO°!• ˜4œ9¨1Ð-Ñ-Ô-ÐOÐOÐOÐOÐOÐOrJ)rrÀr˜s`r6Ú child_parserszByteParser.child_parsersŒs*ø€ð PÐOÐOÐOµ|ÀDÄIÑ7NÔ7NÐOÑOÔOÐOrJr{c#ó¤K—t|jd¦«r(|j ¦«D] \}}}|r|V—Œ dS|jjddd…}|jjddd…}d}|jj}d}t ||¦«D]9\}} |r||kr|V—|}||z }t jjr | dkr| dz} || z }Œ:||kr|V—dSdS)z·Yield the line numbers possible in this code object. Uses co_lnotab described in Python/compile.c to find the line numbers. Produces a sequence: l0, l1, ... Úco_linesrNér<é€é) r‘rÀrÍÚ co_lnotabÚco_firstlinenoÚziprrbÚnegative_lnotab) r4rrÚlineÚbyte_incrementsÚline_incrementsÚ last_line_numÚline_numÚbyte_numÚ byte_incrÚ line_incrs r6Ú _line_numberszByteParser._line_numbers”s1èè€õ �4”9˜jÑ )Ô )ð Ø"œi×0Ò0Ñ2Ô2ð ð ‘ ��1�dØðØ�J�J�Jøð ð ð #œiÔ1°!°$°Q°$Ô7ˆOØ"œiÔ1°!°$°Q°$Ô7ˆOà ˆMØ”yÔ/ˆH؈HÝ(+¨O¸_Ñ(MÔ(Mð &ð &Ñ$� ˜9Øð*Ø =Ò0Ð0Ø&˜˜˜Ø(0˜ Ø  Ñ)�HÝ”>Ô1ð'°iÀ4Ò6GÐ6GØ Ñ&�IؘIÑ%��ؘ=Ò(Ð(Ø�����ð)Ð(rJc#ólK—| ¦«D]}| ¦«Ed{V—†ŒdS)z´Find the statements in `self.code`. Produce a sequence of line numbers that start statements. Recurses into all code objects reachable from `self.code`. N)rËrÝ)r4Úbps r6razByteParser._find_statements²sTèè€ð×$Ò$Ñ&Ô&ð *ð *ˆBà×'Ò'Ñ)Ô)Ð )Ð )Ð )Ð )Ð )Ð )Ð )Ð )ð *ð *rJr¬)rr9rÀrÁrrr r!)r rÆ)r r{)r»r¼r½r¾r7rËrÝrar~rJr6r`r`us{€€€€€Ø=Ð=ð $(Ø"&ð ððððð(PðPðPðPððððð< *ð *ð *ð *ð *ð *rJr`có&‡—eZdZdZd d ˆfd„ ZˆxZS) ÚArcStarta¸The information needed to start an arc. `lineno` is the line number the arc starts from. `cause` is an English text fragment used as the `startmsg` for AstArcAnalyzer.missing_arc_fragments. It will be used to describe why an arc wasn't executed, so should fit well into a sentence of the form, "Line 17 didn't run because {cause}." The fragment can include "{lineno}" to have `lineno` interpolated into it. NrxrÚcauserr cóJ•—t¦« |||¦«Srº)ÚsuperÚ__new__)ÚclsrxrâÚ __class__s €r6råzArcStart.__new__Îsø€Ý‰wŒw�Š˜s F¨EÑ2Ô2Ð2rJrº)rxrrârr rá)r»r¼r½r¾råÚ __classcell__)rçs@r6ráráÂsLø€€€€€ð ð ð3ð3ð3ð3ð3ð3ð3ð3ð3ð3ð3rJráÚArcz lineno, causecó —eZdZdZ d d d „ZdS)Ú TAddArcFnz&The type for AstArcAnalyzer.add_arc().Nr>rr¨r¶rr·r r!có—dSrºr~©r4r>r¨r¶r·s r6Ú__call__zTAddArcFn.__call__Ôs €ð ˆrJr¬© r>rr¨rr¶rr·rr r!)r»r¼r½r¾rîr~rJr6rërëÒs;€€€€€Ø0Ð0ð #Ø"ð  ð ð ð ð ð ð rJrëcó2—eZdZdZd d„Zd d „Zd d „Zd d „Zd S)ÚBlocka; Blocks need to handle various exiting statements in their own ways. All of these methods take a list of exits, and a callable `add_arc` function that they can use to add arcs if needed. They return True if the exits are handled, or False if the search should continue up the block stack. Úexitsú Set[ArcStart]Úadd_arcrër Úboolcó—t‚)zProcess break exits.©ÚAssertionError©r4ròrôs r6Úprocess_break_exitszBlock.process_break_exitséó €õÐrJcó—t‚)zProcess continue exits.r÷rùs r6Úprocess_continue_exitszBlock.process_continue_exitsïrûrJcó—dS)zProcess raise exits.Fr~rùs r6Úprocess_raise_exitszBlock.process_raise_exitsõó€àˆurJcó—dS)zProcess return exits.Fr~rùs r6Úprocess_return_exitszBlock.process_return_exitsùrrJN©ròrórôrër rõ)r»r¼r½r¾rúrýrÿrr~rJr6rñrñßsn€€€€€ððððððð ðððð ðððððððððrJrñcó*—eZdZdZdd„Zdd „Zdd „ZdS)Ú LoopBlockz@A block on the block stack representing a `for` or `while` loop.r>rr r!có:—||_t¦«|_dSrº)r>r)Ú break_exits©r4r>s r6r7zLoopBlock.__init__s€àˆŒ å*-©%¬%ˆÔÐÐrJròrórôrërõcó:—|j |¦«dS©NT)rr[rùs r6rúzLoopBlock.process_break_exitss€Ø Ô×Ò Ñ&Ô&Ð&؈trJcóH—|D]}||j|j|j¦«ŒdSr )rxr>râ©r4ròrôÚxits r6rýz LoopBlock.process_continue_exits s3€Øð 7ð 7ˆCØ ˆG�C”J ¤ ¨C¬IÑ 6Ô 6Ð 6Ð 6؈trJN©r>rr r!r)r»r¼r½r¾r7rúrýr~rJr6rrþsV€€€€€ØJÐJð0ð0ð0ð0ð ðððððððððrJrcó*—eZdZdZdd„Zdd„Zdd„ZdS)Ú FunctionBlockz>A block on the block stack representing a function definition.r>rÚnamer9r r!có"—||_||_dSrº©r>r)r4r>rs r6r7zFunctionBlock.__init__s€àˆŒ àˆŒ ˆ ˆ rJròrórôrërõcó\—|D](}||j|j |jd|j›�¦«Œ)dS)Nzdidn't except from function T©rxr>rârr s r6rÿz!FunctionBlock.process_raise_exitsóM€Øð ð ˆCØ ˆGØ” ˜TœZ˜K¨¬Ø<¨t¬yÐ<Ð<ñ ô ð ð ðˆtrJcó\—|D](}||j|j |jd|j›�¦«Œ)dS)Nzdidn't return from function Trr s r6rz"FunctionBlock.process_return_exits rrJN)r>rrr9r r!r)r»r¼r½r¾r7rÿrr~rJr6rrsV€€€€€ØHÐHððððð ðððððððððrJrcó:—eZdZdZdd„Zdd „Zdd„Zdd„Zdd„ZdS)ÚTryBlockz6A block on the block stack representing a `try` block.Ú handler_startúOptional[TLineNo]Ú final_startr r!cóº—||_||_t¦«|_t¦«|_t¦«|_t¦«|_dSrº)rrr)Ú break_fromÚ continue_fromÚ raise_fromÚ return_from)r4rrs r6r7zTryBlock.__init__+sH€à*ˆÔà&ˆÔõ*-©¬ˆŒÝ,/©E¬EˆÔÝ),©¬ˆŒÝ*-©%¬%ˆÔÐÐrJròrórôrërõcóL—|j�|j |¦«dSdS©NTF)rrr[rùs r6rúzTryBlock.process_break_exits8s+€Ø Ô Ð 'Ø ŒO× "Ò " 5Ñ )Ô )Ð )Ø�4؈urJcóL—|j�|j |¦«dSdSr#)rrr[rùs r6rýzTryBlock.process_continue_exits>s,€Ø Ô Ð 'Ø Ô × %Ò % eÑ ,Ô ,Ð ,Ø�4؈urJcóž—|j�"|D]}||j|j|j¦«Œn#|j€J‚|j |¦«dSr )rrxrârr r[r s r6rÿzTryBlock.process_raise_exitsDsl€Ø Ô Ð )Øð Cð C�Ø�˜œ  DÔ$6¸¼ ÑBÔBÐBÐBð CðÔ#Ð/Ð/Ð/Ø ŒO× "Ò " 5Ñ )Ô )Ð )؈trJcóL—|j�|j |¦«dSdSr#)rr!r[rùs r6rzTryBlock.process_return_exitsMs,€Ø Ô Ð 'Ø Ô × #Ò # EÑ *Ô *Ð *Ø�4؈urJN)rrrrr r!r) r»r¼r½r¾r7rúrýrÿrr~rJr6rr)s~€€€€€Ø@Ð@ð 0ð 0ð 0ð 0ððððð ðððð ðððððððððrJrcóF—eZdZdZdd„Z ddd„Zdd„Zdd„Zdd„Zdd„Z dS)Ú WithBlockz7A block on the block stack representing a `with` block.r>rr r!có¬—tjjsJ‚||_t ¦«|_t ¦«|_t ¦«|_dSrº)rrbÚexit_through_withr>r)rrr!rs r6r7zWithBlock.__init__VsI€õŒ~Ô/Ð/Ð/Ð/ðˆŒ õ*-©¬ˆŒÝ,/©E¬EˆÔÝ*-©%¬%ˆÔÐÐrJNròrórôrëÚfrom_setúOptional[Set[ArcStart]]rõcóv—|D]}||j|j|j¦«Œ|�| |¦«dS)z*Helper to process the four kinds of exits.NT)rxr>râr[)r4ròrôr+r s r6Ú_process_exitszWithBlock._process_exitsdsM€ðð 7ð 7ˆCØ ˆG�C”J ¤ ¨C¬IÑ 6Ô 6Ð 6Ð 6Ø Ð Ø �OŠO˜EÑ "Ô "Ð "؈trJcó:—| |||j¦«Srº)r.rrùs r6rúzWithBlock.process_break_exitsqs€Ø×"Ò" 5¨'°4´?ÑCÔCÐCrJcó:—| |||j¦«Srº)r.rrùs r6rýz WithBlock.process_continue_exitsts€Ø×"Ò" 5¨'°4Ô3EÑFÔFÐFrJcó.—| ||¦«Srº)r.rùs r6rÿzWithBlock.process_raise_exitsws€Ø×"Ò" 5¨'Ñ2Ô2Ð2rJcó:—| |||j¦«Srº)r.r!rùs r6rzWithBlock.process_return_exitszs€Ø×"Ò" 5¨'°4Ô3CÑDÔDÐDrJrrº)ròrórôrër+r,r rõr) r»r¼r½r¾r7r.rúrýrÿrr~rJr6r(r(Tsª€€€€€ØAÐAð 0ð 0ð 0ð 0ð$-1ð ð ð ð ð ðDðDðDðDðGðGðGðGð3ð3ð3ð3ðEðEðEðEðEðErJr(có—eZdZdZdd„ZdS) ÚNodeListzÁA synthetic fictitious node, containing a sequence of nodes. This is used when collapsing optimized if-statements, to represent the unconditional execution of one of the clauses. ÚbodyúSequence[ast.AST]r r!có8—||_|dj|_dS©Nr)r5rx)r4r5s r6r7zNodeList.__init__…s€ØˆŒ ؘ1”g”nˆŒ ˆ ˆ rJN)r5r6r r!)r»r¼r½r¾r7r~rJr6r4r4~s2€€€€€ððð %ð%ð%ð%ð%ð%rJr4Únounr9r ú)Callable[[AstArcAnalyzer, ast.AST], None]có‡—dˆfd„ }|S) zPA function to make methods for expression-based callable _code_object__ methods.r4ršÚnodeúast.ASTr r!c ó®•—| |¦«}| | |dd‰›d|›�¦«| || dd‰›d|›�¦«dS)Nzdidn't run the z on line zdidn't finish the )Ú line_for_noderô)r4r<r>r9s €r6Ú!_code_object__expression_callablezG_make_expression_code_method.._code_object__expression_callable�srø€Ø×"Ò" 4Ñ(Ô(ˆØ � Š �e�V˜U DÐ*R¸DÐ*RÐ*RÈ5Ð*RÐ*RÑSÔSÐSØ � Š �U˜U˜F DÐ*U¸tÐ*UÐ*UÈeÐ*UÐ*UÑVÔVÐVÐVÐVrJ)r4ršr<r=r r!r~)r9r@s` r6Ú_make_expression_code_methodrA�s/ø€ðWðWðWðWðWðWð -Ð,rJcó—eZdZdZd[d „Zd\d „Z d]d^d„Zd_d„Zd`d„Zdad„Z dbd„Z e Z dcd„Z e Z e Zddd „Zded"„Zhd#£Zdfd%„Z d]dgd,„Zdhd.„Zdid0„Zdjd2„Zdkd4„Zdld5„Zdmd7„Zdmd8„Zdmd9„Zdmd:„Zdnd<„Zdod=„ZeZdpd?„Z dqdA„Z!e!Z"eZ#eZ$drdB„Z%e&j'dCkrdsdE„Z(dtdF„Z)dudH„Z*dvdJ„Z+dwdL„Z,dxdN„Z-dydO„Z.dzdQ„Z/e/Z0d{dR„Z1d|dS„Z2e2Z3d}dU„Z4e5dV¦«Z6e5dW¦«Z7e8j9j:r#e5dX¦«Z;e5dY¦«Z<e5dZ¦«Z=d Sd S)~ršz>Analyze source text with an AST to find executable code paths.rr9r*r:Ú multilineúDict[TLineNo, TLineNo]r r!cóX‡—tj|¦«|_ˆfd„|D¦«|_‰|_t t tj  dd¦«¦«¦«}|rBtd|j›�¦«td|j›�¦«t|j¦«t¦«|_ tjt ¦«|_g|_t t tj  dd¦«¦«¦«|_dS)Ncó<•—h|]}‰ ||¦«’ŒSr~)rV)r€rurCs €r6r�z*AstArcAnalyzer.__init__..¡s'ø€ÐCÐCÐC°1˜9Ÿ=š=¨¨AÑ.Ô.ÐCÐCÐCrJÚCOVERAGE_AST_DUMPrz Statements: zMultiline map: ÚCOVERAGE_TRACK_ARCS)ÚastÚparseÚ root_noder*rCrõr¦ÚosÚenvironrVrSÚast_dumpr)r…r¤r¥ÚlistrœÚ block_stackÚdebug)r4rr*rCÚdump_asts ` r6r7zAstArcAnalyzer.__init__™sÿø€õ œ 4™œˆŒàCÐCÐCÐC¸ ÐCÑCÔCˆŒØ"ˆŒõ��BœJŸNšNÐ+>ÀÑBÔBÑCÔCÑDÔDˆà ð %å Ð2 ¤Ð2Ð2Ñ 3Ô 3Ð 3Ý Ð4 D¤NÐ4Ð4Ñ 5Ô 5Ð 5Ý �T”^Ñ $Ô $Ð $å"™uœuˆŒ õ5@Ô4KÍDÑ4QÔ4QˆÔ"Ø(*ˆÔõ�#�bœjŸnšnÐ-BÀAÑFÔFÑGÔGÑHÔHˆŒ ˆ ˆ rJcó˜—tj|j¦«D]/}|jj}t |d|zd¦«}|� ||¦«Œ0dS)z¨Examine the AST tree from `root_node` to determine possible arcs. This sets the `arcs` attribute to be a set of (from, to) line number pairs. Ú_code_object__N)rIÚwalkrKrçr»Úgetattr)r4r<Ú node_nameÚcode_object_handlers r6r›zAstArcAnalyzer.analyze»sc€õ”H˜Tœ^Ñ,Ô,ð *ð *ˆDØœÔ/ˆIÝ")¨$Ð0@À9Ñ0LÈdÑ"SÔ"SÐ Ø"Ð.Ø#Ð# DÑ)Ô)Ð)øð  *ð *rJNr>rr¨r¶rr·c ó—|jr8td|›d|›d|›d|›�¦«ttd¬¦«¦«|j ||f¦«|€|�&|j||f ||f¦«dSdS)z@Add an arc, including message fragments to use if it is missing.z Adding possible arc: (ú, z): é )ÚlimitN)rQrSrr…rCrœr±rís r6rôzAstArcAnalyzer.add_arcÈs«€ð Œ:ð )Ý ÐP¨UÐPÐP°cÐPÐP¸dÐPÐPÈÐPÐPÑ QÔ QÐ QÝ •+ BÐ'Ñ'Ô'Ñ (Ô (Ð (Ø Œ � Š �u˜c�lÑ#Ô#Ð#à Ð ˜tÐ/Ø Ô &¨¨s |Ô 4× ;Ò ;¸TÀ4¸LÑ IÔ IÐ IÐ IÐ Ið 0Ð/rJúIterable[Block]có*—t|j¦«S)z.Yield the blocks in nearest-to-farthest order.)ÚreversedrPr˜s r6Únearest_blockszAstArcAnalyzer.nearest_blocksØs€å˜Ô(Ñ)Ô)Ð)rJr<r=cóÖ—|jj}tttt jgtft|d|zd¦«¦«}|� ||¦«S|j S)z}What is the right line number to use for this node? This dispatches to _line__Node functions where needed. Ú_line__N) rçr»rr rrIÚASTrrVrx©r4r<rWÚhandlers r6r?zAstArcAnalyzer.line_for_nodeÜse€ð ”NÔ+ˆ ÝÝ •X�sœw˜i­Ð0Ô1Ô 2Ý �D˜) iÑ/°Ñ 6Ô 6ñ ô ˆð Ð Ø�7˜4‘=”=Ð à”;Ð rJúast.FunctionDefcóŠ—|j}tjjstjjr|jr|jdj}|S)zSCompute first line number for things that can be decorated (classes and functions).r)rxrrbÚtrace_decorated_defÚdef_ast_no_decoratorÚdecorator_list)r4r<rxs r6Ú_line_decoratedzAstArcAnalyzer._line_decoratedìsB€à”ˆÝ Œ>Ô -ð 7µ´Ô1Tð 7ØÔ"ð 7ØÔ,¨QÔ/Ô6�؈ rJú ast.Assigncó6—| |j¦«Srº)r?Úvalue©r4r<s r6Ú _line__AssignzAstArcAnalyzer._line__Assignôs€Ø×!Ò! $¤*Ñ-Ô-Ð-rJúast.Dictcó€—|jr1|jd�|jdjS|jdjS|jSr8)ÚkeysrxÚvaluesros r6Ú _line__DictzAstArcAnalyzer._line__Dictùs@€Ø Œ9ð ØŒy˜Œ|Ð'Ø”y ”|Ô*Ð*ð”{ 1”~Ô,Ð,à”;Ð rJúast.Listcó^—|jr | |jd¦«S|jSr8)Úeltsr?rxros r6Ú _line__ListzAstArcAnalyzer._line__Lists.€Ø Œ9ð Ø×%Ò% d¤i°¤lÑ3Ô3Ð 3à”;Ð rJú ast.Modulecóz—tjjrdS|jr | |jd¦«SdS©Nr<r)rrbrcr5r?ros r6Ú _line__ModulezAstArcAnalyzer._line__Module s?€Ý Œ>Ô ,ð Ø�1Ø ŒYð Ø×%Ò% d¤i°¤lÑ3Ô3Ð 3ð�1rJ> ÚExprÚPassÚAssertÚAssignÚDeleteÚGlobalÚImportÚNonlocalÚ AnnAssignÚ AugAssignÚ ImportFromrócór—|jj}tttt jgttft|d|zd¦«¦«}|� ||¦«Stj r||j vrtd|›�¦«‚t| |¦«¦«hS)aÆAdd the arcs for `node`. Return a set of ArcStarts, exits from this node to the next. Because a node represents an entire sub-tree (including its children), the exits from a node can be arbitrarily complex:: if something(1): if other(2): doit(3) else: doit(5) There are two exits from line 1: they start at line 3 and line 5. Ú _handle__Nz*** Unhandled: )rçr»rr rrIrcr rárVrÚTESTINGÚ OK_TO_DEFAULTÚ RuntimeErrorr?rds r6Úadd_arcszAstArcAnalyzer.add_arcss´€ð ”NÔ+ˆ ÝÝ •X�sœw˜i­­X¬Ð6Ô7Ô 8Ý �D˜+¨ Ñ1°4Ñ 8Ô 8ñ ô ˆð Ð Ø�7˜4‘=”=Ð õŒ{ð AØ DÔ$6Ð6Ð6Ý&Ð'?¸Ð'?Ð'?Ñ@Ô@Ð@õ˜T×/Ò/°Ñ5Ô5Ñ6Ô6Ð7Ð 7rJr5r6Ú from_startúOptional[ArcStart]Ú prev_startsr,cóh—|€|€J‚|h}|D]¥}| |¦«}|j ||¦«}||jvr/| |¦«}|€ŒS|}| |¦«}|D]#}| |j||j¦«Œ$| |¦«}Œ¦|S)auAdd arcs for the body of a compound statement. `body` is the body node. `from_start` is a single `ArcStart` that can be the previous line in flow before this body. `prev_starts` is a set of ArcStarts that can be the previous line. Only one of them should be given. Returns a set of ArcStarts, the exits from this body. ) r?rCrVr*Úfind_non_missing_noderôrxrârŽ) r4r5r�r‘Ú body_noderxrjÚmaybe_body_nodeÚ prev_starts r6Ú add_body_arcszAstArcAnalyzer.add_body_arcs=sà€ð Ð ØÐ)Ð)Ð)Ø%˜,ˆKØð 3ð 3ˆIØ×'Ò'¨ Ñ2Ô2ˆFØœ×+Ò+¨F°FÑ;Ô;ˆJØ ¤Ð0Ð0Ø"&×"<Ò"<¸YÑ"GÔ"G�Ø"Ð*ØØ+� Ø×+Ò+¨IÑ6Ô6�Ø)ð Jð J� Ø— ’ ˜ZÔ.°¸ Ô8HÑIÔIÐIÐIØŸ-š-¨ Ñ2Ô2ˆKˆKØÐrJúOptional[ast.AST]cód—| |¦«}|j ||¦«}||jvr|St t t tjgt tjft|d|j j zd¦«¦«}|� ||¦«}nd}|S)aSearch `node` looking for a child that has not been optimized away. This might return the node you started with, or it will work recursively to find a child node in self.statements. Returns a node, or None if none of the node remains. Ú _missing__N) r?rCrVr*rr rrIrcrVrçr»)r4r<rxrjÚ missing_fnÚret_nodes r6r“z$AstArcAnalyzer.find_non_missing_node^s¨€ð×#Ò# DÑ)Ô)ˆØ”^×'Ò'¨°Ñ7Ô7ˆ Ø ˜œÐ (Ð (؈KåÝ •X�sœw˜i­µ#´'Ô):Ð:Ô;Ô <Ý �D˜,¨¬Ô)@Ñ@À$Ñ GÔ Gñ ô ˆ ð Ð !Ø!�z $Ñ'Ô'ˆHˆHàˆH؈rJúast.Ifcó¸—| t|j¦«¦«}|r|S|jr'| t|j¦«¦«SdSrº)r“r4r5Úorelse)r4r<Ú non_missings r6Ú _missing__IfzAstArcAnalyzer._missing__If€s]€ð×0Ò0µ¸$¼)Ñ1DÔ1DÑEÔEˆ Ø ð ØÐ Ø Œ;ð EØ×-Ò-­h°t´{Ñ.CÔ.CÑDÔDÐ D؈trJr4cóΗg}|jD].}| |¦«}|�| |¦«Œ/|sdSt|¦«dkr|dSt |¦«Sr|)r5r“r±Úlenr4)r4r<Únon_missing_childrenÚchildÚ maybe_childs r6Ú_missing__NodeListz!AstArcAnalyzer._missing__NodeList‹s†€ð "ÐØ”Yð 9ð 9ˆEØ×4Ò4°UÑ;Ô;ˆKØÐ&Ø$×+Ò+¨KÑ8Ô8Ð8øð$ð Ø�4Ý Ð#Ñ $Ô $¨Ò )Ð )Ø'¨Ô*Ð *ÝÐ,Ñ-Ô-Ð-rJú ast.WhilecóN—| t|j¦«¦«}|sdStj¦«}|j|_tj¦«|_|j|j_d|j_t|d¦«sJ‚|j|_g|_ |S)NÚTruer5) r“r4r5rIÚWhilerxÚNameÚtestÚidr‘rŸ)r4r<Ú body_nodesÚ new_whiles r6Ú_missing__WhilezAstArcAnalyzer._missing__While›s“€Ø×/Ò/µ¸¼Ñ0CÔ0CÑDÔDˆ Øð Ø�4å”I‘K”Kˆ Ø%Ô,ˆ ÔÝœ™œˆ ŒØ *Ô 1ˆ ŒÔØ"ˆ ŒÔÝ�z 6Ñ*Ô*Ð*Ð*Ð*Ø#œˆ ŒØˆ ÔØÐrJcót—|jj}|dvrdSt|tj¦«r |jdvrdSdS)z Is this a compile-time constant?)ÚConstantÚ NameConstantÚNumrµ)rªÚFalser!Ú __debug__r¬N)rçr»Ú isinstancerIr¬r®)r4r<rWs r6Úis_constant_exprzAstArcAnalyzer.is_constant_exprªsI€à”NÔ+ˆ Ø Ð;Ð ;Ð ;Ø�5Ý ˜�cœhÑ 'Ô 'ð ØŒwÐ@Ð@Ð@Ø�v؈trJròcóp—| ¦«D] }| ||j¦«rdSŒ!dS)z0Add arcs due to jumps from `exits` being breaks.N)r`rúrô©r4ròÚblocks r6rúz"AstArcAnalyzer.process_break_exitsÃóM€à×(Ò(Ñ*Ô*ð ð ˆEØ×(Ò(¨°´ Ñ=Ô=ð Ø��ð ð ð rJcóp—| ¦«D] }| ||j¦«rdSŒ!dS)z3Add arcs due to jumps from `exits` being continues.N)r`rýrôr»s r6rýz%AstArcAnalyzer.process_continue_exitsÉsM€à×(Ò(Ñ*Ô*ð ð ˆEØ×+Ò+¨E°4´<Ñ@Ô@ð Ø��ð ð ð rJcóp—| ¦«D] }| ||j¦«rdSŒ!dS)z0Add arcs due to jumps from `exits` being raises.N)r`rÿrôr»s r6rÿz"AstArcAnalyzer.process_raise_exitsÏr½rJcóp—| ¦«D] }| ||j¦«rdSŒ!dS)z1Add arcs due to jumps from `exits` being returns.N)r`rrôr»s r6rz#AstArcAnalyzer.process_return_exitsÕsM€à×(Ò(Ñ*Ô*ð ð ˆEØ×)Ò)¨%°´Ñ>Ô>ð Ø��ð ð ð rJú ast.Breakcó–—| |¦«}t|d¬¦«}| |h¦«t¦«S)Nz*the break on line {lineno} wasn't executed©râ)r?rárúr))r4r<ÚhereÚ break_starts r6Ú_handle__BreakzAstArcAnalyzer._handle__BreakæsG€Ø×!Ò! $Ñ'Ô'ˆÝ˜tÐ+WÐXÑXÔXˆ Ø × Ò  + Ñ/Ô/Ð/݉uŒuˆ rJcóô—|j}|j}|j}|�rÍtjjstjjrd}|D]7}| |¦«}|�||kr| ||¦«|}Œ8|€J‚tjjr| ||¦«|}tjjr¸t||dd…¦«D]A\}}| | |¦«| |¦«¦«ŒB| | |d¦«|¦«| || |d¦«¦«|j rr| |j d¦«} |j   | | ¦«} t|dz| ¦«D]#} | |jvr| || ¦«| }Œ$|€J‚t|¦«hS)zBAdd arcs for things that can be decorated (classes and functions).Nr<réÿÿÿÿ)rxrjrrbrhrir?rôÚtrace_decorator_line_againrÓr5rCrVr\r*rá) r4r<Ú main_lineÚlastÚdecsÚdec_nodeÚ dec_startÚtopÚbotÚ body_startrxs r6Ú_handle_decoratedz AstArcAnalyzer._handle_decoratedìs €à!œ[ˆ Ø"&¤+ˆØÔ"ˆØ ñ &ÝŒ~Ô1ð µS´^Ô5Xð Ø�Ø ð !ð !�Ø ×.Ò.¨xÑ8Ô8� ØÐ#¨ °TÒ(9Ð(9Ø—L’L  yÑ1Ô1Ð1Ø ��ØÐ#Ð#Ð#ÝŒ~Ô1ð !Ø— ’ ˜T 9Ñ-Ô-Ð-Ø �ÝŒ~Ô8ð FÝ # D¨$¨q¨r¨r¬(Ñ 3Ô 3ðSðS‘H�C˜Ø—L’L ×!3Ò!3°CÑ!8Ô!8¸$×:LÒ:LÈSÑ:QÔ:QÑRÔRÐRÐRØ— ’ ˜T×/Ò/°°Q´Ñ8Ô8¸)ÑDÔDÐDØ— ’ ˜Y¨×(:Ò(:¸4À¼8Ñ(DÔ(DÑEÔEÐEð Œyð &Ø!×/Ò/°´ ¸!´ Ñ=Ô=� Ø!œ^×/Ò/° ¸JÑGÔG� Ý# D¨¡F¨JÑ7Ô7ð&ð&�FØ ¤Ð0Ð0ØŸ š  T¨6Ñ2Ô2Ð2Ø%˜øàÐÐÐݘ‘”ÐÐrJú ast.Continuecó–—| |¦«}t|d¬¦«}| |h¦«t¦«S)Nz-the continue on line {lineno} wasn't executedrÃ)r?rárýr))r4r<rÄÚcontinue_starts r6Ú_handle__Continuez AstArcAnalyzer._handle__ContinuesH€Ø×!Ò! $Ñ'Ô'ˆÝ! $Ð.]Ð^Ñ^Ô^ˆØ ×#Ò# ^Ð$4Ñ5Ô5Ð5݉uŒuˆ rJúast.Forcó<—| |j¦«}|j t |¬¦«¦«t |d¬¦«}| |j|¬¦«}|D]#}| |j ||j ¦«Œ$|j  ¦«}t|t¦«sJ‚|j }t |d¬¦«}|jr"| |j|¬¦«}||z}n| |¦«|S)Nr=z'the loop on line {lineno} never startedrér�z)the loop on line {lineno} didn't complete)r?ÚiterrPr±rrár—r5rôrxrâÚpopr¸rrŸrC)r4r<r>r�ròr Úmy_blockÚ else_exitss r6Ú _handle__ForzAstArcAnalyzer._handle__Fors €Ø×"Ò" 4¤9Ñ-Ô-ˆØ Ô×Ò¥ °Ð 6Ñ 6Ô 6Ñ7Ô7Ð7ݘeÐ+TÐUÑUÔUˆ Ø×"Ò" 4¤9¸Ð"ÑDÔDˆàð 7ð 7ˆCØ �LŠL˜œ U¨C¬IÑ 6Ô 6Ð 6Ð 6ØÔ#×'Ò'Ñ)Ô)ˆÝ˜(¥IÑ.Ô.Ð.Ð.Ð.ØÔ$ˆÝ˜eÐ+VÐWÑWÔWˆ Ø Œ;ð "Ø×+Ò+¨D¬KÀJÐ+ÑOÔOˆJØ �ZÑ ˆEˆEð �IŠI�jÑ !Ô !Ð !؈ rJcóô—| |j¦«}t|d¬¦«}| |j|¬¦«}t|d¬¦«}|| |j|¬¦«z}|S)Nú-the condition on line {lineno} was never truerÃrÙú.the condition on line {lineno} was never false)r?r­rár—r5rŸ)r4r<r>r�ròs r6Ú _handle__IfzAstArcAnalyzer._handle__If2s{€Ø×"Ò" 4¤9Ñ-Ô-ˆÝ˜eÐ+ZÐ[Ñ[Ô[ˆ Ø×"Ò" 4¤9¸Ð"ÑDÔDˆÝ˜eÐ+[Ð\Ñ\Ô\ˆ Ø �×#Ò# D¤K¸JÐ#ÑGÔGÑGˆØˆ rJ)ér[ú ast.Matchcó$—| |¦«}|}t¦«}d}|jD]É}| |j¦«}|j}t |t j¦«r'|jd}t |t j¦«°'t |t j¦«rd}|  ||d¦«t|d¬¦«} ||  |j | ¬¦«z}|}ŒÊ|s|  | ¦«|S)NFrÈTz+the pattern on line {lineno} always matchedz*the pattern on line {lineno} never matchedrÃrÙ)r?r)ÚcasesÚpatternr¸rIÚMatchOrÚpatternsÚMatchAsrôrár—r5rC) r4r<r>Ú last_startròÚ had_wildcardÚcaseÚ case_startrçr�s r6Ú_handle__MatchzAstArcAnalyzer._handle__Match;s€Ø×&Ò& tÑ,Ô,ˆE؈JÝ‘E”EˆEØ ˆLØœ ð (ð (�Ø!×/Ò/°´ Ñ=Ô=� Øœ,�Ý  ­#¬+Ñ6Ô6ð3Ø%Ô.¨rÔ2�Gõ! ­#¬+Ñ6Ô6ð3å˜g¥s¤{Ñ3Ô3ð(Ø#'�LØ— ’ ˜Z¨Ð5bÑcÔcÐcÝ%ØØFðñô� ð˜×+Ò+¨D¬IÀ*Ð+ÑMÔMÑM�Ø'� � Øð &Ø— ’ ˜*Ñ%Ô%Ð%؈LrJcó‚—| |¦«}| |jt|¦«¬¦«}|S)NrÙ)r?r—r5rá©r4r<r>ròs r6Ú_handle__NodeListz AstArcAnalyzer._handle__NodeListRs:€Ø×"Ò" 4Ñ(Ô(ˆØ×"Ò" 4¤9½À%¹¼Ð"ÑIÔIˆØˆ rJú ast.Raisecó–—| |¦«}t|d¬¦«}| |h¦«t¦«S)Nz*the raise on line {lineno} wasn't executedrÃ)r?rárÿr))r4r<rÄÚ raise_starts r6Ú_handle__RaisezAstArcAnalyzer._handle__RaiseWsG€Ø×!Ò! $Ñ'Ô'ˆÝ˜tÐ+WÐXÑXÔXˆ Ø × Ò  + Ñ/Ô/Ð/å‰uŒuˆ rJú ast.Returncó–—| |¦«}t|d¬¦«}| |h¦«t¦«S)Nz+the return on line {lineno} wasn't executedrÃ)r?rárr))r4r<rÄÚ return_starts r6Ú_handle__ReturnzAstArcAnalyzer._handle__Return^sG€Ø×!Ò! $Ñ'Ô'ˆÝ Ð,YÐZÑZÔZˆ Ø ×!Ò! < .Ñ1Ô1Ð1å‰uŒuˆ rJúast.Trycó@—|jr!| |jd¦«}nd}|jr!| |jd¦«}nd}|€|€J‚t||¦«}|j |¦«| |¦«}| |jt|¦«¬¦«}|jr"d|_ |jrt¦«|_ n|j  ¦«t¦«}|jrmd}|jD]c} | | ¦«}|�|  ||¦«|}d} t|| ¬¦«} || | j| ¬¦«z}Œd|jr| |j|¬¦«}||z}|j�rg|j  ¦«||jz|jz|j z|jz} | |j| ¬¦«} |jr–t$jjrU|jD]E}|j}|j |¬¦«}| D]}|  |j||¦«ŒŒF|j}n| |j| ¦«}| |¦«|jr–t$jjrU|jD]E}|j}|j |¬¦«}| D]}|  |j||¦«ŒŒF|j}n| |j| ¦«}| |¦«|j r.| | |j | ¦«¦«|jr–t$jjrU|jD]E}|j}|j |¬¦«}| D]}|  |j||¦«ŒŒF|j}n| |j| ¦«}| |¦«|r| }|S)NrrÙz3the exception caught by line {lineno} didn't happenrÃ)r‘r­)Úhandlersr?Ú finalbodyrrPr±r—r5rárr)r rÛrôrŸrrr!rrbÚfinally_jumps_backrxrâr°Ú_combine_finally_startsrúrýrÿr)r4r<rrÚ try_blockr>ròÚ handler_exitsÚlast_handler_startÚ handler_nodeÚ from_causer�Ú final_fromÚ final_exitsÚ break_linerxrâÚ final_exitÚbreaksÚ continue_lineÚ continuesÚ return_lineÚreturnss r6Ú _handle__TryzAstArcAnalyzer._handle__Tryesº€Ø Œ=ð !Ø ×.Ò.¨t¬}¸QÔ/?Ñ@Ô@ˆMˆMà ˆMà Œ>ð Ø×,Ò,¨T¬^¸AÔ->Ñ?Ô?ˆKˆKàˆKðÐ(¨KÐ,CÐ,CÐCݘ]¨KÑ8Ô8ˆ Ø Ô×Ò  Ñ*Ô*Ð*à×"Ò" 4Ñ(Ô(ˆØ×"Ò" 4¤9½À%¹¼Ð"ÑIÔIˆð Œ>ð #Ø&*ˆIÔ #ØŒ}ð -õ(+¡u¤u� Ô$øà Ô × Ò Ñ "Ô "Ð "å'*¡u¤uˆ à Œ=ð ^Ø48Ð Ø $¤ ð ^ð ^� Ø $× 2Ò 2°<Ñ @Ô @� Ø%Ð1Ø—L’LÐ!3°]ÑCÔCÐCØ%2Ð"ØR� Ý% m¸:ÐFÑFÔF� Ø ×!3Ò!3°LÔ4EÐR\Ð!3Ñ!]Ô!]Ñ]� � à Œ;ð GØ×&Ò& t¤{ÀÐ&ÑFÔFˆEà �Ñˆà Œ>ñ8 $Ø Ô × Ò Ñ "Ô "Ð "àØÔ$ñ%àÔ'ñ(ðÔ$ñ%ðÔ%ñ &ð ð×,Ò,¨T¬^ÈÐ,ÑTÔTˆKàÔ#ð 1Ý”>Ô4ð]Ø&/Ô&:ðKðK˜ Ø!+Ô!2˜Ø *Ô 0× 7Ò 7¸vÐ 7Ñ FÔ F˜Ø*5ðKðK˜JØ ŸLšL¨Ô):¸FÀEÑJÔJÐJÐJðKà&Ô1�F�Fà!×9Ò9¸)Ô:NÐP[Ñ\Ô\�FØ×(Ò(¨Ñ0Ô0Ð0àÔ&ð 7Ý”>Ô4ðcØ)2Ô)@ðKðK˜ Ø!.Ô!5˜Ø -Ô 3× :Ò :À&Ð :Ñ IÔ I˜Ø*5ðKðK˜JØ ŸLšL¨Ô):¸FÀEÑJÔJÐJÐJðKà )Ô 7�I�Ià $× <Ò <¸YÔ=TÐVaÑ bÔ b�IØ×+Ò+¨IÑ6Ô6Ð6àÔ#ð Ø×(Ò(Ø×0Ò0°Ô1EÀ{ÑSÔSñôððÔ$ð 3Ý”>Ô4ð_Ø'0Ô'<ðKðK˜ Ø!,Ô!3˜Ø +Ô 1× 8Ò 8ÀÐ 8Ñ GÔ G˜Ø*5ðKðK˜JØ ŸLšL¨Ô):¸FÀEÑJÔJÐJÐJðKà'Ô3�G�Gà"×:Ò:¸9Ô;PÐR]Ñ^Ô^�GØ×)Ò)¨'Ñ2Ô2Ð2àð $ð$�àˆ rJr”cóꇗg}t|¦«D]<}|j�3| |j |j¬¦«¦«Œ=d |¦«Šˆfd„|D¦«}|S)aHelper for building the cause of `finally` branches. "finally" clauses might not execute their exits, and the causes could be due to a failure to execute any of the exits in the try block. So we use the causes from `starts` as the causes for `exits`. Nr­r®có:•—h|]}t|j‰¦«’ŒSr~)rárx)r€r râs €r6r�z9AstArcAnalyzer._combine_finally_starts..às%ø€Ð>Ð>Ð>°•˜#œ* eÑ,Ô,Ð>Ð>Ð>rJ)Úsortedrâr±r°rxr²)r4r”ròÚcausesr>râs @r6rz&AstArcAnalyzer._combine_finally_startsÔs€ø€ðˆÝ˜F‘^”^ð Gð GˆEØŒ{Ð&Ø— ’ ˜eœk×0Ò0¸¼ Ð0ÑEÔEÑFÔFÐFøØ— ’ ˜FÑ#Ô#ˆØ>Ð>Ð>Ð>¸Ð>Ñ>Ô>ˆØˆ rJcó0—| |j¦«x}}| |j¦«}d}|rd}tjjrd}|r | |jd¦«}|j t|¬¦«¦«t|d¬¦«}|  |j|¬¦«}|D]#}|  |j ||j¦«Œ$t¦«}|j ¦«} t#| t¦«sJ‚| | j¦«t|d¬¦«}|jr"|  |j|¬¦«} || z}n|s| |¦«|S) NFTrr=ràrÃrÙrá)r?r­r¹rrbÚkeep_constant_testr5rPr±rrár—rôrxrâr)rÛr¸r[rrŸrC) r4r<r>Úto_topÚ constant_testÚ top_is_body0r�ròr rÜrÝs r6Ú_handle__WhilezAstArcAnalyzer._handle__Whileãs�€Ø×+Ò+¨D¬IÑ6Ô6Ð6ˆ�Ø×-Ò-¨d¬iÑ8Ô8ˆ ؈ Ø ð ØˆLÝ Œ>Ô ,ð !Ø ˆLØ ð 6Ø×'Ò'¨¬ °!¬ Ñ5Ô5ˆFØ Ô×Ò¥ °Ð 7Ñ 7Ô 7Ñ8Ô8Ð8ݘeÐ+ZÐ[Ñ[Ô[ˆ Ø×"Ò" 4¤9¸Ð"ÑDÔDˆØð 8ð 8ˆCØ �LŠL˜œ V¨S¬YÑ 7Ô 7Ð 7Ð 7Ý‘”ˆØÔ#×'Ò'Ñ)Ô)ˆÝ˜(¥IÑ.Ô.Ð.Ð.Ð.Ø � Š �XÔ)Ñ*Ô*Ð*ݘeÐ+[Ð\Ñ\Ô\ˆ Ø Œ;ð &Ø×+Ò+¨D¬KÀJÐ+ÑOÔOˆJØ �ZÑ ˆEˆEð!ð &Ø— ’ ˜*Ñ%Ô%Ð%؈ rJúast.Withcó—| |¦«}tjjr(|j t |¬¦«¦«| |jt|¦«¬¦«}tjj�r|j  ¦«}t|t ¦«sJ‚t|¦«h}|r"|D]}|  |j |¦«Œ|}|jr.| | |j|¦«¦«|jr.| | |j|¦«¦«|jr.| | |j|¦«¦«|S)Nr=rÙ)r?rrbr*rPr±r(r—r5rárÛr¸rôrxrrúrrrýr!r)r4r<r>ròÚ with_blockÚ with_exitr s r6Ú _handle__WithzAstArcAnalyzer._handle__Withs”€Ø×"Ò" 4Ñ(Ô(ˆÝ Œ>Ô +ð <Ø Ô × #Ò #¥I°EÐ$:Ñ$:Ô$:Ñ ;Ô ;Ð ;Ø×"Ò" 4¤9½À%¹¼Ð"ÑIÔIˆÝ Œ>Ô +ñ ØÔ)×-Ò-Ñ/Ô/ˆJݘj­)Ñ4Ô4Ð 4Ð 4Ð4Ý! %™œÐ)ˆIØð "Ø ð4ð4�CØ—L’L ¤¨UÑ3Ô3Ð3Ð3Ø!�ØÔ$ð Ø×(Ò(Ø×0Ò0°Ô1FÈ ÑRÔRñôððÔ'ð Ø×+Ò+Ø×0Ò0°Ô1IÈ9ÑUÔUñôððÔ%ð Ø×)Ò)Ø×0Ò0°Ô1GÈÑSÔSñôððˆ rJcóB—| |¦«}|jrT| |jt| ¦«¬¦«}|D]%}| |j| |jd¦«Œ&dS| | |¦«| || ¦«dS)NrÙzdidn't exit the module)r?r5r—rárôrxrâ©r4r<r>ròr s r6Ú_code_object__Modulez#AstArcAnalyzer._code_object__Module"s¶€Ø×"Ò" 4Ñ(Ô(ˆØ Œ9ð (Ø×&Ò& t¤y½XÀuÀfÑ=MÔ=MÐ&ÑNÔNˆEØð Vð V�Ø— ’ ˜SœZ¨%¨°´а´Ð>Ð>ñ ô ð ð ð ð rJÚlambdazgenerator expressionzdictionary comprehensionzset comprehensionzlist comprehension)rr9r*r:rCrDr r!r¹r¬rï)r r])r<r=r r)r<rfr r)r<rlr r)r<rqr r)r<rvr r)r<rzr r)r<r=r ró)r5r6r�r�r‘r,r ró)r<r=r r˜)r<r�r r˜)r<r4r r˜)r<r¨r r˜)r<r=r r)ròrór r!)r<rÁr ró)r<rfr ró)r<rÓr ró)r<r×r ró)r<r�r ró)r<rär ró)r<r4r ró)r<rór ró)r<r÷r ró)r<rûr ró)r”róròrór ró)r<r¨r ró)r<rr ró)r<rzr r!)r<rfr r!)r<r$r r!)>r»r¼r½r¾r7r›rôr`r?rkrpÚ_line__ClassDefruÚ_line__FunctionDefÚ_line__AsyncFunctionDefryr}rŒrŽr—r“r¡r§r±r¹rúrýrÿrrÆrÒÚ_handle__ClassDefrÖrÞÚ_handle__AsyncForÚ_handle__FunctionDefÚ_handle__AsyncFunctionDefrâÚsysÚ version_inforïròrörúrrrrÚ_handle__AsyncWithr!r#Ú_code_object__AsyncFunctionDefr&rAÚ_code_object__LambdaÚ_code_object__GeneratorExprrbÚcomprehensions_are_functionsÚ_code_object__DictCompÚ_code_object__SetCompÚ_code_object__ListCompr~rJr6ršrš–sþ€€€€€ØHÐHð Ið Ið Ið IðD *ð *ð *ð *ð"#Ø"ð JðJðJðJðJð *ð*ð*ð*ððððð ðððð.ð.ð.ð.ð&€Oð ð ð ð ð)ÐØ-Ðððððð ðððððð€Mð 8ð8ð8ð8ðH*.Ø/3ð ðððððBððððD ð ð ð ð.ð.ð.ð.ð ð ð ð ððððð2ðððð ðððð ðððð ðððð"ðððð # ð# ð# ð# ðJ*Ðððððð ðððð(%Ðà,ÐØ 1Ðððððð Ô˜7Ò"Ð"ð ð ð ð ð.ðððð ððððððððmðmðmðmð^ ð ð ð ððððð:ðððð6'Ðð (ð (ð (ð (ððððð&?Ð"ððððð8Ð7¸ÑAÔAÐØ!=Ð!=Ð>TÑ!UÔ!UÐØ „~Ô2ðTØ!=Ð!=Ð>XÑ!YÔ!YÐØ <Ð <Ð=PÑ QÔ QÐØ!=Ð!=Ð>RÑ!SÔ!SÐÐÐðTðTrJršÚctxrnrrõcó¢—|dgdit¦«t¦«tfvp't|tt t tf¦«S)z:Is `value` simple enough to be displayed on a single line?Nr~)r)Ú frozensetÚEllipsisr¸Úbytesr¦Úfloatr9)rns r6Ú_is_simple_valuer?LsC€ð �$˜˜B ¥C¡E¤E­9©;¬;½ÐAÐAð 4Ý�5�5¥#¥u­cÐ2Ñ3Ô3ðrJr<r=Údepthr¦rSúCallable[[str], None]r!cóÖ—d|z}t|dd¦«}|�bd|j›d|j›�}t|d¦«r?t|d¦«sJ‚|dz }|j|jkr ||j›d�z }||j›z }nd }|›d |jj›|›�}d „tj |¦«D¦«}|s||›d �¦«dSt|¦«d krzast_dump..ks6€ðððá ˆD�%Ø Õ'Ð 'Ð 'ð ˆuˆ à 'Ð 'Ð 'rJú>r<rz: z {}# mro: {}rZc3ó$K—|] }|jV—Œ dSrº)r»)r€rÉs r6rÊzast_dump..ys$èè€Ð!QÐ!Q° !¤*Ð!QÐ!QÐ!QÐ!QÐ!QÐ!QrJz z [é)rSú])rVrxÚ col_offsetr‘rDrErçr»rIÚ iter_fieldsr£r?r°r²Ú__mro__r¸rOrN) r<r@rSrerxÚlinemarkÚheadÚ named_fieldsÚ field_namernÚ next_indentÚprefixÚns r6rNrNSsÕ€ð�5‰[€FÝ �T˜8 TÑ *Ô *€FØ ÐØ8˜œÐ8Ð8 t¤Ð8Ð8ˆÝ �4˜Ñ &Ô &ð 1ݘ4Ð!1Ñ2Ô2Ð 2Ð 2Ð2Ø ˜‰OˆHØŒ $¤+Ò-Ð-ؘtœÐ1Ð1Ð1Ñ1�Ø ˜4Ô.Ð0Ñ 0ˆHøàˆØÐ :Ð :�t”~Ô.Ð :°Ð :Ð :€Dððåœ?¨4Ñ0Ô0ðñô€Lð ðØ ˆ�ˆjˆjˆjÑÔÐÐÐÝ ˆ\Ñ Ô ˜aÒ Ð Õ$4°\À!´_ÀQÔ5GÑ$HÔ$HÐ Ø(¨œOш �EØ ˆ�Ð0Ð0˜ Ð0Ð0 eÐ0Ð0Ð0Ñ1Ô1Ð1Ð1Ð1à ˆˆd‰ Œ ˆ ð ð˜v‘oˆ Ø!-ð 8ð 8Ñ ˆJ˜Ø#Ð2 ZÐ2Ð2Ð2ˆFÝ Ñ&Ô&ð 8Ø�˜Ð+Ð+ %Ð+Ð+Ñ,Ô,Ð,Ð,ݘE¥4Ñ(Ô(ð 8Ø�˜�m�m�mÑ$Ô$Ð$Øð<ð<�AÝ'¨Ñ*Ô*ð<ؘ Ð7Ð7°!Ð7Ð7Ñ8Ô8Ð8Ð8å   E¨A¡I°UÐ;Ñ;Ô;Ð;Ð;Ø�˜Ð'Ð'Ð'Ñ(Ô(Ð(Ð(à��f‘ ” � ݘ ¨¡ °Ð7Ñ7Ô7Ð7Ð7à ˆ�ˆlˆlˆlÑÔÐÐÐrJ)r9r9r r:)rnrr rõ)r<r=r@r¦rSrAr r!)=r¾Ú __future__rrIr¤rLr?r/rQrTÚtypesrÚtypingrrrrr r r r r rÚcoveragerÚcoverage.bytecoderÚcoverage.debugrÚcoverage.exceptionsrrÚ coverage.miscrrÚcoverage.phystokensrÚcoverage.typesrrrrr`Ú namedtuplerárër9Ú TArcFragmentsrñrrrr(rcr4rAršrIr?rSrNr~rJr6úres ðð$Ð#à"Ð"Ð"Ð"Ð"Ð"à € € € ØÐÐÐØ € € € Ø € € € Ø € € € Ø € € € Ø€€€àÐÐÐÐÐðððððððððððððððððððððððððÐÐÐÐÐØ*Ð*Ð*Ð*Ð*Ð*Ø&Ð&Ð&Ð&Ð&Ð&Ø3Ð3Ð3Ð3Ð3Ð3Ð3Ð3Ø/Ð/Ð/Ð/Ð/Ð/Ð/Ð/Ø/Ð/Ð/Ð/Ð/Ð/Ø2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2Ð2ðT!ðT!ðT!ðT!ðT!ñT!ôT!ðT!ðn F*ðF*ðF*ðF*ðF*ñF*ôF*ðF*ðZ 3ð 3ð 3ð 3ð 3Ð%ˆ{Ô% e¨_Ñ=Ô=ñ 3ô 3ð 3ð  ð  ð  ð  ð  �ñ  ô  ð  ð�T˜4  h¨s¤m°X¸c´]Ð&BÔ CÔDÐDÔE€ ðððððñôðð>ðððð�ñôðð$ðððð�Eñôðð2(ð(ð(ð(ð(ˆuñ(ô(ð(ðV'Eð'Eð'Eð'Eð'E�ñ'Eô'Eð'EðT %ð %ð %ð %ð %ˆsŒwñ %ô %ð %ð-ð-ð-ð-ðo Tðo Tðo Tðo Tðo Tño Tôo Tðo Tðh�7ÐðððððØ#(ð9ð9ð9ð9ð9ð9ð9rJ