§
     ’Þjúš  ã                  óø  — d Z ddlmZ ddlmZ ddlmZmZ ddlZddlZddl	Z	ddl
mZ ddlZddlZddlmZ ddlmZ dd	lmZ d
ZdZdddddœZdZdZdZdZdZdZdZdZdZ dZ!dZ"e	j#         $                    e	j#         %                    e&¦  «        d¦  «        Z'e G d„ d¦  «        ¦   «         Z(dHd„Z)dId „Z*dJddd!œdKd)„Z+dLd+„Z,dMd/„Z-dNd4„Z.dOd8„Z/ G d9„ d:¦  «        Z0 e0¦   «         Z1eedd;œdPd?„Z2dddd@œdQdF„Z3dRdG„Z4dS )Sz`Chain-of-Zoom runtime (https://github.com/bryanswkim/Chain-of-Zoom).

optimized by DeepBeepMeep
é    )Úannotations)Úcheckpoint_modules)Úcontrolled_model_loadingÚloading_callbackN)Ú	dataclass)ÚImage)Úoffload)Úoffload_registryé@   é   ©é   )é   )r   r   )r   r   )g       @g      @g       @g      0@i   é   Tz‡The second image is a zoom-in of the first image. Based on this knowledge, what is in the second image? Give me a set of English words.éM   é   g     @�@Úconfigsc                  ó`   — e Zd ZU ded<   ded<   ded<   ded<   ded<   ded<   ded<   ded	<   d
S )ÚCoZPathsÚstrÚtransformerÚvaeÚclip_lÚclip_tokenizer_dirÚclip_gÚt5ÚvlmÚvlm_dirN)Ú__name__Ú
__module__Ú__qualname__Ú__annotations__© ó    úLC:\Users\johnn\OneDrive\Documents\AI\postprocessing\chain_of_zoom\runtime.pyr   r   )   s^   € € € € € € àÐÐÑØ€H€H�HØ€K€K�KØÐÐÑØ€K€K�KØ€G€G�GØ€H€H�HØ€L€L�L€L€Lr$   r   Úfilenamer   Úreturnc                óL   — t           j                             t          | ¦  «        S ©N)ÚosÚpathÚjoinÚ_CONFIGS_DIR)r&   s    r%   Ú_config_pathr.   5   s   € ÝŒ7�<Š<� hÑ/Ô/Ð/r$   Úboolc                ó4   — t          | ¦  «        o	 | ¦   «         S r)   ©Úcallable)Úabort_callbacks    r%   Ú_abort_requestedr4   9   s   € Ý�NÑ#Ô#Ð8¨¨Ñ(8Ô(8Ð8r$   )Ú
label_stepÚlabel_totalÚphaseÚcurrent_stepú
int | NoneÚtotal_stepsr5   r6   ÚNonec               óF   — t          | ¦  «        r~~ | |||¦  «         d S d S r)   r1   )Úprogress_callbackr7   r8   r:   r5   r6   s         r%   Ú_report_progressr>   =   s=   € ÝÐ!Ñ"Ô"ð <Ø˜ØÐ˜% ¨{Ñ;Ô;Ð;Ð;Ð;ð<ð <r$   Ú
step_labelc                ó   — d| › d|› �S )NzCoZ ú r#   )r7   r?   s     r%   Ú
_coz_phaserB   C   s   € Ø&�%Ð&Ð&˜*Ð&Ð&Ð&r$   Útotal_itemsÚintÚ
batch_sizec                óf   — t          | ¦  «        t          |¦  «        z   dz
  t          |¦  «        z  S )Nr   ©rD   )rC   rE   s     r%   Ú_batch_countrH   G   s+   € Ý�ÑÔ�s :™œÑ.°Ñ2µs¸:±´ÑFÐFr$   ÚlengthÚtileÚstrideú	list[int]c                ó®   — | |k    rdgS t          t          d| |z
  dz   |¦  «        ¦  «        }|d         | |z
  k    r|                     | |z
  ¦  «         |S )Nr   r   éÿÿÿÿ)ÚlistÚrangeÚappend)rI   rJ   rK   Ú	positionss       r%   Ú_grid_positionsrS   K   se   € Ø�‚~€~Øˆsˆ
Ý•U˜1˜f t™m¨aÑ/°Ñ8Ô8Ñ9Ô9€IØ�„}˜ ™Ò%Ð%Ø×Ò˜ $™Ñ'Ô'Ð'ØÐr$   ÚwidthÚheightútorch.Tensorc                ó  ‡ ‡‡‡‡— dŠ‰ dz
  dz  Šˆˆˆ fd„t          ‰ ¦  «        D ¦   «         }‰dz  Šˆˆˆfd„t          ‰¦  «        D ¦   «         }t          j        t          j        ||¦  «        |t          j        ¬¦  «        S )Ng{®Gáz„?r   r   c                ó®   •— g | ]Q}t          j        |‰z
   |‰z
  z  ‰‰z  z  d ‰z  z  ¦  «        t          j        d t           j        z  ‰z  ¦  «        z  ‘ŒRS r   ©ÚmathÚexpÚsqrtÚpi)Ú.0ÚxÚ
midpoint_xÚvarrT   s     €€€r%   ú
<listcomp>z%_gaussian_weights.<locals>.<listcomp>W   s€   ø€ ð  Rð  Rð  Rð  @A�tŒx˜!˜j™.Ð)¨Q°©^Ñ<ÀÈÁÑNÐRSÐVYÑRYÑZÑ[Ô[Õ^bÔ^gÐhiÕlpÔlsÑhsÐvyÑhyÑ^zÔ^zÑzð  Rð  Rð  Rr$   c                ó®   •— g | ]Q}t          j        |‰z
   |‰z
  z  ‰‰z  z  d ‰z  z  ¦  «        t          j        d t           j        z  ‰z  ¦  «        z  ‘ŒRS r   rY   )r^   ÚyrU   Ú
midpoint_yra   s     €€€r%   rb   z%_gaussian_weights.<locals>.<listcomp>Y   s€   ø€ ð  Uð  Uð  Uð  BC�tŒx˜!˜j™.Ð)¨Q°©^Ñ<ÀÈÁÑPÐTUÐX[ÑT[Ñ\Ñ]Ô]Õ`dÔ`iÐjkÕnrÔnuÑjuÐx{Ñj{Ñ`|Ô`|Ñ|ð  Uð  Uð  Ur$   ©ÚdeviceÚdtype)rP   ÚtorchÚtensorÚnpÚouterÚfloat32)rT   rU   rg   Úx_probsÚy_probsr`   re   ra   s   ``   @@@r%   Ú_gaussian_weightsrp   T   sï   øøøøø€ Ø
€CØ˜!‘)˜q‘€Jð Rð  Rð  Rð  Rð  Rð  Rõ  EJð  KPñ  EQô  EQð  Rñ  Rô  R€GØ˜!‘€Jð Uð  Uð  Uð  Uð  Uð  Uõ  GLð  MSñ  GTô  GTð  Uñ  Uô  U€GÝŒ<�œ ¨'Ñ2Ô2¸6ÍÌÐWÑWÔWÐWr$   c                  óÐ   — e Zd Zd5d„Zeeefd6d	„¦   «         Zd5d
„Zd7d„Z	d5d„Z
d8d„Zd9d„Zd:d„Zd:d„Zd;d<d"„Zd;d=d$„Zd;d>d'„Zd;d?d-„Z ej        ¦   «         d.ddd/œd@d4„¦   «         ZdS )AÚChainOfZoomRuntimer'   r;   c                óð  — t           j        | _        t          j        t           j                             ¦   «         rdnd¦  «        | _        d | _        d | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d| _        d | _        t6          | _        t:          | _        d S )NÚcudaÚcpuF)ri   Úbfloat16rh   rg   rt   Úis_availabler   r   r   r   r   r   Ú
vlm_visualÚvlm_textÚ
vlm_engineÚ
vlm_configÚvlm_generation_configÚtokenizer_lÚtokenizer_gÚtokenizer_t5Úvlm_processorÚvlm_llmÚ
offloadobjÚprofileÚpathsÚuse_lm_engineÚvlm_lm_featuresÚCOZ_VLM_VISION_BATCHÚvlm_vision_batchÚCOZ_VLM_PROMPT_BATCHÚvlm_prompt_batch©Úselfs    r%   Ú__init__zChainOfZoomRuntime.__init__^   sä   € Ý”^ˆŒ
Ý”l­U¬Z×-DÒ-DÑ-FÔ-FÐ#Q 6 6ÈEÑRÔRˆŒØˆÔØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØ%)ˆÔ"ØˆÔØˆÔØ ˆÔØ!ˆÔØˆŒØˆŒØˆŒØ&*ˆŒ
Ø"ˆÔØ#ˆÔÝ 4ˆÔÝ 4ˆÔÐÐr$   r„   r   rˆ   rD   rŠ   c           	     ó  — t          |¦  «        }t          |¦  «        }| j        �9| j        |k    r.| j        |k    r#| j        |k    r| j        |k    r| j        |k    rd S |                      ¦   «          ddlm	} ddl
m} ddlm}	m}
m}m}m}m}m} ddlm} ddlm} ddlm}m} ddlm}m}  |d	¬
¦  «        5   |d,i |¤Ž| _        d d d ¦  «         n# 1 swxY w Y   | j                             ¦   «          tA          j!        | j        |j        d| j"        d	d¬¦  «         tA          j#        |j$        |tK          d¦  «        d¬¦  «        | _$        | j$         &                    ¦   «          tA          j#        |j'        |tP          j)         *                    tP          j)         +                    |j'        ¦  «        d¦  «        d	d¬¦  «        | _'        tA          j#        |j,        |tP          j)         *                    tP          j)         +                    |j,        ¦  «        d¦  «        d¬¦  «        | _,        tA          j#        |j-        d¬¦  «        | _-        |	 .                    |j/        ¦  «        | _0        | .                    |j/        ¦  «        | _1        d| j1        _2        d | j1        _3        |j4        | _5        || _        || _        || _        tm          d| 7                    ¦   «         › �¦  «         tm          d| j        › d| j        › �¦  «         |j8        rdnd }| j5        �r0 |d	¬
¦  «        5   || j0        ¦  «        | _9         || j0        j:        ¦  «        | _;        d d d ¦  «         n# 1 swxY w Y    |d¬
¦  «        5  |r-| <                    | j0        j=        || j"        ¬¦  «        | _>        n$| <                    | j0        j=        ¦  «        | _>        d d d ¦  «         n# 1 swxY w Y   tA          j!        | j>        |j9        dd| j"        d	d¬¦  «         tA          j!        | j;        |j9        dd| j"        d	d¬¦  «          || j;        |¦  «         nŒtA          j#        |j9        |tP          j)         *                    |j/        d¦  «        d¬¦  «        | _9        | j9         ?                    ¦   «          | j1        | j9        _@        |r|| j9        jA        jB        jC        _D        | j        | j$        | j'        | j,        | j-        | j5        r| j>        n| j9        | j;        fD ],}|€Œ| E                    ¦   «          F                    d¦  «         Œ-| .                    |jG        ¦  «        | _H        | .                    |jG        d¬¦  «        | _I        | .                    tP          j)         +                    |j-        ¦  «        ¦  «        | _J        |
 .                    |j/        t–          ¬¦  «        | _L        | j5        r5 || j;        |j/        | jL        jM        d¬¦  «        | _N        | j;        | _O        n@t           jQ         R                    | j9        jA        jS        | j9        jT        d œ¦  «        | _O        | j        | j$        | j'        | j,        | j-        | j5        r| j>        n| j9        jA        jB        | jO        d!œ}i } ||||¦  «        }d| U                    d"i ¦  «        d#<   d|d"         d$<   d|d"         d%<   | j5        rd|d"         d&<   | U                    d'i ¦  «         V                    d$gd#gd(œ¦  «         d|d)<   tA          j        |ft¯          ¦   «         |d| j"        dd*œ|¤Ž| _        t±          jY        d+| j        | j        ¦  «         || _        || _        d S )-Nr   )Úinit_empty_weights)ÚAutoencoderKL)Ú
AutoConfigÚAutoProcessorÚCLIPTextModelWithProjectionÚCLIPTokenizerÚGenerationConfigÚ"Qwen2_5_VLForConditionalGenerationÚT5Tokenizer)Ú(Qwen2_5_VisionTransformerPretrainedModel)ÚQwen2_5_VLForCausalLM)Ú
TextEngineÚconfigure_engine_kernels)ÚSD3TransformerÚSD3_MEDIUM_CONFIGT)Úinclude_buffersFrN   )Úwritable_tensorsÚdefault_dtypeÚignore_unused_weightsÚverboseLevelzsd3_vae_config.json)Ú
modelClassÚdefaultConfigPathrŸ   zconfig.json)r£   ÚforcedConfigPathr¡   rŸ   )r£   r¥   rŸ   )rŸ   z[Chain-of-Zoom] VLM LM: z3[Chain-of-Zoom] VLM tile batch sizes: vision tower=z
, decoder=Úflash_attention_2)Úattn_implementationÚtorch_dtypezmodel.visual)ÚmodelPrefixrŸ   r    r¡   r¢   zmodel.language_modelú!)Ú	pad_token)Úuse_fast)ÚmodelÚ
model_pathÚ	tokenizerÚenforce_eager)Úlanguage_modelÚlm_head)r   r   r   r   r   rx   r�   Úbudgetsr   r   rx   r�   ÚcoTenantsMap)r   r   ÚpinnedMemory)r   Ú
profile_noÚquantizeTransformerÚconvertWeightsFloatTor¢   úChain-of-Zoomr#   )ZrD   r‚   r„   rƒ   r†   rˆ   rŠ   ÚreleaseÚ
accelerater�   Úmodels.z_image.autoencoder_klr�   Útransformersr‘   r’   r“   r”   r•   r–   r—   Ú2transformers.models.qwen2_5_vl.modeling_qwen2_5_vlr˜   Ú)shared.llm_engines.lmgp.models.qwen2_5_vlr™   Ú$shared.llm_engines.lmgp.vllm_supportrš   r›   Ú,postprocessing.chain_of_zoom.sd3_transformerrœ   r�   r   Úinit_runtime_buffersr	   Úload_model_datarh   Úfast_load_transformers_modelr   r.   Úenable_tilingr   r*   r+   r,   Údirnamer   r   Úfrom_pretrainedr   r{   r|   Ú	do_sampleÚtemperatureÚgraphsr…   ÚprintÚdescribeÚflashr   Útext_configry   Ú_from_configÚvision_configrx   Útie_weightsÚgeneration_configr­   ÚvisualÚconfigÚ_attn_implementationÚevalÚrequires_grad_r   r}   r~   r   ÚCOZ_VLM_PROCESSOR_USE_FASTr€   r¯   rz   r�   ri   ÚnnÚ
ModuleDictr±   r²   Ú
setdefaultÚupdater   r
   Úregister_offloadobj)rŒ   r„   rƒ   Ú	init_pipeÚlm_featuresrˆ   rŠ   r�   r�   r‘   r’   r“   r”   r•   r–   r—   r˜   r™   rš   r›   rœ   r�   Úvision_attnr­   ÚpipeÚkwargsr¶   s                              r%   ÚloadzChainOfZoomRuntime.loady   sŸ
  € åÐ/Ñ0Ô0ÐÝÐ/Ñ0Ô0ÐØŒ?Ð&¨4¬:¸Ò+>Ð+>À4Ä<ÐSZÒCZÐCZÐ_cÔ_sð  xCò  `Cð  `Cð  HLô  H]ð  aqò  Hqð  Hqð  vzô  vKð  O_ò  v_ð  v_ØˆFØ�Š‰ŒˆØ1Ð1Ð1Ð1Ð1Ð1Ø?Ð?Ð?Ð?Ð?Ð?ð 	jð  	jð  	jð  	jð  	jð  	jð  	jð  	jð  	jð  	jð  	jð  	jð  	jð  	jð  	jð  	jð  	jð  	jØoÐoÐoÐoÐoÐoØSÐSÐSÐSÐSÐSØ]Ð]Ð]Ð]Ð]Ð]Ð]Ð]ØbÐbÐbÐbÐbÐbÐbÐbàÐ°Ð5Ñ5Ô5ð 	Cð 	CØ-˜~ÐBÐBÐ0AÐBÐBˆDÔð	Cð 	Cð 	Cñ 	Cô 	Cð 	Cð 	Cð 	Cð 	Cð 	Cð 	Cøøøð 	Cð 	Cð 	Cð 	CàÔ×-Ò-Ñ/Ô/Ð/ÝÔ Ô 0°%Ô2CÐV[ÐkoÔkuð  NRð  acð  	dñ  	dô  	dð  	dÝÔ7¸¼	ÈmÕo{ð  }Rñ  pSô  pSð  fkð  lñ  lô  lˆŒØŒ×ÒÑ Ô Ð ÝÔ:¸5¼<ÐToõ  CEô  CJ÷  COò  COõ  PRô  PW÷  P_ò  P_ð  `eô  `lñ  Pmô  Pmð  o|ñ  C}ô  C}ð  UYð  lqð  rñ  rô  rˆŒÝÔ:¸5¼<ÐToõ  CEô  CJ÷  COò  COõ  PRô  PW÷  P_ò  P_ð  `eô  `lñ  Pmô  Pmð  o|ñ  C}ô  C}ð  PUð  Vñ  Vô  VˆŒÝÔ6°u´xÐRWÐXÑXÔXˆŒØ$×4Ò4°U´]ÑCÔCˆŒØ%5×%EÒ%EÀeÄmÑ%TÔ%TˆÔ"Ø/4ˆÔ"Ô,Ø15ˆÔ"Ô.Ø(Ô/ˆÔØ*ˆÔØ 0ˆÔØ 0ˆÔÝÐA¨×)=Ò)=Ñ)?Ô)?ÐAÐAÑBÔBÐBÝÐ|ÀDÔDYÐ|Ð|ÐeiÔezÐ|Ð|Ñ}Ô}Ð}Ø-8Ô->ÐHÐ)Ð)ÀDˆØÔñ 	PØ#Ð#°DÐ9Ñ9Ô9ð Sð SØ=Ð=¸d¼oÑNÔN�”Ø 5Ð 5°d´oÔ6QÑ RÔ R�”ðSð Sð Sñ Sô Sð Sð Sð Sð Sð Sð Søøøð Sð Sð Sð Sð $Ð#°EÐ:Ñ:Ô:ð {ð {Øð {Ø&N×&[Ò&[Ð\`Ô\kÔ\yð  P[ð  imô  isÐ&[ñ  'tô  't�D”O�Oà&N×&[Ò&[Ð\`Ô\kÔ\yÑ&zÔ&z�D”Oð	{ð {ð {ñ {ô {ð {ð {ð {ð {ð {ð {øøøð {ð {ð {ð {õ
 Ô# D¤O°U´YÈNÐmrð  CGô  CMð  eið  xzð  {ñ  {ô  {ð  {ÝÔ# D¤M°5´9ÐJ`Ðsxð  IMô  ISð  koð  ~@ð  Añ  Aô  Að  AØ$Ð$ T¤]°KÑ@Ô@Ð@Ð@åÔ;¸E¼IÐRtõ  IKô  IP÷  IUò  IUð  V[ô  Vcð  erñ  Isô  Isð  FKð  Lñ  Lô  LˆDŒHØŒH× Ò Ñ"Ô"Ð"Ø)-Ô)CˆDŒHÔ&Øð PØDO�””Ô%Ô,ÔAØÔ&¨¬°$´+¸t¼{ÈDÌGÐhlÔhzð  VIÐUYÔUdÐUdð  AEô  AIð  KOô  KXð  Yð 	/ð 	/ˆEØˆ}ØØ�JŠJ‰LŒL×'Ò'¨Ñ.Ô.Ð.Ð.Ø(×8Ò8¸Ô9QÑRÔRˆÔà(×8Ò8¸Ô9QÐ]`Ð8ÑaÔaˆÔØ'×7Ò7½¼¿ºÈÌÑ8QÔ8QÑRÔRˆÔØ*×:Ò:¸5¼=ÕSmÐ:ÑnÔnˆÔØÔð 	Ø(˜j¨t¬}ÈÌÐbfÔbtÔb~ð  OTð  Uñ  Uô  UˆDŒOØœ=ˆDŒLˆLå œ8×.Ò.À$Ä(Ä.ÔB_ÐlpÔltÔl|Ð/}Ð/}Ñ~Ô~ˆDŒLð  Ô+Ø”8Ø”kØ”kØ”'Ø-1Ô-?ÐZ˜$œ/˜/ÀTÄXÄ^ÔEZØ”|ð
ð 
ˆð ˆØ�Y˜t V¨WÑ5Ô5ˆ
Ø56ˆ×Ò˜) RÑ(Ô(¨Ñ2Ø&'ˆˆyÔ˜(Ñ#Ø*+ˆˆyÔ˜,Ñ'ØÔð 	-Ø+,ˆF�9Ô˜iÑ(Ø×Ò˜.¨"Ñ-Ô-×4Ò4ÀÀ
ÐW_ÐV`Ð5aÐ5aÑbÔbÐbØ!&ˆˆ~ÑÝ!œ/¨$ð  DÕAQÑASÔASÐ`jð  AFð  ^bô  ^hð  wyð  Dð  Dð  }Cð  Dð  DˆŒÝÔ,¨_¸d¼oÈtÌ|Ñ\Ô\Ð\ØˆŒØˆŒ
ˆ
ˆ
s7   Â9CÃCÃCÌ&0M"Í"M&Í)M&Í9AOÏOÏ Oc                ó  — | j         �| j                              ¦   «          | j        �| j                             ¦   «          t          j                             ¦   «         r t          j                             ¦   «          d S d S r)   )rz   Úrelease_runtime_allocationsr‚   Ú
unload_allri   rt   rw   Úempty_cacher‹   s    r%   Ú_unload_mmgpzChainOfZoomRuntime._unload_mmgpÔ   st   € ØŒ?Ð&ØŒO×7Ò7Ñ9Ô9Ð9ØŒ?Ð&ØŒO×&Ò&Ñ(Ô(Ð(ÝŒ:×"Ò"Ñ$Ô$ð 	%ÝŒJ×"Ò"Ñ$Ô$Ð$Ð$Ð$ð	%ð 	%r$   ú
str | Nonec                ó*   — | j         €d S | j        rdndS )Nz	LM engineztransformers decoder)r†   r…   r‹   s    r%   Ú_current_vlm_engine_labelz,ChainOfZoomRuntime._current_vlm_engine_labelÜ   s#   € ØÔÐ'Ø�4Ø"Ô0ÐLˆ{ˆ{Ð6LÐLr$   c                ó  — |                       ¦   «         }|�t          d|› �¦  «         | j        � | j                             ¦   «          d | _        | j        �:t          j        d| j        ¦  «         | j                             ¦   «          d | _        d | _        d | _	        d | _
        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d | _        d| _        d | _        t2          | _        t6          | _        d | _        d | _        t?          j         ¦   «          tB          j"         #                    ¦   «         r tB          j"         $                    ¦   «          d S d S )Nz[Chain-of-Zoom] Closing VLM r¹   F)%rë   rË   rz   Úcloser‚   r
   Úunregister_offloadobjrº   r   r   r   r   r   r   rx   ry   r{   r|   r}   r~   r   r€   r�   r…   r†   r‡   rˆ   r‰   rŠ   rƒ   r„   ÚgcÚcollectri   rt   rw   rç   )rŒ   Úvlm_engine_labels     r%   rº   zChainOfZoomRuntime.releaseá   so  € Ø×9Ò9Ñ;Ô;ÐØÐ'ÝÐCÐ1AÐCÐCÑDÔDÐDàŒ?Ð&ØŒO×!Ò!Ñ#Ô#Ð#Ø"ˆDŒOØŒ?Ð&ÝÔ2°?ÀDÄOÑTÔTÐTØŒO×#Ò#Ñ%Ô%Ð%Ø"ˆDŒOØˆÔØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØˆŒØ%)ˆÔ"ØˆÔØˆÔØ ˆÔØ!ˆÔØˆŒØ"ˆÔØ#ˆÔÝ 4ˆÔÝ 4ˆÔØˆŒØˆŒ
Ý
Œ
‰ŒˆÝŒ:×"Ò"Ñ$Ô$ð 	%ÝŒJ×"Ò"Ñ$Ô$Ð$Ð$Ð$ð	%ð 	%r$   Úcontext_imageúImage.ImageÚ
tile_imagec                óž   — dt           dœdddiddigdœg}| j                             |dd¬¦  «        }|                      |g||gdd	¬
¦  «        S )NÚsystem)ÚroleÚcontentÚuserÚtypeÚimageFT)ÚtokenizeÚadd_generation_promptÚpt)ÚtextÚimagesÚpaddingÚreturn_tensors)ÚCOZ_VLM_MESSAGEr€   Úapply_chat_template)rŒ   rò   rô   Úmessagesrÿ   s        r%   Ú_vlm_inputszChainOfZoomRuntime._vlm_inputs  st   € à­/Ð:Ð:Ø¨&°'Ð):¸VÀWÐ<MÐ(NÐOÐOð
ˆð Ô!×5Ò5°hÈÐfjÐ5ÑkÔkˆØ×!Ò!¨ v°}ÀjÐ6QÐ[_ÐptÐ!ÑuÔuÐur$   Úinputs_batchrO   úlist[torch.Tensor]c                ó°  — t          j        d„ |D ¦   «         d¬¦  «                             | j        ¦  «        }t          j        d„ |D ¦   «         d¬¦  «                             | j        ¦  «        }| j        rt|                     | j        j        ¦  «        }t          | j        j	        ¦  «        5  |                      ||¬¦  «        }ddd¦  «         n# 1 swxY w Y   | j        j
        }n…t          | j        j        j        j	        ¦  «        5  t          j        | j        j                             ||¦  «        d¬¦  «        }ddd¦  «         n# 1 swxY w Y   | j        j        j        j
        }|                     d¦  «        |dz  z                       ¦   «         }g }d}|D ]a}	t#          |	d	         j        d         ¦  «        }
|                     t#          t)          ||||
z   …         ¦  «        ¦  «        ¦  «         ||
z  }Œb|                     | j        ¦  «                             ¦   «         }~~t-          t          j        ||d¬¦  «        ¦  «        S )
zZOne vision tower pass over the images of several tile jobs; returns per-job packed embeds.c                ó   — g | ]
}|d          ‘ŒS )Úpixel_valuesr#   ©r^   Úinputss     r%   rb   z9ChainOfZoomRuntime._vlm_visual_embeds.<locals>.<listcomp>  s   € Ð!TÐ!TÐ!T¸V &¨Ô"8Ð!TÐ!TÐ!Tr$   r   ©Údimc                ó   — g | ]
}|d          ‘ŒS ©Úimage_grid_thwr#   r  s     r%   rb   z9ChainOfZoomRuntime._vlm_visual_embeds.<locals>.<listcomp>  s   € Ð#XÐ#XÐ#XÀ FÐ+;Ô$<Ð#XÐ#XÐ#Xr$   )Úgrid_thwNrN   r   r  )ri   ÚcatÚtorg   r…   rú   rx   rh   r   ÚblocksÚspatial_merge_sizer   r­   rÓ   Úget_image_featuresÚprodÚtolistrD   ÚshaperQ   Úsumru   rO   Úsplit)rŒ   r  r  r  Úimage_embedsÚ
merge_sizeÚtokens_per_imageÚ	job_sizesÚimage_indexr  Úimage_counts              r%   Ú_vlm_visual_embedsz%ChainOfZoomRuntime._vlm_visual_embeds  sÄ  € å”yÐ!TÐ!TÀ|Ð!TÑ!TÔ!TÐZ[Ð\Ñ\Ô\×_Ò_Ð`dÔ`kÑlÔlˆÝœÐ#XÐ#XÈ<Ð#XÑ#XÔ#XÐ^_Ð`Ñ`Ô`×cÒcÐdhÔdoÑpÔpˆØÔð 	BØ'×,Ò,¨T¬_Ô-BÑCÔCˆLÝ# D¤OÔ$:Ñ;Ô;ð Vð VØ#Ÿš¨|Àn˜ÑUÔU�ðVð Vð Vñ Vô Vð Vð Vð Vð Vð Vð Vøøøð Vð Vð Vð VàœÔ;ˆJˆJå# D¤H¤NÔ$9Ô$@ÑAÔAð qð qÝ$œy¨¬¬×)JÒ)JÈ<ÐYgÑ)hÔ)hÐnoÐpÑpÔp�ðqð qð qñ qô qð qð qð qð qð qð qøøøð qð qð qð qàœœÔ.ÔAˆJØ*×/Ò/°Ñ3Ô3°zÀ1±}ÑD×LÒLÑNÔNÐØˆ	ØˆØ"ð 	'ð 	'ˆFÝ˜fÐ%5Ô6Ô<¸QÔ?Ñ@Ô@ˆKØ×Ò�S¥Ð%5°kÀ+ÐP[ÑB[Ð6[Ô%\Ñ!]Ô!]Ñ^Ô^Ñ_Ô_Ð_Ø˜;Ñ&ˆKˆKØ#—’ t¤zÑ2Ô2×6Ò6Ñ8Ô8ˆØ˜.Ý•E”K ¨i¸QÐ?Ñ?Ô?Ñ@Ô@Ð@s$   Â0CÃCÃCÄ5EÅEÅEÚjobsú
list[dict]ú	list[str]c                óÒ  — g }|D �]Ö}|d                               | j        ¦  «        }|                     d¦  «        }|�|                      | j        ¦  «        nt          j        || j        ¬¦  «        }|d                               | j        ¦  «        }|d         }| j                             |¦  «        }|| j        j        k    }	t          |	 
                    ¦   «         ¦  «        |j        d         k    r?t          dt          |	 
                    ¦   «         ¦  «        › d	|j        d         › �¦  «        ‚|                      | j        |j        ¬
¦  «        }|                     |	                     d¦  «                             |¦  «        |¦  «        }| j        j                             |||¬¦  «        \  }
}|d                              ¦   «         }|                     d„ |d         |                              ¦   «         D ¦   «         |d|f                              ¦   «                              ¦   «         |
dd…d|f                              ¦   «                              ¦   «         t          j        |¦  «        rR|                     ¦   «         dk    r:t          |                     d¦  «        d                              ¦   «         ¦  «        nddœ¦  «         ~~~~~~
~�ŒØ| j                             |t>          ddddddddtA          | j!        j"        pd¦  «        ¬¦  «        }| #                    ¦   «          d„ |pg D ¦   «         }d„ | j$         %                    |dd¬¦  «        D ¦   «         S )zKDecode the prompts of several tile jobs concurrently through the LM engine.Ú	input_idsÚattention_maskN©rg   r  r  r   ú*VLM image token/features mismatch: tokens=ú, features=rf   rN   ©r  r*  c                ó,   — g | ]}t          |¦  «        ‘ŒS r#   rG   )r^   Útoken_ids     r%   rb   zIChainOfZoomRuntime._vlm_prompts_from_embeds_lm_engine.<locals>.<listcomp>8  s   € Ð$fÐ$fÐ$f°x¥S¨¡]¤]Ð$fÐ$fÐ$fr$   )Úprompt_token_idsÚprompt_embedsÚprompt_position_idsÚposition_offsetr   ç      ð?F)
Ú
max_tokensrÉ   Útop_pÚtop_kÚ	cfg_scaleÚseedÚuse_tqdmÚrelease_vram_afterÚ
ignore_eosÚrepetition_penaltyc                óB   — g | ]}|€g n|                      dg ¦  «        ‘ŒS )NÚ	token_ids)Úget)r^   Úresults     r%   rb   zIChainOfZoomRuntime._vlm_prompts_from_embeds_lm_engine.<locals>.<listcomp>L  s/   € ÐlÐlÐlÐTZ  ˜"˜"°F·J²J¸{ÈBÑ4OÔ4OÐlÐlÐlr$   c                ó6   — g | ]}|                      ¦   «         ‘ŒS r#   ©Ústrip©r^   Úprompts     r%   rb   zIChainOfZoomRuntime._vlm_prompts_from_embeds_lm_engine.<locals>.<listcomp>M  s2   € ð  \ð  \ð  \ 6�—’‘”ð  \ð  \ð  \r$   T©Úskip_special_tokensÚclean_up_tokenization_spaces)&r  rg   rA  ri   Ú	ones_likery   Úembed_tokensr{   Úimage_token_idrD   r  r  Ú
ValueErrorrh   Úmasked_scatterÚ	unsqueezeÚ	expand_asr   r­   Úget_rope_indexr/   rQ   r  Ú
contiguousru   Ú	is_tensorÚnumelÚreshapeÚitemrz   Úgenerate_embedded_batchÚCOZ_VLM_MAX_NEW_TOKENSÚfloatr|   r>  Úclearr€   Úbatch_decode)rŒ   r%  ÚrequestsÚjobr)  r*  r  r  Úinputs_embedsÚ
image_maskÚposition_idsÚrope_deltasÚactive_maskÚresultsÚtoken_id_listss                  r%   Ú"_vlm_prompts_from_embeds_lm_enginez5ChainOfZoomRuntime._vlm_prompts_from_embeds_lm_engine&  sÕ  € àˆØð 	rñ 	rˆCØ˜KÔ(×+Ò+¨D¬KÑ8Ô8ˆIØ ŸWšWÐ%5Ñ6Ô6ˆNØ?MÐ?Y˜^×.Ò.¨t¬{Ñ;Ô;Ð;Õ_dÔ_nÐoxð  BFô  BMð  `Nñ  `Nô  `NˆNØ Ð!1Ô2×5Ò5°d´kÑBÔBˆNØ˜~Ô.ˆLØ œM×6Ò6°yÑAÔAˆMØ" d¤oÔ&DÒDˆJÝ�:—>’>Ñ#Ô#Ñ$Ô$¨Ô(:¸1Ô(=Ò=Ð=Ý ð  "HÍcÐR\×R`ÒR`ÑRbÔRbÑNcÔNcð  "Hð  "HÐp|ô  qCð  DEô  qFð  "Hð  "Hñ  Iô  Ið  IØ'Ÿ?š?°$´+À]ÔEX˜?ÑYÔYˆLØ)×8Ò8¸×9MÒ9MÈbÑ9QÔ9Q×9[Ò9[Ð\iÑ9jÔ9jÐlxÑyÔyˆMØ(,¬¬×(EÒ(EÀiÐ`nð  @NÐ(Eñ  )Oô  )OÑ%ˆL˜+Ø(¨Ô+×0Ò0Ñ2Ô2ˆKØ�OŠOØ$fÐ$fÀ9ÈQÄ<ÐP[ÔC\×CcÒCcÑCeÔCeÐ$fÑ$fÔ$fØ!.¨q°+¨~Ô!>×!IÒ!IÑ!KÔ!K×!OÒ!OÑ!QÔ!QØ'3°A°A°A°q¸+Ð4EÔ'F×'QÒ'QÑ'SÔ'S×'WÒ'WÑ'YÔ'YÝMRÌ_Ð]hÑMiÔMið  $MÐny×nÒnñ  oBô  oBð  EFò  oFð  oF¥3 {×':Ò':¸2Ñ'>Ô'>¸qÔ'A×'FÒ'FÑ'HÔ'HÑ#IÔ#IÐ#Ið  LMð	ð ñ ô ð ð ˜>¨>¸=È,ÐXdÐfqÑfqØ”/×9Ò9ØÝ-ØØØØØØØ$ØÝ$ TÔ%?Ô%RÐ%YÐVYÑZÔZð :ñ 
ô 
ˆð 	�ŠÑÔÐØlÐlÐ^eÐ^kÐikÐlÑlÔlˆð \ð  \¨TÔ-?×-LÒ-LÈ^Ðquð  UZÐ-Lñ  .[ô  .[ð  \ñ  \ô  \ð  	\r$   c                óÆ  — t          j        d„ |D ¦   «         d¬¦  «                             | j        ¦  «        }t          j        d„ |D ¦   «         d¬¦  «                             | j        ¦  «        }t          j        d„ |D ¦   «         d¬¦  «                             | j        ¦  «        }t          j        d„ |D ¦   «         d¬¦  «        } | j        j                             ¦   «         |¦  «        }|| j        j        j        k    }t          | 
                    ¦   «         ¦  «        |j        d         k    r?t          dt          | 
                    ¦   «         ¦  «        › d|j        d         › �¦  «        ‚|                     | j        |j        ¬	¦  «        }|                     |                     d
¦  «                             |¦  «        |¦  «        }d | j        j        _        | j        j                             |||¬¦  «        \  }}	|	| j        j        _        | j        j        }
t+          |
t          ¦  «        r|
hnt-          |
pg ¦  «        }
|
r)t          t/          t1          |
¦  «        ¦  «        ¦  «        nd }t3          | j        j        pd¦  «        }g }t          j        |j        d         df| j        t           j        ¬	¦  «        }d }|}|}|}t          j        |j        d         | j        t           j        ¬	¦  «        }t?          | j        j        j         j!        ¦  «        5  tE          tF          ¦  «        D �]3}|                      ||||||d|d¬¦	  «	        }|j$        d d …d
d d …f         }|dk    r„|rt          j        |g|z   d¬¦  «        n|}tE          |j        d         ¦  «        D ]K}t          j%        ||         ¦  «        }|||f         }t          j&        |dk     ||z  ||z  ¦  «        |||f<   ŒL| '                    d
d¬¦  «        }|�)t          j&        |t          j(        ||¦  «        |¦  «        }| )                    |¦  «         |j*        }~~|
rWt          j+        |¦  «        }|
D ]}||t          |¦  «        k    z  }Œ||z  }t9          | ,                    ¦   «         ¦  «        r n½t          j        || -                    |j        d         df¦  «        gd¬¦  «        }|d
d …         dz   }|}d }| .                    ddd
¦  «         /                    d|j        d         d
¦  «        |	 .                    d|j        d         d¦  «                             | j        ¦  «        z   }�Œ5d d d ¦  «         n# 1 swxY w Y   t          j        |d¬¦  «        }| j0         1                    | 2                    ¦   «         dd¬¦  «        }~~~~~~~	~~~~d„ |D ¦   «         S )Nc                ó   — g | ]
}|d          ‘ŒS )r)  r#   ©r^   r^  s     r%   rb   zFChainOfZoomRuntime._vlm_prompts_from_embeds_legacy.<locals>.<listcomp>P  s   € Ð@Ð@Ð@°C˜s ;Ô/Ð@Ð@Ð@r$   r   r  c                ó|   — g | ]9}|                      d ¦  «        �|d          nt          j        |d         ¦  «        ‘Œ:S )r*  Nr)  )rA  ri   rK  ri  s     r%   rb   zFChainOfZoomRuntime._vlm_prompts_from_embeds_legacy.<locals>.<listcomp>Q  sX   € ð $
ð $
ð $
àð &)§W¢WÐ-=Ñ%>Ô%>Ð%JˆCÐ Ô!Ð!ÕPUÔP_Ð`cÐdoÔ`pÑPqÔPqð$
ð $
ð $
r$   c                ó   — g | ]
}|d          ‘ŒS r  r#   ri  s     r%   rb   zFChainOfZoomRuntime._vlm_prompts_from_embeds_legacy.<locals>.<listcomp>U  s   € Ð#JÐ#JÐ#J¸c CÐ(8Ô$9Ð#JÐ#JÐ#Jr$   c                ó   — g | ]
}|d          ‘ŒS )r  r#   ri  s     r%   rb   zFChainOfZoomRuntime._vlm_prompts_from_embeds_legacy.<locals>.<listcomp>V  s   € Ð!FÐ!FÐ!F¸# # nÔ"5Ð!FÐ!FÐ!Fr$   r,  r-  rf   rN   r.  r5  r   T)	r)  r_  r*  ra  r  Úpast_key_valuesÚ	use_cacheÚcache_positionÚlogits_to_keep)r  Úkeepdimé   FrH  c                ó6   — g | ]}|                      ¦   «         ‘ŒS r#   rD  rF  s     r%   rb   zFChainOfZoomRuntime._vlm_prompts_from_embeds_legacy.<locals>.<listcomp>”  s    € Ð5Ð5Ð5 6�—’‘”Ð5Ð5Ð5r$   )3ri   r  r  rg   r   r­   Úget_input_embeddingsrÔ   rM  rD   r  r  rN  rh   rO  rP  rQ  rb  rR  r|   Úeos_token_idÚ
isinstanceÚsetÚnextÚiterrZ  r>  Úzerosr/   ÚarangeÚlongr   r±   ÚlayersrP   rY  ÚlogitsÚuniqueÚwhereÚargmaxÚ	full_likerQ   rm  Ú
zeros_likeÚallÚnew_onesÚviewÚexpandr€   r\  ru   ) rŒ   r%  r)  r*  r  r  r_  r`  ra  rb  Úeos_token_idsÚforced_eos_token_idr>  Ú	generatedÚfinishedrm  Úcurrent_input_idsÚcurrent_inputs_embedsÚcurrent_position_idsro  Ú_Úoutputr~  Úprevious_tokensÚrow_noÚprevious_idsÚprevious_scoresÚ
next_tokenÚtoken_finishedru  Úgenerated_idsÚpromptss                                    r%   Ú_vlm_prompts_from_embeds_legacyz2ChainOfZoomRuntime._vlm_prompts_from_embeds_legacyO  sæ  € Ý”IÐ@Ð@¸4Ð@Ñ@Ô@ÀaÐHÑHÔH×KÒKÈDÌKÑXÔXˆ	Ýœð $
ð $
àð$
ñ $
ô $
ð ðñ ô ÷ ’"�T”[‘/”/ð 	õ œÐ#JÐ#JÀTÐ#JÑ#JÔ#JÐPQÐRÑRÔR×UÒUÐVZÔVaÑbÔbˆÝ”yÐ!FÐ!FÀÐ!FÑ!FÔ!FÈAÐNÑNÔNˆØ=˜œœ×;Ò;Ñ=Ô=¸iÑHÔHˆØ $¤(¤/Ô"@Ò@ˆ
Ýˆz�~Š~ÑÔÑ Ô  LÔ$6°qÔ$9Ò9Ð9Ýð  DÍ#ÈjÏnÊnÑN^ÔN^ÑJ_ÔJ_ð  Dð  DÐlxÔl~ð  @Aô  mBð  Dð  Dñ  Eô  Eð  EØ#—’¨d¬kÀÔAT�ÑUÔUˆØ%×4Ò4°Z×5IÒ5IÈ"Ñ5MÔ5M×5WÒ5WÐXeÑ5fÔ5fÐhtÑuÔuˆØ%)ˆŒŒÔ"Ø$(¤H¤N×$AÒ$AÀ)Ð\jð  |JÐ$Añ  %Kô  %KÑ!ˆ�kØ%0ˆŒŒÔ"ØÔ2Ô?ˆÝ+5°mÅSÑ+IÔ+IÐg˜˜˜ÍsÐS`ÐSfÐdfÑOgÔOgˆØ@MÐW�c¥$¥t¨MÑ':Ô':Ñ";Ô";Ñ<Ô<Ð<ÐSWÐÝ" 4Ô#=Ô#PÐ#WÐTWÑXÔXÐØˆ	Ý”; 	¤°Ô 2°AÐ6¸t¼{ÕRWÔR\Ð]Ñ]Ô]ˆØˆØ%ÐØ -ÐØ+ÐÝœ i¤o°aÔ&8ÀÄÕTYÔT^Ð_Ñ_Ô_ˆÝ ¤¤Ô =Ô DÑEÔEð %	dð %	dÝÕ1Ñ2Ô2ð $dñ $d�ØŸšØ/Ø"7Ø#1Ø!5Ø#1Ø$3Ø"Ø#1Ø#$ð "ñ 
ô 
�ð  œ q q q¨"¨a¨a¨a xÔ0�Ø%¨Ò,Ð,ØS\Ð&k¥e¤i°°¸iÑ0GÈQÐ&OÑ&OÔ&OÐ&OÐbk�OÝ"'¨	¬¸Ô(:Ñ";Ô";ð dð d˜Ý',¤|°OÀFÔ4KÑ'LÔ'L˜Ø*0°¸Ð1EÔ*F˜Ý7<´{À?ÐUVÒCVÐXgÐj|ÑX|ð  Nð  Qcñ  cñ  8dô  8d˜˜v |Ð3Ñ4Ð4Ø#Ÿ]š]¨r¸4˜]Ñ@Ô@�
Ø&Ð2Ý!&¤¨Xµu´ÀzÐSfÑ7gÔ7gÐisÑ!tÔ!t�JØ× Ò  Ñ,Ô,Ð,Ø"(Ô"8�Ø˜FØ ð Ý%*Ô%5°hÑ%?Ô%?�NØ(5ð Jð J˜Ø&¨*½¸LÑ8IÔ8IÒ*IÑI˜˜Ø Ñ.�HÝ˜HŸLšL™NœNÑ+Ô+ð Ø˜Ý!&¤¨N¸N×<SÒ<SÐUcÔUiÐjkÔUlÐnoÐTpÑ<qÔ<qÐ+rÐxyÐ!zÑ!zÔ!z�Ø!/°°°Ô!4°qÑ!8�Ø$.Ð!Ø(,Ð%Ø'5×':Ò':¸1¸aÀÑ'DÔ'D×'KÒ'KÈAÈyÌÐ_`ÔOaÐceÑ'fÔ'fÐit×iyÒiyÐz{ð  ~Gô  ~Mð  NOô  ~Pð  RSñ  jTô  jT÷  jWò  jWð  X\ô  Xcñ  jdô  jdñ  (dÐ$Ñ$ðK%	dð %	dð %	dñ %	dô %	dð %	dð %	dð %	dð %	dð %	dð %	døøøð %	dð %	dð %	dð %	dõL œ	 )°Ð3Ñ3Ô3ˆØÔ$×1Ò1°-×2CÒ2CÑ2EÔ2EÐ[_ð  DÐ1ñ  Eô  EˆØ�~ ~°}ÀlÐT`ÐbmÐo|ð  Hð  JRð  TcØ5Ð5¨WÐ5Ñ5Ô5Ð5s   Ì&I
U<Õ<V ÖV Nr˜  r7   r   Úprogress_startÚprogress_totalú(tuple[torch.Tensor, torch.Tensor] | Nonec	                óR  — g }	g }
t          |¦  «        }t          t          d|t          ¦  «        ¦  «        D �]H\  }}t	          |¦  «        r d S ||z   dz   }t          ||||¦  «          ||||t          z   …         dt          dd¬¦  «        j        }t          |j	        j
        j        ¦  «        5   ||                     | j        ¦  «        d¬¦  «        }d d d ¦  «         n# 1 swxY w Y   |	                     |j        d                              | j        ¦  «                             ¦   «         ¦  «         |
                     |d                              | j        ¦  «                             ¦   «         ¦  «         ~~�ŒJt%          j        |	¦  «        t%          j        |
¦  «        fS )	Nr   r   Ú
max_lengthTrþ   )r  rž  Ú
truncationr  )Úoutput_hidden_stateséþÿÿÿ)ÚlenÚ	enumeraterP   ÚCOZ_CLIP_TEXT_BATCH_SIZEr4   r>   ÚCOZ_CLIP_MAX_LENGTHr)  r   Ú
text_modelÚencoderr}  r  rg   rQ   Úhidden_statesrh   ru   ri   r  )rŒ   Útext_encoderr¯   r˜  r7   rš  r›  r3   r=   Úhidden_batchesÚpooled_batchesÚtotalÚbatch_noÚstartr8   Úidsr�  s                    r%   Ú_encode_clip_promptsz'ChainOfZoomRuntime._encode_clip_prompts–  só  € ØˆØˆÝ�G‘”ˆÝ(­¨q°%Õ9QÑ)RÔ)RÑSÔSð 
	ñ 
	‰OˆH�eÝ Ñ/Ô/ð Ø�t�tØ)¨HÑ4°qÑ8ˆLÝÐ.°°|À^ÑTÔTÐTØ�)˜G E¨%Õ2JÑ*JÐ$JÔKÐUaõ  oBð  OSð  dhð  iñ  iô  iô  sˆCÝ# LÔ$;Ô$CÔ$JÑKÔKð Vð VØ%˜ c§f¢f¨T¬[Ñ&9Ô&9ÐPTÐUÑUÔU�ðVð Vð Vñ Vô Vð Vð Vð Vð Vð Vð Vøøøð Vð Vð Vð Và×!Ò! &Ô"6°rÔ":×"=Ò"=¸d¼jÑ"IÔ"I×"MÒ"MÑ"OÔ"OÑPÔPÐPØ×!Ò! &¨¤)§,¢,¨t¬zÑ":Ô":×">Ò">Ñ"@Ô"@ÑAÔAÐAØ�V‘VÝŒy˜Ñ(Ô(­%¬)°NÑ*CÔ*CÐCÐCs   Â1&C#Ã#C'	Ã*C'	útorch.Tensor | Nonec           	     ó²  — g }t          |¦  «        }t          t          d|t          ¦  «        ¦  «        D �]\  }	}
t	          |¦  «        r d S ||	z   dz   }t          ||||¦  «         |                      ||
|
t          z   …         dt          ddd¬¦  «        j        }t          | j
        j        j        ¦  «        5  |                     |  
                    |                     | j        ¦  «        ¦  «        d                              | j        ¦  «                             ¦   «         ¦  «         d d d ¦  «         n# 1 swxY w Y   ~�Œt%          j        |¦  «        S )Nr   r   rž  Trþ   )r  rž  rŸ  Úadd_special_tokensr  )r¢  r£  rP   ÚCOZ_T5_TEXT_BATCH_SIZEr4   r>   r   ÚCOZ_T5_MAX_LENGTHr)  r   r   r§  ÚblockrQ   r  rg   rh   ru   ri   r  )rŒ   r˜  r7   rš  r›  r3   r=   Úbatchesr¬  r­  r®  r8   r¯  s                r%   Ú_encode_t5_promptsz%ChainOfZoomRuntime._encode_t5_prompts§  s£  € ØˆÝ�G‘”ˆÝ(­¨q°%Õ9OÑ)PÔ)PÑQÔQð 	ñ 	‰OˆH�eÝ Ñ/Ô/ð Ø�t�tØ)¨HÑ4°qÑ8ˆLÝÐ.°°|À^ÑTÔTÐTØ×#Ò# G¨E°%Õ:PÑ2PÐ,PÔ$QÐ[gõ  uFð  SWð  lpð  AEÐ#ñ  Fô  Fô  PˆCÝ# D¤G¤OÔ$9Ñ:Ô:ð Uð UØ—’˜tŸwšw s§v¢v¨d¬kÑ':Ô':Ñ;Ô;¸AÔ>×AÒAÀ$Ä*ÑMÔM×QÒQÑSÔSÑTÔTÐTðUð Uð Uñ Uô Uð Uð Uð Uð Uð Uð Uøøøð Uð Uð Uð Uà‘ÝŒy˜Ñ!Ô!Ð!s   Â:A1D7Ä7D;	Ä>D;	r?   ú3dict[str, tuple[torch.Tensor, torch.Tensor]] | Nonec           
     óþ  — t          t                               |¦  «        ¦  «        }t          t	          |¦  «        t
          ¦  «        }t          t	          |¦  «        t          ¦  «        }|dz  |z   }|                      | j        | j	        |t          d|¦  «        d|||¬¦  «        }	|	€d S |                      | j        | j        |t          d|¦  «        ||||¬¦  «        }
|
€d S |                      |t          d|¦  «        |dz  |||¬¦  «        }|€d S i }|	\  }}|
\  }}t          |¦  «        D ]Ë\  }}t          j        |||dz   …         |||dz   …         gd¬	¦  «        }t          j        j                             |d|j        d         |j        d         z
  f¦  «        }t          j        ||||dz   …         gd
¬	¦  «        }t          j        |||dz   …         |||dz   …         gd¬	¦  «        }||f||<   ŒÌ|S )Nr   zText Encoding CLIP-Lr   ©r3   r=   zText Encoding CLIP-GzText Encoding T5r   rN   r  r¡  )rO   ÚdictÚfromkeysrH   r¢  r¤  r´  r°  r   r}   rB   r   r~   r¸  r£  ri   r  rÙ   Ú
functionalÚpadr  )rŒ   r˜  r?   r3   r=   Úunique_promptsÚclip_batchesÚ
t5_batchesÚtext_progress_totalÚclip1Úclip2Út5_embÚembeds_cacheÚ	clip1_embÚpool1Ú	clip2_embÚpool2Ú	prompt_norG  Úclip_embÚ
prompt_embÚ
pooled_embs                         r%   Ú_encode_promptsz"ChainOfZoomRuntime._encode_promptsµ  s–  € Ý�dŸmšm¨GÑ4Ô4Ñ5Ô5ˆÝ#¥C¨Ñ$7Ô$7Õ9QÑRÔRˆÝ!¥# nÑ"5Ô"5Õ7MÑNÔNˆ
Ø*¨QÑ.°Ñ;ÐØ×)Ò)¨$¬+°tÔ7GÈÕYcÐdzð  }Gñ  ZHô  ZHð  JKð  M`ð  qð  SdÐ)ñ  eô  eˆØˆ=Ø�4Ø×)Ò)¨$¬+°tÔ7GÈÕYcÐdzð  }Gñ  ZHô  ZHð  JVð  Xkð  |Jð  ^oÐ)ñ  pô  pˆØˆ=Ø�4Ø×(Ò(¨½ÐDVÐXbÑ9cÔ9cÐeqÐtuÑeuð  xKð  \jð  ~OÐ(ñ  Pô  PˆØˆ>Ø�4ØˆØ Ñˆ	�5Ø Ñˆ	�5Ý!*¨>Ñ!:Ô!:ð 	<ð 	<ÑˆI�vÝ”y )¨I°iÀ!±mÐ,CÔ"DÀiÐPYÐZcÐfgÑZgÐPgÔFhÐ!iÐoqÐrÑrÔrˆHÝ”xÔ*×.Ò.¨x¸!¸V¼\È"Ô=MÐPXÔP^Ð_aÔPbÑ=bÐ9cÑdÔdˆHÝœ H¨f°Y¸yÈ1¹}Ð5LÔ.MÐ#NÐTVÐWÑWÔWˆJÝœ E¨)°IÀ±MÐ*AÔ$BÀEÈ)ÐT]Ð`aÑTaÐJaÔDbÐ#cÐikÐlÑlÔlˆJØ$.°
Ð#;ˆL˜Ñ Ð ØÐr$   rû   Ú	out_widthÚ
out_heightr:  úImage.Image | Nonec	                ó&  ‡ ‡6‡7‡8‡9‡:‡;— |                      ||ft          j        ¦  «        Š;|dz  |dz  c}	Š6t          t          |	¦  «        Š9t          t          ‰6¦  «        Š:t          d‰9t          z
  ¦  «        }
t          d‰:t          z
  ¦  «        Š7ˆ6ˆ7ˆ:fd„t          |	‰9|
¦  «        D ¦   «         }t          |¦  «        }ddl	m
} ddlm} ‰                      |‰;                     |d         d         dz  |d         d         dz  |d         d         ‰:z   dz  |d         d         ‰9z   dz  f¦  «        ¦  «        }d„ |                     ¦   «         D ¦   «         }t!          |d         d                              ¦   «         ¦  «        }|d	                              ¦   «         d
|v r|d
                              ¦   «         nd |d         d d…                              ¦   «         |d         d |…                              ¦   «         |d         dd …                              ¦   «         dœŠ8d.ˆ ˆ8fd„}g }t'          d|¦  «        } |t          dt          t!           |¦   «         ¦  «        ‰ j        ¦  «        ¦  «        ¬¦  «        5 }t+          d|‰ j        ¦  «        D �]F}t-          |¦  «        r d d d ¦  «         d S |||‰ j        z   …         }t/          |||t          |¦  «        z   |¦  «         |dk    r
|dd …         }ˆ9ˆ:ˆ;fd„|D ¦   «         }|dk    r|gng t1          |                     ||¦  «        ¦  «        z   }~‰                      |¦  «        }t7          ||¦  «        D ]z\  }}|                     d
¦  «        }|                     |d	                              ¦   «         |�|                     ¦   «         nd |d                              ¦   «         |dœ¦  «         Œ{~~�ŒH	 d d d ¦  «         n# 1 swxY w Y   d x}Š8g }t'          d|¦  «        }‰ j        �rC|�r@t          d„ |D ¦   «         ¦  «        }‰ j                              |tB          dt          ‰ j"        t          |¦  «        ¦  «        ¬¦  «         t+          dt          |¦  «        ‰ j"        ¦  «        D ]¿}t-          |¦  «        r d S |||‰ j"        z   …         } t/          |||t          | ¦  «        z   |¦  «         tG          ‰  $                    | ¦  «        ¦  «        D ];\  }!}"|                     |"¦  «         tK          d|› d||!z   dz   › d|› d|"› �¦  «         Œ<| D ]}#|# &                    ¦   «          ŒŒÀnãt+          dt          |¦  «        ‰ j"        ¦  «        D ]¿}t-          |¦  «        r d S |||‰ j"        z   …         } t/          |||t          | ¦  «        z   |¦  «         tG          ‰  '                    | ¦  «        ¦  «        D ];\  }!}"|                     |"¦  «         tK          d|› d||!z   dz   › d|› d|"› �¦  «         Œ<| D ]}#|# &                    ¦   «          ŒŒÀ| &                    ¦   «          ‰ j        r ‰ j        �‰ j         (                    ¦   «          ‰  )                    ||||¬¦  «        }$|$€d S t-          |¦  «        rd S t/          |t'          d|¦  «        ¦  «         tU          j+        tY          j-        ‰;¦  «        ¦  «         .                    d dd¦  «         /                    d¦  «         0                    ‰ j1        ‰ j2        ¬!¦  «         3                    d"¦  «         4                    d¦  «        }%tU          j5        ‰ j1        ¬#¦  «         6                    |¦  «        }&to          d$„ ‰ j8         9                    ¦   «         D ¦   «         ¦  «        5  ‰ j8         :                    |%¦  «        j;         <                    |&¦  «        ‰ j8        j=        j>        z  }'d d d ¦  «         n# 1 swxY w Y   ~%t          ‰:‰9‰ j1        ¦  «        }(tU          j@        |'tT          jA        ¬%¦  «        })tU          j@        |'tT          jA        ¬%¦  «        }*tU          jB        t†          g‰ j1        ‰ j2        ¬!¦  «        }+t'          d&|¦  «        },t/          ||,d|¦  «         tG          |¦  «        D �]\  }-\  }.}/t-          |¦  «        r d S |$||-                  \  }0}1|'d d …d d …|.|.‰9z   …|/|/‰:z   …f         }2‰  D                    |2|+|0 0                    ‰ j1        ‰ j2        ¬!¦  «        |1 0                    ‰ j1        ‰ j2        ¬!¦  «        ¦  «        }3|2|3z
   E                    ¦   «         }4|)d d …d d …|.|.‰9z   …|/|/‰:z   …fxx         |4|(z  z  cc<   |*d d …d d …|.|.‰9z   …|/|/‰:z   …fxx         |(z  cc<   ~2~3~4t/          ||,|-dz   |¦  «         �Œ|$ &                    ¦   «          |)|*d'z   z   0                    ‰ j2        ¦  «        }'~)~*t-          |¦  «        rd S t/          |t'          d(|¦  «        ¦  «         to          d)„ ‰ j8         9                    ¦   «         D ¦   «         ¦  «        5  ‰ j8         F                    |'‰ j8        j=        j>        z  d*¬+¦  «        d          G                    d,d¦  «        }5d d d ¦  «         n# 1 swxY w Y   ~'|5d          E                    ¦   «          H                    d¦  «         I                    d"¦  «         J                    ¦   «          K                    dd-¦  «         0                    tT          jL        ¦  «         .                    dd d¦  «                             ¦   «          M                    ¦   «         }5t          jN        |5¦  «        S )/Nr   r   c                ó@   •— g | ]}t          ‰‰‰¦  «        D ]}||f‘ŒŒS r#   )rS   )r^   Úy0Úx0Úlatent_widthÚstride_wÚtile_ws      €€€r%   rb   z/ChainOfZoomRuntime._sr_step.<locals>.<listcomp>Õ  sf   ø€ ð  Tð  Tð  T "ÕcrÐsð  BHð  JRñ  dSô  dSð  Tð  TÐ]_�b˜"�Xð  Tð  Tð  Tð  Tr$   r   )ÚThreadPoolExecutor)Úget_default_workersc                ój   — i | ]0\  }}|t          j        |¦  «        r|                     ¦   «         n|“Œ1S r#   )ri   rT  ru   )r^   ÚkeyÚvalues      r%   ú
<dictcomp>z/ChainOfZoomRuntime._sr_step.<locals>.<dictcomp>ä  s<   € ÐuÐuÐuÑR\ÐRUÐW\˜­E¬O¸EÑ,BÔ,BÐM˜UŸYšY™[œ[˜[ÈÐuÐuÐur$   r  r)  r*  r  )r)  r*  Úcontext_gridÚcontext_pixel_valuesÚ	tile_gridrô   ró   r'   r¼  c                óì  •— ‰j                              | gd¬¦  «        }|d                              ¦   «         }t          j        |‰d         ¦  «        s?t          d|                     ¦   «         › d‰d                              ¦   «         › �¦  «        ‚‰d         ‰d         t          j        ‰d	         |gd
¬¦  «        t          j        ‰d         |d                              ¦   «         gd
¬¦  «        dœS )Nrþ   )r   r  r  rã  zVLM tile grid mismatch: z vs r)  r*  rá  r   r  râ  r  )r)  r*  r  r  )r€   Úimage_processorru   ri   ÚequalÚRuntimeErrorr  r  )rô   Útile_featuresrã  rŒ   Útemplates      €€r%   Útile_inputsz0ChainOfZoomRuntime._sr_step.<locals>.tile_inputsî  sý   ø€ Ø Ô.×>Ò>ÀzÀlÐcgÐ>ÑhÔhˆMØ%Ð&6Ô7×;Ò;Ñ=Ô=ˆIÝ”;˜y¨(°;Ô*?Ñ@Ô@ð xÝ"Ð#v¸i×>NÒ>NÑ>PÔ>PÐ#vÐ#vÐV^Ð_jÔVk×VrÒVrÑVtÔVtÐ#vÐ#vÑwÔwÐwà% kÔ2Ø"*Ð+;Ô"<Ý"'¤)¨X°nÔ-EÀyÐ,QÐWXÐ"YÑ"YÔ"YÝ %¤	¨8Ð4JÔ+KÈ]Ð[iÔMj×MnÒMnÑMpÔMpÐ*qÐwxÐ yÑ yÔ yð	ð ð r$   z
VLM Vision)Úmax_workersc           	     ól   •— g | ]0\  }}‰                      |d z  |d z  |‰z   d z  |‰z   d z  f¦  «        ‘Œ1S )r   )Úcrop)r^   rÖ  r×  Útile_hrÚ  Úup_images      €€€r%   rb   z/ChainOfZoomRuntime._sr_step.<locals>.<listcomp>  se   ø€ ð  Dð  Dð  DÑioÐikÐmo˜xŸ}š}¨b°1©f°b¸1±f¸rÀF¹{ÈaÑ>OÐRTÐW]ÑR]ÐabÑQbÐ-cÑdÔdð  Dð  Dð  Dr$   )r)  r*  r  r  zVLM Textc              3  óØ   K  — | ]e}|d          �9t          |d                               ¦   «                              ¦   «         ¦  «        nt          |d         j        d         ¦  «        V — ŒfdS )r*  Nr)  rN   )rD   r  rW  r  ri  s     r%   ú	<genexpr>z.ChainOfZoomRuntime._sr_step.<locals>.<genexpr>  sª   è è € ð  !hð  !hð  X[ÈCÐP`ÔLaÐLm¥ SÐ)9Ô%:×%>Ò%>Ñ%@Ô%@×%EÒ%EÑ%GÔ%GÑ!HÔ!HÐ!HÕsvÐwzð  |Gô  xHô  xNð  OQô  xRñ  tSô  tSð  !hð  !hð  !hð  !hð  !hð  !hr$   r5  )Ú
prompt_lenr6  r9  Únum_seqsz[Chain-of-Zoom] z
 VLM tile ú/z	 prompt: r»  z
VAE Encoder   rf   ç     à_@r+  c              3  ó(   K  — | ]}|j         °	|V — Œd S r)   ©Ú_modules©r^   Úmodules     r%   rñ  z.ChainOfZoomRuntime._sr_step.<locals>.<genexpr>?  ó)   è è € Ð_Ð_¨6ÈvÌÐ_ Ð_Ð_Ð_Ð_Ð_Ð_r$   )rh   Ú	Diffusiong»½×Ùß|Û=z
VAE Decodec              3  ó(   K  — | ]}|j         °	|V — Œd S r)   r÷  rù  s     r%   rñ  z.ChainOfZoomRuntime._sr_step.<locals>.<genexpr>]  rû  r$   F)Úreturn_dictrN   éÿ   )rô   ró   r'   r¼  )OÚresizer   ÚLANCZOSÚminÚCOZ_LATENT_TILE_SIZEÚmaxÚCOZ_LATENT_TILE_OVERLAPrS   r¢  Úconcurrent.futuresrÛ  Úshared.utils.utilsrÜ  r  rí  ÚitemsrD   r  ru   rB   rˆ   rP   r4   r>   rO   Úmapr$  ÚziprA  rQ   r…   rz   Úreserve_runtimerY  rŠ   r£  rf  rË   r[  r™  rå   rÐ  ri   Ú
from_numpyrk   ÚarrayÚpermuterP  r  rg   rh   Údiv_Úsub_Ú	GeneratorÚmanual_seedr   r   ÚmodulesÚencodeÚlatent_distÚsamplerÔ   Úscaling_factorrp   rƒ  rm   rj   ÚCOZ_TIMESTEPr   rZ  ÚdecodeÚclampÚadd_Úmul_Úround_Úclamp_Úuint8ÚnumpyÚ	fromarray)<rŒ   rû   rò   rÑ  rÒ  r:  r?   r3   r=   Úlatent_heightÚstride_hrR   Útotal_tilesrÛ  rÜ  Úfirst_inputsÚcontext_patchesrê  Úvlm_jobsÚvision_phaseÚexecutorÚbatch_startÚbatch_positionsÚtile_imagesr  Úimage_embeds_batchr  r  r*  r˜  Ú
text_phaseÚmax_prompt_lenÚ
batch_jobsÚtile_offsetrG  r^  rÇ  Úx_fullÚ	generatorÚz_fullÚweightsÚz_accÚnormÚtimestepÚdiffusion_phaseÚtile_norÖ  r×  rÎ  rÏ  ÚpatchÚpred_vÚtile_outr�  rØ  rÙ  ré  rî  rÚ  rï  s<   `                                                     @@@@@@r%   Ú_sr_stepzChainOfZoomRuntime._sr_stepÎ  sª  øøøøøøø€ Ø—<’< ¨JÐ 7½¼ÑGÔGˆØ&0°A¡o°yÀA±~Ð#ˆ�|ÝÕ)¨=Ñ9Ô9ˆÝÕ)¨<Ñ8Ô8ˆÝ�q˜&Õ#:Ñ:Ñ;Ô;ˆÝ�q˜&Õ#:Ñ:Ñ;Ô;ˆð Tð  Tð  Tð  Tð  Tð  T­¸ÀvÈxÑ(XÔ(Xð  Tñ  Tô  Tˆ	Ý˜)‘n”nˆð 	:Ð9Ð9Ð9Ð9Ð9Ø:Ð:Ð:Ð:Ð:Ð:à×'Ò'¨°x·}²}ÀiÐPQÄlÐSTÄoÐXYÑFYÐ[dÐefÔ[gÐhiÔ[jÐmnÑ[nÐqzÐ{|Ôq}Ð~ô  rAð  DJñ  rJð  NOñ  qOð  R[ð  \]ô  R^ð  _`ô  Rað  djñ  Rjð  noñ  Qoð  Fpñ  8qô  8qñ  rô  rˆàuÐuÐ`l×`rÒ`rÑ`tÔ`tÐuÑuÔuˆÝ˜lÐ+;Ô<¸QÔ?×DÒDÑFÔFÑGÔGˆà% kÔ2×6Ò6Ñ8Ô8ØFVÐZfÐFfÐFf˜lÐ+;Ô<×@Ò@ÑBÔBÐBÐlpØ(Ð)9Ô:¸2¸A¸2Ô>×BÒBÑDÔDØ$0°Ô$@ÐAQÀ/ÐAQÔ$R×$VÒ$VÑ$XÔ$XØ%Ð&6Ô7¸¸¸Ô;×?Ò?ÑAÔAð
ð 
ˆð
	ð 
	ð 
	ð 
	ð 
	ð 
	ð 
	ð ˆÝ! ,°
Ñ;Ô;ˆØÐ­C°µ3µsÐ;NÐ;NÑ;PÔ;PÑ7QÔ7QÐSWÔShÑ3iÔ3iÑ,jÔ,jÐkÑkÔkð 	5ÐowÝ$ Q¨°TÔ5JÑKÔKð 5ñ 5�Ý# NÑ3Ô3ð  Øð	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð #,¨K¸ÀdÔF[Ñ8[Ð,[Ô"\�Ý Ð!2°LÀ+ÕPSÐTcÑPdÔPdÑBdÐfqÑrÔrÐrØ !Ò#Ð#Ø&5°a°b°bÔ&9�Oð Dð  Dð  Dð  Dð  Dð  Dð  tCð  Dñ  Dô  D�Ø2=ÀÒ2BÐ2B   ÈÍdÐS[×S_ÒS_Ð`kÐmxÑSyÔSyÑNzÔNzÑz�ØØ%)×%<Ò%<¸\Ñ%JÔ%JÐ"Ý,/°Ð>PÑ,QÔ,Qð ð Ñ(�F˜LØ%+§Z¢ZÐ0@Ñ%AÔ%A�NØ—O’OØ%+¨KÔ%8×%<Ò%<Ñ%>Ô%>ØBPÐB\¨.×*<Ò*<Ñ*>Ô*>Ð*>ÐbfØ*0Ð1AÔ*B×*FÒ*FÑ*HÔ*HØ(4ð	%ð %ñ ô ð ð ð !Ð"4Ñ"4ð'5ð	5ð 	5ð 	5ñ 	5ô 	5ð 	5ð 	5ð 	5ð 	5ð 	5ð 	5øøøð 	5ð 	5ð 	5ð 	5ð* #'Ð&ˆ�xàˆÝ 
¨JÑ7Ô7ˆ
ØÔñ 	  (ñ 	 Ý ð  !hð  !hð  _gð  !hñ  !hô  !hñ  hô  hˆNØŒO×+Ò+°~ÕRhÐtwõ  CFð  GKô  G\õ  ^að  bjñ  ^kô  ^kñ  Clô  ClÐ+ñ  mô  mð  mÝ$ Q­¨H©¬°tÔ7LÑMÔMð 	 ð 	 �Ý# NÑ3Ô3ð  Ø˜4˜4Ø% k°+ÀÔ@UÑ2UÐ&UÔV�
Ý Ð!2°JÀÍcÐR\ÉoÌoÑ@]Ð_jÑkÔkÐkÝ+4°T×5\Ò5\Ð]gÑ5hÔ5hÑ+iÔ+ið Cð CÑ'�K Ø—N’N 6Ñ*Ô*Ð*Ýð  B¨Zð  Bð  BÀ;ÐQ\ÑC\Ð_`ÑC`ð  Bð  BÐcnð  Bð  BÐyð  Bð  Bñ  Cô  Cð  Cð  CØ%ð  ð  �CØ—I’I‘K”K�K�Kð ð	 õ  % Q­¨H©¬°tÔ7LÑMÔMð 	 ð 	 �Ý# NÑ3Ô3ð  Ø˜4˜4Ø% k°+ÀÔ@UÑ2UÐ&UÔV�
Ý Ð!2°JÀÍcÐR\ÉoÌoÑ@]Ð_jÑkÔkÐkÝ+4°T×5YÒ5YÐZdÑ5eÔ5eÑ+fÔ+fð Cð CÑ'�K Ø—N’N 6Ñ*Ô*Ð*Ýð  B¨Zð  Bð  BÀ;ÐQ\ÑC\Ð_`ÑC`ð  Bð  BÐcnð  Bð  BÐyð  Bð  Bñ  Cô  Cð  Cð  CØ%ð  ð  �CØ—I’I‘K”K�K�Kð à�ŠÑÔÐØÔð 	: $¤/Ð"=ð ŒO×7Ò7Ñ9Ô9Ð9ð ×+Ò+¨G°ZÐP^ð  sDÐ+ñ  Eô  EˆØÐØ�4õ ˜NÑ+Ô+ð 	Ø�4ÝÐ*­J°|ÀZÑ,PÔ,PÑQÔQÐQÝÔ!¥"¤(¨8Ñ"4Ô"4Ñ5Ô5×=Ò=¸aÀÀAÑFÔF×PÒPÐQRÑSÔS×VÒVÐ^bÔ^iÐquÔq{ÐVÑ|Ô|÷  Bò  Bð  CHñ  Iô  I÷  Nò  Nð  ORñ  Sô  SˆÝ”O¨4¬;Ð7Ñ7Ô7×CÒCÀDÑIÔIˆ	ÝÐ_Ð_°T´X×5EÒ5EÑ5GÔ5GÐ_Ñ_Ô_Ñ_Ô_ð 	lð 	lØ”X—_’_ VÑ,Ô,Ô8×?Ò?À	ÑJÔJÈTÌXÌ_ÔMkÑkˆFð	lð 	lð 	lñ 	lô 	lð 	lð 	lð 	lð 	lð 	lð 	løøøð 	lð 	lð 	lð 	làõ $ F¨F°D´KÑ@Ô@ˆÝÔ  ­u¬}Ð=Ñ=Ô=ˆÝÔ ­e¬mÐ<Ñ<Ô<ˆÝ”<¥ °t´{È$Ì*ÐUÑUÔUˆÝ$ [°*Ñ=Ô=ˆÝÐ*¨O¸QÀÑLÔLÐLÝ!*¨9Ñ!5Ô!5ð 
	[ñ 
	[ÑˆG‘X�b˜"Ý Ñ/Ô/ð Ø�t�tØ%1°'¸'Ô2BÔ%CÑ"ˆJ˜
Ø˜1˜1˜1˜a˜a˜a  B¨¡K °°B¸±K°Ð?Ô@ˆEØ×%Ò% e¨X°z·}²}ÈDÌKÐ_cÔ_i°}Ñ7jÔ7jÐlv×lyÒlyð  BFô  BMð  UYô  U_Ðlyñ  m`ô  m`ñ  aô  aˆFØ ™×-Ò-Ñ/Ô/ˆHØ�!�!�!�Q�Q�Q˜˜2 ™;˜¨¨2°©;¨Ð6Ð7Ð7Ô7¸8ÀgÑ;MÑMÐ7Ð7Ñ7Ø����A�A�A�r˜"˜v™+�~ r¨"¨v©+ ~Ð5Ð6Ð6Ô6¸'ÑAÐ6Ð6Ñ6Ø�v˜xÝÐ.°ÀÈ1ÁÈkÑZÔZÐZÑZØ×ÒÑÔÐØ˜4 %™<Ñ(×,Ò,¨T¬ZÑ8Ô8ˆØ�4õ ˜NÑ+Ô+ð 	Ø�4ÝÐ*­J°|ÀZÑ,PÔ,PÑQÔQÐQÝÐ_Ð_°T´X×5EÒ5EÑ5GÔ5GÐ_Ñ_Ô_Ñ_Ô_ð 	qð 	qØ”X—_’_ V¨d¬h¬oÔ.LÑ%LÐZ_�_Ñ`Ô`ÐabÔc×iÒiÐjlÐnoÑpÔpˆFð	qð 	qð 	qñ 	qô 	qð 	qð 	qð 	qð 	qð 	qð 	qøøøð 	qð 	qð 	qð 	qàØ˜”—’Ñ"Ô"×'Ò'¨Ñ,Ô,×1Ò1°%Ñ8Ô8×?Ò?ÑAÔA×HÒHÈÈCÑPÔP×SÒSÕTYÔT_Ñ`Ô`×hÒhÐijÐlmÐopÑqÔq×uÒuÑwÔw×}Ò}ÑÔˆÝŒ˜vÑ&Ô&Ð&s?   É<*O(Ê3D(O(Ï(O,Ï/O,Þ.A_?ß?`à`é"A	j7ê7j;ê>j;r   ©r:  r3   r=   r  rV   ÚscalerZ  c               óX  — | j         j        dk    rt          d¦  «        ‚t          t	          |¦  «                 }|d d …df         }|j        t          j        k    r<|                     ddd¦  «         	                    ¦   «          
                    ¦   «         }n¶|                     ddd¦  «                             ¦   «                              d¦  «                             d¦  «                             ¦   «                              dd¦  «                             t          j        ¦  «         	                    ¦   «          
                    ¦   «         }|j        d         dk    rt#          j        |d	d¬
¦  «        }t'          j        |¦  «        }	t+          t          |	j        |z  dz  ¦  «        dz  ¦  «        }
t+          t          |	j        |z  dz  ¦  «        dz  ¦  «        }t0          t3          |	j        |	j        ¦  «        z  }|	                     t7          dt+          |	j        |z  ¦  «        ¦  «        t7          dt+          |	j        |z  ¦  «        ¦  «        ft&          j        ¦  «        }t;          d|d›dt=          |¦  «        › d|	j        › d|	j        › d|
› d|› �¦  «         t?          |¦  «        D ]¬\  }}|t=          |¦  «        dz
  k    r|
|}}nTt+          t          |	j        |z  dz  ¦  «        dz  ¦  «        }t+          t          |	j        |z  dz  ¦  «        dz  ¦  «        }|                       |	||||d|dz   › dt=          |¦  «        › �||¬¦  «        }	|	€ d S Œ­t          j!        t#          j"        |	¦  «        ¦  «                             ddd¦  «         #                    d¦  «        }|S )Nrt   zChain-of-Zoom requires CUDA.r   r   r   r5  rõ  rÿ  rr  )Úaxisr   z[Chain-of-Zoom] xÚgz upsampling in z step(s): input=r_   z	, output=zStep rô  r»  )$rg   rú   rç  ÚCOZ_STEP_FACTORSrZ  rh   ri   r  r  ru   r   ÚaddÚmulÚroundr  r  r  rk   Úrepeatr   r!  rD   rT   rU   ÚCOZ_VLM_CONTEXT_SIZEr  r   r  r  rË   r¢  r£  r>  r  r  rP  )rŒ   r  r@  r:  r3   r=   ÚfactorsÚframeÚframe_nprû   Útarget_wÚtarget_hÚcontext_scalerò   Ústep_noÚfactorÚstep_wÚstep_hr�  s                      r%   ÚupscalezChainOfZoomRuntime.upscalec  s¸  € àŒ;Ô˜vÒ%Ð%ÝÐ=Ñ>Ô>Ð>Ý"¥5¨¡<¤<Ô0ˆØ�q�q�q˜!�t”ˆØŒ;�%œ+Ò%Ð%Ø—}’} Q¨¨1Ñ-Ô-×1Ò1Ñ3Ô3×9Ò9Ñ;Ô;ˆHˆHà—}’} Q¨¨1Ñ-Ô-×3Ò3Ñ5Ô5×9Ò9¸#Ñ>Ô>×BÒBÀ5ÑIÔI×OÒOÑQÔQ×WÒWÐXYÐ[^Ñ_Ô_×bÒbÕchÔcnÑoÔo×sÒsÑuÔu×{Ò{Ñ}Ô}ˆHØŒ>˜!Ô Ò!Ð!Ý”y ¨1°1Ð5Ñ5Ô5ˆHÝ” Ñ)Ô)ˆÝ•u˜Uœ[¨5Ñ0°2Ñ5Ñ6Ô6¸Ñ;Ñ<Ô<ˆÝ•u˜Uœ\¨EÑ1°BÑ6Ñ7Ô7¸"Ñ<Ñ=Ô=ˆå,­s°5´;ÀÄÑ/MÔ/MÑMˆØŸš¥c¨!­S°´¸}Ñ1LÑ-MÔ-MÑ&NÔ&NÕPSÐTUÕWZÐ[`Ô[gÐjwÑ[wÑWxÔWxÑPyÔPyÐ%zõ  }Bô  }Jñ  Kô  Kˆåð  S %ð  Sð  Sð  S½#¸g¹,¼,ð  Sð  SÐX]ÔXcð  Sð  SÐfkÔfrð  Sð  Sð  ~Fð  Sð  Sð  IQð  Sð  Sñ  	Tô  	Tð  	TÝ(¨Ñ1Ô1ð 	ð 	‰OˆG�VØ�#˜g™,œ,¨Ñ*Ò*Ð*Ø!)¨8˜��å�U 5¤;°Ñ#7¸"Ñ#<Ñ=Ô=ÀÑBÑCÔC�Ý�U 5¤<°&Ñ#8¸2Ñ#=Ñ>Ô>ÀÑCÑDÔD�Ø—M’M %¨¸ÀÈÐNrÐV]Ð`aÑVaÐNrÐNrÕdgÐhoÑdpÔdpÐNrÐNrð  DRð  fw�Mñ  xô  xˆEØˆ}Ø�t�tð åÔ!¥"¤(¨5¡/¤/Ñ2Ô2×:Ò:¸1¸aÀÑCÔC×MÒMÈaÑPÔPˆØˆr$   ©r'   r;   ©r„   r   rˆ   rD   rŠ   rD   r'   r;   )r'   ré   )rò   ró   rô   ró   )r  rO   r'   r  )r%  r&  r'   r'  ©NN)
r˜  r'  r7   r   rš  rD   r›  rD   r'   rœ  )
r˜  r'  r7   r   rš  rD   r›  rD   r'   r±  )r˜  r'  r?   r   r'   r¹  )rû   ró   rò   ró   rÑ  rD   rÒ  rD   r:  rD   r?   r   r'   rÓ  ©r  rV   r@  rZ  r:  rD   r'   r±  )r   r    r!   r�   r   r‡   r‰   rã   rè   rë   rº   r  r$  rf  r™  r°  r¸  rÐ  r>  ri   Úinference_moderT  r#   r$   r%   rr   rr   ]   s¯  € € € € € ð5ð 5ð 5ð 5ð6 Ø]qð  L`ð Xð Xð Xð Xñ ÔðXðt%ð %ð %ð %ðMð Mð Mð Mð
#%ð #%ð #%ð #%ðJvð vð vð vðAð Að Að Að0'\ð '\ð '\ð '\ðRE6ð E6ð E6ð E6ðNDð Dð Dð Dð Dð""ð "ð "ð "ð "ðð ð ð ð ð2S'ð S'ð S'ð S'ð S'ðj €UÔÑÔØIJÐ[_Ðswð ð ð ð ð ñ Ôðð ð r$   rr   )rˆ   rŠ   r=   r„   rˆ   rŠ   c               óf   — t          |d¦  «         t                               | |||||¬¦  «         d S )NzCoZ Loading Models)rƒ   rÞ   rß   rˆ   rŠ   )r>   Ú_RUNTIMErã   )r„   rÞ   rƒ   rß   rˆ   rŠ   r=   s          r%   Úload_modelsr\  ‡  sM   € ÝÐ&Ð(<Ñ=Ô=Ð=Ý‡M‚M�% °IÈ;Ðiyð  M]€Mñ  ^ô  ^ð  ^ð  ^ð  ^r$   r?  r  r@  rZ  r:  r±  c               ó@   — t                                | ||||¬¦  «        S )Nr?  )r[  rT  )r  r@  r:  r3   r=   s        r%   Úupscale_imager^  Œ  s"   € Ý×Ò˜F E°À^ÐgxÐÑyÔyÐyr$   c                 ó8   — t                                ¦   «          d S r)   )r[  rº   r#   r$   r%   Úrelease_modelsr`  �  s   € Ý×ÒÑÔÐÐÐr$   )r&   r   r'   r   )r'   r/   rW  )r7   r   r8   r9   r:   r9   r5   r9   r6   r9   r'   r;   )r7   r   r?   r   r'   r   )rC   rD   rE   rD   r'   rD   )rI   rD   rJ   rD   rK   rD   r'   rL   )rT   rD   rU   rD   r'   rV   rV  rX  rU  )5Ú__doc__Ú
__future__r   Úshared.utils.media_controlr   r   r   rï   rZ   r*   Údataclassesr   r   rk   ri   ÚPILr   Úmmgpr	   Úshared.utilsr
   r  r  rD  rI  rY  r‡   r‰   rØ   r  r¥  rµ  r¤  r´  r  r+   r,   rÆ   Ú__file__r-   r   r.   r4   r>   rB   rH   rS   rp   rr   r[  r\  r^  r`  r#   r$   r%   ú<module>ri     sù  ððð ð
 #Ð "Ð "Ð "Ð "Ð "Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø QÐ QÐ QÐ QÐ QÐ QÐ QÐ Qà 	€	€	€	Ø €€€Ø 	€	€	€	Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð à Ð Ð Ð Ð Ð Ø )Ð )Ð )Ð )Ð )Ð )ð Ð ØÐ Ø D¨v¸VÐDÐDÐ ØÐ ØÐ ØÐ ØÐ Ø!Ð ð \€ØÐ ØÐ ØÐ ØÐ Ø€àŒw�|Š|˜BœGŸOšO¨HÑ5Ô5°yÑAÔA€ð ðð ð ð ð ñ ô ñ „ðð0ð 0ð 0ð 0ð9ð 9ð 9ð 9ð<ð  RVð  rvð <ð <ð <ð <ð <ð <ð'ð 'ð 'ð 'ðGð Gð Gð Gðð ð ð ðXð Xð Xð Xðdð dð dð dð dñ dô dð dðN ÐÑÔ€ð ^rð  L`ð  txð ^ð ^ð ^ð ^ð ^ð ^ð
 FGÐW[Ðosð zð zð zð zð zð zðð ð ð ð ð r$   