+
    ÂHàj\<  ã                   óf   € ^ RI Ht ^ RIt^ RIt^ RIt^RIHtHtHtH	t	H
t
 ^RIHt  ! R R4      tR# )é    )ÚcontextmanagerN)ÚParserElementÚParseExceptionÚKeywordÚ__diag__Ú
__compat__)Úcore_builtin_exprsc                   óŽ   a € ] tR t^t o Rt ! R R4      t ! R R]P                  4      t]	RRR	R
R/V 3R lR lll4       t
RtV tR# )Úpyparsing_testz:
namespace class for classes useful in writing unit tests
c                   óH   a € ] tR t^t o RtR tR tR tR tR t	R t
RtV tR	# )
Ú&pyparsing_test.reset_pyparsing_contexta_  
Context manager to be used when writing unit tests that modify pyparsing config values:
- packrat parsing
- bounded recursion parsing
- default whitespace characters
- default keyword characters
- literal string auto-conversion class
- ``__diag__`` settings

Example:

.. testcode::

    ppt = pyparsing.pyparsing_test

    class MyTestClass(ppt.TestParseResultsAsserts):
        def test_literal(self):
            with ppt.reset_pyparsing_context():
                # test that literals used to construct
                # a grammar are automatically suppressed
                ParserElement.inline_literals_using(Suppress)

                term = Word(alphas) | Word(nums)
                group = Group('(' + term[...] + ')')

                # assert that the '()' characters
                # are not included in the parsed tokens
                self.assertParseAndCheckList(
                    group,
                    "(abc 123 def)",
                    ['abc', '123', 'def']
                )

            # after exiting context manager, literals
            # are converted to Literal expressions again
c                ó   € / V n         R # ©N©Ú_save_context©Úselfs   &Ú“/home/ubuntu/.hermes/installs/5f0a1ff4045d044e/environments/88679baa1dc64374a0cd943b62eeefb9/venv/lib/python3.14/site-packages/pyparsing/testing.pyÚ__init__Ú/pyparsing_test.reset_pyparsing_context.__init__>   s
   € Ø!#ˆDÖó    c                óô  € \         P                  V P                  R &   \        P                  V P                  R&   \         P
                  V P                  R&   \         P                  V P                  R&   \         P                  V P                  R&   \         P                  '       d)   \         P                  P                  V P                  R&   MRV P                  R&   \         P                  V P                  R&   \         P                  V P                  R&   \        P                   Uu/ uF  q\        \        V4      bK  	  upV P                  R	&   R
\        P                   /V P                  R&   V # u upi )Údefault_whitespaceÚdefault_keyword_charsÚliteral_string_classÚverbose_stacktraceÚpackrat_enabledÚpackrat_cache_sizeNÚpackrat_parseÚrecursion_enabledr   Úcollect_all_And_tokensr   )r   ÚDEFAULT_WHITE_CHARSr   r   ÚDEFAULT_KEYWORD_CHARSÚ_literalStringClassr   Ú_packratEnabledÚpackrat_cacheÚsizeÚ_parseÚ_left_recursion_enabledr   Ú
_all_namesÚgetattrr   r!   )r   Únames   & r   ÚsaveÚ+pyparsing_test.reset_pyparsing_context.saveA   sP  € Ü7D×7XÑ7XˆD×ÑÐ3Ñ4Ü:A×:WÑ:WˆD×ÑÐ6Ñ7ô ×1Ñ1ð ×ÑÐ5Ñ6ô 8E×7WÑ7WˆD×ÑÐ3Ñ4ä4A×4QÑ4QˆD×ÑÐ0Ñ1Ü×,×,Ð,ä!×/Ñ/×4Ñ4ð ×"Ñ"Ð#7Ò8ð <@�×"Ñ"Ð#7Ñ8Ü2?×2FÑ2FˆD×Ñ˜Ñ/ä×5Ñ5ð ×ÑÐ2Ñ3ô
 ;C×:MÒ:Mó.Ù:M°$”gœh¨Ó-Ò-Ñ:Mñ.ˆD×Ñ˜zÑ*ð
 )¬*×*KÑ*Kð0ˆD×Ñ˜|Ñ,ð ˆKùò.s   Ä+E5c                óŠ  € \         P                  V P                  R ,          8w  d(   \         P                  ! V P                  R ,          4       V P                  R,          \         n        V P                  R,          \
        n        \         P                  ! V P                  R,          4       V P                  R,          P                  4        F3  w  rV'       d   \        P                  M\        P                  ! V4       K5  	  R\         n        V P                  R,          '       d)   \         P                  ! V P                  R,          4       MV P                  R,          \         n        V P                  R	,          \         n        \          F  pVP#                  R4       K  	  V P                  R
,          \$        n        V # )r   r   r   r   r   Fr   r   r   r    r   )r   r"   r   Úset_default_whitespace_charsr   r   r#   Úinline_literals_usingÚitemsr   ÚenableÚdisabler%   Úenable_packratr(   r)   r	   Ú	set_debugr   r!   )r   r,   ÚvalueÚexprs   &   r   ÚrestoreÚ.pyparsing_test.reset_pyparsing_context.restorea   sT  € ô ×1Ñ1Ø×%Ñ%Ð&:Õ;ô<ô ×:Ò:Ø×&Ñ&Ð';Õ<ôð 04×/AÑ/AÐBVÕ/WŒMÔ,à,0×,>Ñ,>Ð?VÕ,WŒGÔ)Ü×/Ò/Ø×"Ñ"Ð#9Õ:ôð  $×1Ñ1°*Õ=×CÑCÖE‘�ß$)”—’¬x×/?Ñ/?Ð?ÀÖFñ  Fð -2ŒMÔ)Ø×!Ñ!Ð"3×4Ô4Ü×,Ò,¨T×-?Ñ-?Ð@TÕ-UÕVà'+×'9Ñ'9¸/Õ'J”Ô$Ø48×4FÑ4FØ#õ5ŒMÔ1÷
 +�Ø—‘˜uÖ%ñ +ð 15×0BÑ0BÀ<Õ0PŒJÔ-àˆKr   c                óp   € \        V 4      ! 4       pVP                  P                  V P                  4       V# r   )Útyper   Úupdate)r   Úrets   & r   ÚcopyÚ+pyparsing_test.reset_pyparsing_context.copy†   s,   € Ü�t”*“,ˆCØ×Ñ×$Ñ$ T×%7Ñ%7Ô8ØˆJr   c                ó"   € V P                  4       # r   )r-   r   s   &r   Ú	__enter__Ú0pyparsing_test.reset_pyparsing_context.__enter__‹   s   € Ø—9‘9“;Ðr   c                ó&   € V P                  4        R # r   )r9   )r   Úargss   &*r   Ú__exit__Ú/pyparsing_test.reset_pyparsing_context.__exit__Ž   s   € Ø�L‰LŽNr   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r-   r9   r?   rB   rF   Ú__static_attributes__Ú__classdictcell__©Ú__classdict__s   @r   Úreset_pyparsing_contextr      s0   ø‡ € ñ#	òJ	$ò	ò@#	òJ	ò
	÷	ð 	r   rQ   c                   óf   a € ] tR t^‘t o RtR	R ltR
R ltR
R ltRR lt]	]
RR3R l4       tRtV tR# )Ú&pyparsing_test.TestParseResultsAssertsz[
A mixin class to add parse results assertion methods to normal unittest.TestCase classes.
Nc                óž   € Ve"   V P                  W!P                  4       VR7       Ve$   V P                  W1P                  4       VR7       R# R# )z­
Unit test assertion to compare a :class:`ParseResults` object with an optional ``expected_list``,
and compare any defined results names with an optional ``expected_dict``.
N©Úmsg)ÚassertEqualÚas_listÚas_dict)r   ÚresultÚexpected_listÚexpected_dictrV   s   &&&&&r   ÚassertParseResultsEqualsÚ?pyparsing_test.TestParseResultsAsserts.assertParseResultsEquals–   sI   € ð Ò(Ø× Ñ  ·±Ó0@ÀcÐ ÔJØÒ(Ø× Ñ  ·±Ó0@ÀcÐ ÖJñ )r   c                óÈ   € VP                  VRR7      pV'       d   \        VP                  4       4       M\        VP                  4       4       V P	                  WcVR7       R# )z¥
Convenience wrapper assert to test a parser element and input string, and assert that
the resulting :meth:`ParseResults.as_list` is equal to the ``expected_list``.
T©Ú	parse_all)r[   rV   N©Úparse_stringÚprintÚdumprX   r]   )r   r8   Útest_stringr[   rV   ÚverboserZ   s   &&&&&& r   ÚassertParseAndCheckListÚ>pyparsing_test.TestParseResultsAsserts.assertParseAndCheckList¢   óM   € ð ×&Ñ& {¸dÐ&ÓCˆFßÜ�f—k‘k“mÕ$ä�f—n‘nÓ&Ô'Ø×)Ñ)¨&ÐSVÐ)ÖWr   c                óÈ   € VP                  VRR7      pV'       d   \        VP                  4       4       M\        VP                  4       4       V P	                  WcVR7       R# )z¥
Convenience wrapper assert to test a parser element and input string, and assert that
the resulting :meth:`ParseResults.as_dict` is equal to the ``expected_dict``.
Tr`   )r\   rV   Nrb   )r   r8   rf   r\   rV   rg   rZ   s   &&&&&& r   ÚassertParseAndCheckDictÚ>pyparsing_test.TestParseResultsAsserts.assertParseAndCheckDict°   rj   r   c                ó®  € Vw  rEVf   T P                  YCe   TMRR7       R# \        WR4       UUu. uF  w  rg. VOVN5NK  	  pppV FÖ  w  ršp\        R V 4       R4      p\        R V 4       R4      pVeI   T P                  YË;'       g    TR7      ;_uu_ 4        \	        V
\
        4      '       d   V
h RRR4       Kx  \        R V 4       R4      p\        R V 4       R4      pWÞ3R8w  d"   T P                  T
TTT;'       g    TR	7       KÇ  \        R
V	: 24       KØ  	  T P                  YCe   TMRR7       R# u uppi   + '       g   i     EK  ; i)a–  
Unit test assertion to evaluate output of
:meth:`~ParserElement.run_tests`.

If a list of list-dict tuples is given as the
``expected_parse_results`` argument, then these are zipped
with the report tuples returned by ``run_tests()``
and evaluated using :meth:`assertParseResultsEquals`.
Finally, asserts that the overall
`:meth:~ParserElement.run_tests` success value is ``True``.

:param run_tests_report: the return value from :meth:`ParserElement.run_tests`
:type run_tests_report: tuple[bool, list[tuple[str, ParseResults | Exception]]]
:param expected_parse_results: (optional)
:type expected_parse_results: list[tuple[str | list | dict | Exception, ...]]
Nzfailed runTestsrU   c              3   óV   "  € T F  p\        V\        4      '       g   K  Vx € K!  	  R # 5ir   )Ú
isinstanceÚstr©Ú.0Úexps   & r   Ú	<genexpr>ÚNpyparsing_test.TestParseResultsAsserts.assertRunTestResults.<locals>.<genexpr>á   s   é € Ð Q±¨¼JÀsÌC×<P§¢³ùó   ‚)Ÿ
)c              3   ó†   "  € T F7  p\        V\        4      '       g   K  \        V\        4      '       g   K3  Vx € K9  	  R # 5ir   )rp   r<   Ú
issubclassÚ	Exceptionrr   s   & r   ru   rv   ã   s2   é € ð á#+˜CÜ% c¬4×0ô ä5?ÀÄY×5O÷ šÛ#+ùs   ‚AŸA·
A)Úexpected_exceptionrV   c              3   óV   "  € T F  p\        V\        4      '       g   K  Vx € K!  	  R # 5ir   )rp   Úlistrr   s   & r   ru   rv   ò   ó   é € ÐJ© ´J¸sÄD×4IŸš«ùrw   c              3   óV   "  € T F  p\        V\        4      '       g   K  Vx € K!  	  R # 5ir   )rp   Údictrr   s   & r   ru   rv   õ   r~   rw   )r[   r\   rV   zno validation for ©NN)Ú
assertTrueÚzipÚnextÚassertRaisesrp   rz   r]   rd   )r   Úrun_tests_reportÚexpected_parse_resultsrV   Úrun_test_successÚrun_test_resultsÚrptÚexpectedÚmergedrf   rZ   Úfail_msgr{   r[   r\   s   &&&&           r   ÚassertRunTestResultsÚ;pyparsing_test.TestParseResultsAsserts.assertRunTestResults¾   sœ  € ð& 2BÑ.Ðà%Ò-Ø—‘Ø$²©#ÐFWð  ô ñ ô &)Ð)9Ô%Rôá%R‘M�Cð !�#Ð �xÔ Ù%Rð ñ ó 28Ñ-� Xô  Ñ Q±Ó QÐSWÓX�Ü%)ñá#+óð
 ó&Ð"ð &Ò1Ø×*Ñ*Ø+=Ç?À?Èsð +÷ õ ô & f¬i×8Ò8Ø"(˜Lð 9÷ñ ô %)ÙJ©ÓJÈDó%�Mô %)ÙJ©ÓJÈDó%�Mð &Ð5¸ÔEØ×5Ñ5Ø"Ø*7Ø*7Ø (§ ¨Cð	 6ö ô Ð 2°;±/ÐBÖCñG 28ðL �O‰OØ ª_¡cÐBSð ö ùóU÷$÷ ñ ús   ±D<ÂEÅEc              #  ó`  "  € VeW   \        V\        4      '       d   \        P                  ! V4      pV P	                  WVR7      ;_uu_ 4       pVx € R R R 4       R # V P                  WR7      ;_uu_ 4       pVx € R R R 4       R #   + '       g   i     R # ; i  + '       g   i     R # ; i5i)NrU   )rp   rq   ÚreÚescapeÚassertRaisesRegexr…   )r   Úexc_typeÚexpected_msgrV   Úctxs   &&&& r   ÚassertRaisesParseExceptionÚApyparsing_test.TestParseResultsAsserts.assertRaisesParseException  sŒ   é € ð Ò'Ü˜l¬C×0Ò0Ü#%§9¢9¨\Ó#:�LØ×+Ñ+¨HÈÐ+×LÔLÐPSØ’I÷ MÑLð ×&Ñ& xÐ&×9Ô9¸SØ’I÷ :Ñ9÷	 M×LÐLú÷ :×9Ð9üs6   ‚AB.ÁBÁ$B.Á7BÁ<
B.ÂB	Â	B.ÂB+	Â%	B.© )NNN)NTr�   )rH   rI   rJ   rK   rL   r]   rh   rl   rŽ   r   r   r—   rM   rN   rO   s   @r   ÚTestParseResultsAssertsrS   ‘   s>   ø‡ € ñ	ô
	Kô	Xô	XôG	ðR 
à)¸À$ó	ó 
ö	r   rš   NTÚindentÚ Úbase_1c                ó  <€ V ^8„  d   QhRS[ RS[P                  S[,          RS[P                  S[,          RS[RS[ RS[P                  S[ ,          RS[P                  S[ ,          RS[P
                  S[ S[3,          R	S[R
S[ /
# )é   ÚsÚ
start_lineÚend_lineÚexpand_tabsÚeol_markÚmark_spacesÚmark_controlr›   r�   Úreturn)rq   ÚtypingÚOptionalÚintÚboolÚUnion)ÚformatrP   s   "€r   Ú__annotate__Úpyparsing_test.__annotate__  sª   ø€ ÷ x
ñ x
Ùðx
á—O‘O¡CÕ(ðx
ñ —/‘/¡#Õ&ðx
ñ ð	x
ñ
 ðx
ñ —_‘_¡SÕ)ðx
ñ —o‘o¡cÕ*ðx
ñ —‘™S¡#˜XÕ&ðx
ñ ðx
ñ 
ñx
r   c          
     óD  aaa€ V'       d   V P                  4       p \        S\        4      '       d
   RS,          oSP                  4       oVeÏ   \        P                  ! \
        V4      pVR8X  dQ   \        \        ^ ^!4      \        RR4      4       U	U
u/ uF  w  ršWšbK	  	  pp	p
RV^&   \
        P                  V4      pRoMK\        V4      p\
        P                  \        \        ^ ^ 4      4      ^.,            U	u/ uF  q™VbK  	  up	4      pV P                  V4      p VeL   VR8w  dE   VR8X  d,   \
        P                  ^	R^ R/4      pV P                  V4      p MV P                  RV4      p Vf   ^ pVf   \        V P                  4       4      p\        V\        V P                  4       4      4      p\        \!        ^ V4      V4      pVR8w  d%   V P                  4       \!        W,
          ^ 4      V pM:V P#                  R	4      \!        W,
          ^ 4      V  Uu. uF  pVR	,           NK  	  ppV'       g   R# \        \        V4      4      o\!        R
 V 4       4      pS RS^,           ,           2pV^c8¼  dS   TV'       d   RMR,           RP%                  R \        \!        V^d,          ^4      4       4       4      ,           R,           pMRpV'       d   RMRV,           RP%                  R \        V) ^
,          ) 4       4       4      ,           R,           pRpTV'       d   RMR,           VV) ^
,          ) ,          ,           R,           pVV,           V,           RP%                  VVV3R l\'        WáV,           R7       4       4      ,           R,           # u up
p	i u up	i u upi )u®  
Helpful method for debugging a parser - prints a string with line and column numbers.
(Line and column numbers are 1-based by default - if debugging a parse action,
pass base_1=False, to correspond to the loc value passed to the parse action.)

:param s: string to be printed with line and column numbers
:param start_line: starting line number in s to print (default=1)
:param end_line: ending line number in s to print (default=len(s))
:param expand_tabs: expand tabs to spaces, to match the pyparsing default
:param eol_mark: string to mark the end of lines, helps visualize trailing spaces
:param mark_spaces: special character to display in place of spaces
:param mark_control: convert non-printing control characters to a placeholding
                     character; valid values:

                     - ``"unicode"`` - replaces control chars with Unicode symbols, such as "â��" and "â�Š"
                     - any single character string - replace control characters with given string
                     - ``None`` (default) - string is displayed as-is


:param indent: string to indent with line and column numbers; if an int
               is passed, converted to ``" " * indent``
:param base_1: whether to label string using base 1; if False, string will be
               labeled based at 0

:returns: input string with leading line numbers and column number headers

.. versionchanged:: 3.2.0
   New ``indent`` and ``base_1`` arguments.
Ú Úunicodei $  i3$  i!$  rœ   i	$  i#$  u   â�Šc              3   ó8   "  € T F  p\        V4      x € K  	  R # 5ir   )Úlen)rs   Úlines   & r   ru   Ú3pyparsing_test.with_line_numbers.<locals>.<genexpr>k  s   é € Ð9±¨œ3˜tŸ9˜9³ùs   ‚c              3   óJ   "  € T F  pR V^,           ^d,           2x € K  	  R# 5i)r±   Nzc                                                                                                   r™   ©rs   Úis   & r   ru   r¶   r  s(   é € ð á?˜ð  �j ! a¥%¨3¥ Õ0Û?ùs   ‚!#Ú
c              3   óH   "  € T F  pR V^,           ^
,           2x € K  	  R# 5i)z	         Nr™   r¸   s   & r   ru   r¶   ~  s!   é € ÐXÑ:W°Q˜	 1 q¥5¨B¥, Õ0Ó:Wùs   ‚ "Ú
1234567890Ú0c              3   óF   <"  € T F  w  rS VS R 2 RV S 2x € K  	  R# 5i)ÚdÚ:Nr™   )rs   r¹   rµ   r¤   r›   Úlineno_widths   &  €€€r   ru   r¶   ‰  s7   øé € ð áL‘G�Að �(˜1˜l˜^¨1Ð,Ð-¨Q¨t¨f°X°JÕ?ÛLùs   ƒ!)Ústart)Ú
expandtabsrp   rª   r¨   Úcastrq   rƒ   ÚrangeÚ	maketransÚordr}   Ú	translateÚreplacer´   Ú
splitlinesÚminÚmaxÚsplitÚjoinÚ	enumerate)r    r¡   r¢   r£   r¤   r¥   r¦   r›   r�   ÚcÚuÚtranstable_mapÚtblÚord_mark_controlÚs_linesrµ   Úmax_line_lenÚleadÚheader0Úheader1ÚdigitsÚheader2rÁ   s   &&&&f&&d$             @r   Úwith_line_numbersÚ pyparsing_test.with_line_numbers  sk  ú€ ÷T Ø—‘“ˆAÜ�fœc×"Ò"Ø˜6•\ˆFØ×"Ñ"Ó$ˆØÒ#Ü!Ÿ;š;¤s¨LÓ9ˆLØ˜yÔ(ä%(¬¨q°"«´u¸VÀVÓ7LÔ%Mô"Ù%M™T˜Q�A’DÑ%Mð ñ "ð '-�˜sÑ#Ü—m‘m NÓ3�Ø‘ä#& |Ó#4Ð Ü—m‘mÜ26´u¸QÀ³|Ó2DÈÀuÖ2LÓMÑ2L¨QÐ(Ò(Ñ2LÑMó�ð —‘˜CÓ ˆAØÒ" {°cÔ'9Ø˜iÔ'Ü—m‘m Q¨°°FÐ$;Ó<�Ø—K‘K Ó$‘à—I‘I˜c ;Ó/�ØÒØˆJØÒÜ˜1Ÿ<™<›>Ó*ˆHÜ�x¤ Q§\¡\£^Ó!4Ó5ˆÜœ˜Q 
Ó+¨XÓ6ˆ
à˜9Ô$Ø—l‘l“n¤S¨Õ)<¸aÓ%@À8ÐL‰Gð ŸG™G E›N¬3¨zÕ/BÀAÓ+FÈÑRóáR�Dð �u—�ÙRð ð ÷ Ùäœ3˜x›=Ó)ˆÜÑ9±Ó9Ó9ˆØ�˜# °Õ!1Õ2Ð3Ð4ˆà˜2Ôàß‘2 Sõ*à—'‘'ñ ä"¤3 |°sÕ':¸AÓ#>Ô?óó õð õñ ð ˆG÷ ‰R˜sØõà�g‰gÑX¼%À<À-ÐSUÕBUÐ@VÔ:WÓXÓXõYð õð 	ð ˆàŸ&‘B cÕ*¨V¸,¸È"Õ9LÐ7MÕ-NÕNÐQUÕUð 	ð Øõàõð �i‰iö ä(¨ÀVÕ8KÕLóó õð õð		
ùó}"ùò Nùò&s   ÂNÃ:NÈNr™   )NNTÚ|NN)rH   rI   rJ   rK   rL   rQ   ÚunittestÚTestCaserš   ÚstaticmethodrÜ   rM   rN   rO   s   @r   r   r      s^   ø‡ € ñ÷wñ wôrB (×"3Ñ"3ô BðH ñx
ð *,ðx
ð ÷x
ò x
ó öx
r   r   )Ú
contextlibr   r‘   r¨   rß   Úcorer   r   r   r   r   rœ   r	   r   r™   r   r   Ú<module>rä      s.   ðõ &Û 	Û Û ÷õ õ !÷{
ó {
r   