'L i\ddlmZddlZddlmZddlmZddlmZddlZddl Z ddl Z ddl Z ddl m Z ddlZGddZdd Zddd Zdd Zdd Z d dd Zy)) annotationsN) bisect_right)Iterable)Iterator)overloadceZdZdZdddZddZdZeddZeddZddZddZ dd Z dd Z ddd Z dd Z dd ZddZddZy)SourcezvAn immutable object holding a source code fragment. When using Source(...), the source lines are deindented. Nc|sg|_g|_yt|tr#|j|_|j|_yt|tt zr/t d|D|_t d|D|_yt|tr6t |jd|_|jd|_y t|}tj|}t |jd|_|jd|_y#t$rtj|}YVwxYw)Nc3>K|]}|jdyw Nrstrip.0xs Z/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/_pytest/_code/source.py z"Source.__init__..!>Q!((4.!>c3>K|]}|jdywr rrs rrz"Source.__init__..rrr ) lines raw_lines isinstancer tuplelistdeindentstrsplit getrawcodeinspect getsource TypeError)selfobjrawcodesrcs r__init__zSource.__init__s$&DJ(*DN V $DJ ]]DN UT\ *!!>#!>>DJ!!>#!>>DN S !!#))D/2DJ YYt_DN -$S/''0"#))D/2DJ YYt_DN -'', -s D((E E c`t|tstS|j|jk(SN)rr NotImplementedr)r$others r__eq__z Source.__eq__,s%%(! !zzU[[((cyr*r$keys r __getitem__zSource.__getitem__4s,/r.cyr*r0r1s rr3zSource.__getitem__7s14r.c*t|tr|j|S|jdvr t dt }|j|j |j|_|j|j |j|_|S)N)Nz!cannot slice a Source with a step) rintrstep IndexErrorr startstopr)r$r2 newsources rr3zSource.__getitem__:st c3 ::c? "xxy( !DEEI"jjSXX>IO"&..SXX"FI  r.c,t|jSr*)iterrr$s r__iter__zSource.__iter__EsDJJr.c,t|jSr*)lenrr?s r__len__zSource.__len__Hs4::r.cdt|}}||krE|j|js(|dz }||kr|j|js(||kDrK|j|dz js+|dz}||kDr!|j|dz js+t}|j|_|j|||jdd|S)zGReturn new Source object with trailing and leading blank lines removed.rr6N)rBrstripr r)r$r:endsources rrEz Source.stripKsD sck$**U"3"9"9"; QJEck$**U"3"9"9";Ek$**S1W"5";";"= 1HCEk$**S1W"5";";"=>>**U3/ Q r.ct}|j|_|jDcgc]}||z c}|_|Scc}w)z^Return a copy of the source object with all lines indented by the given indent-string.)r rr)r$indentr<lines rrIz Source.indentWs=H "nn 7;zzBtFTMB Cs Ac4|j|\}}|||S)zUReturn Source statement which contains the given linenumber (counted from 0).)getstatementrange)r$linenor:rFs r getstatementzSource.getstatement_s$++F3 sE#r.cd|cxkrt|kstdtdt||\}}}||fS)zmReturn (start, end) tuple which spans the minimal statement region which containing the given lineno.rzlineno out of range)rBr9getstatementrange_ast)r$rM_astr:rFs rrLzSource.getstatementrangeesOV'c$i'23 3(23 30>eSczr.ct}t|j|jdd|j|_|S)z&Return a new Source object deindented.N)r rrr)r$r<s rrzSource.deindentms2H %djj1 "nn r.c8dj|jSNr )joinrr?s r__str__zSource.__str__tsyy$$r.r*)r%objectreturnNone)r,rWrXbool)r2r7rXr)r2slicerXr )r2z int | slicerXz str | Source)rXz Iterator[str])rXr7)rXr )z )rIrrXr )rMr7rXr )rMr7rXztuple[int, int])rXr)__name__ __module__ __qualname____doc__r(r-__hash__rr3r@rCrErIrNrLrrVr0r.rr r sa -,) H // 44    %r.r c tj|\}}t}|Dcgc]}|j c}|_||_||fS#t$rYywxYwcc}w)N)N)r! findsource Exceptionr rrr)r% sourcelinesrMrGrJs rrcrc}sg%005 VXF.9:dDKKM:FL"F 6> ;sAA! AAc |jS#t$rYnwxYw|r,t|dd}|rt|ts t |dSt d|)z&Return code object for given function.__call__NF)trycallzcould not get code object for )__code__AttributeErrorgetattrrtyper r#)r%rhcalls rr r s` ||    sJ-  3-dE2 2 4SG< ==s  cftjdj|jSrT)textwrapdedentrU splitlines)rs rrrs# ??499U+ , 7 7 99r.cg}tj|D]}t|tjtjzs/t|tj tj ztjzr/|jD] }|j|jdz "|j|jdz dD]6}t||d}|s|j|djdz dz 8|jt||}||dz }|t|k\rd} || fS||} || fS)Nr6) finalbodyorelser)astwalkrstmt ExceptHandlerClassDef FunctionDefAsyncFunctionDefdecorator_listappendrMrksortrrB) rMnodevaluesrdnameval insert_indexr:rFs rget_statement_startend2rs/F XXd^ 9 aC$5$55 6!S\\COO;c>R>RRS))0AMM!((Q,/0 MM!((Q, '/ 9-4Qd-CMM#a&--!"3a"78  9 9 KKM/L .s :Qq4x :sctSr*)next)itsrz'getstatementrange_ast..s Rr.#)rwarningscatch_warnings simplefilterruparserrBrr! BlockFinderrZisspacestartedtokenizegenerate_tokens tokeneater EndOfBlockIndentationErrorlastrdlstrip startswith) rMrG assertionastnodecontentr:rF block_findertokrJrs @rrPrPs f+ $ $ & ;  ! !( +ii6:G ;)9JE3  {&,, UQY**,  e$ % J&,,u*=a*@*H*H*J ;&,,uS"9 : //0@A .' ''- . ||C!G$++- ??3 t 1HC   E3 I ; ;0""$45 ,##e+C   s#-E!0,E.!E+.(F#F#"F#)rXztuple[Source | None, int])T)r%rWrhrZrXztypes.CodeType)rz Iterable[str]rXz list[str])rMr7rzast.ASTrXztuple[int, int | None])FN) rMr7rGr rrZrzast.AST | NonerXztuple[ast.AST, int, int]) __future__rrubisectrcollections.abcrrr!rortypestypingrrr rcr rrrPr0r.rrs" $$ e%e%Z >::" . . .. .  .r.