+
    "Ý³j-T  ã                  ó  € R t ^ RIHt ^ RIt^ RIt^ RIHtHt ^ RIH	t	H
t
HtHtHtHtHtHtHt ^ RIt^ RIHt ^RIHt Rt]P.                  ! ]4      tR R	 ltR
 R ltR R lt]! RR7       ! R R4      4       tR R ltR R ltR R lt]! RR7       ! R R4      4       t ]! RR7       ! R R4      4       t!R R lt"R*R R llt#]! RR7       ! R  R!4      4       t$]! RR7       ! R" R#4      4       t%R$ R% lt&R& R' lt'R( R) lt(R# )+ah  Shared-input metadata derived from a model definition's ``module_tree``.

Modules that consume the *same* activation tensor (e.g. ``q_proj``/``k_proj``/``v_proj``
after ``input_layernorm``) produce identical GPTQ Hessians (``H = X^T X`` depends only on
the input). A :class:`SharedInputPlan` groups such modules so calibration logic can collect
the Hessian once per group (the ``leader``) and share it with the ``followers``.

Grouping rules (per decoder layer, relative module paths):

* Default: every quantizable module is a singleton group. Subset digits (``:0``) describe
  quantization/execution order, not tensor identity, so they are never used to infer sharing.
* Explicit opt-in: leaves under the same immediate parent that carry the same ``:in=<tag>``
  flag share an input. Leaves with different tags (or no tag) never share, even when they sit
  in the same subset. Tags may span subsets (e.g. Qwen3.5 ``linear_attn.in_proj_qkv:0:in=x``
  and ``linear_attn.in_proj_z:1:in=x``). Tags are scoped to the parent, so ``in=x`` on
  ``self_attn.*`` and ``mlp.*`` yields two independent groups.
* MoE expert placeholders (``experts.#``) expand per expert; each expert is its own parent,
  so routed experts never share with each other.
* Non-quantized (``:!``) and capture-only (``:?``) leaves never join a group.
* A leaf that appears in several ``module_tree`` variants must carry identical metadata;
  conflicting ``:in=``/``:!``/``:?``/subset flags raise :class:`ValueError`.

Only definitions whose groups were verified against a real forward pass (see
:func:`probe_shared_inputs` and ``tests/module_tree/test_shared_input_cpu_forward.py``)
should carry ``:in=`` tags: a wrong tag silently reuses the wrong Hessian.

All structures are immutable and the derivation is a pure function of the definition plus
``model_config``/``quantize_config``; it is safe to call concurrently (GIL=0).
)ÚannotationsN)Ú	dataclassÚfield)	ÚAnyÚCallableÚDictÚIterableÚListÚMappingÚOptionalÚSequenceÚTuple)Únn)ÚEXPERT_INDEX_PLACEHOLDERzin=c               ó    € V ^8„  d   QhRRRR/# )é   ÚflagsúIterable[str]ÚreturnúOptional[str]© )Úformats   "Ú^/home/luca/screen-checking/.venv/lib/python3.14/site-packages/gptqmodel/models/shared_input.pyÚ__annotate__r   6   s   € ÷ ñ  -ð °Mñ ó    c                óà   € V  Fg  p\        V\        4      '       g   K  VP                  \        4      '       g   K8  V\	        \        4      R pV'       g   \        R\         R24      hVu # 	  R# )zEReturn the ``<tag>`` of an ``in=<tag>`` flag or ``None`` when absent.NÚ`z` flag requires a non-empty tag)Ú
isinstanceÚstrÚ
startswithÚSHARED_INPUT_FLAG_PREFIXÚlenÚ
ValueError)r   ÚflagÚtags   &  r   Úparse_shared_input_tagr%   6   s_   € ãˆÜ�dœC× Ô  T§_¡_Ô5M×%NÔ%NØ”sÔ3Ó4Ð5Ð6ˆCßÜ  1Ô%=Ð$>Ð>]Ð!^Ó_Ð_ØŠJñ ñ r   c               ó    € V ^8„  d   QhRRRR/# )r   Útokenr   r   zTuple[str, List[str]]r   )r   s   "r   r   r   A   s   € ÷ ñ �sð Ð4ñ r   c                ó  € V P                  R4      pV^ ,          P                  R4       Uu. uF  q"'       g   K  VNK  	  ppV'       d
   V^ ,          MV^ ,          pVR,           Uu. uF  qU'       g   K  VNK  	  ppWF3# u upi u upi )z```"gate_proj|w1:0:in=x"`` -> ``("gate_proj", ["0", "in=x"])`` (first alias is the runtime name).Ú:Ú|ºé   NN©Úsplit)r'   ÚpartsÚaliasÚaliasesÚnameÚpr   s   &      r   Ú_split_specr4   A   su   € à�K‰K˜Ó€EØ"'¨¥(§.¡.°Ô"5Ó?Ñ"5˜»�uˆuÑ"5€GÐ?ß ˆ7�1Ž: e¨A¥h€DØ˜bž	Ó'™	�1£Q�QˆQ™	€EÐ'Øˆ;Ðùò @ùâ's   ¬	B ºB Á'	BÁ5Bc               ó$   € V ^8„  d   QhRRRRRR/# )r   Úparentr   Úchildr   r   )r   s   "r   r   r   J   s!   € ÷ 4ñ 4�#ð 4˜cð 4 cñ 4r   c                ó8   € V'       g   V # V '       d   V  R V 2# T# )Ú.r   )r6   r7   s   &&r   Ú_joinr:   J   s"   € ßØˆß"(ˆfˆX�Q�u�gÐÐ3¨eÐ3r   T)Úfrozenc                  óZ   € ] tR t^Pt$ RtR]R&   R]R&   R]R&   R]R	&   ]R
 R l4       tRtR# )ÚLeafSpeczWPer-leaf metadata parsed straight from ``module_tree`` (template paths, pre-expansion).r   ÚtemplateÚintÚ
subset_tagr   Ú	input_tagÚboolÚquantizec               ó   € V ^8„  d   QhRR/# )r   r   z're.Pattern[str]'r   )r   s   "r   r   ÚLeafSpec.__annotate__Z   s   € ÷ añ aÐ*ñ ar   c                	ó®   € \         P                  ! R \         P                  ! V P                  4      P	                  \
        R4      ,           R,           4      # )Ú^z\d+Ú$)ÚreÚcompileÚescaper>   ÚreplaceÚ_PLACEHOLDER_RE©Úselfs   &r   ÚpatternÚLeafSpec.patternY   s7   € ä�zŠz˜#¤§	¢	¨$¯-©-Ó 8× @Ñ @ÄÐRXÓ YÕYÐ\_Õ_Ó`Ð`r   r   N)	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__Ú__annotations__ÚpropertyrP   Ú__static_attributes__r   r   r   r=   r=   P   s.   ‡ áaàƒMØƒOØÓØƒNàôaó ôar   r=   c               ó    € V ^8„  d   QhRRRR/# )r   Úmodule_treer   r   zDict[str, LeafSpec]r   )r   s   "r   r   r   ^   s   € ÷ 4ñ 4 Cð 4Ð,?ñ 4r   c                óž   aaa€ / oR V3R lloR VV3R llo\        V 4       F%  p\        R V 4       R4      pVf   K  S! RV4       K'  	  S# )zøWalk every ``module_tree`` variant and return ``{template_path: LeafSpec}``.

A template repeated across variants must resolve to an identical :class:`LeafSpec`;
otherwise a :class:`ValueError` is raised so a variant cannot silently re-tag a leaf.
c               ó$   € V ^8„  d   QhRRRRRR/# )r   r>   r   r   z	List[str]r   ÚNoner   )r   s   "r   r   Ú(collect_leaf_specs.<locals>.__annotate__f   s!   € ÷ (ñ (˜ð ( Yð (°4ñ (r   c                óP  <€ \        R  V 4       ^ 4      p\        ;QJ d    R V 4       F  '       g   K   RM	  RM! R V 4       4      '       * p\        V V\        V4      VR7      pSP	                  V 4      pVe   WT8w  d   \        RV  RV RV 24      hSP                  W4       R# )	c              3  óf   "  € T F'  qP                  4       '       g   K  \        V4      x € K)  	  R # 5i©N)Úisdigitr?   ©Ú.0Úfs   & r   Ú	<genexpr>Ú5collect_leaf_specs.<locals>.record.<locals>.<genexpr>g   s   é € Ð@©5 a·I±I·Kœ6œ3˜qŸ6˜6«5ùs   ‚1ž1c              3  ó*   "  € T F	  qR9   x € K  	  R# 5i)Ú!N)rj   Ú?r   rd   s   & r   rg   rh   h   s   é € Ð:±E¨q 
ž?³Eùó   ‚TF)r>   r@   rA   rC   Nz&conflicting module_tree metadata for `z` across variants: z vs )ÚnextÚanyr=   r%   Úgetr"   Ú
setdefault)r>   r   r@   rC   ÚnewÚoldÚspecss   &&    €r   ÚrecordÚ"collect_leaf_specs.<locals>.recordf   s¥   ø€ ÜÑ@©5Ó@À!ÓDˆ
ß“sÑ:±EÓ:—s—s’sÑ:±EÓ:Ó:Ô:ˆÜØØ!Ü,¨UÓ3Øô	
ˆð �i‰i˜Ó!ˆØŠ?˜sœzÜØ8¸¸
ÐBUÐVYÐUZÐZ^Ð_bÐ^cÐdóð ð 	×Ñ˜Ö'r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r6   r   Únoder   r   r^   r   )r   s   "r   r   r_   v   s!   € ÷ #ñ #�Sð # ð #¨ñ #r   c                ó(  <€ \        V\        \        34      '       dt   V Fk  p\        V\        4      '       g   K  \	        V4      w  r4VR 8X  g!   W8X  g   V P                  RV 24      '       d   S
! W4       KY  S
! \        W4      V4       Km  	  R# \        V\        4      '       dl   VP                  4        FU  w  rV\        V\        4      '       g   K  \	        V4      w  rxVR 8X  d   \        V \        4      p	M\        W4      p	S! W–4       KW  	  R# R# )Ú#r9   N)
r   ÚtupleÚlistr   r4   Úendswithr:   ÚdictÚitemsr   )r6   rw   r'   r2   r   ÚkeyÚvalueÚknameÚ_r7   rt   Úwalks   &&        €€r   rƒ   Ú collect_leaf_specs.<locals>.walkv   sØ   ø€ Ü�dœU¤D˜M×*Ò*Û�Ü! %¬×-Ò-ÙÜ)¨%Ó0‘�à˜3”; &¤.°F·O±OÀaÈÀvÀJ×4OÒ4OÙ˜6Ö)áœ5 Ó.°Ö6ó ô ˜œd×#Ò#Ø"Ÿj™jžl‘
�Ü! #¤s×+Ò+ÙÜ& sÓ+‘�Ø˜C”<Ü! &Ô*BÓC‘Eä! &Ó0�EÙ�UÖ"ó +ñ $r   c              3  óV   "  € T F  p\        V\        4      '       g   K  Vx € K!  	  R # 5irb   )r   r}   ©re   Úitems   & r   rg   Ú%collect_leaf_specs.<locals>.<genexpr>�   s   é € ÐK© ´J¸tÄT×4JŸš«ùs   ‚)Ÿ
)NÚ )Ú_iter_variantsrm   )r[   ÚvariantÚmappingrt   rs   rƒ   s   &  @@@r   Úcollect_leaf_specsr�   ^   sZ   ú€ ð "$€E÷(ð (÷ #ñ #ô, " +Ö.ˆÜÑK©ÓKÈTÓRˆØŠ?ÙÙˆR�Öñ	 /ð €Lr   c               ó    € V ^8„  d   QhRRRR/# )r   r[   r   r   zList[List[Any]]r   )r   s   "r   r   r   •   s   € ÷ ñ  ð ¨ñ r   c                ó  € \        V \        4      '       g   . # V '       dV   \        ;QJ d    R  V  4       F  '       d   K   RM	  RM! R  V  4       4      '       d   V  Uu. uF  p\        V4      NK  	  up# \        V 4      .# u upi )c              3  óN   "  € T F  p\        V\        \        34      x € K  	  R # 5irb   )r   r{   rz   r†   s   & r   rg   Ú!_iter_variants.<locals>.<genexpr>˜   s   é € ÐSÁ{¸tœ: d¬T´5¨M×:Ð:Ã{ùs   ‚#%FT)r   r{   Úall)r[   r‡   s   & r   rŠ   rŠ   •   sc   € Ü�k¤4×(Ò(Øˆ	ß—s“sÑSÁ{ÓS—s—s’sÑSÁ{ÓS×SÒSÙ'2Ó3¡{˜t”�T–
¡{Ñ3Ð3Ü�ÓÐÐùò 4s   ÁBc               ó$   € V ^8„  d   QhRRRRRR/# )r   rs   zMapping[str, LeafSpec]Úmodule_namer   r   zOptional[LeafSpec]r   )r   s   "r   r   r   �   s#   € ÷ ñ Ð3ð À#ð ÐJ\ñ r   c                óÚ   € V P                  V4      pVe   V# V P                  4        F?  p\        VP                  9   g   K  VP                  P                  V4      '       g   K=  Vu # 	  R# )zIMatch a concrete (expert-expanded) module path back to its template spec.N)ro   Úvaluesr   r>   rP   Úmatch)rs   r”   ÚspecÚ	candidates   &&  r   Úresolve_leaf_specrš   �   s[   € à�9‰9�[Ó!€DØÒØˆØ—\‘\–^ˆ	Ü# y×'9Ñ'9Ö9¸i×>OÑ>O×>UÑ>UÐVa×>bÔ>bØÒñ $ñ r   c                  óî   € ] tR t^¨t$ RtR]R&   R]R&   R]R&   R]R&   R	tR
]R&   ]R R l4       t]R R l4       t	]R R l4       t
]R R l4       tR R ltR R lt]R R l4       t]R R l4       tRtR# )ÚSharedInputGroupzYA set of quantizable modules (relative to one decoder layer) that consume the same input.r   r   r6   úTuple[str, ...]ÚmoduleszTuple[int, ...]Úsubset_indicesFrB   Úexplicitc               ó   € V ^8„  d   QhRR/# ©r   r   r   r   )r   s   "r   r   ÚSharedInputGroup.__annotate__³   s   € ÷ ñ ˜ñ r   c                	ó(   € V P                   ^ ,          # )é    ©rž   rN   s   &r   ÚleaderÚSharedInputGroup.leader²   s   € à�|‰|˜A�Ðr   c               ó   € V ^8„  d   QhRR/# ©r   r   r�   r   )r   s   "r   r   r£   ·   s   € ÷  ñ  ˜?ñ  r   c                	ó(   € V P                   R ,          # )r+   r¦   rN   s   &r   Ú	followersÚSharedInputGroup.followers¶   s   € à�|‰|˜BÕÐr   c               ó   € V ^8„  d   QhRR/# ©r   r   rB   r   )r   s   "r   r   r£   »   s   € ÷ %ñ %˜4ñ %r   c                	ó2   € \        V P                  4      ^8„  # ©r,   )r!   rž   rN   s   &r   Ú	is_sharedÚSharedInputGroup.is_sharedº   s   € ä�4—<‘<Ó  1Ñ$Ð$r   c               ó   € V ^8„  d   QhRR/# r¯   r   )r   s   "r   r   r£   ¿   s   € ÷ 1ñ 1˜tñ 1r   c                	óD   € \        \        V P                  4      4      ^8„  # r±   )r!   ÚsetrŸ   rN   s   &r   Úspans_subsetsÚSharedInputGroup.spans_subsets¾   s   € ä”3�t×*Ñ*Ó+Ó,¨qÑ0Ð0r   c               ó    € V ^8„  d   QhRRRR/# )r   Úmoduler   r   r?   r   )r   s   "r   r   r£   Â   s   € ÷ ?ñ ? cð ?¨cñ ?r   c                	óZ   € V P                   V P                  P                  V4      ,          # rb   )rŸ   rž   Úindex©rO   rº   s   &&r   Úsubset_index_ofÚ SharedInputGroup.subset_index_ofÂ   s"   € Ø×"Ñ" 4§<¡<×#5Ñ#5°fÓ#=Õ>Ð>r   c               ó    € V ^8„  d   QhRRRR/# )r   Úsubset_indexr?   r   r�   r   )r   s   "r   r   r£   Å   s   € ÷ `ñ `¨cð `°oñ `r   c                	óà   a€ \         ;QJ d5    . V3R  l\        V P                  V P                  4       4       F  NK  	  5# ! V3R  l\        V P                  V P                  4       4       4      # )c              3  ó>   <"  € T F  w  rVS8X  g   K  Vx € K  	  R # 5irb   r   )re   ÚmÚsrÁ   s   &  €r   rg   Ú5SharedInputGroup.members_in_subset.<locals>.<genexpr>Æ   s   øé € Ð_Ñ#I™4˜1ÈQÐR^ÑM^—Q’QÓ#Iùs   ƒ“
)rz   Úziprž   rŸ   )rO   rÁ   s   &fr   Úmembers_in_subsetÚ"SharedInputGroup.members_in_subsetÅ   sG   ø€ ßŒuÔ_¤3 t§|¡|°T×5HÑ5HÔ#IÓ_�uÐ_ˆuÔ_¤3 t§|¡|°T×5HÑ5HÔ#IÓ_Ó_Ð_r   c               ó   € V ^8„  d   QhRR/# rª   r   )r   s   "r   r   r£   É   s   € ÷  ñ   ñ  r   c                óÖ   € \        4       p. p\        V P                  V P                  4       F/  w  r4WA9   d   VP	                  V4       K  VP                  V4       K1  	  \        V4      # )aj  Members whose Hessian capture is skipped at runtime.

The looper captures one subset block at a time and elects the first member of each
block as that block's leader, so only members that share a subset block with an
earlier member of the same group are deduplicated. A group spread over several
subsets yields one leader per subset and no cross-subset sharing.
)r¶   rÇ   rž   rŸ   ÚappendÚaddrz   )rO   Ú
first_seenr¬   rº   rÁ   s   &    r   Údedup_followersÚ SharedInputGroup.dedup_followersÈ   s\   € ô  #›uˆ
Ø!ˆ	Ü$'¨¯©°d×6IÑ6IÖ$JÑ ˆFØÔ)Ø× Ñ  Ö(à—‘˜|Ö,ñ	 %Kô
 �YÓÐr   c               ó   € V ^8„  d   QhRR/# r¯   r   )r   s   "r   r   r£   Û   s   € ÷ *ñ * 4ñ *r   c                	ó,   € \        V P                  4      # rb   )rB   rÏ   rN   s   &r   Údedups_at_runtimeÚ"SharedInputGroup.dedups_at_runtimeÚ   s   € ä�D×(Ñ(Ó)Ð)r   r   N)rR   rS   rT   rU   rV   rW   r    rX   r§   r¬   r²   r·   r¾   rÈ   rÏ   rÓ   rY   r   r   r   rœ   rœ   ¨   s¦   ‡ ácà	ƒHØƒKØÓØ#Ó#Ø€HˆdÓàôó ðð ô ó ð ð ô%ó ð%ð ô1ó ð1õ?õ`ð ô ó ð ð" ô*ó ô*r   rœ   c                  ó
  € ] tR t^ßt$ RtR]R&   ]! ]RRR7      tR]R&   R R	 lt	]
R
 R l4       t]
R R l4       t]
R R l4       t]
R R l4       tR R ltR R ltR R ltR R ltR R ltR R ltR R ltR  R! ltR"tR## )$ÚSharedInputPlanzOOrdered collection of :class:`SharedInputGroup` for one decoder layer template.úTuple[SharedInputGroup, ...]ÚgroupsF)Údefault_factoryÚreprÚcomparezDict[str, SharedInputGroup]Ú
_by_modulec               ó   € V ^8„  d   QhRR/# )r   r   r^   r   )r   s   "r   r   ÚSharedInputPlan.__annotate__æ   s   € ÷ :ñ :˜tñ :r   c                	ó¶   € / pV P                    F/  pVP                   F  pW19   d   \        R V R24      hW!V&   K  	  K1  	  \        P	                  V RV4       R# )zmodule `z)` appears in multiple shared-input groupsrÜ   N)rØ   rž   r"   ÚobjectÚ__setattr__)rO   Ú	by_moduleÚgrouprº   s   &   r   Ú__post_init__ÚSharedInputPlan.__post_init__æ   sZ   € Ø13ˆ	Ø—[”[ˆEØŸ-œ-�ØÔ&Ü$ x°¨xÐ7`Ð%aÓbÐbØ$)˜&Ó!ó (ñ !ô
 	×Ñ˜4 ¨yÖ9r   c               ó   € V ^8„  d   QhRR/# rª   r   )r   s   "r   r   rÞ   ð   s   € ÷ -ñ -˜ñ -r   c                	óH   € \        V P                  P                  4       4      # rb   )rz   rÜ   ÚkeysrN   s   &r   rž   ÚSharedInputPlan.modulesï   s   € ä�T—_‘_×)Ñ)Ó+Ó,Ð,r   c               ó   € V ^8„  d   QhRR/# )r   r   r×   r   )r   s   "r   r   rÞ   ô   s   € ÷ <ñ <Ð;ñ <r   c                	ó‚   € \         ;QJ d    . R  V P                   4       F  NK  	  5# ! R  V P                   4       4      # )c              3  óL   "  € T F  qP                   '       g   K  Vx € K  	  R # 5irb   )r²   ©re   Úgs   & r   rg   Ú0SharedInputPlan.shared_groups.<locals>.<genexpr>õ   s   é € Ð;¡˜1¯{­{—Q’Q£ùs   ‚$š
$©rz   rØ   rN   s   &r   Úshared_groupsÚSharedInputPlan.shared_groupsó   s,   € çŒuÑ; §¢Ó;�uÐ;ˆuÑ; §¢Ó;Ó;Ð;r   c               ó   € V ^8„  d   QhRR/# rª   r   )r   s   "r   r   rÞ   ø   s   € ÷ 4ñ 4˜ñ 4r   c                	ó‚   € \         ;QJ d    . R  V P                   4       F  NK  	  5# ! R  V P                   4       4      # )c              3  ó8   "  € T F  qP                   x € K  	  R # 5irb   )r§   rí   s   & r   rg   Ú*SharedInputPlan.leaders.<locals>.<genexpr>ù   s   é € Ð3¡{ !—X–X£{ùs   ‚rð   rN   s   &r   ÚleadersÚSharedInputPlan.leaders÷   s,   € çŒuÑ3 t§{¢{Ó3�uÐ3ˆuÑ3 t§{¢{Ó3Ó3Ð3r   c               ó   € V ^8„  d   QhRR/# )r   r   r?   r   )r   s   "r   r   rÞ   ü   s   € ÷ @ñ @˜Sñ @r   c                ó:   € \        R V P                   4       4      # )zìNumber of Hessian collections skipped at runtime (same-subset followers only).

Members of a group that sit in different subset blocks each capture their own
Hessian (see :attr:`SharedInputGroup.dedup_followers`), so they do not count.
c              3  óL   "  € T F  p\        VP                  4      x € K  	  R # 5irb   )r!   rÏ   rí   s   & r   rg   Ú.SharedInputPlan.dedup_count.<locals>.<genexpr>  s   é € Ð?±;¨a”3�q×(Ñ(×)Ð)³;ùs   ‚"$)ÚsumrØ   rN   s   &r   Údedup_countÚSharedInputPlan.dedup_countû   s   € ô Ñ?°4·;²;Ó?Ó?Ð?r   c               ó    € V ^8„  d   QhRRRR/# )r   rº   r   r   zOptional[SharedInputGroup]r   )r   s   "r   r   rÞ     s   € ÷ +ñ + ð +Ð(Bñ +r   c                	ó8   € V P                   P                  V4      # rb   ©rÜ   ro   r½   s   &&r   Ú	group_forÚSharedInputPlan.group_for  s   € Ø�‰×"Ñ" 6Ó*Ð*r   c               ó    € V ^8„  d   QhRRRR/# )r   rº   r   r   r   )r   s   "r   r   rÞ     s   € ÷ 9ñ 9 ð 9¨ñ 9r   c                	ó\   € V P                   P                  V4      pVf   V# VP                  # rb   )rÜ   ro   r§   ©rO   rº   rã   s   && r   Ú
leader_forÚSharedInputPlan.leader_for  s)   € Ø—‘×#Ñ# FÓ+ˆØšˆvÐ8¨E¯L©LÐ8r   c               ó    € V ^8„  d   QhRRRR/# )r   rº   r   r   rB   r   )r   s   "r   r   rÞ     s   € ÷ 4ñ 4 #ð 4¨$ñ 4r   c                	óh   € V P                   P                  V4      pVR J;'       d    VP                  # rb   )rÜ   ro   r    r  s   && r   Úis_explicitÚSharedInputPlan.is_explicit  s-   € Ø—‘×#Ñ# FÓ+ˆØ˜DÐ ×3Ð3 U§^¡^Ð3r   c               ó    € V ^8„  d   QhRRRR/# )r   rº   r   r   r�   r   )r   s   "r   r   rÞ     s   € ÷ ñ  3ð ¨?ñ r   c                	ó~   € V P                   P                  V4      pVe   VP                  V8w  d   R# VP                  # )Nr   )rÜ   ro   r§   r¬   r  s   && r   Úfollowers_ofÚSharedInputPlan.followers_of  s5   € Ø—‘×#Ñ# FÓ+ˆØŠ=˜EŸL™L¨FÔ2ØˆIØ�‰Ðr   c               ó$   € V ^8„  d   QhRRRRRR/# )r   Úar   Úbr   rB   r   )r   s   "r   r   rÞ     s!   € ÷ ?ñ ?˜cð ? cð ?¨dñ ?r   c                	óˆ   € V P                   P                  V4      pVR J;'       d    W0P                   P                  V4      J # rb   r  )rO   r  r  Úgas   &&& r   Úshares_inputÚSharedInputPlan.shares_input  s:   € Ø�_‰_× Ñ  Ó#ˆØ˜ˆ~×>Ð> "¯©×(;Ñ(;¸AÓ(>Ð">Ð>r   c               ó    € V ^8„  d   QhRRRR/# )r   rÁ   r?   r   ú'SharedInputPlan'r   )r   s   "r   r   rÞ     s   € ÷ 5ñ 5 sð 5Ð/@ñ 5r   c                ó  € . pV P                    FÚ  p\        VP                  VP                  4       UUu. uF  w  rEWQ8X  g   K  WE3NK  	  pppV'       g   KI  TP	                  \        VP                  VP                  \        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      \        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      VP                  R7      4       KÜ  	  \        \        V4      R7      # u uppi )zBRestrict every group to the modules that live in ``subset_index``.c              3  ó*   "  € T F	  w  rVx € K  	  R # 5irb   r   ©re   rÄ   r‚   s   &  r   rg   Ú-SharedInputPlan.for_subset.<locals>.<genexpr>#  ó   é € Ð%9±D©D¨A¥a³Dùrl   c              3  ó*   "  € T F	  w  rVx € K  	  R # 5irb   r   ©re   r‚   rÅ   s   &  r   rg   r  $  ó   é € Ð,@¹4±4°1­Q»4ùrl   ©r   r6   rž   rŸ   r    ©rØ   )rØ   rÇ   rž   rŸ   rÌ   rœ   r   r6   rz   r    rÖ   )rO   rÁ   rØ   rî   rÄ   rÅ   Úkeeps   &&     r   Ú
for_subsetÚSharedInputPlan.for_subset  sÄ   € à)+ˆØ—”ˆAÜ'*¨1¯9©9°a×6FÑ6FÔ'GÔ]Ñ'G™t˜qÈ1ÑK\”F�Q“FÑ'GˆDÑ]ß‰tØ—‘Ü$ØŸE™EØ Ÿx™xß %¤Ñ%9±DÓ%9§¡Ñ%9±DÓ%9Ó 9ß',¤uÑ,@¹4Ó,@§u¡uÑ,@¹4Ó,@Ó'@Ø!"§¡ôöñ ô ¤e¨F£mÔ4Ð4ùó ^s   µ
DÁDc               ó    € V ^8„  d   QhRRRR/# )r   Úmodule_namesr   r   r  r   )r   s   "r   r   rÞ   *  s   € ÷ 5ñ 5¨=ð 5Ð=Nñ 5r   c                ó&  € \        V4      p. pV P                   FÚ  p\        VP                  VP                  4       UUu. uF  w  rVWR9   g   K  WV3NK  	  pppV'       g   KI  TP                  \        VP                  VP                  \        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      \        ;QJ d    . R V 4       F  NK  	  5M! R V 4       4      VP                  R7      4       KÜ  	  \        \        V4      R7      # u uppi )zVKeep only modules present in ``module_names`` (e.g. those that exist in a live layer).c              3  ó*   "  € T F	  w  rVx € K  	  R # 5irb   r   r  s   &  r   rg   Ú1SharedInputPlan.filter_modules.<locals>.<genexpr>5  r  rl   c              3  ó*   "  € T F	  w  rVx € K  	  R # 5irb   r   r!  s   &  r   rg   r,  6  r"  rl   r#  r$  )r¶   rØ   rÇ   rž   rŸ   rÌ   rœ   r   r6   rz   r    rÖ   )rO   r)  ÚallowedrØ   rî   rÄ   rÅ   r%  s   &&      r   Úfilter_modulesÚSharedInputPlan.filter_modules*  sÍ   € ä�lÓ#ˆØ)+ˆØ—”ˆAÜ'*¨1¯9©9°a×6FÑ6FÔ'GÔXÑ'G™t˜qÈ1É<”F�Q“FÑ'GˆDÑXß‰tØ—‘Ü$ØŸE™EØ Ÿx™xß %¤Ñ%9±DÓ%9§¡Ñ%9±DÓ%9Ó 9ß',¤uÑ,@¹4Ó,@§u¡uÑ,@¹4Ó,@Ó'@Ø!"§¡ôöñ ô ¤e¨F£mÔ4Ð4ùó Ys   Á 
DÁDc               ó    € V ^8„  d   QhRRRR/# )r   Úprefixr   r   r  r   )r   s   "r   r   rÞ   <  s   € ÷ 
ñ 
 #ð 
Ð*;ñ 
r   c                ó  a€ S'       g   V # SP                  R4      '       g
   SR,           o\        \        ;QJ d&    . V3R lV P                   4       F  NK  	  5R7      # ! V3R lV P                   4       4      R7      # )zIReturn a plan whose module names are prefixed (e.g. ``model.layers.3.``).r9   c           	   3  ó~  <"  € T F²  p\        SVP                  ,           VP                  '       d   SVP                  ,           MSP                  R 4      \        ;QJ d!    . V3R lVP
                   4       F  NK  	  5M! V3R lVP
                   4       4      VP                  VP                  R7      x € K´  	  R# 5i)r9   c              3  ó6   <"  € T F  pSV,           x € K  	  R # 5irb   r   )re   rÄ   r2  s   & €r   rg   Ú8SharedInputPlan.with_prefix.<locals>.<genexpr>.<genexpr>G  s   øé € Ð!@±i° &¨1§*¢*³iùs   ƒr#  N)rœ   r   r6   Úrstriprz   rž   rŸ   r    )re   rî   r2  s   & €r   rg   Ú.SharedInputPlan.with_prefix.<locals>.<genexpr>C  s„   øé € ð 	ñ %�Aô !Ø §¡�Ø01··°˜6 A§H¡HÖ,¸f¿m¹mÈCÓ>Pß!œEÔ!@°a·i²iÓ!@ŸE™EÔ!@°a·i²iÓ!@Ó@Ø#$×#3Ñ#3ØŸZ™Z÷ñ ó %ùs   ƒAB=ÁAB=r$  )r|   rÖ   rz   rØ   )rO   r2  s   &fr   Úwith_prefixÚSharedInputPlan.with_prefix<  so   ø€ çØˆKØ�‰˜s×#Ò#Ø˜c•\ˆFÜß”5ô 	ð Ÿšó	—5ô
ð 	
Øô 	ð Ÿšó	ó 	ô
ð 	
r   r   N)rR   rS   rT   rU   rV   rW   r   r}   rÜ   rä   rX   rž   rñ   r÷   rþ   r  r  r  r  r  r&  r/  r9  rY   r   r   r   rÖ   rÖ   ß   s¤   ‡ áYà(Ó(Ù.3ÀDÈuÐ^cÔ.d€JÐ+Ódõ:ð ô-ó ð-ð ô<ó ð<ð ô4ó ð4ð ô@ó ð@õ+õ9õ4õõ?õ5õ"5÷$
ñ 
r   rÖ   c               ó    € V ^8„  d   QhRRRR/# )r   r2   r   r   r   )r   s   "r   r   r   P  s   € ÷ !ñ !�sð !˜sñ !r   c                ó4   € V P                  R ^4      ^ ,          # )r)   r-   )r2   s   &r   Ú_strip_flagsr=  P  s   € Ø�:‰:�c˜1Ó˜aÕ Ð r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   r[   r   Úlayer_moduleszSequence[Sequence[str]]Úexplicit_tagsrB   r   rÖ   r   )r   s   "r   r   r   T  s0   € ÷ <*ñ <*Øð<*à*ð<*ð ð<*ð ñ	<*r   c                óÐ  aa€ \        V 4      p. p/ o/ o\        4       p\        V4       Fû  w  rgV Fð  pRV9   g   RV9   d   K  \        V4      p	W•9   d   K&  VP	                  V	4       \        W94      p
V
e   V
P                  '       g   KZ  RV	9   d   V	P                  R^4      ^ ,          MRpV'       d-   V
e)   V
P                  e   V R\         V
P                   2pRpMT	pRpVS9  d   VP                  V4       . SV&   W½3SV&   SV,          P                  W–34       Kò  	  Ký  	  \        ;QJ d    . VV3R lV 4       F  NK  	  5M! VV3R lV 4       4      p\        VR	7      # )
ac  Derive the shared-input plan for expanded ``layer_modules`` (subset blocks).

``layer_modules`` must already be expert-expanded and filtered the same way the
looper sees them (``BaseQModel.simple_layer_modules``). Entries flagged ``:!``/``:?``
are ignored. Modules without an ``:in=<tag>`` become singleton groups keyed by their
own path; tagged modules group under ``<parent>:in=<tag>``.

``explicit_tags=False`` ignores every ``:in=`` tag and yields singletons only. Model
definitions use this for model types whose tags were not verified by a real forward
(``BaseQModel.shared_input_verified_model_types``).
z:!z:?r9   r‰   r)   TFc              3  ó\  <"  € T F¡  p\        TSV,          ^ ,          \        ;QJ d    . R SV,           4       F  NK  	  5M! R SV,           4       4      \        ;QJ d    . R SV,           4       F  NK  	  5M! R SV,           4       4      SV,          ^,          R7      x € K£  	  R# 5i)r¥   c              3  ó*   "  € T F	  w  rVx € K  	  R # 5irb   r   r  s   &  r   rg   Ú4build_shared_input_plan.<locals>.<genexpr>.<genexpr>Š  s   é € Ð5©¡ �!«ùrl   c              3  ó*   "  € T F	  w  rVx € K  	  R # 5irb   r   r!  s   &  r   rg   rD  ‹  s   é € Ð <©|¡t q¥«|ùrl   r#  N)rœ   rz   )re   r   ÚmembersÚmetas   & €€r   rg   Ú*build_shared_input_plan.<locals>.<genexpr>†  s‡   øé € ð 	ñ ˆCô 	ØØ˜•9˜Q•<ß”EÑ5¨°®Ó5—E‘EÑ5¨°®Ó5Ó5ß œ5Ñ <¨w°s®|Ó <Ÿ5™5Ñ <¨w°s®|Ó <Ó<Ø˜#•Y˜q•\÷	
ñ 	
ó ùs   ƒAB,Á!AB,r$  )r�   r¶   Ú	enumerater=  rÍ   rš   rC   ÚrsplitrA   r    rÌ   rz   rÖ   )r[   r?  r@  rs   ÚorderÚseen_modulesrÁ   ÚblockÚrawr2   r˜   r6   r   r    rØ   rF  rG  s   &&&            @@r   Úbuild_shared_input_planrO  T  s`  ù€ ô  ˜{Ó+€Eà€EØ02€GØ(*€DÜ ›U€Lä(¨Ö7ÑˆÛˆCØ�sŒ{˜d cœkÙÜ Ó$ˆDØÔ#ÙØ×Ñ˜TÔ"ä$ UÓ1ˆDØÒ¨¯¯¨Ùà/2°d¬{�T—[‘[  aÓ(¨Ö+ÀˆFß Ò!1°d·n±nÒ6PØ˜ Ô":Ð!;¸D¿N¹NÐ;KÐL�Ø‘à�Ø �à˜'Ô!Ø—‘˜SÔ!Ø!�˜‘Ø#Ð.��S‘	Ø�C�L×Ñ Ð 4Ö5ó1 ñ  8÷6 ŒUõ 	ñ ó	�U‰Uõ 	ñ ó	ó 	€Fô  &Ô)Ð)r   c                  ó@   € ] tR tRt$ R]R&   R]R&   R]R&   R]R&   RtR# )	ÚSharedInputMismatchi˜  r   Ú	group_keyr§   rº   Úreasonr   N)rR   rS   rT   rU   rW   rY   r   r   r   rQ  rQ  ˜  s   ‡ àƒNØƒKØƒKØ‡Kr   rQ  c                  ó¦   € ] tR tRt$ RtR]R&   R]R&   R]R&   R]R	&   R]R
&   R]R&   ]R R l4       t]R R l4       t]R R l4       t	R R lt
RtR# )ÚSharedInputProbeReporti   z<Outcome of :func:`probe_shared_inputs` for one forward pass.r�   ÚverifiedzTuple[SharedInputMismatch, ...]Ú
mismatchesÚ
unverifiedzTuple[Tuple[str, str], ...]Ú
undeclaredÚmissing_moduleszDict[str, int]Úcall_countsc               ó   € V ^8„  d   QhRR/# r¯   r   )r   s   "r   r   Ú#SharedInputProbeReport.__annotate__¬  s   € ÷ 8ñ 8˜Dñ 8r   c                óT   € \        V P                  ;'       g    V P                  4      # )zZA declared group received different inputs, or undeclared modules received identical ones.)rB   rW  rY  rN   s   &r   Ú
has_errorsÚ!SharedInputProbeReport.has_errors«  s   € ô �D—O‘O×6Ð6 t§¡Ó7Ð7r   c               ó   € V ^8„  d   QhRR/# r¯   r   )r   s   "r   r   r]  ±  s   € ÷ Xñ X ñ Xr   c                óˆ   € V P                   '       * ;'       d+    V P                  '       * ;'       d    V P                  '       * # )zJNo errors *and* every planned module exists and every group was exercised.)r_  rZ  rX  rN   s   &r   Úfully_verifiedÚ%SharedInputProbeReport.fully_verified°  s1   € ð —?‘?Ô"×WÐW¨4×+?Ñ+?Ô'?×WÐWÈÏÉÔDWÐWr   c               ó   € V ^8„  d   QhRR/# r¯   r   )r   s   "r   r   r]  ¶  s   € ÷ #ñ #�Dñ #r   c                ó   € V P                   # )z‰Strict gate: alias of :attr:`fully_verified`.

Use :attr:`has_errors` when unexercised groups are expected (e.g. un-routed MoE experts).
)rc  rN   s   &r   ÚokÚSharedInputProbeReport.okµ  s   € ð ×"Ñ"Ð"r   c               ó   € V ^8„  d   QhRR/# r¢   r   )r   s   "r   r   r]  ½  s   € ÷ 
 ñ 
 ˜#ñ 
 r   c                	ó¼  € R \        V P                  4       2R\        V P                  4       2R\        V P                  4       2.pV P                   FI  pVP                  RVP                   RVP                   RVP                   RVP                   R2	4       KK  	  V P                   F  w  r4VP                  RV R	V 24       K  	  R
P                  V4      # )z	verified=zunverified=zmissing_modules=z	MISMATCH z: ú != z (Ú)zUNDECLARED shared input: z ~ Ú
)r{   rV  rX  rZ  rW  rÌ   rR  rº   r§   rS  rY  Újoin)rO   ÚlinesrÄ   r  r  s   &    r   ÚdescribeÚSharedInputProbeReport.describe½  sÈ   € àœ˜TŸ]™]Ó+Ð,Ð-Øœ$˜tŸ™Ó/Ð0Ð1Øœt D×$8Ñ$8Ó9Ð:Ð;ð
ˆð
 —”ˆAØ�L‰L˜9 Q§[¡[ M°°A·H±H°:¸TÀ!Ç(Á(ÀÈ2ÈaÏhÉhÈZÐWXÐYÖZñ !à—O”O‰DˆAØ�L‰LÐ4°Q°C°s¸1¸#Ð>Ö?ñ $à�y‰y˜ÓÐr   r   N)rR   rS   rT   rU   rV   rW   rX   r_  rc  rg  rp  rY   r   r   r   rU  rU     so   ‡ áFàÓØ/Ó/ØÓØ+Ó+Ø$Ó$ØÓàô8ó ð8ð ôXó ðXð ô#ó ð#÷
 ñ 
 r   rU  c               ó$   € V ^8„  d   QhRRRRRR/# )r   ÚargsúTuple[Any, ...]ÚkwargsúDict[str, Any]r   zOptional[torch.Tensor]r   )r   s   "r   r   r   Ê  s"   € ÷ ñ ˜ð °ð ÐDZñ r   c                óÆ   € V  F#  p\         P                  ! V4      '       g   K!  Vu # 	  VP                  4        F#  p\         P                  ! V4      '       g   K!  Vu # 	  R # rb   )ÚtorchÚ	is_tensorr–   )rs  ru  r€   s   && r   Ú_first_tensorrz  Ê  sK   € ÛˆÜ�?Š?˜5×!Ô!ØŠLñ ð —‘–ˆÜ�?Š?˜5×!Ô!ØŠLñ !ñ r   c               ó$   € V ^8„  d   QhRRRRRR/# )r   r  zList[torch.Tensor]r  r   r   r   )r   s   "r   r   r   Ô  s#   € ÷ 
ñ 
Ð(ð 
Ð-?ð 
ÀMñ 
r   c           	     ó   € \        V 4      \        V4      8w  d   R \        V4       R\        V 4       2# \        \        W4      4       EF  w  pw  r4VP                  VP                  8w  d4   RV R\	        VP                  4       R\	        VP                  4       2u # VP
                  VP
                  8w  d"   RV RVP
                   RVP
                   2u # \        P                  ! W44      '       d   K±  RV R\        VP                  4       VP                  4       ,
          P                  4       P                  4       4       R2u # 	  R# )zcall count rk  zcall z: shape z: dtype z: values differ (max abs diff rl  N)r!   rI  rÇ   Úshaperz   Údtyperx  ÚequalÚfloatÚabsÚmax)r  r  ÚidxÚxÚys   &&   r   Ú_same_capturesr†  Ô  s
  € Ü
ˆ1ƒv”�Q“ÔØœS ›V˜H D¬¨Q«¨Ð1Ð1Ü ¤ Q£×+‰ˆ‰VˆaØ�7‰7�a—g‘gÔØ˜3˜%˜x¬¨a¯g©g«Ð'7°t¼EÀ!Ç'Á'»NÐ;KÐLÒLØ�7‰7�a—g‘gÔØ˜3˜%˜x¨¯© y°°Q·W±W°IÐ>Ò>Ü�{Š{˜1× Ô Ø˜3˜%Ð=¼eÀQÇWÁWÃYÐQR×QXÑQXÓQZÕEZ×D_ÑD_ÓDa×DeÑDeÓDgÓ>hÐ=iÐijÐkÒkñ ,ñ r   c               ó(   € V ^8„  d   QhRRRRRRRR/# )	r   Úlayerú	nn.ModuleÚplanrÖ   ÚforwardzCallable[[], Any]r   rU  r   )r   s   "r   r   r   á  s6   € ÷ \ñ \Øð\à
ð\ð ð\ð ñ	\r   c                óü  aa € \        V P                  4       4      p\        P                  ! 4       o VP                   Uu/ uF  qD. bK  	  upo. p. pR VV 3R llpVP                   FS  pVP                  V4      p	V	f   VP                  V4       K+  VP                  V	P                  V! V4      RR7      4       KU  	   \        P                  ! 4       ;_uu_ 4        V! 4        RRR4       V F  p
V
P                  4        K  	  . p. p. pVP                   EF  pVP                   Uu. uF  qDV9  g   K  VNK  	  ppV'       g   K1  V Uu. uF  pSV,          '       g   K  VNK  	  ppV'       g   VP                  VP                  4       Kx  V^ ,          pRpV FU  p	V	V8X  d   K  \        SV,          SV	,          4      pVf   K,  RpVP                  \        VP                  VV	V4      4       KW  	  V'       g   Kè  VP                  VP                  4       EK  	  . p/ pVP                   Fr  p\        VP                  VP                   4       FK  w  p	pW–9   g   SV	,          '       g   K  VP#                  VP$                  V3. 4      P                  Wž34       KM  	  Kt  	  VP'                  4        F“  p\)        \+        V4      4       Fx  p\)        V^,           \+        V4      4       FU  pVV,          VV,          uw  ppw  ppVVJ d   K$  \        SV,          SV,          4      e   KB  VP                  VV34       KW  	  Kz  	  K•  	  \-        \/        V4      \/        V4      \/        V4      \/        V4      \/        V4      SP1                  4        UUu/ uF  w  ppV\+        V4      bK  	  uppR7      # u upi   + '       g   i     ELá; i  T F  p
T
P                  4        K  	  i ; iu upi u upi u uppi )aÓ  Run ``forward`` with pre-hooks on every planned module and check the plan holds.

* ``mismatches``: modules in a group whose captured inputs differ from the leader.
* ``unverified``: groups whose modules were never invoked (e.g. un-routed experts).
* ``undeclared``: same-subset, same-parent module pairs in *different* groups whose
  inputs were byte-identical (a missed ``:in=`` opt-in or a wrong tag).
* ``missing_modules``: planned modules absent from ``layer``.
c               ó   € V ^8„  d   QhRR/# )r   r2   r   r   )r   s   "r   r   Ú)probe_shared_inputs.<locals>.__annotate__ô  s   € ÷ 
ñ 
˜ñ 
r   c                ó    <a € R  VVV 3R llpV# )c               ó$   € V ^8„  d   QhRRRRRR/# )r   rº   r‰  rs  rt  ru  rv  r   )r   s   "r   r   Ú<probe_shared_inputs.<locals>.make_hook.<locals>.__annotate__õ  s!   € ÷ 	ñ 	˜ð 	¨/ð 	À>ñ 	r   c                óê   <€ \        W4      pVf   R # VP                  4       P                  RRR7      pS;_uu_ 4        SS,          P                  V4       R R R 4       R #   + '       g   i     R # ; i)NÚcpuT)Úcopy)rz  ÚdetachÚtorÌ   )rº   rs  ru  ÚtensorÚsnapshotÚcapturesÚlockr2   s   &&&  €€€r   ÚhookÚ4probe_shared_inputs.<locals>.make_hook.<locals>.hookõ  sZ   ø€ Ü" 4Ó0ˆFØŠ~ÙØ—}‘}“×)Ñ)¨%°dÐ)Ó;ˆHß’Ø˜•×%Ñ% hÔ/÷ á÷ –áús   ¾A!Á!A2	r   )r2   r›  r™  rš  s   f €€r   Ú	make_hookÚ&probe_shared_inputs.<locals>.make_hookô  s   ù€ ÷	ò 	ð ˆr   NT)Úwith_kwargsF)rV  rW  rX  rY  rZ  r[  )r}   Únamed_modulesÚ	threadingÚLockrž   ro   rÌ   Úregister_forward_pre_hookrx  Úinference_modeÚremoverØ   r   r†  rQ  rÇ   rŸ   rp   r6   r–   Úranger!   rU  rz   r~   )!rˆ  rŠ  r‹  ÚliverÄ   ÚhandlesÚmissingr�  r2   rº   ÚhandlerV  rX  rW  rã   ÚpresentÚcalledr§   Úgroup_okrS  rY  Úby_parent_subsetÚsubsetÚbucketÚiÚjÚmar  ÚmbÚgbÚvr™  rš  s!   &&&                            @@r   Úprobe_shared_inputsr·  á  sb  ù€ ô �×#Ñ#Ó%Ó&€DÜ�>Š>Ó€DØ>B¿lºlÓ.K¹l¸°"ªu¹lÑ.K€HØ€GØ€G÷
ñ 
ð —”ˆØ—‘˜$“ˆØŠ>Ø�N‰N˜4Ô ÙØ�‰�v×7Ñ7¹	À$»ÐUYÐ7ÓZÖ[ñ ðÜ×!Ò!×#Õ#ÙŒI÷ $ó ˆFØ�M‰MŽOñ ð €HØ€JØ,.€Jà—•ˆØ#ŸmšmÓ@™m˜¸Ñ/?—1�1™mˆÐ@ßÙÙ$Ó4™W˜¨°¯©—!�!™WˆÐ4ßØ×Ñ˜eŸi™iÔ(ÙØ˜•ˆØˆÛˆFØ˜ÔÙÜ# H¨VÕ$4°h¸vÕ6FÓGˆFØÔ!Ø �Ø×!Ñ!Ô"5°e·i±iÀÈÐQWÓ"XÖYñ ÷ ‰8Ø�O‰O˜EŸI™I×&ñ% ð( )+€JØRTÐØ—”ˆÜ! %§-¡-°×1EÑ1EÖF‰NˆF�FØÔ ¨°×(8Ô(8ÙØ×'Ñ'¨¯©°vÐ(>ÀÓC×JÑJÈFÈ?Ö[ó Gñ ð
 #×)Ñ)Ö+ˆÜ”s˜6“{Ö#ˆAÜ˜1˜q�5¤# f£+Ö.�Ø%+¨A¥Y°°qµ	Ð"‘��R™(˜2˜rØ˜“8ÙÜ! (¨2¥,°¸µÓ=ÔEØ×%Ñ% r¨2 hÖ/ó /ó $ñ ,ô "Ü�x“Ü˜Ó$Ü˜Ó$Ü˜Ó$Ü˜g›Ø+3¯>©>Ô+;Ô<Ñ+;¡4 1 a�Qœ˜A›’YÑ+;Ò<ôð ùòM /L÷0 $×#Ð#ûó ˆFØ�M‰MŽOò üò Aùò 5ùóL =sG   ¿N7Â?O ÃN<Ã$O Ä)O.Ä6O.ÅO3Å"O3ÎO8Î<O	Ï	O ÏO+)T))rV   Ú
__future__r   rI   r¡  Údataclassesr   r   Útypingr   r   r   r   r	   r
   r   r   r   rx  r   Ú_constr   r    rK   rM   r%   r4   r:   r=   r�   rŠ   rš   rœ   rÖ   r=  rO  rQ  rU  rz  r†  r·  r   r   r   Ú<module>r¼     s  ðñõ< #ã 	Û ß (ß Z× ZÕ Zã Ý å ,ð !Ð à—)’)Ð4Ó5€õõõ4ñ �$Ô÷
að 
aó ð
aõ4õnõñ �$Ô÷3*ð 3*ó ð3*ñl �$Ô÷m
ð m
ó ðm
õ`!÷<*ñH �$Ô÷ð ó ðñ �$Ô÷& ð & ó ð& õRõ
÷\r   