+
    œ°³jÔŠ  ã                   ón  € ^ RI t ^ RIHt ^ RIHt ^ RIt^ RIHt ^RIH	t	 ^RI
Ht ^RIHtHtHt ^RIHt ^RIHt ^R	IHtHtHtHt ^R
IHt ^RIHt ^RIHt ] ! R R]4      4       t]] ! R R]4      4       4       t ] ! R R]4      4       t!]] ! R R]4      4       4       t" ! R R]]4      t#. ROt$R# )é    N)Ú	dataclass)ÚAny)ÚCache)ÚGenerationMixin)ÚBaseModelOutputWithPastÚBaseModelOutputWithPoolingÚCausalLMOutputWithPast)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚtorch_compilable_check)Úaccepts_precomputed_kwargs)Ú	AutoModel©ÚGlm46VConfigc                   óV   a € ] tR t^,t o RtRtRtRtR.tRt	Rt
RtRtRtV 3R ltRtV tR# )ÚGlm46VPreTrainedModelÚmodelTNÚpast_key_valuesc                ó&   <€ V ^8„  d   Qh/ S[ ;R&   # )é   Úconfigr   )ÚformatÚ__classdict__s   "€Úk/home/luca/screen-checking/.venv/lib/python3.14/site-packages/transformers/models/glm46v/modeling_glm46v.pyÚ__annotate__Ú"Glm46VPreTrainedModel.__annotate__,   s   ø‡ ‚ áÑò ó    © )ÚimageÚvideoÚtext)Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Úbase_model_prefixÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_skip_keys_device_placementÚ_supports_flash_attnÚ_supports_sdpaÚ_can_compile_fullgraphÚ_supports_attention_backendÚ_can_record_outputsÚ__annotate_func__Ú__static_attributes__Ú__classdictcell__©r   s   @r   r   r   ,   sL   ø‡ € ð  ÐØ1ÐØ&*Ð#ØÐØ#4Ð"5ÐØÐØ€Nà!ÐØ"&ÐØÐ÷ ƒ r    r   c                   ó4   a € ] tR t^<t o RtRtV 3R ltRtV tR# )ÚGlm46VModelOutputWithPastúþ
rope_deltas (`torch.LongTensor` of shape `(batch_size, )`, *optional*):
    The rope index difference between sequence length and multimodal rope.
    The attribute is deprecated and will be removed in v5.20, use `model.base_model.rope_deltas` instead.
Nc                óH   <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   # ©r   NÚrope_deltas©ÚtorchÚ
LongTensor)r   r   s   "€r   r   Ú&Glm46VModelOutputWithPast.__annotate__<   ó   ø‡ ‚ ñ ×!Ñ! DÕ(Ñ/ò r    r!   ©	r%   r&   r'   r(   Ú__doc__r<   r3   r4   r5   r6   s   @r   r8   r8   <   ó   ø‡ € ñð ,0€K÷ ƒ r    r8   c                   óD  a a€ ] tR t^Ht oRtRtRtV 3R ltRV3R lR lltRV3R lR llt	]
! R	R
7      ]]RV3R lR ll4       4       4       t]
! RR
7      ]]RV3R lR ll4       4       4       tRV3R lR lltRV3R lR llt]]RV3R lR ll4       4       tRtVtV ;t# )ÚGlm46VModelr   FNc                óè   <€ \         SV `  V4       \        P                  ! VP                  4      V n        \        P                  ! VP                  4      V n        R V n        V P                  4        R # ©N)
ÚsuperÚ__init__r   Úfrom_configÚvision_configÚvisualÚtext_configÚlanguage_modelr<   Ú	post_init©Úselfr   Ú	__class__s   &&€r   rJ   ÚGlm46VModel.__init__O   sU   ø€ Ü‰Ñ˜Ô Ü×+Ò+¨F×,@Ñ,@ÓAˆŒÜ'×3Ò3°F×4FÑ4FÓGˆÔØˆÔð 	�‰Ör    c                ó®   <€ V ^8„  d   QhRS[ RS[S[ S[ S[ 3,          S[P                  ,          RS[ RS[ RS[ RS[S[P
                  ,          R,          /# )r   Ústart_positionÚgrid_thwÚtemp_merge_sizeÚspatial_merge_sizeÚtime_intervalÚdeviceN)ÚintÚlistr>   ÚTensorÚstrr[   )r   r   s   "€r   r   ÚGlm46VModel.__annotate__X   si   ø€ ÷ 2#ñ 2#áð2#ñ ‘s™C¡�}Õ%©¯©Õ4ð2#ñ ð	2#ñ
  ð2#ñ ð2#ñ ‘e—l‘lÕ" TÕ)ñ2#r    c                ó"  € V^ ,          P                  4       V,          V^,          P                  4       V,          V^,          P                  4       V,          r˜p\        P                  ! WvR7      V,          p
\        P                  ! W†R7      V,           p\        P                  ! W–R7      V,           p\        P                  ! W«VRR7      w  rÞp\        P                  ! WÞV.^ R7      P                  ^R4      pV^ ;;,          V,          uu&   V# )aâ  
Compute 3D positional indices for vision tokens derived from a single image or video input.

The positions are generated from the input grid defined by temporal (T), height (H), and
width (W) dimensions. Temporal and spatial dimensions can be downscaled according to the
merge sizes used in the vision backbone. The resulting positions are offset by `start_position`.

Args:
    start_position (`int`):
        Offset added to all computed positional indices.
    grid_thw (`Sequence[int]` or `torch.Tensor` of shape `(3,)`):
        The (T, H, W) grid representing the feature layout of the current image or video after patch embedding.
    temp_merge_size (`int`, *optional*):
        Factor by which the temporal dimension is reduced in the backbone. The temporal grid size is divided
        by this value. Defaults to 1.
    spatial_merge_size (`int`, *optional*):
        Factor by which the spatial dimensions (H and W) are reduced in the backbone. Both H and W are divided
        by this value. Defaults to 1.
    time_interval (`int`, *optional*):
        Spacing factor applied between consecutive temporal position indices.Defaults to 1.
    device (`str` or `torch.device`, *optional*):
        Device on which the resulting tensor is allocated. If `None`, uses the current default device.

Returns:
    torch.LongTensor of shape (3, sequence_length):
        Positional indices for temporal, height, and width dimensions,
        flattened into sequence form and offset by `start_position`.
©r[   Úij)Úindexing©Údiméÿÿÿÿ)Úitemr>   ÚarangeÚmeshgridÚstackÚreshape)rR   rV   rW   rX   rY   rZ   r[   Ú
llm_grid_tÚ
llm_grid_hÚ
llm_grid_wÚposition_temporalÚposition_heightÚposition_widthÚT_gridÚH_gridÚW_gridÚvision_position_idss   &&&&&&&          r   Úget_vision_position_idsÚ#Glm46VModel.get_vision_position_idsX   sÞ   € ðL �Q�K×ÑÓ /Õ1Ø�Q�K×ÑÓÐ"4Õ4Ø�Q�K×ÑÓÐ"4Õ4ð !+ˆ
ô "ŸLšL¨ÔCÀmÕSÐÜŸ,š, zÔAÀNÕRˆÜŸš jÔ@À>ÕQˆä!&§¢Ð0AÐTbÐmqÔ!rÑˆ˜Ü#Ÿkšk¨6¸6Ð*BÈÔJ×RÑRÐSTÐVXÓYÐØ˜A× .Õ0ÓØ"Ð"r    c                ó
  <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[S[ P                  S[ P                  3,          /# )r   Ú	input_idsÚmm_token_type_idsÚimage_grid_thwNÚvideo_grid_thwÚattention_maskÚreturn)r>   r?   Ú	IntTensorr^   Útuple)r   r   s   "€r   r   r`   Œ   sŠ   ø€ ÷ [3ñ [3á×#Ñ#ð[3ñ !Ÿ?™?ð[3ñ ×(Ñ(¨4Õ/ð	[3ñ
 ×(Ñ(¨4Õ/ð[3ñ Ÿ™ tÕ+ð[3ñ 
‰u�|‰|™UŸ\™\Ð)Õ	*ñ[3r    c           
     óì  € Ve%   \         P                  ! WDR,          ^ R7      p^VR&   V P                  P                  P                  p. p\         P
                  ! ^VP                  ^ ,          VP                  ^,          VP                  VP                  R7      p	^Ve   \        V4      MR^Ve   \        V4      MR/p
\        V4       EFs  w  r¼W+,          pVe;   WÅV,          P                  4       ,          pWÕV,          P                  4       ,          p. p\        P                  ! \        VP                  4       4      R 4       FL  w  pp\        V4      pV^ ,          ^ ,          pVR,          ^ ,          ^,           pVP!                  VVV34       KN  	  ^ p. pV Fä  w  pppV^ 8X  dm   VV,
          pVP!                  \         P"                  ! VVP                  R7      P%                  ^R4      P'                  ^R4      V,           4       VV,          pKz  \)        V
V,          4      pV P+                  VV^WqP                  R7      pVP!                  V4       V\-        V^,          V^,          4      V,          ,          pKæ  	  \         P.                  ! V^R7      P1                  ^R4      pVe7   VP3                  V	P                  4      V	RWµV,          P                  4       3&   M VP3                  V	P                  4      V	RV3&   VP!                  VP-                  4       ^,           \5        V4      ,
          4       EKv  	  \         P6                  ! W�P                  R7      P9                  ^4      pW˜3# )	a:  
Difference from Qwen2VL/Qwen2.5VL's get_rope_index:
- GLM46V uses timestamps to separate each video frame, so the video_grid_thw should also be split too.

Args:
    input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
        Indices of input sequence tokens in the vocabulary. Padding will be ignored by default should you provide
        it.
    mm_token_type_ids (`torch.IntTensor` of shape `(batch_size, sequence_length)`):
        Token type ids matching each modality to a different value in the input sequence, i.e. text (0), image (1), video (2).
    image_grid_thw (`torch.LongTensor` of shape `(num_images, 3)`, *optional*):
        The temporal, height and width of feature shape of each image in LLM.
    video_grid_thw (`torch.LongTensor` of shape `(num_videos, 3)`, *optional*):
        The temporal, height and width of feature shape of each video in LLM.
    attention_mask (`torch.Tensor` of shape `(batch_size, sequence_length)`, *optional*):
        Mask to avoid performing attention on padding token indices. Mask values selected in `[0, 1]`:

        - 1 for tokens that are **not masked**,
        - 0 for tokens that are **masked**.

Returns:
    position_ids (`torch.LongTensor` of shape `(3, batch_size, sequence_length)`)
    mrope_position_deltas (`torch.Tensor` of shape `(batch_size)`)
NºNNNre   ©Údtyper[   c                 ó   € V ^,          # )é   r!   )Úxs   &r   Ú<lambda>Ú,Glm46VModel.get_rope_index.<locals>.<lambda>È   s   € Ð`aÐbcÖ`dr    rb   ©rƒ   r   rg   )r>   Úrepeat_interleaver   rL   rY   ÚzerosÚshaper…   r[   ÚiterÚ	enumerateÚboolÚ	itertoolsÚgroupbyÚtolistr]   Úappendri   ÚviewÚexpandÚnextrw   ÚmaxÚcatrl   ÚtoÚlenÚtensorÚ	unsqueeze)rR   rz   r{   r|   r}   r~   ÚkwargsrY   Úmrope_position_deltasÚposition_idsÚ
grid_itersÚ	batch_idxÚcurrent_input_idsÚinput_token_typeÚinput_type_groupÚkeyÚgroupÚstart_indexÚ	end_indexÚcurrent_posÚllm_pos_ids_listÚmodality_typeÚ	start_idxÚend_idxÚtext_lenrW   rv   Úllm_positionss   &&&&&&,                     r   Úget_rope_indexÚGlm46VModel.get_rope_indexŒ   s#  € ðF Ò%Ü"×4Ò4°^ÐTXÕEYÐ_`ÔaˆNØ#$ˆN˜4Ñ Ø!Ÿ[™[×6Ñ6×IÑIÐà "ÐÜ—{’{ØØ�O‰O˜AÕØ�O‰O˜AÕØ—/‘/Ø×#Ñ#ô
ˆð  ~Ò'AŒt�NÔ#ÀtØ ~Ò'AŒt�NÔ#Àtð
ˆ
ô
 -6°i×,@Ñ(ˆIØ0Õ;ÐØÒ)Ø$5ÀYÕ6O×6TÑ6TÓ6VÕ$WÐ!Ø#3À9Õ4M×4RÑ4RÓ4TÕ#UÐ à!ÐÜ'×/Ò/´	Ð:J×:QÑ:QÓ:SÓ0TÑVdÖe‘
��UÜ˜U›�Ø# A�h q�k�Ø! "�I a�L¨1Õ,�	Ø ×'Ñ'¨¨k¸9Ð(EÖFñ	 fð ˆKØ!ÐÛ5EÑ1�˜y¨'à  AÔ%Ø&¨Õ2�HØ$×+Ñ+ÜŸš X°i×6FÑ6FÔG×LÑLÈQÐPRÓS×ZÑZÐ[\Ð^`ÓaÐdoÕoôð   8Õ+’Kô  $ J¨}Õ$=Ó>�HØ*.×*FÑ*FØ# X¨qÐ2D×M]ÑM]ð +Gó +Ð'ð %×+Ñ+Ð,?Ô@Ø¤3 x°¥{°H¸QµKÓ#@ÐDVÕ#VÕV’Kñ 6Fô  "ŸIšIÐ&6¸AÔ>×FÑFÀqÈ"ÓMˆMØÒ)ØO\×O_ÑO_Ð`l×`sÑ`sÓOt�˜Q 	¸)Õ+D×+IÑ+IÓ+KÐKÒLà-:×-=Ñ-=¸l×>QÑ>QÓ-R�˜Q 	˜\Ñ*Ø!×(Ñ(¨×):Ñ):Ó)<¸qÕ)@Ä3ÐGXÓCYÕ)Y×ZñI -AôJ !&§¢Ð-B×K[ÑK[Ô \× fÑ fÐghÓ iÐØÐ2Ð2r    r#   )Úmodalityc          	      óˆ   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[S[,          /# ©r   Úpixel_values_videosr}   NrŸ   r   ©r>   ÚFloatTensorr?   r   r   r�   r   )r   r   s   "€r   r   r`   ì   sP   ø€ ÷ ñ á"×.Ñ.ðñ ×(Ñ(¨4Õ/ðñ Ñ+Õ,ð	ñ
 
Ñ+Õ	+ñr    c                ó  € VP                  V P                  P                  4      pVR,          pVR,          p\        P                  ! WT^ R7      pVP                  VP                  ^ ,          ^4      p\        P                  ! Wv.^R7      pV P                  ! V3RVRR/VB p	VP                  R4      V P                  P                  ^,          ,          P                  4       p
\        P                  ! V	P                  V
4      pW¹n        V	# )rƒ   re   rW   Úreturn_dictTr‹   )rƒ   :r‡   NNrg   )ÚtyperM   r…   r>   rŒ   Únew_onesrŽ   rš   ÚprodrY   r”   ÚsplitÚpooler_output)rR   r·   r}   rŸ   ÚtÚhwÚflattened_hwÚprefix_onesÚflattened_video_grid_thwÚvision_outputsÚsplit_sizesÚvideo_embedss   &&&,        r   Úget_video_featuresÚGlm46VModel.get_video_featuresé   sñ   € ð 2×6Ñ6°t·{±{×7HÑ7HÓIÐà˜4Õ ˆØ˜EÕ"ˆä×.Ò.¨r¸!Ô<ˆØ$×-Ñ-¨l×.@Ñ.@ÀÕ.CÀQÓGˆÜ#(§9¢9¨kÐ-HÈaÔ#PÐ ØŸšØñ
Ø*Bð
ØPTð
ØX^ñ
ˆð &×*Ñ*¨2Ó.°$·+±+×2PÑ2PÐRSÕ2SÕS×[Ñ[Ó]ˆÜ—{’{ >×#?Ñ#?ÀÓMˆØ'3Ô$àÐr    r"   c          	      óˆ   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[S[,          /# ©r   Úpixel_valuesr|   NrŸ   r   r¸   )r   r   s   "€r   r   r`     sP   ø€ ÷ ñ á×'Ñ'ðñ ×(Ñ(¨4Õ/ðñ Ñ+Õ,ð	ñ
 
Ñ+Õ	+ñr    c                óJ  € VP                  V P                  P                  4      pV P                  ! V3R V/VB pVP                  R4      V P                  P                  ^,          ,          P                  4       p\        P                  ! VP                  V4      pWdn        V# )rW   rg   )	r¼   rM   r…   r¾   rY   r”   r>   r¿   rÀ   )rR   rÍ   r|   rŸ   rÆ   rÇ   Úimage_embedss   &&&,   r   Úget_image_featuresÚGlm46VModel.get_image_features  s†   € ð $×(Ñ(¨¯©×):Ñ):Ó;ˆØŸš \ÑU¸NÐUÈfÑUˆØ%×*Ñ*¨2Ó.°$·+±+×2PÑ2PÐRSÕ2SÕS×[Ñ[Ó]ˆÜ—{’{ >×#?Ñ#?ÀÓMˆØ'3Ô$àÐr    c          	      óž   <€ V ^8„  d   QhRS[ P                  RS[ P                  RS[ P                  R,          RS[ P                  R,          /# )r   rz   Úinputs_embedsÚimage_featuresNÚvideo_features)r>   r?   r¹   )r   r   s   "€r   r   r`     sU   ø€ ÷ (6ñ (6á×#Ñ#ð(6ñ ×(Ñ(ð(6ñ ×)Ñ)¨DÕ0ð	(6ñ
 ×)Ñ)¨DÕ0ñ(6r    c           
     óJ  € VfÜ   W P                  4       ! \        P                  ! RV P                  P                  \        P
                  VP                  R7      4      8H  pVP                  R4      pW P                  4       ! \        P                  ! RV P                  P                  \        P
                  VP                  R7      4      8H  pVP                  R4      pM0WP                  P                  8H  pWP                  P                  8H  pVP                  4       pVP                  R4      P                  VP                  4      pVeL   \        WrP                  R,          ,          VP                  4       8H  RV RVP                  ^ ,           24       VP                  4       pVP                  R4      P                  VP                  4      pVeL   \        W‚P                  R,          ,          VP                  4       8H  RV RVP                  ^ ,           24       WV3# )z×
Obtains multimodal placeholder mask from `input_ids` or `inputs_embeds`, and checks that the placeholder token count is
equal to the length of multimodal features. If the lengths are different, an error is raised.
r„   z6Image features and image tokens do not match, tokens: z, features: z6Video features and video tokens do not match, tokens: r!   rg   )Úget_input_embeddingsr>   Úfullr   Úimage_token_idÚlongr[   ÚallÚvideo_token_idÚsumrž   r›   r   rŽ   Únumel)	rR   rz   rÓ   rÔ   rÕ   Úspecial_image_maskÚspecial_video_maskÚn_image_tokensÚn_video_tokenss	   &&&&&    r   Úget_placeholder_maskÚ Glm46VModel.get_placeholder_mask  sß  € ð ÒØ!.×2KÑ2KÔ2MÜ—
’
˜2˜tŸ{™{×9Ñ9ÄÇÁÐTa×ThÑThÔió3ñ "Ðð "4×!7Ñ!7¸Ó!;ÐØ!.×2KÑ2KÔ2MÜ—
’
˜2˜tŸ{™{×9Ñ9ÄÇÁÐTa×ThÑThÔió3ñ "Ðð "4×!7Ñ!7¸Ó!;Ñð "+¯k©k×.HÑ.HÑ!HÐØ!*¯k©k×.HÑ.HÑ!HÐà+×/Ñ/Ó1ˆØ/×9Ñ9¸"Ó=×@Ñ@À×AUÑAUÓVÐØÒ%Ü"Ø×!4Ñ!4°RÕ!8Õ8¸N×<PÑ<PÓ<RÑRØHÈÐHXÐXdÐes×eyÑeyÐz{Õe|Ðd}Ð~ôð
 ,×/Ñ/Ó1ˆØ/×9Ñ9¸"Ó=×@Ñ@À×AUÑAUÓVÐØÒ%Ü"Ø×!4Ñ!4°RÕ!8Õ8¸N×<PÑ<PÓ<RÑRØHÈÐHXÐXdÐes×eyÑeyÐz{Õe|Ðd}Ð~ôð "Ð5Ð5r    c                óZ  <€ 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[ P                  R,          RS[ P                  R,          R	S[ P                  R,          /# )
r   rz   NrÓ   r|   r}   r~   r   r{   r   )r>   r^   r€   )r   r   s   "€r   r   r`   >  s£   ø€ ÷ /ñ /á—<‘< $Õ&ð/ñ —|‘| dÕ*ð/ñ Ÿ™ tÕ+ð	/ñ
 Ÿ™ tÕ+ð/ñ Ÿ™ tÕ+ð/ñ Ÿ™¨Õ,ð/ñ !Ÿ?™?¨TÕ1ð/ñ 
�‰˜Õ	ñ/r    c                ó  € Vf   ^ MVP                  4       pVR J;'       g    VR Jp	V	'       d   Vf   Ve   \        R4      hVR J;'       d    VR J;'       d    T	p
V
'       d6   V P                  e   V^ 8X  d!   V P                  VVVVVR7      w  r¼WÀn        V# V P                  EeV   V^ 8”  g   VEfJ   VP                  w  rÞpVez   VP                  4       P                  R4      ^,
          pVP                  V^ 8H  ^ 4      pVP                  ^VR4      P                  ^^^4      P                  VP                  4      pMZ\        P                  ! WˆV,           4      pVP                  ^^R4      P                  ^VR4      P                  VP                  4      pV P                  P                  WÐP                  P                  ^ ,          ,          ^ R7      pVVP                  VP                  R7      ,           pV# R pV# )Na  Multimodal data was passed (via `image_grid_thw` or `video_grid_thw`) but `mm_token_type_ids` is missing. Please pass `mm_token_type_ids` to the model so that multimodal RoPE (M-RoPE) can be computed correctly. `mm_token_type_ids` is returned by the processor alongside `input_ids`.)r|   r}   r~   r{   re   rb   rg   )Úget_seq_lengthÚ
ValueErrorr<   r²   rŽ   rÚ   ÚcumsumÚmasked_fillr–   Úrepeatr›   r[   r>   ri   r—   rŒ   )rR   rz   rÓ   r|   r}   r~   r   r{   Úpast_key_values_lengthÚhas_multimodalÚcan_compute_mroper¡   r<   Ú
batch_sizeÚ
seq_lengthÚ_Údeltas   &&&&&&&&         r   Úcompute_3d_position_idsÚ#Glm46VModel.compute_3d_position_ids>  s  € ð '6Ò&=¡À?×CaÑCaÓCcÐØ'¨tÐ3×QÐQ°~ÈTÐ7QˆßÐ/Ò7¸IÒ<QÜðnóð ð
 &¨TÐ1×fÐfÐ6GÈtÐ6S×fÐfÐXfÐç $×"2Ñ"2Ò":Ð>TÐXYÔ>YØ(,×(;Ñ(;ØØ-Ø-Ø-Ø"3ð )<ó )Ñ%ˆLð  +Ôð& Ðð ×ÑÓ)Ð/EÈÔ/IÈYÓM^Ø(5×(;Ñ(;Ñ%ˆJ AØÒ)Ø-×2Ñ2Ó4×;Ñ;¸BÓ?À!ÕC�Ø+×7Ñ7¸È!Ñ8KÈQÓO�Ø+×0Ñ0°°JÀÓC×JÑJÈ1ÈaÐQRÓS×VÑVÐWd×WkÑWkÓl‘ä$Ÿ|š|Ð,BÐ]gÕDgÓh�Ø+×0Ñ0°°A°rÓ:×AÑAÀ!ÀZÐQSÓT×WÑWÐXe×XlÑXlÓm�Ø×$Ñ$×6Ñ6°z×EUÑEU×E[ÑE[Ð\]ÕE^Õ7^ÐdeÐ6ÓfˆEØ'¨%¯(©(¸-×:NÑ:N¨(Ó*OÕOˆLð Ðð  ˆLØÐr    c                óÂ  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[ P                  R,          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[S[	,          /# )r   rz   Nr~   r¡   r   rÓ   rÍ   r·   r|   r}   r{   rŸ   r   )
r>   r?   r^   r   r¹   r€   r   r   r�   r8   )r   r   s   "€r   r   r`   q  sð   ø€ ÷ ;
ñ ;
á×#Ñ# dÕ*ð;
ñ Ÿ™ tÕ+ð;
ñ ×&Ñ&¨Õ-ð	;
ñ
  �ð;
ñ ×(Ñ(¨4Õ/ð;
ñ —l‘l TÕ)ð;
ñ #×.Ñ.°Õ5ð;
ñ ×(Ñ(¨4Õ/ð;
ñ ×(Ñ(¨4Õ/ð;
ñ !Ÿ?™?¨TÕ1ð;
ñ Ñ+Õ,ð;
ñ 
Ñ*Õ	*ñ;
r    c                ó,  € VR J VR J,          '       d   \        R4      hVf   V P                  4       ! V4      pVe‚   V P                  ! Wh3RR/VB P                  p\        P
                  ! V^ R7      P                  VP                  VP                  4      pV P                  WVR7      w  rÞVP                  WÜ4      pVe„   V P                  ! Wy3RR/VB P                  p\        P
                  ! V^ R7      P                  VP                  VP                  4      pV P                  WVR7      w  ppVP                  VV4      pVf   V P                  VVV	VVVV
R7      pV P                  ! RRR R	VR
VRVRV/VB p\        R/ VBRV P                  /B # )Nz:You must specify exactly one of input_ids or inputs_embedsr»   Tre   )rÔ   )rÕ   )rz   r|   r}   rÓ   r~   r   r{   rz   r¡   r~   r   rÓ   r<   r!   )rè   r×   rÐ   rÀ   r>   rš   r›   r[   r…   rã   Úmasked_scatterrÉ   ró   rO   r8   r<   )rR   rz   r~   r¡   r   rÓ   rÍ   r·   r|   r}   r{   rŸ   rÏ   Ú
image_maskrñ   rÈ   Ú
video_maskÚoutputss   &&&&&&&&&&&,      r   ÚforwardÚGlm46VModel.forwardo  së  € ð  ˜Ð -°tÐ";×<Ô<ÜÐYÓZÐZàÒ Ø ×5Ñ5Ô7¸	ÓBˆMàÒ#Ø×2Ò2ØñØ:>ðØBHñç‰mð ô !Ÿ9š9 \°qÔ9×<Ñ<¸]×=QÑ=QÐS`×SfÑSfÓgˆLØ ×5Ñ5°iÐ_kÐ5Ól‰MˆJØ)×8Ñ8¸ÓRˆMàÒ*Ø×2Ò2Ø#ñØAEðØIOñç‰mð ô !Ÿ9š9 \°qÔ9×<Ñ<¸]×=QÑ=QÐS`×SfÑSfÓgˆLØ ×5Ñ5°iÐ_kÐ5Ól‰MˆAˆzØ)×8Ñ8¸À\ÓRˆMàÒØ×7Ñ7Ø#Ø-Ø-Ø+Ø-Ø /Ø"3ð 8ó ˆLð ×%Ò%ñ 
Øð
à%ð
ð *ð
ð ,ð	
ð
 (ð
ð ñ
ˆô )ñ 
Øñ
à×(Ñ(ò
ð 	
r    )rO   r<   rM   )r‡   r‡   r‡   N)NNNrH   )NN)NNNNN)
NNNNNNNNNN)r%   r&   r'   r(   r)   Úaccepts_loss_kwargsr,   rJ   rw   r²   r   r   r   rÉ   rÐ   rã   ró   rû   r4   r5   Ú__classcell__©rS   r   s   @@r   rF   rF   H   sÌ   ù‡ € àÐàÐØÐõ÷2#ò 2#÷h[3ò [3ñz  ¨Ô1ØØ÷ñ ó ó ó 2ðñ.  ¨Ô1ØØ÷ñ ó ó ó 2ð÷(6ò (6÷T/ò /ðb Ø÷;
ñ ;
ó ó ÷;
ð ;
r    rF   c                   ó4   a € ] tR tRt o RtRtV 3R ltRtV tR# )ÚGlm46VCausalLMOutputWithPasti¯  r9   Nc                óH   <€ V ^8„  d   Qh/ S[ P                  R,          ;R&   # r;   r=   )r   r   s   "€r   r   Ú)Glm46VCausalLMOutputWithPast.__annotate__¯  rA   r    r!   rB   r6   s   @r   r  r  ¯  rD   r    r  c                   óà   a a€ ] tR tRt oRR/tRtV 3R lt]RV3R lR ll4       t]RV3R lR	 ll4       t	]
]RV3R
 lR ll4       4       tV 3R ltRV3R lR lltRV3R lR lltRtVtV ;t# )ÚGlm46VForConditionalGenerationi»  zlm_head.weightz(model.language_model.embed_tokens.weightFc                óò   <€ \         SV `  V4       \        V4      V n        \        P
                  ! VP                  P                  VP                  P                  R R7      V n	        V P                  4        R# )F)ÚbiasN)rI   rJ   rF   r   ÚnnÚLinearrN   Úhidden_sizeÚ
vocab_sizeÚlm_headrP   rQ   s   &&€r   rJ   Ú'Glm46VForConditionalGeneration.__init__À  sS   ø€ Ü‰Ñ˜Ô Ü  Ó(ˆŒ
Ü—y’y ×!3Ñ!3×!?Ñ!?À×ASÑAS×A^ÑA^ÐejÔkˆŒà�‰Ör    c          	      óˆ   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[S[,          /# r¶   r¸   )r   r   s   "€r   r   Ú+Glm46VForConditionalGeneration.__annotate__È  sV   ø€ ÷ 
\ñ 
\á"×.Ñ.ð
\ñ ×(Ñ(¨4Õ/ð
\ñ Ñ+Õ,ð	
\ñ
 
Ñ+Õ	+ñ
\r    c                ó<   € V P                   P                  ! W3/ VB # )z�
pixel_values_videos (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
    The tensors corresponding to the input videos.
)r   rÉ   )rR   r·   r}   rŸ   s   &&&,r   rÉ   Ú1Glm46VForConditionalGeneration.get_video_featuresÇ  s    € ð �z‰z×,Ò,Ð-@Ñ[ÐTZÑ[Ð[r    c          	      óˆ   <€ V ^8„  d   QhRS[ P                  RS[ P                  R,          RS[S[,          RS[S[,          /# rÌ   r¸   )r   r   s   "€r   r   r  Õ  sV   ø€ ÷ 
Uñ 
Uá×'Ñ'ð
Uñ ×(Ñ(¨4Õ/ð
Uñ Ñ+Õ,ð	
Uñ
 
Ñ+Õ	+ñ
Ur    c                ó<   € V P                   P                  ! W3/ VB # )z–
pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
    The tensors corresponding to the input images.
)r   rÐ   )rR   rÍ   r|   rŸ   s   &&&,r   rÐ   Ú1Glm46VForConditionalGeneration.get_image_featuresÔ  s   € ð �z‰z×,Ò,¨\ÑTÈVÑTÐTr    c                ó  <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[ P                  R,          RS[R,          RS[ P                  R,          RS[ P                  R,          RS[ P                  R,          R	S[ P                  R,          R
S[ P                  R,          RS[ P                  R,          RS[ P
                  R,          RS[S[ P                  ,          RS[S[,          RS[	S[
,          /# )r   rz   Nr~   r¡   r   rÓ   ÚlabelsrÍ   r·   r|   r}   r{   Úlogits_to_keeprŸ   r   )r>   r?   r^   r   r¹   r€   r\   r   r   r�   r  )r   r   s   "€r   r   r  ã  s(  ø€ ÷ R
ñ R
á×#Ñ# dÕ*ðR
ñ Ÿ™ tÕ+ðR
ñ ×&Ñ&¨Õ-ð	R
ñ
  �ðR
ñ ×(Ñ(¨4Õ/ðR
ñ × Ñ  4Õ'ðR
ñ —l‘l TÕ)ðR
ñ #×.Ñ.°Õ5ðR
ñ ×(Ñ(¨4Õ/ðR
ñ ×(Ñ(¨4Õ/ðR
ñ !Ÿ?™?¨TÕ1ðR
ñ ™eŸl™lÕ*ðR
ñ Ñ+Õ,ðR
ñ 
Ñ-Õ	-ñR
r    c                óÊ  € V P                   ! RRVRVRVRV	RV
RVRVRVR	VR
V/
VB pV^ ,          p\        V\        4      '       d   \        V) R4      MTpV P	                  VRVR3,          4      pRpVe7   V P
                  ! RRVRVRV P                  P                  P                  /VB p\        VVVP                  VP                  VP                  VP                  R7      # )añ  
Example:

```python
>>> from PIL import Image
>>> import httpx
>>> from io import BytesIO
>>> from transformers import AutoProcessor, Glm46VForConditionalGeneration

>>> model = Glm46VForConditionalGeneration.from_pretrained("zai-org/GLM-4.1V-9B-Thinking")
>>> processor = AutoProcessor.from_pretrained("zai-org/GLM-4.1V-9B-Thinking")

>>> messages = [
    {
        "role": "user",
        "content": [
            {"type": "image", "url": "https://www.ilankelman.org/stopsigns/australia.jpg"},
            {"type": "text", "text": "What is shown in this image?"},
        ],
    },
]
>>> url = "https://www.ilankelman.org/stopsigns/australia.jpg"
>>> with httpx.stream("GET", url) as response:
...     image = Image.open(BytesIO(response.read()))

>>> text = processor.apply_chat_template(messages, tokenize=False, add_generation_prompt=True)
>>> inputs = processor(text=[text], images=[image], vision_infos=[vision_infos])

>>> # Generate
>>> generate_ids = model.generate(inputs.input_ids, max_length=30)
>>> tokenizer.batch_decode(generate_ids, skip_special_tokens=True, clean_up_tokenization_spaces=False)[0]
"The image shows a street scene with a red stop sign in the foreground. In the background, there is a large red gate with Chinese characters ..."
```rz   rÍ   r·   r|   r}   r{   r¡   r~   r   rÓ   Nrƒ   Úlogitsr  r  )Úlossr  r   Úhidden_statesÚ
attentionsr<   r!   )r   Ú
isinstancer\   Úslicer  Úloss_functionr   rN   r  r  r   r  r  r<   )rR   rz   r~   r¡   r   rÓ   r  rÍ   r·   r|   r}   r{   r  rŸ   rú   r  Úslice_indicesr  r  s   &&&&&&&&&&&&&,     r   rû   Ú&Glm46VForConditionalGeneration.forwardá  sG  € ðf —*’*ñ 
Øð
à%ð
ð !4ð
ð *ð	
ð
 *ð
ð 0ð
ð &ð
ð *ð
ð ,ð
ð (ð
ð ñ
ˆð   �
ˆô 9CÀ>ÔSV×8WÒ8Wœ˜~˜o¨tÔ4Ð]kˆØ—‘˜m¨A¨}¸aÐ,?Õ@ÓAˆàˆØÒØ×%Ò%ñ ØðØ&,ðØ9=¿¹×9PÑ9P×9[Ñ9[ðØ_eñˆDô ,ØØØ#×3Ñ3Ø!×/Ñ/Ø×)Ñ)Ø×+Ñ+ô
ð 	
r    c                óh  <€ \         SV `  W4      p^ pVP                  R4      ;pe   VP                  4       pV^ 8w  d?   V P                  P
                  e'   VR,          V P                  P
                  ,           pV# RV9   d)   VR,          P                  ^,          ^ 8”  d
   VR,          p\        VP                  4      ^8H  ;'       d.    VP                  \        P                  \        P                  39   pV'       d–   VP                  R4      eƒ   VP                  R4      f   VP                  R4      e]   VP                  4        UU	u/ uF  w  r‰VR8w  g   K  W‰bK  	  ppp	V P                  P                  ! V3/ VB w  r«W°P                  n        MtVP                  ^ 4      P                  ^R	R	4      p
\        P                   ! VP                  ^ ,          ^\        P                  VP"                  R7      V P                  n        VR,          p\        P$                  ! W:.^ R7      pV# u up	pi )
r   r   rz   r{   r|   r}   r„   re   )N.rg   )rI   Ú$_prepare_position_ids_for_generationÚgetrç   r   r<   rŽ   rœ   r…   r>   r\   rÚ   Úitemsr²   rž   r—   r�   r[   rš   )rR   Úinputs_tensorÚmodel_kwargsÚtext_positionsÚpast_lengthÚcacher¡   Úis_input_idsÚkÚvÚvision_positionsr<   rS   s   &&&         €r   r#  ÚCGlm46VForConditionalGeneration._prepare_position_ids_for_generation7  sç  ø€ ô ™ÑEÀmÓbˆð ˆØ!×%Ñ%Ð&7Ó8Ð8ˆEÒEØ×.Ñ.Ó0ˆKØ˜!Ô §
¡
× 6Ñ 6Ò BØ)¨)Õ4°t·z±z×7MÑ7MÕMˆLØÐð ˜,Ô&¨<¸Õ+D×+JÑ+JÈ1Õ+MÐPQÔ+QØ(¨Õ5ˆMä˜=×.Ñ.Ó/°1Ñ4×gÐg¸×9LÑ9LÔQV×QZÑQZÔ\a×\fÑ\fÐPgÑ9gˆçØ× Ñ Ð!4Ó5ÒAØ×!Ñ!Ð"2Ó3Ò?À<×CSÑCSÐTdÓCeÒCqà-9×-?Ñ-?Ô-AÔVÑ-A¡T QÀQÈ+ÑEUœD˜AšDÑ-AˆLÑVØ,0¯J©J×,EÒ,EÀmÑ,dÐWcÑ,dÑ)ÐØ%0�J‰JÕ"à-×7Ñ7¸Ó:×AÑAÀ!ÀRÈÓLÐÜ%*§[¢[Ø×#Ñ# AÕ&¨´·±ÀM×DXÑDXô&ˆD�J‰JÔ"ð
 (¨	Õ2ˆÜ—y’y .Ð!CÈÔKˆàÐùó Ws   ÅH.ÅH.c                ó®   <€ V ^8„  d   QhRS[ P                  R,          RS[ P                  R,          RS[S[ P                  S[ P                  3,          /# )r   rz   NrÓ   r   )r>   r?   r^   r�   )r   r   s   "€r   r   r  ]  sO   ø€ ÷ 6*ñ 6*á×#Ñ# dÕ*ð6*ñ —|‘| dÕ*ð6*ñ 
‰u�|‰|™UŸ\™\Ð)Õ	*ñ	6*r    c           
     óÖ  € VEe.   VV P                  4       ! \        P                  ! RV P                  P                  \        P
                  VP                  R7      4      8H  R,          pVV P                  4       ! \        P                  ! RV P                  P                  \        P
                  VP                  R7      4      8H  R,          pVV P                  4       ! \        P                  ! RV P                  P                  \        P
                  VP                  R7      4      8H  R,          pMHWP                  P                  8H  pWP                  P                  8H  pWP                  P                  8H  p\        P                  ! VP                  4       VP                  4       ,
          ^R7      pV^ 8„  pW7( ,          pVP                  ^R7      p	VP                  ^R7      p
Wš3# )a  
Get the number of images and videos for each sample to calculate the separation length of the sample tensor.
These parameters are not passed through the processor to avoid unpredictable impacts from interface modifications.

Args:
    input_ids (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
        Indices of input sequence tokens in the vocabulary.

Returns:
    image_nums (`torch.LongTensor` of shape `(batch_size, num_images_sample)`)
    video_nums (`torch.LongTensor` of shape `(batch_size, num_videos_sample)`)
r„   re   r!   ).r   )r×   r>   rØ   r   Úimage_start_token_idrÚ   r[   Úvideo_start_token_idÚvideo_end_token_idré   r\   rÝ   )rR   rz   rÓ   Úis_imageÚis_video_startÚis_video_endÚvideo_levelÚinside_videoÚstandalone_imagesÚimage_countsÚvideo_countss   &&&        r   Ú_get_image_nums_and_video_numsÚ=Glm46VForConditionalGeneration._get_image_nums_and_video_nums]  s›  € ð$ Ó$àØ×,Ñ,Ô.Ü—J’J˜r 4§;¡;×#CÑ#CÌ5Ï:É:Ð^k×^rÑ^rÔsóñð õˆHð Ø×,Ñ,Ô.Ü—J’J˜r 4§;¡;×#CÑ#CÌ5Ï:É:Ð^k×^rÑ^rÔsóñð õˆNð Ø×,Ñ,Ô.Ü—J’J˜r 4§;¡;×#AÑ#AÌÏÉÐ\i×\pÑ\pÔqóñð õ‰Lð !§K¡K×$DÑ$DÑDˆHØ&¯+©+×*JÑ*JÑJˆNØ$¯©×(FÑ(FÑFˆLô —l’l >×#5Ñ#5Ó#7¸,×:JÑ:JÓ:LÕ#LÐRSÔTˆØ" Q‘ˆð %¨Õ6Ðð )×,Ñ,°Ð,Ó3ˆØ%×)Ñ)¨aÐ)Ó0ˆàÐ)Ð)r    c                ó”   <€ V ^8„  d   QhRS[ RS[RS[P                  R,          RS[S[P                  S[S[S[3,          3,          /# )r   Úexpand_sizeÚis_encoder_decoderrz   Nr   )r\   r‘   r>   r?   r�   Údictr_   r   )r   r   s   "€r   r   r  •  s\   ø€ ÷ V'ñ V'áðV'ñ !ðV'ñ ×#Ñ# dÕ*ð	V'ñ 
‰u×Ñ¡¡c©3 h¥Ð/Õ	0ñV'r    c                ó  a aaaa€ S^8X  d   SS3# . ROoVVVV 3R lpVV3R lpV! S4      oSe   SP                  S^ R7      oV! S4      oV'       d1   SP                  R4      f   \        R4      hV! SR,          4      SR&   SS3# )r‡   c           	      óz  <€ SP                  R R4      pSP                  RR4      pSP                  SSP                  RR4      R7      w  r4R pV  EF\  pVR8X  dk   \        P                  ! V\	        V4      4      pV Uu. uF)  p\        P
                  ! V^R7      P                  4       NK+  	  p	pV! W,          V	S
R7      W&   Ku  VR 8X  d!   \	        V4      p	V! W,          V	S
R7      W&   Kœ  VR	8X  dl   \        P                  ! V\	        V4      4      pV Uu. uF)  p\        P
                  ! V^R7      P                  4       NK+  	  p	pV! W,          V	S
R7      W&   EK  VR8X  d"   \	        V4      p	V! W,          V	S
R7      W&   EK6  VR
8X  g   EK@  V! W,          \	        V4      S
R7      W&   EK_  	  V # u upi u upi )r|   Nr}   rÓ   )rÓ   c           	      óô   € \         P                  ! W4      pV.^.V P                  4       ^,
          ,          ,           p\         P                  ! V Uu. uF  qUP                  ! V!  NK  	  up^ R7      pV# u upi )r‡   re   )r>   r¿   rf   rš   rë   )rˆ   ÚlengthsÚrepeat_timesÚsamplesÚrepeat_argsÚsampleÚresults   &&&    r   Ú_repeat_interleave_samplesÚŒGlm46VForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual.<locals>._repeat_interleave_samples­  s_   € ÜŸ+š+ aÓ1�Ø+˜n°¨s°a·e±e³gÀµkÕ/BÕB�ÜŸšÉgÓ#VÉgÀF§M¢M°;Ô$?ÉgÑ#VÐ\]Ô^�Ø�ùò $Ws   ÁA5rÍ   re   )rF  rG  r·   Úsecond_per_grid_ts)r$  r=  r>   r¿   r]   r¾   rÝ   )Údict_to_expandr|   r}   Ú
image_numsÚ
video_numsrL  r§   rH  rJ  rF  r@  rz   r'  rR   s   &         €€€€r   Ú"_expand_dict_for_generation_visualÚhGlm46VForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual¦  s´  ø€ Ø)×-Ñ-Ð.>ÀÓEˆNØ)×-Ñ-Ð.>ÀÓEˆNØ%)×%HÑ%HØ¨×)9Ñ)9¸/È4Ó)Pð &Ió &Ñ"ˆJòô &�Ø˜.Ô(ä#Ÿkšk¨.¼$¸zÓ:JÓK�GáMTÓUÉWÀ6œuŸzšz¨&°aÔ8×<Ñ<Ö>ÉW�GÐUÙ*DØ&Õ+°WÈ;ô+�NÓ'ð Ð,Ô,ä" :Ó.�GÙ*DØ&Õ+°WÈ;ô+�NÓ'ð Ð1Ô1Ü#Ÿkšk¨.¼$¸zÓ:JÓK�GÙMTÓUÉWÀ6œuŸzšz¨&°aÔ8×<Ñ<Ö>ÉW�GÐUÙ*DØ&Õ+°WÈ;ô+�NÔ'ð Ð,Ô,Ü" :Ó.�GÙ*DØ&Õ+°WÈ;ô+�NÔ'ð Ð0×0Ù*DØ&Õ+´T¸*Ó5EÐT_ô+�NÔ'ñ7 &ð< "Ð!ùò3 Vùò Vs   Á?/F3Ä/F8c                 ó@  <€ V  F–  pVR 8X  d5   W,          P                   ^8X  d   W,          P                  S^R7      W&   K>  W,          f   KJ  \        W,          \        P                  4      '       g   Kr  VS9  g   K{  W,          P                  S^ R7      W&   K˜  	  V # )r¡   re   )ÚndimrŒ   r  r>   r^   )rO  r§   r@  Úvisual_keyss   & €€r   Ú_expand_dict_for_generationÚaGlm46VForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generationÓ  sŒ   ø€ Û%�Ø˜.Ô(¨^Õ-@×-EÑ-EÈÔ-JØ*8Õ*=×*OÑ*OÐP[ÐabÐ*OÓ*c�NÓ'à"Õ'Ô3Ü" >Õ#6¼¿¹×EÔEØ ;Ö.à*8Õ*=×*OÑ*OÐP[ÐabÐ*OÓ*c�NÓ'ñ &ð "Ð!r    re   Úencoder_outputszMIf `is_encoder_decoder` is True, make sure that `encoder_outputs` is defined.)rÍ   r|   r·   r}   rN  )rŒ   r$  rè   )rR   r@  rA  rz   r'  rR  rW  rV  s   ff&fl  @r   Ú_expand_inputs_for_generationÚ<Glm46VForConditionalGeneration._expand_inputs_for_generation•  s    ü€ ð ˜!ÔØ˜lÐ*Ð*âwˆ÷+	"ð +	"öZ
	"ñ :¸,ÓGˆàÒ Ø!×3Ñ3°KÀQÐ3ÓGˆIá2°<Ó@ˆçØ×ÑÐ 1Ó2Ò:Ü Ð!pÓqÐqÙ.IÈ,ÐWhÕJiÓ.jˆLÐ*Ñ+à˜,Ð&Ð&r    )r  r   rH   )NNNNNNNNNNNr   )r‡   FN)r%   r&   r'   r(   Ú_tied_weights_keysrý   rJ   r   rÉ   rÐ   r   rû   r#  r=  rZ  r4   r5   rþ   rÿ   s   @@r   r  r  »  sœ   ù‡ € Ø*Ð,VÐWÐàÐõð ÷
\ñ 
\ó ð
\ð ÷
Uñ 
Uó ð
Uð Ø÷R
ñ R
ó ó ðR
õh$÷L6*ò 6*÷pV'÷ V'ò V'r    r  )rF   r   r  )%r’   Údataclassesr   Útypingr   r>   Útorch.nnr  Úcache_utilsr   Ú
generationr   Úmodeling_outputsr   r   r	   Úmodeling_utilsr
   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úautor   Úconfiguration_glm46vr   r   r8   rF   r  r  Ú__all__r!   r    r   Ú<module>rj     sÚ   ðó* Ý !Ý ã Ý å  Ý )ß kÑ kÝ -Ý &÷ó õ 8Ý Ý .ð ô˜Oó ó ðð Ø
ô0Ð 7ó 0ó ó ð0ð ôc
Ð'ó c
ó ðc
ðL Ø
ô0Ð#9ó 0ó ó ð0ôp'Ð%:¸Oô p'òf	 U‚r    