Ë
    ëmxi\<  ã                   ód   — d dl mZ d dlZd dlZd dlZddlmZmZmZm	Z	m
Z
 ddlmZ  G d„ d«      Zy)é    )ÚcontextmanagerNé   )ÚParserElementÚParseExceptionÚKeywordÚ__diag__Ú
__compat__)Úcore_builtin_exprsc                   ó$  — e Zd ZdZ G d„ d«      Z G d„ dej                  «      Ze	 	 	 	 	 	 dddd	œd
e	de
j                  e   de
j                  e   dede	de
j                  e	   de
j                  e	   de
j                  e	ef   dede	fd„«       Zy)Úpyparsing_testzB
    namespace class for classes useful in writing unit tests
    c                   ó4   — e Zd ZdZd„ Zd„ Zd„ Zd„ Zd„ Zd„ Z	y)	ú&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                 ó   — i | _         y ©N)Ú_save_context©Úselfs    úH/home/htdocs/ttos/venv/lib/python3.12/site-packages/pyparsing/testing.pyÚ__init__z/pyparsing_test.reset_pyparsing_context.__init__>   s
   € Ø!#ˆDÕó    c                 óæ  — t         j                  | j                  d<   t        j                  | j                  d<   t         j
                  | j                  d<   t         j                  | j                  d<   t         j                  | j                  d<   t         j                  r(t         j                  j                  | j                  d<   nd | j                  d<   t         j                  | j                  d<   t         j                  | j                  d<   t        j                  D �ci c]  }|t        t        |«      “Œ c}| j                  d	<   d
t        j                   i| j                  d<   | S c c}w )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   Úsavez+pyparsing_test.reset_pyparsing_context.saveA   sJ  € Ü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ö.Ø26�”gœh¨Ó-Ñ-ò.ˆD×Ñ˜zÑ*ð
 )¬*×*KÑ*Kð0ˆD×Ñ˜|Ñ,ð ˆKùò.s   Ä%E.c                 ó
  — t         j                  | j                  d   k7  r"t        j                  | j                  d   «       | j                  d   t         _        | j                  d   t
        _        t        j                  | j                  d   «       | j                  d   j                  «       D ]-  \  }} |rt        j                  nt        j                  |«       Œ/ dt         _        | j                  d   r#t        j                  | j                  d   «       n| j                  d	   t         _        | j                  d
   t         _        t         D ]  }|j#                  d«       Œ | j                  d   t$        _        | S )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   Úrestorez.pyparsing_test.reset_pyparsing_context.restorea   s]  € ô ×1Ñ1Ø×%Ñ%Ð&:Ñ;ò<ô ×:Ñ:Ø×&Ñ&Ð';Ñ<ôð 04×/AÑ/AÐBVÑ/WŒMÔ,à,0×,>Ñ,>Ð?VÑ,WŒGÔ)Ü×/Ñ/Ø×"Ñ"Ð#9Ñ:ôð  $×1Ñ1°*Ñ=×CÑCÓEò G‘��eØ?¡E”—’¬x×/?Ñ/?ÀÕFðGð -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   —  t        | «      «       }|j                  j                  | j                  «       |S r   )Útyper   Úupdate)r   Úrets     r   Úcopyz+pyparsing_test.reset_pyparsing_context.copy†   s.   € Ø”$�t“*“,ˆCØ×Ñ×$Ñ$ T×%7Ñ%7Ô8ØˆJr   c                 ó"   — | j                  «       S r   )r,   r   s    r   Ú	__enter__z0pyparsing_test.reset_pyparsing_context.__enter__‹   s   € Ø—9‘9“;Ðr   c                 ó$   — | j                  «        y r   )r7   )r   Úargss     r   Ú__exit__z/pyparsing_test.reset_pyparsing_context.__exit__Ž   s   € Ø�L‰L�Nr   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r,   r7   r<   r>   rA   © r   r   Úreset_pyparsing_contextr      s(   „ ñ#	òJ	$ò	ò@#	òJ	ò
	ó	r   rG   c                   óP   — e Zd ZdZ	 dd„Z	 d	d„Z	 d	d„Z	 d
d„Zee	ddfd„«       Z
y)ú&pyparsing_test.TestParseResultsAssertszk
        A mixin class to add parse results assertion methods to normal unittest.TestCase classes.
        Nc                 ó–   — |�"| j                  ||j                  «       |¬«       |�#| j                  ||j                  «       |¬«       yy)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_dictrL   s        r   ÚassertParseResultsEqualsz?pyparsing_test.TestParseResultsAsserts.assertParseResultsEquals–   sM   € ð Ð(Ø× Ñ  °·±Ó0@ÀcÐ ÔJØÐ(Ø× Ñ  °·±Ó0@ÀcÐ ÕJð )r   c                 ó¼   — |j                  |d¬«      }|rt        |j                  «       «       nt        |j                  «       «       | j	                  |||¬«       y)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)rQ   rL   N©Úparse_stringÚprintÚdumprN   rS   )r   r6   Útest_stringrQ   rL   ÚverboserP   s          r   ÚassertParseAndCheckListz>pyparsing_test.TestParseResultsAsserts.assertParseAndCheckList¢   óO   € ð ×&Ñ& {¸dÐ&ÓCˆFÙÜ�f—k‘k“mÕ$ä�f—n‘nÓ&Ô'Ø×)Ñ)¨&ÀÐSVÐ)ÕWr   c                 ó¼   — |j                  |d¬«      }|rt        |j                  «       «       nt        |j                  «       «       | j	                  |||¬«       y)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``.
            TrU   )rR   rL   NrW   )r   r6   r[   rR   rL   r\   rP   s          r   ÚassertParseAndCheckDictz>pyparsing_test.TestParseResultsAsserts.assertParseAndCheckDict°   r^   r   c                 ój  — |\  }}|€| j                  ||�|¬«       yd¬«       yt        ||«      D ��cg c]  \  }}g |¢|‘­‘Œ }}}|D ]·  \  }	}
}t        d„ |D «       d«      }t        d„ |D «       d«      }|�4| j                  ||xs |¬«      5  t	        |
t
        «      r|
‚	 ddd«       Œct        d„ |D «       d«      }t        d„ |D «       d«      }||fd	k7  r| j                  |
|||xs |¬
«       Œªt        d|	›�«       Œ¹ | j                  ||�|¬«       yd¬«       yc c}}w # 1 sw Y   ŒçxY w)a2  
            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 runTestsrK   c              3   óB   K  — | ]  }t        |t        «      sŒ|–— Œ y ­wr   )Ú
isinstanceÚstr©Ú.0Úexps     r   ú	<genexpr>zNpyparsing_test.TestParseResultsAsserts.assertRunTestResults.<locals>.<genexpr>á   s   è ø€ Ò Q¨¼JÀsÌCÕ<P¤Ñ Qùó   ‚˜c              3   ó`   K  — | ]&  }t        |t        «      rt        |t        «      r|–— Œ( y ­wr   )rc   r9   Ú
issubclassÚ	Exceptionre   s     r   rh   zNpyparsing_test.TestParseResultsAsserts.assertRunTestResults.<locals>.<genexpr>ã   s+   è ø€ ò àÜ% c¬4Ô0´ZÀÄYÔ5Oô ñùs   ‚,.)Úexpected_exceptionrL   c              3   óB   K  — | ]  }t        |t        «      sŒ|–— Œ y ­wr   )rc   Úlistre   s     r   rh   zNpyparsing_test.TestParseResultsAsserts.assertRunTestResults.<locals>.<genexpr>ò   ó   è ø€ ÒJ ´J¸sÄDÕ4IœÑJùri   c              3   óB   K  — | ]  }t        |t        «      sŒ|–— Œ y ­wr   )rc   Údictre   s     r   rh   zNpyparsing_test.TestParseResultsAsserts.assertRunTestResults.<locals>.<genexpr>õ   rp   ri   ©NN)rQ   rR   rL   zno validation for )Ú
assertTrueÚzipÚnextÚassertRaisesrc   rl   rS   rY   )r   Úrun_tests_reportÚexpected_parse_resultsrL   Úrun_test_successÚrun_test_resultsÚrptÚexpectedÚmergedr[   rP   Úfail_msgrm   rQ   rR   s                  r   ÚassertRunTestResultsz;pyparsing_test.TestParseResultsAsserts.assertRunTestResults¾   sÃ  € ð& 2BÑ.ÐÐ.à%Ð-Ø—‘Ø$°°¨#ð  ô ð ð GXð  ô ð ô &)Ð)9Ð;QÓ%R÷á!�C˜ð !�#Ð �xÓ ðˆFñ ð 28ò #DÑ-�˜V Xô  Ñ Q°Ô QÐSWÓX�Ü%)ñà#+ôð
 ó&Ð"ð &Ð1Ø×*Ñ*Ø+=À8Â?Èsð +ó ñ )ô & f¬iÔ8Ø"(˜Lð 9÷)ð )ô %)ÙJ¨ÔJÈDó%�Mô %)ÙJ¨ÔJÈDó%�Mð & }Ð5¸ÒEØ×5Ñ5Ø"Ø*7Ø*7Ø (¢¨Cð	 6õ ô Ð 2°;°/ÐBÕCðG#DðL �O‰OØ ¨S¨_ cð õ ØBSð õ ùóU÷$)ð )ús   µD#ÂD)Ä)D2	c              #   ó  K  — |�Gt        |t        «      rt        j                  |«      }| j	                  |||¬«      5 }|–— d d d «       y | j                  ||¬«      5 }|–— d d d «       y # 1 sw Y   y xY w# 1 sw Y   y xY w­w)NrK   )rc   rd   ÚreÚescapeÚassertRaisesRegexrw   )r   Úexc_typeÚexpected_msgrL   Úctxs        r   ÚassertRaisesParseExceptionzApyparsing_test.TestParseResultsAsserts.assertRaisesParseException  s’   è ø€ ð Ð'Ü˜l¬CÔ0Ü#%§9¡9¨\Ó#:�LØ×+Ñ+¨H°lÈÐ+ÓLð ÐPSØ’I÷ð ð ×&Ñ& x°SÐ&Ó9ð ¸SØ’I÷ð ÷	ð ú÷ð üs4   ‚<B¾A-ÁBÁA9Á$	BÁ-A6Á2BÁ9BÁ>B)NNN)NTrs   )rB   rC   rD   rE   rS   r]   r`   r€   r   r   rˆ   rF   r   r   ÚTestParseResultsAssertsrI   ‘   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          
      ó  ‡‡‡— |r| j                  «       } t        ‰t        «      rd‰z  Š‰j                  «       Š|�Æt        j                  t
        |«      }|dk(  rPt        t        dd«      t        dd«      «      D �	�
ci c]  \  }	}
|	|
“Œ
 }}	}
d|d<   t
        j                  |«      }d	ŠnFt        |«      }t
        j                  t        t        dd
«      «      dgz   D �	ci c]  }	|	|“Œ c}	«      }| j                  |«      } |�F|dk7  rA|dk(  r*t
        j                  dddœ«      }| j                  |«      } n| j                  d|«      } |€d}|€t        | j                  «       «      }t        |t        | j                  «       «      «      }t        t!        d|«      |«      }|dk7  r!| j                  «       t!        ||z
  d«      | }n1| j#                  d«      t!        ||z
  d«      | D �cg c]  }|dz   ‘Œ	 }}|sy	t        t        |«      «      Št!        d„ |D «       «      }‰› d‰dz   z  › �}|dk\  r<||rd	ndz   d	j%                  d„ t        t!        |dz  d«      «      D «       «      z   dz   }nd	}|rd	nd|z   d	j%                  d„ t        | dz   «      D «       «      z   dz   }d}||rd	ndz   || dz   z  z   dz   }||z   |z   dj%                  ˆˆˆfd„t'        |||z   ¬«      D «       «      z   dz   S c c}
}	w c c}	w c c}w )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   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )Úlen)rf   Úlines     r   rh   z3pyparsing_test.with_line_numbers.<locals>.<genexpr>k  s   è ø€ Ò9¨œ3˜tŸ9Ñ9ùó   ‚r   éc   c              3   ó4   K  — | ]  }d › |dz   dz  › �–— Œ y­w)zc                                                                                                   r   éd   NrF   ©rf   Úis     r   rh   z3pyparsing_test.with_line_numbers.<locals>.<genexpr>r  s)   è ø€ ò àð  �j ! a¡%¨3¡ Ô0ñùs   ‚r¢   ú
c              3   ó2   K  — | ]  }d |dz   dz  › �–— Œ y­w)z	         r   é
   NrF   r£   s     r   rh   z3pyparsing_test.with_line_numbers.<locals>.<genexpr>~  s   è ø€ ÒX°Q˜	 1 q¡5¨B¡, Ô0ÑXùrŸ   r§   Ú
1234567890Ú0c              3   óB   •K  — | ]  \  }}‰› |‰› d �›d|› ‰› �–— Œ y­w)Údú:NrF   )rf   r¤   rž   r‘   r‹   Úlineno_widths      €€€r   rh   z3pyparsing_test.with_line_numbers.<locals>.<genexpr>‰  s:   øè ø€ ò á�A�tð �(˜1˜l˜^¨1Ð,Ð-¨Q¨t¨f°X°JÔ?ñùs   ƒ)Ústart)Ú
expandtabsrc   ÚintÚtypingÚcastrd   ru   ÚrangeÚ	maketransÚordro   Ú	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_numbersz pyparsing_test.with_line_numbers  sb  ú€ ñT Ø—‘“ˆAÜ�fœcÔ"Ø˜6‘\ˆFØ×"Ñ"Ó$ˆØÐ#Ü!Ÿ;™;¤s¨LÓ9ˆLØ˜yÒ(ä%(¬¨q°"«´u¸VÀVÓ7LÓ%M÷"Ù!˜Q �A�q‘Dð"�ñ "ð '-�˜sÑ#Ü—m‘m NÓ3�Ø‘ä#& |Ó#4Ð Ü—m‘mÜ26´u¸QÀ³|Ó2DÈÀuÑ2LÖM¨Q�QÐ(Ñ(Ò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¨°fÑ)<¸aÓ%@À8ÐL‰Gð ŸG™G E›N¬3¨z¸FÑ/BÀAÓ+FÈÐRöàð �u“ðˆGð ñ Øäœ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   Á?K4Ã!
K:Ç,K?)NNTú|NN)rB   rC   rD   rE   rG   ÚunittestÚTestCaser‰   Ústaticmethodrd   r±   ÚOptionalr°   ÚboolÚUnionrÊ   rF   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   rF   r   r   ú<module>rÔ      s.   ðõ &Û 	Û Û ÷õ õ !÷{
ò {
r   