ZL i0UdZddlmZmZddlmZmZddlmZm Z m Z ddl m Z m Z mZmZmZmZmZmZmZmZddlmZddlmZmZe eefZeZeZeZeZ dZ!ee"d <d Z#ee"d <d Z$ee"d <dZ%ee"d<dZ&ee"d<dZ'ee"d<ejPdejRdejTdejVdejXdejZdej\dej^dej`dejbdejddejfdejhdejjdiZ6ee"d<dZ7ee"d<Gdd e8Z9eGd!d"Z:d#ed$e fd%Z;d-d#ed'e ed$e fd(Zefd,Z?y&).z,Builds on top of nodes.py to track brackets.)IterableSequence) dataclassfield)FinalOptionalUnion) BRACKETCLOSING_BRACKETS COMPARATORSLOGIC_OPERATORSMATH_OPERATORSOPENING_BRACKETSUNPACKING_PARENTSVARARGS_PARENTS is_varargsyms)token)LeafNodeCOMPREHENSION_PRIORITYCOMMA_PRIORITYTERNARY_PRIORITYLOGIC_PRIORITY STRING_PRIORITY COMPARATOR_PRIORITY MATH_PRIORITIES DOT_PRIORITYceZdZdZy)BracketMatchErrorzLRaised when an opening bracket is unable to be matched to a closing bracket.N)__name__ __module__ __qualname____doc__T/mnt/ssd/data/python-lab/Trading/venv/lib/python3.12/site-packages/black/brackets.pyr/r/7sVr5r/ceZdZUdZdZeed<eeZ ee e e fe fed<eeZeeefed<dZee ed<eeZeeed <eeZeeed <eeZee ed <d e d dfdZd efdZd efdZddeed efdZdded efdZd e d efdZd e d efdZd e d efdZ d e d efdZ!d ee fdZ"y)BracketTrackerz"Keeps track of brackets on a line.rdepth)default_factory bracket_match delimitersNprevious_for_loop_depths_lambda_argument_depths invisibleleafreturnc|jtjk(ry|jdk(r7|jtvr%|j|jf|j vry|j ||j||jtvru|xjdzc_ |j j|j|jf}||_ |js|jj||j|_|jdk(rlt!||j"}|r/|j"#||j$t'|j"<n%t)|}|r||j$t'|<|jt*vrh||j |jt,|jf<|xjdz c_|js|jj|||_|j/||j1|y#t$r}td||d}~wwxYw)aMark `leaf` with bracket-related metadata. Keep track of delimiters. All leaves receive an int `bracket_depth` field that stores how deep within brackets a given leaf is. 0 means there are no enclosing brackets that started on this line. If a leaf is itself a closing bracket and there is a matching opening bracket earlier, it receives an `opening_bracket` field with which it forms a pair. This is a one-directional link to avoid reference cycles. Closing bracket without opening happens on lines continued from previous breaks, e.g. `) -> "ReturnType":` as part of a funcdef where we place the return type annotation on its own line of the previous closing RPAR. If a leaf is a delimiter (a token on which Black can split the line if needed) and it's on depth 0, its `id()` is stored in the tracker's `delimiters` field. Nrr,zDUnable to match a closing bracket to the following opening bracket: )typerCOMMENTr9r r;'maybe_decrement_after_for_loop_variable&maybe_decrement_after_lambda_argumentspopKeyErrorr/opening_bracketvaluer@append bracket_depthis_split_before_delimiterr=r<idis_split_after_delimiterrr maybe_increment_lambda_arguments!maybe_increment_for_loop_variable)selfrArJedelims r6markzBracketTracker.markGs$ 99 %  JJ!O --TYY't/A/AA  44T: 33D9 99( ( JJ!OJ "&"4"4"8"8$**dii9P"Q $3D ::%%d+!ZZ ::?-dDMMBE25:4== 120605DOOBtH- 99( (AED  tzz7499+== > JJ!OJ::%%d+  --d3 ..t41 '!!%( s/1H>> IIIcHt|jxs |jS)zReturn True if there is an open for or lambda expression on the line. See maybe_increment_for_loop_variable and maybe_increment_lambda_arguments for details.)boolr>r?rSs r6any_open_for_or_lambdaz%BracketTracker.any_open_for_or_lambdas D))IT-I-IJJr5c,t|jS)zBReturn True if there is an yet unmatched open bracket on the line.)rXr;rYs r6any_open_bracketsz BracketTracker.any_open_bracketssD&&''r5excludec\tfd|jjDS)zReturn the highest priority of a delimiter found on the line. Values are consistent with what `is_split_*_delimiter()` return. Raises ValueError on no delimiters. c32K|]\}}|vs |ywNr4).0kvr]s r6 z8BracketTracker.max_delimiter_priority..sMAAW.sH!x-1Hs )r<rgsumvalues)rSrhs `r6delimiter_count_with_priorityz,BracketTracker.delimiter_count_with_prioritys@ rLrSrAs r6rRz0BracketTracker.maybe_increment_for_loop_variablesJ 99 "tzzU': JJ!OJ  ! ! ( ( 4r5c |jrx|jd|jk(r\|jtjk(r?|j dk(r0|xjdzc_|jj yy)z>See `maybe_increment_for_loop_variable` above for explanation.inr,TF)r>r9rDrrqrKrHrrs r6rFz6BracketTracker.maybe_decrement_after_for_loop_variablese  ! !%%b)TZZ7 UZZ' d" JJ!OJ  ! ! % % 'r5c|jtjk(rJ|jdk(r;|xjdz c_|j j |jyy)zIn a lambda expression, there might be more than one argument. To avoid splitting on the comma in this situation, increase the depth of tokens between `lambda` and `:`. lambdar,TF)rDrrqrKr9r?rLrrs r6rQz/BracketTracker.maybe_increment_lambda_argumentssJ 99 "tzzX'= JJ!OJ  ( ( / / ;r5c|jri|jd|jk(rM|jtjk(r0|xjdzc_|jj yy)z=See `maybe_increment_lambda_arguments` above for explanation.rtr,TF)r?r9rDrCOLONrHrrs r6rGz5BracketTracker.maybe_decrement_after_lambda_argumentssY  ( (,,R0DJJ> U[[( JJ!OJ  ( ( , , .r5cr|jj|jdz tjfS)z7Return the most recent opening square bracket (if any).r,)r;getr9rRSQBrYs r6 get_open_lsqbzBracketTracker.get_open_lsqbs*!!%%tzzA~uzz&BCCr5)r4)r)#r0r1r2r3r9int__annotations__rdictr;tupleDepthNodeTyperr<LeafIDPriorityr=rlistr>r?r@rVrXrZr\rrgrnrRrFrQrGr}r4r5r6r8r8;sO,E3N8=d8SM4eXo.45S).t)DJVX%&D#Hhtn#"'"=d3i=).t)DT#YD!$7ItDz7:5:5$:5xKK(4(Nhv.>NN Ih Is I d t  D T  T d  4 D Dx~Dr5r8rArBcJ|jtjk(rtSy)zReturn the priority of the `leaf` delimiter, given a line break after it. The delimiter priorities returned here are from those delimiters that would cause a line break after themselves. Higher numbers are higher priority. r)rDrCOMMAr)rAs r6rPrPs yyEKK r5Nr=ct|ttzry|jtj k(r\|j rP|j jtjtjhvr||jtvrtS|jtvrU|j rI|j jtjtjhvrt|jS|jt vrt"S|jtj$k(r%|#|jtj$k(rt&S|jtj(tj*hvry|j,dk(rB|j r6|j jtj.tj0hvs|jtj*k(r9t3|j4t6r|j4j,dk7rt8S|j,dk(rH|j r<|j jtj:tj<hvrt8S|j,dvr9|j r-|j jtj>k(rt@S|j,dk(rt"S|j,dk(rv|j rj|j jtjBtjDhvr4|,|jtj(k(r|j,d k(st"S|j,d k(rg|j r[|j jtjBk(r4|,|jtj(k(r|j,dk(st"S|j,tFvr|j rtHSy) zReturn the priority of the `leaf` delimiter, given a line break before it. The delimiter priorities returned here are from those delimiters that would cause a line break before themselves. Higher numbers are higher priority. )withinrrpasyncif>relseisrunot)%rrrrDrDOTparentr import_from dotted_namer r-rfactor star_exprr+r r"STRINGr rqASYNCrKcomp_for old_comp_for isinstance prev_siblingrrcomp_if old_comp_iftestrcomp_op comparisonr r)rAr=s r6rNrNso0AAB UYY KK KK  T%5%5t7G7G$H H  2B!B ^# KK KK  T[[$..$A Atyy)) yyK"" U\\!  MMU\\ ) yyU[[11 e KK KK  0A0A B B 99 #4,,d3  &&'1) ) d KK KK  t/?/? @ @%% zz^#  8H8HDII8U zzT"" d KK KK  t ? ?   +%'#" e KK KK   ,   +$&#" zz_$ r5nodec|jtjk7ry|jd}|jd}|jtj k(r|jtj k(syt}|jddD]J}t|tr|j|%|jD]}|j|L |jS#t$rYywxYw)zReturn maximum delimiter priority inside `node`. This is specific to atoms with contents contained in a pair of parentheses. If `node` isn't an atom or there are no enclosing parentheses, returns 0. rrtr,)rDratomchildrenrLPARRPARr8rrrVleavesrg ValueError)rfirstlastbtcrAs r6max_delimiter_priority_in_atomrIs  yyDII MM! E == D JJ%** $ejj)@  B ]]1R  a  GGAJ      ((** sC// C;:C;rc tdt|D}g}t}t |t |D]}||}|j tvr$|jt|j |f|j tvsQ|rZ|j |ddk(rE|j\}}t ||dzD]}|jt||!|S|S#t$r tcYSwxYw)zReturn leaves that are inside matching brackets. The input `leaves` can have non-matching brackets at the head or tail parts. Matching brackets are included. c3LK|]\}}|jtvs|ywr`)rDr)rails r6rdz6get_leaves_inside_matching_brackets..ms% !Qqvv9I/IA s$$rtrr,)next enumerate StopIterationsetrangelenrDrrLr r rHaddrO) r start_index bracket_stackidsrrA_startjs r6#get_leaves_inside_matching_bracketsres   #F+  M %C ;F , ay 99( (  '$))"4a!8 9 99( (mB.?.B!B(,,.5ua!e,+AGGBvayM*+ J  J u sC11DDr`)@r3collections.abcrr dataclassesrrtypingrrr black.nodesr r r r rrrrrrblib2to3.pgen2rblib2to3.pytreerrLNr~rrrrrrrrrr r"VBAR CIRCUMFLEXAMPER LEFTSHIFT RIGHTSHIFTPLUSMINUSSTARSLASH DOUBLESLASHPERCENTATTILDE DOUBLESTARr+r- Exceptionr/r8rPrNrrrr4r5r6rs2.())   !& 4:    !#"%U JJ a KK OOQ a JJ KK JJ KK q MM1 HHa KK a  eW W \D\D \D~  4  H  ] D] HTN] h] @83v;r5