
    GJj                         d Z ddlZddlmZ ddlmZ dZdZdZdZ	dZ
d	Zd
Zd Z G d de      Z G d de      Z G d de      Zy)z,
Testing C implementation of the numba sets
    N)TestCase)
_helperlib   c                     t        | t              r$|t        |       z
  dz  | j                         z   }|S | j	                  |d      }|S )N    big)
isinstancestrlenencodeto_bytes)keykey_size	key_bytess      b/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/numba/tests/test_setimpl.pyr   r      sJ    #sC(E1CJJL@	  LL51	    c                   "    e Zd ZdZd Zd Zd Zy)SetIterzAn iterator for the `Set`.
    c                 D   || _         | j                   j                  j                         }t        j                  |z  d      | _        t        j                  | j
                  t        j                        | _        | j                   j                  | j                         y )Nr   )
parenttcnumba_set_iter_sizeofctypesc_char_pit_state_bufcastc_void_pitset_iter)selfr   itsizes      r   __init__zSetIter.__init__   sg    557#__v5q9++d//ATWW%r   c                     | S N r%   s    r   __iter__zSetIter.__iter__&   s    r   c                 L    | j                   j                  | j                        S r)   )r   set_iter_nextr#   r+   s    r   __next__zSetIter.__next__)   s    {{((11r   N)__name__
__module____qualname____doc__r'   r,   r/   r*   r   r   r   r      s    &2r   r   c                   d    e Zd ZdZd Zd Zd Zd Zd Zd Z	d Z
d	 Zd
 Zd Zd Zd Zd Zd Zy)SetzPA wrapper around the C-API to provide a minimal set object for
    testing.
    c                 N    || _         || _        | j                  ||      | _        y)z
        Parameters
        ----------
        tc : TestCase instance
        key_size : int
            byte size for the items
        allocated : int
            number of items to allocate for
        N)r   r   set_newsetp)r%   r   r   	allocateds       r   r'   zSet.__init__1   s$      LL95	r   c                 "    | j                         S r)   )
set_lengthr+   s    r   __len__zSet.__len__A   s      r   c                 R    t        || j                        }| j                  |      S )N)r   )r   r   set_containsr%   r   r   s      r   __contains__zSet.__contains__D   s&    S$--0	  9 55r   c                     t        |       S r)   )r   r+   s    r   r,   zSet.__iter__H   s    t}r   c                 N    | j                   j                  | j                         y r)   )r   numba_set_freer8   r+   s    r   __del__zSet.__del__K   s    tyy)r   c                 R    t        || j                        }| j                  |       y r)   )r   r   set_addr?   s      r   addzSet.addN   s    S$--0	Yr   c                 R    t        || j                        }| j                  |       y r)   )r   r   set_discardr?   s      r   discardzSet.discardR   s     S$--0	#r   c                     t        j                         }| j                  j                  t        j                  |      ||      }| j                  j                  |t               |S r)   )r   r"   r   numba_set_newbyrefassertEqualOK)r%   r   r9   r8   statuss        r   r7   zSet.set_newX   sM     &&LL)
 	FB'r   c                 L    | j                   j                  | j                        S r)   )r   numba_set_lengthr8   r+   s    r   r;   zSet.set_length`   s    ww''		22r   c                     | j                   j                  | j                  |t        |            }| j                   j	                  |t
               y r)   )r   numba_set_addr8   hashrN   rO   )r%   r   rP   s      r   rF   zSet.set_addc   s6    &&tyy#tCyAFB'r   c                 j    t        |      }| j                  j                  | j                  ||      }|S r)   )rU   r   numba_set_containsr8   r%   r   hash_keyixs       r   r>   zSet.set_containsg   s1    	?WW''IIy(
 	r   c                 j    t        |      }| j                  j                  | j                  ||      }|S r)   )rU   r   numba_set_discardr8   rX   s       r   rI   zSet.set_discardn   s1    	?WW&&IIy(
 	r   c                 P    | j                   j                  || j                         y r)   )r   numba_set_iterr8   )r%   itptrs     r   r$   zSet.set_iteru   s    udii0r   c                    t        j                  d      }| j                  j                  |t        j                  |            }|t
        k(  rt        d      |t        k(  rt        | j                  j                  |d       t         j                  | j                  z  j                  |j                        }|j                  S )Nr   zset mutated)r   r"   r   numba_set_iter_nextrM   ERR_SET_MUTATED
ValueErrorERR_ITER_EXHAUSTEDStopIterationassertGreaterEqualc_charr   from_addressvalue)r%   r_   birP   items        r   r.   zSet.set_iter_nextx   s    __Q,,6<<#
 _$]++))GG&&vq1MMDMM1??ID::r   N)r0   r1   r2   r3   r'   r<   r@   r,   rD   rG   rJ   r7   r;   rF   r>   rI   r$   r.   r*   r   r   r5   r5   -   sM    6 !6* $3(1r   r5   c                   0    e Zd Zd Zd Zd Zd Zd Zd Zy)TestSetImplc                    t         j                  }t         j                  }t         j                  }dd} |dt         j                  t        j                  |      t         j                  t         j                  g      | _         |dt         j                        | _         |dt         j                  |g      | _         |dt         j                  |t         j                  |g      | _	         |dt         j                  |t         j                  |g      | _
         |dt         j                  |t         j                  |g      | _         |dt         j                        | _         |d	d
||g      | _         |dt         j                  |t        j                  t         j                        g      | _         |dd
|g      | _        y
)zEBind to the c_helper library and provide the ctypes wrapper.
        c                 `    t        j                  |g| } |t        j                  |          S r)   )r   	CFUNCTYPEr   	c_helpers)namerestypeargtypesprotos       r   wrapzTestSetImpl.setUp.<locals>.wrap   s-    $$W8x8E--d344r   r7   test_setr;   rF   r>   rI   set_iter_sizeofr$   Nr.   set_free)r*   )r   r"   	c_ssize_tc_intPOINTERrL   numba_test_setrR   r   rT   rW   r\   c_size_tr   r^   ra   rC   )r%   set_tyhash_ty
setiter_tyrv   s        r   setUpzTestSetImpl.setUp   s    ""__
	5
 "LL^^F#V%5%5v7G7GH
 #LL

 !%LLH!
 "LLV__g.
 #'LLV__g.#
 "&LLV__g."
 &*OO&
"
 #
 $(LLv/$
  #H
r   c                 P    | j                         }| j                  |t               y r)   )r}   rN   rO   )r%   rets     r   test_simple_c_testzTestSetImpl.test_simple_c_test   s     !!#b!r   c                 T    t        | dd      }| j                  t        |      d       y )N   r   )r5   rN   r   )r%   ss     r   test_init_lenzTestSetImpl.test_init_len   s%    aO 	Q#r   c                     dD ]^  }t        | dd      }|j                  |       | j                  t        |      d       |j	                  |      }| j                  |d       ` y )N   aabcr   r   T)r5   rG   rN   r   r@   r%   r   r   	has_entrys       r   test_add_checkzTestSetImpl.test_add_check   sX     #CD!QAEE#JSVQ's+IY- #r   c                     dD ]w  }t        | dd      }|j                  |       |j                  |      }| j                  |d       |j	                  |       |j                  |      }| j                  |d       y y )Nr   r   TF)r5   rG   r@   rN   rJ   r   s       r   test_remove_checkzTestSetImpl.test_remove_check   sm     #CD!QAEE#Js+IY-IIcNs+IY. #r   c                 @   t        | dd      }d}t        d|      D ]  }|j                  |         g }|D ]  }|j                  |        | j	                  t        |      t        |             t        d|      D ]  }| j                  t        | d      |       ! y )Nr   r   i  d   )r5   rangerG   appendrN   r   assertInr   )r%   r   nmaxikeysr   s         r   test_set_iterzTestSetImpl.test_set_iter   s    aO sD!AEEQCM " CKK  	QT+sD!AMM(aS1-t4 "r   N)	r0   r1   r2   r   r   r   r   r   r   r*   r   r   rm   rm      s"    K
Z"
$./ 5r   rm   )r3   r   numba.tests.supportr   numbar   ENTRY_PRESENTrO   ERR_KEY_NOT_FOUNDrb   rd   ERR_SET_EMPTYERR_CMP_FAILEDr   objectr   r5   rm   r*   r   r   <module>r      sj     (    2f 2"W& WtH5( H5r   