Ë
    ÛÓ^jY:  ã                  óf  — d dl mZ d dlZd dlmZmZ d dlmZ d dlm	Z	m
Z
 d dlmZ e	rd dlmZ  ej                  e«      Z e«       Z G d„ d	e«      Ze G d
„ d«      «       Zdd„Zdd„Z	 	 	 	 	 	 dd„Zdd„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z	 	 	 	 	 	 dd„Z G d„ ded   «      Zdd„Z G d„ d«      Z y) é    )ÚannotationsN)ÚIterableÚSequence)Ú	dataclass)ÚTYPE_CHECKINGÚAny)Úlogging)ÚPreTrainedConfigc                  ó   — e Zd ZdZy)Ú%AmbiguousGlobalPerLayerAttributeErrorzMRaised when a per-layer attribute is read from a heterogeneous global config.N)Ú__name__Ú
__module__Ú__qualname__Ú__doc__© ó    ú†/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/integrations/heterogeneity/configuration_utils.pyr   r   #   s   „ ÚWr   r   c                  ó,   — e Zd ZU ded<   ded<   ded<   y)Ú_HeterogeneitySpecúdict[int, dict[str, Any]]Úper_layer_overridesúset[str]Úper_layer_attributesÚexplicit_per_layer_attributesN)r   r   r   Ú__annotations__r   r   r   r   r   '   s   … à2Ó2Ø"Ó"Ø#+Ô+r   r   c                ó   — t        j                  | «      }d|v rt|j                  d«      }t        |t        «      st        |t
        «      st        d«      ‚t        |«      }t        d„ |D «       «      st        d«      ‚|rt        |«      |d<   |S )NÚskipz&`skip` must be an iterable of strings.c              3  ó<   K  — | ]  }t        |t        «      –— Œ y ­w©N)Ú
isinstanceÚstr)Ú.0Úitems     r   ú	<genexpr>z-_normalize_layer_overrides.<locals>.<genexpr>7   s   è ø€ Ò:¨T”:˜d¤C×(Ñ:ùs   ‚z!`skip` must contain only strings.)
ÚcopyÚdeepcopyÚpopr    r!   r   Ú	TypeErrorÚsetÚallÚsorted)Úlayer_overridesÚ
normalizedr   s      r   Ú_normalize_layer_overridesr.   .   s   € Ü—‘˜Ó/€Jà�ÑØ�~‰~˜fÓ%ˆÜ�dœCÔ ¬
°4¼Ô(BÜÐDÓEÐEä�4‹yˆÜÑ:°TÔ:Ô:ÜÐ?Ó@Ð@áÜ!'¨£ˆJ�vÑàÐr   r
   c                óˆ   — |sy | j                   }|D �cg c]  }|dk  s||k\  sŒ|‘Œ }}|rt        d|› d|› d�«      ‚y c c}w )Nr   zG`per_layer_config` keys must be integer layer indices in the range [0, z); got ú.)Únum_hidden_layersÚ
ValueError)Úconfigr   r1   Ú	layer_idxÚinvalid_layer_indicess        r   Ú_validate_layer_indicesr6   @   su   € ÙØà×0Ñ0Ðà#6öØ¸)Àaº-È9ÐXiÓKiŠ	ðÐð ñ ÜØUÐVgÐUhð iØ(Ð)¨ð,ó
ð 	
ð ùòs   ”?¤?c                ó8  — g }t        | j                  «      D ]o  }|j                  |i «      }|j                  d| j                  dd «      «      }|j                  d| j                  dd «      «      }|€Œ\|€Œ_|j	                  |«       Œq |rt        d|› d�«      ‚y )NÚsliding_windowÚattention_chunk_sizezkThe following layers have the mutually exclusive `sliding_window` and `attention_chunk_size` both defined: z‘. To fix this, either remove a conflicting attribute from the global config,or set it to `None` in `per_layer_config` for the problematic layers.)Úranger1   ÚgetÚ)_getattr_without_heterogeneous_validationÚappendr2   )r3   r   Úproblematic_indicesr4   r,   r8   r9   s          r   Ú1_validate_sliding_window_and_attention_chunk_sizer?   O   sÊ   € ð ÐÜ˜6×3Ñ3Ó4ò 2ˆ	Ø-×1Ñ1°)¸RÓ@ˆà(×,Ñ,Ø˜f×NÑNÐO_ÐaeÓfó
ˆð  /×2Ñ2Ø"Ø×<Ñ<Ð=SÐUYÓZó 
Ðð
 Ñ%Ð*>Ñ*JØ×&Ñ& yÕ1ð2ñ ÜØyØ"Ð#ð $TðUó
ð 	
ð r   c                óˆ   — t        «       }| j                  «       D ]  }|j                  |«       Œ |j                  d«       |S )Nr   )r)   ÚvaluesÚupdateÚdiscard)r   r   r,   s      r   Ú_get_per_layer_attributesrD   i   sF   € Ü%(£UÐØ.×5Ñ5Ó7ò 5ˆØ×#Ñ# OÕ4ð5ð × Ñ  Ô(ØÐr   c                ó„  — t        |«      }t        «       }|D ]{  }t        |«      | j                  k7  r$| j	                  |«      rŒ-|j                  |«       Œ?|j                  «       D ]*  }||vsŒ| j	                  |«      s|j                  |«        Œ{ Œ} |rt        dt        |«      › d�«      ‚|D ]K  }| j	                  |«      sŒ| j                  |«      }|j                  «       D ]  }||v sŒ||   |k(  sŒ||= Œ ŒM t        |j                  «       «      D ]  \  }}|rŒ	||= Œ t        |«      }t        |||¬«      }	|	S )Nz&The following attributes are missing: zS
Please define them globally, or provide them for every layer in `per_layer_config`)r   r   r   )rD   r)   Úlenr1   Ú)_hasattr_without_heterogeneous_validationÚaddrA   r2   r+   r<   ÚlistÚitemsr   )
r3   r   r   Ú"missing_required_global_attributesÚattrr,   Úglobal_valuer4   r   Úheterogeneity_specs
             r   Ú,_modify_config_and_create_heterogeneity_specrO   r   s…  € ô %>Ð>QÓ$RÐ!ô *-«Ð&Ø-ò 	ˆÜÐ"Ó# v×'?Ñ'?Ò?Ø×CÑCÀDÕIØ2×6Ñ6°tÕ<à#6×#=Ñ#=Ó#?ò �Ø˜Ò.Ø!×KÑKÈDÔQØ:×>Ñ>¸tÔDÙñ	ð	ñ *ÜØ4´VÐ<^Ó5_Ð4`ð  auð  vó
ð 	
ð
 .ò *ˆØ×?Ñ?ÀÔEØà×GÑGÈÓMˆØ2×9Ñ9Ó;ò 	*ˆOØ�Ò&¨?¸4Ñ+@ÀLÓ+PØ# DÑ)ñ	*ð*ô '+Ð+>×+DÑ+DÓ+FÓ&Gò /Ñ"ˆ	�?ÚØ# IÑ.ð/ô 5Ð5HÓIÐÜ+Ø/Ø1Ø&CôÐð Ðr   c                óÌ   — |j                  «       D ��ci c]  \  }}t        |«      t        |«      “Œ }}}t        | |«       t	        | |«       t        | |«      | _        yc c}}w )a  Register per-layer configuration overrides on a model config.

    In a heterogeneous model, individual layers can differ from the global config
    (e.g., different ``intermediate_size``, ``num_key_value_heads``, or entire
    sub-layers skipped via the ``skip`` attribute).

    This function validates the overrides and stores a ``_HeterogeneitySpec`` on ``config._heterogeneity_spec``.
    At model-init time, ``apply_heterogeneous_modeling`` reads this spec to patch
    each layer with its resolved config.

    Args:
        config: The global model config to modify in-place.
        per_layer_config: Mapping from layer index to a dictionary
            of attribute overrides. Only layers that differ from the global
            config need to be included.
    N)rJ   Úintr.   r6   r?   rO   Ú_heterogeneity_spec)r3   Úper_layer_configr4   r,   Únormalized_per_layer_overridess        r   Ú_apply_heterogeneous_configrU   ¢   sk   € ð. +;×*@Ñ*@Ó*B÷&á&ˆI�ô 	ˆI‹Ô2°?ÓCÑCð&Ð"ñ &ô
 ˜FÐ$BÔCÜ5°fÐ>\Ô]ä!MÈfÐVtÓ!u€FÕùó&s   ”A c                óì   — t        j                   | «      }|j                  j                  dd «       |j                  dg «      |_        |j                  «       D ]  \  }}|dk(  rŒt        |||«       Œ |S )NrR   r   )r%   Ú__dict__r'   r;   r   rJ   Úsetattr)r3   r,   Úoutput_configrL   Úvalues        r   Ú_get_layer_configr[   Â   sx   € ô —I‘I˜fÓ%€MØ×Ñ×ÑÐ4°dÔ;à(×,Ñ,¨V°RÓ8€MÔà&×,Ñ,Ó.ò ,‰ˆˆeØ�6Š>ØÜ�˜t UÕ+ð,ð
 Ðr   c                  ó$   — e Zd Zdd„Zdd„Zdd„Zy)Ú_PerLayerConfigViewc                ó   — || _         y r   )Ú_config)Úselfr3   s     r   Ú__init__z_PerLayerConfigView.__init__Ô   s	   € Øˆ�r   c                ó.   — | j                   j                  S r   )r_   r1   ©r`   s    r   Ú__len__z_PerLayerConfigView.__len__×   s   € Ø�|‰|×-Ñ-Ð-r   c                ó|  — t        |t        «      r1t        |j                  t	        | «      «      Ž D �cg c]  }| |   ‘Œ	 c}S |dk  r|t	        | «      z  }|dk  s|t	        | «      k\  rt        d«      ‚| j                  j                  }t        | j                  |j                  j                  |i «      «      S c c}w )Nr   zlist index out of range)r    Úslicer:   ÚindicesrF   Ú
IndexErrorr_   rR   r[   r   r;   )r`   r4   ÚirN   s       r   Ú__getitem__z_PerLayerConfigView.__getitem__Ú   s¨   € Ü�i¤Ô'Ü%*¨I×,=Ñ,=¼cÀ$»iÓ,HÐ%IÖJ �D˜“GÒJÐJà�qŠ=Øœ˜T›Ñ"ˆIØ�qŠ=˜I¬¨T«Ò2ÜÐ6Ó7Ð7à!Ÿ\™\×=Ñ=ÐÜ Ø�L‰LØ×2Ñ2×6Ñ6°yÀ"ÓEó
ð 	
ùò Ks   ³B9N)r3   r
   ÚreturnÚNone)rk   rQ   )r4   zint | slicerk   z)PreTrainedConfig | list[PreTrainedConfig])r   r   r   ra   rd   rj   r   r   r   r]   r]   Ó   s   „ óó.ô
r   r]   c                ó  — | j                   }i }t        | j                  «      D ]c  }t        j                  |j
                  j                  |i «      «      }|j                  D ]  }||vsŒ| j                  |«      ||<   Œ |sŒ_|||<   Œe |S r   )	rR   r:   r1   r%   r&   r   r;   r   r<   )r3   rN   Úexplicit_per_layer_overridesr4   r,   rL   s         r   Ú!_get_explicit_per_layer_overridesro   ê   s¡   € Ø×3Ñ3ÐØ#%Ð ä˜6×3Ñ3Ó4ò Fˆ	ÜŸ-™-Ð(:×(NÑ(N×(RÑ(RÐS\Ð^`Ó(aÓbˆà&×DÑDò 	_ˆDØ˜?Ò*Ø(.×(XÑ(XÐY]Ó(^� Ò%ð	_ò Ø6EÐ(¨Ò3ðFð (Ð'r   c                  ó  ‡ — e Zd ZdZdˆ fd„Zedd„«       Zedd„«       Zej                  dd„«       Zedd„«       Z	edd„«       Z
e
j                  dd„«       Z
edd	„«       Zej                  dd
„«       Zdd„Zdd„Zefdˆ fd„Zdd„Zˆ xZS )ÚHeterogeneousConfigMixina_  Mixin for heterogeneous per-layer config behavior.

    This mixin owns heterogeneity-specific state and rules. ``PreTrainedConfig`` assigns the ``per_layer_config``
    property in the post-init phase and calls hook methods where heterogeneity needs to participate in the config lifecycle: attribute
    access, key iteration, and serialization.
    c           	     óø   •— t         ‰| �  d«      j                  d«      }|�K||j                  v r=t         ‰| �  d«      st	        d|› d|› d|› d�«      ‚t
        j                  d|› d	�«       t         ‰| �  |«      S )
NrW   rR   Ú'allow_global_per_layer_attribute_accessú'z‹' is a per-layer attribute and may vary across layers. Access it via the individual layer configs instead (e.g. config.per_layer_config[i].z/). To read the global config value from config.zè anyway, set `allow_global_per_layer_attribute_access` to `True` on the config. Warning: only do this if the caller can safely handle heterogeneous configs; code that assumes a homogeneous model may use the global value incorrectly.z5Reading global config value for per-layer attribute `z¬` on a heterogeneous config. Only do this if the caller can safely handle heterogeneous configs; code that assumes a homogeneous model may use the global value incorrectly.)ÚsuperÚ__getattribute__r;   r   r   ÚloggerÚwarning_once)r`   ÚkeyrN   Ú	__class__s      €r   rv   z)HeterogeneousConfigMixin.__getattribute__  s°   ø€ ô #™WÑ5°jÓA×EÑEÐF[Ó\ÐØÐ)ØÐ(×=Ñ=Ñ=Ü‘wÑ/Ð0YÔZÜ?Ø˜C˜5ð !LØLOÈ5ð Q"Ø"% ð 'TðUóð ô ×#Ñ#ØKÈCÈ5ð QBð Bôô ‰wÑ'¨Ó,Ð,r   c                ó   — t        | d«      S ©NrR   )Úhasattrrc   s    r   Úis_heterogeneousz)HeterogeneousConfigMixin.is_heterogeneous  s   € ä�tÐ2Ó3Ð3r   c                ó2   — | j                   sy t        | «      S r   )r~   r]   rc   s    r   rS   z)HeterogeneousConfigMixin.per_layer_config  s   € à×$Ò$ØÜ" 4Ó(Ð(r   c                óZ   — |€| j                   j                  dd «       y t        | |«       y r|   )rW   r'   rU   )r`   rS   s     r   rS   z)HeterogeneousConfigMixin.per_layer_config$  s+   € àÐ#Ø�M‰M×ÑÐ3°TÔ:Øä# DÐ*:Õ;r   c                óH   — | j                   sy | j                  j                  S r   )r~   rR   r   rc   s    r   r   z-HeterogeneousConfigMixin.per_layer_attributes,  s    € à×$Ò$ØØ×'Ñ'×<Ñ<Ð<r   c                ó:   — | j                   j                  dd«      S )Nrs   F©rW   r;   rc   s    r   rs   z@HeterogeneousConfigMixin.allow_global_per_layer_attribute_access2  s   € à�}‰}× Ñ Ð!JÈEÓRÐRr   c                ó"   — || j                   d<   y )Nrs   ©rW   ©r`   rZ   s     r   rs   z@HeterogeneousConfigMixin.allow_global_per_layer_attribute_access6  s   € àCHˆ�‰Ð?Ò@r   c                ó:   — | j                   j                  dd«      S )NÚ#serialize_explicit_per_layer_configFrƒ   rc   s    r   rˆ   z<HeterogeneousConfigMixin.serialize_explicit_per_layer_config:  s   € à�}‰}× Ñ Ð!FÈÓNÐNr   c                ó"   — || j                   d<   y )Nrˆ   r…   r†   s     r   rˆ   z<HeterogeneousConfigMixin.serialize_explicit_per_layer_config>  s   € à?Dˆ�‰Ð;Ò<r   c              #  óŠ   K  — | j                   r'| j                  s|D ]  }|| j                  vsŒ|–— Œ y |E d {  –—†  y 7 Œ­wr   )r~   rs   r   )r`   Úkeysry   s      r   Ú/_iter_config_keys_with_heterogeneous_adjustmentzHHeterogeneousConfigMixin._iter_config_keys_with_heterogeneous_adjustmentB  sD   è ø€ ð × Ò ¨×)UÒ)UØò �Ø˜d×7Ñ7Ò7Ø“Iñð �OŠOús   ‚,A¯A»A¼Ac                ó´  — | j                   sy | j                  rt        | «      }n| j                  j                  }|r~t        t        t        |j                  «       «      «      «      }|j                  «       D ��ci c]3  \  }}t        |«      j                  |«      t        j                  |«      “Œ5 c}}|d<   ni |d<   |j                  dd «       y c c}}w )NrS   rR   )r~   rˆ   ro   rR   r   rF   r!   Úmaxr‹   rJ   Úzfillr%   r&   r'   )r`   Údr   Ú
max_digitsr4   r,   s         r   Ú$_update_heterogeneous_to_dict_outputz=HeterogeneousConfigMixin._update_heterogeneous_to_dict_outputL  sÁ   € Ø×$Ò$Øà×3Ò3Ü"CÀDÓ"IÑà"&×":Ñ":×"NÑ"NÐáäœS¤Ð%8×%=Ñ%=Ó%?Ó!@ÓAÓBˆJð 3F×2KÑ2KÓ2M÷%á.�I˜ô �I“×$Ñ$ ZÓ0´$·-±-ÀÓ2PÑPó%ˆAÐ Ò!ð
 %'ˆAÐ Ñ!à	�‰Ð# TÕ*ùó%s   Á<8Cc                ó¨   •— |dk7  r#|t         ‰| �  d«      v rt         ‰| �  d«      |   }	 t         ‰| �  |«      S # t        $ r |t        u r‚ |cY S w xY w)NÚattribute_map)ru   rv   ÚAttributeErrorÚ	_SENTINEL)r`   ry   Údefaultrz   s      €r   r<   zBHeterogeneousConfigMixin._getattr_without_heterogeneous_validationa  sd   ø€ Ø�/Ò! c¬U©WÑ-EÀoÓ-VÑ&VÜ‘'Ñ*¨?Ó;¸CÑ@ˆCð	Ü‘7Ñ+¨CÓ0Ð0øÜò 	Øœ)Ñ#ØØŠNð	ús   «: ºAÁAc                óF   — 	 | j                  |«       y# t        $ r Y yw xY w)NFT)r<   r•   )r`   ry   s     r   rG   zBHeterogeneousConfigMixin._hasattr_without_heterogeneous_validationl  s.   € ð	Ø×:Ñ:¸3Ô?ð øô ò 	Ùð	ús   ‚ ”	 Ÿ )ry   r!   rk   r   )rk   Úbool)rk   z!Sequence[PreTrainedConfig] | None)rS   z&dict[int | str, dict[str, Any]] | Nonerk   rl   )rk   zset[str] | None)rZ   r™   rk   rl   )r‹   úIterable[str]rk   rš   )r�   údict[str, Any]rk   rl   )ry   r!   r—   r   rk   r   )ry   r!   rk   r™   )r   r   r   r   rv   Úpropertyr~   rS   Úsetterr   rs   rˆ   rŒ   r’   r–   r<   rG   Ú__classcell__)rz   s   @r   rq   rq   û   sâ   ø„ ñõ-ð. ò4ó ð4ð ò)ó ð)ð
 ×Ñò<ó ð<ð ò=ó ð=ð
 òSó ðSð -×3Ñ3òIó 4ðIð òOó ðOð )×/Ñ/òEó 0ðEóó+ð* R[ö 	÷r   rq   )r,   r›   rk   r›   )r3   r
   r   r   rk   rl   )r   r   rk   r   )r3   r
   r   r   rk   r   )r3   r
   rS   zdict[int | str, dict[str, Any]]rk   rl   )r3   r
   r,   r›   rk   r
   )r3   r
   rk   r   )!Ú
__future__r   r%   Úcollections.abcr   r   Údataclassesr   Útypingr   r   Útransformers.utilsr	   Útransformersr
   Ú
get_loggerr   rw   Úobjectr–   ÚRuntimeErrorr   r   r.   r6   r?   rD   rO   rU   r[   r]   ro   rq   r   r   r   ú<module>r¨      s  ðõ  #ã ß .Ý !ß %å &ñ Ý-ð 
ˆ×	Ñ	˜HÓ	%€á‹H€	ôX¨Lô Xð ÷,ð ,ó ð,óó$
ð
Øð
Ø3Lð
à	ó
ó4 ð-Øð-Ø3Lð-àó-ð`vØðvà5ðvð 
óvð@Øðà#ðð óô"
˜(Ð#5Ñ6ô 
ó.(÷"vò vr   