+
    ` Àj¦  ã                   óÂ  a € R t*0 t R tRt^ RIt^ RIHt ^ RIHt ^ RIt^ RIH	t	H
t
 ^ RIHt ^ RIHtHtHtHtHtHt ]'       d   ^ RIHt ^ RIt^ RIt^ RIt^ RIt^ RIt^ RItR	 R
 ltRR R llt ! R R]4      tR R ltRt ] ^ k Rt!] ^k R R R llt"R!R R llt#R"R R llt$R#R R llt%R$R R llt&]'R8X  d#   ]! ]PP                  PS                  4       4       R# R# )%z=Diagnostic functions, mainly for use when doing tech support.ÚMITN)ÚBytesIO)Ú
HTMLParser)ÚBeautifulSoupÚ__version__)Úbuilder_registry)ÚAnyÚIOÚListÚOptionalÚTupleÚTYPE_CHECKING)Ú_IncomingMarkupc                ó    € V ^8„  d   QhRRRR/# )é   Údatar   ÚreturnN© )Úformats   "Ú`/var/www/html/mycamper/aliexpress-site/backend/venv/lib/python3.14/site-packages/bs4/diagnose.pyÚ__annotate__r       s   € ÷ 5ñ 5Ð$ð 5¨ñ 5ó    c           	     ó  € \        R\        ,          4       \        R\        P                  ,          4       . ROpV FP  p\        P
                   F  pW#P                  9   g   K   K+  	  VP                  V4       \        RV,          4       KR  	  RV9   dR   TP                  R4        ^ RI	H
p \        RR	P                  \        \        VP                  4      4      ,          4       RV9   d"    ^ RIp\        RVP                  ,          4       \#        V R4      '       d   V P%                  4       p V Fd  p\        RV,          4       Rp \'        WR7      pRpV'       d,   \        RV,          4       \        XP/                  4       4       \        R4       Kf  	  R#   \         d    \        R
4        LÎi ; i  \         d    \        R4        LÂi ; i  \(         d+    \        RT,          4       \*        P,                  ! 4         L°i ; i)z¡Diagnostic suite for isolating common problems.

:param data: Some markup that needs to be explained.
:return: None; diagnostics are printed to standard output.
z'Diagnostic running on Beautiful Soup %szPython version %sÚhtml5libÚlxmlz;I noticed that %s is not installed. Installing it may help.zlxml-xml©ÚetreezFound lxml version %sÚ.z.lxml is not installed or couldn't be imported.NzFound html5lib version %sz2html5lib is not installed or couldn't be imported.Úreadz#Trying to parse your markup with %sF)ÚfeaturesTú%s could not parse the markup.z#Here's what %s did with the markup:)úhtml.parserr   r   zP--------------------------------------------------------------------------------)Úprintr   ÚsysÚversionr   Úbuildersr   ÚremoveÚappendr   r   ÚjoinÚmapÚstrÚLXML_VERSIONÚImportErrorr   Úhasattrr   r   Ú	ExceptionÚ	tracebackÚ	print_excÚprettify)	r   Úbasic_parsersÚnameÚbuilderr   r   ÚparserÚsuccessÚsoups	   &        r   Údiagnoser8       s´  € ô 
Ð4´{ÕBÔDÜ	Ð¤§¡Õ,Ô.â7€MÛˆÜ'×0Ô0ˆGØ×'Ñ'Ö'Úñ 1ð × Ñ  Ô&ÜØNÐQUÕUöñ ð �ÔØ×Ñ˜ZÔ(ð	DÝ"äÐ*¨S¯X©X´c¼#¸u×?QÑ?QÓ6RÓ-SÕSÔUð �]Ô"ð	HÛäÐ.°×1EÑ1EÕEÔGô ˆt�V×ÒØ�y‰y‹{ˆãˆÜÐ4°vÕ=Ô?Øˆð	"Ü  Ô7ˆDØˆG÷ ÜÐ8¸6ÕAÔCÜ�4—=‘=“?Ô$äˆxÖó  øô ô 	DÜÐBÖCð	Dûô ô 	HÜÐFÖGð	Hûô ô 	"ÜÐ3°fÕ<Ô>Ü×ÒÖ!ð	"ús6   Â*?F Ã1 F; ÅGÆF8Æ7F8Æ;GÇGÇ2HÈHc                ó8   € V ^8„  d   QhRRR\         R\        RR/# )r   r   r   ÚhtmlÚkwargsr   N)Úboolr   )r   s   "r   r   r   X   s/   € ÷ Dñ DÐ&ð D¬dð DÄSð DÈTñ Dr   c                ó\  € ^ RI Hp VP                  RR4      p\        V \        4      '       d   V P                  R4      p \        V \        4      '       g   \        V 4      pVP                  ! X3RVRV/VB  F0  w  rg\        V: RVP                  :R RVP                  : 24       K2  	  R# )	a”  Print out the lxml events that occur during parsing.

This lets you see how lxml parses a document when no Beautiful
Soup code is running. You can use this to determine whether
an lxml-specific problem is in Beautiful Soup's lxml tree builders
or in lxml itself.

:param data: Some markup.
:param html: If True, markup will be parsed with lxml's HTML parser.
   if False, lxml's XML parser will be used.
r   ÚrecoverTÚutf8r:   z, z>4N)r   r   ÚpopÚ
isinstancer*   Úencoder	   r   Ú	iterparser"   ÚtagÚtext)r   r:   r;   r   r>   ÚreaderÚeventÚelements   &&,     r   Ú
lxml_tracerI   X   s…   € õ à�j‰j˜ DÓ)€GÜ�$œ×ÒØ�{‰{˜6Ó"ˆÜ�dœB×ÒÜ˜“ˆØŸ/š/¨&ÑW°tÐWÀWÐWÐPVÔW‰ˆÜ£ w§{¥{°G·L³LÐAÖCó Xr   c                   óà   a € ] tR t^ot o RtV 3R lR ltRV 3R lR lltRV 3R lR lltV 3R lR	 ltV 3R
 lR lt	V 3R lR lt
V 3R lR ltV 3R lR ltV 3R lR ltV 3R lR ltRtV tR# )ÚAnnouncingParserzØSubclass of HTMLParser that announces parse events, without doing
anything else.

You can use this to get a picture of how html.parser sees a given
document. The easiest way to do this is to call `htmlparser_trace`.
c                ó$   <€ V ^8„  d   QhRS[ RR/# )r   Úsr   N©r*   )r   Ú__classdict__s   "€r   r   ÚAnnouncingParser.__annotate__w   s   ø€ ÷ ñ ‘Cð ˜Dñ r   c                ó   € \        V4       R # )N)r"   )ÚselfrM   s   &&r   Ú_pÚAnnouncingParser._pw   s	   € ÜˆaŽr   c                óf   <€ V ^8„  d   QhRS[ RS[S[S[ S[S[ ,          3,          ,          RS[RR/# )r   r3   ÚattrsÚhandle_empty_elementr   N)r*   r
   r   r   r<   )r   rO   s   "€r   r   rP   z   sF   ø€ ÷ )ñ )áð)ñ ‘E™#™x©�}Ð,Õ-Õ.ð)ñ #ð	)ð
 
ñ)r   c                ó4   € V P                  V R V R24       R# )Ú z STARTN©rS   )rR   r3   rV   rW   s   &&&&r   Úhandle_starttagÚ AnnouncingParser.handle_starttagz   s   € ð 	�‰�4�&˜˜%˜ Ð'Ö(r   c                ó*   <€ V ^8„  d   QhRS[ RS[RR/# )r   r3   Úcheck_already_closedr   N)r*   r<   )r   rO   s   "€r   r   rP   ‚   s"   ø€ ÷ !ñ !¡#ð !¹Tð !ÈTñ !r   c                ó6   € V P                  R V,          4       R# )z%s ENDNrZ   )rR   r3   r^   s   &&&r   Úhandle_endtagÚAnnouncingParser.handle_endtag‚   s   € Ø�‰�˜4•Ö r   c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r   r   r   NrN   )r   rO   s   "€r   r   rP   …   ó   ø€ ÷ "ñ "¡ð "¨ñ "r   c                ó6   € V P                  R V,          4       R# )z%s DATANrZ   ©rR   r   s   &&r   Úhandle_dataÚAnnouncingParser.handle_data…   ó   € Ø�‰�	˜DÕ Ö!r   c                ó$   <€ V ^8„  d   QhRS[ RR/# ©r   r3   r   NrN   )r   rO   s   "€r   r   rP   ˆ   ó   ø€ ÷ %ñ %¡3ð %¨4ñ %r   c                ó6   € V P                  R V,          4       R# )z
%s CHARREFNrZ   ©rR   r3   s   &&r   Úhandle_charrefÚAnnouncingParser.handle_charrefˆ   ó   € Ø�‰�˜tÕ#Ö$r   c                ó$   <€ V ^8„  d   QhRS[ RR/# rk   rN   )r   rO   s   "€r   r   rP   ‹   s   ø€ ÷ 'ñ '¡Sð '¨Tñ 'r   c                ó6   € V P                  R V,          4       R# )z%s ENTITYREFNrZ   rn   s   &&r   Úhandle_entityrefÚ!AnnouncingParser.handle_entityref‹   s   € Ø�‰� Õ%Ö&r   c                ó$   <€ V ^8„  d   QhRS[ RR/# rc   rN   )r   rO   s   "€r   r   rP   Ž   rl   r   c                ó6   € V P                  R V,          4       R# )z
%s COMMENTNrZ   rf   s   &&r   Úhandle_commentÚAnnouncingParser.handle_commentŽ   rq   r   c                ó$   <€ V ^8„  d   QhRS[ RR/# rc   rN   )r   rO   s   "€r   r   rP   ‘   rd   r   c                ó6   € V P                  R V,          4       R# )z%s DECLNrZ   rf   s   &&r   Úhandle_declÚAnnouncingParser.handle_decl‘   ri   r   c                ó$   <€ V ^8„  d   QhRS[ RR/# rc   rN   )r   rO   s   "€r   r   rP   ”   s   ø€ ÷ *ñ *¡ð *¨ñ *r   c                ó6   € V P                  R V,          4       R# )z%s UNKNOWN-DECLNrZ   rf   s   &&r   Úunknown_declÚAnnouncingParser.unknown_decl”   s   € Ø�‰Ð! DÕ(Ö)r   c                ó$   <€ V ^8„  d   QhRS[ RR/# rc   rN   )r   rO   s   "€r   r   rP   —   s   ø€ ÷  ñ  ™cð   dñ  r   c                ó6   € V P                  R V,          4       R# )z%s PINrZ   rf   s   &&r   Ú	handle_piÚAnnouncingParser.handle_pi—   s   € Ø�‰�˜$•Ör   r   N©T)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rS   r[   r`   rg   ro   rt   rx   r|   r€   r„   Ú__static_attributes__Ú__classdictcell__)rO   s   @r   rK   rK   o   sn   ø‡ € ñ÷ð ÷)ò )÷!ò !÷"ð "÷%ð %÷'ð '÷%ð %÷"ð "÷*ð *÷ ö  r   rK   c                ó(   € V ^8„  d   QhR\         RR/# rc   rN   )r   s   "r   r   r   ›   s   € ÷ 	ñ 	œ3ð 	 4ñ 	r   c                ó<   € \        4       pVP                  V 4       R# )z²Print out the HTMLParser events that occur during parsing.

This lets you see how HTMLParser parses a document when no
Beautiful Soup code is running.

:param data: Some markup.
N)rK   Úfeed)r   r5   s   & r   Úhtmlparser_tracer‘   ›   s   € ô Ó€FØ
‡K�K�Ör   ÚaeiouÚbcdfghjklmnpqrstvwxyzc                ó0   € V ^8„  d   QhR\         R\        /# ©r   Úlengthr   ©Úintr*   )r   s   "r   r   r   «   s   € ÷ ñ ”#ð œcñ r   c                óž   € Rp\        V 4       F;  pV^,          ^ 8X  d   \        pM\        pV\        P                  ! V4      ,          pK=  	  V# )z4Generate a random word-like string.

:meta private:
Ú )ÚrangeÚ_consonantsÚ_vowelsÚrandomÚchoice)r–   rM   ÚiÚts   &   r   Úrwordr¢   «   sF   € ð
 	€AÜ�6Ž]ˆØˆq�5�AŒ:Ü‰AäˆAØ	ŒV�]Š]˜1ÓÕŠñ ð €Hr   c                ó0   € V ^8„  d   QhR\         R\        /# r•   r—   )r   s   "r   r   r   º   s   € ÷ Hñ H”cð H¤#ñ Hr   c                óD   € RP                  R \        V 4       4       4      # )z8Generate a random sentence-like string.

:meta private:
rY   c              3   ób   "  € T F%  p\        \        P                  ! ^^	4      4      x € K'  	  R# 5i)é   N)r¢   rž   Úrandint)Ú.0r    s   & r   Ú	<genexpr>Úrsentence.<locals>.<genexpr>¿   s#   é € ÐG¹°A”Eœ&Ÿ.š.¨¨AÓ.×/Ð/»ùs   ‚-/)r(   r›   )r–   s   &r   Ú	rsentencer«   º   s   € ð
 �8‰8ÑG¼¸v¼ÓGÓGÐGr   c                ó0   € V ^8„  d   QhR\         R\        /# )r   Únum_elementsr   r—   )r   s   "r   r   r   Â   s   € ÷ 6ñ 6”sð 6¤cñ 6r   c           	     óê  € . ROp. p\        V 4       FÀ  p\        P                  ! ^ ^4      pV^ 8X  d1   \        P                  ! V4      pVP	                  RV,          4       KQ  V^8X  d2   VP	                  \        \        P                  ! ^^4      4      4       K‰  V^8X  g   K’  \        P                  ! V4      pVP	                  RV,          4       KÂ  	  RRP                  V4      ,           R,           # )z<Randomly generate an invalid HTML document.

:meta private:
z<%s>z</%s>z<html>Ú
z</html>)ÚpÚdivÚspanr    ÚbÚscriptÚtable)r›   rž   r§   rŸ   r'   r«   r(   )r­   Ú	tag_namesÚelementsr    rŸ   Útag_names   &     r   Úrdocr¹   Â   s¸   € ò
 B€IØ€HÜ�<Ö ˆÜ—’  1Ó%ˆØ�QŒ;ä—}’} YÓ/ˆHØ�O‰O˜F XÕ-Ö.Ø�qŒ[Ø�O‰OœI¤f§n¢n°Q¸Ó&:Ó;Ö<Ø�qŽ[ä—}’} YÓ/ˆHØ�O‰O˜G hÕ.Ö/ñ !ð �d—i‘i Ó)Õ)¨IÕ5Ð5r   c                ó(   € V ^8„  d   QhR\         RR/# )r   r­   r   N)r˜   )r   s   "r   r   r   Ø   s   € ÷  Bñ  B¤Cð  B°Tñ  Br   c                óL  € \        R\        ,          4       \        V 4      p\        R\        V4      ,          4       RRR.RR3 Fb  pRp \        P                  ! 4       p\        W4       \        P                  ! 4       pRpV'       g   KG  \        R
VXX,
          3,          4       Kd  	  ^ RI	H
p \        P                  ! 4       pVP                  V4       \        P                  ! 4       p\        RWT,
          ,          4       ^ RIpVP                  4       p\        P                  ! 4       pVP                  V4       \        P                  ! 4       p\        RWT,
          ,          4       R#   \         d,    \        R	T,          4       \        P                  ! 4         EL i ; i)z.Very basic head-to-head performance benchmark.z1Comparative parser benchmark on Beautiful Soup %sz3Generated a large invalid HTML document (%d bytes).r   r:   r   r!   FTr    z"BS4+%s parsed the markup in %.2fs.r   z$Raw lxml parsed the markup in %.2fs.Nz(Raw html5lib parsed the markup in %.2fs.)r"   r   r¹   ÚlenÚtimer   r.   r/   r0   r   r   ÚHTMLr   r   Úparse)	r­   r   Úparser_namer6   Úar³   r   r   r5   s	   &        r   Úbenchmark_parsersrÂ   Ø   s5  € ä	Ð>ÄÕLÔNÜ�Ó€DÜ	Ð@Ä3ÀtÃ9ÕLÔNà ¨Ð 0°*¸mÓLˆØˆð	"Ü—	’	“ˆAÜ˜$Ô,Ü—	’	“ˆAØˆG÷ ‰7ÜÐ7¸;ÈÈAÍÐ:NÕNÖPñ Mõ ä�	Š	‹€AØ	‡J�JˆtÔÜ�	Š	‹€AÜ	Ð1°QµUÕ;Ô=ãà× Ñ Ó"€FÜ�	Š	‹€AØ
‡L�L�ÔÜ�	Š	‹€AÜ	Ð5¸½Õ?ÖAøô' ô 	"ÜÐ3°kÕAÔCÜ×Ò×!ð	"ús   Á7E-Å-2F#Æ"F#c                ó4   € V ^8„  d   QhR\         R\        RR/# )r   r­   r5   r   Nr—   )r   s   "r   r   r   û   s!   € ÷ +ñ +œ#ð +´ð +Àñ +r   c                ó"  € \         P                  ! 4       pVP                  p\        V 4      p\	        \
        WAR7      p\        P                  ! RWUV4       \        P                  ! V4      pVP                  R4       VP                  R^24       R# )z7Use Python's profiler on a randomly generated document.)Úbs4r   r5   zbs4.BeautifulSoup(data, parser)Ú
cumulativez_html5lib|bs4N)ÚtempfileÚNamedTemporaryFiler3   r¹   ÚdictrÅ   ÚcProfileÚrunctxÚpstatsÚStatsÚ
sort_statsÚprint_stats)r­   r5   Ú
filehandleÚfilenamer   ÚvarsÚstatss   &&     r   ÚprofilerÔ   û   sl   € ä×,Ò,Ó.€JØ�‰€Hä�Ó€DÜ”C˜dÔ2€DÜ‡O‚OÐ5°tÀ8ÔLä�LŠL˜Ó"€Eà	×Ñ�\Ô"Ø	×Ñ�o rÖ*r   Ú__main__c                óh   € V ^8„  d   Qh/ ^ \         9   d
   \        ;R&   ^\         9   d
   \        ;R&   # )r   r�   rœ   )Ú__conditional_annotations__r*   )r   s   "r   r   r      s2   € × CÑ C÷L Ò ŒÑ ñM D÷N +Ò *ŒSÑ *òO Dr   r†   )é   )r¦   )iè  )é † )rÙ   r   )+r×   r‹   Ú__license__rÊ   Úior   Úhtml.parserr   rÅ   r   r   Úbs4.builderr   Útypingr   r	   r
   r   r   r   Úbs4._typingr   rÌ   rž   rÇ   r½   r/   r#   r8   rI   rK   r‘   r�   rœ   r¢   r«   r¹   rÂ   rÔ   r‡   Ústdinr   r   )r×   s   @r   Ú<module>rá      s´   øðÞ Cð €ã Ý Ý "Û 
ß *Ý (÷÷ ÷ Ý+ã Û Û Û Û Û 
õ5÷pDô.) �zô ) õX	ð €Ó Ø*€Ó *÷÷H÷6÷, B÷F+ð  ˆzÔÙˆS�Y‰Y�^‰^ÓÖñ r   