ZL iB|~UdZddlZddlmZddlmZmZmZmZm Z m Z ejdk\rddlm Z nddl m Z ddlmZddlmZdd lmZmZdd lmZmZdd lmZdd lmZdd lmZmZmZm Z ejBeejDZ#ee$d<e dZ%e eefZ&e'Z(e'Z)ejTejVejXhZ-ee$d<e#j\e#j^e#j`e#jbe#jde#jfe#jhe#jje#jle#jnh Z8ee$d<dZ9ee$d<dejte9<ddhZ;ee$d<ejxejzej|ej~ejejhZBee$d<ejejejejejejejejejejejejejejhZQee$d<ejejhZRee$d<eRejhzZSee$d<e#je#je#je#je#jhZYee$d<e#je#je#je#je#je#je#jhZaee$d<e#je#je#je#je#je#je#je#je#je#je#je#je#je#je#je#jhZqee$d<e#je#jhZtee$d<hdZuee$d <e#je#je#jhZxee$d!<ejejejejejejiZee$d"<eejZee$d#<eejZee$d$<eezZee$d%<eej e9ejejejejejhzZee$d&<d'Zed()Gd*d+ee%Zd,ed-ed.ed/efd0Zd}d1e'd2ed3ed/efd4Zd5ee&d/eefd6Zd5ee&d7eee)d/efd8Zd5ee&d/ee)fd9Zd:ed;e&d/ee&fd<Zd=e&d>e&d/dfd?Zd,ed/e&fd@Zd5e&d/eefdAZd5e&d/efdBZd5ed/efdCZd5e&d/efdDZd5e&d/efdEZd5e&d/efdFZd5e&d/efdGZd5e&d/efdHZd5e&d/efdIZejejffdJedKedLeedMee'e'fd/ef dNZd5e&d/efdOZd~d5e&dPed/efdQZd5e&d/efdRZd5e&d/efdSZd,edTee)d/efdUZd5ed/efdVZd5ed/efdWZd5e&d/efdXZd5ed/efdYZd5ed/efdZZd5ed/efd[Zd5e&d/efd\Zd5e&d/efd]Zd,ed/efd^Zd,ed/efd_Zd,ed/efd`Zd,ed/efdaZd,ed/efdbZd,ed/efdcZd,ed.ed/efddZdeed.ed/efdfZd,ed.ed/efdgZdeed.ed/efdhZd(didjedke&dled/dfdmZd5e&d/ee&fdnZd,ed/dfdoZdped/e efdqZdped/e efdrZdped/e efdsZdped/e efdtZd,ed/edufdvZd,ed/efdwZd5e&d/eefdxZd5e&d/eefdyZd,ed/e&fdzZd5e&d{e'd/efd|Zy)z> blib2to3 Node/Leaf transformation-related utility functions. N)Iterator)FinalGenericLiteralOptionalTypeVarUnion) ) TypeGuard) mypyc_attr) CACHE_DIR)ModePreview)get_string_prefixhas_triple_quotes)pygram)token)NLLeafNode type_reprsymsT WHITESPACE STATEMENTSTANDALONE_COMMENTandorLOGIC_OPERATORS COMPARATORSMATH_OPERATORSSTARSVARARGS_SPECIALSVARARGS_PARENTSUNPACKING_PARENTSTEST_DESCENDANTS TYPED_NAMES>%=&=*=+=-=/=@=^=|=**=//=<<=>>=:= ASSIGNMENTSIMPLICIT_TUPLEBRACKETOPENING_BRACKETSCLOSING_BRACKETSBRACKETSALWAYS_NO_SPACE7T)allow_interpreted_subclassesc<eZdZdZdedeefdZdedeefdZy)VisitorzBBasic lib2to3 visitor that yields things of type `T` on `visit()`.nodereturnc#"K|jdkrtj|j}ntt |j}t |d|d}|r||Ed{y|j |Ed{y77w)azMain method to visit `node` and its children. It tries to find a `visit_*()` method for the given `node.type`, like `visit_simple_stmt` for Node objects or `visit_INDENT` for Leaf objects. If no dedicated `visit_*()` method is found, chooses `visit_default()` instead. Then yields objects of type `T` from the selected visitor. visit_N)typertok_namestrrgetattr visit_default)selfrDnamevisitfs Q/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/black/nodes.pyvisitz Visitor.visits{ 99s?>>$)),Dy+,D v5 d| # #))$/ / / $ /s$A)B+B ,BB B Bc#Kt|tr+|jD]}|j|Ed{yy7w)zCDefault `visit_*()` implementation. Recurses to children of `node`.N) isinstancerchildrenrR)rNrDchilds rQrMzVisitor.visit_defaults= dD ! -::e,,, - ",s4A? AN) __name__ __module__ __qualname____doc__LNrrrRrMrQrCrCs3L0"0!00-"-!-r]rCleafcomplex_subscriptmoderEcd}d}d}|j}|j}|j}|tvr|S|tj k(r|S| Jd||tj k(r=|jtjtjtjhvr|S|tjk(r.|jtjtjfvr|S|j} | st|} | r| jt vr|S|tj k(rB| jtj k(r|S| jtj"k7r|s|S|S| jtj$k(r| jrY| jjtj&tj(tj*tj,hvr|S| jjtj.k(r| j0S| jtj2k(rSt5| tj6k(r7t5| jtjtj8fvr|S| jt:vrt=| t>t@zr4|S| jtj k(rI| jr| jjtjtjhvr|r|S|S| jr;| jjtjBk(r| jtDvr|S| jtjFk(rh|jr\|jjtjHk(r5|S| jt vr|S| jtjJk(r|S|jtj*tj&hvr#| r| jtj"k7r|S|S|jtj,k(r#| r| jtj"k7r|S|S|jtj.k(ru| s|S|tj$k(r| jtLvrJ|S| jtj$k(r | j0S| jtj"k7r|S|S|jtLvr0| s,t|} | r| jtj"k7r|S|S|jtjNk(rs|tjPk(s|tjRk(r|S| s(|tjTk(s|tjVk(r!|S| jtj"k7r|S|S|jtj(k(rk|tj$k(r|S| s,t|} | r| jtjPk(r(|S| jtj$ht:zvr|S|S|jtjHk(r|S|jtjXk(rO| r|St|} | r:| jtjFk(s| jtjTk(r|S|S|jtjZk(r8|tjPk(r|S| r| jtjPk(r|S|S|jtjtjhvrx| s>|jJd|jjtjk(r|S|S|tj\k(s| jtj\k(r|S|s|S|S|jtj^k(r| r|tjTk(r|S|S|jtj`k(r#| r| jtjbk(r|S|S|jtjBtj6hvr| st|} | r| jt vr|S| j} | J| jtj k(r.| jtjtjhvr|S| jtj$k(rR| jtj(k(r5|S|tjdtjftjhhvr|S|S|jtjjk(rq|tjTk(r!| rZ| jtjTk(r=|S|tjdk(r(|dk(r|S| r| jtjTk(r|S|S|jtjk(r|S|jtjlk(r|tj2k(r|S|S)zReturn whitespace prefix if needed for the given `leaf`. `complex_subscript` signals whether the given leaf is part of a subscription which has non-trivial arguments, like arithmetic expressions or function calls.  z z/INTERNAL ERROR: hand-made leaf without parent: )withinzsubscripts are always parentedimport)7rIparentvaluer?rCOMMENTCOLONr subscript subscriptlistsliceopLBRACEfstring_replacement_fieldtstring_replacement_field prev_siblingpreceding_leafr<COMMAEQUALarglistargument parameters varargslist typedargslistprefixSTAR parent_type star_expr tname_starr% is_varargr&r'factorr#AT decoratorBANGr)trailerLPARRPARDOTLSQB dotted_nameclassdef COLONEQUALatom dictsetmaker DOUBLESTARNAMENUMBERSTRING import_from except_clause) r^r_r`NOSPACE DOUBLESPACEtpvprevprevp prevp_parents rQ whitespacers BE"K A A AO EMM =TKD8TT=EKKAFF   +  ELLQVV && &&(   D q! &66I  zzU[[( u{{*3D L :: $||<<$$LLMMOO$$ ) I\\&&$*<*<<!<<' JJ%** $E"dnn4ELL)d.@.@$//-RRI ZZ+ +9J'JK ZZ5;; &|| 1 1dnndll5S S 1u9r9 LL !!T[[0 n,I ZZ588 #QXX]]dnn5TI & & ejj  vv$//4<<00tyyEKK/IX LU 4## # DII,IN LK 4%% %I  yy + YY%++ %;;  YY%++ %Il Li ; "1%EEJJ%++5 ^ L[ 4<<   ?a5::oIEII~ejj YY%++ %IF LC 4==  I"1%EEJJ%**4 YY5;;-*:: :Il Li 4>> ! 4## # Iq! ehh.%** 2IIT LQ 4==  ?I DII+IF LC DNNDLL1 188' I)I I'xx}} 2 22 I %"" "dii53C3C&CL"Ih Le 499  ANI^ L[ 4$$ $ DII!1!11IT LQ DKK0 0"1%EEJJ*::  <-> C. u{{*|/@/@DMM/Q 5::u||U\\: :I* L' 4## #  > UYY. %**_H}  UYY.  L 4<<  4%% %  ?I Lr]nl_count form_feed empty_linec,|r||dz zdz|zS||zS)z$Generate a normalized prefix string. r\)rrrs rQmake_simple_prefixrs)hl+t3j@@   r]rDc|rL|j}|r/t|tr|S t|j dS|j }|rLy#t $rYywxYw)z3Return the first leaf that precedes `node`, if any.N)rprTrlistleaves IndexErrorrf)rDress rQrqrqsf  #t$  CJJL)"-- {{     sA AAtokenscx|sy|d|duS|sy|j|dk7ryt|j|ddS)a;Return if the `node` and its previous siblings match types against the provided list of tokens; the provided `node`has its type matched against the last element in the list. `None` can be used as the first element to declare that the start of the list is anchored at the start of its parent's children.TrNF)rIprev_siblings_arerp)rDrs rQrrsP  bzt|  yyF2J T..s <  F   "IIy1r]c&|j}|}|r|j}| |S|jdj|k7r |S|jtj k(r |S|j |j jtvr |S|}|r|S)zReturn `leaf` or one of its ancestors that is the topmost container of it. By "container" we mean a node where `leaf` is the very first child. r)ryrfrUrIr file_inputrpr>)r^ same_prefix containerrfs rQ container_ofrs ++KI !! >   ??1  $ $ 3   ;;$// )      *v/B/B/G/G8/S     r]cpt|tr|S|jrt|jdSy)z(Returns the first leaf of the node tree.rN)rTrrU first_leaf_ofrs rQrrs/$  }}T]]1-..r]c|jtjtjtjtj hvS)z?Whether node is an arithmetic or a binary arithmetic expression)rIr arith_expr shift_exprxor_exprand_exprrs rQ is_arith_likers4 99     r]ct|trN|jtjk7ryt |j }t|jdry|jr|jjtjk(r^|jjsH|jjr2|jjjtjk(ryt|jdtjtj tjgryt|jtj"tj$tjgryy)NFbBfFT)rTrrIrrrrgset intersectionrfr simple_stmtrprrNEWLINEINDENTrvri)rDrys rQ is_docstringr(s$ 99 $"4::. v; # #F + KK   0 0 0 (( KK   KK   # #t 6 dEMM5<<9I9IJt TEUEU&VW r]c |jtjk(xrpt|jdk(xrV|jdjt j k(xr*|jdjt jk(S)z+Return True if `node` holds an empty tuple.rr)rIrrlenrUrrrrs rQis_empty_tuplerHsq TYY 0  ! # 0 MM!  ! !UZZ / 0 MM!  ! !UZZ / r]c|jtjk(rot|}||jtjk7ryt |j dk(xr*|j djtjk(S|jtvxrDt |j dk(xr*|j djtjk(S)zMReturn True if `node` holds a tuple with one element, with or without parens.Frr) rIrrunwrap_singleton_parenthesis testlist_gexprrUrrrr:rDgexps rQ is_one_tuplerRs yyDII+D1 <499(:(::4==!Q&O4==+;+@+@EKK+OO ^# 1  ! # 1 MM!  ! !U[[ 0r]c|jtjk7ryt|}||jtjk7ryy)z$Return True if `node` holds a tuple.FT)rIrrrrrs rQis_tuplerbs; yyDII ' -D |tyyD$6$66 r]c|jtjk7ryt|}||jtjk7ryt d|j DS)zDReturn True if `node` holds a tuple that contains a walrus operator.Fc3VK|]!}|jtjk(#ywN)rIrnamedexpr_test.0rVs rQ z-is_tuple_containing_walrus..usLUuzzT000L')rIrrrranyrUrs rQis_tuple_containing_walrusrmsM yyDII ' -D |tyyD$6$66 LdmmL LLr]c|jtjk7ryt|}||jtjk7ryt d|j DS)zBReturn True if `node` holds a tuple that contains a star operator.Fc3VK|]!}|jtjk(#ywr)rIrr|rs rQrz+is_tuple_containing_star..sGuzzT^^+Grrrs rQis_tuple_containing_starrxsM yyDII ' -D |tyyD$6$66 GG GGr]c|jtjk7ryt|}||jtjk7ryt d|j DS)z(Return True if `node` holds a generator.Fc3VK|]!}|jtjk(#ywr)rIr old_comp_forrs rQrzis_generator..sJ5uzzT...Jrrrs rQ is_generatorrsM yyDII ' -D |tyyD$6$66 JDMMJ JJr]openingclosingrbracketsc|j|jf|k7ry|jdz}t|D] \}}||us n tdd}|dz }||dD]}||ur|dkS|j}||k(s|jtj k(s=|dz }|j sO|j jtjtjhvs|dz }|dkS|dkS)zIReturn True if content between `opening` and `closing` is a one-sequence.Frz#Opening paren not found in `leaves`rNr) rI bracket_depth enumerate LookupErrorrrrrfrrtrx) rrrrdepth_opening_indexr^commasrs rQis_one_sequence_betweenrs  gll#x/  ! !A %E )& 1A 7? A ?@@ FaN~'  7?  A:** E !dii5;;&> aKF{{t{{// ""4 !  A:  A:r]c^t|}|duxr|jtjk(S)z7Return True iff `node` is of the shape ( test := test )N)rrIrr)rDinners rQis_walrus_assignmentrs+ ( .E   Bt/B/B!BBr]lastc|jtjk(xr\t|jdk(xrV|jdjt j k(xr*|jdjt jk(xs|xrpt|jdk(xrV|jdjt jk(xr*|jdjt jk(xst|xrpt|jdk(xrV|jdjt jk(xr*|jdjt jk(S)z?Return True iff `node` is a trailer valid in a simple decoratorrrrr ) rIrrrrUrrrrr)rDrs rQis_simple_decorator_trailerrs1 99 $   ! # 4 a %%2 4 a %%3   4DMM"a' 4 a %%3 4 a %%3   4DMM"a' 4 a %%3 4 a %%3'r]c|jtjk(ry|jtjk(r|j r|j djtjk(xr\t tt|j ddxr4t|j dkxst|j ddSy)a\Return True iff `node` could be a 'dotted name' decorator This function takes the node of the 'namedexpr_test' of the new decorator grammar and test if it would be valid under the old decorator grammar. The old grammar was: decorator: @ dotted_name [arguments] NEWLINE The new grammar is : decorator: @ namedexpr_test NEWLINE Trrrr)rF) rIrrrpowerrUallmaprrrs rQis_simple_decorator_expressionrs yyEJJ yyDJJ == a %%37q9LMN &*Q24==3D4P   r]c|jtjk(ryt|r|jdk(ry|jtj k7ryt |jdk7ry|j\}}}|jtjk(r(|jtjk(r t|Sy)zAReturn True if `node` holds a `yield` or `yield from` expression.TyieldFr ) rIr yield_expr is_name_tokenrgrrrUrrris_yield)rDlparexprrpars rQrrs yyDOO#TtzzW4 yyDII 4==Q}}D$ yyEJJ499 #:~ r]rdc|jtvs |jsy|j}|jtjk(r|jsy|j}|j|vS)aFReturn True if `leaf` is a star or double star in a vararg or kwarg. If `within` includes VARARGS_PARENTS, this applies to function signatures. If `within` includes UNPACKING_PARENTS, it applies to right hand-side extended iterable unpacking (PEP 3132) and additional unpacking generalizations (PEP 448). F)rIr%rfrr|)r^rdrs rQr~r~sW yy((  Avvxx HH 66V r]c<|jtjk(S)z&Return True if the node is an f-string)rIrfstringrs rQ is_fstringrs 99 $$r]ct|t|jd}ttj ||j}|j xsd|_|S)z:Converts an fstring or tstring node back to a string node.N)ryr)rKrryrrr get_linenolineno)rDstring_without_prefix string_leafs rQfstring_tstring_to_stringrsNIc$++&6&89u||%:4;;OK*/aK r]ct|trt|r t|}nt|tr|}nyt |j xrd|j vS)zKReturn True if `leaf` is a multiline string that actually spans many lines.F )rTrrrrrrg)rDr^s rQis_multiline_stringr$sL$*T"2(. D$  TZZ ( ?TTZZ-??r]c|jtjtjhvsJ|jJ|jjtj tj hvSr)rIrsuiterrffuncdefrrs rQis_parent_function_or_classr0sU 99T%5%56 66 6 ;; "" " ;;   dmm< <._s HUYY,,Hr) rTrrIrrrrUryr!rr)rDrVs rQr#r#Rs dD !TYY$2B2B%B 4==Q MM! E LL     I JJ$)) # I  1 $ I HH H r]ct|ts|jtjk7ry|j d|j d}}t|txrp|jt jk(xrQ|jdk(xr@t|txr.|jt jk(xr|jdk(S)zGiven a `LN`, determines whether it's an atom `node` with invisible parens. Useful in dedupe-ing and normalizing parens. Frrrb) rTrrIrrrUrrrgr)rDfirstrs rQis_atom_with_invisible_parensr*cs$dii!7--"DMM"$54E5$  JJ%** $  KK2   tT "  II #   JJ"  r]c2t|xs t|Sr) is_empty_lpar is_empty_rparr^s rQ is_empty_parr/us   5-"55r]c^|jtjk(xr|jdk(SNrb)rIrrrgr.s rQr,r,y# 99 " 7tzzR'77r]c^|jtjk(xr|jdk(Sr1)rIrrrgr.s rQr-r-}r2r]c*|j}|j}|j}t|tj k(xrR|dk(xr!|xr|jt jk(xs(|dk(xr!|xr|jt jk(S)z9Return True if the given leaf starts an import statement.refrom) rfrIrgboolrrr import_namer)r^rrrs rQ is_importr8s A A A  UZZ (] ?q ?QVVt/?/?%? BV @@aff0@0@&@  r]ct|jtjk(xrF|jdk(xr5|j xr'|j jt jk(xs]t|jtjk(xr5|jxr'|jjt jk(S)zDReturn True if the given leaf starts a with or async with statement.with) r6rIrrrgrfr with_stmtASYNC next_siblingr.s rQis_with_or_async_with_stmtr>s  UZZ / JJ&  / KK / KK   .     U[[  5    5    " "dnn 4  r]ct|jtjk(xrD|jxr6|jjt j t jhvS)zReturn True if the given leaf starts an async def/for/with statement. Note that `async def` can be either an `async_stmt` or `async_funcdef`, the latter is used when it has decorators. )r6rIrr<rfr async_stmtrr.s rQis_async_stmt_or_funcdefrAsU  U[[  F KK F KK  $2D2D E E r]c~|j}|j}|tjthvxr t ||S)aBReturn True if the given leaf is a type comment. This function should only be used for general type comments (excluding ignore annotations, which should use `is_type_ignore_comment`). Note that general type comments are no longer used in modern version of Python, this function may be deprecated in the future.)rIrgrrhris_type_comment_stringr^r`rrs rQis_type_commentrEs9 A A  23 3 W8NqRV8WWr]rgctj|vr7|jdxr"|ddjjd}|S|jd}|S)N#rztype:z# type:)rstandardize_type_comments startswithlstriprgr`is_valids rQrCrCs]((D0##C(SU12Y-=-=-?-J-J7-S O##I. Or]c~|j}|j}|tjthvxr t ||S)zGReturn True if the given leaf is a type comment with ignore annotation.)rIrgrrhris_type_ignore_comment_stringrDs rQis_type_ignore_commentrOs= A A  23 3 8U 49r]ctj|vrBt||xr2|jdddj j d}|S|j d}|S)zSReturn True if the given string match with type comment with ignore annotation.r7rignorez# type: ignore)rrHrCsplitrJrIrKs rQrNrNsj((D0)%6(5;;sA;N < &(::h'  O##$45 Or])visiblerfrVrSc6ttj|rdnd}ttj|rdnd}|j}d|_|j xsd}t tj|||g}||_|j||y)zWrap `child` in parentheses. This replaces `child` with an atom holding the parentheses and the old child. That requires moving the prefix. If `visible` is False, the leaves will be valueless (and thus invisible). (rb)rN) rrrrryrrrrr)rfrVrSrr ryindexrs rQwrap_in_parenthesesrXs{  7C 3D  7C 3D \\FEL LLN aETYYud 34II y)r]ct|jdk7ry|j\}}}|jtjk(r|jtj k(sy|S)zqReturns `wrapped` if `node` is of the shape ( wrapped ). Parenthesis can be optional. Returns None otherwiser N)rrUrIrrr)rDrwrappedr s rQrrsO 4==Q--D'4 II # UZZ(? Nr]c|jtjk(rd|_y|jtjk(rd|_yy)zMake sure parentheses are visible. They could be invisible as part of some statements (see :func:`normalize_invisible_parens` and :func:`visit_import_from`). rUrVN)rIrrrgrr.s rQensure_visibler\s7  yyEJJ ejj   !r]nlc<|jtjk(Sr)rIrrr]s rQrr 77ejj  r]c<|jtjk(Sr)rIrrr_s rQ is_lpar_tokenrbr`r]c<|jtjk(Sr)rIrrr_s rQ is_rpar_tokenrdr`r]c<|jtjk(Sr)rIrrr_s rQis_number_tokenrf s 77ell ""r])rEparamNc|j}|w|jr(|jjtjk(ry|jr(|jjt j k(ry|j}|wy)zrrFSTRING_MIDDLE FSTRING_ENDTSTRING_MIDDLE TSTRING_ENDrr?rirCr6rKrrrqrrr{rrrrrrrrrrrrtuplerrrrrr~rrrrrr$r#r*r/r,r-r8r>rArErCrOrNrXrr\rrbrdrfrkrmrorqrsrvr\r]rQrsc  $DDw +&!$> 55)##e# CL 4:  \\5<<? E?LLOOMMMMNNLLMMOOOO  5  E%9!"& JJ MM MM NN OO   U JJ  KK OO  JJ KK JJ KK  MM HH KK   E,,-u-5;;-/%/LLMMLL  IINNLL5 IILLLLMMMMOONNIIMMMMOOOOLLIIJJ!%$jj$//2 U2 U$(?(?OO JJ  JJ  LL%,, glln-%-gnn./%/"%55%5) KK     JJ-  .-gaj-/-DoTooTocod!!!3!RU!"(4.$ =HRL =$x7I2J =t = hrl x'9 DbXb\2R2B242"t2x~trd@ r d  2$MRMDMH2H$HKrKdK"'UZZ 8 " " " J"CHo "  "JCrCdC b402$*D#h-D.%T%d% DT @b @T @=d=t=JtJJ***.rd"t$6t66888888 D T  T d  4 D X$XdXtX#TdTd  D T EI**R*T*T*$ r hrl   $ !b!Yt_!!b!Yt_!!b!Yt_!##y# d w/F'G 111 ,R,HTN,,B,8D>,4B#$r]