
    sh                     ,
   S r SSKrSSKrSSKrSSKrSSKJr  SSKJr  SSK	J
r
JrJr  SSKJrJrJrJrJrJrJrJrJr  SSKJr  SSKJr  SS	KJrJr  SS
KJrJ r J!r!  S r"S r#Sr$Sr%Sr&Sr'Sr(Sr)S r*\!S 5       r+S r,S r-S r.S r/\R`                  " SS5      r1 " S S\25      r3 " S S\25      r4 " S S \25      r5S! r6\" \75      S" 5       r8\" \7\
Rr                  5      S# 5       r:\" \;\
Rx                  5      S$ 5       r=\" \R|                  \
Rx                  \
R~                  5      S% 5       r@\" S&\
Rx                  5      S' 5       rA\" S(\
R                  5      \" \R                  5      S) 5       5       rD\" S*\
Rx                  \
R~                  5      S+ 5       rE\!S, 5       rF\ " \
Rx                  S-5      S. 5       rG\!S/ 5       rH\ " \
Rx                  S05      S1 5       rI\!S2 5       rJ\ " \
Rx                  S35      S4 5       rK\!S5 5       rL\ " \
Rx                  S65      S7 5       rM\!S8 5       rN\ " \
Rx                  S95      S: 5       rOS; rP\!S< 5       rQ\ " \
Rx                  S=5      S> 5       rRS? rS\!S@ 5       rT\ " \
Rx                  SA5      SB 5       rUSC rV\!SD 5       rW\ " \
Rx                  SE5      SF 5       rX\" SG\
Rx                  \
Rr                  5      SH 5       rYSI rZ\R                  \S4\R                  \Y4\R                  \P4\R                  \V44 H  u  r_r`\Z" \_\`5        M     \" \R                  5      \ " \
Rx                  SJ5      SK 5       5       rb\" \R                  5      \ " \
Rx                  SL5      SM 5       5       rd\" \R                  5      \ " \
Rx                  SN5      SO 5       5       rf\" \R                  5      \ " \
Rx                  SP5      SQ 5       5       rh\!SR 5       ri\ " \
Rx                  SS5      ST 5       rj\!SU 5       rk\" \R                  5      \ " \
Rx                  SV5      SW 5       5       rm\" \R                  5      \ " \
Rx                  SX5      SY 5       5       ro\!SZ 5       rp\" \R                  5      S[ 5       rr\" \R                  5      S\ 5       rt\!S] 5       ru\" \R                  5      S^ 5       rw\" \R                  5      S_ 5       ry\" \R                  \
Rx                  \
Rx                  5      S` 5       r{\" \
Rx                  \
Rx                  5      Sa 5       r|g)bz&
Support for native homogeneous sets.
    N)cached_property)ir)typestypingcgutils)	lower_builtin
lower_castiternext_implimpl_ret_borrowedimpl_ret_new_refimpl_ret_untrackedfor_itercall_lenRefType)	quicksort)slicing)NumbaValueErrorTypingError)overloadoverload_method	intrinsicc                     [         R                  " U5      nU R                  U5      R                  5       nUR	                  X55      nU R                  XUS9$ )zl
Given a set value and type, get its payload structure (as a
reference, so that mutations are seen by all).
ref)r   
SetPayloadget_data_type
as_pointerbitcastmake_data_helper)contextbuilderset_typeptrpayload_typeptrtypayloads          h/Users/tiagomarins/Projetos/claudeai/copy_bank/venv/lib/python3.13/site-packages/numba/cpython/setobj.pyget_payload_structr(      sQ    
 ##H-L!!,/::<Eooc)G##Gw#GG    c                 n    U R                  [        R                  " U5      5      nU R                  U5      $ )z/
Return the entry size for the given set type.
)r   r   SetEntryget_abi_sizeof)r    r"   lltys      r'   get_entry_sizer.   #   s.       !9:D!!$''r)   i      Fc                 $   U R                   nUR                  [        5      nUR                  XB40 5      nU R	                  XV5      nU" X45      n[        XU5      n	[        R                  " UR                  [        5      n
UR                  XU
5      $ )z&
Compute the hash of the given value.
)typing_contextresolve_value_typehashget_call_typeget_functionis_hash_usedr   ConstanttypeFALLBACKselect)r    r!   typvalue	typingctxfntysigfnhis_okfallbacks              r'   get_hash_valuerG   ;   s     &&I''-D


Y
3C			d	(B
7HA1-E{{1668,H>>%H--r)   c                 h   ^ U4S jnU R                  [        5      nUR                  U T40 5      nXB4$ )Nc                 $   > [        XTUS   5      $ Nr   )rG   )r    r!   r>   argsr?   s       r'   impl'_get_hash_value_intrinsic.<locals>.implL   s    gtAw??r)   )r5   r6   r7   )r@   r?   rL   rA   rB   s    `   r'   _get_hash_value_intrinsicrN   J   s7    @''-D


Y"
5C9r)   c                 p    [         R                  " UR                  [        5      nUR	                  SX#5      $ )z0
Whether the hash value denotes an empty entry.
==)r   r:   r;   EMPTYicmp_unsigned)r    r!   rD   emptys       r'   is_hash_emptyrT   S   s+     KK&E  q00r)   c                 p    [         R                  " UR                  [        5      nUR	                  SX#5      $ )z1
Whether the hash value denotes a deleted entry.
rP   r   r:   r;   DELETEDrR   r    r!   rD   deleteds       r'   is_hash_deletedrZ   Z   s+     kk!&&'*G  q22r)   c                 p    [         R                  " UR                  [        5      nUR	                  SX#5      $ )z1
Whether the hash value denotes an active entry.
<rV   rX   s       r'   r9   r9   a   s+    
 kk!&&'*G  a11r)   c            	      6   [        U  Vs/ s H  n[        U[        R                  5      PM     sn5      (       d  [	        SU  35      e[        U  Vs/ s H  o S   R
                  UR
                  :H  PM      sn5      (       d  [	        SU  35      eg s  snf s  snf )Nz All arguments must be Sets, got r   z'All Sets must be of the same type, got )all
isinstancer   Setr   dtype)rK   r>   ss      r'   check_all_setrc   j   s    d;ds
3		*d;<<<TFCDD$7$QQ($788CD6JKK 9 < 8s   $B%BSetLoopindexentrydo_breakc                      \ rS rSrS r\S 5       r\R                  S 5       r\S 5       r\R                  S 5       r\S 5       r	\	R                  S 5       r	\S	 5       r
\
R                  S
 5       r
\S 5       r\R                  S 5       r\S 5       r\S 5       rS rSS jr\R"                  SS j5       r\R"                  S 5       rSrg)_SetPayloadu   c                     [        XX45      nXl        X l        X0l        XPl        UR                  S5      U l        X@l        g )Nentries)r(   _context_builder_ty_payload_get_ptr_by_name_entries_ptr)selfr    r!   r"   r#   r&   s         r'   __init___SetPayload.__init__w   s9    $WxE00;	r)   c                 .    U R                   R                  $ Nrq   maskru   s    r'   r{   _SetPayload.mask       }}!!!r)   c                 $    XR                   l        g ry   rz   ru   r?   s     r'   r{   r}      s     #r)   c                 .    U R                   R                  $ ry   rq   usedr|   s    r'   r   _SetPayload.used   r~   r)   c                 $    XR                   l        g ry   r   r   s     r'   r   r          "r)   c                 .    U R                   R                  $ ry   rq   fillr|   s    r'   r   _SetPayload.fill   r~   r)   c                 $    XR                   l        g ry   r   r   s     r'   r   r      r   r)   c                 .    U R                   R                  $ ry   rq   fingerr|   s    r'   r   _SetPayload.finger   s    }}###r)   c                 $    XR                   l        g ry   r   r   s     r'   r   r      s    $r)   c                 .    U R                   R                  $ ry   rq   dirtyr|   s    r'   r   _SetPayload.dirty   s    }}"""r)   c                 $    XR                   l        g ry   r   r   s     r'   r   r      s    #r)   c                     U R                   $ )z.
A pointer to the start of the entries array.
)rs   r|   s    r'   rm   _SetPayload.entries   s    
 }}r)   c                     U R                   $ )z3
A pointer to the start of the NRT-allocated area.
)rt   r|   s    r'   r#   _SetPayload.ptr   s    
 yyr)   c                     [         R                  " U R                  U R                  U5      nU R                  R                  U R                  [        R                  " U R                  5      US9nU$ )z
Get entry number *idx*.
r   )	r   gepro   rs   rn   r   r   r+   rp   )ru   idx	entry_ptrrg   s       r'   	get_entry_SetPayload.get_entry   sW     KKt}}cB	..t}}/4~~dhh/G3< / > r)   c                   ^ ^^^^^^^^^^ T R                   mT R                  mTR                  nT R                  nT R                  R
                  nTR                  nUR                  [        R                  5      nUR                  XvU40 5      n	TR                  X5      m[        R                  " US5      n
[        R                  " US5      n[        R                  " TT5      n[        R                  " TTR!                  TU5      5      nT(       a(  UR                  S5      m[        R                  " TT5      mTR#                  S5      nTR#                  S5      mTR#                  S5      mTR#                  S5      nUUUUUUUUUUU 4S jn[        R$                  " T[        R                  " U[&        5      5         TR)                  U5      nU" U5        TR+                  UU
5      nTR!                  UU5      nTR-                  UU5        S	S	S	5        TR/                  U5        TR1                  U5         TR)                  U5      nU" U5        TR)                  U5      nTR3                  UU5      nTR+                  U
TR5                  UU5      5      nTR!                  UTR+                  UU5      5      nTR-                  UU5        TR-                  UU5        TR/                  U5        S	S	S	5        TR1                  T5         T(       aX  TR)                  U5      nTR)                  T5      nTR7                  TR9                  S
UT5      UU5      nTR-                  UU5        TR/                  U5        S	S	S	5        TR1                  T5         TR/                  U5        S	S	S	5        TR;                  U5        TR=                  [        R>                  " S5      S5      nURA                  [        RB                  T5        URA                  [        RD                  T5        UTR)                  U5      4$ ! , (       d  f       GN.= f! , (       d  f       GN`= f! , (       d  f       N= f! , (       d  f       N= f)a/  
Lookup the *item* with the given hash values in the entries.

Return a (found, entry index) tuple:
- If found is true, <entry index> points to the entry containing
  the item.
- If found is false, <entry index> points to the empty entry that
  the item can be written to (only if *for_insert* is true)
      r/   zlookup.bodyzlookup.foundzlookup.not_foundz
lookup.endc                   > TR                  U 5      nUR                  nTR                  TR                  STU5      5         T	" TTUR                  45      nTR                  U5         TR                  T5        SSS5        SSS5        TR                  [        TTU5      5         TR                  T5        SSS5        T
(       al  TR                  [        TTU5      5         TR                  T5      nTR                  TR                  SUT5      X5      nTR                  UT5        SSS5        gg! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       g= f)z7
Check entry *i* against the value being searched for.
rP   N)r   r6   if_thenrR   keybranchrT   rZ   loadr=   store)irg   
entry_hasheqjbb_foundbb_not_foundr!   r    eqfn
for_insert
free_indexfree_index_sentinelrD   itemru   s        r'   check_entry(_SetPayload._lookup.<locals>.check_entry   s(    NN1%EJ!6!6tQ
!KL 'D%))#45__R(NN8, )	 M w!LM|, N ___Wgz%RSZ0Aw'<'<T1FY'Z'(-AMM!Z0	 TS  )(	 ML NM
 TSs=   'E(D4:E&E#AE'4
E	>E
E
E$'
E5NrP   found)#rn   ro   r;   r{   rp   ra   r4   r5   operatorr   r7   r8   r   r:   r   alloca_once_valueand_append_basic_block	for_rangeLINEAR_PROBESr   addr   r   
goto_blocklshrmulr=   rR   position_at_endphiIntTypeadd_incomingtrue_bit	false_bit)ru   r   rD   r   intp_tr{   ra   tyctxrA   rB   onefiveperturbrf   bb_bodybb_endr   r   pr   r   r   r   r!   r    r   r   r   s   ````                 @@@@@@@r'   _lookup_SetPayload._lookup   s~    ----yy&&''4  ;##D.kk&!${{61% ++GQ7))'*1,,q$*?A"&))B- 227<OPJ,,];--n=112DE++L9	1 	18 wFM(JKU#ANAs#AQ%AMM!U# L 	w(U#AN
 W%AQ%ACQ!56AT7;;q!#45AMM!U#MM!W%NN7# )  - LL'LL,NN7#8#8qBU#V#$a)a'NN6" . )NN6" * 	'BJJqM737++X67,,l;gll5)))a LK )(  .- *)s3   AP8;B6Q

A1QQ-8
Q

Q
Q*-
Q;Nc              #   <  #    U R                   nU R                  nUR                  [        R                  5      n[
        R                  " US5      nUR                  U R                  U5      n[        R                  " X6US9 nU R                  UR                  5      n[        X#UR                  5      n	UR                  U	5         [!        UR                  UUR"                  S9n
U
v   SSS5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f7f)z7
Iterate over the payload's entries.  Yield a SetLoop.
r   startre   N)rn   ro   get_value_typer   intpr   r:   r   r{   r   r   r   rf   r9   r6   r   rd   rh   )ru   r   r    r!   r   r   size
range_looprg   is_usedloops              r'   _iterate_SetPayload._iterate7  s     
 ----''

3kk&!${{499c*wE:jNN:#3#34E"7UZZ@G)Z%5%5U(2(;(;=
 * ;: *) ;:s7   B DAD$C:)D1	D:
D	D
DDc              #   V  #    U R                   nU R                  nUR                  [        R                  5      n[
        R                  " US5      n[
        R                  " US5      nU R                  nUR                  S5      nUR                  S5      n[        R                  " X R                  5      n	UR                  U5        UR                  U5         UR                  U	5      n
UR                  XbR!                  X5      5      n
UR#                  X5        U R%                  U
5      n['        XUR(                  5      nUR+                  XU5        SSS5        UR-                  U5        UR                  U	5      n
Xl        U R%                  U
5      v   g! , (       d  f       NJ= f7f)zs
Yield a random entry from the payload.  Caller must ensure the
set isn't empty, otherwise the function won't end.
r   r   next_entry_bodynext_entry_endN)rn   ro   r   r   r   r   r:   r{   r   r   r   r   r   r   r   r   r   r   r   r9   r6   cbranchr   )ru   r    r!   r   zeror   r{   r   r   rf   r   rg   r   s                r'   _next_entry_SetPayload._next_entryK  sF     ----''

3{{61%kk&!$yy
 ,,->?++,<=))';;?w(U#AT;;q#67AMM!#NN1%E"7UZZ@GOOGW5 ) 	' LLnnQ )(s    CF)A<FAF)
F&"F))ro   rn   rs   rq   rt   rp   r   Fry   )__name__
__module____qualname____firstlineno__rv   propertyr{   setterr   r   r   r   rm   r#   r   r   
contextlibcontextmanagerr   r   __static_attributes__ r)   r'   rj   rj   u   sK    " " 
[[# # " " 
[[# # " " 
[[# # $ $ ]]% % # # \\$ $    t*l  & %  % r)   rj   c                      \ rS rSrS r\S 5       r\S 5       r\S 5       r\S 5       r	\S 5       r
\
R                  S 5       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S rS rS rS rS rS rS rS rS rS/S jrS rS r\ S0S j5       r!\ S0S j5       r"\ S  5       r#\ S! 5       r$S" r%S# r&S$ r'S% r(S/S& jr)S' r*S( r+S) r,S* r-S+ r.S,r/g)1SetInstanceit  c                 v    Xl         X l        X0l        [        X5      U l        UR                  X#U5      U l        g ry   )rn   ro   rp   r.   
_entrysizemake_helper_set)ru   r    r!   r"   set_vals        r'   rv   SetInstance.__init__v  s1    (;''7C	r)   c                 .    U R                   R                  $ ry   )rp   ra   r|   s    r'   ra   SetInstance.dtype}  s    xx~~r)   c                     U R                   nU R                  nU R                   R                  R                  X R                  5      n[        XU R                  U5      $ )z
The _SetPayload for this set.
)rn   ro   nrtmeminfo_datameminforj   rp   )ru   r    r!   r#   s       r'   r&   SetInstance.payload  sG     ----mm,,WllC7TXXs;;r)   c                 6    U R                   R                  5       $ ry   )r   	_getvaluer|   s    r'   r?   SetInstance.value  s    yy""$$r)   c                 .    U R                   R                  $ ry   )r   r   r|   s    r'   r   SetInstance.meminfo  s    yy   r)   c                 .    U R                   R                  $ ry   r   parentr|   s    r'   r  SetInstance.parent  s    yyr)   c                 $    XR                   l        g ry   r  r   s     r'   r  r    s     		r)   c                 .    U R                   R                  $ )z,
Return the number of elements in the size.
)r&   r   r|   s    r'   get_sizeSetInstance.get_size  s     ||   r)   c                     U R                   R                  (       a7  U(       a  [        R                  O[        R                  U R
                  l        g g ry   )rp   	reflectedr   r   r   r&   r   ru   vals     r'   	set_dirtySetInstance.set_dirty  s0    8858!1!1g>O>ODLL r)   c                 
   U R                   nU R                  nUR                  nXBl        U R                  U5        X2l        UR
                  n	[        R                  " U	R                  S5      n
UR                  X5      =ol        UR                  [        XgU5      SS9   UR                  UR                  U
5      Ul        S S S 5        U(       a  U R                  U	5        U R                  S5        g ! , (       d  f       N8= f)Nr   Tlikely)rn   ro   r6   incref_valuer   r   r   r:   r;   r   r   rT   r   upsizer  )ru   r&   rg   r   rD   	do_resizer    r!   old_hashr   r   s              r'   
_add_entrySetInstance._add_entry  s    ----::
$	||kk$))Q'%kk$44|__]7XF$(  *";;w||S9GL* KKt* *s    "C44
Dc                    U R                   nU R                  nUR                  X#SS9u  pUR                  U5      n
UR	                  U
5         UR                  U	5      nUR                  nX;l        U(       a  U R                  U5        X+l        UR                  n[        R                  " UR                  S5      nUR                  X5      =ol	        UR	                  [        XgU5      SS9   UR                  UR                  U5      Ul        S S S 5        U(       a  U R!                  U5        U R#                  S5        S S S 5        g ! , (       d  f       N@= f! , (       d  f       g = f)NTr   r   r  )rn   ro   r   not_r   r   r6   r  r   r   r   r:   r;   r   rT   r   r  r  )ru   r&   r   rD   r  	do_increfr    r!   r   r   	not_foundrg   r  r   r   s                  r'   _add_keySetInstance._add_key  s   ----??4t?<LL'	__Y'%%a(EzzHJ!!$'I<<D++dii+C")++d"88D<w!J(, ! .&{{7<<=. D!NN4 ' ('. . ('s%   B E-"E	1E	
E	E
E(c                    [         R                  " UR                  R                  [        5      Ul        U(       a  U R                  UR                  5        UR                  n[         R                  " UR                  S5      nU R                  R                  XV5      =oQl        U(       a  U R                  U5        U R                  S5        g )Nr   T)r   r:   r6   r;   rW   decref_valuer   r   ro   subdownsizer  )ru   r&   rg   r  	do_decrefr   r   s          r'   _remove_entrySetInstance._remove_entry  s    [[':
eii(||kk$))Q'"mm//::|MM$tr)   c                     U R                   nU R                  nUR                  X#5      u  pxUR                  U5         UR	                  U5      n	U R                  XU5        S S S 5        U$ ! , (       d  f       U$ = fry   )rn   ro   r   r   r   r%  )
ru   r&   r   rD   r  r    r!   r   r   rg   s
             r'   _remove_keySetInstance._remove_key  sl    ----??4+__U#%%a(Ewy9 $ 	 $# s   $A++
A:c                     U R                   nU R                  nU R                  n[        X4U R                  R
                  U5      nU R                  XQXb5        g ry   )rn   ro   r&   rG   rp   ra   r  )ru   r   r  r    r!   r&   rD   s          r'   r   SetInstance.add  sA    ----,,7TXX^^TBgQ2r)   c                     U R                   nU R                  nU R                  nU R                  XXR5      nU R	                  XbXs5        g)zPA version of .add for use inside functions following Python calling
convention.
N)rn   ro   r&   _pyapi_get_hash_valuer  )ru   pyapir   r  r    r!   r&   rD   s           r'   	add_pyapiSetInstance.add_pyapi  s?     ----,,&&uwEgQ2r)   c                 J   U R                   R                  /n[        R                  nS nU/n[        R
                  " U/UQ76 n	UR                  XyU5      u  pUR                  U
SS9   UR                  UR                  5       5        SSS5        U$ ! , (       d  f       U$ = f)z=Python API compatible version of `get_hash_value()`.
        c                     [        U 5      $ ry   )rN   )r  s    r'   wrapper2SetInstance._pyapi_get_hash_value.<locals>.wrapper  s    ,S11r)   Fr  N)
rp   ra   r   r   r   	signaturecall_jit_coder   retget_null_object)ru   r.  r    r!   r   argtypesrestyr3  rK   rB   is_errorretvals               r'   r-  !SetInstance._pyapi_get_hash_value  s     HHNN#

	2 vu0x0 ..wTB__Xe_4KK--/0 5  54 s   ) B
B"c                     U R                   nU R                  nU R                  n[        X#U R                  R
                  U5      nUR                  X5      u  pgU$ ry   )rn   ro   r&   rG   rp   ra   r   )ru   r   r    r!   r&   rD   r   r   s           r'   containsSetInstance.contains  sH    ----,,7TXX^^TB??4+r)   c                     U R                   nU R                  nU R                  n[        X#U R                  R
                  U5      nU R                  XAU5      nU$ ry   )rn   ro   r&   rG   rp   ra   r(  )ru   r   r    r!   r&   rD   r   s          r'   discardSetInstance.discard   sJ    ----,,7TXX^^TB  2r)   c                    U R                   nU R                  nUR                  U R                  R                  5      n[
        R                  " X#5      nU R                  nUR                  5        nUR                  UR                  U5        U R                  XVSS9  S S S 5        UR                  U5      $ ! , (       d  f       N= f)NF)r$  )rn   ro   r   rp   ra   r   alloca_oncer&   r   r   r   r%  r   )ru   r    r!   ltyr   r&   rg   s          r'   popSetInstance.pop)  s    ----$$TXX^^4!!'/,,  "eMM%))S)w? #
 ||C   #"s   0-B66
Cc                     U R                   nU R                  nUR                  [        R                  5      n[
        R                  " U[        5      nU R                  U5        U R                  S5        g )NT)
rn   ro   r   r   r   r   r:   MINSIZE_replace_payloadr  )ru   r    r!   r   minsizes        r'   clearSetInstance.clear8  sR    ----''

3++fg.g&tr)   c           
      D   U R                   nU R                  nU R                  nUR                  nUR                  n[        U 5      " XU R                  S5      nUR                  SXE5      nUR                  USS9 u  pU   UR                  U5      n
UR                  UR                  U
5      SS9   UR                  R                  U[        S5        SSS5        SSS5        U	   U R                  XU5      nUR!                  U5      n
UR                  UR                  U
5      SS9   UR                  R                  U[        S5        SSS5        UR                  nUR#                  5        nUR$                  nUR'                  XR(                  UR*                  SS9  SSS5        SSS5        SSS5        U$ ! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       N= f! , (       d  f       NS= f! , (       d  f       N\= f! , (       d  f       U$ = f)z
Return a copy of this set.
NrP   Tr  F)zcannot copy setr  )rn   ro   r&   r   r   r;   rp   rR   if_else_copy_payloadr   r  	call_convreturn_user_excMemoryErrorchoose_alloc_size_allocate_payloadr   rg   r  r   r6   )ru   r    r!   r&   r   r   otherno_deleted_entriesif_no_deleted
if_deletedoknentriesother_payloadr   rg   s                  r'   copySetInstance.copyA  s    ----,,||||T
7TXXt<$224D__/_=*((1__W\\"%5e_D%%55g{6JL E  11'DI,,X6__W\\"%5e_D%%55g{6JL E !&%%'4 JJENN=))UZZ-2 # 4 (  >. % ED  ED
 ('  >=. s   <H1G2"F;G
H&AG?)"G$G?/2G.!G?)H;
G	G
G	H
G+'G?.
G<8G??
H		H
Hc                    U R                   nU R                  nU R                  nUR                  nUR                  5        nUR                  nUR                  UR                  UR                  5      u  pUR                  UR                  U5      5         U R                  XGSS9  SSS5        SSS5        U R                  UR                  5        g! , (       d  f       N2= f! , (       d  f       N;= f)z)
In-place intersection with *other* set.
FrP  N)rn   ro   r&   r   rg   r   r   r6   r   r  r%  r#  r   )
ru   rX  r    r!   r&   r^  r   rg   r   _s
             r'   	intersectSetInstance.intersecth  s     ----,,4JJE$,,UYY

CHEe!45""7U"C 6   	gll#	 65  s%   AC$C'C$
C!	C$$
C2c                 P   U R                   nU R                  nU R                  nUR                  nUR                  5        nUR                  nU R                  XGR                  UR                  SS9  SSS5        U R                  UR                  5        g! , (       d  f       N*= f)z'
In-place difference with *other* set.
FrP  N)
rn   ro   r&   r   rg   r(  r   r6   r#  r   )ru   rX  r    r!   r&   r^  r   rg   s           r'   
differenceSetInstance.differencez  s|     ----,,##%JJEWiiuM &
 	gll# &%s   2B
B%c           	         U R                   nU R                  nUR                  nUR                  5        nUR                  R
                  nUR                  R                  nU R                  nUR                  XgSS9u  pUR                  U
5      nUR                  U	5       u  pU   U R                  XSS9  SSS5        U   U R                  XXg5        SSS5        SSS5        SSS5        U R                  U R                  R                  5        g! , (       d  f       Na= f! , (       d  f       NU= f! , (       d  f       N^= f! , (       d  f       Ng= f)z1
In-place symmetric difference with *other* set.
Tr  FrP  N)rn   ro   r&   r   rg   r   r6   r   r   rQ  r%  r  r#  r   )ru   rX  r    r!   r^  r   r   rD   r&   r   r   rg   	if_commonif_not_commons                 r'   symmetric_difference SetInstance.symmetric_difference  s     ----##%**..C

AllGs$?HE%%a(E'+EI&&w&G "OOGC; # ( & 	dll''( Y"] (' &%sT   A-E"D5'D8
D5D$D5E
D!D5$
D2.D55
E	?E
Ec           	         U R                   nU R                  nU R                  nUR                  nU(       a  SOSn[        R                  " U[        R
                  5      nUR                  UR                  XuR                  UR                  5      5       u  pU
   UR                  [        R                  U5        S S S 5        U	   UR                  5        nUR                  nUR                  UR                  UR                  5      u  pUR!                  UR#                  U5      5         UR                  [        R                  U5        UR%                  5         S S S 5        S S S 5        S S S 5        S S S 5        UR'                  U5      $ ! , (       d  f       N= f! , (       d  f       NH= f! , (       d  f       NQ= f! , (       d  f       NZ= f! , (       d  f       Nc= f)Nr\   <=)rn   ro   r&   r   r   r   rQ  rR   r   r   r   r   rg   r   r   r6   r   r  rh   r   )ru   rX  strictr    r!   r&   r^  cmp_opres
if_smaller	if_largerr   rg   r   rb  s                  r'   issubsetSetInstance.issubset  sJ   ----,,D''1A1AB__!!&,,8J8JK(*g//5  %%'4 JJE,44UYY

KHE e)<=g&7&7= > (  ||C    >= ('  sm   G!F<
GGAF0,1F	F0%G-G
F	G
F-)F00
F>:G
G	G
G c                   ^^	 U R                   nU R                  mU R                  nUR                  n[        R                  " T[        R
                  5      m	UU	4S jnTR                  TR                  SUR                  UR                  5      5       u  pgU   U" XC5        S S S 5        U   U" X45        S S S 5        S S S 5        TR                  T	5      $ ! , (       d  f       N:= f! , (       d  f       N8= f! , (       d  f       NA= f)Nc                 x  > U R                  5        nUR                  nUR                  UR                  UR                  5      u  pETR                  U5         TR                  [        R                  T5        UR                  5         S S S 5        S S S 5        g ! , (       d  f       N= f! , (       d  f       g = fry   )
r   rg   r   r   r6   r   r   r   r   rh   )smallerlargerr   rg   r   rb  r!   rq  s         r'   check%SetInstance.isdisjoint.<locals>.check  s|    !!#t

!>>%))UZZ@__U+MM'"3"3S9MMO , $# ,+ $#s$   AB+1B	B+
B(	$B++
B9>)
rn   ro   r&   r   r   r   rQ  rR   r   r   )
ru   rX  r    r&   r^  rz  rs  	otherwiser!   rq  s
           @@r'   
isdisjointSetInstance.isdisjoint  s    ----,,''1A1AB	$ __!!#w||]5G5GH')m-  g-  ||C     s<   C9	C#
C9-	C(6C9
C%	!C9(
C6	2C99
Dc           	         U R                   nU R                  nU R                  nUR                  n[        R                  " U[        R
                  5      nUR                  UR                  SUR                  UR                  5      5       u  pxU   UR                  5        n	U	R                  n
UR                  U
R                  U
R                  5      u  pUR                  UR                  U5      5         UR!                  [        R"                  U5        U	R%                  5         S S S 5        S S S 5        S S S 5        U   UR!                  [        R"                  U5        S S S 5        S S S 5        UR'                  U5      $ ! , (       d  f       Nb= f! , (       d  f       Nk= f! , (       d  f       Nt= f! , (       d  f       NZ= f! , (       d  f       Nc= f)NrP   )rn   ro   r&   r   r   r   rQ  rR   r   r   rg   r   r   r6   r   r  r   r   rh   r   )ru   rX  r    r!   r&   r^  rq  if_same_sizer}  r   rg   r   rb  s                r'   equalsSetInstance.equals  sC   ----,,''1A1AB__!!$m6H6HI*,%%'4 JJE,44UYY

KHE e)<=g&7&7= > (  g//5  ||C   >= ('   sm   GF&"AF71F	(F0F&8
G!F7#G
FF
F#F&&
F4	0G7
G	G
GNc                 4   UR                  [        R                  5      nUc  [        R                  " U[
        5      nO=[        U[        5      (       a  [        R                  " XT5      nU R                  XU5      nU " XUS5      nUR                  U5      nX4$ )z
Allocate a SetInstance with its storage.
Return a (ok, instance) tuple where *ok* is a LLVM boolean and
*instance* is a SetInstance object (the object's contents are
only valid when *ok* is true).
N)
r   r   r   r   r:   rJ  r_   intrV  rW  )	clsr    r!   r"   nitemsr   r]  ru   r\  s	            r'   allocate_exSetInstance.allocate_ex  s     ''

3>{{673H&#&&V4,,WvFH7Xt4##H-xr)   c                     U R                  XX45      u  pVUR                  UR                  U5      SS9   UR                  R	                  U[
        S5        SSS5        U$ ! , (       d  f       U$ = f)z
Allocate a SetInstance with its storage.  Same as allocate_ex(),
but return an initialized *instance*.  If allocation failed,
control is transferred to the caller using the target's current
call convention.
Fr  )zcannot allocate setN)r  r   r  rS  rT  rU  )r  r    r!   r"   r  r\  ru   s          r'   allocateSetInstance.allocate  sg     ??7XF__W\\"-e_<--g{.FH =  =< s   "A  
A/c                     U " XUS5      nXER                   l        UR                  [        R                  5      UR                   l        UR                  R                  X#UR                  5        U$ )z
Allocate a new set instance pointing to an existing payload
(a meminfo pointer).
Note the parent field has to be filled by the caller.
N)	r   r   get_constant_nullr   pyobjectr  r   increfr?   )r  r    r!   r"   r   ru   s         r'   from_meminfoSetInstance.from_meminfo  sT     7Xt4#		"44U^^D		7djj9r)   c                    UR                   n[        R                  " US5      n[        R                  " U[        5      nUR	                  X55      n[
        R                  " X&5      nUR                  S5      n	UR                  S5      n
UR                  U	5        UR                  U	5         UR                  U5      nUR                  SX5      nUR                  USS9   UR                  U
5        SSS5        UR	                  X5      nUR                  X5        UR                  U	5        SSS5        UR                  U
5        UR                  U5      $ ! , (       d  f       Nk= f! , (       d  f       NA= f)zD
Choose a suitable number of entries for the given number of items.
r   calcsize.bodycalcsize.end>=Fr  N)r;   r   r:   rJ  shlr   r   r   r   r   r   rR   r   r   r   )r  r    r!   r  r   r   rL  min_entriessize_pr   r   r   is_large_enough	next_sizes                 r'   rV  SetInstance.choose_alloc_size$  s&   
 kk&!$++fg. kk&.**7<,,_=++N;w(<<'D%33D$LO?v& @D.IMM),NN7# ) 	'||F## @? )(s$   *4E&E0;E&
E#	E&&
E4c           	         U R                   nU R                  nUR                  n[        R                  " US5      n[        R                  " US5      nU R
                  nUR                  X5      nUR                  UR                  U5      n	UR                  SX5      n
UR                  U
SS9   [        R                  " X95      nUR                  S5      nUR                  S5      nUR                  U5        UR                  U5         UR!                  U5      nUR                  X5      nUR#                  X5        UR                  SX5      nUR%                  XU5        SSS5        UR'                  U5        UR!                  U5      n[(        (       a  UR+                  US	XX5        U R-                  X~S
5        SSS5        g! , (       d  f       Nj= f! , (       d  f       g= f)z[
When adding to the set, ensure it is properly sized for the given
number of used entries.
r      r  Fr  r  r  NzKupsize to %zd items: current size = %zd, min entries = %zd, new size = %zd
zcannot grow set)rn   ro   r;   r   r:   r&   r  r   r{   rR   r   r   r   r   r   r   r   r   r   r   DEBUG_ALLOCSprintf_resize)ru   r  r    r!   r   r   twor&   r  r   need_resize
new_size_pr   r   new_sizeis_too_smalls                   r'   r  SetInstance.upsizeC  s   
 ----kk&!$kk&!$,, kk&.{{7<<-++D+D__[_7 227AJ00AG//?FNN7###G,"<<
3";;x5h3&44T;Qv> - ##F+||J/H|w E%[D LL,=>3 87 -, 87s'   .AG	AG!AG
G	G
G$c           	      *   U R                   nU R                  nUR                  n[        R                  " US5      n[        R                  " US5      n[        R                  " U[
        5      nU R                  nUR                  X5      n	UR                  UR                  SX5      X5      n	UR                  X5      n
UR                  UR                  U5      nUR                  UR                  SX5      UR                  SX{5      5      nUR                  USS9   [        R                  " X;5      nUR!                  S5      nUR!                  S	5      nUR#                  U5        UR%                  U5         UR'                  U5      nUR)                  UU5      nUR                  S
U	U5      nUR                  U5         UR#                  U5        SSS5        UR+                  UU5        UR#                  U5        SSS5        UR-                  U5        UR'                  U5      n[.        (       a  UR1                  USXU	U5        U R3                  UUS5        SSS5        g! , (       d  f       N= f! , (       d  f       N}= f! , (       d  f       g= f)z_
When removing from the set, ensure it is properly sized for the given
number of used entries.
r   r  r  rn  r\   Fr  r  r  r|  NzMdownsize to %zd items: current size = %zd, min entries = %zd, new size = %zd
zcannot shrink set)rn   ro   r;   r   r:   rJ  r&   r  r=   rR   r   r{   r   r   r   r   r   r   r   r   r   r   r   r  r  r  )ru   r  r    r!   r   r   r  rL  r&   r  max_sizer   r  r  r   r   r  r  s                     r'   r#  SetInstance.downsizeq  s   
 ----kk&!$kk&!$++fg.,, kk&.nnW%:%:4%V%0; ;;{0{{7<<-ll!!$7!!#w57 __[_7 227AJ00AG//?FNN7###G,"<<
3"<<#6&44S+xP__\2NN6* 3h
3w' - ##F+ ||J/H |w E%[(D LL(,?@A 87 32 -, 87s?   AJ7AI3?I"+I3<AJ"
I0,I33
J	=J
Jc           	         U R                   nU R                  nUnU R                  USS9nUR                  UR	                  U5      SS9   UR
                  R                  U[        U45        SSS5        U R                  nUR                  5        nUR                  n	U R                  XR                  U	R                  SSS9  SSS5        U R                  UR                  5        g! , (       d  f       N= f! , (       d  f       N;= f)z_
Resize the payload to the given number of entries.

CAUTION: *nentries* must be a power of 2!
TreallocFr  N)r  r  )rn   ro   rW  r   r  rS  rT  rU  r&   r   rg   r  r   r6   _free_payloadr#   )
ru   r&   r]  errmsgr    r!   old_payloadr\  r   rg   s
             r'   r  SetInstance._resize  s     ---- ##Hd#;__W\\"-e_<--g{/5i9 = ,,!!#tJJEMM'99ejj$)U  < $
 	;??+ =< $#s   
#C(3C9(
C69
Dc                    U R                   nU R                  nU R                  R                  5        nUR                  nU R                  UR                  5        SSS5        U R                  U R                  R                  5        U R                  USS9nUR                  UR                  U5      SS9   UR                  R                  U[        S5        SSS5        g! , (       d  f       N= f! , (       d  f       g= f)z{
Replace the payload with a new empty payload with the given number
of entries.

CAUTION: *nentries* must be a power of 2!
NTr  Fr  )zcannot reallocate set)rn   ro   r&   r   rg   r!  r   r  r#   rW  r   r  rS  rT  rU  )ru   r]  r    r!   r   rg   r\  s          r'   rK  SetInstance._replace_payload  s     ---- \\""$JJEeii( %
 	4<<++,##Hd#;__W\\"-e_<--g{.HJ =< %$ =<s   (C"7"C3"
C03
Dc           
      z   U R                   nU R                  n[        R                  " U[        R                  5      nUR                  [        R                  5      n[        R                  " US5      n[        R                  " US5      nUR                  [        R                  " U R                  5      5      n	UR                  U	5      n
U R                  nX-  n
[        R                  " XA[        R                  " Xk5      [        R                  " Xj5      5      u  pUR!                  USS9   UR#                  [        R$                  U5        SSS5        UR!                  UR'                  U5      SS9   U(       aH  U R(                  R*                  nUR,                  R/                  UUUS9n[        R0                  " XO5      nOkU R3                  X4R4                  5      nUR,                  R7                  XLUR9                  U[        R:                  5      5      n[        R0                  " XN5      nUR=                  USS9 u  nnU   UR#                  [        R$                  U5        SSS5        U   U(       d>  XR(                  l        UR?                  [        R@                  5      U R(                  l!        U RD                  n[        RF                  " UURH                  US5        UUl%        UUl&        UUl'        URQ                  X5      nUUl)        [T        (       a  URW                  US	UURH                  U5        SSS5        SSS5        SSS5        UR'                  U5      $ ! , (       d  f       GN= f! , (       d  f       GN= f! , (       d  f       NS= f! , (       d  f       N\= f! , (       d  f       Ne= f)
z
Allocate and initialize payload for the given number of entries.
If *realloc* is True, the existing meminfo is reused.

CAUTION: *nentries* must be a power of 2!
r   r   Fr  NT)r      .allocated %zd bytes for set at %p: mask = %zd
),rn   ro   r   r   r   r   r   r   r   r:   r   r   rp   r,   r   muladd_with_overflowr   r   r   r   r   r   r   meminfo_varsize_alloc_uncheckedis_null	_imp_dtormodule"meminfo_new_varsize_dtor_uncheckedr   	voidptr_trQ  r  r  r  r&   memsetr#   r   r   r   r"  r{   r  r  )ru   r]  r  r    r!   r\  r   r   r   r$   payload_size
entry_size	allocsizeovfr   r#   alloc_okdtorif_errorif_okr&   new_masks                         r'   rW  SetInstance._allocate_payload  s    ----&&w0@0@A''

3{{61%kk&!$,,U-=-=dhh-GH--l;__
" !55g68kk&6U68kk&6WY	 __S_/MM'++R0 0 __W\\"-d_;))++kkAA'BI=F B H #??78 ~~g~~>!++HHg>O>O(PR"??7<(- ! /2C8UMM'"3"3R8 ",3		)+2+D+DU^^+T		("llGNN7GKKDI#'GL#'GL%)GN&{{89H#+GL#|w'X'0'++xI 	/ <H ||BO 0/& XU	/ / <;sb   -!M&5CN, N!M8'
N1CN
=NN,&
M58
NN

NN
N)	%N,,
N:c                 z    U R                   R                  R                  U R                  U R                  U5        g)z)
Free an allocated old payload at *ptr*.
N)rn   r   meminfo_varsize_freero   r   )ru   r#   s     r'   r  SetInstance._free_payload"  s(     	..t}}dllCPr)   c           
         U R                   nU R                  n[        R                  " U[        R                  5      nUR                  [        R                  5      n[        R                  " US5      n[        R                  " US5      nUR                  [        R                  " U R                  5      5      nUR                  U5      n	U R                  n
X-  n	UR                  nUR!                  X{5      nUR!                  [        R                  " XY5      UR#                  [        R                  " XZ5      U5      5      nUR%                  UR'                  U5      SS9   U R)                  X#R*                  5      nUR,                  R/                  X=UR1                  U[        R2                  5      5      n[        R4                  " X?5      nUR7                  USS9 u  nnU   UR9                  [        R:                  U5        SSS5        U   XR<                  l        U R@                  nURB                  Ul!        URD                  Ul"        UUl#        UUl        [        RH                  " UURJ                  URJ                  UU
5        URM                  5        nU RO                  URP                  RR                  5        SSS5        [T        (       a  URW                  USUURX                  U5        SSS5        SSS5        SSS5        UR'                  U5      $ ! , (       d  f       GN= f! , (       d  f       Ns= f! , (       d  f       NR= f! , (       d  f       N[= f! , (       d  f       Nd= f)z'
Raw-copy the given payload into self.
r   r   Tr  FNr  )-rn   ro   r   r   r   r   r   r   r   r:   r   r   rp   r,   r   r{   r   r   r   r   r  r  r   r  r   r  r  rQ  r   r   r   r   r&   r   r   r   
raw_memcpyrm   r   r  rg   r   r  r  r#   )ru   src_payloadr    r!   r\  r   r   r   r$   r  r  r{   r]  r  r  r   r  r  r  r&   r   s                        r'   rR  SetInstance._copy_payload(  s    ----&&w0@0@A''

3{{61%kk&!$,,U-=-=dhh-GH--l;__
";;s)
 KKF A 'BKK,K,4!67	 __W\\"-d_;>>'>>:DkkDDGOOD':K:K$LNGw8H%8<MXuMM'"3"3R8 (/II%"llG#.#3#3GL#.#3#3GL%)GN#'GL
 &&w'2':':H'13
 %--/4))$**..9 0 $|w'X'0'++tE)  9 <D ||B5 X$ 0/! U 98 <;sn   !A<MM#!L
MBL=&L,	?2L=1M9M
L)$M,
L:6L==
MM
M	M
M-c                    [         R                  nUR                  [        R                  5      n[
        R                  " [
        R                  " 5       X4U/5      nSU R                  R                   3n[         R                  " X%US9nUR                  (       a  SUl        [
        R                  " UR                  5       5      n[        XU R                  UR                   S   5      n	U	R#                  5        n
U
R$                  nUR&                  R)                  XR                  R                  UR*                  5        SSS5        UR-                  5         U$ ! , (       d  f       N = f)z Define the dtor for set
        z
.dtor.set.)namelinkonce_odrr   N)r   r  r   r   size_tr   FunctionTypeVoidTyperp   ra   get_or_insert_functionis_declarationlinkage	IRBuilderr   rj   rK   r   rg   r   decrefr   ret_void)ru   r    r  	llvoidptrllsize_trA   fnamerC   r!   r&   r   rg   s               r'   r  SetInstance._imp_dtori  s    %%	((6KKM),

 TXX^^,-++FuE'BJll2#8#8#:;G!'DHHbggajIG!!#t

""7HHNNEIIF $ 	 $#s   :AE
E)c                     U R                   R                  R                  U R                  U R                  R
                  U5        g)z Incref an element value
        N)rn   r   r  ro   rp   ra   r  s     r'   r  SetInstance.incref_value  ,     	  Dr)   c                     U R                   R                  R                  U R                  U R                  R
                  U5        g)z Decref an element value
        N)rn   r   r  ro   rp   ra   r  s     r'   r!  SetInstance.decref_value  r  r)   )ro   rn   r   r   rp   )T)TTr   ry   )0r   r   r   r   rv   r   ra   r&   r?   r   r  r   r  r  r  r  r%  r(  r   r/  r-  r?  rB  rG  rM  r_  rc  rf  rk  rt  r~  r  classmethodr  r  r  rV  r  r#  r  rK  rW  r  rR  r  r  r!  r   r   r)   r'   r   r   t  sv   D   	< 	< % % ! !     ]]! !!P*!8
3	3$!%N$$$ )0!4!>!0  (     $ $<,?\:Ax,6J.A FQ? B8E
Er)   r   c                       \ rS rSrS r\S 5       r\S 5       r\S 5       r	\S 5       r
\
R                  S 5       r
S rS	rg
)SetIterInstancei  c                     Xl         X l        X0l        UR                  X#U5      U l        U R                   R
                  R                  X R                  5      n[        XU R                  R                  U5      U l
        g ry   )rn   ro   rp   r   _iterr   r   r   rj   	containerrq   )ru   r    r!   	iter_typeiter_valr#   s         r'   rv   SetIterInstance.__init__  s]    ((XF
mm,,WllC#Gdhh6H6H#Nr)   c                    [        XUR                  U5      nU " XUS 5      nUR                  [        R                  S5      n[
        R                  " X'5      UR                  l        UR                  UR                  l	        U$ rJ   )
r   r  get_constantr   r   r   r   r  rf   r   )r  r    r!   r  r   set_instru   rf   s           r'   from_setSetIterInstance.from_set  sh    w1D1DgN7Y5$$UZZ3"44WD

%--

r)   c                 6    U R                   R                  5       $ ry   )r  r   r|   s    r'   r?   SetIterInstance.value  s    zz##%%r)   c                 .    U R                   R                  $ ry   )r  r   r|   s    r'   r   SetIterInstance.meminfo  s    zz!!!r)   c                 `    U R                   R                  U R                  R                  5      $ ry   )ro   r   r  rf   r|   s    r'   rf   SetIterInstance.index  s!    }}!!$**"2"233r)   c                 b    U R                   R                  XR                  R                  5        g ry   )ro   r   r  rf   r   s     r'   rf   r    s    E::#3#34r)   c                    U R                   nU R                  n[        R                  " UR                  S5      nUR                  5         UR                  US9 nUR                  nUR                  5         UR                  UR                  5        U R                  R                  UR                   U5      U l         UR                  5         S S S 5        g ! , (       d  f       g = f)Nr   r   )rf   rq   r   r:   r;   set_exhaustedr   rg   	set_validyield_r   ro   r   rh   )ru   resultrf   r&   r   r   rg   s          r'   iternextSetIterInstance.iternext  s    

--kk%**a(E*dJJEMM%))$**4::s;DJMMO +**s   A3C
C#)ro   rn   r  rq   rp   rf   N)r   r   r   r   rv   r  r  r   r?   r   rf   r   r  r   r   r)   r'   r  r    su    O   & & " " 4 4 \\5 5r)   r  c           	         [        U5      n[        R                  XX$5      nUS:  a  [        R                  " X5      n[        R
                  " X5      nU R                  [        R                  U5      n[        R                  " X5       n	UR                  [        R                  " XSU	R                  5      5      n
UR                  U
5        SSS5        [        XX%R                  5      $ ! , (       d  f       N$= f)z<
Build a set of the given type, containing the given items.
r   N)lenr   r  r   
pack_arrayr   r  r   r   r   r   r   rf   r   r   r?   )r    r!   r"   itemsr  instarray	array_ptrcountr   r   s              r'   	build_setr	    s     ZF(CDz ""72--g=	$$UZZ8w.$<<G4:: NODHHTN / Gh

CC	 /.s   
AC++
C9c                 r    UR                   n[        R                  XU5      n[        XXER                  5      $ ry   )return_typer   r  r   r?   )r    r!   rB   rK   r"   r  s         r'   set_empty_constructorr    s.    H(;DGh

CCr)   c                    UR                   nUR                  u  nUu  n[        XXV5      n[        R	                  XXG5      n[        XXV5       n	UR                  U	R                  5        U R                  R                  XR                  U	R                  5        S S S 5        [        XXHR                  5      $ ! , (       d  f       N$= fry   )r  rK   r   r   r  r   r   r?   r   r  ra   r   )
r    r!   rB   rK   r"   
items_typer  nr  r   s
             r'   set_constructorr    s    H((KJFE 	:5A(>D	'J	6$7NNDJJ? 
7 Gh

CC	 
7	6s   AB77
Cc                 \    [        XUR                  S   US   5      nUR                  5       $ rJ   )r   rK   r  r    r!   rB   rK   r  s        r'   set_lenr    s(    w!d1g>D==?r)   c                 d    [        XUR                  S   US   5      nUR                  US   5      $ Nr   r   )r   rK   r?  r  s        r'   in_setr    s/    w!d1g>D==a!!r)   getiterc                     [         R                  XUR                  US   5      n[        XUR                  UR                  5      $ rJ   )r  r  r  r   r?   r  s        r'   getiter_setr    s5    ##GcootAwODWs

KKr)   r  c                 `    [        XUR                  S   US   5      nUR                  U5        g rJ   )r  rK   r  )r    r!   rB   rK   r  r  s         r'   iternext_listiterr  	  s*     7SXXa[$q'BDMM&r)   zset.addc                     [        XUR                  S   US   5      nUS   nUR                  U5        U R                  5       $ r  )r   rK   r   get_dummy_valuer    r!   rB   rK   r  r   s         r'   set_addr    s?    w!d1g>D7DHHTN""$$r)   c                 :    [         R                  " X5      nS nX44$ )Nc                     [        XUR                  S   US   5      nUS   nUR                  U5        U R                  5       $ r  )r   rK   rB  r  r  s         r'   set_discard!_set_discard.<locals>.set_discard"  s@    7SXXa[$q'BAwT&&((r)   r   none)r@   rb   r   rB   r"  s        r'   _set_discardr&    s     
**Q
C) r)   rB  c                     S $ )Nc                     [        X5      $ ry   )r&  rb   r   s     r'   <lambda> ol_set_discard.<locals>.<lambda>.  s	    <0r)   r   r)  s     r'   ol_set_discardr,  ,  s    00r)   c                 0    UR                  U5      nS nX#4$ )Nc                 d   [        XUR                  S   US   5      nUR                  R                  nUR	                  [
        R                  " X5      SS9   U R                  R                  U[        S5        S S S 5        UR                  5       $ ! , (       d  f       UR                  5       $ = f)Nr   Fr  )zset.pop(): empty set)r   rK   r&   r   r   r   r  rS  rT  KeyErrorrG  )r    r!   rB   rK   r  r   s         r'   set_pop_set_pop.<locals>.set_pop5  s    7SXXa[$q'B||  __W__W;E_J--gx,EG K xxz	 KJ xxzs   "B
B/ra   )r@   rb   rB   r0  s       r'   _set_popr3  1  s    
''!*C <r)   rG  c                     S $ )Nc                     [        U 5      $ ry   )r3  rb   s    r'   r*  ol_set_pop.<locals>.<lambda>C  s    Xa[r)   r   r6  s    r'   
ol_set_popr8  A  s      r)   c                 :    [         R                  " X5      nS nX44$ )Nc                 Z   [        XUR                  S   US   5      nUS   nUR                  U5      nUR                  UR	                  U5      SS9   U R
                  R                  U[        S5        S S S 5        U R                  5       $ ! , (       d  f       U R                  5       $ = f)Nr   r   Fr  )zset.remove(): key not in set)	r   rK   rB  r   r  rS  rT  r/  r  )r    r!   rB   rK   r  r   r   s          r'   
set_remove_set_remove.<locals>.set_removeJ  s    7SXXa[$q'BAwT"__W\\%0_?--gx,MO @ &&((	 @? &&((s   "B
B*r$  )r@   rb   r   rB   r;  s        r'   _set_remover=  F  s    
**Q
C) ?r)   removec                 *    U R                   U:X  a  S $ g )Nc                     [        X5      $ ry   )r=  r)  s     r'   r*  ol_set_remove.<locals>.<lambda>Z  s	    {13r)   r2  r)  s     r'   ol_set_removerB  W  s    ww$33 r)   c                 :    [         R                  " U5      nS nX#4$ )Nc                 |    [        XUR                  S   US   5      nUR                  5         U R                  5       $ rJ   )r   rK   rM  r  r  s        r'   	set_clear_set_clear.<locals>.set_clearc  s4    7SXXa[$q'B

&&((r)   r$  )r@   rb   rB   rE  s       r'   
_set_clearrG  _  s    
**Q-C)
 >r)   rM  c                     S $ )Nc                     [        U 5      $ ry   )rG  r6  s    r'   r*  ol_set_clear.<locals>.<lambda>m  s    Z]r)   r   r6  s    r'   ol_set_clearrK  k  s    ""r)   c                     U" U5      nS nX#4$ )Nc                     [        XUR                  S   US   5      nUR                  5       n[        XUR                  UR
                  5      $ rJ   )r   rK   r_  r   r  r?   r    r!   rB   rK   r  rX  s         r'   set_copy_set_copy.<locals>.set_copyt  s>    7SXXa[$q'B		#//5;;OOr)   r   )r@   rb   rB   rO  s       r'   	_set_copyrQ  p  s    
A$CP
 =r)   r_  c                     S $ )Nc                     [        U 5      $ ry   )rQ  r6  s    r'   r*  ol_set_copy.<locals>.<lambda>~  s    Yq\r)   r   r6  s    r'   ol_set_copyrU  |  s    !!r)   c                     [        XUR                  S   US   5      n[        XUR                  S   US   5      nUR                  U5        U R                  5       $ r  )r   rK   rf  r  rN  s         r'   set_difference_updaterW    sQ    w!d1g>D#((1+tAw?EOOE""$$r)   c                 >    [         R                  " X5      nU[        4$ ry   )r   r%  rW  r@   abrB   s       r'   _set_difference_updater\    s    
**Q
C%%%r)   difference_updatec                     [        X5        S $ )Nc                     [        X5      $ ry   )r\  rZ  r[  s     r'   r*  ,set_difference_update_impl.<locals>.<lambda>  s
    .q4r)   rc   r`  s     r'   set_difference_update_implrc    s    !44r)   c                     [        XUR                  S   US   5      n[        XUR                  S   US   5      nUR                  U5        U R                  5       $ r  )r   rK   rc  r  rN  s         r'   set_intersection_updatere    sQ    w!d1g>D#((1+tAw?ENN5""$$r)   c                 >    [         R                  " X5      nU[        4$ ry   )r   r%  re  rY  s       r'   _set_intersection_updaterg    s    
**Q
C'''r)   intersection_updatec                     [        X5        S $ )Nc                     [        X5      $ ry   )rg  r`  s     r'   r*  .set_intersection_update_impl.<locals>.<lambda>  s
    06r)   rb  r`  s     r'   set_intersection_update_implrl    s    !66r)   c                     [        XUR                  S   US   5      n[        XUR                  S   US   5      nUR                  U5        U R                  5       $ r  )r   rK   rk  r  rN  s         r'   set_symmetric_difference_updatern    sS    w!d1g>D#((1+tAw?Ee$""$$r)   c                 >    [         R                  " X5      nU[        4$ ry   )r   r%  rn  rY  s       r'    _set_symmetric_difference_updaterp    s    
**Q
C///r)   symmetric_difference_updatec                     [        X5        S $ )Nc                     [        X5      $ ry   )rp  r`  s     r'   r*  6set_symmetric_difference_update_impl.<locals>.<lambda>  s
    8>r)   rb  r`  s     r'   $set_symmetric_difference_update_implru    s    !>>r)   z
set.updatec                    [        XUR                  S   US   5      nUR                  S   nUS   n[        XXV5      nUb7  UR                  UR                  R
                  U5      nUR                  U5        [        XXV5       n	U R                  XR                  UR                  UR                  5      n
UR                  U
5        U R                  R                  XR                  U	R                  5        S S S 5        Ub%  UR                  UR                  R
                  5        U R                  5       $ ! , (       d  f       NF= fr  )r   rK   r   r   r&   r   r  r   castr?   ra   r   r  r#  r  )r    r!   rB   rK   r  r  r  r  r  r   casteds              r'   
set_updatery    s    w!d1g>D!JGE 	:5A};;t||00!4H	'J	6$ gzz:3C3CTZZP
 	7$4$4djjA 
7 	}dll''(""$$ 
7	6s   A3D77
Ec                 N   ^^ [         U4S j5       m[        U 5      U4S j5       ng )Nc                 &   > U" X5      nU4S jnX44$ )Nc                    > UR                   UR                  S   :X  d   eT" XX#5        [        XUR                  S   US   5      $ rJ   )r  rK   r   )r    r!   rB   rK   rL   s       r'   codegen>gen_operator_impl.<locals>._set_operator_intr.<locals>.codegen  sB    ??chhqk1113-$Wsxx{DGLLr)   r   )r@   rZ  r[  rB   r}  rL   s        r'   _set_operator_intr-gen_operator_impl.<locals>._set_operator_intr  s    g	M |r)   c                 &   > [        X5        U4S j$ )Nc                    > T" X5      $ ry   r   rZ  r[  r  s     r'   r*  =gen_operator_impl.<locals>._ol_set_operator.<locals>.<lambda>  s    .q4r)   rb  r  s     r'   _ol_set_operator+gen_operator_impl.<locals>._ol_set_operator  s    a44r)   )r   r   )oprL   r  r  s    ` @r'   gen_operator_implr    s-      b\5 5r)   rf  c                 "    [        X5        S nU$ )Nc                 H    U R                  5       nUR                  U5        U$ ry   )r_  r]  rZ  r[  rb   s      r'   difference_impl,impl_set_difference.<locals>.difference_impl  s     FFH	Ar)   rb  )rZ  r[  r  s      r'   impl_set_differencer    s     !
 r)   intersectionc                 "    [        X5        S nU$ )Nc                     [        U 5      [        U5      :  a#  U R                  5       nUR                  U5        U$ UR                  5       nUR                  U 5        U$ ry   )r  r_  rh  r  s      r'   intersection_impl+set_intersection.<locals>.intersection_impl  sM    q6CF?A!!!$HA!!!$Hr)   rb  )rZ  r[  r  s      r'   set_intersectionr    s     ! r)   rk  c                 "    [        X5        S nU$ )Nc                     [        U 5      [        U5      :  a#  U R                  5       nUR                  U5        U$ UR                  5       nUR                  U 5        U$ ry   )r  r_  rq  r  s      r'   symmetric_difference_impl;set_symmetric_difference.<locals>.symmetric_difference_impl  sM    q6CF?A))!,HA))!,Hr)   rb  )rZ  r[  r  s      r'   set_symmetric_differencer    s     ! %$r)   unionc                 "    [        X5        S nU$ )Nc                     [        U 5      [        U5      :  a#  U R                  5       nUR                  U5        U$ UR                  5       nUR                  U 5        U$ ry   )r  r_  updater  s      r'   
union_implset_union.<locals>.union_impl(  sG    q6CF?AHHQKHAHHQKHr)   rb  )rZ  r[  r  s      r'   	set_unionr  #  s     ! r)   c                 :    [         R                  " X5      nS nX44$ )Nc                     [        XUR                  S   US   5      n[        XUR                  S   US   5      nUR                  U5      $ r  )r   rK   r~  rN  s         r'   r}   _set_isdisjoint.<locals>.codegen;  sE    7SXXa[$q'BGchhqk47Cu%%r)   r   booleanr@   rZ  r[  rB   r}  s        r'   _set_isdisjointr  7  s    
--
C& <r)   r~  c                     [        X5        S $ )Nc                     [        X5      $ ry   )r  r`  s     r'   r*   set_isdisjoint.<locals>.<lambda>H  s	    -r)   rb  r`  s     r'   set_isdisjointr  D  s    !--r)   c                 :    [         R                  " X5      nS nX44$ )Nc                     [        XUR                  S   US   5      n[        XUR                  S   US   5      nUR                  U5      $ r  r   rK   rt  rN  s         r'   r}  _set_issubset.<locals>.codegenO  sE    7SXXa[$q'BGchhqk47C}}U##r)   r  r  s        r'   _set_issubsetr  K  s    
--
C$ <r)   rt  c                     [        X5        S $ )Nc                     [        X5      $ ry   )r  r`  s     r'   r*  set_issubset.<locals>.<lambda>\  s	    a+r)   rb  r`  s     r'   set_issubsetr  W  s     !++r)   
issupersetc                 "    [        X5        S nU$ )Nc                 $    UR                  U 5      $ ry   )rt  r`  s     r'   superset_impl%set_issuperset.<locals>.superset_impld  s    zz!}r)   rb  )rZ  r[  r  s      r'   set_issupersetr  _  s     ! r)   c                 :    [         R                  " X5      nS nX44$ )Nc                     [        XUR                  S   US   5      n[        XUR                  S   US   5      nUR                  U5      $ r  )r   rK   r  rN  s         r'   r}  _set_eq.<locals>.codegenm  sE    7SXXa[$q'BGchhqk47C{{5!!r)   r  r  s        r'   _set_eqr  i  s    
--
C" <r)   c                     [        X5        S $ )Nc                     [        X5      $ ry   )r  r`  s     r'   r*  set_eq.<locals>.<lambda>y      r)   rb  r`  s     r'   set_eqr  u      !%%r)   c                 "    [        X5        S nU$ )Nc                     X:X  + $ ry   r   r`  s     r'   ne_implset_ne.<locals>.ne_impl  s
    zr)   rb  )rZ  r[  r  s      r'   set_ner  {  s    ! Nr)   c                 :    [         R                  " X5      nS nX44$ )Nc                     [        XUR                  S   US   5      n[        XUR                  S   US   5      nUR                  USS9$ )Nr   r   T)ro  r  rN  s         r'   r}  _set_lt.<locals>.codegen  sI    7SXXa[$q'BGchhqk47C}}U4}00r)   r  r  s        r'   _set_ltr    s    
--
C1 <r)   c                     [        X5        S $ )Nc                     [        X5      $ ry   )r  r`  s     r'   r*  set_lt.<locals>.<lambda>  r  r)   rb  r`  s     r'   set_ltr    r  r)   c                 "    [        X5        S nU$ )Nc                 
    X:  $ ry   r   r`  s     r'   gt_implset_gt.<locals>.gt_impl  s	    ur)   rb  )rZ  r[  r  s      r'   set_gtr    s    ! Nr)   c                 B   [        XUR                  S   US   5      n[        XUR                  S   US   5      nUR                  UR                  [        R
                  5      nUR                  UR                  [        R
                  5      nUR                  SXg5      $ )Nr   r   rP   )r   rK   ptrtointr   r   r   icmp_signed)r    r!   rB   rK   rZ  r[  mambs           r'   set_isr    s}    Gchhqk47;AGchhqk47;A			!))W^^	4B			!))W^^	4BtR,,r)   c                 >    UR                   UR                   :X  d   eU$ ry   r2  )r    r!   fromtytotyr  s        r'   
set_to_setr    s     <<4::%%%Jr)   )}__doc__collectionsr   mathr   	functoolsr   llvmliter   
numba.corer   r   r   numba.core.imputilsr   r	   r
   r   r   r   r   r   r   
numba.miscr   numba.cpythonr   numba.core.errorsr   r   numba.core.extendingr   r   r   r(   r.   rQ   rW   r<   rJ  r   r  rG   rN   rT   rZ   r9   rc   
namedtuplerd   objectrj   r   r  r	  setr  IterableTyper  r  r`   r  r?  Anyr  r  SetIterBORROWEDr  r  r&  r,  r3  r8  r=  rB  rG  rK  rQ  rU  rW  r\  rc  re  rg  rl  rn  rp  ru  ry  r  iandiorisubixorop_op_implr"  r  r   r  xorr  or_r  r  r  r  ler  ger  r  r   r  ner  r  ltr  gtr  is_r  r  r   r)   r'   <module>r     sc  
     %  - -A A A ! ! : E EH( 	
  .  132L 
 
 ,J
K| & | ~YE& YEx0f 0lD, sD D
 sE&&'D (D. sEII  x  %))UYY7" 8" y%))$L %L z5==)w  ! * y%))UYY/% 0% 
 
 I&1 '1   E"! #!    H%4 &4   G$# %#   F#" $"% & &
 /05 15
% ( (
 127 37
% 0 0
 9:? ;?
 |UYY(:(:;% <%:5" ]]+,\\:]])*]]34	LC c7# 
(,,L) *  
(--N+ ,  
(,,23% 4 % 
(,,G$ % $ 	 	 L). *. 	 	 
(++J', ( , 
(++L) *  	 	 
(++& &
 
(++  	 	 
(++& &
 
(++  x||UYY		2- 3- EIIuyy! "r)   