U ÀÒ.e¯ã@sðddlmZmZmZddlmZddlmZzddlm m Z Wn&e k rhddl m mZ YnXddddd d gZz,ed ƒZeeeƒs¤ed ƒZeeeƒs¤t‚Wnd 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. ©cCsvg}|D]B\}}t|ttttfƒr<|D]}| ||f¡q&q| ||f¡qt ||¡t|ƒt|ƒkslt ‚d|_ dS©N) Ú isinstanceÚlistÚtupleÚ frozensetÚsetÚappendÚdictÚ__init__ÚlenÚAssertionErrorÚ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ÿß)rÚ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 )r6r7r r5rr Vscsi‰‡‡fdd„}|S)Ncs2t|ƒt| ¡ƒf}|ˆkr*ˆ||Žˆ|<ˆ|Sr)rr)r.r/r!©ÚcacheÚfuncr rÚwrappedvszmemoize..wrappedr )r:r;r r8rÚmemoizessr<)Z __future__rrrÚtypesrZpip._vendor.sixrZxml.etree.cElementTreeZetreeZ cElementTreerÚ ImportErrorZxml.etree.ElementTreeZ ElementTreeÚ__all__ÚevalZ_xrrr rrr r r r<r r r rÚs0  þ   #