a hj@sddlZddlZejddkZer,eZeZneZeZGdddZ ddZ ddd Z d d Z d d Z GdddZejdkrddZn ddlmZddZedkrddlZe ejddZededD]ZeedqdS)Nc@s*eZdZd ddZd ddZd d d ZdS)ConsoleProgressBard#cCs(d|_d|_||_||_||_d|_dS)NrF)blockscurrentsteps indicatoroutdone)selfr rr r 1/usr/lib/python3.9/site-packages/sepolgen/util.py__init__"s zConsoleProgressBar.__init__NcCs*d|_|r|jd||jddS)NFz %s: z3%--10---20---30---40---50---60---70---80---90--100 )r r write)r messager r rstart*szConsoleProgressBar.startcCs|j|7_|j}tt|jt|jdd|_|jdkrFd|_|j|}|j|j||j |jdkr|j sd|_ |jddS)Nr2T ) rrintroundfloatrr rr flushr )r noldnewr r rstep0s"   zConsoleProgressBar.step)rr)N)r)__name__ __module__ __qualname__rrrr r r rr!s  rcCsg}|||SN)extend)slr r r set_to_listBs r&FcCs@t|std|r,t|}||dS|D] }|SdS)a Return the first element of a set. It sometimes useful to return the first element from a set but, because sets are not indexable, this is rather hard. This function will return the first element from a set. If sorted is True, then the set will first be sorted (making this an expensive operation). Otherwise a random element will be returned (as sets are not ordered). zempty containerrN)len IndexErrorr&sort)r$sortedr%xr r rfirstGs r,cCs8t}z||}Wnty2|d}Yn0|S)z/Encode given text via preferred system encodingutf-8)localegetpreferredencodingencode UnicodeError)textencodingZ encoded_textr r r encode_input\s  r4cCs8t}z||}Wnty2|d}Yn0|S)z/Decode given text via preferred system encodingr-)r.r/decoder1)r2r3Z decoded_textr r r decode_inputis  r6c@sHeZdZdZddZddZddZdd Zd d Zd d Z ddZ dS) ComparisonzClass used when implementing rich comparison. Inherit from this class if you want to have a rich comparison within the class, afterwards implement _compare function within your class.cCstSr")NotImplemented)r othermethodr r r_compare}szComparison._comparecCs||ddS)NcSs||kSr"r abr r rz#Comparison.__eq__..r;r r9r r r__eq__szComparison.__eq__cCs||ddS)NcSs||kSr"r r<r r rr?r@z#Comparison.__lt__..rArBr r r__lt__szComparison.__lt__cCs||ddS)NcSs||kSr"r r<r r rr?r@z#Comparison.__le__..rArBr r r__le__szComparison.__le__cCs||ddS)NcSs||kSr"r r<r r rr?r@z#Comparison.__ge__..rArBr r r__ge__szComparison.__ge__cCs||ddS)NcSs||kSr"r r<r r rr?r@z#Comparison.__gt__..rArBr r r__gt__szComparison.__gt__cCs||ddS)NcSs||kSr"r r<r r rr?r@z#Comparison.__ne__..rArBr r r__ne__szComparison.__ne__N) rr r!__doc__r;rCrDrErFrGrHr r r rr7vsr7)rcsGfddd}|S)z,Convert a cmp= function into a key= functioncs\eZdZddZfddZfddZfddZfd d Zfd d Zfd dZ dS)zcmp_to_key..KcWs ||_dSr"obj)r rLargsr r rrszcmp_to_key..K.__init__cs|j|jdkSNrrKrBmycmpr rrDszcmp_to_key..K.__lt__cs|j|jdkSrNrKrBrOr rrGszcmp_to_key..K.__gt__cs|j|jdkSrNrKrBrOr rrCszcmp_to_key..K.__eq__cs|j|jdkSrNrKrBrOr rrEszcmp_to_key..K.__le__cs|j|jdkSrNrKrBrOr rrFszcmp_to_key..K.__ge__cs|j|jdkSrNrKrBrOr rrHszcmp_to_key..K.__ne__N) rr r!rrDrGrCrErFrHr rOr rKs     rQr )rPrQr rOr cmp_to_keysrR)rRcCs||k||kSr"r )r,secondr r rcmpsrT__main__i)rz computing pigMbP?)F)r.sys version_infoZPY3bytesZ bytes_typestrZ string_typeZunicoderr&r,r4r6r7rR functoolsrTrtimestdoutprrangeirsleepr r r rs0!