ó
    áÅŸg�0  ã                   óþ  • % S r SSKJrJr  SSKJrJr  SSKJrJ	r	J
r
  SSKJrJrJrJrJrJrJrJrJrJr  SSKJr  SSKJrJr  \
\\4   r\r\r\r\r Sr!\\"S	'   S
r#\\"S'   Sr$\\"S'   Sr%\\"S'   Sr&\\"S'   Sr'\\"S'   \RP                  S\RR                  S\RT                  S\RV                  S\RX                  S\RZ                  S\R\                  S\R^                  S\R`                  S\Rb                  S\Rd                  S\Rf                  S\Rh                  S\Rj                  S0r6\\"S'   Sr7\\"S'    " S S \85      r9\ " S! S"5      5       r:S#\S$\ 4S% jr;S-S#\S'\	\   S$\ 4S( jjr<S)\S$\ 4S* jr=S+\\   S$\>\   4S, jr?g&).z,Builds on top of nodes.py to track brackets.é    )ÚIterableÚSequence)Ú	dataclassÚfield)ÚFinalÚOptionalÚUnion)
ÚBRACKETÚCLOSING_BRACKETSÚCOMPARATORSÚLOGIC_OPERATORSÚMATH_OPERATORSÚOPENING_BRACKETSÚUNPACKING_PARENTSÚVARARGS_PARENTSÚ	is_varargÚsyms)Útoken)ÚLeafÚNodeé   ÚCOMPREHENSION_PRIORITYé   ÚCOMMA_PRIORITYé   ÚTERNARY_PRIORITYé   ÚLOGIC_PRIORITYé   ÚSTRING_PRIORITYé
   ÚCOMPARATOR_PRIORITYé	   é   é   é   é   é   é   é   ÚMATH_PRIORITIESé   ÚDOT_PRIORITYc                   ó   • \ rS rSrSrSrg)ÚBracketMatchErroré7   zLRaised when an opening bracket is unable to be matched to a closing bracket.© N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__static_attributes__r1   ó    ÚO/var/www/blue/EV-Temp_rev04/venv/lib/python3.13/site-packages/black/brackets.pyr/   r/   7   s   † ÜVr8   r/   c                   ó–  • \ rS rSr% SrSr\\S'   \" \	S9r
\	\\\4   \4   \S'   \" \	S9r\	\\4   \S'   Sr\\   \S	'   \" \S9r\\   \S
'   \" \S9r\\   \S'   \" \S9r\\   \S'   S\SS4S jrS\4S jrS\4S jrSS\\   S\4S jjrSS\S\4S jjrS\S\4S jrS\S\4S jr S\S\4S jr!S\S\4S jr"S\\   4S jr#Sr$g)ÚBracketTrackeré;   z"Keeps track of brackets on a line.r   Údepth)Údefault_factoryÚbracket_matchÚ
delimitersNÚpreviousÚ_for_loop_depthsÚ_lambda_argument_depthsÚ	invisibleÚleafÚreturnc                 óò  • UR                   [        R                  :X  a  gU R                  S:X  a;  UR                   [        ;   a'  U R                  UR                   4U R
                  ;  a  gU R                  U5        U R                  U5        UR                   [        ;   ay  U =R                  S-  sl         U R
                  R                  U R                  UR                   45      nX!l        UR                  (       d  U R                  R                  U5        U R                  Ul        U R                  S:X  at  [!        XR"                  5      nU(       a/  U R"                  b"  X@R$                  ['        U R"                  5      '   O)[)        U5      nU(       a  X@R$                  ['        U5      '   UR                   [*        ;   al  XR
                  U R                  [,        UR                      4'   U =R                  S-  sl        UR                  (       d  U R                  R                  U5        Xl        U R/                  U5        U R1                  U5        g! [         a  n[        SU 35      UeSnAff = f)a;  Mark `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.
Nr   r,   zDUnable to match a closing bracket to the following opening bracket: )Útyper   ÚCOMMENTr=   r   r?   Ú'maybe_decrement_after_for_loop_variableÚ&maybe_decrement_after_lambda_argumentsÚpopÚKeyErrorr/   Úopening_bracketÚvaluerD   ÚappendÚbracket_depthÚis_split_before_delimiterrA   r@   ÚidÚis_split_after_delimiterr   r
   Ú maybe_increment_lambda_argumentsÚ!maybe_increment_for_loop_variable)ÚselfrE   rN   ÚeÚdelims        r9   ÚmarkÚBracketTracker.markG   sØ  € ð$ �9‰9œŸ™Ó%Øð �J‰J˜!‹OØ—	‘	Ô-Ó-Ø—‘˜TŸY™YÐ'¨t×/AÑ/AÓAàà×4Ñ4°TÔ:Ø×3Ñ3°DÔ9Ø�9‰9Ô(Ó(Ø�JŠJ˜!‰O�JðØ"&×"4Ñ"4×"8Ñ"8¸$¿*¹*ÀdÇiÁiÐ9PÓ"Q�ð $3Ô Ø—:—:Ø—‘×%Ñ% dÔ+Ø!ŸZ™ZˆÔØ�:‰:˜‹?Ü-¨d·M±MÓBˆEÞ˜Ÿ™Ñ2Ø5:—‘¤ 4§=¡=Ó 1Ò2ä0°Ó6�ÞØ05—O‘O¤B t£HÑ-Ø�9‰9Ô(Ó(ØAE×Ñ˜tŸz™z¬7°4·9±9Ñ+=Ð=Ñ>Ø�JŠJ˜!‰O�JØ—:—:Ø—‘×%Ñ% dÔ+ØŒØ×-Ñ-¨dÔ3Ø×.Ñ.¨tÕ4øô1 ó Ü'ð!Ø!% ð(óð ðûðús   Â71I É
I6É"I1É1I6c                 óR   • [        U R                  =(       d    U R                  5      $ )zžReturn 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.)ÚboolrB   rC   ©rW   s    r9   Úany_open_for_or_lambdaÚ%BracketTracker.any_open_for_or_lambdaƒ   s    € ô
 �D×)Ñ)×I¨T×-IÑ-IÓJÐJr8   c                 ó,   • [        U R                  5      $ )zBReturn True if there is an yet unmatched open bracket on the line.)r]   r?   r^   s    r9   Úany_open_bracketsÚ BracketTracker.any_open_bracketsŠ   s   € ä�D×&Ñ&Ó'Ð'r8   Úexcludec                 ó^   ^• [        U4S jU R                  R                  5        5       5      $ )z¤Return the highest priority of a delimiter found on the line.

Values are consistent with what `is_split_*_delimiter()` return.
Raises ValueError on no delimiters.
c              3   ó:   >#   • U H  u  pUT;  d  M  Uv •  M     g 7f©Nr1   )Ú.0ÚkÚvrd   s      €r9   Ú	<genexpr>Ú8BracketTracker.max_delimiter_priority.<locals>.<genexpr>”   s   øé € ÐMÑ!8™˜¸AÀWÑ<L—1‘1Ò!8ùs   ƒ’	)Úmaxr@   Úitems)rW   rd   s    `r9   Úmax_delimiter_priorityÚ%BracketTracker.max_delimiter_priorityŽ   s#   ø€ ô ÔM §¡×!6Ñ!6Ô!8ÓMÓMÐMr8   Úpriorityc                 ó´   ^• U R                   (       d  gT=(       d    U R                  5       m[        U4S jU R                   R                  5        5       5      $ )z~Return the number of delimiters with the given `priority`.

If no `priority` is passed, defaults to max priority on the line.
r   c              3   ó4   >#   • U H  oT:X  d  M
  S v •  M     g7f)r,   Nr1   )rh   Úprq   s     €r9   rk   Ú?BracketTracker.delimiter_count_with_priority.<locals>.<genexpr>Ÿ   s   øé € ÐHÑ6˜¸x¹-—1‘1Ò6ùs   ƒ�	)r@   ro   ÚsumÚvalues)rW   rq   s    `r9   Údelimiter_count_with_priorityÚ,BracketTracker.delimiter_count_with_priority–   s@   ø€ ð
 ��Øà×<˜t×:Ñ:Ó<ˆÜÔH˜dŸo™o×4Ñ4Ô6ÓHÓHÐHr8   c                 óÖ   • UR                   [        R                  :X  aK  UR                  S:X  a;  U =R                  S-  sl        U R
                  R                  U R                  5        gg)z«In a for loop, or comprehension, the variables are often unpacks.

To avoid splitting on the comma in this situation, increase the depth of
tokens between `for` and `in`.
Úforr,   TF)rH   r   ÚNAMErO   r=   rB   rP   ©rW   rE   s     r9   rV   Ú0BracketTracker.maybe_increment_for_loop_variable¡   sJ   € ð �9‰9œŸ
™
Ó" t§z¡z°UÓ':Ø�JŠJ˜!‰O�JØ×!Ñ!×(Ñ(¨¯©Ô4Øàr8   c                 ó  • U R                   (       a{  U R                   S   U R                  :X  a^  UR                  [        R                  :X  a@  UR
                  S:X  a0  U =R                  S-  sl        U R                   R                  5         gg)z>See `maybe_increment_for_loop_variable` above for explanation.éÿÿÿÿÚinr,   TF)rB   r=   rH   r   r|   rO   rL   r}   s     r9   rJ   Ú6BracketTracker.maybe_decrement_after_for_loop_variable®   se   € ð ×!×!Ø×%Ñ% bÑ)¨T¯Z©ZÓ7Ø—	‘	œUŸZ™ZÓ'Ø—
‘
˜dÓ"à�JŠJ˜!‰O�JØ×!Ñ!×%Ñ%Ô'Øàr8   c                 óÖ   • UR                   [        R                  :X  aK  UR                  S:X  a;  U =R                  S-  sl        U R
                  R                  U R                  5        gg)zªIn 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)rH   r   r|   rO   r=   rC   rP   r}   s     r9   rU   Ú/BracketTracker.maybe_increment_lambda_arguments¼   sJ   € ð �9‰9œŸ
™
Ó" t§z¡z°XÓ'=Ø�JŠJ˜!‰O�JØ×(Ñ(×/Ñ/°·
±
Ô;Øàr8   c                 óü   • U R                   (       ak  U R                   S   U R                  :X  aN  UR                  [        R                  :X  a0  U =R                  S-  sl        U R                   R                  5         gg)z=See `maybe_increment_lambda_arguments` above for explanation.r€   r,   TF)rC   r=   rH   r   ÚCOLONrL   r}   s     r9   rK   Ú5BracketTracker.maybe_decrement_after_lambda_argumentsÉ   sY   € ð ×(×(Ø×,Ñ,¨RÑ0°D·J±JÓ>Ø—	‘	œUŸ[™[Ó(à�JŠJ˜!‰O�JØ×(Ñ(×,Ñ,Ô.Øàr8   c                 ór   • U R                   R                  U R                  S-
  [        R                  45      $ )z7Return the most recent opening square bracket (if any).r,   )r?   Úgetr=   r   ÚRSQBr^   s    r9   Úget_open_lsqbÚBracketTracker.get_open_lsqbÖ   s*   € à×!Ñ!×%Ñ% t§z¡z°A¡~´u·z±zÐ&BÓCÐCr8   )rA   )r1   )r   )%r2   r3   r4   r5   r6   r=   ÚintÚ__annotations__r   Údictr?   ÚtupleÚDepthÚNodeTyper   r@   ÚLeafIDÚPriorityrA   r   ÚlistrB   rC   rD   rZ   r]   r_   rb   r   ro   rx   rV   rJ   rU   rK   rŒ   r7   r1   r8   r9   r;   r;   ;   sO  ‡ á,à€Eˆ3ƒNÙ8=ÈdÑ8S€M�4˜˜e X˜oÑ.°Ð4Ñ5ÓSÙ).¸tÑ)D€J��V˜XÐ%Ñ&ÓDØ#€Hˆh�t‰nÓ#Ù"'¸Ñ"=Ð�d˜3‘iÓ=Ù).¸tÑ)DÐ˜T #™YÓDÙ!°$Ñ7€Iˆt�D‰zÓ7ð:5˜ð :5 $ô :5ðxK¨ô Kð( 4ô (ñN¨h°vÑ.>ð NÈõ Nñ	I°hð 	IÀsõ 	Ið°dð ¸tô ð¸Dð ÀTô ð°Tð ¸dô ð¸4ð ÀDô ðD˜x¨™~÷ Dr8   r;   rE   rF   c                 óL   • U R                   [        R                  :X  a  [        $ g)záReturn 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   )rH   r   ÚCOMMAr   )rE   s    r9   rT   rT   Û   s   € ð ‡y�y”E—K‘KÓÜÐàr8   NrA   c                 ó¨  • [        U [        [        -  S9(       a  gU R                  [        R
                  :X  af  U R                  (       aU  U R                  R                  [        R                  [        R                  1;  a  Ub  UR                  [        ;   a  [        $ U R                  [        ;   a\  U R                  (       aK  U R                  R                  [        R                  [        R                  1;  a  [        U R                     $ U R                  [         ;   a  ["        $ U R                  [        R$                  :X  a'  Ub$  UR                  [        R$                  :X  a  [&        $ U R                  [        R(                  [        R*                  1;  a  gU R,                  S:X  aI  U R                  (       a8  U R                  R                  [        R.                  [        R0                  1;   d  U R                  [        R*                  :X  a?  [3        U R4                  [6        5      (       a  U R4                  R,                  S:w  a  [8        $ U R,                  S:X  aO  U R                  (       a>  U R                  R                  [        R:                  [        R<                  1;   a  [8        $ U R,                  S;   a?  U R                  (       a.  U R                  R                  [        R>                  :X  a  [@        $ U R,                  S:X  a  ["        $ U R,                  S:X  a€  U R                  (       ao  U R                  R                  [        RB                  [        RD                  1;   a7  Ub.  UR                  [        R(                  :X  a  UR,                  S	:X  d  ["        $ U R,                  S	:X  ap  U R                  (       a_  U R                  R                  [        RB                  :X  a7  Ub.  UR                  [        R(                  :X  a  UR,                  S:X  d  ["        $ U R,                  [F        ;   a  U R                  (       a  [H        $ g)
zãReturn 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.
)Úwithinr   r{   ÚasyncÚif>   rœ   ÚelseÚisr�   Únot)%r   r   r   rH   r   ÚDOTÚparentr   Úimport_fromÚdotted_namer   r-   r   ÚfactorÚ	star_exprr+   r   r"   ÚSTRINGr    r|   ÚASYNCrO   Úcomp_forÚold_comp_forÚ
isinstanceÚprev_siblingr   r   Úcomp_ifÚold_comp_ifÚtestr   Úcomp_opÚ
comparisonr   r   )rE   rA   s     r9   rR   rR   é   sÊ  € ô �œoÔ0AÑA×Bð ð 	�	‰	”U—Y‘YÓØ�K�KØ�K‰K×Ñ¤T×%5Ñ%5´t×7GÑ7GÐ$HÓHØÑ §¡Ô2BÓ!BäÐð 	�	‰	”^Ó#Ø�K�KØ�K‰K×Ñ¤T§[¡[´$·.±.Ð$AÓAä˜tŸy™yÑ)Ð)à‡y�y”KÓÜ"Ð"ð 	�	‰	”U—\‘\Ó!ØÑ Ø�M‰MœUŸ\™\Ó)äÐà‡y�yœŸ™¤U§[¡[Ð1Ó1Øð 	�
‰
�eÓØ�K�KØ�K‰K×Ñ¤§¡´×0AÑ0AÐ BÓBØ�9‰9œŸ™Ó#ô ˜4×,Ñ,¬d×3Ñ3Ø× Ñ ×&Ñ&¨'Ó1ä)Ð)ð 	�
‰
�dÓØ�K�KØ�K‰K×Ñ¤§¡¬t×/?Ñ/?Ð @Ó@ä%Ð%à‡z�z�^Ó#¨¯¯¸¿¹×8HÑ8HÌDÏIÉIÓ8UÜÐà‡z�z�TÓÜ"Ð"ð 	�
‰
�dÓØ�K�KØ�K‰K×Ñ¤§¡¬t¯©Ð ?Ó?àÑ Ø—‘¤§¡Ó+Ø—‘ %Ó'ô #Ð"ð 	�
‰
�eÓØ�K�KØ�K‰K×Ñ¤§¡Ó,àÑ Ø—‘¤§¡Ó+Ø—‘ $Ó&ô #Ð"à‡z�z”_Ó$¨¯¯ÜÐàr8   Únodec                 ó  • U R                   [        R                  :w  a  gU R                  S   nU R                  S   nUR                   [        R
                  :X  a  UR                   [        R                  :X  d  g[        5       nU R                  SS  HS  n[        U[        5      (       a  UR                  U5        M+  UR                  5        H  nUR                  U5        M     MU      UR                  5       $ ! [         a     gf = f)zÈReturn 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.
r   r€   r,   )rH   r   ÚatomÚchildrenr   ÚLPARÚRPARr;   rª   r   rZ   Úleavesro   Ú
ValueError)r±   ÚfirstÚlastÚbtÚcrE   s         r9   Úmax_delimiter_priority_in_atomr½   I  sË   € ð ‡y�y”D—I‘IÓØà�M‰M˜!Ñ€EØ�=‰=˜Ñ€DØ�J‰Jœ%Ÿ*™*Ó$¨¯©´e·j±jÓ)@Øä	Ó	€BØ�]‰]˜1˜RÓ ˆÜ�aœ×ÑØ�G‰G�AŽJàŸ™ž
�Ø—‘˜–ó #ñ	 !ðØ×(Ñ(Ó*Ð*øäó Ùðús   Ã,C< Ã<
D	ÄD	r·   c                 ó,  •  [        S [        U 5       5       5      n/ n[        5       n[	        U[        U 5      5       H¸  nX   nUR                  [        ;   a$  UR                  [        UR                     U45        UR                  [        ;   d  MU  U(       a[  UR                  US   S   :X  aE  UR                  5       u  pg[	        XtS-   5       H  nUR                  [        X   5      5        M!     M·    U$    U$ ! [         a    [        5       s $ f = f)zŸReturn leaves that are inside matching brackets.

The input `leaves` can have non-matching brackets at the head or tail parts.
Matching brackets are included.
c              3   óT   #   • U H  u  pUR                   [        ;   d  M  Uv •  M!     g 7frg   )rH   r   )rh   ÚiÚls      r9   rk   Ú6get_leaves_inside_matching_brackets.<locals>.<genexpr>m  s$   é € ð 
Ù+‘$�!¨q¯v©vÔ9IÑ/I�A‰AÒ+ùs   ‚(Ÿ	(r€   r   r,   )ÚnextÚ	enumerateÚStopIterationÚsetÚrangeÚlenrH   r   rP   r
   r   rL   ÚaddrS   )	r·   Ústart_indexÚbracket_stackÚidsrÀ   rE   Ú_ÚstartÚjs	            r9   Ú#get_leaves_inside_matching_bracketsrÐ   e  sù   € ðäñ 
Ü# FÔ+ó
ó 
ˆð
 €MÜ
‹%€CÜ�;¤ F£Ö,ˆØ‰yˆØ�9‰9Ô(Ó(Ø× Ñ ¤'¨$¯)©)Ñ"4°aÐ!8Ô9Ø�9‰9Ô(Õ(Þ §¡¨m¸BÑ.?ÀÑ.BÓ!BØ(×,Ñ,Ó.‘�Ü˜u¨!¡eÖ,�AØ—G‘GœB˜v™y›MÖ*ó -ð Ø€Jñ -ð €Jøô ó Ü‹uŠðús   ‚C< Ã<DÄDrg   )@r6   Úcollections.abcr   r   Údataclassesr   r   Útypingr   r   r	   Úblack.nodesr
   r   r   r   r   r   r   r   r   r   Úblib2to3.pgen2r   Úblib2to3.pytreer   r   ÚLNrŽ   r’   r”   r“   r•   r   r�   r   r   r   r    r"   ÚVBARÚ
CIRCUMFLEXÚAMPERÚ	LEFTSHIFTÚ
RIGHTSHIFTÚPLUSÚMINUSÚSTARÚSLASHÚDOUBLESLASHÚPERCENTÚATÚTILDEÚ
DOUBLESTARr+   r-   Ú	Exceptionr/   r;   rT   rR   r½   rÆ   rÐ   r1   r8   r9   Ú<module>rç      sÂ  ðÚ 2ç .ß (ß )Ñ )÷÷ ÷ õ !ß &ð ˆ4�ˆ:Ñ€Ø€Ø	€Ø€Ø€ð !#Ð ˜Ó "Ø€�Ó ØÐ �%Ó Ø€�Ó Ø€�Ó ØÐ �UÓ à	‡J�J�Ø	×Ñ�aØ	‡K�K�Ø	‡O�O�QØ	×Ñ�aØ	‡J�J�Ø	‡K�K�Ø	‡J�J�Ø	‡K�K�Ø	×Ñ�qØ	‡M�M�1Ø	‡H�HˆaØ	‡K�K�Ø	×Ñ�að€�ó ð  €ˆeÓ ôW˜	ô Wð ÷\Dð \Dó ð\Dð~ 4ð ¨Hô ñ] Dð ]°H¸T±Nð ]Èhõ ]ð@¨ð °ô ð8°¸±ð À3ÀvÁ;õ r8   