§
    ‚Štjt˜  ã                   ó¼  — d dl Z d dlmZ d dlmZ d dlZd dlmZ ddlm	Z	 ddl
mZ ddlmZmZmZ ddlmZ dd	lmZ dd
lmZmZmZmZ ddlmZ ddlmZ ddlmZ ddlm Z  e G d„ de¦  «        ¦   «         Z!ee G d„ de¦  «        ¦   «         ¦   «         Z"e G d„ de!¦  «        ¦   «         Z#ee G d„ de¦  «        ¦   «         ¦   «         Z$ G d„ de!e¦  «        Z%g d¢Z&dS )é    N)Ú	dataclass)ÚAnyé   )ÚCache)ÚGenerationMixin)ÚBaseModelOutputWithPastÚBaseModelOutputWithPoolingÚCausalLMOutputWithPast)ÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚtorch_compilable_check)Údeprecate_kwarg)Úaccepts_precomputed_kwargsé   )Ú	AutoModelé   )ÚGlm46VConfigc                   óD   — e Zd ZU eed<   dZdZdZdZdgZ	dZ
dZdZdZdZdS )ÚGlm46VPreTrainedModelÚconfigÚmodel)ÚimageÚvideoÚtextTNÚpast_key_values)Ú__name__Ú
__module__Ú__qualname__r   Ú__annotations__Ú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© ó    úh/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/glm46v/modeling_glm46v.pyr   r   .   s\   € € € € € € àÐÐÑØÐØ1ÐØ&*Ð#ØÐØ#4Ð"5ÐØÐØ€Nà!ÐØ"&ÐØÐÐÐr.   r   c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )Ú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.
    NÚrope_deltas©r   r    r!   Ú__doc__r3   ÚtorchÚ
LongTensorr"   r-   r.   r/   r1   r1   >   ó6   € € € € € € ðð ð ,0€K�Ô! DÑ(Ð/Ð/Ñ/Ð/Ð/r.   r1   c                   óv  ‡ — e Zd ZdZdZdZˆ fd„Z	 	 	 	 d'dedeeeef         e	j
        z  ded	ed
edee	j        z  dz  fd„Z	 	 	 d(de	j        de	j        de	j        dz  de	j        dz  de	j
        dz  dee	j
        e	j
        f         fd„Z ed¬¦  «        ee	 d)de	j        de	j        dz  dee         deez  fd„¦   «         ¦   «         ¦   «         Z ed¬¦  «        ee	 d)de	j        de	j        dz  dee         deez  fd„¦   «         ¦   «         ¦   «         Z	 	 d*de	j        de	j        de	j        dz  de	j        dz  fd„Z	 	 	 	 	 d+de	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  de	j
        dz  d e	j
        dz  de	j        dz  de	j
        dz  fd!„Z ed"d#¬$¦  «        ee	 	 	 	 	 	 	 	 	 	 d,de	j        dz  de	j
        dz  d%e	j        dz  d edz  de	j        dz  de	j
        dz  de	j        dz  de	j        dz  de	j        dz  de	j        dz  dee         deez  fd&„¦   «         ¦   «         ¦   «         Z ˆ xZ!S )-ÚGlm46VModelr   FNc                 óø   •— t          ¦   «                              |¦  «         t          j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        d | _        |  	                    ¦   «          d S ©N)
ÚsuperÚ__init__r   Úfrom_configÚvision_configÚvisualÚtext_configÚlanguage_modelr3   Ú	post_init©Úselfr   Ú	__class__s     €r/   r>   zGlm46VModel.__init__Q   sf   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ÝÔ+¨FÔ,@ÑAÔAˆŒÝ'Ô3°FÔ4FÑGÔGˆÔØˆÔð 	�ŠÑÔÐÐÐr.   r   Ústart_positionÚgrid_thwÚtemp_merge_sizeÚspatial_merge_sizeÚtime_intervalÚdevicec                 óü  — |d                               ¦   «         |z  |d                               ¦   «         |z  |d                               ¦   «         |z  }	}}t          j        ||¬¦  «        |z  }
t          j        ||¬¦  «        |z   }t          j        |	|¬¦  «        |z   }t          j        |
||d¬¦  «        \  }}}t          j        |||gd¬¦  «                             dd	¦  «        }|dxx         |z  cc<   |S )
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   r   r   ©rM   Úij)Úindexing©Údimr   éÿÿÿÿ)Úitemr6   ÚarangeÚmeshgridÚstackÚreshape)rF   rH   rI   rJ   rK   rL   rM   Ú
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_idsz#Glm46VModel.get_vision_position_idsZ   s  € ðL �QŒK×ÒÑÔ /Ñ1Ø�QŒK×ÒÑÔÐ"4Ñ4Ø�QŒK×ÒÑÔÐ"4Ñ4ð !+�Jˆ
õ "œL¨¸FÐCÑCÔCÀmÑSÐÝœ, z¸&ÐAÑAÔAÀNÑRˆÝœ j¸Ð@Ñ@Ô@À>ÑQˆå!&¤Ð0AÀ?ÐTbÐmqÐ!rÑ!rÔ!rÑˆ�˜Ý#œk¨6°6¸6Ð*BÈÐJÑJÔJ×RÒRÐSTÐVXÑYÔYÐØ˜AÐÐÔ .Ñ0ÐÐÑØ"Ð"r.   Ú	input_idsÚmm_token_type_idsÚimage_grid_thwÚvideo_grid_thwÚattention_maskÚreturnc           	      ó´  — |�*t          j        ||dd…df         d¬¦  «        }d|dd…df<   | j        j        j        }g }t          j        d|j        d         |j        d         |j        |j        ¬¦  «        }	|�t          |¦  «        nd|�t          |¦  «        nddœ}
t          |¦  «        D �]w\  }}||         }|�@|||                              ¦   «                  }|||                              ¦   «                  }g }t          j        t          |                     ¦   «         ¦  «        d„ ¦  «        D ]K\  }}t          |¦  «        }|d         d         }|d	         d         dz   }|                     |||f¦  «         ŒLd}g }|D ]Û\  }}}|dk    rd||z
  }|                     t          j        ||j        ¬
¦  «                             dd	¦  «                             dd	¦  «        |z   ¦  «         ||z  }Œpt)          |
|         ¦  «        }|                      ||d||j        ¬
¦  «        }|                     |¦  «         |t-          |d         |d         ¦  «        |z  z  }ŒÜt          j        |d¬¦  «                             dd	¦  «        }|�;|                     |	j        ¦  «        |	dd…|||                              ¦   «         f<   n!|                     |	j        ¦  «        |	dd…|f<   |                     |                     ¦   «         dz   t5          |¦  «        z
  ¦  «         �Œyt          j        ||j        ¬
¦  «                             d¦  «        }|	|fS )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)`)
        Nr   rR   r   r   ©ÚdtyperM   )r   r   c                 ó   — | d         S )Nr   r-   )Úxs    r/   ú<lambda>z,Glm46VModel.get_rope_index.<locals>.<lambda>Ê   s   € Ð`aÐbcÔ`d€ r.   rT   rO   r   )r6   Úrepeat_interleaver   r@   rK   ÚzerosÚshaperm   rM   ÚiterÚ	enumerateÚboolÚ	itertoolsÚgroupbyÚtolistÚlistÚappendrV   ÚviewÚexpandÚnextrd   ÚmaxÚcatrY   ÚtoÚlenÚtensorÚ	unsqueeze)rF   re   rf   rg   rh   ri   ÚkwargsrK   Ú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_lenrI   rc   Úllm_positionss                               r/   Úget_rope_indexzGlm46VModel.get_rope_indexŽ   sÇ  € ðF Ð%Ý"Ô4°^À^ÐTUÐTUÐTUÐWXÐTXÔEYÐ_`ÐaÑaÔaˆNØ#$ˆN˜1˜1˜1˜a˜4Ñ Ø!œ[Ô6ÔIÐà "ÐÝ”{ØØŒO˜AÔØŒO˜AÔØ”/ØÔ#ð
ñ 
ô 
ˆð (6Ð'A�t�NÑ#Ô#Ð#ÀtØ'5Ð'A�t�NÑ#Ô#Ð#Àtð
ð 
ˆ
õ
 -6°iÑ,@Ô,@ð $	[ñ $	[Ñ(ˆIÐ(Ø0°Ô;ÐØÐ)Ø$5°nÀYÔ6O×6TÒ6TÑ6VÔ6VÔ$WÐ!Ø#3°NÀ9Ô4M×4RÒ4RÑ4TÔ4TÔ#UÐ à!ÐÝ'Ô/µ	Ð:J×:QÒ:QÑ:SÔ:SÑ0TÔ0TÐVdÐVdÑeÔeð Gð G‘
��UÝ˜U™œ�Ø# Aœh qœk�Ø! "œI aœL¨1Ñ,�	Ø ×'Ò'¨¨k¸9Ð(EÑFÔFÐFÐFàˆKØ!ÐØ5Eð Wð WÑ1�˜y¨'à  AÒ%Ð%Ø&¨Ñ2�HØ$×+Ò+Ýœ X°iÔ6FÐGÑGÔG×LÒLÈQÐPRÑSÔS×ZÒZÐ[\Ð^`ÑaÔaÐdoÑoñô ð ð   8Ñ+�K�Kõ  $ J¨}Ô$=Ñ>Ô>�HØ*.×*FÒ*FØ# X¨qÐ2DÈYÔM]ð +Gñ +ô +Ð'ð %×+Ò+Ð,?Ñ@Ô@Ð@Ø¥3 x°¤{°H¸Q´KÑ#@Ô#@ÐDVÑ#VÑV�K�KÝ!œIÐ&6¸AÐ>Ñ>Ô>×FÒFÀqÈ"ÑMÔMˆMØÐ)ØO\×O_ÒO_Ð`lÔ`sÑOtÔOt�˜Q˜Q˜Q 	¨>¸)Ô+D×+IÒ+IÑ+KÔ+KÐKÑLÐLà-:×-=Ò-=¸lÔ>QÑ-RÔ-R�˜Q˜Q˜Q 	˜\Ñ*Ø!×(Ò(¨×):Ò):Ñ)<Ô)<¸qÑ)@Å3ÐGXÑCYÔCYÑ)YÑZÔZÐZÑZÝ %¤Ð-BÈ9ÔK[Ð \Ñ \Ô \× fÒ fÐghÑ iÔ iÐØÐ2Ð2Ð2r.   r   )ÚmodalityÚpixel_values_videosr…   c                 óê  — |                      | j        j        ¦  «        }|dd…df         }|dd…dd…f         }t          j        ||d¬¦  «        }|                     |j        d         d¦  «        }t          j        ||gd¬¦  «        } | j        |f|ddœ|¤Ž}	|                     d¦  «        | j        j	        dz  z   
                    ¦   «         }
t          j        |	j        |
¦  «        }||	_        |	S )	á[  
        pixel_values_videos (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
            The tensors corresponding to the input videos.
        video_grid_thw (`torch.LongTensor` of shape `(num_videos, 3)`, *optional*):
            The temporal, height and width of feature shape of each video in LLM.
        Nr   r   rR   T)rI   Úreturn_dictrT   r   )ÚtyperA   rm   r6   rq   Únew_onesrs   r€   ÚprodrK   ry   ÚsplitÚpooler_output)rF   rš   rh   r…   ÚtÚhwÚflattened_hwÚprefix_onesÚflattened_video_grid_thwÚvision_outputsÚsplit_sizesÚvideo_embedss               r/   Úget_video_featureszGlm46VModel.get_video_featuresë   s  € ð 2×6Ò6°t´{Ô7HÑIÔIÐà˜1˜1˜1˜a˜4Ô ˆØ˜A˜A˜A˜q˜r˜r˜EÔ"ˆåÔ.¨r°1¸!Ð<Ñ<Ô<ˆØ$×-Ò-¨lÔ.@ÀÔ.CÀQÑGÔGˆÝ#(¤9¨k¸<Ð-HÈaÐ#PÑ#PÔ#PÐ Ø$˜œØð
Ø*BÐPTð
ð 
ØX^ð
ð 
ˆð &×*Ò*¨2Ñ.Ô.°$´+Ô2PÐRSÑ2SÑS×[Ò[Ñ]Ô]ˆÝ”{ >Ô#?ÀÑMÔMˆØ'3ˆÔ$àÐr.   r   Úpixel_valuesc                 ó  — |                      | j        j        ¦  «        } | j        |fd|i|¤Ž}|                     d¦  «        | j        j        dz  z                       ¦   «         }t          j        |j        |¦  «        }||_        |S )áT  
        pixel_values (`torch.FloatTensor` of shape `(batch_size, num_channels, image_size, image_size)`):
            The tensors corresponding to the input images.
        image_grid_thw (`torch.LongTensor` of shape `(num_images, 3)`, *optional*):
            The temporal, height and width of feature shape of each image in LLM.
        rI   rT   r   )	rž   rA   rm   r    rK   ry   r6   r¡   r¢   )rF   r¬   rg   r…   r¨   r©   Úimage_embedss          r/   Úget_image_featureszGlm46VModel.get_image_features  s‹   € ð $×(Ò(¨¬Ô):Ñ;Ô;ˆØ$˜œ \ÐUÐU¸NÐUÈfÐUÐUˆØ%×*Ò*¨2Ñ.Ô.°$´+Ô2PÐRSÑ2SÑS×[Ò[Ñ]Ô]ˆÝ”{ >Ô#?ÀÑMÔMˆØ'3ˆÔ$àÐr.   Úinputs_embedsÚimage_featuresÚvideo_featuresc                 ó   — |€É| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    }|                     d¦  «        }| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    }|                     d¦  «        }n || j        j        k    }|| j        j        k    }| 	                    ¦   «         }| 
                    d¦  «                             |j        ¦  «        }|�Et          ||j        d         z  |                     ¦   «         k    d|› d|j        d         › �¦  «         | 	                    ¦   «         }| 
                    d¦  «                             |j        ¦  «        }|�Et          ||j        d         z  |                     ¦   «         k    d|› d|j        d         › �¦  «         ||fS )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.
        Nrl   rT   z6Image features and image tokens do not match, tokens: z, features: r   z6Video features and video tokens do not match, tokens: )Úget_input_embeddingsr6   rƒ   r   Úimage_token_idÚlongrM   ÚallÚvideo_token_idÚsumr„   r�   r   rs   Únumel)	rF   re   r±   r²   r³   Úspecial_image_maskÚspecial_video_maskÚn_image_tokensÚn_video_tokenss	            r/   Úget_placeholder_maskz Glm46VModel.get_placeholder_mask"  s  € ð ÐØ!.Ð2M°$×2KÒ2KÑ2MÔ2MÝ”˜Tœ[Ô7½u¼zÐR_ÔRfÐgÑgÔgñ3ô 3ò "Ðð "4×!7Ò!7¸Ñ!;Ô!;ÐØ!.Ð2M°$×2KÒ2KÑ2MÔ2MÝ”˜Tœ[Ô7½u¼zÐR_ÔRfÐgÑgÔgñ3ô 3ò "Ðð "4×!7Ò!7¸Ñ!;Ô!;ÐÐð "+¨d¬kÔ.HÒ!HÐØ!*¨d¬kÔ.HÒ!HÐà+×/Ò/Ñ1Ô1ˆØ/×9Ò9¸"Ñ=Ô=×@Ò@ÀÔAUÑVÔVÐØÐ%Ý"Ø Ô!4°RÔ!8Ñ8¸N×<PÒ<PÑ<RÔ<RÒRØ~ÈÐ~Ð~ÐesÔeyÐz{Ôe|Ð~Ð~ñô ð ð
 ,×/Ò/Ñ1Ô1ˆØ/×9Ò9¸"Ñ=Ô=×@Ò@ÀÔAUÑVÔVÐØÐ%Ý"Ø Ô!4°RÔ!8Ñ8¸N×<PÒ<PÑ<RÔ<RÒRØ~ÈÐ~Ð~ÐesÔeyÐz{Ôe|Ð~Ð~ñô ð ð "Ð#5Ð5Ð5r.   r   c                 ó”  — |€dn|                      ¦   «         }|d up|d u}	|	r|€|�t          d¦  «        ‚|d uo|d uo|	}
|
r3| j        �|dk    r&|                      |||||¬¦  «        \  }}|| _        �nS| j        ��I|dk    s|�€@|j        \  }}}|�‰|                     ¦   «                              d¦  «        dz
  }|                     |dk    d¦  «        }|                     d|d¦  «         	                    ddd¦  «         
                    |j        ¦  «        }n\t          j        |||z   ¦  «        }|                     ddd¦  «                             d|d¦  «         
                    |j        ¦  «        }| j                             || j        j        d         z  d¬¦  «        }|| 
                    |j        ¬¦  «        z   }nd }|S )	Nr   a  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`.)rg   rh   ri   rf   rT   r   r   rR   rO   )Úget_seq_lengthÚ
ValueErrorr3   r˜   rs   r·   ÚcumsumÚmasked_fillr|   Úrepeatr�   rM   r6   rV   r}   rq   )rF   re   r±   rg   rh   ri   r   rf   Úpast_key_values_lengthÚhas_multimodalÚcan_compute_mroper‡   r3   Ú
batch_sizeÚ
seq_lengthÚ_Údeltas                    r/   Úcompute_3d_position_idsz#Glm46VModel.compute_3d_position_idsL  s+  € ð '6Ð&=  À?×CaÒCaÑCcÔCcÐØ'¨tÐ3ÐQ°~ÈTÐ7QˆØð 	Ð/Ð7¸IÐ<QÝðnñô ð ð
 &¨TÐ1ÐfÐ6GÈtÐ6SÐfÐXfÐàð 	  $Ô"2Ð":Ð>TÐXYÒ>YÐ>YØ(,×(;Ò(;ØØ-Ø-Ø-Ø"3ð )<ñ )ô )Ñ%ˆL˜+ð  +ˆDÔÑð
 ÔÑ)Ð/EÈÒ/IÐ/IÈYÑM^Ø(5Ô(;Ñ%ˆJ˜
 AØÐ)Ø-×2Ò2Ñ4Ô4×;Ò;¸BÑ?Ô?À!ÑC�Ø+×7Ò7¸È!Ò8KÈQÑOÔO�Ø+×0Ò0°°JÀÑCÔC×JÒJÈ1ÈaÐQRÑSÔS×VÒVÐWdÔWkÑlÔl��å$œ|Ð,BÐDZÐ]gÑDgÑhÔh�Ø+×0Ò0°°A°rÑ:Ô:×AÒAÀ!ÀZÐQSÑTÔT×WÒWÐXeÔXlÑmÔm�ØÔ$×6Ò6°zÀTÔEUÔE[Ð\]ÔE^Ñ7^ÐdeÐ6ÑfÔfˆEØ'¨%¯(ª(¸-Ô:N¨(Ñ*OÔ*OÑOˆLˆLð  ˆLØÐr.   r3   úv5.10©Úversionr‡   c           	      óð  — |du |duz  rt          d¦  «        ‚|€ |                      ¦   «         |¦  «        }|�{ | j        ||fddi|¤Žj        }t	          j        |d¬¦  «                             |j        |j        ¦  «        }|  	                    |||¬¦  «        \  }}| 
                    ||¦  «        }|�{ | j        ||	fddi|¤Žj        }t	          j        |d¬¦  «                             |j        |j        ¦  «        }|  	                    |||¬¦  «        \  }}| 
                    ||¦  «        }|€|                      |||	||||
¬	¦  «        } | j        dd||||d
œ|¤Ž}t          di |¤d| j        i¤ŽS )aU  
        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.
        Nz:You must specify exactly one of input_ids or inputs_embedsr�   Tr   rR   )r²   )r³   )re   rg   rh   r±   ri   r   rf   )re   r‡   ri   r   r±   r3   r-   )rÃ   rµ   r°   r¢   r6   r€   r�   rM   rm   rÀ   Úmasked_scatterr«   rÎ   rC   r1   r3   )rF   re   ri   r‡   r   r±   r¬   rš   rg   rh   rf   r…   r¯   Ú
image_maskrÌ   rª   Ú
video_maskÚoutputss                     r/   ÚforwardzGlm46VModel.forward}  s&  € ð. ˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø7˜D×5Ò5Ñ7Ô7¸	ÑBÔBˆMàÐ#Ø2˜4Ô2Ø˜nðð Ø:>ðØBHðð äð õ !œ9 \°qÐ9Ñ9Ô9×<Ò<¸]Ô=QÐS`ÔSfÑgÔgˆLØ ×5Ò5°iÀÐ_kÐ5ÑlÔl‰MˆJ˜Ø)×8Ò8¸À\ÑRÔRˆMàÐ*Ø2˜4Ô2Ø# ^ðð ØAEðØIOðð äð õ !œ9 \°qÐ9Ñ9Ô9×<Ò<¸]Ô=QÐS`ÔSfÑgÔgˆLØ ×5Ò5°iÀÐ_kÐ5ÑlÔl‰MˆAˆzØ)×8Ò8¸À\ÑRÔRˆMàÐØ×7Ò7Ø#Ø-Ø-Ø+Ø-Ø /Ø"3ð 8ñ ô ˆLð &�$Ô%ð 
ØØ%Ø)Ø+Ø'ð
ð 
ð ð
ð 
ˆõ )ð 
ð 
Øð
ð 
àÔ(ð
ð 
ð 
ð 	
r.   )r   r   r   N)NNNr<   )NN)NNNNN)
NNNNNNNNNN)"r   r    r!   r#   Úaccepts_loss_kwargsr&   r>   Úintrz   r6   ÚTensorÚstrrM   rd   r7   Ú	IntTensorÚtupler˜   r   r   r   ÚFloatTensorr   r   r	   r«   r°   rÀ   rÎ   r   r   r1   r×   Ú__classcell__©rG   s   @r/   r:   r:   J   sÍ  ø€ € € € € àÐàÐØÐðð ð ð ð ð  !Ø"#ØØ,0ð2#ð 2#àð2#ð �s˜C �}Ô%¨¬Ñ4ð2#ð ð	2#ð
  ð2#ð ð2#ð �e”lÑ" TÑ)ð2#ð 2#ð 2#ð 2#ðp 37Ø26Ø.2ð[3ð [3àÔ#ð[3ð !œ?ð[3ð Ô(¨4Ñ/ð	[3ð
 Ô(¨4Ñ/ð[3ð œ tÑ+ð[3ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð[3ð [3ð [3ð [3ðz  Ð¨Ð1Ñ1Ô1ØØð 37ðð à"Ô.ðð Ô(¨4Ñ/ðð Ð+Ô,ð	ð
 
Ð+Ñ	+ðð ð ñ „^ñ Ôñ 2Ô1ðð:  Ð¨Ð1Ñ1Ô1ØØð 37ðð àÔ'ðð Ô(¨4Ñ/ðð Ð+Ô,ð	ð
 
Ð+Ñ	+ðð ð ñ „^ñ Ôñ 2Ô1ðð0 48Ø37ð(6ð (6àÔ#ð(6ð Ô(ð(6ð Ô)¨DÑ0ð	(6ð
 Ô)¨DÑ0ð(6ð (6ð (6ð (6ð\ /3Ø.2Ø.2Ø/3Ø48ð/ð /à”< $Ñ&ð/ð ”| dÑ*ð/ð œ tÑ+ð	/ð
 œ tÑ+ð/ð œ tÑ+ð/ð œ¨Ñ,ð/ð !œ?¨TÑ1ð/ð 
Œ˜Ñ	ð/ð /ð /ð /ðb €_�]¨GÐ4Ñ4Ô4ØØð .2Ø.2Ø04Ø(,Ø26Ø,0Ø8<Ø26Ø26Ø48ðA
ð A
àÔ# dÑ*ðA
ð œ tÑ+ðA
ð Ô&¨Ñ-ð	A
ð
  ™ðA
ð Ô(¨4Ñ/ðA
ð ”l TÑ)ðA
ð #Ô.°Ñ5ðA
ð Ô(¨4Ñ/ðA
ð Ô(¨4Ñ/ðA
ð !œ?¨TÑ1ðA
ð Ð+Ô,ðA
ð 
Ð*Ñ	*ðA
ð A
ð A
ñ Ôñ „^ñ 5Ô4ðA
ð A
ð A
ð A
ð A
r.   r:   c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚGlm46VCausalLMOutputWithPastr2   Nr3   r4   r-   r.   r/   râ   râ   Ä  r8   r.   râ   c            !       ó"  ‡ — e Zd ZddiZdZˆ fd„Ze	 d#dej        dej	        dz  de
e         d	eez  fd
„¦   «         Ze	 d#dej        dej	        dz  de
e         d	eez  fd„¦   «         Z edd¬¦  «        ee	 	 	 	 	 	 	 	 	 	 	 	 d$dej	        dz  dej        dz  dej	        dz  dedz  dej        dz  dej	        dz  dej        dz  dej        dz  dej	        dz  dej	        dz  dej        dz  deej        z  de
e         d	eez  fd„¦   «         ¦   «         ¦   «         Z	 	 	 	 	 	 	 	 	 	 d%ˆ fd„	Zˆ fd„Z	 d#dej	        dz  dej        dz  d	eej        ej        f         fd„Z	 	 	 d&d ed!edej	        dz  d	eej	        eeef         f         fd"„Zˆ xZ S )'ÚGlm46VForConditionalGenerationzlm_head.weightz(model.language_model.embed_tokens.weightFc                 óú   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        j        |j        j        d¬¦  «        | _	        |  
                    ¦   «          d S )NF)Úbias)r=   r>   r:   r   ÚnnÚLinearrB   Úhidden_sizeÚ
vocab_sizeÚlm_headrD   rE   s     €r/   r>   z'Glm46VForConditionalGeneration.__init__Õ  se   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý  Ñ(Ô(ˆŒ
Ý”y Ô!3Ô!?ÀÔASÔA^ÐejÐkÑkÔkˆŒà�ŠÑÔÐÐÐr.   Nrš   rh   r…   rj   c                 ó*   —  | j         j        ||fi |¤ŽS )rœ   )r   r«   )rF   rš   rh   r…   s       r/   r«   z1Glm46VForConditionalGeneration.get_video_featuresÜ  s%   € ð -ˆtŒzÔ,Ð-@À.Ð[Ð[ÐTZÐ[Ð[Ð[r.   r¬   rg   c                 ó*   —  | j         j        ||fi |¤ŽS )r®   )r   r°   )rF   r¬   rg   r…   s       r/   r°   z1Glm46VForConditionalGeneration.get_image_featuresë  s#   € ð -ˆtŒzÔ,¨\¸>ÐTÐTÈVÐTÐTÐTr.   r3   rÏ   rÐ   r   re   ri   r‡   r   r±   Úlabelsrf   Úlogits_to_keepc                 ó~  —  | j         d||||	|
|||||dœ
|¤Ž}|d         }t          |t          ¦  «        rt          | d¦  «        n|}|                      |dd…|dd…f         ¦  «        }d}|�'|                      ||| j        j        j        ¬¦  «        }t          |||j
        |j        |j        |j        ¬¦  «        S )aº  
        labels (`torch.LongTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Labels for computing the masked language modeling loss. Indices should either be in `[0, ...,
            config.vocab_size]` or -100 (see `input_ids` docstring). Tokens with indices set to `-100` are ignored
            (masked), the loss is only computed for the tokens with labels in `[0, ..., config.vocab_size]`.
        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.

        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 ..."
        ```)
re   r¬   rš   rg   rh   rf   r‡   ri   r   r±   r   N)Úlogitsrî   rê   )Úlossrñ   r   Úhidden_statesÚ
attentionsr3   r-   )r   Ú
isinstancerÙ   Úslicerë   Úloss_functionr   rB   rê   râ   r   ró   rô   r3   )rF   re   ri   r‡   r   r±   rî   r¬   rš   rg   rh   rf   rï   r…   rÖ   ró   Úslice_indicesrñ   rò   s                      r/   r×   z&Glm46VForConditionalGeneration.forwardú  s  € ðz �$”*ð 
ØØ%Ø 3Ø)Ø)Ø/Ø%Ø)Ø+Ø'ð
ð 
ð ð
ð 
ˆð   œ
ˆõ 9CÀ>ÕSVÑ8WÔ8WÐk�˜~˜o¨tÑ4Ô4Ð4Ð]kˆØ—’˜m¨A¨A¨A¨}¸a¸a¸aÐ,?Ô@ÑAÔAˆàˆØÐØ×%Ò%¨V¸FÈtÌ{ÔOfÔOqÐ%ÑrÔrˆDå+ØØØ#Ô3Ø!Ô/ØÔ)ØÔ+ð
ñ 
ô 
ð 	
r.   Tc                 ón   •—  t          ¦   «         j        |f|||||||	|
||dœ
|¤Ž}|s|r
d |d<   d |d<   |S )N)
r   ri   r±   r‡   r¬   rš   rg   rh   Ú	use_cacheÚis_first_iterationr¬   rš   )r=   Úprepare_inputs_for_generation)rF   re   r   ri   r±   r‡   rú   r¬   rš   rg   rh   rû   r…   Úmodel_inputsrG   s                 €r/   rü   z<Glm46VForConditionalGeneration.prepare_inputs_for_generationX  s~   ø€ ð" =•u‘w”wÔ<Øð
à+Ø)Ø'Ø%Ø%Ø 3Ø)Ø)ØØ1ð
ð 
ð ð
ð 
ˆð "ð 	7 ið 	7Ø+/ˆL˜Ñ(Ø26ˆLÐ.Ñ/àÐr.   c                 ó¼  •— t          ¦   «                              ||¦  «        }d}|                     d¦  «        x}�|                     ¦   «         }|dk    r#| j        j        �|d         | j        j        z   }|S d|v r|d         j        d         dk    r|d         }t          |j        ¦  «        dk    o|j        t          j
        t          j        fv }|r€|                     d¦  «        �k|                     d¦  «        €|                     d	¦  «        �Ad
„ |                     ¦   «         D ¦   «         } | j        j        |fi |¤Ž\  }}	|	| j        _        nf|                     d¦  «                             ddd¦  «        }t          j        |j        d         dt          j        |j        ¬¦  «        | j        _        |d         }t          j        ||gd¬¦  «        }|S )Nr   r   )N.re   r   r   rf   rg   rh   c                 ó&   — i | ]\  }}|d k    ¯||“ŒS )re   r-   )Ú.0ÚkÚvs      r/   ú
<dictcomp>zWGlm46VForConditionalGeneration._prepare_position_ids_for_generation.<locals>.<dictcomp>•  s(   € ÐVÐVÐV¡T Q¨ÀQÈ+ÒEUÐEU˜A˜qÐEUÐEUÐEUr.   r   rT   rl   rR   )r=   Ú$_prepare_position_ids_for_generationÚgetrÂ   r   r3   rs   r‚   rm   r6   rÙ   r·   Úitemsr˜   r„   r}   rr   rM   r€   )rF   Úinputs_tensorÚmodel_kwargsÚtext_positionsÚpast_lengthÚcacher‡   Úis_input_idsÚvision_positionsr3   rG   s             €r/   r  zCGlm46VForConditionalGeneration._prepare_position_ids_for_generation~  sö  ø€ õ ™œ×EÒEÀmÐUaÑbÔbˆð ˆØ!×%Ò%Ð&7Ñ8Ô8Ð8ˆEÐEØ×.Ò.Ñ0Ô0ˆKØ˜!ÒÐ ¤
Ô 6Ð BØ)¨)Ô4°t´zÔ7MÑMˆLØÐð ˜,Ð&Ð&¨<¸Ô+DÔ+JÈ1Ô+MÐPQÒ+QÐ+QØ(¨Ô5ˆMå˜=Ô.Ñ/Ô/°1Ò4Ðg¸Ô9LÕQVÔQZÕ\aÔ\fÐPgÐ9gˆàð	à× Ò Ð!4Ñ5Ô5ÐAØ×!Ò!Ð"2Ñ3Ô3Ð?À<×CSÒCSÐTdÑCeÔCeÐCqàVÐV¨\×-?Ò-?Ñ-AÔ-AÐVÑVÔVˆLØ,E¨D¬JÔ,EÀmÐ,dÐ,dÐWcÐ,dÐ,dÑ)Ð˜kØ%0ˆDŒJÔ"Ð"à-×7Ò7¸Ñ:Ô:×AÒAÀ!ÀRÈÑLÔLÐÝ%*¤[ØÔ# AÔ&¨µ´ÀMÔDXð&ñ &ô &ˆDŒJÔ"ð
 (¨	Ô2ˆÝ”y .Ð2BÐ!CÈÐKÑKÔKˆàÐr.   c                 óZ  — |�� | |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    d         }| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    d         }| |                       ¦   «         t          j        | j        j        t          j        |j        ¬¦  «        ¦  «        k    d         }n0|| j        j        k    }|| j        j        k    }|| j        j        k    }t          j	        | 
                    ¦   «         | 
                    ¦   «         z
  d¬¦  «        }|dk    }|| z  }|                     d¬¦  «        }	|                     d¬¦  «        }
|	|
fS )aa  
        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)`)
        Nrl   ).r   r   rR   r   )rµ   r6   rƒ   r   Úimage_start_token_idr·   rM   Úvideo_start_token_idÚvideo_end_token_idrÄ   rÙ   rº   )rF   re   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_numsz=Glm46VForConditionalGeneration._get_image_nums_and_video_nums¤  s®  € ð$ Ñ$àØ.�4×,Ò,Ñ.Ô.Ý”L ¤Ô!AÍÌÐ\iÔ\pÐqÑqÔqñô òð ôˆHð Ø.�4×,Ò,Ñ.Ô.Ý”L ¤Ô!AÍÌÐ\iÔ\pÐqÑqÔqñô òð ôˆNð Ø.�4×,Ò,Ñ.Ô.Ý”L ¤Ô!?ÅuÄzÐZgÔZnÐoÑoÔoñô òð ôˆLˆLð ! D¤KÔ$DÒDˆHØ&¨$¬+Ô*JÒJˆNØ$¨¬Ô(FÒFˆLõ ”l >×#5Ò#5Ñ#7Ô#7¸,×:JÒ:JÑ:LÔ:LÑ#LÐRSÐTÑTÔTˆØ" Q’ˆð %¨¨Ñ6Ðð )×,Ò,°Ð,Ñ3Ô3ˆØ%×)Ò)¨aÐ)Ñ0Ô0ˆà˜\Ð)Ð)r.   r   Úexpand_sizeÚis_encoder_decoderc                 ó  ‡ ‡‡‡‡— ‰dk    r‰‰fS g d¢Šˆˆˆˆ fd„}ˆˆfd„} |‰¦  «        Š‰�‰                      ‰d¬¦  «        Š |‰¦  «        Š|r8‰                     d¦  «        €t          d¦  «        ‚ |‰d         ¦  «        ‰d<   ‰‰fS )	Nr   )r¬   rg   rš   rh   Úsecond_per_grid_tsc                 ó  •— ‰                      dd ¦  «        }‰                      dd ¦  «        }‰                     ‰
‰                      dd ¦  «        ¬¦  «        \  }}d„ }| D �]}|dk    rFt          j        |t	          |¦  «        ¦  «        }d„ |D ¦   «         } || |         |‰	¬¦  «        | |<   ŒO|dk    r't	          |¦  «        } || |         |‰	¬¦  «        | |<   Œ||d	k    rFt          j        |t	          |¦  «        ¦  «        }d
„ |D ¦   «         } || |         |‰	¬¦  «        | |<   ŒÈ|dk    r't	          |¦  «        } || |         |‰	¬¦  «        | |<   Œõ|dk    r$ || |         t	          |¦  «        ‰	¬¦  «        | |<   �Œ!| S )Nrg   rh   r±   )r±   c                 ó´   ‡— t          j        | |¦  «        }|gdg|                      ¦   «         dz
  z  z   Št          j        ˆfd„|D ¦   «         d¬¦  «        }|S )Nr   c                 ó$   •— g | ]} |j         ‰Ž ‘ŒS r-   )rÆ   )r   ÚsampleÚrepeat_argss     €r/   ú
<listcomp>z Glm46VForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual.<locals>._repeat_interleave_samples.<locals>.<listcomp>÷  s"   ø€ Ð#VÐ#VÐ#VÀF M F¤M°;Ð$?Ð#VÐ#VÐ#Vr.   r   rR   )r6   r¡   rS   r€   )ro   ÚlengthsÚrepeat_timesÚsamplesÚresultr#  s        @r/   Ú_repeat_interleave_sampleszŒGlm46VForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual.<locals>._repeat_interleave_samplesô  sb   ø€ Ýœ+ a¨Ñ1Ô1�Ø+˜n°¨s°a·e²e±g´gÀ±kÑ/BÑB�ÝœÐ#VÐ#VÐ#VÐ#VÈgÐ#VÑ#VÔ#VÐ\]Ð^Ñ^Ô^�Ø�r.   r¬   c                 ó^   — g | ]*}t          j        |d ¬¦  «                             ¦   «         ‘Œ+S ©r   rR   ©r6   r    rº   ©r   r"  s     r/   r$  z|Glm46VForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual.<locals>.<listcomp>ÿ  ó3   € ÐUÐUÐUÀ6�uœz¨&°aÐ8Ñ8Ô8×<Ò<Ñ>Ô>ÐUÐUÐUr.   )r%  r&  rš   c                 ó^   — g | ]*}t          j        |d ¬¦  «                             ¦   «         ‘Œ+S r+  r,  r-  s     r/   r$  z|Glm46VForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visual.<locals>.<listcomp>  r.  r.   r  )r  r  r6   r¡   rz   )Údict_to_expandrg   rh   Ú
image_numsÚ
video_numsr)  r�   r'  r%  r  re   r  rF   s            €€€€r/   Ú"_expand_dict_for_generation_visualzhGlm46VForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation_visualí  s  ø€ Ø)×-Ò-Ð.>ÀÑEÔEˆNØ)×-Ò-Ð.>ÀÑEÔEˆNØ%)×%HÒ%HØ¨×)9Ò)9¸/È4Ñ)PÔ)Pð &Iñ &ô &Ñ"ˆJ˜
ðð ð ð &ð ñ �Ø˜.Ò(Ð(å#œk¨.½$¸zÑ:JÔ:JÑKÔK�GàUÐUÈWÐUÑUÔU�GØ*DÐ*DØ& sÔ+°WÈ;ð+ñ +ô +�N 3Ñ'Ð'ð Ð,Ò,Ð,å" :Ñ.Ô.�GØ*DÐ*DØ& sÔ+°WÈ;ð+ñ +ô +�N 3Ñ'Ð'ð Ð1Ò1Ð1Ý#œk¨.½$¸zÑ:JÔ:JÑKÔK�GØUÐUÈWÐUÑUÔU�GØ*DÐ*DØ& sÔ+°WÈ;ð+ñ +ô +�N 3Ñ'Ð'ð Ð,Ò,Ð,Ý" :Ñ.Ô.�GØ*DÐ*DØ& sÔ+°WÈ;ð+ñ +ô +�N 3Ñ'Ð'ð Ð0Ò0Ð0Ø*DÐ*DØ& sÔ+µT¸*Ñ5EÔ5EÐT_ð+ñ +ô +�N 3Ñ'ùð "Ð!r.   c                 ó  •— | D ]†}|dk    r2| |         j         dk    r!| |                              ‰d¬¦  «        | |<   Œ:| |         �Dt          | |         t          j        ¦  «        r$|‰vr | |                              ‰d¬¦  «        | |<   Œ‡| S )Nr‡   r   r   rR   r   )Úndimrq   rõ   r6   rÚ   )r0  r�   r  Úvisual_keyss     €€r/   Ú_expand_dict_for_generationzaGlm46VForConditionalGeneration._expand_inputs_for_generation.<locals>._expand_dict_for_generation  s²   ø€ Ø%ð dð d�Ø˜.Ò(Ð(¨^¸CÔ-@Ô-EÈÒ-JÐ-JØ*8¸Ô*=×*OÒ*OÐP[ÐabÐ*OÑ*cÔ*c�N 3Ñ'Ð'à" 3Ô'Ð3Ý" >°#Ô#6½¼ÑEÔEð 4à ;Ð.Ð.à*8¸Ô*=×*OÒ*OÐP[ÐabÐ*OÑ*cÔ*c�N 3Ñ'øØ!Ð!r.   r   rR   Úencoder_outputszMIf `is_encoder_decoder` is True, make sure that `encoder_outputs` is defined.)rq   r  rÃ   )rF   r  r  re   r  r3  r7  r6  s   `` ``  @r/   Ú_expand_inputs_for_generationz<Glm46VForConditionalGeneration._expand_inputs_for_generationÜ  s  øøøøø€ ð ˜!ÒÐØ˜lÐ*Ð*àwÐwÐwˆð+	"ð +	"ð +	"ð +	"ð +	"ð +	"ð +	"ð +	"ðZ
	"ð 
	"ð 
	"ð 
	"ð 
	"ð 
	"ð :Ð9¸,ÑGÔGˆàÐ Ø!×3Ò3°KÀQÐ3ÑGÔGˆIà2Ð2°<Ñ@Ô@ˆàð 	kØ×ÒÐ 1Ñ2Ô2Ð:Ý Ð!pÑqÔqÐqØ.IÐ.IÈ,ÐWhÔJiÑ.jÔ.jˆLÐ*Ñ+à˜,Ð&Ð&r.   r<   )NNNNNNNNNNNr   )
NNNNTNNNNF)r   FN)!r   r    r!   Ú_tied_weights_keysrØ   r>   r   r6   rÞ   r7   r   r   rÝ   r	   r«   r°   r   r   rÚ   r   rÜ   rÙ   râ   r×   rü   r  r  rv   ÚdictrÛ   r   r9  rß   rà   s   @r/   rä   rä   Ð  sÁ  ø€ € € € € Ø*Ð,VÐWÐàÐðð ð ð ð ð ð 37ð\ð \à"Ô.ð\ð Ô(¨4Ñ/ð\ð Ð+Ô,ð	\ð
 
Ð+Ñ	+ð\ð \ð \ñ „^ð\ð ð 37ðUð UàÔ'ðUð Ô(¨4Ñ/ðUð Ð+Ô,ð	Uð
 
Ð+Ñ	+ðUð Uð Uñ „^ðUð €_�]¨GÐ4Ñ4Ô4ØØð .2Ø.2Ø04Ø(,Ø26Ø*.Ø,0Ø8<Ø26Ø26Ø48Ø-.ðY
ð Y
àÔ# dÑ*ðY
ð œ tÑ+ðY
ð Ô&¨Ñ-ð	Y
ð
  ™ðY
ð Ô(¨4Ñ/ðY
ð Ô  4Ñ'ðY
ð ”l TÑ)ðY
ð #Ô.°Ñ5ðY
ð Ô(¨4Ñ/ðY
ð Ô(¨4Ñ/ðY
ð !œ?¨TÑ1ðY
ð ˜eœlÑ*ðY
ð Ð+Ô,ðY
ð 
Ð-Ñ	-ðY
ð Y
ð Y
ñ „^ñ Ôñ 5Ô4ðY
ð| ØØØØØØ ØØØ ð$ð $ð $ð $ð $ð $ðL$ð $ð $ð $ð $ðR .2ð6*ð 6*àÔ# dÑ*ð6*ð ”| dÑ*ð6*ð 
ˆuŒ|˜Uœ\Ð)Ô	*ð	6*ð 6*ð 6*ð 6*ðt Ø#(Ø-1ð	V'ð V'àðV'ð !ðV'ð Ô# dÑ*ð	V'ð 
ˆuÔ  c¨3 h¤Ð/Ô	0ðV'ð V'ð V'ð V'ð V'ð V'ð V'ð V'r.   rä   )r:   r   rä   )'rw   Údataclassesr   Útypingr   r6   Útorch.nnrç   Úcache_utilsr   Ú
generationr   Úmodeling_outputsr   r	   r
   Úmodeling_utilsr   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.deprecationr   Úutils.genericr   Úautor   Úconfiguration_glm46vr   r   r1   r:   râ   rä   Ú__all__r-   r.   r/   ú<module>rJ     s~  ðð, Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !Ø Ð Ð Ð Ð Ð à €€€Ø Ð Ð Ð Ð Ð à  Ð  Ð  Ð  Ð  Ð  Ø )Ð )Ð )Ð )Ð )Ð )Ø kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kÐ kØ -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &ðð ð ð ð ð ð ð ð ð ð ð ð 1Ð 0Ð 0Ð 0Ð 0Ð 0Ø 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø Ð Ð Ð Ð Ð Ø .Ð .Ð .Ð .Ð .Ð .ð ðð ð ð ð ˜Oñ ô ñ „ðð Ø
ð0ð 0ð 0ð 0ð 0Ð 7ñ 0ô 0ñ „ñ „ð0ð ðv
ð v
ð v
ð v
ð v
Ð'ñ v
ô v
ñ „ðv
ðr Ø
ð0ð 0ð 0ð 0ð 0Ð#9ñ 0ô 0ñ „ñ „ð0ðb'ð b'ð b'ð b'ð b'Ð%:¸Oñ b'ô b'ð b'ðJ UÐ
TÐ
T€€€r.   