ó
    ”“,j\<  ã                   ód   • S SK Jr  S SKrS SKrS SKrSSKJrJrJrJ	r	J
r
  SSKJr   " S S5      rg)é    )ÚcontextmanagerNé   )ÚParserElementÚParseExceptionÚKeywordÚ__diag__Ú
__compat__)Úcore_builtin_exprsc                   ó2  • \ rS rSrSr " S S5      r " S S\R                  5      r\	      SS	SS
.S\
S\R                  \   S\R                  \   S\S\
S\R                  \
   S\R                  \
   S\R                  \
\4   S\S\
4S jjj5       rSrg)Úpyparsing_testé   z:
namespace class for classes useful in writing unit tests
c                   ó<   • \ rS rSrSrS rS rS rS rS r	S r
S	rg
)Ú&pyparsing_test.reset_pyparsing_contexté   a_  
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                 ó   • 0 U l         g ©N©Ú_save_context©Úselfs    ÚŸC:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\pyparsing/testing.pyÚ__init__Ú/pyparsing_test.reset_pyparsing_context.__init__>   s
   € Ø!#ˆDÕó    c                 óô  • [         R                  U R                  S'   [        R                  U R                  S'   [         R
                  U R                  S'   [         R                  U R                  S'   [         R                  U R                  S'   [         R                  (       a(  [         R                  R                  U R                  S'   OS U R                  S'   [         R                  U R                  S'   [         R                  U R                  S'   [        R                   Vs0 s H  o[        [        U5      _M     snU R                  S	'   S
[        R                   0U R                  S'   U $ s  snf )NÚdefault_whitespaceÚdefault_keyword_charsÚliteral_string_classÚverbose_stacktraceÚpackrat_enabledÚpackrat_cache_sizeÚ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   sM  € Ü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                 ó,  • [         R                  U R                  S   :w  a#  [         R                  " U R                  S   5        U R                  S   [         l        U R                  S   [
        l        [         R                  " U R                  S   5        U R                  S   R                  5        H2  u  pU(       a  [        R                  O[        R                  " U5        M4     S[         l        U R                  S   (       a$  [         R                  " U R                  S   5        OU R                  S	   [         l        U R                  S
   [         l        [          H  nUR#                  S5        M     U R                  S   [$        l        U $ )Nr   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   sQ  € ô ×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Ü×,Ò,¨T×-?Ñ-?Ð@TÑ-UÕVà'+×'9Ñ'9¸/Ñ'J”Ô$Ø48×4FÑ4FØ#ñ5ŒMÔ1÷
 +�Ø—‘˜uÖ%ñ +ð 15×0BÑ0BÀ<Ñ0PŒJÔ-àˆKr   c                 óp   • [        U 5      " 5       nUR                  R                  U R                  5        U$ r   )Útyper   Úupdate)r   Úrets     r   ÚcopyÚ+pyparsing_test.reset_pyparsing_context.copy†   s,   € Ü�t”*“,ˆCØ×Ñ×$Ñ$ T×%7Ñ%7Ô8ØˆJr   c                 ó"   • U R                  5       $ r   )r0   r   s    r   Ú	__enter__Ú0pyparsing_test.reset_pyparsing_context.__enter__‹   s   € Ø—9‘9“;Ðr   c                 ó$   • U R                  5         g r   )r<   )r   Úargss     r   Ú__exit__Ú/pyparsing_test.reset_pyparsing_context.__exit__Ž   s   € Ø�L‰L�Nr   r   N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__r   r0   r<   rB   rE   rI   Ú__static_attributes__© r   r   Úreset_pyparsing_contextr      s(   † ñ#	òJ	$ò	ò@#	òJ	ò
	õ	r   rR   c                   ób   • \ rS rSrSr S
S jr SS jr SS jr SS jr\	\
SS4S j5       rS	rg)Ú&pyparsing_test.TestParseResultsAssertsé‘   z[
A mixin class to add parse results assertion methods to normal unittest.TestCase classes.
Nc                 óŠ   • Ub  U R                  X!R                  5       US9  Ub  U R                  X1R                  5       US9  gg)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_dictrX   s        r   ÚassertParseResultsEqualsÚ?pyparsing_test.TestParseResultsAsserts.assertParseResultsEquals–   sI   € ð Ñ(Ø× Ñ  ·±Ó0@ÀcÐ ÑJØÑ(Ø× Ñ  ·±Ó0@ÀcÐ ÒJð )r   c                 ó¸   • UR                  USS9nU(       a  [        UR                  5       5        O[        UR                  5       5        U R	                  XcUS9  g)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]   rX   N©Úparse_stringÚprintÚdumprZ   r_   )r   r;   Útest_stringr]   rX   Úverboser\   s          r   ÚassertParseAndCheckListÚ>pyparsing_test.TestParseResultsAsserts.assertParseAndCheckList¢   óM   € ð ×&Ñ& {¸dÐ&ÐCˆFÞÜ�f—k‘k“mÕ$ä�f—n‘nÓ&Ô'Ø×)Ñ)¨&ÐSVÐ)ÒWr   c                 ó¸   • UR                  USS9nU(       a  [        UR                  5       5        O[        UR                  5       5        U R	                  XcUS9  g)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``.
Trb   )r^   rX   Nrd   )r   r;   rh   r^   rX   ri   r\   s          r   ÚassertParseAndCheckDictÚ>pyparsing_test.TestParseResultsAsserts.assertParseAndCheckDict°   rl   r   c                 ón  • Uu  pEUc  U R                  XCb  UOSS9  g[        XR5       VVs/ s H  u  pg/ UQUP7PM     nnnU HÃ  u  pšn[        S U 5       S5      n[        S U 5       S5      nUb;  U R                  XË=(       d    US9   [	        U
[
        5      (       a  U
e SSS5        Mj  [        S U 5       S5      n[        S U 5       S5      nXÞ4S	:w  a  U R                  U
UUU=(       d    US
9  M´  [        SU	< 35        MÅ     U R                  XCb  UOSS9  gs  snnf ! , (       d  f       Mñ  = f)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 runTestsrW   c              3   óT   #   • U  H  n[        U[        5      (       d  M  Uv •  M      g 7fr   )Ú
isinstanceÚstr©Ú.0Úexps     r   Ú	<genexpr>ÚNpyparsing_test.TestParseResultsAsserts.assertRunTestResults.<locals>.<genexpr>á   s   é € Ð Q²¨¼JÀsÌC×<P§¡²ùó   ‚(Ÿ	(c              3   ó‚   #   • U  H5  n[        U[        5      (       d  M  [        U[        5      (       d  M1  Uv •  M7     g 7fr   )rr   r?   Ú
issubclassÚ	Exceptionrt   s     r   rw   rx   ã   s2   é € ð â#+˜CÜ% c¬4×0ó ä5?ÀÄY×5O÷ ™Ú#+ùs   ‚?Ÿ?¶	?)Úexpected_exceptionrX   c              3   óT   #   • U  H  n[        U[        5      (       d  M  Uv •  M      g 7fr   )rr   Úlistrt   s     r   rw   rx   ò   ó   é € ÐJª ´J¸sÄD×4IŸ™ªùry   c              3   óT   #   • U  H  n[        U[        5      (       d  M  Uv •  M      g 7fr   )rr   Údictrt   s     r   rw   rx   õ   r€   ry   ©NN)r]   r^   rX   zno validation for )Ú
assertTrueÚzipÚnextÚassertRaisesrr   r|   r_   rf   )r   Úrun_tests_reportÚexpected_parse_resultsrX   Úrun_test_successÚrun_test_resultsÚrptÚexpectedÚmergedrh   r\   Ú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Â
D%Ä%
D4	c              #   ó   #   • UbI  [        U[        5      (       a  [        R                  " U5      nU R	                  XUS9 nUv •  S S S 5        g U R                  XS9 nUv •  S S S 5        g ! , (       d  f       g = f! , (       d  f       g = f7f)NrW   )rr   rs   ÚreÚescapeÚassertRaisesRegexr‡   )r   Úexc_typeÚexpected_msgrX   Úctxs        r   ÚassertRaisesParseExceptionÚApyparsing_test.TestParseResultsAsserts.assertRaisesParseException  s€   é € ð Ñ'Ü˜l¬C×0Ñ0Ü#%§9¢9¨\Ó#:�LØ×+Ñ+¨HÈÐ+ÑLÐPSØ’I÷ MÐLð ×&Ñ& xÐ&Ñ9¸SØ’I÷ :Ð9÷	 MÕLú÷ :Õ9üs5   ‚?BÁA,ÁBÁA=Á#	BÁ,
A:Á6BÁ=
BÂBrQ   )NNN)NTrƒ   )rK   rL   rM   rN   rO   r_   rj   rn   r�   r   r   r™   rP   rQ   r   r   ÚTestParseResultsAssertsrT   ‘   sW   † ñ	ð
 GKô
	Kð GKô	Xð GKô	Xð FJôG	ðR 
à)¸À$ó	ó 
ó	r   r›   NTÚ )ÚindentÚbase_1ÚsÚ
start_lineÚend_lineÚexpand_tabsÚeol_markÚmark_spacesÚmark_controlr�   rž   Úreturnc          
      óZ  ^^^• U(       a  U R                  5       n [        T[        5      (       a  ST-  mTR                  5       mUbË  [        R                  " [
        U5      nUS:X  aQ  [        [        SS5      [        SS5      5       V	V
s0 s H  u  pšXš_M	     nn	n
SUS'   [
        R                  U5      nS	mOH[        U5      n[
        R                  [        [        SS
5      5      S/-    V	s0 s H  o™U_M     sn	5      nU R                  U5      n UbH  US:w  aB  US:X  a*  [
        R                  SSS.5      nU R                  U5      n OU R                  SU5      n Uc  SnUc  [        U R                  5       5      n[        U[        U R                  5       5      5      n[        [!        SU5      U5      nUS:w  a   U R                  5       [!        X-
  S5      U nO3U R#                  S5      [!        X-
  S5      U  Vs/ s H  nUS-   PM
     nnU(       d  g	[        [        U5      5      m[!        S U 5       5      nT STS-   -   3nUS:¼  aA  UU(       a  S	OS-   S	R%                  S [        [!        US-  S5      5       5       5      -   S-   nOS	nU(       a  S	OSU-   S	R%                  S [        U* S-  * 5       5       5      -   S-   nSnUU(       a  S	OS-   UU* S-  * -  -   S-   nUU-   U-   SR%                  UUU4S j['        XáU-   S9 5       5      -   S-   $ s  sn
n	f s  sn	f s  snf )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.
Ú Úunicoder   é!   i $  i3$  i!$  é   rœ   é    i	$  i#$  )é	   r¬   u   â�Šc              3   ó8   #   • U  H  n[        U5      v •  M     g 7fr   )Úlen)ru   Úlines     r   rw   Ú3pyparsing_test.with_line_numbers.<locals>.<genexpr>k  s   é € Ð9²¨œ3˜tŸ9˜9²ùó   ‚r   éc   c              3   ó:   #   • U  H  nS  US-   S-   3v •  M     g7f)zc                                                                                                   r   éd   NrQ   ©ru   Úis     r   rw   r±   r  s(   é € ð â?˜ð  �j ! a¡%¨3¡ Õ0Ú?ùs   ‚rµ   Ú
c              3   ó8   #   • U  H  nS US-   S-   3v •  M     g7f)z	         r   é
   NrQ   r¶   s     r   rw   r±   ~  s!   é € ÐXÒ:W°Q˜	 1 q¡5¨B¡, Õ0Ò:Wùr²   rº   Ú
1234567890Ú0c              3   óF   >#   • U  H  u  pT UT S 3 SU T 3v •  M     g7f)ÚdÚ:NrQ   )ru   r·   r°   r£   r�   Úlineno_widths      €€€r   rw   r±   ‰  s7   øé € ð âL‘G�Að �(˜1˜l˜^¨1Ð,Ð-¨Q¨t¨f°X°JÕ?ÚLùs   ƒ!)Ústart)Ú
expandtabsrr   ÚintÚtypingÚcastrs   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       `  `              @r   Úwith_line_numbersÚ pyparsing_test.with_line_numbers  se  ú€ ö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¨°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   ÂLÃ/L#È L(rQ   )NNTÚ|NN)rK   rL   rM   rN   rO   rR   ÚunittestÚTestCaser›   Ústaticmethodrs   rÄ   ÚOptionalrÃ   ÚboolÚUnionrÝ   rP   rQ   r   r   r   r      sü   † ñ÷wñ wôrB (×"3Ñ"3ô BðH ð ,0Ø)-Ø ØØ,0Ø-1ðx
ð *,Øòx
Øðx
à—O‘O CÑ(ðx
ð —/‘/ #Ñ&ðx
ð ð	x
ð
 ðx
ð —_‘_ SÑ)ðx
ð —o‘o cÑ*ðx
ð —‘˜S #˜XÑ&ðx
ð ðx
ð 
õx
ó óx
r   r   )Ú
contextlibr   r“   rÄ   rà   Úcorer   r   r   r   r	   rœ   r
   r   rQ   r   r   Ú<module>rè      s.   ðõ &Û 	Û Û ÷õ õ !÷{
ò {
r   