
    gh                       d Z ddlmZ ddlmZ ddlmZ ddlZddlmZ ddl	Z	ddl
Z
ddlmZmZmZmZmZmZ  ej        d	          Z ej        d
          ZdZdZdZdZdZdZdZdZdZdZej        ej         z  Z!ej"        ej#        z  Z$ej        ej         ddZ% ej        d          Z& ej        d          Z' ej        d          Z( ej        d          Z) ej        d          Z* ej        d          Z+ ej        d          Z,dZ-dZ.dZ/d Z0d!Z1d"Z2d#Z3 G d$ d%          Z4 G d& d'          Z5 G d( d)          Z6 G d* d+e5          Z7 G d, d-ej8                  Z9 ej:        e9           dS ).zCSS matcher.    )annotations)datetime   )utilN)	css_types)IteratorIterableAnyCallableSequencecastz[^ 	
]z	[^ 	
]+ >~+z: z:>z:~z:+zhttp://www.w3.org/1999/xhtmlz$http://www.w3.org/XML/1998/namespace)ltrrtlautoz0^(?P<value>-?(?:[0-9]{1,}(\.[0-9]+)?|\.[0-9]+))$z*^(?P<hour>[0-9]{2}):(?P<minutes>[0-9]{2})$z)^(?P<year>[0-9]{4,})-(?P<month>[0-9]{2})$z)^(?P<year>[0-9]{4,})-W(?P<week>[0-9]{2})$z;^(?P<year>[0-9]{4,})-(?P<month>[0-9]{2})-(?P<day>[0-9]{2})$zd^(?P<year>[0-9]{4,})-(?P<month>[0-9]{2})-(?P<day>[0-9]{2})T(?P<hour>[0-9]{2}):(?P<minutes>[0-9]{2})$z(?:(?:-\*-)(?:\*(?:-|$))*|-\*$))      	                        c                  "    e Zd ZdZd
dZddZd	S )_FakeParentz
    Fake parent class.

    When we have a fragment with no `BeautifulSoup` document object,
    we can't evaluate `nth` selectors properly.  Create a temporary
    fake parent so we can traverse the root element as a child.
    elementbs4.TagreturnNonec                    |g| _         dS )Initialize.N)contents)selfr!   s     _/var/www/html/nodeJS/PythonScripts/venv3.11/lib/python3.11/site-packages/soupsieve/css_match.py__init__z_FakeParent.__init__D   s     !	    bs4.PageElementc                *    t          | j                  S )zLength.)lenr'   r(   s    r)   __len__z_FakeParent.__len__I   s     4=!!!r+   N)r!   r"   r#   r$   )r#   r,   )__name__
__module____qualname____doc__r*   r0    r+   r)   r    r    ;   sF         " " " "
" " " " " "r+   r    c                     e Zd ZdZed?d            Zed@d
            ZedAd            ZedAd            Z	edAd            Z
edAd            ZedAd            ZedAd            ZedAd            ZedBd            ZedCd            ZdCdZdCdZdDdEdZ	 	 	 	 dFdGd#Z	 	 dHdId$ZdDdJd%ZedKd'            ZedKd(            ZedKd)            ZedLdMd*            ZedLdMd+            ZedCd,            ZedNd0            ZedOd3            Ze	 dPdQd7            ZedRd9            Z edSd;            Z!dDdTd<Z"dDdUd>Z#dS )V_DocumentNavz#Navigate a Beautiful Soup document.tagr
   r#   r$   c                n    |                      |          st          dt          |                     dS )z%Check if valid input tag or document.z:Expected a BeautifulSoup 'Tag', but instead received type N)is_tag	TypeErrortype)clsr8   s     r)   assert_valid_inputz_DocumentNav.assert_valid_inputR   sD    
 zz# 	fdY]^aYbYbddeee	f 	fr+   objr"   boolc                6    t          | t          j                  S )zIs `BeautifulSoup` object.)
isinstancebs4BeautifulSoupr?   s    r)   is_docz_DocumentNav.is_docZ   s     #s0111r+   r,   c                6    t          | t          j                  S )zIs tag.)rB   rC   TagrE   s    r)   r:   z_DocumentNav.is_tag_   s     #sw'''r+   c                6    t          | t          j                  S )zIs declaration.)rB   rC   DeclarationrE   s    r)   is_declarationz_DocumentNav.is_declarationd   s     #s///r+   c                6    t          | t          j                  S )z	Is CDATA.)rB   rC   CDatarE   s    r)   is_cdataz_DocumentNav.is_cdatai   s     #sy)))r+   c                6    t          | t          j                  S )zIs processing instruction.)rB   rC   ProcessingInstructionrE   s    r)   is_processing_instructionz&_DocumentNav.is_processing_instructionn   s     #s8999r+   c                6    t          | t          j                  S )zIs navigable string.)rB   rC   NavigableStringrE   s    r)   is_navigable_stringz _DocumentNav.is_navigable_strings   s     #s2333r+   c                    t          | t          j        t          j        t          j        t          j        t          j        f          S )zIs special string.)rB   rC   CommentrJ   rM   rP   DoctyperE   s    r)   is_special_stringz_DocumentNav.is_special_stringx   s,     #S_ciIbdgdopqqqr+   c                X    |                      |          o|                     |           S )z Check if node is content string.)rT   rX   )r=   r?   s     r)   is_content_stringz_DocumentNav.is_content_string}   s.     &&s++NC4I4I#4N4N0NNr+   elr    c                     t          |           S )z'Create fake parent for a given element.)r    r[   s    r)   create_fake_parentz_DocumentNav.create_fake_parent   s     2r+   c                *    t          | j                  S )z2Check if element (or document) is from a XML tree.)r@   _is_xmlr]   s    r)   is_xml_treez_DocumentNav.is_xml_tree   s     BJr+   c                    t          |                     |          r|j        nt          j        |j                  dk    o|                     |                    S )z Check if element is an `iframe`.iframe)r@   ra   namer   loweris_html_tagr(   r[   s     r)   	is_iframez_DocumentNav.is_iframe   sY     ))"--Fbgg4:bg3F3F8S !R  
 
 	
r+   c                    | j         o| j         |u }|s5|                     |          }|duo| j        o|                     |          }|S )z
        Return whether element is a root element.

        We check that the element is the root of the tree (which we have already pre-calculated),
        and we check if it is the root element under an `iframe`.
        N)root
get_parentis_htmlrh   )r(   r[   rj   parents       r)   is_rootz_DocumentNav.is_root   sW     y,TY"_ 	R__R((F%Q$,Q4>>&;Q;QDr+   F	no_iframeIterator[bs4.PageElement]c              #  V   K   |r|                      |          s|j        E d{V  dS dS )z$Get contents or contents in reverse.N)rh   r'   r(   r[   ro   s      r)   get_contentsz_DocumentNav.get_contents   sK       	#r 2 2 	#{"""""""""	# 	#r+   NTstart
int | Nonereversetagsc              #  :  K   |r|                      |          s}t          |j                  dz
  }||r|nd}n|}|rdn|dz   }|rdnd}	d|cxk    r|k    rAn dS ||k    r9|j        |         }
||	z  }|r|                     |
          r|
V  ||k    3dS dS dS dS )zGet children.r   Nr   )rh   r.   r'   r:   )r(   r[   rt   rv   rw   ro   lastindexendincrnodes              r)   get_childrenz_DocumentNav.get_children   s        	#r 2 2 	#r{##a'D} '.Q-""TAXC '22aDE!!!!T!!!!!!sll;u-DTME #4;;t#4#4 #"


	 sllll	# 	# "!"lr+   c              #    K   |r|                      |          sd}|j        D ]}|||ur	d}|                     |          }|r~|r||                      |          rg|j        |j        }nN|}|                     |          r0|j        r)|j        d         }|                     |          r|j        )|j        }|V  | dS |r|r|V  dS dS )zGet descendants.Nry   )rh   descendantsr:   next_siblingr'   next_element)r(   r[   rw   ro   	next_goodchildr:   
last_childs           r)   get_descendantsz_DocumentNav.get_descendants   s:       	 r 2 2 	 I    (I--  $IU++  DNN5,A,A )5$)$6		%*
"kk*55 A*:M A)3)<R)@J #kk*55 A*:M A$.$;	KKK (  v  KKK5	  	    r+   c                J    |j         }|r||                     |          rd}|S )zGet parent.N)rm   rh   )r(   r[   ro   rm   s       r)   rk   z_DocumentNav.get_parent   s3      	+v0F0F+Fr+   
str | Nonec                ,    t          d| j                  S )Get tag.r   )r   rd   r]   s    r)   get_tag_namez_DocumentNav.get_tag_name   s     L"'***r+   c                ,    t          d| j                  S )Get prefix.r   )r   prefixr]   s    r)   get_prefix_namez_DocumentNav.get_prefix_name   s     L"),,,r+   c                ,    t          d| j                  S )zGet namespace `URI`.r   )r   	namespacer]   s    r)   get_uriz_DocumentNav.get_uri   s     L",///r+   c                    |j         }|r7|                     |          s"| |j         }|r|                     |          s| |S )zGet next sibling tag.)r   r:   r=   r[   rw   siblings       r)   get_nextz_DocumentNav.get_next  sZ     / 	+3::g.. 	+73F*G  	+3::g.. 	+73Fr+   c                    |j         }|r7|                     |          s"| |j         }|r|                     |          s| |S )zGet previous sibling tag.)previous_siblingr:   r   s       r)   get_previousz_DocumentNav.get_previous  s[     % 	/3::g.. 	/73F.G  	/3::g.. 	/73Fr+   c                ^    | rt          | d          nd}t          |o
|t          k              S )z
        Check if element has an HTML namespace.

        This is a bit different than whether a element is treated as having an HTML namespace,
        like we do in the case of `is_html_tag`.
        r   N)getattrr@   NS_XHTML)r[   nss     r)   has_html_nsz_DocumentNav.has_html_ns  s4     *,5WR%%%B)2>***r+   	attr_namestrtuple[str | None, str | None]c                F    t          |dd          t          |dd          fS )z7Return namespace and attribute name without the prefix.r   Nrd   )r   )r[   r   s     r)   split_namespacez_DocumentNav.split_namespace   s(     y+t44giQU6V6VVVr+   valuestr | Sequence[str]c           	        |dS t          |t                    r|S t          |t                    r|                    d          S t          |t                    rg }|D ]}t          |t          t          f          s8t          |t                    r#|                    t          |                     V|                    t          t          |                     |                               |S t          |          S )z6Normalize the value to be a string or list of strings.N utf8)rB   r   bytesdecoder   appendr   normalize_value)r=   r   	new_valuevs       r)   r   z_DocumentNav.normalize_value&  s   
 =2 uc"" 	L eU## 	(<<''' eX&& 	I H H!!c5\22 Hz!X7N7N H $$SVV,,,, $$T#s/B/B1/E/E%F%FGGGG 5zzr+   rd   defaultstr | Sequence[str] | Nonec                   |}|j         r2	 |                     |j        |                   }n^# t          $ r Y nRw xY w|j                                        D ]4\  }}t          j        |          |k    r|                     |          } n5|S )zGet attribute by name.)r`   r   attrsKeyErroritemsr   re   )r=   r[   rd   r   r   kr   s          r)   get_attribute_by_namez"_DocumentNav.get_attribute_by_nameG  s     : 		++BHTN;;    ((  1:a==D((//22EE ) s    , 
990Iterator[tuple[str, str | Sequence[str] | None]]c              #  z   K   |j                                         D ]\  }}||                     |          fV  dS )zIterate attributes.N)r   r   r   )r=   r[   r   r   s       r)   iter_attributesz_DocumentNav.iter_attributes]  sS       HNN$$ 	, 	,DAqS((+++++++	, 	,r+   Sequence[str]c                    |                      |dg           }t          |t                    rt                              |          }t          t          t                   |          S )zGet classes.class)r   rB   r   	RE_NOT_WSfindallr   r   )r=   r[   classess      r)   get_classesz_DocumentNav.get_classesd  sT     ++B<<gs## 	1''00GHSM7+++r+   c                r     d                      fd                     |d|          D                       S )z	Get text.r   c                >    g | ]}                     |          |S r5   rZ   .0r~   r(   s     r)   
<listcomp>z)_DocumentNav.get_text.<locals>.<listcomp>q  s.    xxxd[_[q[qrv[w[wxTxxxr+   F)rw   ro   )joinr   rr   s   `  r)   get_textz_DocumentNav.get_textm  sG     wwxxxxd222EY2WWxxx
 
 	
r+   	list[str]c                J      fd                      ||          D             S )zGet Own Text.c                >    g | ]}                     |          |S r5   r   r   s     r)   r   z-_DocumentNav.get_own_text.<locals>.<listcomp>w  s-    llltOeOefjOkOkllllr+   ro   )rs   rr   s   `  r)   get_own_textz_DocumentNav.get_own_textt  s3     mlll!2!22!2!K!Kllllr+   )r8   r
   r#   r$   )r?   r"   r#   r@   )r?   r,   r#   r@   )r[   r"   r#   r    r[   r"   r#   r@   F)r[   r"   ro   r@   r#   rp   )NFTF)r[   r"   rt   ru   rv   r@   rw   r@   ro   r@   r#   rp   )TF)r[   r"   rw   r@   ro   r@   r#   rp   )r[   r"   ro   r@   r#   r"   r[   r"   r#   r   )T)r[   r"   rw   r@   r#   r,   )r[   r"   r   r   r#   r   )r   r
   r#   r   N)r[   r"   rd   r   r   r   r#   r   )r[   r"   r#   r   )r[   r"   r#   r   )r[   r"   ro   r@   r#   r   )r[   r"   ro   r@   r#   r   )$r1   r2   r3   r4   classmethodr>   staticmethodrF   r:   rK   rN   rQ   rT   rX   rZ   r^   ra   rh   rn   rs   r   r   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r5   r+   r)   r7   r7   O   s       --f f f [f 2 2 2 \2 ( ( ( \( 0 0 0 \0 * * * \* : : : \: 4 4 4 \4 r r r \r O O O [O
    \
       \ 

 
 
 
   # # # # # !# # # # #: 	"  "  "  "  " H     + + + \+
 - - - \-
 0 0 0 \0
     [     [ 	+ 	+ 	+ \	+ W W W \W
    [@ 
 /3	    [* , , , [, , , , [,
 
 
 
 
m m m m m m mr+   r7   c                      e Zd ZdZedd            Zedd
            Zedd            Zedd            Zedd            Z	edd            Z
edd            ZdS )Inputsz-Class for parsing and validating input items.yearintmonthdayr#   r@   c                    t           }|t          k    r*| dz  dk    r	| dz  dk    s	| dz  dk    rt          nt          }n|t          v rt
          }d|cxk    o|k    nc S )zValidate day.r   r   d   i  r   )
LONG_MONTHFEBFEB_LEAP_MONTH	FEB_MONTH	MONTHS_30SHORT_MONTH)r   r   r   max_dayss       r)   validate_dayzInputs.validate_day}  sz     C<<+/!8q==tczQUY\_U_cdUdUd~~ktHHi"HC####8#####r+   weekc                    t          j        d dd d|  d                                          d         }|dk    rd}d|cxk    o|k    nc S )zValidate week.   -r   z%m-%d-%Yr   5   )r   strptimeisocalendar)r   r   max_weeks      r)   validate_weekzInputs.validate_week  sn     $%8%8R%8%8$%8%8*EEQQSSTUVq==HD$$$$H$$$$$r+   c                "    d| cxk    odk    nc S )zValidate month.r   r   r5   )r   s    r)   validate_monthzInputs.validate_month  s&     ERr+   c                    d| k    S )zValidate year.r   r5   )r   s    r)   validate_yearzInputs.validate_year  s     Dyr+   hourc                "    d| cxk    odk    nc S )zValidate hour.r      r5   )r   s    r)   validate_hourzInputs.validate_hour  s     DBr+   minutesc                "    d| cxk    odk    nc S )zValidate minutes.r   ;   r5   )r   s    r)   validate_minuteszInputs.validate_minutes  s&     G!!!!r!!!!!r+   ityper   r   r   tuple[float, ...] | Nonec                \   d}||S |dk    rt                               |          }|rt          |                    d          d          }t          |                    d          d          }t          |                    d          d          }|                     |          r1|                     |          r|                     |||          r|||f}nR|dk    rt                              |          }|rtt          |                    d          d          }t          |                    d          d          }|                     |          r|                     |          r||f}n|dk    rt                              |          }|rut          |                    d          d          }t          |                    d          d          }|                     |          r| 	                    ||          r||f}n!|dk    rt                              |          }|rtt          |                    d	          d          }	t          |                    d
          d          }
|                     |	          r|                     |
          r|	|
f}n|dk    r?t                              |          }|r!t          |                    d          d          }t          |                    d          d          }t          |                    d          d          }t          |                    d	          d          }	t          |                    d
          d          }
|                     |          r]|                     |          rH|                     |||          r1|                     |	          r|                     |
          r||||	|
f}nC|dv r?t                              |          }|r#t          |                    d                    f}|S )zParse the input value.Ndater   
   r   r   r   timer   r   datetime-local)numberranger   )RE_DATEmatchr   groupr   r   r   RE_MONTHRE_WEEKr   RE_TIMEr   r   RE_DATETIMERE_NUMfloat)r=   r   r   parsedmr   r   r   r   r   r   s              r)   parse_valuezInputs.parse_value  s    =LF??e$$A 01776??B//AGGG,,b11!''%.."--$$T** 0s/A/A%/H/H 0SM]M]^bdiknMoMo 0"E3/Fgu%%A +1776??B//AGGG,,b11$$T** +s/A/A%/H/H +"E]Ff__e$$A *1776??B//1776??B//$$T** *s/@/@t/L/L *"D\Ff__e$$A -1776??B//aggi00"55$$T** -s/C/CG/L/L -"G_F&&&!!%((A 
?1776??B//AGGG,,b11!''%.."--1776??B//aggi00"55%%d++?030B0B50I0I?NQN^N^_cejloNpNp?%%d++?030D0DW0M0M? #E3g>F)))U##A 4 0 0113r+   N)r   r   r   r   r   r   r#   r@   )r   r   r   r   r#   r@   )r   r   r#   r@   )r   r   r#   r@   )r   r   r#   r@   )r   r   r#   r@   )r   r   r   r   r#   r   )r1   r2   r3   r4   r   r   r   r   r   r   r   r   r  r5   r+   r)   r   r   z  s        77$ $ $ \$ % % % \%       \ 
    \
    \
 " " " \"
 4 4 4 [4 4 4r+   r   c                  F   e Zd ZdZdWdZdXdZdYdZdZdZd[dZd[dZ	d\dZ
d]dZd^dZd_d!Zd`d$Zd_d%Zdad'Zdbd)Zdcddd-Zdbd.Zdbd/Zded2Zdfd4ZdZd5ZdZd6Zdgd8Zdhd:ZdZd;Zdid=Zdjd@ZdZdAZdZdBZdkdEZ dldGZ!dmdIZ"dZdJZ#dZdKZ$dndLZ%dodpdPZ&dqdRZ'drdTZ(dZdUZ)dVS )sCSSMatchzPerform CSS matching.	selectorsct.SelectorListscoper"   
namespacesct.Namespaces | Noneflagsr   r#   r$   c                ,   |                      |           || _        g | _        g | _        g | _        || _        |i n|| _        || _        d| _        |}| 	                    |          }|r|}| 	                    |          }|d}| 
                    |          s|}n|                     |          D ]}|} || _        ||ur|n|| _        |                     |          | _        |                     |          | _        | j         p| j        | _        dS )r&   NF)r>   r8   cached_meta_langcached_default_formscached_indeterminate_formsr  r  r  iframe_restrictrk   rF   r   rj   r  r   has_html_namespacera   is_xmlrl   )	r(   r  r  r  r  docrm   rj   r   s	            r)   r*   zCSSMatch.__init__  sD    	&&& "$&!*,'" * 2""

$ %% 	*C__S))F  	* {{3 	DD**3//  	#3..UUD
"&"2"24"8"8 &&s++;A$*Ar+   r@   c                    | j         p| j        S )z3Check if namespaces are supported in the HTML type.)r  r  r/   s    r)   supports_namespaceszCSSMatch.supports_namespaces  s     {5d55r+   r[   r   c                t    |                                  rd}|                     |          }|r|}nt          }|S )zGet tag namespace.r   )r   r   r   )r(   r[   r   r   s       r)   
get_tag_nszCSSMatch.get_tag_ns  sG     ##%% 	!Ib!!B 	 Ir+   c                >    |                      |          t          k    S )z"Check if tag is in HTML namespace.)r"  r   rg   s     r)   rf   zCSSMatch.is_html_tag  s     r""h..r+   r   c                j    |                      |          }|| j        st          j        |          n|S )r   )r   r  r   re   r(   r[   rd   s      r)   get_tagzCSSMatch.get_tag#  s8       $$#'#3DK#3tz$TQr+   c                j    |                      |          }|| j        st          j        |          n|S )r   )r   r  r   re   )r(   r[   r   s      r)   
get_prefixzCSSMatch.get_prefix)  s9     %%b))%+%7%7tz&!!!QWWr+   ru   c           
     (   |                      |d          D ]}|                     |          rt                              t	          j        |                     |dd                    d          }|                     |          dv s|                     |          r|| 	                    |          }||c S | 
                    |          r|D ]<}t          j        |          }|dv r"|dk    rt          j        nt          j        c c S =dS )	z%Get directionality from element text.Frw   dirr   N)bdiscriptstyletextarearc   ALRLr3  )r   r:   DIR_MAPgetr   re   r   r&  rf   	find_bidirX   unicodedatabidirectionalctSEL_DIR_LTRSEL_DIR_RTL)r(   r[   r~   	directionr   cbidis          r)   r6  zCSSMatch.find_bidi/  sO    %%bu%55 	M 	MD {{4    $KK
43M3MdTY[]3^3^(_(_aeff	LL&&*ZZZ((.. [) t,,$ LLL  %%d++   M M"033+++-1S[[2>>bnLLLLL ,M tr+   
lang_rangelang_tagc                x   d}t                               d|                                          }|                    d          }|                                                    d          }t	          |          }t	          |          }d}d}	||         }
||	         }|dk    r|dk    r
|
s|
|k    rdS |
dk    r|
|k    s|
dk    r
|dk    r|sd}|dz  }|	dz  }	|r^||k     rX||         }
	 ||	         }n# t
          $ r d}Y (w xY w|
sd}1||
k    r|dz  }nt	          |          dk    rd}S|	dz  }	|r||k     X|S )zFilter the language tags.Tr   r   r   *F)RE_WILD_STRIPsubre   splitr.   
IndexError)r(   r?  r@  r  rangessubtagslengthslengthrindexsindexrss               r)   extended_language_filterz!CSSMatch.extended_language_filterS  s    "&&sJ77==??
!!#&&..""((--Vg,,6NFO Q;;7a<<<a1ff4 HHaQ#XX'Q,,q,E!!  	vAFO    	   a! Q1 aKF5  	8 s   +C4 4DDattrr   r   c                   d}|                                  rd}|r%| j                            |          }||dk    rdS nd}|                     |          D ]\  }}|                     ||          \  }}	|C| j        r||k    s1| j        s.t          j        |          t          j        |          k    r|} nLc|||k    r|dk    rr| j        s+t          j        |          t          j        |	          k    rn||	k    r|} nH|                     |          D ]2\  }}t          j        |          t          j        |          k    r0|} |S )z3Match attribute name and return value if it exists.NrB  )r   r  r5  r   r   r  r   re   )
r(   r[   rP  r   r   r   r   r   r   rd   s
             r)   match_attribute_namezCSSMatch.match_attribute_name  s    ##%% )	E _((00:&C--4,,R00  1 #'"6"6r1"="=	4 : 		4;	4:VZK[K[_c_ijk_l_lKlKl !  $iFcMM BF DJt$$
4(8(8888SW[_S_S_,,R00  1:d##tz!}}44r+   r8   ct.SelectorTagc                B   d}|                      |          }| j                            d          }|j        dn| j                            |j                  }|j        |	||k    rd}n3|j        |j        dk    r|rd}n|j        r|j        dk    r
|||k    rd}|S )z#Match the namespace of the element.Tr   NFrB  )r"  r  r5  r   )r(   r[   r8   r  r   default_namespacetag_nss          r)   match_namespacezCSSMatch.match_namespace  s     OOB''	 O//33z)t/B/B3:/N/N:#4#@YRcEcEcEEj$r)9)9i)9EE J	J#6>Y&5H5HEr+   
attributes tuple[ct.SelectorAttribute, ...]c                .   d}|r|D ]}|                      ||j        |j                  }| j        r|j        r|j        n|j        }|d} nIt          |t                    r|nd                    |          }|t|	                    |          d} n|S )zMatch attributes.TNFr   )
rR  	attributer   r  xml_type_patternpatternrB   r   r   r  )r(   r[   rX  r  atempr]  r   s           r)   match_attributeszCSSMatch.match_attributes  s      	  00Q[!(KK04a@Ra!,,XYXa<!EE *4 5 5I388D>>?]]5))1!EE 2 r+   c                    | j         s |j        t          j        |j                  n|j        }|duo||                     |          dfv S )zMatch tag name.NrB  )r  rd   r   re   r&  )r(   r[   r8   rd   s       r)   match_tagnamezCSSMatch.match_tagname  s\     -1K^CH<P
38$$$VYV^ 0b))3//
 	
r+   ct.SelectorTag | Nonec                n    d}|0|                      ||          sd}|                     ||          sd}|S )zMatch the tag.TNF)rW  rb  )r(   r[   r8   r  s       r)   	match_tagzCSSMatch.match_tag  sM     ?''C00 %%b#.. r+   relationc                .   d}t          |d         t          j                  r|S |d         j        t          k    rX|                     || j                  }|s8|r6|                     ||          }|                     || j                  }|s|6n|d         j        t          k    r5|                     || j                  }|r|                     ||          }n|d         j        t          k    rI| 
                    |          }|s1|r/|                     ||          }| 
                    |          }|s|/nX|d         j        t          k    rB| 
                    |          }|r+|                     |          r|                     ||          }|S )zMatch past relationship.Fr   r   )rB   r9  SelectorNullrel_type
REL_PARENTrk   r  match_selectorsREL_CLOSE_PARENTREL_SIBLINGr   REL_CLOSE_SIBLINGr:   )r(   r[   rf  foundrm   r   s         r)   match_past_relationszCSSMatch.match_past_relations  s    hqk2?33 	LA;:--__R43G_HHF Q Q,,VX>>4;OPP  Q Q a[!%555__R43G_HHF ?,,VX>>a[![00''++G 5 5,,Wh??++G44  5 5 a[!%666''++G @4;;w// @,,Wh??r+   Frm   	recursivec                    d}|r| j         }n| j        } ||| j                  D ]}|                     ||          }|r n|S )zMatch future child.Fr   )r   r   r  rk  )r(   rm   rf  rq  r  childrenr   s          r)   match_future_childzCSSMatch.match_future_child  sp      	)+HH(HXf0DEEE 	 	E((99E r+   c                r   d}t          |d         t          j                  r|S |d         j        t          k    r|                     ||d          }n|d         j        t          k    r|                     ||          }n|d         j        t          k    rI|                     |          }|s1|r/| 	                    ||          }|                     |          }|s|/nX|d         j        t          k    rB|                     |          }|r+|                     |          r| 	                    ||          }|S )zMatch future relationship.Fr   T)rB   r9  rh  ri  REL_HAS_PARENTrt  REL_HAS_CLOSE_PARENTREL_HAS_SIBLINGr   rk  REL_HAS_CLOSE_SIBLINGr:   )r(   r[   rf  ro  r   s        r)   match_future_relationszCSSMatch.match_future_relations'  sB    hqk2?33 	LA;>11++B$??EEa[!%999++B99EEa[!_44mmB''G 1 1,,Wh??--00  1 1 a[!%:::mmB''G @4;;w// @,,Wh??r+   c                   d}t          |d         t          j                  s|d         j        |S |d         j                            d          r|                     ||          }n|                     ||          }|S )z%Match relationship to other elements.Fr   N:)rB   r9  rh  ri  
startswithrz  rp  )r(   r[   rf  ro  s       r)   match_relationszCSSMatch.match_relations>  s     hqk2?33 	x{7K7SLA;**3// 	<//H==EE--b(;;Er+   idstuple[str, ...]c                R    d}|D ]!}||                      |dd          k    rd} n"|S )zMatch element's ID.Tidr   F)r   )r(   r[   r  ro  is        r)   match_idzCSSMatch.match_idM  sK      	 	AD..r4<<<< = r+   r   c                N    |                      |          }d}|D ]
}||vrd} n|S )zMatch element's classes.TF)r   )r(   r[   r   current_classesro  r=  s         r)   match_classeszCSSMatch.match_classesW  sL     **2.. 	 	A'' ( r+   c                h   |                      |          }|r|                     |d          }|rs|q|                     |          s>|                     |          r|                                s|                     |          rd}n|                     |d          }|r|q|r|                     |d          }|rs|q|                     |          s>|                     |          r|                                s|                     |          rd}n|                     |d          }|r|q|S )zMatch element as root.Fr*  )rn   r   r:   rZ   striprN   r   )r(   r[   rn   r   s       r)   
match_rootzCSSMatch.match_rootb  s    ,,r"" 		E'''77G Eg1KK((E-1-C-CG-L-LEQXQ^Q^Q`Q`EMM'**E $GG"//e/DDG  Eg1  		AmmBUm33G Ag1KK((A-1-C-CG-L-LAQXQ^Q^Q`Q`AMM'**A $GG"mmG%m@@G  Ag1 r+   c                    | j         |u S )zMatch element as scope.)r  rg   s     r)   match_scopezCSSMatch.match_scope|  s     zRr+   r   c                    |                      |          |                      |          k    o+|                     |          |                     |          k    S )z!Match tag type for `nth` matches.)r&  r"  )r(   r[   r   s      r)   match_nth_tag_typezCSSMatch.match_nth_tag_type  sN     \\%  DLL$4$44 <__U##tr':'::	
r+   nthc                   d}|D ]I}d}|j         r|                     ||j                   s n!|                     |          }||                     |          }|j        }t          |          dz
  }|r|nd}d}	|j        }
|j        }|j        }d}d}|rdnd}|r|
|z  |z   n|
x}}|rd}|dk     s||k    rs|dk     r0d|z
  }||dk    rn_d}||z  }|r|
|z  |z   n|
x}}d|z
  }||k    rn>n1||z
  }||dk    rn/d}||z  }|r|
|z  |z   n|
x}}||z
  }||k    rn|}|dk     m||k    s|}|
dk     r#|dk    r|}||z  }|r|
|z  |z   n|
x}}|dk    d}|}|r|
|z  |z   n|
x}}d|cxk    r	|dz   k    rn nd}| 	                    |||dk     d          D ]x}||z  }| 
                    |          s|j         r|                     ||j                   s@|j        r|                     ||          s^|	dz  }	|	|k    r	||u rd}n n||u r ny||u rn3|}||z  }|dk     rn%|r|
|z  |z   n|
}||k    rnd|cxk    r	|dz   k    n |s nK|S )zMatch `nth` elements.TFNr   r   ry   )rt   rv   rw   )r  rk  rk   r^   rz   r.   r^  bnr   r:   of_typer  )r(   r[   r  matchedr  rm   rz   
last_indexr{   relative_indexr^  r  varcount
count_incrfactoridxlast_idxadjustdiff_lowdiff	diff_highlowestr   s                           r)   	match_nthzCSSMatch.match_nth  s     ]	 ]	AG{ 4#7#7AK#H#H __R((F~00446DVqJ"&-JJAENAA#CEJ&RRQF.18QY]]q8C(  &= Aggz!1!1Qww#$s7!-&A++!!#+:=)DUQ1Dh 3w8++! , %(*$4	!-&B,,!!"+:=)DUQ1Dh"Z/9,,!$(	+ Aggz!1!14 q55((!&+:=)DUQ1Dh (( "$J25!<UQ1<h s,,,,j1n,,,,,!..vUFUVJ]b.cc  EVOE;;u-- ! { !4+?+?q{+S+S ! y !)@)@U)K)K ! "a'N%,, B;;&*GG!E{{ #B;;#199'*1a%i!mms??= s,,,,j1n,,,,>  r+   c                    d}|                      |d          D ]N}|                     |          rd} n4|                     |          rt                              |          rd} nO|S )z)Check if element is empty (if requested).TFr*  )r   r:   rZ   RE_NOT_EMPTYsearch)r(   r[   is_emptyr   s       r)   match_emptyzCSSMatch.match_empty  s     &&r&66 	 	E{{5!!  ''.. <3F3Fu3M3M  r+   tuple[ct.SelectorList, ...]c                D    d}|D ]}|                      ||          sd}|S )zMatch selectors.TF)rk  )r(   r[   r  r  sels        r)   match_subselectorszCSSMatch.match_subselectors  s;      	 	C''C00 r+   containstuple[ct.SelectorContains, ...]c                    d}d}|D ]u}|@|j         r|                     || j                  }n|                     || j                  }d}|j        D ]#}|j         r|D ]
}||v rd} n|r n
||v rd} n$|sd}v|S )z"Match element if it contains text.TNr   F)ownr   rl   r   text)	r(   r[   r  r  contentcontain_listro  r  r=  s	            r)   match_containszCSSMatch.match_contains  s     $ 	 	L# H"//dl/KKGG"mmB$,mGGGE$)  # 
$ " "199$(E!E %   w $ '  r+   c                :   d}d}|                      |d          }|rN|L|                     |          dk    r|                     |          r|}n|                      |d          }|r|Ld}| j        D ]\  }}||u r
d}||u rd} n|s|                     |d          D ]x}|                     |          }	|	dk    r nZ|	dv rU|                     |dd          }
|
r<t          j        |
          d	k    r$| j                            ||f           ||u rd} ny|S )
Match default.FNTr   form)inputbuttonr<   r   submit)	rk   r&  rf   r  r   r   r   re   r   )r(   r[   r  r  rm   
found_formftr   rd   r   s              r)   match_defaultzCSSMatch.match_default   s     t44 	A||F##v--$2B2B62J2J-4@@	  	A 
- 	 	DAqDyy!
77 E	   	--dd-CC  ||E**6>>E...225&"EEA TZ]]h66188$GGG;;$(Er+   c                    d}t          t                               |d                    }d fd} ||          }d} j        D ]\  }}}	||u r||k    r
d}|	du rd} n|sd}
                     |d	          D ]}||u r                     |          }|d
k    rd}d}d}                     |          D ]\  }}t          j        |          dk    rt          j        |          dk    rd}n;t          j        |          dk    r	||k    rd}nt          j        |          dk    rd}|r|r|r ||          |u rd}
 n|
r n|
sd} j        	                    |||f           |S )r  Frd   r[   r"   r#   bs4.Tag | Nonec                    d}                     | d          }|Q                    |          dk    r                    |          r|}n |}                     |d          }||}n|Q|S )zFind this input's form.NTr   r  )rk   r&  rf   )r[   r  rm   last_parentr(   s       r)   get_parent_formz5CSSMatch.match_indeterminate.<locals>.get_parent_formM  s    D__R4_88F,<<''611d6F6Fv6N6N1!D$4@@>&D , Kr+   Tr   r  r<   radiochecked)r[   r"   r#   r  )
r   r   r   r  r   r&  r   r   re   r   )r(   r[   r  rd   r  r  r  r  r  r  r  r   tag_nameis_radiocheckhas_namer   r   s   `                 r)   match_indeterminatezCSSMatch.match_indeterminateG  s	    C33B??@@	 	 	 	 	 	 r"" 
6 	 	GAq!DyyQ$YY!
99 E  	HG--dd-CC  B;;<<..w&&$H!E$H $ 4 4U ; ; 	" 	"1:a==F22tz!}}7O7O'+HH!Z]]f44d'+HH!Z]]i77$(E# " "( "u?U?UY]?]?]&*G!E E +22D$3FGGGr+   langstuple[ct.SelectorLang, ...]c           	     >   d}|                                  }| j        }| j        }|}d}d}	|s|                     |          }
|                     |          D ]y\  }}|                     ||          \  }}|r|
r!| j        st          j        |          n|dk    s2|r4|
s2|t          k    r'| j        s|t          j        |          n|dk    r|} nz|}	| 
                    || j                  }||	}|                     |          }|	}n||#| j        r| j        D ]}||d         u r|d         }|| j        r|r|j        dk    rd}dD ][}d}|                     || j                  D ]6}|                     |          |k    r|                     |          rd	}|} n7|s n\|r2|D ]}|                     |          r|                     |          d
k    r|                     |          rd}d}|                     |          D ]\  }}t          j        |          dk    rt          j        |          dk    rd	}t          j        |          dk    r|}|rH|rF|}| j                            t'          t(          |          t'          t(          |          f            n| n|/| j                            t'          t(          |          df           |;|D ]8}d}|D ]-}|                     |t'          t(          |                    rd	}.|s n9|S )zMatch languages.FNlangr   r   r   html)r  headTmetaz
http-equivzcontent-languager  r   )r   rj   r  r   r   r   r  r   re   NS_XMLrk   rl   r  rd   r   r&  rf   r:   r   r   r   rO  )r(   r[   r  r  has_nsrj   r  rm   
found_langrz   r   r   r   attr_nsrP  cachero  r8   r   c_langr  patternsr]  s                          r)   
match_langzCSSMatch.match_lang  s    ))++y!4 
 	**622K,,V44 
 
1 $ 4 4VQ ? ? $/KO;6]djmmm\]bh5h5h 6i'2 6i7>&7H7H15[AQD)))W[`fff "#JED__Vt|_DDF~%)%5%5d%;%;")  	. $"7. * *58##!&qJ t{7Idi[aNaNaE'  !..v.NN  E||E**c11d6F6Fu6M6M1 $!& E  H#  E{{5)) &dll5.A.AV.K.KPTP`P`agPhPh.K!&"&$($8$8$?$? & &DAq#z!}}<<ARdAdAd)-#z!}}	99*+% &' &-4
 $ 5 < <d3ootTWYcOdOd=e f f f %!- .%)00$sD//21FGGG !!  ' % %G44Wd3
>S>STT % $ E r+   directionalityc           	     `    |t           j        z  r|t           j        z  rdS |                     |          sdS t                              t          j                             |dd                    d          }|dvr||k    S  	                    |          }|r|t           j        |k    S  
                    |          }|dk    }|dk    }|dk    }|r)t          j                             |d	d                    nd}	|r|	d
k    r|t           j        |k    S |r|	dv s|r|dk    r|r7d                     fd                     |d          D                       }
n*t          t                               |dd                    }
|
rS|
D ]@}t          j        |          }|dv r&|dk    rt           j        nt           j        }||k    c S At           j        |k    S |rt           j        |k    S                                           |d          |          S |r||dk    rZ                     |          }|||k    S |rt           j        |k    S                                           |d          |          S                                           |d          |          S )zCheck directionality.FNr+  r   )Nr   r  r/  r,  r<   tel)r  r  r  urlemailr   c              3  F   K   | ]}                     |          |V  d S r   r   r   s     r)   	<genexpr>z%CSSMatch.match_dir.<locals>.<genexpr>  s8      wwZ^ZpZpquZvZvwwwwwwwr+   Tr   r   r0  r3  )r9  r:  r;  rf   r4  r5  r   re   r   rn   r&  r   rs   r   r   r7  r8  	match_dirrk   r6  )r(   r[   r  r<  rn   rd   is_inputis_textareais_bdir   r   r=  r>  s   `            r)   r  zCSSMatch.match_dir  s    BN* 	~/N 	5:T--b11:5 KK
4+E+Eb%QS+T+T U UW[\\	I%%.. ,,r"" 	4y(>^33 ||B7?j(JRZ
455b&"EEFFFXZ 	49+<>^33  	W%#LLLQ\Lbkopbpbp Owwww1B1B2QU1B1V1VwwwwwS$"<"<R""M"MNN 	8 ; ;A&4Q77D///6:ckkBNNr~	(N:::: 0 ~77 8~77>>$//"/"E"E~VVV  	Wy(Y!^^r**I$ N22 8~77>>$//"/"E"E~VVV ~~doobDoAA>RRRr+   	conditionc                   d}t          j        |                     |d                    }t                              |t          t          |                     |dd                              }t                              |t          t          |                     |dd                              }||dS t                              |t          t          |                     |dd                              }|P|dv r|||k     rd}|s
|||k    rd}n5|d	k    r/||||k    r||k     r||k    rd}n|||k     rd}|s
|||k    rd}|t          j        z  r| n|S )
ac  
        Match range.

        Behavior is modeled after what we see in browsers. Browsers seem to evaluate
        if the value is out of range, and if not, it is in range. So a missing value
        will not evaluate out of range; therefore, value is in range. Personally, I
        feel like this should evaluate as neither in or out of range.
        Fr<   minNmaxr   )r   r   r   r   r  r  Tr   )	r   re   r   r   r  r   r   r9  SEL_IN_RANGE)r(   r[   r  out_of_ranger   mnmxr   s           r)   match_rangezCSSMatch.match_range  s    
455b&AABBtC1K1KBPUW[1\1\']']^^tC1K1KBPUW[1\1\']']^^ :"*5""5$sD4N4NrSZ\`4a4a*b*bccVVV>ebjj#'L# (52::#'L&>bnbrzzebjj'+~%"**'+' ,BNurzz'+#,r#>P<LPr+   c                    |                      |          }|duoH|                    d          dk    p/|                    d          dk    p|                     |          duS )a  
        Match defined.

        `:defined` is related to custom elements in a browser.

        - If the document is XML (not XHTML), all tags will match.
        - Tags that are not custom (don't have a hyphen) are marked defined.
        - If the tag has a prefix (without or without a namespace), it will not match.

        This is of course requires the parser to provide us with the proper prefix and namespace info,
        if it doesn't, there is nothing we can do.
        Nr   ry   r|  )r&  findr(  r%  s      r)   match_definedzCSSMatch.match_defined=  si     ||B 		#"$ 0		#"$0##4/		
r+   c                @    d}|                      |          }|dv rd}|S )z
        Match placeholder shown according to HTML spec.

        - text area should be checked if they have content. A single newline does not count as content.

        F)r   
T)r   )r(   r[   r  r  s       r)   match_placeholder_shownz CSSMatch.match_placeholder_shownT  s/     --##j  Er+   c                n   d}|j         }|j        }|r#| j        }| j        }dt          i| _        d| _        |r| j        r|D ]}|}t          |t          j                  r |                     ||j	                  s<|j
        t          j        z  r|                     |          sf|j
        t          j        z  r|                     |          s|j
        t          j        z  r|                     |          s|j
        t          j        z  r|                     |          s|                     ||j                  s|j
        t          j        z  r|                     |          s,|j        r|                     ||j                  sP|j        r|                     ||j                  st|                     ||j                  s|j
        t:          z  r%|                     ||j
        t:          z            s|j        r|                      ||j                  s|j!        r| "                    ||j!                  s|j#        r| $                    ||j#                  s1|j
        t          j%        z  r| &                    |          s\|j
        t          j'        z  r| (                    |          s|j
        tR          z  r%| *                    ||j
        tR          z            s|j+        r| ,                    ||j+                  s| } |r|| _        || _        |S )z.Check if element matches one of the selectors.Fr  T)-is_notrl   r  r  r   rB   r9  rh  re  r8   r  SEL_DEFINEDr  SEL_ROOTr  	SEL_SCOPEr  SEL_PLACEHOLDER_SHOWNr  r  r  	SEL_EMPTYr  r  r  r   r  r`  rX  RANGESr  r  r  r  r  rf  r~  SEL_DEFAULTr  SEL_INDETERMINATEr  	DIR_FLAGSr  r  r  )	r(   r[   r  r  r  rl   r  r  selectors	            r)   rk  zCSSMatch.match_selectorsc  si    !#  	(J"2O%x0DO#'D  =	$, =	% < <h88 ~~b(,77 >BN2 4;M;Mb;Q;Q >BK/ 8K8K >BL0 9I9I"9M9M >B$<< TEaEabdEeEe ~~b(,77 >BL0 9I9I"9M9M < b(,(G(G # D,>,>r8CS,T,T ,,R1DEE >F* 43C3CBY_H_3`3` = X])K)K % d.E.Eb(J\.].] $ T-A-A"hFW-X-X >BN2 4;M;Mb;Q;Q  >B$88 AYAYZ\A]A] >I- dnnRZcIc6d6d $ T-@-@XEV-W-W "
  	3(DO#2D r+   r   limitIterator[bs4.Tag]c              #     K   |dk     rdn|}|                      | j                  D ]+}|                     |          r|V  ||dz  }|dk     r dS ,dS )z&Match all tags under the targeted tag.r   N)r   r8   r  )r(   r  limr   s       r)   selectzCSSMatch.select  s~       aiiddU))$(33 	 	Ezz%   ?1HCQww	 	r+   r  c                    | j         }d}|3|1|                     |          r|}n|                     |          }||1|S )Match closest ancestor.N)r8   r  rk   )r(   currentclosests      r)   r  zCSSMatch.closest  sY     (o'"5zz'"" 3!//'22	 o'"5
 r+   list[bs4.Tag]c                P      fd                       j                  D             S )zFilter tag's children.c                h    g | ].}                     |                              |          ,|/S r5   )rT   r  )r   r8   r(   s     r)   r   z#CSSMatch.filter.<locals>.<listcomp>  sB    ttt$BZBZ[^B_B_tdhdndnordsdsttttr+   )rs   r8   r/   s   `r)   filterzCSSMatch.filter  s0     utttt00::ttttr+   c                    |                      |           o/|                     |          o|                     || j                  S zMatch.)rF   r:   rk  r  rg   s     r)   r  zCSSMatch.match  s@     ;;r??"ct{{2c4;O;OPRTXTb;c;ccr+   N)
r  r  r  r"   r  r  r  r   r#   r$   )r#   r@   )r[   r"   r#   r   r   r   )r[   r"   r#   ru   )r?  r   r@  r   r#   r@   )r[   r"   rP  r   r   r   r#   r   )r[   r"   r8   rS  r#   r@   )r[   r"   rX  rY  r#   r@   )r[   r"   r8   rc  r#   r@   )r[   r"   rf  r  r#   r@   r   )rm   r"   rf  r  rq  r@   r#   r@   )r[   r"   r  r  r#   r@   )r[   r"   r   r  r#   r@   )r[   r"   r   r"   r#   r@   )r[   r"   r  r"   r#   r@   )r[   r"   r  r  r#   r@   )r[   r"   r  r  r#   r@   )r[   r"   r  r  r#   r@   )r[   r"   r  r   r#   r@   )r[   r"   r  r   r#   r@   )r[   r"   r  r  r#   r@   r   )r  r   r#   r   )r#   r  )r#   r  )*r1   r2   r3   r4   r*   r   r"  rf   r&  r(  r6  rO  rR  rW  r`  rb  re  rp  rt  rz  r~  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  r  rk  r  r  r  r  r5   r+   r)   r  r    sQ       'B 'B 'B 'BR6 6 6 6

 
 
 
/ / / /
R R R RX X X X" " " "H6 6 6 6p3 3 3 3j   *   &
 
 
 

 
 
 
   8       .      	 	 	 	   4       

 
 
 
c c c cJ         8% % % %N; ; ; ;zT T T Tl9S 9S 9S 9Sv&Q &Q &Q &QP
 
 
 
.   R R R Rh    
 
 
 
u u u u
d d d d d dr+   r  c                       e Zd ZU dZded<   ded<   ded<   ded	<   d
ed<   dZd  fdZd!dZd"dZd#dZ	d"dZ
d$d%dZd$d&dZd'dZeZ xZS )(	SoupSievez-Compiled Soup Sieve selector matching object.r   r]  r  r  r  r  zdict[str, str]customr   r  )r]  r  r  r  r  _hashct.CustomSelectors | Nonec                T    t                                          |||||           dS )r&   )r]  r  r  r  r  N)superr*   )r(   r]  r  r  r  r  	__class__s         r)   r*   zSoupSieve.__init__  s?     	! 	 	
 	
 	
 	
 	
r+   r8   r"   r#   r@   c                j    t          | j        || j        | j                                      |          S r  )r  r  r  r  r  r(   r8   s     r)   r  zSoupSieve.match  s-     T_djIIOOPSTTTr+   c                h    t          | j        || j        | j                                                  S )r  )r  r  r  r  r  r  s     r)   r  zSoupSieve.closest  s*     T_djIIQQSSSr+   iterableIterable[bs4.Tag]r  c                     t                               |          r3t           j        | j         j                                                  S  fd|D             S )a  
        Filter.

        `CSSMatch` can cache certain searches for tags of the same document,
        so if we are given a tag, all tags are from the same document,
        and we can take advantage of the optimization.

        Any other kind of iterable could have tags from different documents or detached tags,
        so for those, we use a new `CSSMatch` for each item in the iterable.
        c                r    g | ]3}t                               |                              |          1|4S r5   )r  rT   r  r   s     r)   r   z$SoupSieve.filter.<locals>.<listcomp>  sB    mmmTX5Q5QRV5W5Wm\`\f\fgk\l\lmDmmmr+   )r  r:   r  r  r  r  )r(   r  s   ` r)   r  zSoupSieve.filter  sZ     ??8$$ 	nDNHdotzRRYY[[[mmmmXmmmmr+   c                H    |                      |d          }|r|d         ndS )zSelect a single tag.r   )r  r   N)r  )r(   r8   rw   s      r)   
select_onezSoupSieve.select_one  s,     {{3a{(((tAwwD(r+   r   r  c                H    t          |                     ||                    S )zSelect the specified tags.)listiselectr(   r8   r  s      r)   r  zSoupSieve.select  s      DLLe,,---r+   r   c              #  ~   K   t          | j        || j        | j                                      |          E d{V  dS )zIterate the specified tags.N)r  r  r  r  r  r#  s      r)   r"  zSoupSieve.iselect  sI       DNC$*MMTTUZ[[[[[[[[[[[r+   c           	     H    d| j         d| j        d| j        d| j        d	S )zRepresentation.zSoupSieve(pattern=z, namespaces=z	, custom=z, flags=))r]  r  r  r  r/   s    r)   __repr__zSoupSieve.__repr__#  sK    = = =do = =k= =-1Z= = =	
r+   )
r]  r   r  r  r  r  r  r  r  r   )r8   r"   r#   r@   )r8   r"   r#   r"   )r  r  r#   r  r  )r8   r"   r  r   r#   r  )r8   r"   r  r   r#   r   )r#   r   )r1   r2   r3   r4   __annotations__	__slots__r*   r  r  r  r  r  r"  r'  __str____classcell__)r  s   @r)   r  r    s"        77LLL$$$$JJJRI
 
 
 
 
 
$U U U U
T T T T
n n n n") ) ) ). . . . .
\ \ \ \ \

 
 
 
 GGGGGr+   r  );r4   
__future__r   r   r   r   rer   r9  r7  rC   typingr   r	   r
   r   r   r   compiler  r   rj  rl  rm  rn  rv  rw  rx  ry  r   r  r:  r;  r  r  SEL_OUT_OF_RANGEr  r4  r
  r  r  r  r  r	  rC  r   r   r   r   r   r   DAYS_IN_WEEKr    r7   r   r  	Immutabler  pickle_registerr5   r+   r)   <module>r4     s     " " " " " "             				           



 D D D D D D D D D D D D D D D D rz.))BJ''	 
     )	/NR^+		2.	. >>  
G	H	H
"*B
C
C2:BCC
"*A
B
B
"*S
T
Tbjk  
=>>	
	" " " " " " " "(hm hm hm hm hm hm hm hmV	d d d d d d d dNwd wd wd wd wd| wd wd wdtP P P P P P P Pf  9     r+   