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