+
    œ°³jT‘  ã                   ó^  € ^ RI t ^ RIHt ^ RIHt ^ RIHt ^ RIt^ RIH	u H
t ^ RIH	t	 ^ RIH
t ^RIHt ^RIHt ^R	IHt ^R
IHtHt ^RIHtHtHt ^RIHtHt ^RIH t  ^RI!H"t"H#t#H$t$ ^RI%H&t& ^RI'H(t(H)t) ^RI*H+t+H,t, ^RI-H.t.H/t/H0t0H1t1H2t2 ^RI3H4t4H5t5 ^RI6H7t7H8t8 ^RI9H:t: ^RI;H<t< ^RI=H>t> ^RI?H@t@ ^RIAHBtB ^RICHDtD ^RIEHFtFHGtG ^RIHHItIHJtJ ^RIKHLtL ^RIMHNtN R R  ltO ! R! R"]+R#R$7      tP]0 ! R% R&]4      4       tQ ! R' R(]>4      tR ! R) R*]	P¦                  4      tT ! R+ R,]	P¦                  4      tU ! R- R.]B4      tV ! R/ R0]	P¦                  4      tW ! R1 R2]	P¦                  4      tX]1 ! R3 R4]J4      4       tY ! R5 R6]L4      tZ ! R7 R8] 4      t[ ! R9 R:]I4      t\]0! R;R<7       ! R= R>]\4      4       t]]0! R?R<7       ! R@ RA]\4      4       t^]0! RBR<7      ] ! RC RD]"4      4       4       t_ ! RE RF]	P¦                  4      t` ! RG RH]	P¦                  4      ta]0! RIR<7       ! RJ RK]\4      4       tb. RLOtcR# )Mé    N)ÚCallable)Ú	dataclass)Ú	Annotated)Únn)Ú
functional)Úinitialization)ÚTorchvisionBackend)ÚBatchFeature)Úgroup_images_by_shapeÚreorder_images)Ú
ImageInputÚPILImageResamplingÚSizeDict)Úcreate_bidirectional_maskÚ(create_bidirectional_sliding_window_mask)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚBaseModelOutputWithPoolingÚMaskedLMOutput)ÚROPE_INIT_FUNCTIONS)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚImagesKwargsÚUnpack)Ú
TensorTypeÚTransformersKwargsÚauto_docstringÚno_inherit_decoratorÚtorch_compilable_check)ÚIMAGENET_STANDARD_MEANÚIMAGENET_STANDARD_STD)Úcan_return_tupleÚmaybe_autocast)Úcapture_outputs)Úpositive_int)ÚGemma4RMSNorm)Úapply_rotary_pos_emb)ÚLagunaRotaryEmbedding)Úconvert_image_to_patches)Úeager_attention_forwardÚ	repeat_kv)ÚMuseGlimmerPreTrainedModelÚMuseGlimmerTextAttention)ÚNemotronMLP©ÚNeoMMEConfigc                ó’   € V ^8„  d   QhR\         R\         R\         R,          R\        R,          R\        \         \         3,          /# )é   ÚheightÚwidthÚmax_sideNÚsizeÚreturn)Úintr   Útuple)Úformats   "Új/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/neomme/modular_neomme.pyÚ__annotate__r<   9   sG   € ÷ &)ñ &)¤3ð &)¬sð &)¼cÀD½jð &)ÔPXÐ[_ÕP_ð &)ÔdiÔjmÔorÐjrÕdsñ &)ó    c                ó¤  € Ve   VP                   MRpVe   VP                  MRpVe$   W,          V8  d   W@V,          ,          R,          MRpVe   \        Wb\        W4      ,          4      pVe    \        WeW,          ,          R,          4      pVR8X  d   W3# \        ^\	        W,          4      4      p\        ^\	        W,          4      4      pVRJ;'       d    \        Wx4      V8„  ;'       g    VRJ;'       d    Wx,          V8„  p	V	'       dŽ   \        ^\
        P                  ! W,          4      4      p\        ^\
        P                  ! W,          4      4      pVe;   Wx,          V8”  d.   Wx8¼  d   \        ^WX,          4      pWx3# \        ^WW,          4      pWx3# Ve®   W,          V8  d¡   Wx,          V8¼  d   Wx3# \        ^\
        P                  ! W,          4      4      p
\        ^\
        P                  ! W,          4      4      pVRJ;'       d    \        W«4      V8„  ;'       g    VRJ;'       d    W«,          V8„  p	V	'       g   W«3# Wx3# )zHCompute integer height and width from the configured image size targets.Ng      à?ç      ð?)Ú
min_pixelsÚ
max_pixelsÚminÚmaxÚroundÚmathÚfloorÚceil)r3   r4   r5   r6   r@   rA   ÚscaleÚresized_heightÚresized_widthÚexceeds_capÚceiled_heightÚceiled_widths   &&&&        r;   Úget_resize_output_sizerN   9   s  € à$(Ò$4�—’¸$€JØ$(Ò$4�—’¸$€JØ6@Ò6LÐQWÕQ_ÐblÔQlˆZ E�>Õ*¨sÖ2Ðru€EØÒÜ�E¤c¨&Ó&8Õ8Ó9ˆØÒÜ�E¨&­.Õ9¸cÕAÓBˆØ�„|Øˆ}Ðä˜œE &¥.Ó1Ó2€NÜ˜œ5 ¥Ó/Ó0€MØ 4Ð'×YÐY¬C°Ó,NÐQYÑ,Y÷ ð Ø˜$Ð×NÐN >Õ#AÀJÑ#Nð ÷ Ü˜Q¤§
¢
¨6­>Ó :Ó;ˆÜ˜AœtŸzšz¨%­-Ó8Ó9ˆØÒ! nÕ&DÀzÔ&QØÔ.Ü!$ Q¨
Õ(CÓ!D�ð Ð,Ð,ô !$ A zÕ'CÓ D�ØÐ,Ð,àÒ &¥.°:Ô"=ØÕ)¨ZÔ7Ø!Ð0Ð0Ü˜AœtŸyšy¨­Ó8Ó9ˆÜ˜1œdŸiši¨­Ó6Ó7ˆØ tÐ+×[Ð[´°MÓ0PÐS[Ñ0[÷ 
ð 
Ø˜dÐ"×PÐP }Õ'CÀjÑ'Pð 	÷ Ø Ð.Ð.àÐ(Ð(r=   c                   ó0   a € ] tR t^bt o RtV 3R ltRtV tR# )ÚNeoMMEImageProcessorKwargszú
patch_size (`int`, *optional*, defaults to `self.patch_size`):
    Side, in pixels, of one patch token. The image is padded to a whole multiple of it.
max_side (`int`, *optional*):
    Longest-side cap in pixels. Unset means no longest-side resize.
c                ó€   <€ V ^8„  d   Qh/ S[ S[S[! 4       3,          ;R&   S[ S[R,          S[! 4       3,          ;R&   # )r2   Ú
patch_sizeNr5   )r   r8   r%   )r:   Ú__classdict__s   "€r;   r<   Ú'NeoMMEImageProcessorKwargs.__annotate__b   s;   ø‡ ‚ ñ ™#š|›~Ð-Õ.Ñ.ñ ñ ™˜d�
¢L£NÐ2Õ3Ñ3ò r=   © N)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotate_func__Ú__static_attributes__Ú__classdictcell__©rS   s   @r;   rP   rP   b   s   ø‡ € ñ÷ ƒ r=   rP   F)Útotalc                   ó  a a€ ] tR t^nt oRt]t]P                  t	]
t]tRtRtRtRtRt^ tRtRtRR.tV3R lV 3R llt]V3R lV 3R	 ll4       tV3R
 lV 3R lltV3R lR ltV3R lR ltV3R lR ltRV3R lR lltRtVt V ;t!# )ÚNeoMMEImageProcessora{  
Constructs an image processor for NeoMME.

The processor converts each image to RGB and splits it into row-major patches. It preserves the original size by
default, but `max_side` or a pixel-area `size` can resize images. It pads the bottom and right edges to complete
the final patch. A batch returns one concatenated patch tensor and one grid height and width pair per image.
TNÚpixel_valuesÚimage_grid_hwc                ó0   <€ V ^8„  d   QhRS[ S[,          /# )r2   Úkwargs)r   rP   )r:   rS   s   "€r;   r<   Ú!NeoMMEImageProcessor.__annotate__‰   s   ø€ ÷ #ñ #¡Ñ(BÕ!Cñ #r=   c                ó(   <€ \         SV `  ! R/ VB  R # )NrU   )ÚsuperÚ__init__)Úselfre   Ú	__class__s   &,€r;   ri   ÚNeoMMEImageProcessor.__init__‰   s   ø€ Ü‰ÒÑ"˜6Ô"r=   c                ó<   <€ V ^8„  d   QhRS[ RS[S[,          RS[/# )r2   Úimagesre   r7   )r   r   rP   r
   )r:   rS   s   "€r;   r<   rf   �   s)   ø€ ÷ 4ñ 4¡ð 4±vÑ>XÕ7Yð 4Ñ^jñ 4r=   c                ó&   <€ \         SV `  ! V3/ VB # )zÞ
Returns:
    [`BatchFeature`] with `pixel_values` of shape `(total_patches, 3 * patch_size ** 2)` and
    `image_grid_hw` of shape `(batch_size, 2)`. `pixel_values` concatenates patches from every image in the
    batch.
)rh   Ú
preprocess)rj   rn   re   rk   s   &&,€r;   rp   ÚNeoMMEImageProcessor.preprocessŒ   s   ø€ ô ‰wÒ! &Ñ3¨FÑ3Ð3r=   c                ó    <€ V ^8„  d   QhRS[ /# ©r2   r7   )r9   )r:   rS   s   "€r;   r<   rf   –   s   ø€ ÷ =ñ =±uñ =r=   c                óÄ   <€ VR ,          pVe'   \        \        V4      4      RR08w  d   \        R4      hVR ,          f   VP                  RR4       \        SV `  ! R/ VB # )r6   Nr@   rA   z4size must contain exactly min_pixels and max_pixels.Ú	do_resizerU   )ÚsetÚdictÚ
ValueErrorÚpoprh   Ú_validate_preprocess_kwargs)rj   re   r6   rk   s   &, €r;   rz   Ú0NeoMMEImageProcessor._validate_preprocess_kwargs–   s]   ø€ Ø�f�~ˆØÒ¤¤D¨£J£°LÀ,Ð3OÔ OÜÐSÓTÐTà�&�>Ò!à�J‰J�{ DÔ)Ü‰wÒ2Ñ<°VÑ<Ð<r=   c          
      óN   <€ V ^8„  d   QhRRRS[ R,          RS[R,          RRRR/# )	r2   Úimageútorch.Tensorr5   Nr6   Úresampleú7PILImageResampling | tvF.InterpolationMode | int | Noner7   )r8   r   )r:   rS   s   "€r;   r<   rf       sM   ø€ ÷ Vñ VàðVñ ˜•*ðVñ ˜�oð	Vð
 LðVð 
ñVr=   c                ó¾   € VP                   R,          VP                   R,          re\        WVW#4      w  rxWx3WV38X  d   V# \        WxR7      pV P                  WVRR7      # )r2   )r3   r4   T)r}   r6   r   Ú	antialiaséþÿÿÿéÿÿÿÿ)ÚshaperN   r   Úresize)	rj   r}   r5   r6   r   r3   r4   rI   rJ   s	   &&&&&    r;   Ú_resize_to_budgetÚ&NeoMMEImageProcessor._resize_to_budget    s\   € ð Ÿ™ B�¨¯©°R­�Ü(>¸vÈhÓ(]Ñ%ˆØÐ*¨v¨oÔ=ØˆLÜ˜~ÔCˆØ�{‰{ ¸HÐPTˆ{ÓUÐUr=   c          	      óB   <€ V ^8„  d   QhRRRS[ RS[RS[ S[ 3,          /# )r2   r}   r~   rR   r7   )r8   r9   )r:   rS   s   "€r;   r<   rf   ®   s1   ø€ ÷ .ñ .¨ð .ÁCð .ÉEÐR`ÑbeÑgjÐRjÕLkñ .r=   c                ó  € VP                   R,          VP                   R,          rCV) V,          ) V) V,          ) reWR,          V,
          pWb,          V,
          pV'       g	   V'       d   \        P                  ! V^ ^ W‡.^ R7      pWV3# )r2   )Úfillrƒ   r„   )r…   ÚtvFÚpad)	rj   r}   rR   r3   r4   Úgrid_heightÚ
grid_widthÚ
pad_heightÚ	pad_widths	   &&&      r;   Ú_pad_to_patch_gridÚ'NeoMMEImageProcessor._pad_to_patch_grid®   sw   € ØŸ™ B�¨¯©°R­�Ø%+ G¨zÕ$9Ð":¸u¸fÈ
Õ>RÐ<S�ZØ Õ-°Õ6ˆ
ØÕ+¨eÕ3ˆ	ßŸÜ—G’G˜E A q¨)Ð#@ÀqÔIˆEà :Ð-Ð-r=   c                ó  <€ V ^8„  d   QhRS[ R,          RS[RS[RS[R,          RS[R,          RR	R
S[RS[RS[RS[S[ S[,          ,          R,          RS[S[ S[,          ,          R,          RS[R,          RS[S[,          R,          RS[/# )r2   rn   r~   ru   rR   r5   Nr6   r   r€   Ú
do_rescaleÚrescale_factorÚdo_normalizeÚ
image_meanÚ	image_stdÚdisable_groupingÚreturn_tensorsr7   )ÚlistÚboolr8   r   ÚfloatÚstrr   r
   )r:   rS   s   "€r;   r<   rf   ¸   sÏ   ø€ ÷ 0
ñ 0
á�^Õ$ð0
ñ ð0
ñ ð	0
ñ
 ˜•*ð0
ñ ˜�oð0
ð Lð0
ñ ð0
ñ ð0
ñ ð0
ñ ™D¡�KÕ'¨$Õ.ð0
ñ ™4¡�;Õ&¨Õ-ð0
ñ  �+ð0
ñ ™jÕ(¨4Õ/ð0
ñ  
ñ!0
r=   c           	     óœ  € \        WR 7      w  pp/ pVP                  4        F&  w  ppV'       d   V P                  VWEV4      pVVV&   K(  	  \        VV4      p\        VVR 7      w  pp/ p/ pVP                  4        F{  w  ppV P	                  VV4      w  pppV P                  VWxWšV4      p\        VV4      VV&   \        P                  ! VV..\        V4      ,          \        P                  R7      VV&   K}  	  \        VV4      p\        VV4      p\        R\        P                  ! V^ R7      R\        P                  ! V4      /VR7      # ))rš   )Údtyperb   ©Údimrc   )ÚdataÚtensor_type)r   Úitemsr‡   r   r’   Úrescale_and_normalizer)   ÚtorchÚtensorÚlenÚint64r
   ÚcatÚstack)rj   rn   ru   rR   r5   r6   r   r•   r–   r—   r˜   r™   rš   r›   re   Úgrouped_imagesÚgrouped_images_indexÚresized_images_groupedr…   Ústacked_imagesÚresized_imagesÚprocessed_images_groupedÚimage_grids_groupedrŽ   r�   rb   rc   s   &&&&&&&&&&&&&&,            r;   Ú_preprocessÚ NeoMMEImageProcessor._preprocess¸   sk  € ô" 0EÀVÔ/oÑ,ˆÐ,Ø!#ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ßØ!%×!7Ñ!7¸ÈÐX`Ó!a�Ø,:Ð" 5Ó)ñ &<ô (Ð(>Ð@TÓUˆä/DÀ^ÐfvÔ/wÑ,ˆÐ,Ø#%Ð Ø ÐØ%3×%9Ñ%9Ö%;Ñ!ˆE�>ð 7;×6MÑ6MÈnÐ^hÓ6iÑ3ˆN˜K¨Ø!×7Ñ7Ø 
¸LÐV_óˆNô /GÀ~ÐWaÓ.bÐ$ UÑ+Ü).¯ªØ˜zÐ*Ð+¬c°.Ó.AÕAÌÏÉô*Ð Ó&ñ &<ô &Ð&>Ð@TÓUˆÜ&Ð':Ð<PÓQˆÜà¤§	¢	¨,¸AÔ >Ø¤§¢¨]Ó!;ðð 'ô
ð 	
r=   c                ó,   <€ V ^8„  d   QhRS[ RS[ RS[ /# )r2   r3   r4   r7   )r8   )r:   rS   s   "€r;   r<   rf   ê   s(   ø€ ÷ Dñ D±#ð D¹cð DÑZ]ñ Dr=   c                ó†  € T;'       g    / pVP                  RV P                  4      pVP                  RV P                  4      pV P                  VP                  RV P                  4      R7      R,          pVP                  RV P
                  4      '       d   \        WWV4      w  rV) V,          ) V) V,          ) ,          # )zî
Return the number of image patches for one image, excluding row markers.

The method applies the effective resize settings, then rounds each image dimension up to a whole patch.
Values in `images_kwargs` override the processor settings.
rR   r5   r6   )r6   ru   )ÚgetrR   r5   Ú_standardize_kwargsr6   ru   rN   )rj   r3   r4   Úimages_kwargsrR   r5   r6   s   &&&&   r;   Úget_number_of_image_patchesÚ0NeoMMEImageProcessor.get_number_of_image_patchesê   s«   € ð &×+Ð+¨ˆØ"×&Ñ& |°T·_±_ÓEˆ
Ø ×$Ñ$ Z°·±Ó?ˆØ×'Ñ'¨]×->Ñ->¸vÀtÇyÁyÓ-QÐ'ÓRÐSYÕZˆà×Ñ˜[¨$¯.©.×9Ò9Ü2°6À(ÓQ‰MˆFà�˜JÕ&Ð'¨e¨V°zÕ-AÐ+BÕCÐCr=   rU   gp?©N)"rV   rW   rX   rY   rZ   rP   Úvalid_kwargsr   ÚBILINEARr   r    r˜   r!   r™   Údo_convert_rgbru   r•   r–   r—   rR   r5   r6   Úmodel_input_namesri   r   rp   rz   r‡   r’   rµ   r¼   r\   r]   Ú__classcell__©rk   rS   s   @@r;   ra   ra   n   s¹   ù‡ € ñð .€Là!×*Ñ*€HØ'€JØ%€IØ€NØ€IØ€JØ€NØ€LØ€Jà€HØ€Dà'¨Ð9Ð÷#ó #ð ÷4ò 4ó ð4÷=ó =÷Vð V÷.ð .÷0
ð 0
÷dD÷ Dò Dr=   ra   c                   ó   € ] tR t^ütRtR# )ÚNeoMMERMSNormrU   N©rV   rW   rX   rY   r\   rU   r=   r;   rÆ   rÆ   ü   ó   † Ûr=   rÆ   c                   óT   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltRtVtV ;t	# )ÚNeoMMEEmbeddingsé   zZFactorized (ALBERT-style) token embeddings: `vocab_size -> embedding_rank -> hidden_size`.c                ó    <€ V ^8„  d   QhRS[ /# ©r2   Úconfigr/   )r:   rS   s   "€r;   r<   ÚNeoMMEEmbeddings.__annotate__  s   ø€ ÷ eñ e™|ñ er=   c                óè   <€ \         SV `  4        \        P                  ! VP                  VP
                  4      V n        \        P                  ! VP
                  VP                  R R7      V n	        R# ©F©ÚbiasN)
rh   ri   r   Ú	EmbeddingÚ
vocab_sizeÚembedding_rankÚword_embeddingsÚLinearÚhidden_sizeÚembedding_projection©rj   rÎ   rk   s   &&€r;   ri   ÚNeoMMEEmbeddings.__init__  sO   ø€ Ü‰ÑÔÜ!Ÿ|š|¨F×,=Ñ,=¸v×?TÑ?TÓUˆÔÜ$&§I¢I¨f×.CÑ.CÀV×EWÑEWÐ^cÔ$dˆÖ!r=   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r2   Ú	input_idsr7   )r¨   Ú
LongTensorÚTensor)r:   rS   s   "€r;   r<   rÏ     s)   ø€ ÷ Jñ J¡×!1Ñ!1ð J±e·l±lñ Jr=   c                óB   € V P                  V P                  V4      4      # r¾   ©rÚ   r×   )rj   rÞ   s   &&r;   ÚforwardÚNeoMMEEmbeddings.forward  s   € Ø×(Ñ(¨×)=Ñ)=¸iÓ)HÓIÐIr=   râ   ©
rV   rW   rX   rY   rZ   ri   rã   r\   r]   rÃ   rÄ   s   @@r;   rÊ   rÊ      s&   ù‡ € Ùd÷eó e÷
J÷ Jð Jr=   rÊ   c                   óT   a a€ ] tR tRt oRtV3R lV 3R lltV3R lR ltRtVtV ;t	# )ÚNeoMMEPatchEmbeddingsi  z<Patch stem that maps flattened image patches to hidden size.c                ó    <€ V ^8„  d   QhRS[ /# rÍ   r/   )r:   rS   s   "€r;   r<   Ú"NeoMMEPatchEmbeddings.__annotate__  s   ø€ ÷ Zñ Z™|ñ Zr=   c                ó†  <€ \         SV `  4        \        P                  ! VP                  4      V n        \        P                  ! VP                  VP                  ^,          RR7      V n        \        P                  ! 4       V n
        \        P                  ! VP                  ^,          VP                  RR7      V n        R# )r2   FrÒ   TN)rh   ri   r   Ú	LayerNormÚ	patch_dimÚnormrØ   rÙ   Úup_projÚGELUÚact_fnÚ	down_projrÛ   s   &&€r;   ri   ÚNeoMMEPatchEmbeddings.__init__  s}   ø€ Ü‰ÑÔÜ—L’L ×!1Ñ!1Ó2ˆŒ	Ü—y’y ×!1Ñ!1°6×3EÑ3EÈÕ3IÐPUÔVˆŒÜ—g’g“iˆŒÜŸš 6×#5Ñ#5¸Õ#9¸6×;MÑ;MÐTXÔYˆŽr=   c                óN   <€ V ^8„  d   QhRS[ P                  RS[ P                  /# )r2   rb   r7   ©r¨   rà   )r:   rS   s   "€r;   r<   ré     s#   ø€ ÷ :ñ :¡E§L¡Lð :±U·\±\ñ :r=   c                ó‚   € V P                  V P                  V4      4      pV P                  V P                  V4      4      # r¾   )rî   rí   rñ   rð   )rj   rb   Úhidden_statess   && r;   rã   ÚNeoMMEPatchEmbeddings.forward  s1   € ØŸ™ T§Y¡Y¨|Ó%<Ó=ˆØ�~‰~˜dŸk™k¨-Ó8Ó9Ð9r=   )rð   rñ   rí   rî   rå   rÄ   s   @@r;   rç   rç     s#   ù‡ € ÙF÷Zó Z÷:÷ :ð :r=   rç   c                   ó@   a € ] tR tRt o RtRV 3R lR lltR tRtV tR# )	ÚNeoMMERotaryEmbeddingi  zBTwo-axis interleaved M-RoPE with per-layer-type frequency spectra.Nc          
      ó¦   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[R,          RS[S[ P                  S[ P                  3,          /# )r2   ÚxÚposition_idsÚ
layer_typeNr7   )r¨   rà   rß   rŸ   r9   )r:   rS   s   "€r;   r<   Ú"NeoMMERotaryEmbedding.__annotate__  sN   ø€ ÷ 0ñ 0Ù—‘ð0Ù-2×-=Ñ-=ð0ÙKNÐQUÍ:ð0á	‰u�|‰|™UŸ\™\Ð)Õ	*ñ0r=   c                ó4  € \        W R 24      p\        W R24      pVR,          P                  4       P                  ^VP                  ^,          R^4      pVR	,          P                  4       p\	        VP
                  P                  \        4      '       d2   VP
                  P                  R8w  d   VP
                  P                  MRp\        VRR7      ;_uu_ 4        Wg,          P                  ^^4      p	V	P                  4       V,          p
V	P                  4       V,          pRRR4       V P                  X
4      p
V P                  X4      pV
P                  VP                  4      VP                  VP                  4      3#   + '       g   i     Lh; i)
Ú	_inv_freqÚ_attention_scalingNÚmpsÚcpuF)Údevice_typeÚenabled)NNºNNNNr„   )r  r  Nr  )Úgetattrrž   Úexpandr…   Ú
isinstanceÚdeviceÚtyperŸ   r#   Ú	transposeÚcosÚsinÚrecomposition_frequenciesÚtor¡   )rj   rû   rü   rý   Úinv_freqÚattention_scalingÚinv_freq_expandedÚposition_ids_expandedr  Úfreqsr  r  s   &&&&        r;   rã   ÚNeoMMERotaryEmbedding.forward  s=  € ô ˜4 <¨yÐ!9Ó:ˆÜ# D¨LÐ8JÐ*KÓLÐà$Ð%8Õ9×?Ñ?ÓA×HÑHÈÈL×L^ÑL^Ð_`ÕLaÐceÐghÓiÐØ ,¨]Õ ;× AÑ AÓ CÐä'1°!·(±(·-±-Ä×'EÒ'EÈ!Ï(É(Ï-É-Ð[`ÔJ`�a—h‘h—m’mÐfkˆÜ¨¸U×CÖCà&Õ>×IÑIÈ!ÈQÓOˆEØ—)‘)“+Ð 1Õ1ˆCØ—)‘)“+Ð 1Õ1ˆC÷	 Dð ×,Ñ,¨SÓ1ˆØ×,Ñ,¨SÓ1ˆØ�v‰v�a—g‘g‹ §¡ q§w¡w£Ð/Ð/÷ D×Cús   Ã AFÆF	c                óÂ   € V^ ,          R,          V^,          R,          r2\         P                  ! W#.RR7      P                  R4      p\         P                  ! WD.RR7      # )zM
Recompose the frequencies into the final spatial layout used per each grid.
r¢   ).:r   Nr2   ).:é   Nr2   r„   rƒ   )r¨   r­   Úflattenr¬   )rj   ÚfreqÚfreq_rowÚfreq_colÚangless   &&   r;   r  Ú/NeoMMERotaryEmbedding.recomposition_frequencies2  sO   € ð " !�W YÕ/°°aµ¸Õ1C�(Ü—’˜hÐ1°rÔ:×BÑBÀ2ÓFˆÜ�yŠy˜&Ð)¨rÔ2Ð2r=   rU   r¾   )	rV   rW   rX   rY   rZ   rã   r  r\   r]   r^   s   @r;   rù   rù     s   ø‡ € ÙL÷0ò 0÷(3ð 3r=   rù   c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚNeoMMEExclusiveSelfAttentioni=  c                ó    <€ V ^8„  d   QhRS[ /# rÍ   r/   )r:   rS   s   "€r;   r<   Ú)NeoMMEExclusiveSelfAttention.__annotate__>  s   ø€ ÷ Kñ K™|ñ Kr=   c                óÚ   <€ \         SV `  4        VP                  VP                  ,          V n        \
        P                  ! \        P                  ! VP                  4      4      V n	        R # r¾   )
rh   ri   Únum_attention_headsÚnum_key_value_headsÚnum_key_value_groupsr   Ú	Parameterr¨   ÚzerosÚalpharÛ   s   &&€r;   ri   Ú%NeoMMEExclusiveSelfAttention.__init__>  sF   ø€ Ü‰ÑÔØ$*×$>Ñ$>À&×B\ÑB\Õ$\ˆÔ!Ü—\’\¤%§+¢+¨f×.HÑ.HÓ"IÓJˆŽ
r=   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r2   Úattn_outputÚvalue_statesr7   rô   )r:   rS   s   "€r;   r<   r"  C  s1   ø€ ÷ ?ñ ?¡5§<¡<ð ?¹u¿|¹|ð ?ÑPU×P\ÑP\ñ ?r=   c                ó¾  € \        W P                  4      P                  ^^4      p\        P                  ! VP                  4       RR7      P                  VP                  4      pW,          P                  RRR7      p\        P                  ! V P                  4      P                  VP                  4      P                  ^^R^4      pWV,          V,          ,
          # )r  r¢   T)Úkeepdimr„   )r+   r&  r  ÚFÚ	normalizerž   r  r¡   Úsumr¨   Útanhr)  Úview)rj   r,  r-  Ú
value_unitÚ
projectionrH   s   &&&   r;   rã   Ú$NeoMMEExclusiveSelfAttention.forwardC  sª   € Ü  ×/HÑ/HÓI×SÑSÐTUÐWXÓYˆÜ—[’[ ×!3Ñ!3Ó!5¸2Ô>×AÑAÀ+×BSÑBSÓTˆ
Ø!Õ.×3Ñ3°BÀÐ3ÓEˆ
Ü—
’
˜4Ÿ:™:Ó&×)Ñ)¨+×*;Ñ*;Ó<×AÑAÀ!ÀQÈÈAÓNˆØ jÕ0°JÕ>Õ>Ð>r=   )r)  r&  ©	rV   rW   rX   rY   ri   rã   r\   r]   rÃ   rÄ   s   @@r;   r   r   =  s    ù‡ € ÷Kó K÷
?÷ ?ð ?r=   r   c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚNeoMMESigmoidGatedProjectioniK  c                ó    <€ V ^8„  d   QhRS[ /# rÍ   r/   )r:   rS   s   "€r;   r<   Ú)NeoMMESigmoidGatedProjection.__annotate__L  s   ø€ ÷ añ a™|ñ ar=   c                ó  <€ \         SV `  4        VP                  VP                  ,          p\        P
                  ! VP                  VR R7      V n        \        P
                  ! W!P                  VP                  R7      V n	        R# rÑ   )
rh   ri   r$  Úhead_dimr   rØ   rÙ   Ú	gate_projÚattention_biasÚo_proj)rj   rÎ   Úprojection_sizerk   s   && €r;   ri   Ú%NeoMMESigmoidGatedProjection.__init__L  sZ   ø€ Ü‰ÑÔØ ×4Ñ4°v·±ÕFˆÜŸš 6×#5Ñ#5°ÈUÔSˆŒÜ—i’i ×1CÑ1CÈ&×J_ÑJ_Ô`ˆŽr=   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r2   r,  rö   r7   rô   )r:   rS   s   "€r;   r<   r<  R  s6   ø€ ÷ Wñ W¡5§<¡<ð WÁÇÁð WÑQV×Q]ÑQ]ñ Wr=   c                óx   € V P                  V\        P                  ! V P                  V4      4      ,          4      # r¾   )rA  r¨   Úsigmoidr?  )rj   r,  rö   s   &&&r;   rã   Ú$NeoMMESigmoidGatedProjection.forwardR  s(   € Ø�{‰{˜;¬¯ª°t·~±~ÀmÓ7TÓ)UÕUÓVÐVr=   )r?  rA  r8  rÄ   s   @@r;   r:  r:  K  s#   ù‡ € ÷aó a÷W÷ Wð Wr=   r:  c                   óX   a a€ ] tR tRt oRtV3R lV 3R lltRV3R lR lltRtVtV ;t	# )	ÚNeoMMEAttentioniV  zéBidirectional grouped-query attention with QK-norm, M-RoPE, and a sigmoid output gate.

QK-norm runs before rotary embedding, value embeddings are added after rotation, and
exclusive self-attention is applied before the output gate.
c                ó&   <€ V ^8„  d   QhRS[ RS[/# ©r2   rÎ   Ú	layer_idx©r0   r8   )r:   rS   s   "€r;   r<   ÚNeoMMEAttention.__annotate__^  s   ø€ ÷ Fñ F™|ð F¹ñ Fr=   c                óê  <€ \         SV `  4        V =V =V =V =VP                  V,          V n        VP                  V n        R V n	        \        VP                  VP                  R R7      V n        \        VP                  VP                  R R7      V n        V P                  '       d%   VP                   V,          P"                  ^,           MRV n        \%        V4      V n        \)        V4      V n        R# )F©Ú
with_scaleN)rh   ri   Úqk_normÚqk_scale_factorr?  rA  Úlayer_typesÚattention_typer$  Ú	is_causalrÆ   r>  Únorm_epsÚq_normÚk_normÚis_local_attentionÚper_layer_configÚsliding_windowr   Úexclusive_self_attentionr:  Úoutput_projection©rj   rÎ   rL  rk   s   &&&€r;   ri   ÚNeoMMEAttention.__init__^  sÍ   ø€ Ü‰ÑÔØˆLØÐ ØˆNØˆKà$×0Ñ0°Õ;ˆÔØ#)×#=Ñ#=ˆÔ ØˆŒÜ# F§O¡O°V·_±_ÐQVÔWˆŒÜ# F§O¡O°V·_±_ÐQVÔWˆŒð
 FJ×E\×E\ÐE\ˆF×#Ñ# IÕ.×=Ñ=ÀÖAÐbfð 	Ôô )EÀVÓ(LˆÔ%Ü!=¸fÓ!EˆÖr=   c                ó0  <€ V ^8„  d   QhRS[ P                  RS[S[ P                  S[ P                  3,          RS[ P                  R,          RS[ P                  R,          RS[S[,          RS[S[ P                  S[ P                  R,          3,          /# )r2   rö   Úposition_embeddingsÚattention_maskNÚvalue_embedsre   r7   ©r¨   rà   r9   r   r   )r:   rS   s   "€r;   r<   rN  s  sŒ   ø€ ÷ *)ñ *)á—|‘|ð*)ñ #¡5§<¡<±·±Ð#=Õ>ð*)ñ Ÿ™ tÕ+ð	*)ñ
 —l‘l TÕ)ð*)ñ Ñ+Õ,ð*)ñ 
‰u�|‰|™UŸ\™\¨DÕ0Ð0Õ	1ñ*)r=   c           	     ó„  € VP                   R R p. VORNV P                  N5pV P                  V4      P                  V4      P	                  ^^4      pV P                  V4      P                  V4      P	                  ^^4      p	V P                  V4      P                  V4      P	                  ^^4      p
V P                  V4      pV P                  V	4      p	Vw  r¼\        W‰W¼4      w  r‰Ve(   W¤P                  V4      P	                  ^^4      ,           p
\        P                  ! V P                  P                  \        4      pT! V VV	V
V3RV P                  '       d   V P                   MRRV P"                  RV P$                  /VB w  rïV P'                  Wê4      pVP(                  ! . VORN5!  pV P+                  Wá4      pWï3# )NÚdropoutç        Úscalingr\  r„   )r…   r>  Úq_projr4  r  Úk_projÚv_projrX  rY  r'   r   Úget_interfacerÎ   Ú_attn_implementationr*   ÚtrainingÚattention_dropoutri  r\  r]  Úreshaper^  )rj   rö   rb  rc  rd  re   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesr-  r  r  Úattention_interfacer,  Úattn_weightss   &&&&&,          r;   rã   ÚNeoMMEAttention.forwards  sÂ  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ—[‘[ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆà—{‘{ <Ó0ˆØ—[‘[ Ó,ˆ
à&‰ˆÜ#7¸ÐRUÓ#[Ñ ˆØÒ#Ø'×*;Ñ*;¸LÓ*I×*SÑ*SÐTUÐWXÓ*YÕYˆLä(?×(MÒ(MØ�K‰K×,Ñ,Ô.Eó)
Ðñ %8ØØØØØñ
%
ð /3¯m¯m¨m�D×*Ò*Àð
%
ð —L‘Lð
%
ð  ×.Ñ.ð
%
ð ñ
%
Ñ!ˆð ×3Ñ3°KÓNˆØ!×)Ò)Ð;¨;Ð;¸Ó;ˆØ×,Ñ,¨[ÓHˆØÐ(Ð(r=   )rU  r]  rV  rY  r$  r^  rX  r\  )NNrå   rÄ   s   @@r;   rI  rI  V  s%   ù‡ € ñ÷Fó F÷**)÷ *)ò *)r=   rI  c                   ó   € ] tR tRtRtR# )Ú	NeoMMEMLPi   rU   NrÇ   rU   r=   r;   rz  rz     rÈ   r=   rz  c                   óX   a a€ ] tR tRt oRtV3R lV 3R lltRV3R lR lltRtVtV ;t	# )	ÚNeoMMEEncoderLayeri¤  zGPre-norm encoder layer with initial-state mixing and muP depth scaling.c                ó&   <€ V ^8„  d   QhRS[ RS[/# rK  rM  )r:   rS   s   "€r;   r<   ÚNeoMMEEncoderLayer.__annotate__§  s   ø€ ÷ <ñ <™|ð <¹ñ <r=   c                ó´  <€ \         SV `  4        \        W4      V n        \	        V4      V n        \        P                  ! \        P                  ! R R.4      4      V n
        \        VP                  VP                  RR7      V n        \        VP                  VP                  RR7      V n        VP                   V n        VP"                  V,          V n        R# )r?   rh  FrP  N)rh   ri   rI  Ú	self_attnrz  Úmlpr   r'  r¨   r©   ÚlambdasrÆ   rÙ   rW  Úinput_layernormÚpost_attention_layernormÚresidual_multiplierrT  rU  r_  s   &&&€r;   ri   ÚNeoMMEEncoderLayer.__init__§  sœ   ø€ Ü‰ÑÔÜ(¨Ó;ˆŒÜ˜VÓ$ˆŒÜ—|’|¤E§L¢L°#°s°Ó$<Ó=ˆŒÜ,¨V×-?Ñ-?ÀÇÁÐ]bÔcˆÔÜ(5°f×6HÑ6HÈ&Ï/É/ÐfkÔ(lˆÔ%Ø#)×#=Ñ#=ˆÔ Ø$×0Ñ0°Õ;ˆÖr=   c                ó   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  R,          RS[S[ P                  S[ P                  3,          R,          RS[ P                  R,          RS[S[,          RS[ P                  /# )	r2   rö   Úinitial_hidden_statesrd  Nrb  rc  re   r7   re  )r:   rS   s   "€r;   r<   r~  ±  s•   ø€ ÷ Eñ Eá—|‘|ðEñ  %Ÿ|™|ðEñ —l‘l TÕ)ð	Eñ
 #¡5§<¡<±·±Ð#=Õ>ÀÕEðEñ Ÿ™ tÕ+ðEñ Ñ+Õ,ðEñ 
�‰ñEr=   c           	     ót  € V P                   ^ ,          V,          V P                   ^,          V,          ,           pV P                  V4      pV P                  ! V3RVRVRV/VB w  ršWP                  V	,          ,           pV P	                  V4      pV P                  V4      pWP                  V,          ,           # )r   rb  rc  rd  )r‚  rƒ  r€  r…  r„  r�  )rj   rö   rˆ  rd  rb  rc  re   Úmixed_statesÚnormed_statesr,  Ú_Ú
mlp_outputs   &&&&&&,     r;   rã   ÚNeoMMEEncoderLayer.forward±  s¹   € ð —|‘| A•¨Õ6¸¿¹Àa½ÐK`Õ9`Õ`ˆØ×,Ñ,¨\Ó:ˆØŸšØñ
à 3ð
ð *ð
ð &ð	
ð
 ñ
‰ˆð &×(@Ñ(@À;Õ(NÕNˆà×5Ñ5°mÓDˆØ—X‘X˜mÓ,ˆ
Ø×7Ñ7¸*ÕDÕDÐDr=   )rU  rƒ  r‚  r�  r„  r…  r€  ©NNNrå   rÄ   s   @@r;   r|  r|  ¤  s$   ù‡ € ÙQ÷<ó <÷E÷ Eò Er=   r|  c                   ó¶   a a€ ] tR tRt oRtR.tR]R]/tV3R lR lt	V3R lR lt
]P                  ! 4       V3R	 lR
 l4       tRV3R lV 3R llltRtVtV ;t# )ÚNeoMMEPreTrainedModeliÊ  r|  rö   Ú
attentionsc                ó4   <€ V ^8„  d   QhRS[ P                  /# rs   ©r   rÔ   )r:   rS   s   "€r;   r<   Ú"NeoMMEPreTrainedModel.__annotate__Ò  s   ø€ ÷ 5ñ 5¡b§l¡lñ 5r=   c                óZ   € \        W P                  V 4      pVP                  P                  # r¾   ©r  Úbase_model_prefixÚembed_tokensr×   )rj   Úbackbones   & r;   Úget_input_embeddingsÚ*NeoMMEPreTrainedModel.get_input_embeddingsÒ  s&   € Ü˜4×!7Ñ!7¸Ó>ˆØ×$Ñ$×4Ñ4Ð4r=   c                ó8   <€ V ^8„  d   QhRS[ P                  RR/# )r2   Úvaluer7   Nr”  )r:   rS   s   "€r;   r<   r•  Ö  s   ø€ ÷ 6ñ 6©"¯,©,ð 6¸4ñ 6r=   c                óR   € \        W P                  V 4      pWP                  n        R # r¾   r—  )rj   rž  rš  s   && r;   Úset_input_embeddingsÚ*NeoMMEPreTrainedModel.set_input_embeddingsÖ  s    € Ü˜4×!7Ñ!7¸Ó>ˆØ05×ÑÖ-r=   c                ó4   <€ V ^8„  d   QhRS[ P                  /# )r2   Úmodule)r   ÚModule)r:   rS   s   "€r;   r<   r•  Û  s   ø€ ÷ Yñ Y¡B§I¡Iñ Yr=   c                óÞ  € \         P                  ! W4       \        V\        4      '       dK   \        P
                  ! VP                  P                  R V P                  P                  R,          R7       R# \        V\        4      '       d#   \        P                  ! VP                  4       R# \        V\        4      '       d-   \        P                  ! VP                  P                  4       R# \        V\        4      '       d-   \        P                  ! VP                   P                  4       R# \        V\"        4      '       d:   \        P$                  ! VP&                  \(        P*                  ! RR .4      4       R# \        V\,        4      '       d-   \        P                  ! VP.                  P                  4       R# \        V\0        4      '       dK   \        P
                  ! VP2                  P                  R V P                  P                  R,          R7       R# \        V\4        4      '       d´   VP6                   F¡  pVP8                  pVP:                  V,          R8w  d   \<        VP:                  V,          ,          pV! VP                  VR7      w  rE\        P$                  ! \?        W R24      V4       \        P$                  ! \?        W R24      V4       K£  	  R# R# )	rh  )ÚmeanÚstdr?   Údefault)rý   r   Ú_original_inv_freqNg      à¿) r   Ú_init_weightsr	  rÊ   ÚinitÚnormal_r×   ÚweightrÎ   rÖ   r   Úzeros_r)  r:  rA  rz  rñ   r|  Úcopy_r‚  r¨   r©   ÚNeoMMEModelÚvalue_embeddingsÚNeoMMEForMaskedLMÚlm_headrù   rT  Úcompute_default_rope_parametersÚ	rope_typer   r  )rj   r£  rý   Úrope_init_fnr  rŒ  s   &&    r;   rª  Ú#NeoMMEPreTrainedModel._init_weightsÚ  sÚ  € ô 	×%Ò% dÔ3ä�fÔ.×/Ò/Ü�LŠL˜×/Ñ/×6Ñ6¸SÀdÇkÁk×F`ÑF`ÐbfÕFf×gÜ˜Ô <×=Ò=Ü�KŠK˜Ÿ™Ö%Ü˜Ô <×=Ò=ä�KŠK˜Ÿ™×,Ñ,Ö-Ü˜¤	×*Ò*Ü�KŠK˜×(Ñ(×/Ñ/Ö0Ü˜Ô 2×3Ò3Ü�JŠJ�v—~‘~¤u§|¢|°S¸#°JÓ'?Ö@Ü˜¤×,Ò,Ü�KŠK˜×/Ñ/×6Ñ6Ö7Ü˜Ô 1×2Ò2Ü�LŠL˜Ÿ™×.Ñ.°S¸d¿k¹k×>XÑ>XÐZ^Õ>^×_Ü˜Ô 5×6Ò6Ø$×0Ô0�
Ø%×EÑE�Ø×#Ñ# JÕ/°9Ô<Ü#6°v×7GÑ7GÈ
Õ7SÕ#T�LÙ*¨6¯=©=ÀZÔP‘�Ü—
’
œ7 6¨\¸Ð+CÓDÀhÔOÜ—
’
œ7 6¨\Ð9KÐ+LÓMÈxÖXó 1ñ 7r=   c                óT   <€ V ^8„  d   QhRS[ RS[ R,          RS[RS[P                  /# )r2   Únew_num_tokensÚpad_to_multiple_ofNÚmean_resizingr7   )r8   r�   r   rÔ   )r:   rS   s   "€r;   r<   r•  ÷  s5   ø€ ÷ ñ Ù!ðÙ7:¸TµzðÙY]ðá	�‰ñr=   c                ó\  <€ \         SV `  WV4      p\        W P                  V 4      pV P	                  VP
                  VP                  P                  ^ ,          VR7      p\        P                  ! VP                  VP                  4      Vn        VP                  VP
                  n        V# )z0Resize word and value embedding tables together.)r»  )rh   Ú_resize_token_embeddingsr  r˜  Ú_get_resized_embeddingsr±  r­  r…   r   rÔ   Únum_embeddingsÚembedding_dim)rj   r¹  rº  r»  r×   rš  Úresizedrk   s   &&&&   €r;   r½  Ú.NeoMMEPreTrainedModel._resize_token_embeddings÷  s–   ø€ ô  ™'Ñ:¸>Ð_lÓmˆÜ˜4×!7Ñ!7¸Ó>ˆØ×.Ñ.Ø×%Ñ% ×'=Ñ'=×'CÑ'CÀAÕ'FÐVcð /ó 
ˆô %'§L¢L°×1GÑ1GÈ×I^ÑI^Ó$_ˆÔ!Ø+2¯>©>ˆ×!Ñ!Ô(ØÐr=   rU   )r}   Útext)NT)rV   rW   rX   rY   Úinput_modalitiesÚ_no_split_modulesr|  rI  Ú_can_record_outputsr›  r   r¨   Úno_gradrª  r½  r\   r]   rÃ   rÄ   s   @@r;   r‘  r‘  Ê  sf   ù‡ € Ø(ÐØ-Ð.ÐàÐ+Ø�oðÐ÷
5ð 5÷6ð 6ð ‡]‚]ƒ_÷Yó ðY÷8÷ õ r=   r‘  zu
    The bare NeoMME model. It encodes text tokens and image patches with one bidirectional Transformer encoder.
    ©Úcustom_introc                   ó®   a a€ ] tR tRt oV3R lV 3R llt]]! RR7      V3R lR l4       4       tV3R lR	 lt]	]RV3R
 lR ll4       4       t
RtVtV ;t# )r°  i  c                ó    <€ V ^8„  d   QhRS[ /# rÍ   r/   )r:   rS   s   "€r;   r<   ÚNeoMMEModel.__annotate__  s   ø€ ÷ ñ ™|ñ r=   c           	     ó  <€ \         SV `  V4       \        V4      V n        \	        V4      V n        \        V4      V n        \        VP                  VP                  R R7      V n        \        VP                  VP                  R R7      V n        \        P                  ! \        VP                   4       Uu. uF  p\#        W4      NK  	  up4      V n        \'        VP(                  4       UUu. uF  w  r4VR8X  g   K  VNK  	  ppp\        P*                  ! VP,                  VP.                  VP0                  ,          4      V n        V^ ,          VR,          0V n        R V n        V P9                  4        R# u upi u uppi )FrP  Úfull_attentionNr„   )rh   ri   rÊ   r™  rç   Úpatch_embeddingsrù   Ú
rotary_embrÆ   rÙ   rW  Úembedding_normÚ
final_normr   Ú
ModuleListÚrangeÚnum_hidden_layersr|  ÚlayersÚ	enumeraterT  rÔ   rÕ   r%  r>  r±  Úvalue_embedding_layersÚgradient_checkpointingÚ	post_init)rj   rÎ   rL  Úirý   Úglobal_layersrk   s   &&    €r;   ri   ÚNeoMMEModel.__init__  s2  ø€ Ü‰Ñ˜Ô Ü,¨VÓ4ˆÔÜ 5°fÓ =ˆÔÜ/°Ó7ˆŒÜ+¨F×,>Ñ,>ÀÇÁÐ\aÔbˆÔÜ'¨×(:Ñ(:¸F¿O¹OÐX]Ô^ˆŒÜ—m’mÜDIÈ&×JbÑJbÔDcÓdÑDc°yÔ Ö2ÑDcÑdó
ˆŒô 1:¸&×:LÑ:LÔ0MÔpÑ0M™}˜qÐQ[Ð_oÑQoŸ˜Ñ0MˆÑpÜ "§¢¨V×->Ñ->À×@ZÑ@ZÐ]c×]lÑ]lÕ@lÓ mˆÔØ'4°QÕ'7¸ÀrÕ9JÐ&KˆÔ#Ø&+ˆÔ#Ø�‰Öùò eùó qs   Â6E8Ã.E=Ã>E=z=Projects flattened image patches into the model hidden space.rÈ  c                óP   <€ V ^8„  d   QhRS[ P                  RS[S[,          RS[/# )r2   rb   re   r7   )r¨   rà   r   r   r   )r:   rS   s   "€r;   r<   rÌ    s4   ø€ ÷ 	jñ 	jÙ!ŸL™Lð	jÙ4:Ñ;MÕ4Nð	já	#ñ	jr=   c           	     óž  € VP                   R,          V P                  P                  8w  dO   \        RVP                   R,           RV P                  P                   RV P                  P                   R24      hV P                  VP                  V P
                  P                  P                  P                  4      4      p\        W3R7      # )r  zpixel_values has patch width z but the model expects z( (= 3 * patch_size ** 2 with patch_size=Ú))Úlast_hidden_stateÚpooler_outputr„   )r…   rÎ   rì   rx   rR   rÏ  r  rí   r­  r¡   r   )rj   rb   re   Úimage_featuress   &&, r;   Úget_image_featuresÚNeoMMEModel.get_image_features  s°   € ð
 ×Ñ˜bÕ! T§[¡[×%:Ñ%:Ô:ÜØ/°×0BÑ0BÀ2Õ0FÐ/GÐG^Ø—;‘;×(Ñ(Ð)Ð)QÐRV×R]ÑR]×RhÑRhÐQiÐijðlóð ð ×.Ñ.¨|¯©¸t×?TÑ?T×?YÑ?Y×?`Ñ?`×?fÑ?fÓ/gÓhˆÜ)¸NÔiÐir=   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r2   rÞ   rã  r7   )r¨   rß   rà   Ú
BoolTensor)r:   rS   s   "€r;   r<   rÌ  )  s;   ø€ ÷ 
Qñ 
Q©e×.>Ñ.>ð 
QÑPU×P\ÑP\ð 
QÑaf×aqÑaqñ 
Qr=   c                óÄ  aa€ \         P                  ! VRRR13,          RV P                  P                  ;'       g    ^ R7      pWP                  P                  8H  W0P                  P
                  8g  ,          pVP                  4       o\        SSP                  ^ ,          8H  VV3R l4       VP                  R4      P                  RRSP                  R,          4      # )zPFind patch placeholders and validate that every image feature has a destination.r  N)rž  c                  óJ   <€ R S P                   ^ ,           R\        S4       R2# )zGot z image patches for z image placeholder tokens)r…   r8   )rã  Únum_image_tokenss   €€r;   Ú<lambda>Ú2NeoMMEModel.get_placeholder_mask.<locals>.<lambda>1  s)   ø€ �d˜>×/Ñ/°Õ2Ð3Ð3FÄsÐK[ÓG\ÐF]Ð]vÑwr=   r„   )r  r   )r0  r�   rÎ   Úpad_token_idÚimage_token_idÚdocument_token_idr2  r   r…   Ú	unsqueezer  )rj   rÞ   rã  Úprevious_idsÚ
image_maskrê  s   &&f  @r;   Úget_placeholder_maskÚ NeoMMEModel.get_placeholder_mask)  s³   ù€ ä—u’u˜Y q¨#¨2¨# vÕ.°¸d¿k¹k×>VÑ>V×>[Ð>[ÐZ[Ô\ˆØ§;¡;×#=Ñ#=Ñ=À,×R]ÑR]×RoÑRoÑBoÕpˆ
à%Ÿ>™>Ó+ÐÜØ × 4Ñ 4°QÕ 7Ñ7Ýwô	
ð ×#Ñ# BÓ'×.Ñ.¨r°2°~×7KÑ7KÈBÕ7OÓPÐPr=   c                óÈ   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[S[,          RS[/# )r2   rÞ   rc  Nrü   rb   re   r7   )r¨   rß   rà   r   r   r   )r:   rS   s   "€r;   r<   rÌ  7  s€   ø€ ÷ C@ñ C@á×#Ñ#ðC@ñ Ÿ™ tÕ+ðC@ñ ×&Ñ&¨Õ-ð	C@ñ
 —l‘l TÕ)ðC@ñ Ñ+Õ,ðC@ñ 
ñC@r=   c           	     ó”  € V P                  V4      pVeJ   V P                  VRR7      pV P                  WP                  4      pVP	                  W‡P                  4      pVP
                  R,          w  ršVf2   \        P                  ! W¦P                  R7      P                  V	R4      pVP                  ^8X  d#   VP                  ^ 4      P                  ^RR4      pV P                  V4      ;rk\        T;p\        4      '       gz   / pRVRV/p\        V P                   P"                  4       FN  pV P                   P$                  V,          pVP&                  e   \)        RRV/VB WÎ&   K?  \+        RRV/VB WÎ&   KP  	  \-        V P                   P.                  4       Uu/ uF  pVV P1                  WcV4      bK  	  ppV P3                  V4      p\5        V P6                  4       F@  w  ppT! TTVV P8                  9   d   TMR3R	VVP:                  ,          RVV,          /VB pKB  	  V P=                  V4      p\?        VR
7      # u upi )aþ  
position_ids (`torch.LongTensor` of shape `(2, batch_size, sequence_length)` or `(batch_size, sequence_length)`, *optional*):
    Positions for the input tokens. [`NeoMMEProcessor`] returns two-axis positions for document images. A
    one-axis position tensor is used for text inputs.
pixel_values (`torch.Tensor` of shape `(num_patches, 3 * patch_size ** 2)`, *optional*):
    Flattened image patches returned by [`NeoMMEProcessor`]. The model places these patches at image
    placeholders in `input_ids`.
NT)Úreturn_dictºNr2   N)r
  Úinputs_embedsrc  rÎ   rb  )rá  r„   rU   ) r™  rä  ró  râ  Úmasked_scatterr…   r¨   Úaranger
  r  Úndimrð  rÑ  r	  rw   rÔ  rÎ   rÕ  r[  r\  r   r   rv   rT  rÐ  r±  r×  rÖ  rØ  rU  rÒ  r   )rj   rÞ   rc  rü   rb   re   rö   Úimage_outputsrò  Ú
batch_sizeÚseq_lenrˆ  Úattention_mask_mappingÚmask_kwargsÚlayer_idr[  rý   rb  rd  rL  Úencoder_layers   &&&&&,               r;   rã   ÚNeoMMEModel.forward5  sV  € ð$ ×)Ñ)¨)Ó4ˆØÒ#Ø ×3Ñ3°LÈdÐ3ÓSˆMØ×2Ñ2°9×>YÑ>YÓZˆJØ)×8Ñ8¸×E`ÑE`ÓaˆMà+×1Ñ1°"Õ5Ñˆ
àÒÜ Ÿ<š<¨×8LÑ8LÔM×TÑTÐU_ÐacÓdˆLØ×Ñ Ô!Ø'×1Ñ1°!Ó4×;Ñ;¸A¸rÀ2ÓFˆLð 15×0CÑ0CÀMÓ0RÐRˆä°NÐBÐ0ÄD×IÒIØEGÐ"Ø*¨MÐ;KÈ^Ð\ˆKÜ! $§+¡+×"?Ñ"?Ö@�Ø#'§;¡;×#?Ñ#?ÀÕ#IÐ Ø#×2Ñ2Ò>Ü7_ñ 8Ø/ð8à%ñ8Ð*Ó4ô
 8Qñ 8Ø/ð8à%ñ8Ð*Ó4ñ Aô " $§+¡+×"9Ñ"9Ô:ó
á:�
ð ˜Ÿ™¨ÀZÓPÒPÙ:ð 	ð 
ð
 ×,Ñ,¨YÓ7ˆä(1°$·+±+Ö(>Ñ$ˆI�}á)ØØ%Ø )¨T×-HÑ-HÔ H‘Èdñð %8¸×8TÑ8TÕ$Uð	ð
  6°iÕ@ðð ñŠMñ )?ð Ÿ™¨Ó6ˆÜ°Ô?Ð?ùò'
s   Æ I)	r™  rÑ  rÒ  rÙ  rÖ  rÏ  rÐ  rØ  r±  r�  )rV   rW   rX   rY   ri   r"   r   rä  ró  r$   rã   r\   r]   rÃ   rÄ   s   @@r;   r°  r°    sn   ù‡ € ÷ó ð" ÙÐ!`Ôa÷	jó bó ð	j÷
Qð 
Qð Ø÷C@ñ C@ó ó ÷C@ð C@r=   r°  zB
    The NeoMME model with a factorized masked token decoder.
    c                   ót   a a€ ] tR tRt oRRRR/tV3R lV 3R llt]]RV3R lR	 ll4       4       tR
t	Vt
V ;t# )r²  i}  zlm_head.weightz)model.embed_tokens.word_embeddings.weightzunembedding_projection.weightz.model.embed_tokens.embedding_projection.weightc                ó    <€ V ^8„  d   QhRS[ /# rÍ   r/   )r:   rS   s   "€r;   r<   ÚNeoMMEForMaskedLM.__annotate__ˆ  ó   ø€ ÷ ñ ™|ñ r=   c                ó.  <€ \         SV `  V4       \        V4      V n        \        P
                  ! VP                  VP                  R R7      V n        \        P
                  ! VP                  VP                  R R7      V n
        V P                  4        R# rÑ   )rh   ri   r°  Úmodelr   rØ   rÖ   rÙ   Úunembedding_projectionrÕ   r³  rÚ  rÛ   s   &&€r;   ri   ÚNeoMMEForMaskedLM.__init__ˆ  si   ø€ Ü‰Ñ˜Ô Ü  Ó(ˆŒ
Ü&(§i¢i°×0EÑ0EÀv×GYÑGYÐ`eÔ&fˆÔ#Ü—y’y ×!6Ñ!6¸×8IÑ8IÐPUÔVˆŒØ�‰Ör=   c                óþ   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[S[,          RS[/# )	r2   rÞ   Nrc  rü   rb   Úlabelsre   r7   )r¨   rß   rà   r   r   r   )r:   rS   s   "€r;   r<   r  ‘  sŠ   ø€ ÷ "
ñ "
á×#Ñ# dÕ*ð"
ñ Ÿ™ tÕ+ð"
ñ ×&Ñ&¨Õ-ð	"
ñ
 —l‘l TÕ)ð"
ñ × Ñ  4Õ'ð"
ñ Ñ+Õ,ð"
ñ 
ñ"
r=   c                óL  € V P                   ! RRVRVRVRV/VB pVP                  pW€P                  P                  ,          pV P	                  V4      p	Rp
Ve*   V P
                  ! W•3RV P                  P                  /VB p
\        V
V	VP                  VP                  R7      # )	a  
labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
    Labels for the masked-language-modeling loss. Indices should be in `[0, ..., config.vocab_size - 1]`
    or `-100`; only tokens with a label different from `-100` contribute.
rÞ   rc  rü   rb   NrÕ   )ÚlossÚlogitsrö   r’  rU   )r
  rá  r  r­  r³  Úloss_functionrÎ   rÕ   r   rö   r’  )rj   rÞ   rc  rü   rb   r  re   Úoutputsrö   r  r  s   &&&&&&,    r;   rã   ÚNeoMMEForMaskedLM.forward�  sÄ   € ð  $(§:¢:ñ $
Øð$
à)ð$
ð &ð$
ð &ð	$
ð
 ñ$
ˆð  ×1Ñ1ˆØ%×(CÑ(C×(JÑ(JÕJˆØ—‘˜mÓ,ˆàˆØÒØ×%Ò% fÑbÀÇÁ×AWÑAWÐbÐ[aÑbˆDäØØØ!×/Ñ/Ø×)Ñ)ô	
ð 	
r=   )r³  r
  r  )NNNNN)rV   rW   rX   rY   Ú_tied_weights_keysri   r"   r   rã   r\   r]   rÃ   rÄ   s   @@r;   r²  r²  }  sK   ù‡ € ð 	ÐEØ'Ð)YðÐ÷
ó ð Ø÷"
ñ "
ó ó ÷"
ð "
r=   r²  z1
    Output type for [`NeoMMEForRetrieval`].
    c                   ó<   a € ] tR tRt o RtRtRtRtV 3R ltRt	V t
R# )ÚNeoMMEForRetrievalOutputi¶  aU  
loss (`torch.FloatTensor` of shape `(1,)`, *optional*):
    Retrieval loss. This value is always `None`.
embeddings (`torch.FloatTensor` of shape `(batch_size, sequence_length, embedding_dim)`, *optional*):
    Normalized token embeddings for late-interaction retrieval. Padding rows are zeroed. Score them with MeanMaxSim.
dense_embeddings (`torch.FloatTensor` of shape `(batch_size, hidden_size)` or `(batch_size, dense_dim)`, *optional*):
    A normalized mean-pooled embedding for each input. When `dense_dim` is set, the last dimension is `dense_dim`.
    Score them with cosine similarity.
Nc                ó¤   <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   S[ P                  R,          ;R&   S[ P                  R,          ;R&   # )r2   Nr  Ú
embeddingsÚdense_embeddings)r¨   ÚFloatTensor)r:   rS   s   "€r;   r<   Ú%NeoMMEForRetrievalOutput.__annotate__¶  sM   ø‡ ‚ ñ" ×
Ñ
˜dÕ
"Ñ)ñ# ñ$ ×!Ñ! DÕ(Ñ/ñ% ñ& ×'Ñ'¨$Õ.Ñ5ò' r=   rU   )rV   rW   rX   rY   rZ   r  r  r  r[   r\   r]   r^   s   @r;   r  r  ¶  s#   ø‡ € ñð &*€DØ+/€JØ15Ð÷' ƒ r=   r  c                   óP   a a€ ] tR tRt oV3R lV 3R lltV3R lR ltRtVtV ;t# )ÚNeoMMEMultiVectorHeadiÌ  c                ó    <€ V ^8„  d   QhRS[ /# rÍ   r/   )r:   rS   s   "€r;   r<   Ú"NeoMMEMultiVectorHead.__annotate__Í  s   ø€ ÷ Tñ T™|ñ Tr=   c                óˆ   <€ \         SV `  4        \        P                  ! VP                  VP
                  R R7      V n        R# rÑ   )rh   ri   r   rØ   rÙ   rÀ  ÚprojrÛ   s   &&€r;   ri   ÚNeoMMEMultiVectorHead.__init__Í  s.   ø€ Ü‰ÑÔÜ—I’I˜f×0Ñ0°&×2FÑ2FÈUÔSˆŽ	r=   c                óh   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  /# )r2   rö   rc  r7   rô   )r:   rS   s   "€r;   r<   r   Ñ  s6   ø€ ÷ Qñ Q¡U§\¡\ð QÁ5Ç<Á<ð QÑTY×T`ÑT`ñ Qr=   c                ó  € V P                  VP                  V P                   P                  P                  4      4      p\        P
                  ! VRR7      pVP                  VP                  4       P                  R4      ( R4      # )r  r¢   rh  r„   )	r"  r  r­  r¡   r0  r1  Úmasked_fillr�   rð  )rj   rö   rc  r  s   &&& r;   rã   ÚNeoMMEMultiVectorHead.forwardÑ  se   € Ø—Y‘Y˜}×/Ñ/°·	±	×0@Ñ0@×0FÑ0FÓGÓHˆ
Ü—[’[ °Ô4ˆ
à×%Ñ% ~×':Ñ':Ó'<×'FÑ'FÀrÓ'JÐ&JÈCÓPÐPr=   )r"  r8  rÄ   s   @@r;   r  r  Ì  s#   ù‡ € ÷Tó T÷Q÷ Qð Qr=   r  c                   ó6   a € ] tR tRt o RV 3R lR lltRtV tR# )ÚNeoMMEDenseHeadiØ  Nc                ó|   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[R,          RS[ P                  /# )r2   rö   rc  Ú	dense_dimNr7   )r¨   rà   r8   )r:   rS   s   "€r;   r<   ÚNeoMMEDenseHead.__annotate__Ù  s?   ø€ ÷ 
<ñ 
<Ù"Ÿ\™\ð
<Ù;@¿<¹<ð
<ÙTWÐZ^ÕT^ð
<á	�‰ñ
<r=   c                ó  € VP                  R4      P                  VP                  4      P                  VP                  4      pW,          P                  ^4      VP                  ^4      P                  R4      ,          pVf   \        P                  ! VRR7      # ^ Tu;8  d   VP                  R,          8:  g%   M \        RVP                  R,           RV 24      h\        P                  ! VRRV13,          RR7      # )r  g•Ö&è.>Nr¢   zdense_dim must be in 1..z (the pooled width), got .r„   )
rð  r  r…   r  r¡   r2  Ú	clamp_minr0  r1  rx   )rj   rö   rc  r+  Úexpanded_maskÚpooleds   &&&&  r;   rã   ÚNeoMMEDenseHead.forwardÙ  s×   € ð '×0Ñ0°Ó4×;Ñ;¸M×<OÑ<OÓP×SÑSÐTa×TgÑTgÓhˆØÕ/×4Ñ4°QÓ7¸-×:KÑ:KÈAÓ:N×:XÑ:XÐY]Ó:^Õ^ˆØÒÜ—;’;˜v¨2Ô.Ð.à�9Ö0 §¡¨RÕ 0Ö0ÜÐ7¸¿¹ÀRÕ8HÐ7IÐIbÐclÐbmÐnÓoÐoÜ�{Š{˜6 # z¨	 z /Õ2¸Ô;Ð;r=   rU   r¾   )rV   rW   rX   rY   rã   r\   r]   r^   s   @r;   r)  r)  Ø  s   ø‡ € ÷
<÷ 
<ð 
<r=   r)  z½
    The NeoMME model with multi-vector and dense retrieval heads. One forward pass can return token embeddings for
    MaxSim scoring and mean-pooled embeddings for cosine similarity.
    c                   óh   a a€ ] tR tRt oV3R lV 3R llt]]RV3R lR ll4       4       tRtVt	V ;t
# )ÚNeoMMEForRetrievaliæ  c                ó    <€ V ^8„  d   QhRS[ /# rÍ   r/   )r:   rS   s   "€r;   r<   ÚNeoMMEForRetrieval.__annotate__í  r  r=   c                ó¤   <€ \         SV `  V4       \        V4      V n        \	        V4      V n        \        4       V n        V P                  4        R # r¾   )	rh   ri   r°  r
  r  Úmulti_vector_headr)  Ú
dense_headrÚ  rÛ   s   &&€r;   ri   ÚNeoMMEForRetrieval.__init__í  s=   ø€ Ü‰Ñ˜Ô Ü  Ó(ˆŒ
Ü!6°vÓ!>ˆÔÜ)Ó+ˆŒØ�‰Ör=   c                óö   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[RS[RS[R,          R	S[S[,          R
S[/	# )r2   rÞ   Nrc  rü   rb   Úoutput_multivectorÚoutput_denser+  re   r7   )r¨   rß   rà   r�   r8   r   r   r  )r:   rS   s   "€r;   r<   r5  ö  s—   ø€ ÷ *
ñ *
á×#Ñ# dÕ*ð*
ñ Ÿ™ tÕ+ð*
ñ ×&Ñ&¨Õ-ð	*
ñ
 —l‘l TÕ)ð*
ñ !ð*
ñ ð*
ñ ˜•:ð*
ñ Ñ+Õ,ð*
ñ 
"ñ*
r=   c                óÆ  € V'       g   V'       g   \        R4      hV P                  ! R
RVRVRVRV/VB p	V	P                  p
VfC   \        P                  ! V
P
                  R,          \        P                  V
P                  R7      pV'       d   V P                  W¢4      MRpV'       d   V P                  W¢V4      MRp\        VVV
V	P                  V	P                  R	7      # )a   
output_multivector (`bool`, *optional*, defaults to `True`):
    Whether to return token embeddings for late-interaction retrieval.
output_dense (`bool`, *optional*, defaults to `True`):
    Whether to return one mean-pooled dense embedding per input.
dense_dim (`int`, *optional*):
    Width of the Matryoshka prefix to return for dense embeddings. The model truncates the pooled vector
    before normalizing it.
zCAt least one of `output_multivector` or `output_dense` must be TruerÞ   rc  rü   rb   Nrø  )r¡   r
  )r  r  rá  rö   r’  rU   )rx   r
  rá  r¨   Úonesr…   r�   r
  r7  r8  r  rö   r’  )rj   rÞ   rc  rü   rb   r;  r<  r+  re   r  rö   r  r  s   &&&&&&&&,    r;   rã   ÚNeoMMEForRetrieval.forwardô  sß   € ÷, #§lÜÐbÓcÐcà#'§:¢:ñ $
Øð$
à)ð$
ð &ð$
ð &ð	$
ð
 ñ$
ˆð  ×1Ñ1ˆØÒ!Ü"ŸZšZ¨×(;Ñ(;¸BÕ(?ÄuÇzÁzÐZg×ZnÑZnÔoˆNçN`�T×+Ñ+¨MÔJÐfjˆ
ßXd˜4Ÿ?™?¨=È)ÔTÐjnÐÜ'Ø!Ø-Ø+Ø!×/Ñ/Ø×)Ñ)ô
ð 	
r=   )r8  r
  r7  )NNNNTTN)rV   rW   rX   rY   ri   r"   r   rã   r\   r]   rÃ   rÄ   s   @@r;   r3  r3  æ  s5   ù‡ € ÷ó ð Ø÷*
ñ *
ó ó ÷*
ð *
r=   r3  )r²  r3  ra   r°  r‘  )drE   Úcollections.abcr   Údataclassesr   Útypingr   r¨   Útorch.nn.functionalr   r   r0  Útorchvision.transforms.v2rŒ   Ú r   r«  Úimage_processing_backendsr	   Úimage_processing_utilsr
   Úimage_transformsr   r   Úimage_utilsr   r   r   Úmasking_utilsr   r   Úmodeling_layersr   Úmodeling_outputsr   r   r   Úmodeling_rope_utilsr   Úmodeling_utilsr   r   Úprocessing_utilsr   r   Úutilsr   r   r   r   r   Úutils.constantsr    r!   Úutils.genericr"   r#   Úutils.output_capturingr$   Úutils.type_validatorsr%   Úgemma4.modeling_gemma4r&   Úgpt_neox.modeling_gpt_neoxr'   Úlaguna.modeling_lagunar(   Ú lfm2_vl.image_processing_lfm2_vlr)   Úllama.modeling_llamar*   r+   Ú"muse_glimmer.modeling_muse_glimmerr,   r-   Únemotron.modeling_nemotronr.   Úconfiguration_neommer0   rN   rP   ra   rÆ   r¤  rÊ   rç   rù   r   r:  rI  rz  r|  r‘  r°  r²  r  r  r)  r3  Ú__all__rU   r=   r;   Ú<module>r^     s,  ðó Ý $Ý !Ý ã ß Ð Ý Ý 7å &Ý ;Ý 2ß Eß CÑ Cß `Ý 9ß [Ñ [Ý 6ß Fß 4÷õ ÷ Mß =Ý 5Ý 1Ý 2Ý =Ý :Ý Gß Eß eÝ 4Ý .õ&)ôR	4 °Uõ 	4ð ôJDÐ-ó JDó ðJDôZ	�Mô 	ô	J�r—y‘yô 	Jô:˜BŸI™Iô :ô3Ð1ô 3ôD? 2§9¡9ô ?ôW 2§9¡9ô Wð ôF)Ð.ó F)ó ðF)ôR	�ô 	ô#EÐ3ô #EôL8Ð6ô 8ñv ðôô
p@Ð'ó p@óð
p@ñf ðôô
1
Ð-ó 1
óð
1
ñh ðôð
 ô6˜ó 6ó óð6ô 	Q˜BŸI™Iô 	Qô<�b—i‘iô <ñ ðôô4
Ð.ó 4
óð4
òn‚r=   