ó
    ˆŽ¡j<»  ã                   ó„  • S SK Jr  S SKrS SKJr  S SKJr  SSKJr	  SSK
Jr  SSKJr  SSKJr  SS	KJr  SS
KJrJrJr  SSKJrJrJrJrJr  SSKJr  SSKJrJ r   SSK!J"r"  SSK#J$r$J%r%  SSK&J'r'J(r(J)r)  SSK*J+r+J,r,J-r-J.r.J/r/J0r0J1r1  SSK2J3r3  SSK4J5r5  SSK6J7r7J8r8  SSK9J:r:J;r;  SSK<J=r=  SSK>J?r?  SSK@JArAJBrBJCrCJDrDJErE  SSKFJGrG  SSKHJIrIJJrJJKrKJLrLJMrM  SSKNJOrO  SSKPJQrQ  SSKRJSrS  \/R¨                  " \U5      rV/ SQrW\-" S S!9\ " S" S#\Q5      5       5       rX\-" S S!9\ " S$ S%\G5      5       5       rY\-" S S!9\ " S& S'\5      5       5       rZ " S( S)\'S*S+9r[\- " S, S-\5      5       r\ " S. S/\?5      r] " S0 S1\M5      r^ " S2 S3\L5      r_ " S4 S5\5      r` " S6 S7\S5      ra\- " S8 S9\%5      5       rb\- " S: S;\b5      5       rc " S< S=\C5      rd " S> S?\I5      re " S@ SA\;5      rf\0 " SB SC\:5      5       rg " SD SE\K5      rh " SF SG\J5      ri " SH SI\A5      rj " SJ SK\B5      rk " SL SM\=5      rl " SN SO\85      rm " SP SQ\75      rn\- " SR SS\(5      5       rog)Té    )ÚCallableN)Ústricté   )Úinitialization)ÚCache)ÚPreTrainedConfig)ÚTorchvisionBackend)ÚBatchFeature)Údivide_to_patchesÚgroup_images_by_shapeÚreorder_images)ÚOPENAI_CLIP_MEANÚOPENAI_CLIP_STDÚ
ImageInputÚPILImageResamplingÚSizeDict)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPooling)ÚROPE_INIT_FUNCTIONS)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚImagesKwargsÚProcessorMixinÚUnpack)Ú
TensorTypeÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚloggingÚno_inherit_decoratorÚ	torch_int)Úcapture_outputs)Úget_vision_position_idsé   )Ú$DeepseekOcr2ForConditionalGenerationÚDeepseekOcr2Model)ÚDeepseekV4ExpertsÚDeepseekV4MLP)ÚGemma3TextModel)ÚKimi_K25VisionRotaryEmbedding)ÚLagunaAttentionÚLagunaDecoderLayerÚLagunaRotaryEmbeddingÚapply_rotary_pos_embÚeager_attention_forward)ÚMiniMaxM3VLTextConfig)ÚMiniMaxM3VLRMSNormÚMiniMaxM3VLSparseMoeBlockÚMiniMaxM3VLTopKRouterÚMiniMaxM3VLVisionAttentionÚMiniMaxM3VLVisionMLP)Úapply_rotary_pos_emb_vision)ÚSiglipVisionConfig)ÚSiglipVisionEmbeddings)
ÚStep3p7ForConditionalGenerationÚStep3p7ModelÚStep3p7PreTrainedModelÚStep3p7TextModelÚStep3p7VisionModelÚStep3p7VisionConfigÚStep3p7TextConfigÚStep3p7ConfigÚStep3p7ImageProcessorÚStep3p7Processorzstepfun-ai/Step-3.7-Flash)Ú
checkpointc                   óÈ   • \ rS rSr% SrSrSrSr\\	S'   Sr
\\	S'   S	r\\	S
'   Sr\\	S'   Sr\\	S'   Sr\\	S'   Sr\\	S'   Sr\\	S'   Sr\\	S'   Sr\S-  \	S'   Sr\\	S'   S rSrg)r?   éX   Ústep3p5_visionÚvision_configÚaxiali   Úhidden_sizeé/   Únum_hidden_layersé   Únum_attention_headséØ  Ú
image_sizeé   Ú
patch_sizeÚ
quick_geluÚ
hidden_actçñhãˆµøä>Úlayer_norm_epsgUUUUUU@Ú	mlp_ratiogš™™™™™¹?Úlayer_scale_init_valueNÚrope_parametersi�
  Úmax_position_embeddingsc                 óˆ  • UR                  SU R                  5      U l        UR                  SU R                  5      U l        UR                  SU R                  5      U l        UR                  SU R                  5      U l        [
        R                  " U 40 UD6  [        U R                  U R                  -  5      U l	        g )NÚwidthÚlayersÚheadsÚls_init_value)
ÚpoprJ   rL   rN   rX   r   Ú__post_init__ÚintrW   Úintermediate_size)ÚselfÚkwargss     Ú¹C:\Users\johnn\AppData\Local\Packages\PythonSoftwareFoundation.Python.3.13_qbz5n2kfra8p0\LocalCache\local-packages\Python313\site-packages\transformers/models/step3p7/modular_step3p7.pyra   Ú!Step3p7VisionConfig.__post_init__m   s•   € Ø!Ÿ:™: g¨t×/?Ñ/?Ó@ˆÔØ!'§¡¨H°d×6LÑ6LÓ!MˆÔØ#)§:¡:¨g°t×7OÑ7OÓ#PˆÔ Ø&,§j¡j°À$×B]ÑB]Ó&^ˆÔ#Ü×&Ò& tÑ6¨vÒ6Ü!$ T×%5Ñ%5¸¿¹Ñ%FÓ!GˆÕó    )rJ   rc   rX   rN   rL   )Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú
model_typeÚbase_config_keyÚdefault_rope_typerJ   rb   Ú__annotations__rL   rN   rP   rR   rT   ÚstrrV   ÚfloatrW   rX   rY   ÚdictrZ   ra   Ú__static_attributes__© rh   rf   r?   r?   X   s’   ‡ ð "€JØ%€OØÐð €K�ÓØÐ�sÓØ!Ð˜Ó!Ø€J�ÓØ€J�ÓØ"€J�Ó"Ø €N�EÓ à"€IˆuÓ"Ø$'Ð˜EÓ'Ø#'€O�T˜D‘[Ó'Ø#'Ð˜SÓ'õHrh   r?   c            	       óò  ^ • \ rS rSr% SrSrSSSSSSS	.rS
rSrSr	SSSSSSSSS.r
\" 5       r\" 5       r\" 5       r\" 5       r\" 5       r\" 5       r\" 5       r\" 5       r\" 5       r\" 5       r\" 5       r\" 5       r\" 5       r\" 5       rSr\\S'   Sr\\S'   Sr\\S'   Sr\\S'   Sr \\S'   Sr!\\S'   Sr"\#\S'   S r$\\S!'   S"r%\\S'   Sr&\\S'   S r'\\S'   S#r(\S#-  \S$'   S#r)\S#-  \S%'   S&r*\\S''   S#r+\S#-  \S('   S#r,\\-\   -  S#-  \S)'   Sr.\/\S*'   S#r0\\#-  S#-  \S+'   S,r1\#\S-'   Sr2\/\S.'   S#r3\-\#\-  S#-     S#-  \S/'   S#r4\-\#\-  S#-     S#-  \S0'   S#r5\-\6   S#-  \S1'   S#r7\-\6   S#-  \S2'   U 4S3 jr8S4r9U =r:$ )5r@   év   aª  
mlp_layer_types (`list[str]`, *optional*):
    Per-layer MLP type: `"sparse"` (MoE) or `"dense"`. If not provided, derived from the legacy
    `moe_layers_enum` hub-config kwarg (comma-separated string or list of MoE layer indices),
    defaulting to all layers from index 3 onward being MoE.
n_routed_experts (`int`, *optional*, defaults to 288):
    Total number of routed experts. Accessible as `num_local_experts` via `attribute_map`.
share_expert_dim (`int`, *optional*, defaults to 1280):
    Intermediate size of the always-active shared expert.
num_sliding_attention_heads (`int`, *optional*):
    Attention head count for `"sliding_attention"` layers, if different from `num_attention_heads`.
    Defaults to the legacy `attention_other_setting` hub-config kwarg's `num_attention_heads` entry.
    Applied via a `per_layer_config` override (see `PreTrainedConfig`), not a per-layer list field.
query_pre_attn_scalar (`int` or `float`, *optional*):
    `Step3p7Attention.__init__` hook point: defaults to `head_dim`, giving standard
    `head_dim ** -0.5` scaling; overridable per released checkpoint variant.
moe_router_scaling_factor (`float`, *optional*, defaults to 1.0):
    Scaling factor applied to the MoE block's routed-expert output (`routed_scaling_factor` in
    `Step3p7SparseMoeBlock`).
swiglu_limits (`list[float | None]`, *optional*):
    Per-layer gate/up clamping bound; `None` means no clamping.
swiglu_limits_shared (`list[float | int | None]`, *optional*):
    Per-layer gate/up clamping bound for the always-active shared expert; `None` means no clamping.
mtp_layer_types (`list[str]`, *optional*):
    Per-MTP-layer attention type; split off `layer_types`'s legacy trailing pad instead of being
    discarded, so `Step3p7Config.get_mtp_config()` can build the MTP layers for `generate(use_mtp=True)`.
mtp_mlp_layer_types (`list[str]`, *optional*):
    Per-MTP-layer MLP type, analogous to `mtp_layer_types` for `mlp_layer_types`.
Ústep3p5Ún_routed_expertsÚnum_key_value_headsÚnum_experts_per_tokÚshare_expert_dimÚnum_nextn_predict_layers)Únum_local_expertsÚnum_attention_groupsÚmoe_num_expertsÚ	moe_top_kÚshare_expert_dimsÚnum_mtp_layersg     ˆÃ@TFÚcolwise_gather_outputÚrowwise_split_inputÚpacked_colwiseÚrowwiseÚmoe_tp_experts)zlayers.*.self_attn.q_projzlayers.*.self_attn.k_projzlayers.*.self_attn.v_projzlayers.*.self_attn.g_projzlayers.*.self_attn.o_projz!layers.*.mlp.experts.gate_up_projzlayers.*.mlp.experts.down_projzlayers.*.mlp.expertsi   rJ   i ,  rc   é   é-   rL   i ô rZ   i/÷ Ú
vocab_sizerU   Úrms_norm_epsi   Úmoe_intermediate_sizei   NÚsliding_windowÚnum_sliding_attention_headsé   Úpad_token_idÚbos_token_idÚeos_token_idÚattention_biasÚquery_pre_attn_scalarg      ð?Úmoe_router_scaling_factorÚmlp_biasÚswiglu_limitsÚswiglu_limits_sharedÚmtp_layer_typesÚmtp_mlp_layer_typesc           
      óà  >^• UR                  SS5      nX l        U R                  U R                  U-   pCU(       aï  S HU  u  pV[        X5      n[	        U[
        5      (       d  M'  [        U5      U:X  d  M8  [        XUS U 5        [        XXsU 5        MW     S HE  n[        X5      n[	        U[
        5      (       d  M%  [        U5      U:X  d  M6  [        XUS U 5        MG     S HC  nUR                  U5      n[	        U[
        5      (       d  M+  [        U5      U:X  d  M<  US U X'   ME     U R                  c  S/U-  U l	        U(       a  S/U-  U l
        U R                  cÊ  UR                  SS 5      n	U	bd  [	        U	[        5      (       a  U	R                  S5      OU	n
U
 Vs1 s H.  n[        U5      R                  5       (       d  M#  [        U5      iM0     nnO[!        [#        S	U5      5      n[#        U5       Vs/ s H  o»U;   a  S
OSPM     nnUS U U l        U(       a	  XÓU U l        U R&                  cL  UR                  SS 5      nU(       a"  UR                  SU R(                  5      U l        OU R(                  U l        UR+                  S[-        U R                  5       VVs0 s H  u  nnUS:X  d  M  USU R&                  0_M     snn5        U R.                  c  U R0                  U l        UR                  SU R2                  5      nUR                  SS 5      nUR                  SS 5      n[4        TU ]l  " S0 UD6  [!        U R                  5      nU R8                  =(       d    0 m[;        U4S jU 5       5      (       a  U Vs0 s H	  nUTU   _M     snU l        g [	        U[
        5      (       d  U/[        U R                  5      -  n0 U l        U HD  nU R                  R=                  U5      nSUU   S.nU(       a  UU   US'   UU R8                  U'   MF     U(       a0  SU R8                  ;   a  U R8                  S   R?                  U5        g g g s  snf s  snf s  snnf s  snf )Nr}   r   ))Úlayer_typesrš   )Úmlp_layer_typesr›   )r˜   r™   )Ú
rope_thetaÚpartial_rotary_factorsÚfull_attentionÚmoe_layers_enumÚ,r   ÚsparseÚdenseÚattention_other_settingrN   Úper_layer_configÚsliding_attentionrŸ   r    Úrope_scalingc              3   ób   >#   • U  H$  n[        TR                  U5      [        5      v •  M&     g 7f©N)Ú
isinstanceÚgetrs   )Ú.0Ú
layer_typeÚrps     €rf   Ú	<genexpr>Ú2Step3p7TextConfig.__post_init__.<locals>.<genexpr>,  s$   øé € ÐUÂn¸
Œz˜"Ÿ&™& Ó,¬d×3Ð3Ânùs   ƒ,/Údefault)Ú	rope_typerŸ   Úpartial_rotary_factorru   ) r`   r}   rL   Úgetattrr¬   ÚlistÚlenÚsetattrr­   r�   rš   rž   rq   ÚsplitÚstriprb   ÚsetÚranger›   r�   rN   Ú
setdefaultÚ	enumerater•   Úhead_dimÚdefault_thetaÚsuperra   rY   ÚallÚindexÚupdate)rd   re   r}   ÚnÚpaddedÚfieldÚ	mtp_fieldÚvalueÚkeyr¢   ÚitemsÚiÚmoe_setrž   r¦   Ú	layer_idxr¯   rŸ   r    r©   Úlayer_type_setÚparamsr°   Ú	__class__s                         @€rf   ra   ÚStep3p7TextConfig.__post_init__Ú   s+  ù€ ð
 $*§:¡:Ð.HÈ!Ó#LÐ Ø(@Ô%Ø×*Ñ*¨D×,BÑ,BÐE]Ñ,]ˆ6Þ#ó%Ñ �ô   Ó,�Ü˜e¤T×*Ó*¬s°5«z¸VÕ/CÜ˜D¨¨r°¨Ô3Ü˜D¨U°V¨_Ö=ñ%ó C�Ü Ó,�Ü˜e¤T×*Ó*¬s°5«z¸VÕ/CÜ˜D¨¨r°¨Ö3ñ Có @�ØŸ
™
 3›�Ü˜e¤T×*Ó*¬s°5«z¸VÕ/CØ"'¨¨ )�F“Kñ @ð
 ×ÑÑ#Ø 0Ð1°AÑ5ˆDÔÞ'Ø(8Ð'9Ð<TÑ'T�Ô$à×ÑÑ'ð %Ÿj™jÐ):¸DÓAˆOØÑ*Ü6@ÀÔRU×6VÑ6V˜×-Ñ-¨cÔ2Ð\k�Ù+0ÓCª5 a´C¸³F·L±L·N›6œ3˜qž6©5�ÐC�äœe A q›kÓ*�ÜNSÐTZÌmÓ\ÊmÈ°«<™x¸WÒDÉmˆOÐ\Ø#2°2°AÐ#6ˆDÔ Þ'Ø+:¸VÐ+D�Ô(à×+Ñ+Ñ3ð '-§j¡jÐ1JÈDÓ&QÐ#Þ&Ø3J×3NÑ3NØ)¨4×+CÑ+Có4�Õ0ð 48×3KÑ3K�Ô0ð 	×ÑØô .7°t×7GÑ7GÔ-Hôâ-HÑ)�I˜zØÐ!4Ñ4ó U�	Ð1°4×3SÑ3SÐTÒTÙ-Hòô	
ð ×%Ñ%Ñ-Ø)-¯©ˆDÔ&ð
 —Z‘Z ¨d×.@Ñ.@ÓAˆ
Ø!'§¡Ð,DÀdÓ!KÐØ—z‘z .°$Ó7ˆä‰ÒÑ' Ò'ô ˜T×-Ñ-Ó.ˆØ×!Ñ!×' RˆÜÔUÁnÓU×UÑUÙQ_Ó#`ÒQ_À: J°°:±Ò$>ÑQ_Ñ#`ˆDÕ ä˜j¬$×/Ñ/Ø(˜\¬C°×0@Ñ0@Ó,AÑA�
Ø#%ˆDÔ Û,�
Ø×$Ñ$×*Ñ*¨:Ó6�Ø'0À
È1ÁÑN�Þ)Ø6LÈQÑ6O�FÐ2Ñ3Ø39�×$Ñ$ ZÓ0ñ -ö Ð 0°D×4HÑ4HÓ HØ×$Ñ$Ð%5Ñ6×=Ñ=¸lÕKð !Iˆ|ùòs Dùò ]ùó&ùò0 $as$   Æ#"QÇ	QÇ=Q Ê)Q%Ê:Q%ÎQ+)r�   rž   rš   r›   r}   r�   r•   rY   );ri   rj   rk   rl   Ú__doc__rm   Úattribute_maprÁ   ÚgatingÚuse_bidirectional_attentionÚbase_model_tp_planÚAttributeErrorÚdense_intermediate_sizeÚshared_intermediate_sizeÚ
rotary_dimÚswiglu_alphaÚswiglu_limitÚindex_n_headsÚindex_head_dimÚindex_block_sizeÚindex_topk_blocksÚindex_local_blocksÚoutput_router_logitsÚrouted_scaling_factorÚrouter_aux_loss_coefÚrouter_jitter_noiserJ   rb   rp   rc   rz   rL   rZ   r‹   rŒ   rr   r�   ry   r{   r|   rŽ   r�   r‘   r’   r“   r·   r”   Úboolr•   r–   r—   r˜   r™   rš   rq   r›   ra   rt   Ú__classcell__©rÒ   s   @rf   r@   r@   v   s<  ø‡ ñð< €Jà/Ø 5Ø-Ø*Ø/Ø4ñ€Mð €MØ€FØ"'Ðð
 &=Ø%<Ø%<Ø%<Ø%:Ø-=Ø*3Ø 0ñ	Ðñ -Ó.ÐÙ-Ó/ÐÙÓ!€JÙ!Ó#€LÙ!Ó#€LÙ"Ó$€MÙ#Ó%€NÙ%Ó'ÐÙ&Ó(ÐÙ'Ó)ÐÙ)Ó+ÐÙ*Ó,ÐÙ)Ó+ÐÙ(Ó*Ðà€K�ÓØ"Ð�sÓ"Ø Ð˜Ó ØÐ�sÓØ#)Ð˜SÓ)Ø€J�ÓØ€L�%ÓØ!%Ð˜3Ó%ØÐ�cÓØ Ð˜Ó Ø Ð�cÓ Ø!%€N�C˜$‘JÓ%Ø.2Ð  t¡Ó2Ø€L�#ÓØ#€L�#˜‘*Ó#Ø+/€L�#˜˜S™	‘/ DÑ(Ó/Ø €N�DÓ Ø04Ð˜3 ™;¨Ñ-Ó4Ø'*Ð˜uÓ*Ø€HˆdÓØ59€M�4˜ ™ dÑ*Ñ+¨dÑ2Ó9Ø<@Ð˜$˜u s™{¨TÑ1Ñ2°TÑ9Ó@Ø(,€O�T˜#‘Y Ñ%Ó,Ø,0Ð˜˜c™ TÑ)Ó0÷_Ló _Lrh   r@   c                   óˆ   ^ • \ rS rSr% Sr\\S.rSr\	\
-  S-  \S'   Sr\	\
-  S-  \S'   Sr\\S'   S	r\\S
'   U 4S jrSrU =r$ )rA   i<  Ústep3p7)rH   Útext_configNrH   rí   FÚprojector_biasiP Úimage_token_idc           
      óB  >• U R                   c  [        5       U l         Od[        U R                   [        5      (       aE  [        S0 U R                   R	                  5        VVs0 s H  u  p#US:w  d  M  X#_M     snnD6U l         U R
                  c  [        5       U l        Od[        U R
                  [        5      (       aE  [        S0 U R
                  R	                  5        VVs0 s H  u  p#US:w  d  M  X#_M     snnD6U l        [        TU ]   " S0 UD6  g s  snnf s  snnf )Nrm   ru   )	rH   r?   r¬   rs   rÌ   rí   r@   rÂ   ra   )rd   re   ÚkÚvrÒ   s       €rf   ra   ÚStep3p7Config.__post_init__G  sö   ø€ Ø×ÑÑ%Ü!4Ó!6ˆDÕÜ˜×*Ñ*¬D×1Ñ1Ü!4ñ "Ø$(×$6Ñ$6×$<Ñ$<Ô$>ÔTÒ$>™D˜AÀ!À|ÑBS“4�1’4Ñ$>ÒTñ"ˆDÔð ×ÑÑ#Ü0Ó2ˆDÕÜ˜×(Ñ(¬$×/Ñ/Ü0ÑtÀT×EUÑEU×E[ÑE[ÔE]Ô3sÒE]¹T¸QÐabÐfrÑar³D°A²DÑE]Ò3sÑtˆDÔä‰ÒÑ' Ó'ùó Uùó 4ts   Á"DÁ2DÃ#DÃ3D)rí   rH   )ri   rj   rk   rl   rm   r?   r@   Úsub_configsrH   rs   r   rp   rí   rî   rè   rï   rb   ra   rt   ré   rê   s   @rf   rA   rA   <  s]   ø‡ ð €JØ$7ÐHYÑZ€Kà48€M�4Ð*Ñ*¨TÑ1Ó8Ø26€K�Ð(Ñ(¨4Ñ/Ó6Ø €N�DÓ Ø €N�CÓ ÷(ó (rh   rA   c                   ó.   • \ rS rSr% Sr\\S'   \\S'   Srg)ÚStep3p7ImageProcessorKwargsiW  a  
patch_size (`int`, *optional*, defaults to 504):
    Target size (height = width) for each local patch crop.
max_image_size (`int`, *optional*, defaults to 3024):
    Images larger than this (on their longest side) are scaled down uniformly before patch
    planning.
rR   Úmax_image_sizeru   N)ri   rj   rk   rl   rÔ   rb   rp   rt   ru   rh   rf   rö   rö   W  s   ‡ ñð ƒOØÖrh   rö   F)Útotalc                   ó>  ^ • \ rS rSr% Sr\R                  rSSS.rSr	\
\S'   SrSr\r\\   \S'   \r\\   \S	'   Sr\r/ S
QrSr\
\S'   Sr\
\S'   Sr\
\S'   \S\
S\
S\4S j5       rS\
S\
S\
S\
S\\\
\
4   \\
\
4   \
\
\
\4   4
S jrS*S\
S\
S\
4S jjr S\!RD                  S\
S\
SSS\\!RD                  \\!RD                     \
\
4   4
S jr#S\S   S\S \S!\S\\\   -  S-  S	\\\   -  S-  SSS"\$S\
S#\S-  S$S%S\%4S& jr&\'S\(S'\)\   S\%4U 4S( jj5       r*S)r+U =r,$ )+rB   id  zà
Image processor for Step-3.7-Flash.

Each input image is split into a global down-scaled view plus zero or more
local patch crops via a sliding-window strategy, then every sub-image is
resized and normalised independently.
rO   ©Úheightr\   iø  rR   TÚ
image_meanÚ	image_std)Úpixel_valuesÚpixel_values_localÚnum_local_patchesiÐ  r÷   rQ   Úvision_patch_sizeé   Údownsampler_strider\   rû   Úreturnc                 óR   • [        X5      S:  =(       a    [        X-  X-  5      S:„  $ )zH`True` for near-degenerate images (min side < 32px, aspect ratio > 4:1).é    r  ©ÚminÚmax)r\   rû   s     rf   Ú_is_extreme_aspectÚ(Step3p7ImageProcessor._is_extreme_aspect€  s*   € ô �5Ó! BÑ&×R¬3¨u©~¸v¹~Ó+NÐQRÑ+RÐRrh   rP   c                 óæ  ^• U R                  X5      nU(       a  [        X5      =p[        X!5      U R                  :”  a1  U R                  [        X!5      -  n[        X-  5      [        X&-  5      p![	        X!5      [        X!5      p‡Xƒ::  a  X‡-  S:”  a  UOSmOX‡-  S:”  a  [	        Xt5      mOUmTS:X  a
  X4X4SSSU4$ U4S jX4 5       u  pš[        SU	T-  5      n[        SU
T-  5      nX4Xš4TX¼U4$ )u%  Compute the sliding-window patch layout for one image.

Unlike models with a fixed tile size (Idefics3, LLaVA-NeXT), Step3p7
adapts the window size to the image's aspect ratio, so this cannot be
reduced to a simple ``ceil(h / tile) Ã— ceil(w / tile)`` formula.

Step 1 = normalise extreme inputs:
  - extreme-aspect images (min_side < 32, ratio > 4) are squared
  - images larger than ``max_image_size`` are scaled down uniformly

Step 2 â€” choose window size from the normalised aspect ratio:
  - fits in global view (long_side â‰¤ image_size): tile only if elongated
    (long_side / short_side > 1.5), using short_side as the window
  - very elongated (ratio > 4): ``min(short_side, patch_size)``
  - standard case: ``patch_size``

Step 3 â€” snap each dimension to the nearest window multiple
  (snap up when the remainder exceeds 20 % of the window size).

Returns:
    global_width_height: ``(width, height)`` to resize the global view to before squaring
    crop_width_height: ``(crop_width, crop_height)`` snapped dimensions for patch extraction
    window_size: tile side length (``0`` â†’ no local patches)
    num_patches_x: number of patches along the width
    num_patches_y: number of patches along the height
    needs_square_pad: whether the raw image must be zero-padded to a square before resizing
g      ø?r   r  c              3   ó\   >#   • U  H!  nUT:¼  a  TUT-  UT-  S T-  :„  -   -  OUv •  M#     g7f)gš™™™™™É?Nru   )r®   ÚdimÚwindow_sizes     €rf   r±   Ú6Step3p7ImageProcessor._plan_patches.<locals>.<genexpr>¹  sL   øé € ð #
ò '�ð ˜+Ó%ð ˜s kÑ1°S¸;Ñ5FÈÈ{ÑIZÑ5ZÑ[Ò\àôò 'ùs   ƒ),r�   )r
  r	  r÷   rb   r  )rd   r\   rû   rP   rR   Úneeds_square_padÚscaleÚ
short_sideÚ	long_sideÚ
crop_widthÚcrop_heightÚnum_patches_xÚnum_patches_yr  s                @rf   Ú_plan_patchesÚ#Step3p7ImageProcessor._plan_patches…  s  ø€ ð>  ×2Ñ2°5ÓAÐÞÜ  Ó/Ð/ˆEÜˆvÓ × 3Ñ 3Ó3Ø×'Ñ'¬#¨fÓ*<Ñ<ˆEÜ ¡Ó.´°F±NÓ0C�6ä # FÓ 2´C¸Ó4F�Ið Ó"Ø(1Ñ(>ÀÓ(D™*È!‰KØÑ# aÓ'Ü˜jÓ5‰Kà$ˆKà˜!ÓØ�? U O°Q¸¸1Ð>NÐNÐNô#
ð ‘ó#
Ñˆ
ô ˜A˜z¨[Ñ8Ó9ˆÜ˜A˜{¨kÑ9Ó:ˆØˆ Ð 9¸;ÈÐfvÐvÐvrh   Nc                 óÈ   • U=(       d    0 nUR                  SU R                  5      nUS   nUR                  SU R                  5      nU R                  X!XV5      SS u  pxXx-  $ )zBReturn the number of local patches for an image of the given size.Úsizerû   rR   r   é   )r­   r  rR   r  )	rd   rû   r\   Úimages_kwargsr  rP   rR   r  r  s	            rf   Úget_number_of_image_patchesÚ1Step3p7ImageProcessor.get_number_of_image_patchesÅ  sh   € à%×+¨ˆØ× Ñ  ¨¯©Ó3ˆØ˜(‘^ˆ
Ø"×&Ñ& |°T·_±_ÓEˆ
Ø'+×'9Ñ'9¸%ÈÓ'`ÐabÐcdÐ'eÑ$ˆØÑ,Ð,rh   ÚimgÚresampler   c                 óØ  • UR                   u  pVnU R                  XvX#5      u  u  p‰u  p«nnnnU(       a'  [        Xv5      nU R                  U/[	        UUS9S9S   nUR                  S5      nU R                  U[	        X˜S9US9nU R                  U[	        X"S9US9R                  S5      nUS:X  a  U/ XÞ4$ U R                  U[	        XºS9US9R                  S5      n[        UUS9nUUXÞ4$ )aJ  Step3p7-specific cropping: square-pad extreme aspect ratios, resize the global view,
and slice out raw (pre-final-resize) local-patch tiles per `_plan_patches`'s layout.

Returns the resized global view, the list of raw local-patch tensors (still at
`window_size`, not yet resized to `patch_size`), and the patch grid dimensions.
rú   )Úpad_sizer   ©r"  )rR   )	Úshaper  r	  Úpadr   Ú	unsqueezeÚresizeÚsqueezer   )rd   r!  rP   rR   r"  Ú_rû   r\   Úglobal_widthÚglobal_heightr  r  r  r  r  r  ÚsideÚ	img_batchÚ
global_imgÚimg_for_cropÚpatchess                        rf   Ú_get_image_patchesÚ(Step3p7ImageProcessor._get_image_patchesÎ  s  € ð Ÿ9™9Ñˆ�5ð ×Ñ˜u¨jÓEñ	
Ù)ˆ\Ù%ˆZØØØØö Ü�uÓ%ˆDØ—(‘(˜C˜5¬8¸4ÀtÑ+L�(ÐMÈaÑPˆCà—M‘M !Ó$ˆ	ð —[‘[ ¬H¸MÑ,^Ðiq�[Ðrˆ
Ø—[‘[ ¬X¸ZÑ-ZÐem�[Ðn×vÑvØó
ˆ
ð ˜!ÓØ˜r =Ð?Ð?à—{‘{Ø”x {ÑEÐPXð #ð 
ç
‰'�!‹*ð 	ô $ L¸[ÑIˆØ˜7 MÐ@Ð@rh   Úimagesztorch.TensorÚ
do_rescaleÚrescale_factorÚdo_normalizer  Údisable_groupingÚreturn_tensorszstr | TensorType | Nonec                 óÊ  • UR                   n/ / / / 4u  pïnnU H¬  nU R                  UXÙU5      u  nnnnUR                  U5        UR                  [        U5      5        UR                  U5        UR                  [	        U5       VVs/ s H-  n[	        U5        H  nUUS-
  :H  =(       a    UUS-
  :  PM     M/     snn5        M®     U R                  [        R                  " U5      X#XEU5      nUUS.n[        UUS9n[        USS9nU(       aÁ  [        USU
S9u  nnUR                  5        H5  u  nn U R                  U [        X™S9US	9n!U R                  U!X#XEU5      UU'   M7     [        UUSS
9n"[        R                  " U" V#V$s/ s H  n#U#  H  n$U$PM     M     sn$n#5      US'   U V%s/ s H  n%U%S/U[        U%5      -
  -  -   PM     sn%US'   U$ s  snnf s  sn$n#f s  sn%f )Nr�   )rþ   r   )ÚdataÚtensor_typer   )r³   T)Ú	is_nestedr9  rú   r%  )r>  rÿ   FÚpatch_newline_masks)rû   r3  Úappendr¸   r½   Úrescale_and_normalizeÚtorchÚstackr
   r	  r   rÌ   r)  r   r   )&rd   r5  r6  r7  r8  rü   rý   r"  r  rR   r9  r:  re   rP   Úglobal_imagesÚnested_patchesr   r?  r!  r0  r2  r  r  ÚrowÚcolÚglobal_stackr<  ÚresultÚmax_patchesÚgrouped_patchesÚgrouped_indexr&  Ústacked_patchesÚresizedÚnested_pixel_values_localÚper_image_patchesÚpatchÚmasks&                                         rf   Ú_preprocessÚ!Step3p7ImageProcessor._preprocessû  sB  € ð —[‘[ˆ
ØPRÐTVÐXZÐ\^ÐP^ÑMˆÐ'8Ð:MãˆCØ@D×@WÑ@WØ�Z¨XóAÑ=ˆJ˜ °ð × Ñ  Ô,Ø×$Ñ$¤S¨£\Ô2Ø×!Ñ! 'Ô*à×&Ñ&ô  % ]Ô3ôâ3˜Ü$ ]×3˜ð ˜=¨1Ñ,Ñ,×H°°}ÀqÑ7HÑ1HÒHá3ñ IÙ3òöñ ð" ×1Ñ1Ü�KŠK˜Ó&¨
ÀLÐ^gó
ˆð
 )Ø!2ñ
ˆô  4°^ÑDˆäÐ+°QÑ7ˆÞô .CØ¨$ÐAQñ.Ñ*ˆO˜]ð +:×*?Ñ*?Ö*AÑ&��ØŸ+™+Ø#¤X°ZÑ%RÐ]eð &ð �ð *.×)CÑ)CØ˜Z¸ÐS\ó*� Ó&ñ	 +Bô )7°ÈÐaeÑ(fÐ%ô ,1¯;ª;Ù0IÔiÒ0IÐ,ÔWhÈe“ÑWh‘Ñ0IÒió,ˆFÐ'Ñ(ñ
 H[ó-ÚGZ¸t�˜�w +´°D³	Ñ"9Ñ:Ô:ÑGZñ-ˆFÐ(Ñ)ð ˆùó]ùóP jùò-s   Â	4GÆG
Æ-G re   c                 ó&   >• [         TU ]  " U40 UD6$ r«   )rÂ   Ú
preprocess)rd   r5  re   rÒ   s      €rf   rV  Ú Step3p7ImageProcessor.preprocessF  s   ø€ ä‰wÒ! &Ñ3¨FÑ3Ð3rh   ru   r«   )-ri   rj   rk   rl   rÔ   r   ÚBILINEARr"  r  rR   rb   rp   r6  r8  r   rü   r·   rr   r   rý   Údo_convert_rgbrö   Úvalid_kwargsÚmodel_input_namesr÷   r  r  Ústaticmethodrè   r
  Útupler  r  rB  ÚTensorr3  r   r
   rS  r   r   r   rV  rt   ré   rê   s   @rf   rB   rB   d  sW  ø‡ ñð "×*Ñ*€HØ CÑ(€DØ€J�ÓØ€JØ€LØ.€J��U‘Ó.Ø,€Iˆt�E‰{Ó,Ø€NØ.€LÚSÐà€N�CÓð  Ð�sÓØÐ˜ÓàðS #ð S¨sð S°tó Só ðSð>wØð>wØ"%ð>wØ36ð>wØDGð>wà	ˆu�S˜#�X‰  c¨3 h¡°°c¸3ÀÐDÑ	Eô>wñ@-°#ð -¸cð -ÐZ]õ -ð+Aà�\‰\ð+Að ð+Að ð	+Að
 'ð+Að 
ˆu�|‰|˜T %§,¡,Ñ/°°cÐ9Ñ	:ô+AðZIà�^Ñ$ðIð ðIð ð	Ið
 ðIð ˜D ™KÑ'¨$Ñ.ðIð ˜4 ™;Ñ&¨Ñ-ðIð 'ðIð ðIð ðIð  ™+ðIð 2ðIð 
ôIðV ð4 ð 4°vÐ>YÑ7Zð 4Ð_kö 4ó ö4rh   rB   c                   ó   • \ rS rSrS rSrg)ÚStep3p7VisionRotaryEmbeddingiN  c                 óP   • UR                  S5      n[        R                  " X"4SS9$ )zM
Recompose the frequencies into the final spatial layout used per each grid.
r�   éÿÿÿÿ©r  )ÚflattenrB  Úcat)rd   ÚfreqÚfreq_hws      rf   Úrecomposition_frequenciesÚ6Step3p7VisionRotaryEmbedding.recomposition_frequenciesO  s%   € ð —,‘,˜q“/ˆÜ�yŠy˜'Ð+°Ñ4Ð4rh   ru   N)ri   rj   rk   rl   rh  rt   ru   rh   rf   r`  r`  N  s   † õ5rh   r`  c                   ó   • \ rS rSrSrg)ÚStep3p7VisionMLPiW  ru   N©ri   rj   rk   rl   rt   ru   rh   rf   rk  rk  W  ó   † Úrh   rk  c                   ó   • \ rS rSrSrg)ÚStep3p7VisionAttentioni[  ru   Nrl  ru   rh   rf   ro  ro  [  rm  rh   ro  c            	       óÌ   ^ • \ rS rSrS\4U 4S jjr  SS\R                  S\R                  S-  S\\R                  \R                  4   S-  S\R                  4S	 jjr	S
r
U =r$ )ÚStep3p7VisionEncoderLayeri_  Úconfigc                 ó>  >• [         TU ]  5         Xl        [        U5      U l        [        U5      U l        [        R                  " UR                  UR                  S9U l        [        R                  " UR                  UR                  S9U l        [        R                  " UR                  [        R                   " UR                  5      -  5      U l        [        R                  " UR                  [        R                   " UR                  5      -  5      U l        g )N©Úeps)rÂ   Ú__init__rr  ro  Ú	self_attnrk  ÚmlpÚnnÚ	LayerNormrJ   rV   Úlayernorm_beforeÚlayernorm_afterÚ	ParameterrX   rB  ÚonesÚlambda_1Úlambda_2©rd   rr  rÒ   s     €rf   rv  Ú"Step3p7VisionEncoderLayer.__init__`  s¿   ø€ Ü‰ÑÔØŒÜ/°Ó7ˆŒÜ# FÓ+ˆŒÜ "§¢¨V×-?Ñ-?ÀV×EZÑEZÑ [ˆÔÜ!Ÿ|š|¨F×,>Ñ,>ÀF×DYÑDYÑZˆÔÜŸš V×%BÑ%BÄUÇZÂZÐPV×PbÑPbÓEcÑ%cÓdˆŒÜŸš V×%BÑ%BÄUÇZÂZÐPV×PbÑPbÓEcÑ%cÓdˆ�rh   NÚhidden_statesÚattention_maskÚposition_embeddingsr  c                 óð   • UnU R                  U5      nU R                  " U4UUS.UD6u  pU R                  U-  nX-   nUnU R                  U5      nU R	                  U5      nU R
                  U-  nX-   nU$ )N)r„  r…  )r{  rw  r  r|  rx  r€  )rd   rƒ  r„  r…  re   Úresidualr+  s          rf   ÚforwardÚ!Step3p7VisionEncoderLayer.forwardj  s™   € ð !ˆØ×-Ñ-¨mÓ<ˆØŸ>š>Øð
à)Ø 3ñ
ð ñ	
Ñˆð Ÿ™¨Ñ5ˆØ%Ñ0ˆà ˆØ×,Ñ,¨]Ó;ˆØŸ™ Ó/ˆØŸ™¨Ñ5ˆØ%Ñ0ˆØÐrh   )rr  r  r€  r|  r{  rx  rw  ©NN)ri   rj   rk   rl   r?   rv  rB  r^  r]  rˆ  rt   ré   rê   s   @rf   rq  rq  _  sr   ø† ðeÐ2÷ eð /3ØHLñ	à—|‘|ðð Ÿ™ tÑ+ðð # 5§<¡<°·±Ð#=Ñ>ÀÑEð	ð 
�‰÷ó rh   rq  c                   ór   ^ • \ rS rSrS\4U 4S jjrS\R                  S\S\S\R                  4S jr	S	r
U =r$ )
ÚStep3p7VisionEmbeddingsi„  rr  c                 ó®   >• [         TU ]  U5        [        R                  " UR                  UR
                  UR                  UR                  SS9U l        g )NF)Úin_channelsÚout_channelsÚkernel_sizeÚstrideÚbias)rÂ   rv  ry  ÚConv2dÚnum_channelsrJ   rR   Úpatch_embeddingr�  s     €rf   rv  Ú Step3p7VisionEmbeddings.__init__…  sH   ø€ Ü‰Ñ˜Ô Ü!ŸyšyØ×+Ñ+Ø×+Ñ+Ø×)Ñ)Ø×$Ñ$Øñ 
ˆÕrh   Ú
embeddingsrû   r\   r  c                 ó†  • U R                   R                  R                  S   nX R                  -  nX0R                  -  n[	        US-  5      n[
        R                  R                  5       (       d/  XW:X  a*  Xg:X  a%  U R                   R                  R                  S5      $ U R                   R                  R                  S5      nUR                  S   n	UR                  SXwU	5      nUR                  SSSS5      n[        R                  R                  UXV4SSS	9nUR                  SSSS5      R                  SSU	5      nU$ )
Nr   g      à?rb  r�   r   r%   ÚbilinearF)r  ÚmodeÚalign_corners)Úposition_embeddingÚweightr&  rR   r"   rB  ÚjitÚ
is_tracingr(  ÚreshapeÚpermutery  Ú
functionalÚinterpolateÚview)
rd   r—  rû   r\   Únum_positionsÚ
new_heightÚ	new_widthÚsqrt_num_positionsÚpatch_pos_embedr  s
             rf   Úinterpolate_pos_encodingÚ0Step3p7VisionEmbeddings.interpolate_pos_encoding�  s-  € Ø×/Ñ/×6Ñ6×<Ñ<¸QÑ?ˆØŸ™Ñ.ˆ
ØŸ_™_Ñ,ˆ	Ü& }°cÑ'9Ó:ÐÜ�y‰y×#Ñ#×%Ñ%¨*Ó*JÈyÓOnØ×*Ñ*×1Ñ1×;Ñ;¸AÓ>Ð>Ø×1Ñ1×8Ñ8×BÑBÀ1ÓEˆØ×Ñ˜rÑ"ˆØ)×1Ñ1°!Ð5GÐ]`ÓaˆØ)×1Ñ1°!°Q¸¸1Ó=ˆÜŸ-™-×3Ñ3ØØÐ(ØØð	 4ð 
ˆð *×1Ñ1°!°Q¸¸1Ó=×BÑBÀ1ÀbÈ#ÓNˆØÐrh   )r•  )ri   rj   rk   rl   r?   rv  rB  r^  rb   rª  rt   ré   rê   s   @rf   rŒ  rŒ  „  sB   ø† ð
Ð2÷ 
ð°5·<±<ð Èð ÐUXð Ð]b×]iÑ]i÷ ò rh   rŒ  c                   ó†   ^ • \ rS rSr% \\S'   SrSrSS/rS/r	Sr
SrSrSrSr\R                   " 5       U 4S	 j5       rS
rU =r$ )r<   i¤  rr  ÚmodelTrq  ÚStep3p7DecoderLayerÚpast_key_valuesFc                 óž  >• [         TU ]  U5        [        U[        5      (       aO  [        R
                  " UR                  [        R                  " UR                  5      R                  S5      5        g [        U[        5      (       a}  [        R                  R                  UR                  UR                  R                   5        [        R                  R                  UR"                  UR                  R                   5        g [        U[$        5      (       a¢  UR&                   H‘  nUR(                  nUR*                  U   S:w  a  [,        UR*                  U      nU" UR                  US9u  pE[        R
                  " [/        X S35      U5        [        R
                  " [/        X S35      U5        M“     g [        U[0        5      (       aX  [/        U R                  SS5      n[        R2                  " UR4                  SUS	9  [        R2                  " UR6                  SUS	9  g [        U[8        5      (       aX  [/        U R                  SS5      n[        R2                  " UR:                  SUS	9  [        R<                  " UR>                  5        g [        U[@        5      (       a!  [        R<                  " UR:                  5        g g )
N)r�   rb  r³   )r¯   Ú	_inv_freqÚ_original_inv_freqÚinitializer_rangeg{®Gáz”?ç        )ÚmeanÚstd)!rÂ   Ú_init_weightsr¬   rŒ  ÚinitÚcopy_Úposition_idsrB  Úaranger¥  Úexpandrq  ry  Ú	constant_r  rr  rX   r€  ÚStep3p7RotaryEmbeddingr�   Úcompute_default_rope_parametersr´   r   r¶   ÚStep3p7ExpertsÚnormal_Úgate_up_projÚ	down_projÚStep3p7TopKRouterr�  Úzeros_Úe_score_correction_biasÚStep3p7RMSNorm)rd   Úmoduler¯   Úrope_init_fnÚcurr_inv_freqr+  r¶  rÒ   s          €rf   r·  Ú$Step3p7PreTrainedModel._init_weights±  sñ  ø€ ä‰Ñ˜fÔ%Ü�fÔ5×6Ñ6Ü�JŠJ�v×*Ñ*¬E¯LªL¸×9MÑ9MÓ,N×,UÑ,UÐV]Ó,^Õ_Ü˜Ô 9×:Ñ:Ü�G‰G×Ñ˜fŸo™o¨v¯}©}×/SÑ/SÔTÜ�G‰G×Ñ˜fŸo™o¨v¯}©}×/SÑ/SÕTÜ˜Ô 6×7Ñ7Ø$×0Ô0�
Ø%×EÑE�Ø×#Ñ# JÑ/°9Ó<Ü#6°v×7GÑ7GÈ
Ñ7SÑ#T�LÙ#/°·±È*Ñ#UÑ �Ü—
’
œ7 6¨\¸Ð+CÓDÀmÔTÜ—
’
œ7 6¨\Ð9KÐ+LÓMÈ}Ö]ò 1ô ˜¤×/Ñ/ô ˜$Ÿ+™+Ð':¸DÓAˆCÜ�LŠL˜×,Ñ,°3¸CÒ@Ü�LŠL˜×)Ñ)°¸Ó=Ü˜Ô 1×2Ñ2Ü˜$Ÿ+™+Ð':¸DÓAˆCÜ�LŠL˜Ÿ™¨S°cÒ:Ü�KŠK˜×6Ñ6Õ7Ü˜¤×/Ñ/Ü�KŠK˜Ÿ™Õ&ð 0rh   ru   )ri   rj   rk   rl   rA   rp   Úbase_model_prefixÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnÚ_supports_static_cacheÚ_supports_attention_backendrB  Úno_gradr·  rt   ré   rê   s   @rf   r<   r<   ¤  s_   ø‡ àÓØÐØ&*Ð#Ø4Ð6KÐLÐØ#4Ð"5ÐØ ÐØ€NØÐØ!ÐØ"&Ðà
‡]‚]ƒ_ô'ó ö'rh   r<   c                   ó–   ^ • \ rS rSr% Sr\\S'   \\S.r	S\4U 4S jjr
\" SS9\S\R                  S	\\   S
\4S j5       5       rSrU =r$ )r>   iÐ  u!  Vision encoder: patch embeddings â†’ 2-D RoPE transformer layers â†’ conv downsampler.

The rotary embedding (``self.rotary_emb``) and layer stack (``self.layers``) are
held directly on this module, following the Gemma4 convention of not wrapping
them in a separate ``Encoder`` submodule.
rr  ©rƒ  Ú
attentionsc                 óP  >• [         TU ]  U5        [        U5      U l        [        R
                  " UR                  UR                  S9U l        [        U5      U l
        [        R                  " [        UR                  5       Vs/ s H  n[        U5      PM     sn5      U l        [        R                   " UR                  UR                  S-  SSSS9U l        [        R                   " UR                  S-  UR                  S-  SSSS9U l        U R'                  5         g s  snf )Nrt  r%   r   r�   )r�  r‘  Úpaddingr  )rÂ   rv  rŒ  r—  ry  rz  rJ   rV   Úpre_layernormr`  Ú
rotary_embÚ
ModuleListr½   rL   rq  r]   r“  Údownsampler1Údownsampler2Ú	post_init)rd   rr  r+  rÒ   s      €rf   rv  ÚStep3p7VisionModel.__init__ß  sî   ø€ Ü‰Ñ˜Ô Ü1°&Ó9ˆŒÜŸ\š\¨&×*<Ñ*<À&×BWÑBWÑXˆÔÜ6°vÓ>ˆŒÜ—m’mÔPUÐV\×VnÑVnÔPoÓ$pÒPoÈ1Ô%>¸vÖ%FÑPoÑ$pÓqˆŒÜŸIšI f×&8Ñ&8¸&×:LÑ:LÈqÑ:PÐ^_ÐhiÐstÑuˆÔÜŸIšIØ×Ñ Ñ" F×$6Ñ$6¸Ñ$:ÈÐRSÐ]^ñ
ˆÔð 	�‰Õùò %qs   ÂD#F)Útie_last_hidden_statesrþ   re   r  c                 ór  • UR                   u  p4pVXPR                  R                  -  nX`R                  R                  -  nU R                  USS9n	U R                  U	5      n	[        R
                  " SXx//U	R                  S9n
[        U
SS9nU R                  X›5      nU R                   H  nU" U	4SU0UD6n	M     U	R                   S   nU	R                  SS	S5      R                  X>Xx5      n	U R                  U	5      n	U R                  U	5      n	[        U	R                  S	5      R                  SS	S5      S
9$ )NT)rª  r�   )Údevice)Úspatial_merge_sizer…  rb  r   r%   )Úlast_hidden_state)r&  r—  rR   rÛ  rB  Útensorrä  r$   rÜ  r]   r¡  r¤  rÞ  rß  r   rd  )rd   rþ   re   Ú
batch_sizer+  rû   r\   Úgrid_hÚgrid_wÚhidden_stateÚgrid_thwrº  r…  ÚlayerÚchannelss                  rf   rˆ  ÚStep3p7VisionModel.forwardë  s5  € ð (4×'9Ñ'9Ñ$ˆ
�vØŸ?™?×5Ñ5Ñ5ˆØŸ/™/×4Ñ4Ñ4ˆØ—‘ |Èd�ÐSˆØ×)Ñ)¨,Ó7ˆô —<’< ! VÐ!4Ð 5¸l×>QÑ>QÑRˆÜ.¨xÈAÑNˆØ"Ÿo™o¨lÓIÐØ—[”[ˆEÙ  ÑaÐCVÐaÐZ`ÑaŠLñ !ð  ×%Ñ% bÑ)ˆØ#×+Ñ+¨A¨q°!Ó4×9Ñ9¸*ÐPVÓ_ˆØ×(Ñ(¨Ó6ˆØ×(Ñ(¨Ó6ˆÜ°×1EÑ1EÀaÓ1H×1PÑ1PÐQRÐTUÐWXÓ1YÑZÐZrh   )rÞ  rß  r—  r]   rÛ  rÜ  )ri   rj   rk   rl   rÔ   r?   rp   rq  ro  Ú_can_record_outputsrv  r#   r   rB  r^  r   r   r   rˆ  rt   ré   rê   s   @rf   r>   r>   Ð  sq   ø‡ ñð  Óà2Ø,ñÐð

Ð2÷ 
ñ ¨EÑ2Øð[ E§L¡Lð [¸FÐCUÑ<Vð [Ð[jó [ó ó 3ö[rh   r>   c                   ó   • \ rS rSrSrg)r¾  i  ru   Nrl  ru   rh   rf   r¾  r¾    s   † ò 	rh   r¾  c                   ó   • \ rS rSrSrg)rÇ  i	  ru   Nrl  ru   rh   rf   rÇ  rÇ  	  rm  rh   rÇ  c                   ó2   ^ • \ rS rSrSU 4S jjrS rSrU =r$ )Ú
Step3p7MLPi  c                 óÞ   >• [         TU ]  U5        U(       a  UR                  OUR                  U l        UR                  (       a  UR                  U   OS=(       d    [        S5      U l        g )Nr   Úinf)rÂ   rv  r|   rc   r™   rr   Úlimit)rd   rr  rÏ   Úis_shared_expertrÒ   s       €rf   rv  ÚStep3p7MLP.__init__  sV   ø€ Ü‰Ñ˜Ô Þ<L ×!8Ò!8ÐRX×RjÑRjˆÔð AG×@[×@[�f×1Ñ1°)Ò<Ðab×sÔglÐmrÓgsˆ�
rh   c                 óþ   • U R                  U R                  U5      5      R                  U R                  S9nU R	                  U5      R                  U R                  * U R                  S9nU R                  X#-  5      $ )N©r	  r  )Úact_fnÚ	gate_projÚclampr÷  Úup_projrÃ  )rd   ÚxÚgateÚups       rf   rˆ  ÚStep3p7MLP.forward  sc   € Ø�{‰{˜4Ÿ>™>¨!Ó,Ó-×3Ñ3¸¿
¹
Ð3ÐCˆØ�\‰\˜!‹_×"Ñ"¨¯
©
 {¸¿
¹
Ð"ÐCˆØ�~‰~˜d™iÓ(Ð(rh   )rc   r÷  )F)ri   rj   rk   rl   rv  rˆ  rt   ré   rê   s   @rf   rô  rô    s   ø† ÷t÷)ð )rh   rô  c                   ój   ^ • \ rS rSrSrSU 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )	rÀ  i  Tc                 ó|   >• [         TU ]  U5        UR                  U l        Uc  [	        S5      U l        g UU l        g )Nrö  )rÂ   rv  r�   Úintermediate_dimrr   r÷  )rd   rr  rÞ   rÒ   s      €rf   rv  ÚStep3p7Experts.__init__  s4   ø€ Ü‰Ñ˜Ô Ø &× <Ñ <ˆÔØ%1Ñ%9”U˜5“\ˆ�
¸|ˆ�
rh   Úgate_upr  c                 óÈ   • UR                  SSS9u  p#U R                  U5      R                  U R                  S9nUR                  U R                  * U R                  S9nX#-  $ )Nr%   rb  rc  rû  r  )Úchunkrü  rþ  r÷  )rd   r  r  r  s       rf   Ú_apply_gateÚStep3p7Experts._apply_gate$  sZ   € Ø—=‘= ¨�=Ð+‰ˆØ�{‰{˜4Ó ×&Ñ&¨4¯:©:Ð&Ð6ˆØ�X‰X˜4Ÿ:™:˜+¨4¯:©:ˆXÐ6ˆØ‰yÐrh   )r  r÷  r«   )ri   rj   rk   rl   Ú#_fp8_experts_clamp_after_activationrv  rB  r^  r  rt   ré   rê   s   @rf   rÀ  rÀ    s/   ø† à*.Ð'÷Lð
 5§<¡<ð °E·L±L÷ ò rh   rÀ  c                   ó   • \ rS rSrSrg)rÄ  i+  ru   Nrl  ru   rh   rf   rÄ  rÄ  +  rm  rh   rÄ  c                   ó   • \ rS rSrS rSrg)ÚStep3p7SparseMoeBlocki/  c                 ó  • [         R                  R                  U 5        UR                  (       a  UR                  U   =(       d    S OS n[	        U5      U l        [        XS9U l        [        XSS9U l	        UR                  U l        g )N)rÞ   T)rø  )ry  ÚModulerv  r˜   rÄ  r  rÀ  Úexpertsrô  Úshared_expertsr–   rå   )rd   rr  rÏ   rÞ   s       rf   rv  ÚStep3p7SparseMoeBlock.__init__0  sn   € Ü
�	‰	×Ñ˜4Ô ð EK×DX×DX˜×,Ñ,¨YÑ7×?¸4øÐ^bˆÜ% fÓ-ˆŒ	Ü% fÑHˆŒÜ(¨ÈTÑRˆÔØ%+×%EÑ%EˆÕ"rh   )r  r  rå   r  N©ri   rj   rk   rl   rv  rt   ru   rh   rf   r  r  /  s   † õFrh   r  c                   ó   ^ • \ rS rSrS\S\4U 4S jjr SS\R                  S\	\R                  \R                  4   S\R                  S-  S	\
S-  S
\\   S\	\R                  \R                  S-  4   4S jjrSrU =r$ )ÚStep3p7Attentioni;  rr  rÏ   c                 óf   >• UR                   n[        TU ]	  XU5        UR                  S-  U l        g )Ng      à¿)rN   rÂ   rv  r•   Úscaling)rd   rr  rÏ   Ú	num_headsrÒ   s       €rf   rv  ÚStep3p7Attention.__init__<  s/   ø€ Ø×.Ñ.ˆ	Ü‰Ñ˜¨IÔ6Ø×3Ñ3°TÑ9ˆ�rh   Nrƒ  r…  r„  r¯  re   r  c                 ó6  • UR                   S S n/ UQSPU R                  P7nU R                  U R                  U5      R	                  U5      5      R                  SS5      nU R                  U R                  U5      R	                  U5      5      R                  SS5      n	U R                  U5      R	                  U5      R                  SS5      n
U R                  U5      nUu  pÍ[        X‰XÍ5      u  p‰Ub  UR                  XšU R                  5      u  pš[        R                  " U R                  R                   ["        5      nU" U UU	U
U4U R$                  (       d  SOU R&                  U R(                  U R*                  S.UD6u  nnUR,                  " / UQSP76 nUR                   nUR                  " / US S QU R.                  PU R                  P76 nXûR1                  S5      R3                  5       -  nUR                  " U6 nU R5                  U5      nUU4$ )Nrb  r�   r%   r´  )Údropoutr  rŽ   )r&  rÀ   Úq_normÚq_projr¤  Ú	transposeÚk_normÚk_projÚv_projÚg_projr/   rÅ   rÏ   r   Úget_interfacerr  Ú_attn_implementationr0   ÚtrainingÚattention_dropoutr  rŽ   r   r  r(  ÚsigmoidÚo_proj)rd   rƒ  r…  r„  r¯  re   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚgate_statesÚcosÚsinÚattention_interfaceÚattn_outputÚattn_weightsÚoutput_shapes                     rf   rˆ  ÚStep3p7Attention.forwardA  s  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ 4§;¡;¨}Ó#=×#BÑ#BÀ<Ó#PÓQ×[Ñ[Ð\]Ð_`ÓaˆØ—[‘[ §¡¨]Ó!;×!@Ñ!@ÀÓ!NÓO×YÑYÐZ[Ð]^Ó_ˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆà—k‘k -Ó0ˆØ&‰ˆÜ#7¸ÐRUÓ#[Ñ ˆàÑ&Ø'6×'=Ñ'=¸jÐX\×XfÑXfÓ'gÑ$ˆJä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØð
%
ð  $Ÿ}Ÿ}‘C°$×2HÑ2HØ—L‘LØ×.Ñ.ñ
%
ð ñ
%
Ñ!ˆ�\ð "×)Ò)Ð;¨;Ð;¸Ò;ˆØ"×(Ñ(ˆØ!×&Ò&ÐY¨°S°bÐ(9ÐY¸4¿>¹>ÐYÈ4Ï=É=ÒYˆØ!×$9Ñ$9¸"Ó$=×$EÑ$EÓ$GÑGˆØ!×&Ò&¨Ð5ˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(rh   )r  r«   )ri   rj   rk   rl   r@   rb   rv  rB  r^  r]  r   r   r   rˆ  rt   ré   rê   s   @rf   r  r  ;  s    ø† ð:Ð0ð :¸S÷ :ð )-ñ*)à—|‘|ð*)ð # 5§<¡<°·±Ð#=Ñ>ð*)ð Ÿ™ tÑ+ð	*)ð
  ™ð*)ð Ð+Ñ,ð*)ð 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷*)ó *)rh   r  c                   ó   • \ rS rSrS rSrg)r®  in  c                 óÎ  • [         R                  R                  U 5        UR                  U l        UR                  U   n[        X25      U l        XR                  l        UR                  U   U l	        UR                  U   S:X  a  [        O[        nU" X5      U l        [        UR                  UR                  S9U l        [        UR                  UR                  S9U l        g )Nr¤   rt  )ry  r  rv  rJ   r§   r  rw  rr  r�   Úattention_typerž   r  rô  rx  rÇ  rŒ   Úinput_layernormÚpost_attention_layernorm)rd   rr  rÏ   Úlayer_configÚ	mlp_classs        rf   rv  ÚStep3p7DecoderLayer.__init__o  s½   € Ü
�	‰	×Ñ˜4Ô Ø!×-Ñ-ˆÔð ×.Ñ.¨yÑ9ˆÜ)¨,ÓBˆŒØ &�‰ÔØ$×0Ñ0°Ñ;ˆÔð .4×-CÑ-CÀIÑ-NÐRZÓ-ZÕ)Ô`jˆ	Ù˜VÓ/ˆŒä-¨f×.@Ñ.@Àf×FYÑFYÑZˆÔÜ(6°v×7IÑ7IÈv×ObÑObÑ(cˆÕ%rh   )r;  rJ   r<  rx  r=  rw  Nr  ru   rh   rf   r®  r®  n  s   † õdrh   r®  c                   óF   ^ • \ rS rSr% \\S'   \\S.rS\4U 4S jjr	Sr
U =r$ )r=   iƒ  rr  r×  c           	      ó´  >• [         TU ]  U5        [        R                  " UR                  UR
                  U R                  5      U l        [        R                  " [        UR                  5       Vs/ s H  n[        X5      PM     sn5      U l        [        UR
                  UR                  S9U l        [!        US9U l        UR$                  (       ai  [        UR                  UR                  UR$                  -   5      nU Vs1 s H	  nSU S3iM     nn['        U R(                  =(       d    / 5      U-  U l        U R+                  5         g s  snf s  snf )Nrt  )rr  z(^|\.)layers\.z\.)rÂ   rv  ry  Ú	Embeddingr‹   rJ   Úpadding_idxÚembed_tokensrÝ  r½   rL   r®  r]   rÇ  rŒ   Únormr¾  rÜ  r}   r¼   Ú"_keys_to_ignore_on_load_unexpectedrà  )rd   rr  rÍ   Ú
mtp_layersÚpatternsrÒ   s        €rf   rv  ÚStep3p7TextModel.__init__Š  s  ø€ Ü‰Ñ˜Ô ÜŸLšL¨×):Ñ):¸F×<NÑ<NÐPT×P`ÑP`ÓaˆÔÜ—m’mÌUÐSY×SkÑSkÔMlÓ$mÒMlÈÔ%8¸Ö%CÑMlÑ$mÓnˆŒÜ" 6×#5Ñ#5¸6×;NÑ;NÑOˆŒ	Ü0¸Ñ?ˆŒð ×*×*ô ˜v×7Ñ7¸×9QÑ9QÐTZ×TsÑTsÑ9sÓtˆJÙ9CÓDº°A˜>¨!¨¨BÓ/¹ˆHÐDÜ69¸$×:aÑ:a×:gÐegÓ6hÐksÑ6sˆDÔ3Ø�‰Õùò %nùò Es   Á3EÄE)rG  rE  r]   rF  rÜ  )ri   rj   rk   rl   r@   rp   r®  r  rð  rv  rt   ré   rê   s   @rf   r=   r=   ƒ  s)   ø‡ ØÓà,Ø&ñÐð
Ð0÷ õ rh   r=   c                   ó¤   • \ rS rSr% \\S'   S\4S jr\\  SS\	R                  S\	R                  S-  S\\   S-  S\\-  4S	 jj5       5       rS
rg)r;   i�  rr  c                 ó®  • [         R                  X5        [        UR                  5      U l        [        UR                  5      U l        UR                  R                  U l        [        R                  " UR                  R                  S-  UR                  R                  UR                  S9U l        UR                  U l        U R!                  5         g )Nr  )r’  )r<   rv  r>   rH   Úvision_modelr=   rí   Úlanguage_modelr‹   ry  ÚLinearrJ   rî   Úmulti_modal_projectorrï   Úimage_placeholder_token_idrà  )rd   rr  s     rf   rv  ÚStep3p7Model.__init__   s¡   € Ü×'Ñ'¨Ô5Ü.¨v×/CÑ/CÓDˆÔÜ.¨v×/AÑ/AÓBˆÔØ ×,Ñ,×7Ñ7ˆŒô &(§Y¢YØ× Ñ ×,Ñ,¨qÑ0°&×2DÑ2D×2PÑ2PÐW]×WlÑWlñ&
ˆÔ"ð +1×*?Ñ*?ˆÔ'Ø�‰Õrh   Nrþ   rÿ   r   r  c           	      óÎ  • U R                   " U40 UD6nU R                  UR                  5      nUb2  U R                  U R                   " U40 0 UESS0ED6R                  5      OS nUc  S/UR                  S   -  n/ nSn	[	        U5       H®  u  p«/ nUS:”  a4  XyX›-    nUR                  UR                  SUR                  S   5      5        UR                  Xj   R                  SUR                  S   5      5        X›-  n	UR                  [        U5      S:”  a  [        R                  " U5      OUS   5        M°     [        UR                  UUR                  UR                  S9$ )NÚoutput_hidden_statesFr   rb  r�   )ræ  Úpooler_outputrƒ  rØ  )rM  rP  ræ  r&  r¿   r@  r¤  r¸   rB  re  r   rƒ  rØ  )rd   rþ   rÿ   r   re   Úvision_outputÚimage_featuresÚpatch_image_featuresÚmergedÚcur_patch_idxrÍ   Ú	num_patchÚcur_featureÚpatch_slices                 rf   Úget_image_featuresÚStep3p7Model.get_image_features­  s{  € ð ×)Ò)¨,ÑA¸&ÑAˆØ×3Ñ3°M×4SÑ4SÓTˆð
 "Ñ-ð ×&Ñ&Ø×!Ò!Ð"4ÑbÐ8a¸6Ð8aÐCYÐ[`Ñ8aÑb×tÑtôð ð 	ð Ñ$Ø!"  n×&:Ñ&:¸1Ñ&=Ñ =ÐàˆØˆÜ%Ð&7Ö8‰LˆAØˆKØ˜1‹}Ø2À=ÑC\Ð]�Ø×"Ñ" ;×#3Ñ#3°B¸×8IÑ8IÈ"Ñ8MÓ#NÔOØ×Ñ˜~Ñ0×5Ñ5°b¸.×:NÑ:NÈrÑ:RÓSÔTØÑ&ˆMØ�M‰M´C¸Ó4DÀqÓ4Hœ%Ÿ)š) KÔ0ÈkÐZ[ÉnÖ]ñ 9ô *Ø+×=Ñ=Ø Ø'×5Ñ5Ø$×/Ñ/ñ	
ð 	
rh   )rQ  rN  rP  rM  r‹   rŠ  )ri   rj   rk   rl   rA   rp   rv  r   r   rB  r^  r·   rb   r]  r   r^  rt   ru   rh   rf   r;   r;   �  sz   ‡ ØÓð˜}ô ð Øð 37Ø.2ñ	#
à—l‘lð#
ð "ŸL™L¨4Ñ/ð#
ð   ™9 tÑ+ð	#
ð 
Ð+Ñ	+ô#
ó ó ó#
rh   r;   c                   ó    • \ rS rSr% \\S'   Srg)r:   iÕ  rr  ru   N)ri   rj   rk   rl   rA   rp   rt   ru   rh   rf   r:   r:   Õ  s   ‡ ØÖrh   r:   c                   óh   ^ • \ rS rSrSrS
SU 4S jjjr\S\\   4S j5       r	S\
S\S\4S jrS	rU =r$ )rC   iÙ  aA  Processor for Step-3.7-Flash.

Uses :class:`ProcessorMixin.__call__` for the standard image-token expansion
flow: the image processor splits each image into global + local patch crops,
then :meth:`replace_image_token` builds the per-image replacement string
that ``get_text_with_replacements`` substitutes into the text.
r  c                 ó�  >• SU l         Ub  UR                  U R                   5      OS U l        UR                  UR                  -  nUR
                  S   U-  S-  U l        UR                  U-  S-  U l        U R                   U R                  -  U l	        U R                   U R                  -  U l
        [        TU ]0  " SXUS.UD6  g )Nz
<im_patch>rû   r%   )Úimage_processorÚ	tokenizerÚchat_templateru   )Úimage_tokenÚconvert_tokens_to_idsrï   r  r  r  Únum_image_feature_sizerR   Únum_patch_feature_sizeÚimage_feature_placeholderÚpatch_feature_placeholderrÂ   rv  )rd   rc  rd  re  re   r‘  rÒ   s         €rf   rv  ÚStep3p7Processor.__init__ã  sÄ   ø€ Ø'ˆÔØS\ÑSh˜i×=Ñ=¸d×>NÑ>NÔOÐnrˆÔØ ×2Ñ2°_×5WÑ5WÑWˆØ'6×';Ñ';¸HÑ'EÈÑ'OÐTUÑ&UˆÔ#Ø'6×'AÑ'AÀVÑ'KÐPQÑ&QˆÔ#Ø)-×)9Ñ)9¸D×<WÑ<WÑ)WˆÔ&Ø)-×)9Ñ)9¸D×<WÑ<WÑ)WˆÔ&Ü‰ÒÐu¨Ð]jÑuÐntÓurh   c                 ó   • S/$ )Nr?  ru   )rd   s    rf   Úunused_input_namesÚ#Step3p7Processor.unused_input_namesí  s   € à%Ð&Ð&rh   Úimage_inputsÚ	image_idxc                 óð   • US   U   nUR                  S5      nUb  XR   OSnSn[        U5       H/  nUSU R                   S3-  nU(       d  M  Xh   (       d  M*  US-  nM1     USU R                   S	3-  nU$ )
zOReturn the expanded token string for image *image_idx* (patches + global view).r   r?  NÚ z<patch_start>z<patch_end>z<patch_newline>z
<im_start>z<im_end>)r­   r½   rk  rj  )	rd   rp  rq  re   Únum_patchesr?  Úpatch_newline_maskÚreplrÍ   s	            rf   Úreplace_image_tokenÚ$Step3p7Processor.replace_image_tokenñ  sŸ   € à"Ð#6Ñ7¸	ÑBˆØ*×.Ñ.Ð/DÓEÐØ?RÑ?^Ð0Ò;ÐdhÐØˆÜ�{Ö#ˆAØ�m D×$BÑ$BÐ#CÀ;ÐOÑOˆDß!Ð!Ð&8×&;Ñ&;ØÐ)Ñ)’ñ $ð 	�*˜T×;Ñ;Ð<¸HÐEÑEˆØˆrh   )rj  rf  rï   rh  ri  rk  rŠ  )r  N)ri   rj   rk   rl   rÔ   rv  Úpropertyr·   rq   rn  rs   rb   rw  rt   ré   rê   s   @rf   rC   rC   Ù  sS   ø† ñ÷vñ vð ð' D¨¡Ió 'ó ð'ð°ð Àð ÐSV÷ ò rh   rC   )pÚcollections.abcr   rB  Útorch.nnry  Úhuggingface_hub.dataclassesr   rs  r   r¸  Úcache_utilsr   Úconfiguration_utilsr   Úimage_processing_backendsr	   Úimage_processing_utilsr
   Úimage_transformsr   r   r   Úimage_utilsr   r   r   r   r   Úmodeling_layersr   Úmodeling_outputsr   r   Úmodeling_rope_utilsr   Úmodeling_utilsr   r   Úprocessing_utilsr   r   r   Úutilsr   r   r   r   r    r!   r"   Úutils.output_capturingr#   Úvision_utilsr$   Ú$deepseek_ocr2.modeling_deepseek_ocr2r&   r'   Ú deepseek_v4.modeling_deepseek_v4r(   r)   Úgemma3.modeling_gemma3r*   Úkimi_k25.modeling_kimi_k25r+   Úlaguna.modeling_lagunar,   r-   r.   r/   r0   Ú)minimax_m3_vl.configuration_minimax_m3_vlr1   Ú$minimax_m3_vl.modeling_minimax_m3_vlr2   r3   r4   r5   r6   Úqwen2_vl.modeling_qwen2_vlr7   Úsiglip.configuration_siglipr8   Úsiglip.modeling_siglipr9   Ú
get_loggerri   ÚloggerÚ__all__r?   r@   rA   rö   rB   r`  rk  ro  rq  rŒ  r<   r>   r¾  rÇ  rô  rÀ  rÄ  r  r  r®  r=   r;   r:   rC   ru   rh   rf   Ú<module>r˜     s“  ðõ %ã Ý Ý .å &Ý  Ý 3Ý ;Ý 2ß XÑ Xß fÕ fÝ 9ß KÝ 6ß Fß DÑ D÷÷ ñ õ 6Ý 3ß jß OÝ 4Ý F÷õ õ N÷õ õ EÝ <Ý ;ð 
×	Ò	˜HÓ	%€ò€ñ Ð6Ñ7ØôHÐ,ó Hó ó 8ðHñ8 Ð6Ñ7ØôALÐ-ó ALó ó 8ðALñH Ð6Ñ7Øô(Ð$ó (ó ó 8ð(ô2
 ,°eò 
ð ôc4Ð.ó c4ó ðc4ôR5Ð#@ô 5ô	Ð+ô 	ô	Ð7ô 	ô"Ð :ô "ôJÐ4ô ð@ ô('˜_ó ('ó ð('ðV ô/[Ð/ó /[ó ð/[ôd	Ð2ô 	ô	Ð'ô 	ô)�ô )ð ôÐ&ó ó ðô	Ð-ô 	ô	FÐ5ô 	Fô0)�ô 0)ôfdÐ,ô dô*�ô ô45
Ð$ô 5
ôpÐ&Jô ð ô"�~ó "ó ñ"rh   