Ë
    äØjj°4  ã                   óH   — d dl mZ d dlZddlmZmZmZmZmZ  G d„ d«      Z	y)é    )ÚcontextmanagerNé   )ÚParserElementÚParseExceptionÚKeywordÚ__diag__Ú
__compat__c                   óà   — e Zd ZdZ G d„ d«      Z G d„ d«      Ze	 	 	 	 	 	 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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::

            with reset_pyparsing_context():
                # test that literals used to construct a grammar are automatically suppressed
                ParserElement.inlineLiteralsUsing(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    ú_/opt/eval-harness/bench_task/venv/lib/python3.12/site-packages/pip/_vendor/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.save0   sT  € Ü7D×7XÑ7XˆD×ÑÐ3Ñ4Ü:A×:WÑ:WˆD×ÑÐ6Ñ7ô ×1Ñ1ð ×ÑØ&ñô 8E×7WÑ7WˆD×ÑÐ3Ñ4ä4A×4QÑ4QˆD×ÑÐ0Ñ1Ü×,Ò,ô "×/Ñ/×4Ñ4ð ×"Ñ"Ø(òð <@�×"Ñ"Ð#7Ñ8Ü2?×2FÑ2FˆD×Ñ˜Ñ/ô ×5Ñ5ð ×ÑØ#ñô
 ;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         _        | j                  d   t         _        | S )Nr   r   r   r   r   Fr   r   r   r   r	   )r   r    r   Úset_default_whitespace_charsr   r   r!   ÚinlineLiteralsUsingÚitemsr   ÚenableÚdisabler#   Úenable_packratr&   r'   r	   r   )r   r*   Úvalues      r   Úrestorez.pyparsing_test.reset_pyparsing_context.restoreP   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ð 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.copyq   s.   € Ø”$�t“*“,ˆCØ×Ñ×$Ñ$ T×%7Ñ%7Ô8ØˆJr   c                 ó"   — | j                  «       S r   )r+   r   s    r   Ú	__enter__z0pyparsing_test.reset_pyparsing_context.__enter__v   s   € Ø—9‘9“;Ðr   c                 ó$   — | j                  «        y r   )r4   )r   Úargss     r   Ú__exit__z/pyparsing_test.reset_pyparsing_context.__exit__y   s   € Ø�L‰L�Nr   N)
Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   r+   r4   r9   r;   r>   © r   r   Úreset_pyparsing_contextr      s'   „ ñ	ò0	$ò	ò@	òB	ò
	ó	r   rD   c                   óN   — e Zd ZdZ	 dd„Z	 d	d„Z	 d	d„Z	 d
d„Zee	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_dictrI   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 ``ParseResults.asList()`` is equal to the ``expected_list``.
            T)Ú	parse_all)rN   rI   N©Úparse_stringÚprintÚdumprK   rP   )r   ÚexprÚtest_stringrN   rI   ÚverboserM   s          r   ÚassertParseAndCheckListz>pyparsing_test.TestParseResultsAsserts.assertParseAndCheckList�   sO   € ð ×&Ñ& {¸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 ``ParseResults.asDict()`` is equal to the ``expected_dict``.
            T)ÚparseAll)rO   rI   NrS   )r   rW   rX   rO   rI   rY   rM   s          r   ÚassertParseAndCheckDictz>pyparsing_test.TestParseResultsAsserts.assertParseAndCheckDict›   sO   € ð ×&Ñ& {¸TÐ&ÓBˆFÙÜ�f—k‘k“mÕ$ä�f—n‘nÓ&Ô'Ø×)Ñ)¨&ÀÐSVÐ)ÕWr   c                 ó.  — |\  }}|�ß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)ah  
            Unit test assertion to evaluate output of ``ParserElement.runTests()``. 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 ``runTests`` and evaluated using ``assertParseResultsEquals``.
            Finally, asserts that the overall ``runTests()`` success value is ``True``.

            :param run_tests_report: tuple(bool, [tuple(str, ParseResults or Exception)]) returned from runTests
            :param expected_parse_results (optional): [tuple(str, list, dict, Exception)]
            Nc              3   óB   K  — | ]  }t        |t        «      sŒ|–— Œ y ­wr   )Ú
isinstanceÚstr©Ú.0Úexps     r   ú	<genexpr>zNpyparsing_test.TestParseResultsAsserts.assertRunTestResults.<locals>.<genexpr>Á   s   è ø€ ÒI ´J¸sÄCÕ4HœÑIùó   ‚˜c              3   ó`   K  — | ]&  }t        |t        «      rt        |t        «      r|–— Œ( y ­wr   )r`   r6   Ú
issubclassÚ	Exceptionrb   s     r   re   zNpyparsing_test.TestParseResultsAsserts.assertRunTestResults.<locals>.<genexpr>Ä   s+   è ø€ ò à #Ü)¨#¬tÔ4¼ÀCÌÔ9Sô  ñùs   ‚,.)Úexpected_exceptionrI   c              3   óB   K  — | ]  }t        |t        «      sŒ|–— Œ y ­wr   )r`   Úlistrb   s     r   re   zNpyparsing_test.TestParseResultsAsserts.assertRunTestResults.<locals>.<genexpr>Ó   ó   è ø€ ÒN S¼
À3ÌÕ8MœSÑNùrf   c              3   óB   K  — | ]  }t        |t        «      sŒ|–— Œ y ­wr   )r`   Údictrb   s     r   re   zNpyparsing_test.TestParseResultsAsserts.assertRunTestResults.<locals>.<genexpr>Ö   rm   rf   ©NN)rN   rO   rI   zno validation for zfailed runTestsrH   )ÚzipÚnextÚassertRaisesr`   ri   rP   rU   Ú
assertTrue)r   Úrun_tests_reportÚexpected_parse_resultsrI   Úrun_test_successÚrun_test_resultsÚrptÚexpectedÚmergedrX   rM   Úfail_msgrj   rN   rO   s                  r   ÚassertRunTestResultsz;pyparsing_test.TestParseResultsAsserts.assertRunTestResults©   s”  € ð 2BÑ.ÐÐ.à%Ð1ô *-Ð-=Ð?UÓ)V÷á%˜˜Xð %�cÐ$˜8Ó$ð�ñ ð 6<ò %HÑ1�K ¨ô  $ÙI¨ÔIÈ4ó �Hô *.ñà'/ôð
 ó*Ð&ð *Ð5Ø!×.Ñ.Ø/AÀxÂÐSVð /ó ñ -ô  *¨&´)Ô<Ø&, ð  =÷-ð -ô )-ÙN¨HÔNÐPTó)˜ô )-ÙN¨HÔNÐPTó)˜ð *¨=Ð9¸\ÒIØ ×9Ñ9Ø &Ø.;Ø.;Ø$,¢O°ð	 :õ ô "Ð$6°{°oÐ"FÕGðK%HðP �O‰OØ ¨S¨_ cð õ ØBSð õ ùóY÷(-ð -ús   —DÁ3DÄD	c              #   ód   K  — | j                  ||¬«      5  d –— d d d «       y # 1 sw Y   y xY w­w)NrH   )rs   )r   Úexc_typerI   s      r   ÚassertRaisesParseExceptionzApyparsing_test.TestParseResultsAsserts.assertRaisesParseExceptionè   s0   è ø€ à×"Ñ" 8°Ð"Ó5ñ Û÷÷ ñ üs   ‚0–$›	0¤-©0)NNN)NTrp   )r?   r@   rA   rB   rP   rZ   r]   r}   r   r   r€   rC   r   r   ÚTestParseResultsAssertsrF   |   sT   „ ñ	ð
 GKó
	Kð GKó	Xð GKó	Xð FJó=	ð~ 
Ø6DÈ$ò 	ó 
ñ	r   r�   NÚsÚ
start_lineÚend_lineÚexpand_tabsÚeol_markÚmark_spacesÚmark_controlÚreturnc           
      ó  ‡‡— |r| 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        | «      }t        |t        | «      «      }t        t        d|«      |«      }|dk7  r| j                  «       |dz
  | }n'| j                  d«      |dz
  | D �cg c]  }|dz   ‘Œ	 }}|syt        t        |«      «      Št        d„ |D «       «      }d
‰dz   z  }|dk\  r5|dj!                  d„ t        t        |dz  d«      «      D «       «      z   dz   }nd}||z   dj!                  d„ t        | dz   «      D «       «      z   dz   }|d| dz   z  z   dz   }||z   dj!                  ˆˆfd„t#        ||¬«      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.)

        :param s: tuple(bool, str - string to be printed with line and column numbers
        :param start_line: int - (optional) starting line number in s to print (default=1)
        :param end_line: int - (optional) ending line number in s to print (default=len(s))
        :param expand_tabs: bool - (optional) expand tabs to spaces, to match the pyparsing default
        :param eol_mark: str - (optional) string to mark the end of lines, helps visualize trailing spaces (default="|")
        :param mark_spaces: str - (optional) special character to display in place of spaces
        :param mark_control: str - (optional) 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

        :return: str - input string with leading line numbers and column number headers
        Úunicoder   é!   i $  i3$  i!$  é   Ú é    ú i	$  i#$  )é	   r�   r   u   â�Šc              3   ó2   K  — | ]  }t        |«      –— Œ y ­wr   )Úlen)rc   Úlines     r   re   z3pyparsing_test.with_line_numbers.<locals>.<genexpr>/  s   è ø€ Ò9¨œ3˜tŸ9Ñ9ùó   ‚éc   c              3   ó4   K  — | ]  }d › |dz   dz  › �–— Œ y­w)zc                                                                                                   r   éd   NrC   ©rc   Úis     r   re   z3pyparsing_test.with_line_numbers.<locals>.<genexpr>4  s)   è ø€ ò àð  �j ! a¡%¨3¡ Ô0ñùs   ‚r˜   ú
c              3   ó2   K  — | ]  }d |dz   dz  › �–— Œ y­w)z	         r   é
   NrC   r™   s     r   re   z3pyparsing_test.with_line_numbers.<locals>.<genexpr>?  s   è ø€ ÒX°Q˜	 1 q¡5¨B¡, Ô0ÑXùr•   r�   Ú
1234567890c              3   ó>   •K  — | ]  \  }}|‰› d �›d|› ‰› �–— Œ y­w)Údú:NrC   )rc   rš   r”   r†   Úlineno_widths      €€r   re   z3pyparsing_test.with_line_numbers.<locals>.<genexpr>F  s6   øè ø€ ò á�A�tð �l�^ 1Ð$Ð% Q t f¨X¨JÔ7ñùs   ƒ)Ústart)Ú
expandtabsÚtypingÚcastra   rq   ÚrangeÚ	maketransÚordrl   Ú	translateÚreplacer“   ÚminÚmaxÚ
splitlinesÚsplitÚjoinÚ	enumerate)r‚   rƒ   r„   r…   r†   r‡   rˆ   ÚcÚuÚtranstable_mapÚtblÚord_mark_controlÚs_linesr”   Úmax_line_lenÚleadÚheader0Úheader1Úheader2r¢   s       `              @r   Úwith_line_numbersz pyparsing_test.with_line_numbersí   s×  ù€ ñ8 Ø—‘“ˆAØÐ#Ü!Ÿ;™;¤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“vˆHÜ�x¤ Q£Ó(ˆÜœ˜Q 
Ó+¨XÓ6ˆ
à˜9Ò$Ø—l‘l“n Z°!¡^°hÐ?‰Gà01·±¸³¸zÈA¹~ÐPXÐ0YÖZ¨�t˜e“|ÐZˆGÐZÙØäœ3˜x›=Ó)ˆÜÑ9°Ô9Ó9ˆØ�l QÑ&Ñ'ˆØ˜2ÒàØ—'‘'ñ ä"¤3 |°sÑ':¸AÓ#>Ó?ôó ñð
 ññ ð ˆGàØñà�g‰gÑX¼%À<À-ÐSUÑBUÐ@VÓ:WÔXÓXñYð ñð 	ð ˜¨L¨=¸BÑ+>Ð)?Ñ@Ñ@À4ÑGˆàØñà�i‰iô ä(¨¸
ÔCôó ñð ñð	
ùók"ùò Nùò& [s   ÁI?Â;
JÆJ
)NNTú|NN)r?   r@   rA   rB   rD   r�   Ústaticmethodra   r¥   ÚOptionalÚintÚboolr½   rC   r   r   r   r      sÃ   „ ñ÷fñ f÷Poñ oðb ð ,0Ø)-Ø ØØ,0Ø-1ñ]
Øð]
à—O‘O CÑ(ð]
ð —/‘/ #Ñ&ð]
ð ð	]
ð
 ð]
ð —_‘_ SÑ)ð]
ð —o‘o cÑ*ð]
ð 
ò]
ó ñ]
r   r   )
Ú
contextlibr   r¥   Úcorer   r   r   r   r	   r   rC   r   r   ú<module>rÅ      s#   ðõ &Û ÷õ ÷|
ò |
r   