
    +gh                    0   S r SSKJr  SSKJr  SSKJr  SSKrSSKJr  SSK	r	SSK
r
SSKJrJrJrJrJrJr  \R$                  " S	5      r\R$                  " S
5      rSrSrSrSrSrSrSrSrSrSr\R>                  \R@                  -  r!\RD                  \RF                  -  r$\R>                  \R@                  SS.r%\R$                  " S5      r&\R$                  " S5      r'\R$                  " S5      r(\R$                  " S5      r)\R$                  " S5      r*\R$                  " S5      r+\R$                  " S5      r,Sr-Sr.Sr/S r0S!r1S"r2S#r3 " S$ S%5      r4 " S& S'5      r5 " S( S)5      r6 " S* S+\55      r7 " S, S-\Rp                  5      r9\Rt                  " \95        g).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                  ,    \ rS rSrSrSS jrSS jrSrg)	_FakeParent;   z
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.
c                    U/U l         g)Initialize.Ncontents)selfelements     [/Users/Alptekin/Desktop/izin_takip/venv/lib/python3.13/site-packages/soupsieve/css_match.py__init___FakeParent.__init__D   s     !	    c                ,    [        U R                  5      $ )zLength.)lenr%   r&   s    r(   __len___FakeParent.__len__I   s     4==!!r+   r$   N)r'   bs4.TagreturnNone)r2   bs4.PageElement)__name__
__module____qualname____firstlineno____doc__r)   r/   __static_attributes__ r+   r(   r    r    ;   s    "
"r+   r    c                     \ rS rSrSr\S#S j5       r\S$S j5       r\S%S j5       r	\S%S j5       r
\S%S j5       r\S%S j5       r\S%S	 j5       r\S%S
 j5       r\S%S j5       r\S&S j5       r\S'S j5       rS'S jrS'S jrS(S)S jjr    S*           S+S jjr  S,       S-S jjrS(S.S jjr\S/S j5       r\S/S j5       r\S/S j5       r\S0S1S jj5       r\S0S1S jj5       r\S'S j5       r\S2S j5       r\S3S j5       r\ S4       S5S jj5       r \S6S j5       r!\S7S j5       r"S(S8S  jjr#S(S9S! jjr$S"r%g):_DocumentNavO   z#Navigate a Beautiful Soup document.c                ^    U R                  U5      (       d  [        S[        U5       35      eg)z%Check if valid input tag or document.z:Expected a BeautifulSoup 'Tag', but instead received type N)is_tag	TypeErrortype)clstags     r(   assert_valid_input_DocumentNav.assert_valid_inputR   s1    
 zz#XY]^aYbXcdee r+   c                6    [        U [        R                  5      $ )zIs `BeautifulSoup` object.)
isinstancebs4BeautifulSoupobjs    r(   is_doc_DocumentNav.is_docZ   s     #s0011r+   c                6    [        U [        R                  5      $ )zIs tag.)rH   rI   TagrK   s    r(   r@   _DocumentNav.is_tag_   s     #sww''r+   c                6    [        U [        R                  5      $ )zIs declaration.)rH   rI   DeclarationrK   s    r(   is_declaration_DocumentNav.is_declarationd   s     #s//r+   c                6    [        U [        R                  5      $ )z	Is CDATA.)rH   rI   CDatarK   s    r(   is_cdata_DocumentNav.is_cdatai   s     #syy))r+   c                6    [        U [        R                  5      $ )zIs processing instruction.)rH   rI   ProcessingInstructionrK   s    r(   is_processing_instruction&_DocumentNav.is_processing_instructionn   s     #s8899r+   c                6    [        U [        R                  5      $ )zIs navigable string.)rH   rI   NavigableStringrK   s    r(   is_navigable_string _DocumentNav.is_navigable_strings   s     #s2233r+   c                    [        U [        R                  [        R                  [        R                  [        R
                  [        R                  45      $ )zIs special string.)rH   rI   CommentrS   rW   r[   DoctyperK   s    r(   is_special_string_DocumentNav.is_special_stringx   s5     #S__ciiIbIbdgdodopqqr+   c                ^    U R                  U5      =(       a    U R                  U5      (       + $ )z Check if node is content string.)r`   re   )rC   rL   s     r(   is_content_string_DocumentNav.is_content_string}   s(     &&s+NC4I4I#4N0NNr+   c                    [        U 5      $ )z'Create fake parent for a given element.)r    els    r(   create_fake_parent_DocumentNav.create_fake_parent   s     2r+   c                ,    [        U R                  5      $ )z2Check if element (or document) is from a XML tree.)bool_is_xmlrk   s    r(   is_xml_tree_DocumentNav.is_xml_tree   s     BJJr+   c                    [        U R                  U5      (       a  UR                  O[        R                  " UR                  5      S:H  =(       a    U R                  U5      5      $ )z Check if element is an `iframe`.iframe)rp   rr   namer   loweris_html_tagr&   rl   s     r(   	is_iframe_DocumentNav.is_iframe   sO     ))"--bgg4::bgg3F8S !R 
 	
r+   c                    U R                   =(       a    U R                   UL nU(       d@  U R                  U5      nUSL=(       a$    U R                  =(       a    U R                  U5      nU$ )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_htmlrz   )r&   rl   r}   parents       r(   is_root_DocumentNav.is_root   sQ     yy,TYY"___R(F%Q$,,Q4>>&;QDr+   c              #  t   #    U(       a  U R                  U5      (       d  UR                   Sh  vN   gg N7f)z$Get contents or contents in reverse.N)rz   r%   )r&   rl   	no_iframes      r(   get_contents_DocumentNav.get_contents   s+     r 2 2{{"" !3"s   -868Nc              #  p  #    U(       a  U R                  U5      (       d  [        UR                  5      S-
  nUc  U(       a  UOSnOUnU(       a  SOUS-   nU(       a  SOSn	SUs=::  a  U::  aE  O  gXx:w  a<  UR                  U   n
Xy-  nU(       a  U R                  U
5      (       a  U
v   Xx:w  a  M;  gggg7f)zGet children.r   Nr   )rz   r-   r%   r@   )r&   rl   startreversetagsr   lastindexendincrnodes              r(   get_children_DocumentNav.get_children   s      r 2 2r{{#a'D} 'Q"TAXC 2aDE!T!l;;u-DME4;;t#4#4"
	 l " !3s   B.B62B6c              #  >  #    U(       a  U R                  U5      (       d  SnUR                   H  nUb  XTLa  M  SnU R                  U5      nU(       a  U(       a  U R                  U5      (       a  UR                  b  UR                  nOmUnU R                  U5      (       aI  UR                  (       a8  UR                  S   nU R                  U5      (       a  UR                  (       a  M8  UR
                  nUv   Uc    gM  U(       a	  U(       d  M  Uv   M     gg7f)zGet descendants.Nr   )rz   descendantsr@   next_siblingr%   next_element)r&   rl   r   r   	next_goodchildr@   
last_childs           r(   get_descendants_DocumentNav.get_descendants   s      r 2 2I(-  $IU+DNN5,A,A))5$)$6$6	%*
"kk*55*:M:M)3)<)<R)@J #kk*55*:M:M:M$.$;$;	K (vvK1 ( !3s   C(D,#D
Dc                b    UR                   nU(       a  Ub  U R                  U5      (       a  SnU$ )zGet parent.N)r   rz   )r&   rl   r   r   s       r(   r~   _DocumentNav.get_parent   s-     +v0F0FFr+   c                .    [        SU R                  5      $ )Get tag.
str | None)r   rv   rk   s    r(   get_tag_name_DocumentNav.get_tag_name   s     L"''**r+   c                .    [        SU R                  5      $ )Get prefix.r   )r   prefixrk   s    r(   get_prefix_name_DocumentNav.get_prefix_name   s     L")),,r+   c                .    [        SU R                  5      $ )zGet namespace `URI`.r   )r   	namespacerk   s    r(   get_uri_DocumentNav.get_uri   s     L",,//r+   c                    UR                   nU(       aG  U R                  U5      (       d1  Ub.  UR                   nU(       a  U R                  U5      (       d  Ub  M.  U$ )zGet next sibling tag.)r   r@   rC   rl   r   siblings       r(   get_next_DocumentNav.get_next  sK     //3::g..73F**G 3::g..73Fr+   c                    UR                   nU(       aG  U R                  U5      (       d1  Ub.  UR                   nU(       a  U R                  U5      (       d  Ub  M.  U$ )zGet previous sibling tag.)previous_siblingr@   r   s       r(   get_previous_DocumentNav.get_previous  sM     %%3::g..73F..G 3::g..73Fr+   c                b    U (       a  [        U S5      OSn[        U=(       a	    U[        :H  5      $ )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)getattrrp   NS_XHTML)rl   nss     r(   has_html_ns_DocumentNav.has_html_ns  s(     *,WR%B)2>**r+   c                6    [        USS5      [        USS5      4$ )z7Return namespace and attribute name without the prefix.r   Nrv   )r   )rl   	attr_names     r(   split_namespace_DocumentNav.split_namespace   s"     y+t4giQU6VVVr+   c           	        Uc  g[        U[        5      (       a  U$ [        U[        5      (       a  UR                  S5      $ [        U[        5      (       a  / nU H}  n[        U[        [        45      (       d1  [        U[        5      (       a  UR                  [        U5      5        MO  UR                  [        [        U R                  U5      5      5        M     U$ [        U5      $ )z6Normalize the value to be a string or list of strings. utf8)rH   strbytesdecoder   appendr   normalize_value)rC   value	new_valuevs       r(   r   _DocumentNav.normalize_value&  s    
 = uc""L eU##<<'' eX&&I!!c5\22z!X7N7N $$SV, $$T#s/B/B1/E%FG   5zr+   c                2   UnUR                   (       a!   U R                  UR                  U   5      nU$ UR                  R	                  5        H3  u  pV[
        R                  " U5      U:X  d  M!  U R                  U5      n  U$    U$ ! [         a     U$ f = f)zGet attribute by name.)rq   r   attrsKeyErroritemsr   rw   )rC   rl   rv   defaultr   kr   s          r(   get_attribute_by_name"_DocumentNav.get_attribute_by_nameG  s     ::++BHHTN; 	 (::a=D(//2E	 )    s   B 
BBc              #  z   #    UR                   R                  5        H  u  p#X R                  U5      4v   M     g7f)zIterate attributes.N)r   r   r   )rC   rl   r   r   s       r(   iter_attributes_DocumentNav.iter_attributes]  s2      HHNN$DA((+++ %s   9;c                    U R                  US/ 5      n[        U[        5      (       a  [        R	                  U5      n[        [        [           U5      $ )zGet classes.class)r   rH   r   	RE_NOT_WSfindallr   r   )rC   rl   classess      r(   get_classes_DocumentNav.get_classesd  sF     ++B<gs##''0GHSM7++r+   c                    SR                  U R                  USUS9 Vs/ s H  o0R                  U5      (       d  M  UPM     sn5      $ s  snf )z	Get text.r   F)r   r   )joinr   rh   r&   rl   r   r   s       r(   get_text_DocumentNav.get_textm  sJ     ww"222EY2WxWd[q[qrv[wTWx
 	
xs
   A	A	c                z    U R                  XS9 Vs/ s H  o0R                  U5      (       d  M  UPM     sn$ s  snf )zGet Own Text.r   )r   rh   r   s       r(   get_own_text_DocumentNav.get_own_textt  s8     "&!2!22!2!Kl!KOeOefjOk!Kllls   88r;   )rD   r
   r2   r3   )rL   r1   r2   rp   )rL   r4   r2   rp   )rl   r1   r2   r    rl   r1   r2   rp   F)rl   r1   r   rp   r2   Iterator[bs4.PageElement])NFTF)rl   r1   r   
int | Noner   rp   r   rp   r   rp   r2   r   )TF)rl   r1   r   rp   r   rp   r2   r   )rl   r1   r   rp   r2   r1   rl   r1   r2   r   )T)rl   r1   r   rp   r2   r4   )rl   r1   r   r   r2   ztuple[str | None, str | None])r   r
   r2   zstr | Sequence[str]N)rl   r1   rv   r   r   str | Sequence[str] | Noner2   r   )rl   r1   r2   z0Iterator[tuple[str, str | Sequence[str] | None]])rl   r1   r2   zSequence[str])rl   r1   r   rp   r2   r   )rl   r1   r   rp   r2   z	list[str])&r5   r6   r7   r8   r9   classmethodrE   staticmethodrM   r@   rT   rX   r\   r`   re   rh   rm   rr   rz   r   r   r   r   r~   r   r   r   r   r   r   r   r   r   r   r   r   r   r:   r;   r+   r(   r=   r=   O   s   -f f 2 2 ( ( 0 0 * * : : 4 4 r r O O
  
    

# !## # 	#
 # # 
##: 	" "  "  	" 
 
#" H + +
 - -
 0 0
     	+ 	+ W W
  @ 
 /3	  ,	
 
$ * , , , ,
m mr+   r=   c                      \ rS rSrSr\SS j5       r\SS j5       r\SS j5       r\SS j5       r	\SS j5       r
\SS j5       r\SS	 j5       rS
rg)Inputsiz  z-Class for parsing and validating input items.c                    [         nU[        :X  a(  U S-  S:X  a	  U S-  S:w  d	  U S-  S:X  a  [        O[        nOU[        ;   a  [
        nSUs=:*  =(       a    U:*  $ s  $ )zValidate day.r   r   d   i  r   )
LONG_MONTHFEBFEB_LEAP_MONTH	FEB_MONTH	MONTHS_30SHORT_MONTH)yearmonthdaymax_dayss       r(   validate_dayInputs.validate_day}  sa     C<+/!8q=tczQUY\_U_cdUd~ktHi"HC##8####r+   c                    [         R                  " S SS SU  3S5      R                  5       S   nUS:X  a  SnSUs=:*  =(       a    U:*  $ s  $ )zValidate week.   -r   z%m-%d-%Yr   5   )r   strptimeisocalendar)r   weekmax_weeks      r(   validate_weekInputs.validate_week  s[     $$t1RD$%8*EQQSTUVq=HD$$H$$$$r+   c                ,    SU s=:*  =(       a    S:*  $ s  $ )zValidate month.r   r   r;   )r   s    r(   validate_monthInputs.validate_month  s     ERr+   c                    SU :*  $ )zValidate year.r   r;   )r   s    r(   validate_yearInputs.validate_year  s     Dyr+   c                ,    SU s=:*  =(       a    S:*  $ s  $ )zValidate hour.r      r;   )hours    r(   validate_hourInputs.validate_hour  s     DBr+   c                ,    SU s=:*  =(       a    S:*  $ s  $ )zValidate minutes.r   r!   r;   )minutess    r(   validate_minutesInputs.validate_minutes  s     G!!r!!!!r+   c                |   SnUc  U$ US:X  a  [         R                  U5      nU(       a  [        UR                  S5      S5      n[        UR                  S5      S5      n[        UR                  S5      S5      nU R	                  U5      (       a1  U R                  U5      (       a  U R                  XVU5      (       a  XVU4nU$ US:X  a  [        R                  U5      nU(       ae  [        UR                  S5      S5      n[        UR                  S5      S5      nU R	                  U5      (       a  U R                  U5      (       a  XV4nU$ US:X  a  [        R                  U5      nU(       ae  [        UR                  S5      S5      n[        UR                  S5      S5      nU R	                  U5      (       a  U R                  XX5      (       a  XX4nU$ US:X  a  [        R                  U5      nU(       ae  [        UR                  S	5      S5      n	[        UR                  S
5      S5      n
U R                  U	5      (       a  U R                  U
5      (       a  X4nU$ US:X  Ga  [        R                  U5      nU(       a  [        UR                  S5      S5      n[        UR                  S5      S5      n[        UR                  S5      S5      n[        UR                  S	5      S5      n	[        UR                  S
5      S5      n
U R	                  U5      (       a^  U R                  U5      (       aH  U R                  XVU5      (       a1  U R                  U	5      (       a  U R                  U
5      (       a  XVXyU
4nU$ US;   a7  [        R                  U5      nU(       a  [        UR                  S5      5      4nU$ )zParse the input value.Ndater   
   r   r   r  timer  r  datetime-local)numberranger   )RE_DATEmatchintgroupr  r
  r   RE_MONTHRE_WEEKr  RE_TIMEr  r  RE_DATETIMERE_NUMfloat)rC   ityper   parsedmr   r   r   r  r  r  s              r(   parse_valueInputs.parse_value  s+    =LF?e$A1776?B/AGGG,b1!''%."-$$T**s/A/A%/H/HSM]M]^bknMoMo"3/FN M gu%A1776?B/AGGG,b1$$T**s/A/A%/H/H"]F@ ? f_e$A1776?B/1776?B/$$T**s/@/@/L/L"\F2 1 f_e$A1776?B/aggi0"5$$T**s/C/CG/L/L"_F$ # &&!!%(A1776?B/AGGG,b1!''%."-1776?B/aggi0"5%%d++0B0B50I0IcN^N^_cloNpNp%%d++0D0DW0M0M"3g>F
 	 ))U#A 013r+   r;   N)r   r!  r   r!  r   r!  r2   rp   )r   r!  r  r!  r2   rp   )r   r!  r2   rp   )r   r!  r2   rp   )r  r!  r2   rp   )r  r!  r2   rp   )r)  r   r   r   r2   ztuple[float, ...] | None)r5   r6   r7   r8   r9   r   r   r  r
  r  r  r  r   r,  r:   r;   r+   r(   r   r   z  s    7$ $ % %    
  
  
 " "
 4 4r+   r   c                     \ rS rSrSr          S+S jrS,S jrS-S jrS.S jrS/S jr	S/S jr
S0S	 jrS1S
 jr        S2S jrS3S jrS4S jrS3S jrS5S jrS6S jrS7S8S jjrS6S jrS6S jrS9S jrS:S jrS.S jrS.S jrS;S jrS<S jrS.S jrS=S jrS>S jrS.S jrS.S jr S?S jr!S@S  jr"SAS! jr#S.S" jr$S.S# jr%SBS$ jr&SCSDS% jjr'SES& jr(SFS' jr)S.S( jr*S)r+g*)GCSSMatchi  zPerform CSS matching.c                @   U R                  U5        X l        / U l        / U l        / U l        Xl        Uc  0 OUU l        X@l        SU l        UnU R                  U5      nU(       a  UnU R                  U5      nU(       a  M  SnU R                  U5      (       d  UnOU R                  U5       H  nUn  O   Xpl        X%La  UOUU l        U R                  U5      U l        U R!                  U5      U l        U R"                  (       + =(       d    U R                  U l        g)r#   NF)rE   rD   cached_meta_langcached_default_formscached_indeterminate_forms	selectors
namespacesflagsiframe_restrictr~   rM   r   r}   scoper   has_html_namespacerr   is_xmlr   )	r&   r4  r8  r5  r6  docr   r}   r   s	            r(   r)   CSSMatch.__init__  s    	& "$&!*,'" * 2"

$ %C__S)F f {{3D**3/ 0 	#.UD
"&"2"24"8 &&s+;;A$*A*Ar+   c                @    U R                   =(       d    U R                  $ )z3Check if namespaces are supported in the HTML type.)r:  r9  r.   s    r(   supports_namespacesCSSMatch.supports_namespaces  s     {{5d555r+   c                x    U R                  5       (       a  SnU R                  U5      nU(       a  UnU$ [        nU$ )zGet tag namespace.r   )r>  r   r   )r&   rl   r   r   s       r(   
get_tag_nsCSSMatch.get_tag_ns  sC     ##%%Ib!B	  !Ir+   c                2    U R                  U5      [        :H  $ )z"Check if tag is in HTML namespace.)rA  r   ry   s     r(   rx   CSSMatch.is_html_tag  s     r"h..r+   c                |    U R                  U5      nUb'  U R                  (       d  [        R                  " U5      $ U$ )r   )r   r:  r   rw   r&   rl   rv   s      r(   get_tagCSSMatch.get_tag#  s3       $#'#3DKKtzz$QTQr+   c                |    U R                  U5      nUb'  U R                  (       d  [        R                  " U5      $ U$ )r   )r   r:  r   rw   )r&   rl   r   s      r(   
get_prefixCSSMatch.get_prefix)  s4     %%b)%+%7tzz&!WQWWr+   c           
     :   U R                  USS9 GH  nU R                  U5      (       a  [        R                  [        R
                  " U R                  USS5      5      S5      nU R                  U5      S;   d  U R                  U5      (       a  Ub  M  U R                  U5      nUb  Us  $ M  U R                  U5      (       a  M  U HI  n[        R                  " U5      nUS;   d  M!  US:X  a  [        R                  O[        R                  s  s  $    GM	     g)	z%Get directionality from element text.Fr   dirr   N)bdiscriptstyletextarearu   ALRLrV  )r   r@   DIR_MAPgetr   rw   r   rG  rx   	find_bidire   unicodedatabidirectionalctSEL_DIR_LTRSEL_DIR_RTL)r&   rl   r   	directionr   cbidis          r(   rY  CSSMatch.find_bidi/  s     %%bu%5D {{4   $KK

43M3MdTY[]3^(_aef	LL&*ZZ((..) t,$ L  %%d++ "003++-1S[2>>bnnL 7 6> r+   c                D   Sn[         R                  SU5      R                  5       nUR                  S5      nUR                  5       R                  S5      n[	        U5      n[	        U5      nSnSn	XH   n
XY   nUS:X  a  US:X  a  U
(       d  X:X  a  gU
S:w  a  X:w  d  U
S:X  a  US:X  a	  U(       d  SnUS-  nU	S-  n	U(       aJ  X:  aE  XH   n
 XY   nU
(       d  SnM   X:X  a  US-  nO[	        U5      S:X  a  SnM>  U	S-  n	U(       a  X:  a  ME  U$ ! [
         a    Sn Mb  f = f)zFilter the language tags.Tr  r   r   *F)RE_WILD_STRIPsubrw   splitr-   
IndexError)r&   
lang_rangelang_tagr   rangessubtagslengthslengthrindexsindexrss               r(   extended_language_filter!CSSMatch.extended_language_filterS  sC    "&&sJ7==?
!!#&.."((-Vg,NO Q;7a<af HQ#X'Q,qE!! AO  ! Q1 aKF5 8 1   	s   D DDc                   SnU R                  5       (       Ga  SnU(       a&  U R                  R                  U5      nUc  US:w  a  gOSnU R                  U5       H  u  pgU R	                  X5      u  pUc\  U R
                  (       a  X&:X  d?  U R
                  (       d3  [        R                  " U5      [        R                  " U5      :X  a  Un  U$ Mw  Ub  XX:w  a  US:w  a  M  U R
                  (       d/  [        R                  " U5      [        R                  " U	5      :w  a  OX):w  a  M  Un  U$     U$ U R                  U5       H8  u  pg[        R                  " U5      [        R                  " U5      :w  a  M5  Un  U$    U$ )z3Match attribute name and return value if it exists.Nrd  )r>  r5  rX  r   r   r:  r   rw   )
r&   rl   attrr   r   r   r   r   r   rv   s
             r(   match_attribute_nameCSSMatch.match_attribute_name  s`    ##%%E__((0:&C-,,R0 #'"6"6r"=	 :	4;;4::VZK[_c_i_ijk_lKl !, %  $FcM BFDJJt$

4(88SWS_ A 1@  ,,R0::d#tzz!}4 1
 r+   c                   SnU R                  U5      nU R                  R                  S5      nUR                  c  SO$U R                  R                  UR                  5      nUR                  c  Ub	  XE:w  a  SnU$ UR                  b  UR                  S:X  a  U(       a  SnU$ UR                  (       a  UR                  S:w  a
  Ub  XF:w  a  SnU$ )z#Match the namespace of the element.Tr   Frd  )rA  r5  rX  r   )r&   rl   rD   r   r   default_namespacetag_nss          r(   match_namespaceCSSMatch.match_namespace  s     OOB'	 OO//3zz)t/B/B3::/N::#4#@YEcE  jj$r)9iE 	 JJJJ#6>Y5HEr+   c                   SnU(       a  U H  nU R                  XR                  UR                  5      nU R                  (       a  UR                  (       a  UR                  OUR
                  nUc  Sn  U$ [        U[        5      (       a  UOSR                  U5      nUc  M  UR                  U5      b  M  Sn  U$    U$ )zMatch attributes.TFr   )
rw  	attributer   r:  xml_type_patternpatternrH   r   r   r   )r&   rl   
attributesr   atempr  r   s           r(   match_attributesCSSMatch.match_attributes  s     00[[!((K04@R@R!,,XYXaXa<!E  !+4 5 5388D>?]]5)1!E   r+   c                    U R                   (       d-  UR                  b   [        R                  " UR                  5      OUR                  nUSL=(       a    X0R	                  U5      S4;  (       + $ )zMatch tag name.Nrd  )r:  rv   r   rw   rG  )r&   rl   rD   rv   s       r(   match_tagnameCSSMatch.match_tagname  sY     -1KKCHH<P

388$VYV^V^ 0b)3//
 	
r+   c                p    SnUb0  U R                  X5      (       d  SnU R                  X5      (       d  SnU$ )zMatch the tag.TF)r|  r  )r&   rl   rD   r   s       r(   	match_tagCSSMatch.match_tag  s?     ?''00%%b..r+   c                Z   Sn[        US   [        R                  5      (       a  U$ US   R                  [        :X  ac  U R                  XR                  S9nU(       dA  U(       a:  U R                  XB5      nU R                  X@R                  S9nU(       d	  U(       a  M:  U$ US   R                  [        :X  a3  U R                  XR                  S9nU(       a  U R                  XB5      nU$ US   R                  [        :X  aS  U R                  U5      nU(       d9  U(       a2  U R                  XR5      nU R                  U5      nU(       d	  U(       a  M2  U$ US   R                  [        :X  a?  U R                  U5      nU(       a'  U R                  U5      (       a  U R                  XR5      nU$ )zMatch past relationship.Fr   r   )rH   r\  SelectorNullrel_type
REL_PARENTr~   r7  match_selectorsREL_CLOSE_PARENTREL_SIBLINGr   REL_CLOSE_SIBLINGr@   )r&   rl   relationfoundr   r   s         r(   match_past_relationsCSSMatch.match_past_relations  so    hqk2??33LA;:-__R3G3G_HF,,V>;O;OP    a[!!%55__R3G3G_HF,,V>  a[!![0''+G,,W?++G4  	 a[!!%66''+G4;;w//,,W?r+   c                    SnU(       a  U R                   nOU R                  nU" XR                  S9 H  nU R                  Xb5      nU(       d  M    U$    U$ )zMatch future child.Fr   )r   r   r7  r  )r&   r   r  	recursiver   childrenr   s          r(   match_future_childCSSMatch.match_future_child  s\     ++H((Hf0D0DEE((9Eu	 F r+   c                |   Sn[        US   [        R                  5      (       a  U$ US   R                  [        :X  a  U R                  XS5      nU$ US   R                  [        :X  a  U R                  X5      nU$ US   R                  [        :X  aS  U R                  U5      nU(       d9  U(       a2  U R                  XB5      nU R                  U5      nU(       d	  U(       a  M2  U$ US   R                  [        :X  a?  U R                  U5      nU(       a'  U R                  U5      (       a  U R                  XB5      nU$ )zMatch future relationship.Fr   T)rH   r\  r  r  REL_HAS_PARENTr  REL_HAS_CLOSE_PARENTREL_HAS_SIBLINGr   r  REL_HAS_CLOSE_SIBLINGr@   )r&   rl   r  r  r   s        r(   match_future_relationsCSSMatch.match_future_relations'  s    hqk2??33LA;>1++B$?E  a[!!%99++B9E  a[!!_4mmB'G,,W?--0  	 a[!!%::mmB'G4;;w//,,W?r+   c                    Sn[        US   [        R                  5      (       d  US   R                  c  U$ US   R                  R	                  S5      (       a  U R                  X5      nU$ U R                  X5      nU$ )z%Match relationship to other elements.Fr   :)rH   r\  r  r  
startswithr  r  )r&   rl   r  r  s       r(   match_relationsCSSMatch.match_relations>  s{     hqk2??33x{7K7K7SLA;**3////=E  --b;Er+   c                R    SnU H  nX@R                  USS5      :w  d  M  Sn  U$    U$ )zMatch element's ID.Tidr   F)r   )r&   rl   idsr  is        r(   match_idCSSMatch.match_idM  s<     A..r4<<	  r+   c                R    U R                  U5      nSnU H  nXS;  d  M
  Sn  U$    U$ )zMatch element's classes.TF)r   )r&   rl   r   current_classesr  r`  s         r(   match_classesCSSMatch.match_classesW  s=     **2.A'	  r+   c                   U R                  U5      nU(       a  U R                  USS9nU(       ay  Ubv  U R                  U5      (       dA  U R                  U5      (       a  UR	                  5       (       d  U R                  U5      (       a  SnOU R                  USS9nU(       a  Ub  Mv  U(       a  U R                  USS9nU(       ay  Ubv  U R                  U5      (       dA  U R                  U5      (       a  UR	                  5       (       d  U R                  U5      (       a  SnOU R                  USS9nU(       a  Ub  Mv  U$ )zMatch element as root.FrM  )r   r   r@   rh   striprX   r   )r&   rl   r   r   s       r(   
match_rootCSSMatch.match_rootb  s    ,,r"'''7Gg1KK((T-C-CG-L-LQXQ^Q^Q`Q`MM'**#G"//e/DG g1 mmBUm3Gg1KK((T-C-CG-L-LQXQ^Q^Q`Q`MM'**#G"mmG%m@G g1 r+   c                    U R                   UL $ )zMatch element as scope.)r8  ry   s     r(   match_scopeCSSMatch.match_scope|  s     zzRr+   c                    U R                  U5      U R                  U5      :H  =(       a#    U R                  U5      U R                  U5      :H  $ )z!Match tag type for `nth` matches.)rG  rA  )r&   rl   r   s      r(   match_nth_tag_typeCSSMatch.match_nth_tag_type  sB     \\% DLL$44 <__U#tr'::	
r+   c                z   SnU GH  nSnUR                   (       a#  U R                  XR                   5      (       d    U$ U R                  U5      nUc  U R                  U5      nUR                  n[        U5      S-
  nU(       a  UOSnSn	UR                  n
UR                  nUR                  nSnSnU(       a  SOSnU(       a  X-  U-   OU
=nnU(       a  SnUS:  d  UU:  a  US:  a4  SU-
  nUb  US:X  a  OjSnX-  nU(       a  X-  U-   OU
=nnSU-
  nUU:  a  OFO5UU-
  nUb  US:X  a  O6SnX-  nU(       a  X-  U-   OU
=nnUU-
  nUU:  a  OUnUS:  a  Mw  UU:  a  M  UnU
S:  a(  US:  a   UnX-  nU(       a  X-  U-   OU
=nnUS:  a  M   SnUnU(       a  X-  U-   OU
=nnSUs=::  a	  US-   ::  a  O  OSnU R                  XXUS:  SS9 H  nX-  nU R                  U5      (       d  M  UR                   (       a#  U R                  UUR                   5      (       d  MS  UR                  (       a  U R                  UU5      (       d  M}  U	S-  n	U	U:X  a
  UUL a  SnO  OUUL d  M    O   UUL a  O8UnX-  nUS:  a  O+U(       a  X-  U-   OU
nUU:X  a  OSUs=::  a  US-   ::  a  M  O  U(       a  GM    U$    U$ )zMatch `nth` elements.TFNr   r   r   )r   r   r   )r4  r  r~   rm   r   r-   r  bnr   r@   of_typer  )r&   rl   nthmatchedr  r   r   
last_indexr   relative_indexr  r  varcount
count_incrfactoridxlast_idxadjustdiff_lowdiff	diff_highlowestr   s                           r(   	match_nthCSSMatch.match_nth  s$    AG{{4#7#7KK#H#Hv u __R(F~00466DVqJ"&JAENAA##CEJRQF.1QY]q8C(  Agz!1Qw#$s7!-&A+!!#+:=Q1Dh 3w8+! , %(*$4	!-&B,!!"+:=Q1Dh"Z/9,!$(	+ Agz!14 q5(!&+:=Q1Dh ( "$J25Q1<h s,j1n,!..vFUVJ]b.cEOE;;u-- {{4+?+?q{{+S+S yy)@)@U)K)K "a'N%, B;&*G!{# d$ B;#19'*ai!ms?= s,j1n,> 7} | r+   c                    SnU R                  USS9 HU  nU R                  U5      (       a  Sn  U$ U R                  U5      (       d  M6  [        R	                  U5      (       d  MR  Sn  U$    U$ )z)Check if element is empty (if requested).TFrM  )r   r@   rh   RE_NOT_EMPTYsearch)r&   rl   is_emptyr   s       r(   match_emptyCSSMatch.match_empty  sx     &&r&6E{{5!!   ''..<3F3Fu3M3M  7 r+   c                P    SnU H  nU R                  X5      (       a  M  SnM     U$ )zMatch selectors.TF)r  )r&   rl   r4  r   sels        r(   match_subselectorsCSSMatch.match_subselectors  s0     C''00  r+   c                \   SnSnU H  nUcD  UR                   (       a  U R                  XR                  S9nOU R                  XR                  S9nSnUR                   H:  nUR                   (       a  U H  nXx;   d  M
  Sn  O   U(       a    OM1  Xt;   d  M8  Sn  O   U(       a  M  SnM     U$ )z"Match element if it contains text.TNr   F)ownr   r   r   text)	r&   rl   containsr   contentcontain_listr  r  r`  s	            r(   match_containsCSSMatch.match_contains  s     $L##"//ll/KG"mmB,,mGGE$))##$9$(E! %    $ * 5) %* r+   c                V   SnSnU R                  USS9nU(       aM  UcJ  U R                  U5      S:X  a  U R                  U5      (       a  UnOU R                  USS9nU(       a  Uc  MJ  SnU R                   H  u  pgXcL d  M  SnXqL a  Sn  O   U(       d  U R	                  USS9 H  nU R                  U5      n	U	S:X  a    U$ U	S;   d  M%  U R                  USS5      n
U
(       d  MA  [        R                  " U
5      S	:X  d  M]  U R                  R                  X845        XL a  Sn  U$    U$ )
Match default.FNTr   form)inputbuttonrB   r   submit)	r~   rG  rx   r2  r   r   r   rw   r   )r&   rl   r   r  r   
found_formftr   rv   r   s              r(   match_defaultCSSMatch.match_default   s;     t4||F#v-$2B2B62J2J4@	  
--DAy!
7 E . --dd-C||E*6>  ..225&"EAqTZZ]h61188$G;$(E D r+   c                $  ^  Sn[        [        T R                  US5      5      nS
U 4S jjnU" U5      nSnT R                   H  u  pxn	XuL d  M  X:X  d  M  SnU	SL a  Sn  O   U(       Gd&  Sn
T R	                  USS9 H  nXL a  M	  T R                  U5      nUS:X  a  SnSnSnT R                  U5       H  u  nn[        R                  " U5      S:X  a  [        R                  " U5      S:X  a  SnO?[        R                  " U5      S:X  a	  UU:X  a  SnO[        R                  " U5      S	:X  a  SnU(       d  M  U(       d  M  U(       d  M  U" U5      UL d  M  Sn
  O   U
(       d  M    O   U
(       d  SnT R                  R                  XSU45        U$ )r  Frv   c                   > SnTR                  U SS9nUcO  TR                  U5      S:X  a  TR                  U5      (       a  Un U$ UnTR                  USS9nUc  Un U$ Uc  MO  U$ )zFind this input's form.NTr   r  )r~   rG  rx   )rl   r  r   last_parentr&   s       r(   get_parent_form5CSSMatch.match_indeterminate.<locals>.get_parent_formM  s    D__R4_8F,<<'61d6F6Fv6N6N!D K %4@>&DK , Kr+   Tr   r  rB   radiochecked)rl   r1   r2   bs4.Tag | None)
r   r   r   r3  r   rG  r   r   rw   r   )r&   rl   r   rv   r  r  r  r  r  r  r  r   tag_nameis_radiocheckhas_namer   r   s   `                 r(   match_indeterminateCSSMatch.match_indeterminateG  s    C33B?@	 r" 
66GA!yQY!
9 E 7 G--dd-C;<<.w&$H!E$H $ 4 4U ;1::a=F2tzz!}7O'+H!ZZ]f4d'+H!ZZ]i7$(E#8((u?UY]?]&*G! !< 7' D( ++22D3FGr+   c           	     <   SnU R                  5       nU R                  nU R                  nUnSnSn	U(       Gd	  U R                  U5      n
U R	                  U5       H  u  pU R                  X{5      u  pU(       a  U
(       a-  U R                  (       d  [        R                  " U5      OUS:X  dP  U(       d  M\  U
(       a  Me  U[        :X  d  Mq  U R                  (       d  Ub  [        R                  " U5      OUS:X  d  M  Un  O   Un	U R                  XpR                  S9nUc  U	nU R                  U5      nU	nO
U(       d  GM	  Uc2  U R                  (       a!  U R                   H  nX_S   L d  M  US   nM     UGc  U R                  (       a  U(       Ga  UR                  S:X  Ga  SnS Ha  nSnU R                  XpR                  S9 H6  nU R                  U5      U:X  d  M  U R!                  U5      (       d  M2  S	nUn  O   U(       a  Ma    O   U(       Ga<  U GH  nU R#                  U5      (       a  U R                  U5      S
:X  a  U R!                  U5      (       a  SnSnU R	                  U5       H  u  p[        R                  " U5      S:X  a  [        R                  " U5      S:X  a  S	n[        R                  " U5      S:X  a  UnU(       d  M`  U(       d  Mi  UnU R                  R%                  ['        [(        U5      ['        [(        U5      45          O   Uc  GM    O   Uc+  U R                  R%                  ['        [(        U5      S45        UbG  U HA  nSnU H,  nU R+                  U['        [(        U5      5      (       d  M*  S	nM.     U(       a  M@    U$    U$ )zMatch languages.FNlangr   r   r   html)r   headTmetaz
http-equivzcontent-languager  r   )r>  r}   r9  r   r   r   r:  r   rw   NS_XMLr~   r   r1  rv   r   rG  rx   r@   r   r   r   rs  )r&   rl   langsr   has_nsr}   r9  r   
found_langr   r   r   r   attr_nsrv  cacher  rD   r   c_langr  patternsr  s                          r(   
match_langCSSMatch.match_lang  s,    ))+yy!44 
**62K,,V4 $ 4 4V ? K4;;djjm\]bh5h{{w&7H15AQD)W[`ff "#J 5 D__V||_DF~%)%5%5d%;") *. $"7"7..8#!&qJ /
 t{{7Idii[aNaE'!..v.NE||E*c1d6F6Fu6M6M $!&	 O
 u ( #E{{5))dll5.AV.KPTP`P`agPhPh!&"&$($8$8$?DA#zz!}<ARdAd)-#zz!}	9*+%v''-4
 $ 5 5 < <d3otTWYcOd=e f % %@ "- $ %))00$sD/21FG !!'G44Wd3
>STT $  ( u " r+   c           	       ^  U[         R                  -  (       a  U[         R                  -  (       a  gUb  T R                  U5      (       d  g[        R                  [        R                  " T R                  USS5      5      S5      nUS;  a  X2:H  $ T R                  U5      nU(       a  Uc  [         R                  U:H  $ T R                  U5      nUS:H  nUS:H  nUS:H  nU(       a'  [        R                  " T R                  US	S5      5      OSn	U(       a  U	S
:X  a  Uc  [         R                  U:H  $ U(       a  U	S;   d  U(       a  US:X  a  U(       a*  SR                  U 4S jT R                  USS9 5       5      n
O![        [        T R                  USS5      5      n
U
(       ad  U
 HK  n[        R                   " U5      nUS;   d  M!  US:X  a  [         R                  O[         R                  nX2:H  s  $    [         R                  U:H  $ U(       a  [         R                  U:H  $ T R#                  T R%                  USS9U5      $ U(       a  Ub  US:X  aR  T R'                  U5      nUb  X2:H  $ U(       a  [         R                  U:H  $ T R#                  T R%                  USS9U5      $ T R#                  T R%                  USS9U5      $ )zCheck directionality.FNrN  r   )Nr   r  rR  rO  rB   tel)r  r  r  urlemailr   c              3  X   >#    U  H  nTR                  U5      (       d  M  Uv   M!     g 7fr   )rh   ).0r   r&   s     r(   	<genexpr>%CSSMatch.match_dir.<locals>.<genexpr>  s$     w1VZ^ZpZpquZv1Vs   *	*Tr   r   rS  rV  )r\  r]  r^  rx   rW  rX  r   rw   r   r   rG  r   r   r   r   rZ  r[  	match_dirr~   rY  )r&   rl   directionalityr_  r   rv   is_inputis_textareais_bdir)  r   r`  ra  s   `            r(   r  CSSMatch.match_dir  sd    BNN*~/N:T--b11 KK

4+E+Eb%QS+T UW[\	I%.. ,,r"y(>>^33 ||B7?j(JR

455b&"EFXZ9+<>>^33 %#LLQ\bkopbpw1B1B2QU1B1VwwS$"<"<R""MNA&44Q7D//6:ckBNNr~~	(::	  ~~77~~77>>$//"/"E~VV y(Y!^r*I$ 22~~77>>$//"/"E~VV ~~doobDoA>RRr+   c                   Sn[         R                  " U R                  US5      5      n[        R	                  U[        [        U R                  USS5      5      5      n[        R	                  U[        [        U R                  USS5      5      5      nUc  Uc  g[        R	                  U[        [        U R                  USS5      5      5      nUb[  US;   a  Ub  Xu:  a  SnU(       d
  Ub  Xv:  a  SnO9US	:X  a3  Ub  Ub  XV:  a  Xu:  a  Xv:  a  SnOUb  Xu:  a  SnU(       d
  Ub  Xv:  a  SnU[        R                  -  (       a  U(       + $ U$ )
a3  
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.
FrB   minNmaxr   )r  r  r   r  r  r  Tr  )	r   rw   r   r   r,  r   r   r\  SEL_IN_RANGE)r&   rl   	conditionout_of_ranger)  mnmxr   s           r(   match_rangeCSSMatch.match_range  s8    

455b&ABtC1K1KBPUW[1\']^tC1K1KBPUW[1\']^ :"*""5$sD4N4NrSZ\`4a*bcVV>ej#'L#5:#'L&>bnzej'+~%*'+'BNuz'+#,r#><PLPr+   c                    U R                  U5      nUSL=(       aI    UR                  S5      S:H  =(       d.    UR                  S5      S:g  =(       d    U R                  U5      SL$ )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  r   r  )rG  findrJ  rF  s      r(   match_definedCSSMatch.match_defined=  s_     ||B 		#"$ 0		#"$0#4/		
r+   c                <    SnU R                  U5      nUS;   a  SnU$ )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&   rl   r   r  s       r(   match_placeholder_shown CSSMatch.match_placeholder_shownT  s)     --#j Er+   c                   SnUR                   nUR                  nU(       a,  U R                  nU R                  nS[        0U l        SU l        U(       a  U R                  (       Ga  U GH  nUn[        U[        R                  5      (       a  M'  U R                  XR                  5      (       d  MI  UR                  [        R                  -  (       a  U R                  U5      (       d  M  UR                  [        R                  -  (       a  U R                  U5      (       d  M  UR                  [        R                  -  (       a  U R!                  U5      (       d  M  UR                  [        R"                  -  (       a  U R%                  U5      (       d  GM2  U R'                  XR(                  5      (       d  GMU  UR                  [        R*                  -  (       a  U R-                  U5      (       d  GM  UR.                  (       a#  U R1                  XR.                  5      (       d  GM  UR2                  (       a#  U R5                  XR2                  5      (       d  GM  U R7                  XR8                  5      (       d  GM  UR                  [:        -  (       a*  U R=                  XR                  [:        -  5      (       d  GM]  UR>                  (       a#  U RA                  XR>                  5      (       d  GM  URB                  (       a#  U RE                  XRB                  5      (       d  GM  URF                  (       a#  U RI                  XRF                  5      (       d  GM  UR                  [        RJ                  -  (       a  U RM                  U5      (       d  GM4  UR                  [        RN                  -  (       a  U RQ                  U5      (       d  GMo  UR                  [R        -  (       a*  U RU                  XR                  [R        -  5      (       d  GM  URV                  (       a#  U RY                  XRV                  5      (       d  GM  U(       + n  O   U(       a  WU l        WU l        U$ )z.Check if element matches one of the selectors.Fr   T)-is_notr   r5  r7  r   rH   r\  r  r  rD   r6  SEL_DEFINEDr'  SEL_ROOTr  	SEL_SCOPEr  SEL_PLACEHOLDER_SHOWNr+  r  r  	SEL_EMPTYr  r  r  r   r  r  r  RANGESr#  r  r  r4  r  r  r  SEL_DEFAULTr  SEL_INDETERMINATEr  	DIR_FLAGSr  r  r  )	r&   rl   r4  r   r.  r   r5  r7  selectors	            r(   r  CSSMatch.match_selectorsc  s    !!## J"22O%x0DO#'D $,,,%h88~~b,,77>>BNN24;M;Mb;Q;Q>>BKK/8K8K>>BLL09I9I"9M9M>>B$<$<<TEaEabdEeEe~~b,,77>>BLL09I9I"9M9M<<b,,(G(G##D,>,>rCSCS,T,T,,R1D1DEE>>F*43C3CBY_H_3`3`==]])K)K%%d.E.EbJ\J\.].]$$T-A-A"FWFW-X-X>>BNN24;M;Mb;Q;Q >>B$8$88AYAYZ\A]A]>>I-dnnRZcIc6d6d$$T-@-@EVEV-W-W"
y &~ (DO#2D r+   c              #     #    US:  a  SOUnU R                  U R                  5       H1  nU R                  U5      (       d  M  Uv   Uc  M$  US-  nUS:  d  M1    g   g7f)z&Match all tags under the targeted tag.r   N)r   rD   r   )r&   limitlimr   s       r(   selectCSSMatch.select  sY      aidU))$((3Ezz%  ?1HCQw 4s   =AA	AAc                    U R                   nSnUc5  Ub2  U R                  U5      (       a  UnOU R                  U5      nUc  Ub  M2  U$ )Match closest ancestor.N)rD   r   r~   )r&   currentclosests      r(   rB  CSSMatch.closest  sQ     ((o'"5zz'""!//'2	 o'"5
 r+   c                    U R                  U R                  5       Vs/ s H4  oR                  U5      (       a  M  U R                  U5      (       d  M2  UPM6     sn$ s  snf )zFilter tag's children.)r   rD   r`   r   r&   rD   s     r(   filterCSSMatch.filter  sJ      $00:t:BZBZ[^B_dhdndnords:ttts   AAAc                    U R                  U5      (       + =(       a3    U R                  U5      =(       a    U R                  XR                  5      $ zMatch.)rM   r@   r  r4  ry   s     r(   r   CSSMatch.match  s9     ;;r?"ct{{2c4;O;OPRTbTb;ccr+   )r2  r3  r1  r6  r9  r7  r   r:  r5  r}   r8  r4  rD   N)
r4  ct.SelectorListr8  r1   r5  ct.Namespaces | Noner6  r!  r2   r3   )r2   rp   )rl   r1   r2   r   r   r   )rl   r1   r2   r   )ri  r   rj  r   r2   rp   )rl   r1   rv  r   r   r   r2   r   )rl   r1   rD   zct.SelectorTagr2   rp   )rl   r1   r  z tuple[ct.SelectorAttribute, ...]r2   rp   )rl   r1   rD   zct.SelectorTag | Noner2   rp   )rl   r1   r  rK  r2   rp   r   )r   r1   r  rK  r  rp   r2   rp   )rl   r1   r  tuple[str, ...]r2   rp   )rl   r1   r   rM  r2   rp   )rl   r1   r   r1   r2   rp   )rl   r1   r  r1   r2   rp   )rl   r1   r4  ztuple[ct.SelectorList, ...]r2   rp   )rl   r1   r  ztuple[ct.SelectorContains, ...]r2   rp   )rl   r1   r  ztuple[ct.SelectorLang, ...]r2   rp   )rl   r1   r  r!  r2   rp   )rl   r1   r  r!  r2   rp   )rl   r1   r4  rK  r2   rp   r   )r;  r!  r2   Iterator[bs4.Tag])r2   r  )r2   list[bs4.Tag]),r5   r6   r7   r8   r9   r)   r>  rA  rx   rG  rJ  rY  rs  rw  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=  rB  rF  r   r:   r;   r+   r(   r/  r/    s3   'B"'B 'B )	'B
 'B 
'BR6

/
RX"H6p33 3 	3
 
$3j*&

8.	4 

cJ8%N;zTl9Sv&QP
.Rh
u
dr+   r/  c                     ^  \ rS rSr% SrS\S'   S\S'   S\S'   S	\S
'   S\S'   Sr          SU 4S jjrSS jrSS jr	SS jr
SS jrSSS jjrSSS jjrSS jr\rSrU =r$ )	SoupSievei  z-Compiled Soup Sieve selector matching object.r   r  rK  r4  rL  r5  zdict[str, str]customr!  r6  )r  r4  r5  rS  r6  _hashc                (   > [         TU ]  UUUUUS9  g)r#   )r  r4  r5  rS  r6  N)superr)   )r&   r  r4  r5  rS  r6  	__class__s         r(   r)   SoupSieve.__init__  s&     	! 	 	
r+   c                v    [        U R                  XR                  U R                  5      R	                  U5      $ rI  )r/  r4  r5  r6  r   rE  s     r(   r   SoupSieve.match  s+     __djjIOOPSTTr+   c                t    [        U R                  XR                  U R                  5      R	                  5       $ )r@  )r/  r4  r5  r6  rB  rE  s     r(   rB  SoupSieve.closest  s(     __djjIQQSSr+   c                @   [         R                  U5      (       a9  [        U R                  XR                  U R                  5      R                  5       $ U Vs/ s H9  n[         R                  U5      (       a  M  U R                  U5      (       d  M7  UPM;     sn$ s  snf )aY  
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.
)r/  r@   r4  r5  r6  rF  r`   r   )r&   iterabler   s      r(   rF  SoupSieve.filter  sn     ??8$$DNNHootzzRYY[[%-mXTX5Q5QRV5WD\`\f\fgk\lDXmmms   B:BBc                >    U R                  USS9nU(       a  US   $ S$ )zSelect a single tag.r   )r;  r   N)r=  )r&   rD   r   s      r(   
select_oneSoupSieve.select_one  s'     {{3a{(tAw(D(r+   c                6    [        U R                  X5      5      $ )zSelect the specified tags.)listiselectr&   rD   r;  s      r(   r=  SoupSieve.select  s     DLL,--r+   c              #     #    [        U R                  XR                  U R                  5      R	                  U5       Sh  vN   g N7f)zIterate the specified tags.N)r/  r4  r5  r6  r=  rf  s      r(   re  SoupSieve.iselect  s1      DNNC$**MTTUZ[[[s   >A AAc           	     x    SU R                   < SU R                  < SU R                  < SU R                  < S3	$ )zRepresentation.zSoupSieve(pattern=z, namespaces=z	, custom=z, flags=))r  r5  rS  r6  r.   s    r(   __repr__SoupSieve.__repr__#  s@     ! 0doo=P Qkk_HTZZN!=	
r+   r;   )
r  r   r4  rK  r5  rL  rS  zct.CustomSelectors | Noner6  r!  )rD   r1   r2   rp   )rD   r1   r2   r1   )r^  zIterable[bs4.Tag]r2   rP  rN  )rD   r1   r;  r!  r2   rP  )rD   r1   r;  r!  r2   rO  )r2   r   )r5   r6   r7   r8   r9   __annotations__	__slots__r)   r   rB  rF  ra  r=  re  rl  __str__r:   __classcell__)rW  s   @r(   rR  rR    s    7L$$JRI

 #
 )	

 *
 
$U
T
n").
\

 Gr+   rR  );r9   
__future__r   r   r   r   rer   r\  rZ  rI   typingr   r	   r
   r   r   r   compiler  r   r  r  r  r  r  r  r  r  r   r  r]  r^  r7  r  SEL_OUT_OF_RANGEr4  rW  r'  r%  r#  r$  r  r&  re  r   r   r   r   r   r   DAYS_IN_WEEKr    r=   r   r/  	ImmutablerR  pickle_registerr;   r+   r(   <module>rz     s    "   	   
 D D zz.)JJ'	 
     )	/NNR^^+		2..	. >>>> 
G	H
**B
C::BC
**A
B
**S
Tjjk 

=>	
	" "(hm hmV	d dNwd| wdtP Pf   9 r+   