U ÀÒ.e¯ã@sâddlmZmZmZddlmZddlmZzddlm m Z Wn&e k rhddl m mZ YnXddddd d gZzed ƒZeeeƒs–ed ƒZWnd ZYnXdZGdd„deƒZdd„Zdd„Zdd „Zdd„ZdS)é)Úabsolute_importÚdivisionÚunicode_literals)Ú ModuleType)Ú text_typeNÚ default_etreeÚMethodDispatcherÚisSurrogatePairÚsurrogatePairToCodepointÚmoduleFactoryFactoryÚsupports_lone_surrogatesz"\uD800"z u"\uD800"FTc@s"eZdZdZddd„Zdd„ZdS) rapDict with 2 special properties: On initiation, keys that are lists, sets or tuples are converted to multiple keys so accessing any one of the items in the original list-like object returns the matching value md = MethodDispatcher({("foo", "bar"):"baz"}) md["foo"] == "baz" A default value which can be set through the default attribute. ©cCsbg}|D]B\}}t|ttttfƒr<|D]}| ||f¡q&q| ||f¡qt ||¡d|_dS©N) Ú isinstanceÚlistÚtupleÚ frozensetÚsetÚappendÚdictÚ__init__Údefault)ÚselfÚitemsZ _dictEntriesÚnameÚvalueÚitemr r ú?/usr/lib/python3.8/site-packages/pip/_vendor/html5lib/_utils.pyr1s  zMethodDispatcher.__init__cCst |||j¡Sr)rÚgetr)rÚkeyr r rÚ __getitem__@szMethodDispatcher.__getitem__N)r )Ú__name__Ú __module__Ú __qualname__Ú__doc__rr r r r rr$s cCsLt|ƒdkoJt|dƒdkoJt|dƒdkoJt|dƒdkoJt|dƒdkS)NéréØiÿÛééÜiÿß)ÚlenÚord)Údatar r rr Gs ÿÿþþcCs,dt|dƒddt|dƒd}|S)Nirr&ir'r()r*)r+Zchar_valr r rr Msÿcsi‰‡‡fdd„}|S)NcsÞttjtdƒƒrd|j}n d|j}t| ¡ƒ}zˆ|||WStk rØt|ƒ}ˆ|f|ž|Ž}|j |¡dˆkrˆiˆ|<dˆ|kr iˆ||<dˆ||krÀiˆ|||<|ˆ|||<|YSXdS)NÚz _%s_factorys _%s_factoryrÚargsÚkwargs) rrr!ÚtyperrÚKeyErrorÚ__dict__Úupdate)Z baseModuler-r.rZ kwargs_tupleÚmodZobjs©ÚfactoryZ moduleCacher rÚ moduleFactoryYs$      z+moduleFactoryFactory..moduleFactoryr )r5r6r r4rr Vscsi‰‡‡fdd„}|S)Ncs2t|ƒt| ¡ƒf}|ˆkr*ˆ||Žˆ|<ˆ|Sr)rr)r-r.r©ÚcacheÚfuncr rÚwrappedvszmemoize..wrappedr )r9r:r r7rÚmemoizessr;)Z __future__rrrÚtypesrZpip._vendor.sixrZxml.etree.cElementTreeZetreeZ cElementTreerÚ ImportErrorZxml.etree.ElementTreeZ ElementTreeÚ__all__ÚevalZ_xrr rrr r r r;r r r rÚs0  þ   #