o DggX @sJddlZddlZddlZddlmZddlZddlmZddl Z ddl Z ddl m Z ddl mZddlmZmZmZGdddZd d d d d d d ZdddddZddlZd,ddZGdddZdddddddddddddddddddddddddZGdddeZdd Zd!d"Zd#d$Zd%d&Zd'd(Zd-d*d+ZdS).N) OrderedDict) ClassLabel) lru_cache) font_manager)ForeStyleinitc@s\eZdZeddZ  dddZdd Zd d Zd d ZddgddfddZ ddZ dS) BaseQuantizercCsH|jdkr"|jdkr|jg|jS|jdkr|jgStd|jgS)Nrcm3mask_augInvalid mask type )num_mask_tokens mask_typepredict_start_token mask_tokensmask_aug_token ValueErrorselfr&/home/wyb/yanbin/ART_v1.0/quantizer.py ignore_tokenss   zBaseQuantizer.ignore_tokensFrr cKsX||_dg|_||_||_||_|jdkrd|_dS|jdkr$d|_dStd|j)N r z r z r ) simplify_jsonio_ignore_replace_tokensmask_allr rrrr)rrrr rkwargsrrr__init__s    zBaseQuantizer.__init__cCsP|jdkrddt|jD|_|jg|jS|jdkr |jgStd|j)Nr cSsg|]}d|qS)z r.0irrr +z.r r )rranger rrrrrrrrget_additional_mask_tokens)s  z(BaseQuantizer.get_additional_mask_tokenscCsF|jrtj|dd}|jD] }|d|d|}q |St|}|S)N),:) separators")rjsondumpsadditional_special_tokensreplace)r json_examplecontenttokenrrr dump2json2s  zBaseQuantizer.dump2jsoncCsBt|jt|j}|jr|D] }||d|d}qt|S)Nr()setr+rrr,r)loads)rr.Zreplace_tokensr/rrr load_json;s  zBaseQuantizer.load_jsonN)widthheightlefttopc Cs|dur|j}t|}t|}g}t|ddD]\}}t|D]\} } | |vr7||| | || fq$q|s\td|j } t || kr[t ||d| }t |ddd}nt ||j krk||j d}g} g} t|D]L\}\}} } }|j dkr|j|}n|j dkr|j}ntd |j d |vr|d }n|d }||dd|| <| |||f| || fqs|r|| | fS|| fS) Nlayers textlayercS|dd|dSNrdr:rxrrr\r"z-BaseQuantizer.apply_masking..keyr r r < )rcopydeepcopyr1 enumeratekeysappendrandomrandintr lenshufflesortedrrrrcount)rr-r return_meta target_keysZtarget_element_types target_tokensshape_ishapekey_irBtarget_num_mask_tokenstuples meta_infosmask_ivalue mask_token num_tokenrrr apply_maskingBsJ          zBaseQuantizer.apply_maskingcCs*|j}|D] \}}}|||}q|SN)r)rrWpostfixr[rZr\rrrmake_prediction_postfixxsz%BaseQuantizer.make_prediction_postfix)FFrr ) __name__ __module__ __qualname__propertyrrr$r0r3r]r`rrrrr s       6r sizeposcolorfont)r4r5r?yrgrh)rr:)r)rii)rerfrgrhcCsgd}gd}|t|ksJ|d|ddd}|d|ddd}ddt|D}ddt|D}||}||}||fS)N)onetenhundredZthousand)r: r=icSsg|]}d|qS)decimalrrr?rrrr!z,get_keys_and_multipliers..cSsg|] }d|d qS)rrr:rrurrrr!)rLr#) pre_decimal post_decimalZpre_keysZpre_multiplersZ post_keysZpost_multiplersrH multiplersrrrget_keys_and_multiplierssr{c@s@eZdZdddZddZddZdd d Zd dZddZd S)DecimalQuantizerrmrncCs.||_||_t||\|_|_ddd|_dS)Nz z )rsr:)max_pre_decimalmax_post_decimalr{rHrzsymbols)rr}r~rrrrs  zDecimalQuantizer.__init__cs:g|j}|jD]|fddtdDq |S)Ncg|] }dd|dqSrC->rrrArrr!z.DecimalQuantizer.get_vocab..rr)rvaluesrHextendr#)rspecial_tokensrrAr get_vocabs zDecimalQuantizer.get_vocabcCs.|ddd}|dks||jvrdSdS)NrCrrsymbolTF)lstripsplitrH)rr/prefixrrr check_validszDecimalQuantizer.check_validNFc Cs |dur|j}|dur|j}||jksJ||jksJt||\}}tt|}|dkr0d}tt||}g}|rF|j|} | | n|dksLJt ||D]/\} } t || } | dkrnt d|d|d|d|| | }| d| d | d qQd |S) Nrr: zInvalid value z for z pre_decimal and z post_decimalrCrr)r}r~r{intnpsignroundabsrrIzipmathfloorrjoin) rvalrxry need_symbolrHrzrtokens symbol_typerB multiplervrrr__call__s.     zDecimalQuantizer.__call__cCs"|ddd\}}|t|fS)Nr:rsr)rr)rr/rBrrrr parse_tokens zDecimalQuantizer.parse_tokenc Cs|d}dd|D}|ddr,|d}|dd}dd|jD}||}nd}d}|D]}||\}} |j|} |j| } | | } || 7}q2||}|S) NrcSsg|] }|dkr|dqS)rrrrurrrr!sz+DecimalQuantizer.decode..rzrvz+DecimalQuantizer.decode..)r startswithritemsrrHindexrz) rZ tokens_strrrZinv_maprZ accumulaterr/rBrZmultipler_indexrZ actual_valrrrdecodes"      zDecimalQuantizer.decodermrn)NNF) rarbrcrrrrrrrrrrr|s   " r|r:F)rxryrT)rerfZopacityrgangle font_sizecseZdZdgddddffdd Zdd Zd d Zed d ddZddZddZ ddZ ddZ ddZ ddZ   dddZZS) QuantizerV4Trmrn)r}r~Fc stjdi|t|_t|_||_||_d|_||_t|dk|_ t|dkr6t d|t di||_ nd|_ | t|dd|_|dd|_t|j|_t|j|_dS) Nrrzdecimal quantize typesr4ir5ir)superrminmaxquant mask_valuestext_split_tokendecimal_quantize_typesrLdecimal_quantizeprintr|decimal_quantizerset_min_max_bins min_max_binsgetr4r5r)rrrZdecimal_quantize_kwargsrr __class__rrr:s"    zQuantizerV4.__init__cCsNt|}|D]\}\}}}|ddksJ|||df||<q ||_dS)Nrnrr:)rErFrr)rr type_namemin_valmax_valn_binsrrrrYs  zQuantizerV4.set_min_max_binscsjg}jrj}j|7_||7}fddjD}|D]j\}}}|fddt|D7}q%jdkrI| t d|| d|it |_|S)Ncsg|] }|jvr|qSr)r)rrBrrrr!jrwz/QuantizerV4.setup_tokenizer..crrrr)rrrr!mrrr+)rrrrrrrHr#r rr$radd_special_tokensr1r+)r tokenizerr+rZ rest_typesrrrr)rrrsetup_tokenizeras    zQuantizerV4.setup_tokenizer)maxsizecCs$|j|\}}}||t|||fSr^)rrlinspace)r real_typerrrrrrget_binsxszQuantizerV4.get_binsc Cs|js|S t|}||\}}}tt|||}|jr.||jvr.|j|fit |St ||d}t |}|dkrB||ksDJd|d|dS)Nr:rrCrr) rspecsrrclipfloatrrrpre_post_decimalsdigitizerL) rr?typerrrbinsrrrrrquantize~szQuantizerV4.quantizecCsd|ddd}|dddd}|jr$|j|r$|j|S||\}}}|t|S)Nrr:rr)rstriprrrrrr)rr?rrrrrrrr dequantizes   zQuantizerV4.dequantizecCsti}t|jddD]}d|}||}t|||<q t|jddD]}d|}||}t|||<q&|S)Nrernz rfz)r#rrstr)rmap_dictr namerZrrrconstruct_map_dicts  zQuantizerV4.construct_map_dictcCs(ddl}|dd|}|dd|}|S)Nrz ()z"\1"z ())resub)rr-rrrrpostprocess_colorandfontsz$QuantizerV4.postprocess_colorandfontcCs||}||Sr^)Z get_featureZint2str)rr?rfeaturerrrto_strs  zQuantizerV4.to_strc Cst}|d|d<g}|dD]3}||d||d|jd||d|jd||d|jd||d|jddq||d<|S) N wholecaptionlayoutlayerr?rir4r5)rr?rir4r5)rrIrr4r5)rexampleZ new_exampleZ new_layoutZ meta_layerrrrconvert2layouts   zQuantizerV4.convert2layoutNcCs|dur|j}t|}g}|jrw|rw|ddd|df|ddd|df|ddd|df|ddd|df|ddd|df|ddd|dd df|ddd |dd d f|ddd |dd d ft|dd D]\}}||dd|dd |fq|std|j}t ||krt ||d|}t |ddd}nt ||jkr||j d}g} g} gd} t|D]\} \} }}}|j dkr|j | }n|j dkr|j}ntd|j d|vr|d}n|dd}| dkr:|dvr||dd d<n-|dvr'||dd d <n|dvr5||dd d <n|||<n | | }||dd |<| |||f| | |fq|r^|| | fS|| fS)NrsZ globalcaptionZ canvas_widthZ canvas_heightcategorykeywords bgcaptionr8ZbglayerflagZobjlayer objcaptionr9textr:cSr;r<rr>rrrr@r"z+QuantizerV4.apply_masking..rA)headingZ subheadingbodyr r r rCrD)r)r)r)rrErFrrIrGrJrKr rLrMrNrrrrrO)rr-rrPrrRZlayer_ir9rVrWrXZ layer_listrYrSrUrBrZr[r\Zcurlayerrrrr]sf                zQuantizerV4.apply_masking)NFT)rarbrcrrrrrrrrrrrr] __classcell__rrrrr9s(   rcCs,t}|D] }||vrdSqdS)NTF)rZfindSystemFontslower) font_nameZ font_listrhrrris_font_existss rcCttjd|dS)Nz[INFO] )rrGREENmsgrrr print_inforcCr)Nz [WARNING] )rrYELLOWrrrr print_warningrrcCr)Nz[ERROR] )rrREDrrrr print_errorrrcsdt| }|Wdn1swYtfddttD}tt||dS)Ncsg|]}t|qSr)rrr.rrr!sz load_feature..) num_classesnames)openreadr)r2r#rLr)pathfrrrr load_features   rv1cKs|dkr tdi|}|St)z[ if kwargs.pop('separate_alpha', False): # useless kwargs['n_visual_tokens'] *= 2 v4Nr)rNotImplementedError)version update_vocabr quantizerrrr get_quantizersrr)rF) torchnumpyrrE collectionsrr)datasetsrrJr functoolsr matplotlibrcoloramarrrr rrr{r|rrrrrrrrrrrrsz     _!O