3 �Pf��@sLddlmZmZmZddlmZddlmZddlm Z Gdd�de �Z dS) �)�absolute_import�division�unicode_literals)� text_type)� bisect_left�)�Triec@sFeZdZdd�Zdd�Zdd�Zdd�Zd d �Zdd d �Zdd�Z d S)rcCsJtdd�|j�D��std��||_t|j��|_d|_dt|�f|_dS)Ncss|]}t|t�VqdS)N)� isinstancer)�.0�x�r �/usr/lib/python3.6/py.py� sz Trie.__init__..zAll keys must be strings�r) �all�keys� TypeError�_data�sorted�_keys� _cachestr�len� _cachepoints)�self�datar r r �__init__ s z Trie.__init__cCs ||jkS)N)r)r�keyr r r � __contains__szTrie.__contains__cCs t|j�S)N)rr)rr r r �__len__sz Trie.__len__cCs t|j�S)N)�iterr)rr r r �__iter__sz Trie.__iter__cCs |j|S)N)r)rrr r r � __getitem__szTrie.__getitem__NcCs�|dks|dks|j r"t|j�S|j|j�rN|j\}}t|j|||�}}nt|j|�}}t�}|t|j�krv|Sx,|j|j|�r�|j|j|�|d7}qxW||_||f|_|S)Nrr)r�set� startswithrrrr�add)r�prefix�lo�hi�start�irr r r rs     z Trie.keyscCsd||jkrdS|j|j�r6|j\}}t|j|||�}n t|j|�}|t|j�krTdS|j|j|�S)NTF)rr#rrrrr)rr%r&r'r)r r r �has_keys_with_prefix6s    zTrie.has_keys_with_prefix)N) �__name__� __module__� __qualname__rrrr r!rr*r r r r r s  rN) Z __future__rrrZpip._vendor.sixrZbisectrZ_baserZABCTrier r r r �s