§
    ¥”j¦  ã            	       óÐ  — U d Z dZddlZddlmZ ddlmZ ddlZddlmZm	Z	 ddl
mZ ddlmZmZmZmZmZmZ erdd	lmZ ddlZddlZddlZddlZddlZddlZd'd„Zd(d
ddededdfd„Z G d„ de¦  «        Zd
eddfd„Z dZ!ee"d<   dZ#ee"d<   d)de$defd„Z%d*de$defd„Z&d+de$defd „Z'd,de$ddfd"„Z(d-de$d$eddfd%„Z)e*d&k    r$ eej+         ,                    ¦   «         ¦  «         dS dS ).z=Diagnostic functions, mainly for use when doing tech support.ÚMITé    N)ÚBytesIO)Ú
HTMLParser)ÚBeautifulSoupÚ__version__)Úbuilder_registry)ÚAnyÚIOÚListÚOptionalÚTupleÚTYPE_CHECKING)Ú_IncomingMarkupÚdatar   Úreturnc           	      ó  — t          dt          z  ¦  «         t          dt          j        z  ¦  «         g d¢}|D ]C}t          j        D ]}||j        v r n(Œ|                     |¦  «         t          d|z  ¦  «         ŒDd|v ry|                     d¦  «         	 ddl	m
} t          d	d
                     t          t          |j        ¦  «        ¦  «        z  ¦  «         n# t          $ r t          d¦  «         Y nw xY wd|v r<	 ddl}t          d|j        z  ¦  «         n# t          $ r t          d¦  «         Y nw xY wt#          | d¦  «        r|                      ¦   «         } |D ]¤}t          d|z  ¦  «         d}	 t'          | |¬¦  «        }d}n5# t(          $ r( t          d|z  ¦  «         t+          j        ¦   «          Y nw xY w|r3t          d|z  ¦  «         t          |                     ¦   «         ¦  «         t          d¦  «         Œ¥dS )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)úhtml.parserÚhtml5libÚlxmlz;I noticed that %s is not installed. Installing it may help.r   zlxml-xmlr   ©ÚetreezFound lxml version %sú.z.lxml is not installed or couldn't be imported.r   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: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	            ú[/var/www/finuniver-perm.ru/html/portfolio/venv/lib/python3.11/site-packages/bs4/diagnose.pyÚdiagnoser3       s¥  € õ 
Ð4µ{ÑBÑDÔDÐDÝ	Ð¥¤Ñ,Ñ.Ô.Ð.à7Ð7Ð7€MØð ð ˆÝ'Ô0ð 	ð 	ˆGØ�wÔ'Ð'Ð'Ø�ð (ð × Ò  Ñ&Ô&Ð&ÝØNÐQUÑUñô ð øð �ÐÐØ×Ò˜ZÑ(Ô(Ð(ð	DØ"Ð"Ð"Ð"Ð"Ð"åÐ*¨S¯XªXµc½#¸uÔ?QÑ6RÔ6RÑ-SÔ-SÑSÑUÔUÐUÐUøÝð 	Dð 	Dð 	DÝÐBÑCÔCÐCÐCÐCð	Døøøð �]Ð"Ð"ð	HØˆOˆOˆOåÐ.°Ô1EÑEÑGÔGÐGÐGøÝð 	Hð 	Hð 	HÝÐFÑGÔGÐGÐGÐGð	Høøøõ ˆt�VÑÔð Ø�yŠy‰{Œ{ˆàð ð ˆÝÐ4°vÑ=Ñ?Ô?Ð?Øˆð	"Ý  °Ð7Ñ7Ô7ˆDØˆGˆGøÝð 	"ð 	"ð 	"ÝÐ3°fÑ<Ñ>Ô>Ð>ÝÔÑ!Ô!Ð!Ð!Ð!ð	"øøøð ð 	%ÝÐ8¸6ÑAÑCÔCÐCÝ�4—=’=‘?”?Ñ$Ô$Ð$åˆxÑÔÐÐðð s7   ÂAC ÃC8Ã7C8Ä D ÄD8Ä7D8Å8FÆ/F>Æ=F>TÚhtmlÚkwargsc                 óL  — ddl m} |                     dd¦  «        }t          | t          ¦  «        r|                      d¦  «        } t          | t          ¦  «        st          | ¦  «        } |j        |f||dœ|¤ŽD ]'\  }}t          |›d|j
        d›d|j        ›�¦  «         Œ(d	S )
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   r   ÚrecoverTÚutf8)r4   r7   z, z>4N)r   r   ÚpopÚ
isinstancer$   Úencoder
   r   Ú	iterparser   ÚtagÚtext)r   r4   r5   r   r7   ÚreaderÚeventÚelements           r2   Ú
lxml_tracerB   X   sÎ   € ð ÐÐÐÐÐà�jŠj˜ DÑ)Ô)€GÝ�$�ÑÔð #Ø�{Š{˜6Ñ"Ô"ˆÝ�d�BÑÔð Ý˜‘”ˆØ)˜%œ/¨&ÐW°tÀWÐWÐWÐPVÐWÐWð Dð D‰ˆˆwÝ    w¤{ { { {°G´L°LÐAÑCÔCÐCÐCðDð Dó    c            	       óì   — e Zd ZdZdeddfd„Z	 ddedeeeee         f                  d	e	ddfd
„Z
ddede	ddfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd„Zdeddfd„ZdS )Ú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`.
    Úsr   Nc                 ó$   — t          |¦  «         d S )N)r   )ÚselfrF   s     r2   Ú_pzAnnouncingParser._pw   s   € Ýˆa‰ŒˆˆˆrC   Tr-   ÚattrsÚhandle_empty_elementc                 ó<   — |                       |› d|› d�¦  «         d S )Nú z START©rI   )rH   r-   rJ   rK   s       r2   Úhandle_starttagz AnnouncingParser.handle_starttagz   s-   € ð 	�Š�4Ð'Ð'˜%Ð'Ð'Ð'Ñ(Ô(Ð(Ð(Ð(rC   Úcheck_already_closedc                 ó6   — |                       d|z  ¦  «         d S )Nz%s ENDrN   )rH   r-   rP   s      r2   Úhandle_endtagzAnnouncingParser.handle_endtag‚   s   € Ø�Š�˜4‘Ñ Ô Ð Ð Ð rC   r   c                 ó6   — |                       d|z  ¦  «         d S )Nz%s DATArN   ©rH   r   s     r2   Úhandle_datazAnnouncingParser.handle_data…   ó   € Ø�Š�	˜DÑ Ñ!Ô!Ð!Ð!Ð!rC   c                 ó6   — |                       d|z  ¦  «         d S )Nz
%s CHARREFrN   ©rH   r-   s     r2   Úhandle_charrefzAnnouncingParser.handle_charrefˆ   ó   € Ø�Š�˜tÑ#Ñ$Ô$Ð$Ð$Ð$rC   c                 ó6   — |                       d|z  ¦  «         d S )Nz%s ENTITYREFrN   rX   s     r2   Úhandle_entityrefz!AnnouncingParser.handle_entityref‹   s   € Ø�Š� Ñ%Ñ&Ô&Ð&Ð&Ð&rC   c                 ó6   — |                       d|z  ¦  «         d S )Nz
%s COMMENTrN   rT   s     r2   Úhandle_commentzAnnouncingParser.handle_commentŽ   rZ   rC   c                 ó6   — |                       d|z  ¦  «         d S )Nz%s DECLrN   rT   s     r2   Úhandle_declzAnnouncingParser.handle_decl‘   rV   rC   c                 ó6   — |                       d|z  ¦  «         d S )Nz%s UNKNOWN-DECLrN   rT   s     r2   Úunknown_declzAnnouncingParser.unknown_decl”   s    € Ø�ŠÐ! DÑ(Ñ)Ô)Ð)Ð)Ð)rC   c                 ó6   — |                       d|z  ¦  «         d S )Nz%s PIrN   rT   s     r2   Ú	handle_pizAnnouncingParser.handle_pi—   s   € Ø�Š�˜$‘ÑÔÐÐÐrC   ©T)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r$   rI   r   r   r   ÚboolrO   rR   rU   rY   r\   r^   r`   rb   rd   © rC   r2   rE   rE   o   s³  € € € € € ðð ð�Cð ˜Dð ð ð ð ð &*ð	)ð )àð)ð �E˜#˜x¨œ}Ð,Ô-Ô.ð)ð #ð	)ð
 
ð)ð )ð )ð )ð!ð ! #ð !¸Tð !ÈTð !ð !ð !ð !ð" ð "¨ð "ð "ð "ð "ð% 3ð %¨4ð %ð %ð %ð %ð' Sð '¨Tð 'ð 'ð 'ð 'ð% 3ð %¨4ð %ð %ð %ð %ð" ð "¨ð "ð "ð "ð "ð* ð *¨ð *ð *ð *ð *ð ˜cð   dð  ð  ð  ð  ð  ð  rC   rE   c                 óL   — t          ¦   «         }|                     | ¦  «         dS )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)rE   Úfeed)r   r/   s     r2   Úhtmlparser_tracern   ›   s'   € õ ÑÔ€FØ
‡K‚K�ÑÔÐÐÐrC   ÚaeiouÚ_vowelsÚbcdfghjklmnpqrstvwxyzÚ_consonantsé   Úlengthc                 óŒ   — d}t          | ¦  «        D ]1}|dz  dk    rt          }nt          }|t          j        |¦  «        z  }Œ2|S )z<Generate a random word-like string.

    :meta private:
    Ú é   r   )Úrangerr   rp   ÚrandomÚchoice)rt   rF   ÚiÚts       r2   Úrwordr}   «   sR   € ð
 	€AÝ�6‰]Œ]ð ð ˆØˆq‰5�AŠ:ˆ:ÝˆAˆAåˆAØ	�VŒ]˜1ÑÔÑˆˆØ€HrC   é   c                 óZ   — d                      d„ t          | ¦  «        D ¦   «         ¦  «        S )z@Generate a random sentence-like string.

    :meta private:
    rM   c              3   óZ   K  — | ]&}t          t          j        d d¦  «        ¦  «        V — Œ'dS )r~   é	   N)r}   ry   Úrandint)Ú.0r{   s     r2   ú	<genexpr>zrsentence.<locals>.<genexpr>¿   s6   è è € ÐGÐG°A•E�&œ.¨¨AÑ.Ô.Ñ/Ô/ÐGÐGÐGÐGÐGÐGrC   )r"   rx   )rt   s    r2   Ú	rsentencer…   º   s+   € ð
 �8Š8ÐGÐG½¸v¹¼ÐGÑGÔGÑGÔGÐGrC   éè  Únum_elementsc           	      óÔ  — g d¢}g }t          | ¦  «        D ]¸}t          j        dd¦  «        }|dk    r-t          j        |¦  «        }|                     d|z  ¦  «         ŒJ|dk    r6|                     t          t          j        dd¦  «        ¦  «        ¦  «         Œ†|dk    r,t          j        |¦  «        }|                     d|z  ¦  «         Œ¹d	d
                     |¦  «        z   dz   S )zDRandomly generate an invalid HTML document.

    :meta private:
    )ÚpÚdivÚspanr{   ÚbÚscriptÚtabler   é   z<%s>é   r~   rw   z</%s>z<html>ú
z</html>)rx   ry   r‚   rz   r!   r…   r"   )r‡   Ú	tag_namesÚelementsr{   rz   Útag_names         r2   Úrdocr•   Â   sí   € ð
 BÐAÐA€IØ€HÝ�<Ñ Ô ð 0ð 0ˆÝ”  1Ñ%Ô%ˆØ�QŠ;ˆ;å”} YÑ/Ô/ˆHØ�OŠO˜F XÑ-Ñ.Ô.Ð.Ð.Ø�qŠ[ˆ[Ø�OŠO�I¥f¤n°Q¸Ñ&:Ô&:Ñ;Ô;Ñ<Ô<Ð<Ð<Ø�qŠ[ˆ[å”} YÑ/Ô/ˆHØ�OŠO˜G hÑ.Ñ/Ô/Ð/øØ�d—i’i Ñ)Ô)Ñ)¨IÑ5Ð5rC   é † c                 ó6  — t          dt          z  ¦  «         t          | ¦  «        }t          dt          |¦  «        z  ¦  «         dddgddfD ]Œ}d}	 t	          j        ¦   «         }t          ||¦  «         t	          j        ¦   «         }d}n5# t          $ r( t          d	|z  ¦  «         t          j        ¦   «          Y nw xY w|rt          d
|||z
  fz  ¦  «         Œ�ddl	m
} t	          j        ¦   «         }|                     |¦  «         t	          j        ¦   «         }t          d||z
  z  ¦  «         ddl}|                     ¦   «         }t	          j        ¦   «         }|                     |¦  «         t	          j        ¦   «         }t          d||z
  z  ¦  «         dS )z.Very basic head-to-head performance benchmark.z1Comparative parser benchmark on Beautiful Soup %sz3Generated a large invalid HTML document (%d bytes).r   r4   r   r   FTr   z"BS4+%s parsed the markup in %.2fs.r   r   z$Raw lxml parsed the markup in %.2fs.Nz(Raw html5lib parsed the markup in %.2fs.)r   r   r•   ÚlenÚtimer   r(   r)   r*   r   r   ÚHTMLr   r   Úparse)	r‡   r   Úparser_namer0   ÚarŒ   r   r   r/   s	            r2   Úbenchmark_parsersrž   Ø   s²  € å	Ð>ÅÑLÑNÔNÐNÝ�ÑÔ€DÝ	Ð@Å3ÀtÁ9Ä9ÑLÑNÔNÐNà ¨Ð 0°*¸mÐLð Qð QˆØˆð	"Ý”	‘”ˆAÝ˜$ Ñ,Ô,Ð,Ý”	‘”ˆAØˆGˆGøÝð 	"ð 	"ð 	"ÝÐ3°kÑAÑCÔCÐCÝÔÑ!Ô!Ð!Ð!Ð!ð	"øøøð ð 	QÝÐ7¸;ÈÈAÉÐ:NÑNÑPÔPÐPøàÐÐÐÐÐåŒ	‰Œ€AØ	‡J‚JˆtÑÔÐÝŒ	‰Œ€AÝ	Ð1°Q¸±UÑ;Ñ=Ô=Ð=à€O€O€Oà× Ò Ñ"Ô"€FÝŒ	‰Œ€AØ
‡L‚L�ÑÔÐÝŒ	‰Œ€AÝ	Ð5¸¸Q¹Ñ?ÑAÔAÐAÐAÐAs   Á8BÂ/B>Â=B>r   r/   c                 ó2  — t          j        ¦   «         }|j        }t          | ¦  «        }t	          t
          ||¬¦  «        }t          j        d|||¦  «         t          j	        |¦  «        }| 
                    d¦  «         |                     dd¦  «         dS )z7Use Python's profiler on a randomly generated document.)Úbs4r   r/   zbs4.BeautifulSoup(data, parser)Ú
cumulativez_html5lib|bs4é2   N)ÚtempfileÚNamedTemporaryFiler-   r•   Údictr    ÚcProfileÚrunctxÚpstatsÚStatsÚ
sort_statsÚprint_stats)r‡   r/   Ú
filehandleÚfilenamer   ÚvarsÚstatss          r2   Úprofiler°   û   sŽ   € åÔ,Ñ.Ô.€JØŒ€Hå�ÑÔ€DÝ•C˜d¨6Ð2Ñ2Ô2€DÝ„OÐ5°t¸TÀ8ÑLÔLÐLåŒL˜Ñ"Ô"€Eà	×Ò�\Ñ"Ô"Ð"Ø	×Ò�o rÑ*Ô*Ð*Ð*Ð*rC   Ú__main__)r   r   r   Nre   )rs   )r~   )r†   )r–   )r–   r   )-ri   Ú__license__r¦   Úior   Úhtml.parserr   r    r   r   Úbs4.builderr   Útypingr	   r
   r   r   r   r   Úbs4._typingr   r¨   ry   r£   r™   r)   r   r3   rj   rB   rE   r$   rn   rp   Ú__annotations__rr   Úintr}   r…   r•   rž   r°   rf   Ústdinr   rk   rC   r2   ú<module>r»      sí  ðØ CÐ CÐ Cð €à €€€Ø Ð Ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "Ø 
€
€
€
Ø *Ð *Ð *Ð *Ð *Ð *Ð *Ð *Ø (Ð (Ð (Ð (Ð (Ð (ðð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ð ,Ø+Ð+Ð+Ð+Ð+Ð+à €€€Ø €€€Ø €€€Ø €€€Ø Ð Ð Ð Ø 
€
€
€
ð5ð 5ð 5ð 5ðpDð DÐ&ð D¨dð DÀSð DÈTð Dð Dð Dð Dð.) ð ) ð ) ð ) ð ) �zñ ) ô ) ð ) ðX	˜3ð 	 4ð 	ð 	ð 	ð 	ð €ˆÐ Ð Ñ Ø*€ˆSÐ *Ð *Ñ *ðð �#ð ˜cð ð ð ð ðHð H�cð H #ð Hð Hð Hð Hð6ð 6�sð 6 cð 6ð 6ð 6ð 6ð, Bð  B Cð  B°Tð  Bð  Bð  Bð  BðF+ð +˜#ð +°ð +Àð +ð +ð +ð +ð  ˆzÒÐØ€HˆSŒY�^Š^ÑÔÑÔÐÐÐð ÐrC   