Ë
    éÓ^jš  ã                   óz   — d dl Z d dlZd dlmZ d dlmZmZmZ d dlZ G d„ dej                  j                  «      Zy)é    N)ÚOrderedDict)ÚUnionÚOptionalÚListc                   ó�   ‡ — e Zd ZdgZdgZ	 	 	 	 	 ddeej                  j                     de	e
e      dedededefˆ fd	„Zd
„ Zˆ xZS )ÚAttentionExtractz*attn.softmaxz
*attn_dropÚmodelÚnamesÚmodeÚmethodÚ	hook_typeÚ	use_regexc                 ó:  •— t         ‰| �  «        |dv sJ ‚|dk(  r|j                  «       }n|j                  «       }|dv sJ ‚|dk(  ròddlm}m}  ||«      |dk(  rdnd   }	|xs | j                  }|r]|D �
cg c]  }
t        j                  |
«      ‘Œ }}
|	D ��
cg c]-  }t        |D �
cg c]  }
|
j                  |«      ‘Œ c}
«      sŒ,|‘Œ/ }}}
n?|	D ��cg c]2  }t        |D �cg c]  }t        j                  ||«      ‘Œ c}«      sŒ1|‘Œ4 }}}|st        d|› d	�«      ‚ |||d
¬«      | _        d| _        �n|dv sJ ‚ddlm} |j%                  «       D ��cg c]  \  }}|‘Œ	 }}}|xs | j&                  }|r]|D �
cg c]  }
t        j                  |
«      ‘Œ }}
|D ��
cg c]-  }t        |D �
cg c]  }
|
j                  |«      ‘Œ c}
«      sŒ,|‘Œ/ }}}
n?|D ��cg c]2  }t        |D �cg c]  }t        j                  ||«      ‘Œ c}«      sŒ1|‘Œ4 }}}|st        d|› d	�«      ‚|| _         |||j%                  «       |¬«      | _        || _        || _        || _        yc c}
w c c}
w c c}
}w c c}w c c}}w c c}}w c c}
w c c}
w c c}
}w c c}w c c}}w )aÛ   Extract attention maps (or other activations) from a model by name.

        Args:
            model: Instantiated model to extract from.
            names: List of concrete or wildcard names to extract. Names are nodes for fx and modules for hooks.
            mode: 'train' or 'eval' model mode.
            method: 'fx' or 'hook' extraction method.
            hook_type: 'forward' or 'forward_pre' hooks used.
            use_regex: Use regex instead of fnmatch
        )ÚtrainÚevalr   )ÚfxÚhookr   r   )Úget_graph_node_namesÚGraphExtractNeté   zNo node names found matching ú.T)Úreturn_dictN)ÚforwardÚforward_pre)ÚFeatureHookszNo module names found matching )Údefault_hook_type)ÚsuperÚ__init__r   r   Útimm.models._features_fxr   r   Údefault_node_namesÚreÚcompileÚanyÚmatchÚfnmatchÚRuntimeErrorr	   ÚhooksÚtimm.models._featuresr   Únamed_modulesÚdefault_module_namesr
   r   r   )Úselfr	   r
   r   r   r   r   r   r   Ú
node_namesÚrÚregexesÚgÚmatchedÚnr   ÚmÚmodule_namesÚ	__class__s                     €úg/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/timm/utils/attention_extract.pyr   zAttentionExtract.__init__   s^  ø€ ô& 	‰ÑÔØÐ(Ñ(Ð(Ð(Ø�7Š?Ø—K‘K“M‰Eà—J‘J“LˆEà˜Ñ'Ð'Ð'Ø�TŠ>çVá-¨eÓ4¸$À'º/±QÈqÑQˆJØÒ4˜T×4Ñ4ˆEÙØ27Ö8¨Qœ2Ÿ:™: a�=Ð8�Ð8Ø&0×W ´CÈWÖ8UÈ¸¿¹À½Ò8UÕ4Vš1ÐW�ÒWà&0×` ´CÐX]Ö8^ÐST¼¿¹ÈÈAÕ9NÒ8^Õ4_š1Ð`�Ñ`ÙÜ"Ð%BÀ5À'ÈÐ#KÓLÐLá(¨°ÀTÔJˆDŒJØˆDŽJð Ð :Ñ:Ð:Ð:Ý:à*/×*=Ñ*=Ó*?×@¡$ ! QšAÐ@ˆLÑ@ØÒ6˜T×6Ñ6ˆEÙØ27Ö8¨Qœ2Ÿ:™: a�=Ð8�Ð8Ø&2×Y ´cÈwÖ:WÈ!¸1¿7¹7À1½:Ò:WÕ6Xš1ÐY�ÒYà&2×b ´cÐZ_Ö:`ÐUV¼7¿?¹?È1ÈaÕ;PÒ:`Õ6aš1Ðb�ÑbÙÜ"Ð%DÀUÀGÈ1Ð#MÓNÐNàˆDŒJÙ% g¨u×/BÑ/BÓ/DÐXaÔbˆDŒJàˆŒ
ØˆŒ	Øˆ�ùò; 9ùÚ8UùÓWùâ8^ùÓ`ùó Aùò 9ùÚ:WùÓYùâ:`ùÓbsŠ   Á7I!ÂI+Â(I&Ã I+ÃI+ÃI6Ã#I1Ä I6ÄI6ÅI<Å=JÆ JÆ.JÇJÇJÇJÇ)JÈJÈJÉ&I+É1I6ÊJÊJc                 ó²   — | j                   �9| j                  |«       | j                   j                  |j                  ¬«      }|S | j                  |«      }|S )N)Údevice)r'   r	   Ú
get_outputr7   )r+   ÚxÚoutputs      r5   r   zAttentionExtract.forwardO   sM   € Ø�:‰:Ð!Ø�J‰J�qŒMØ—Z‘Z×*Ñ*°!·(±(Ð*Ó;ˆFð ˆð —Z‘Z “]ˆFØˆó    )Nr   r   r   F)Ú__name__Ú
__module__Ú__qualname__r    r*   r   ÚtorchÚnnÚModuler   r   ÚstrÚboolr   r   Ú__classcell__)r4   s   @r5   r   r   	   s€   ø„ à)Ð*ÐØ(˜>Ðð
 *.ØØØ&Ø#ñ?à˜Ÿ™Ÿ™Ñ)ð?ð ˜D ™IÑ&ð?ð ð	?ð
 ð?ð ð?ð õ?öBr;   r   )r%   r!   Úcollectionsr   Útypingr   r   r   r?   r@   rA   r   © r;   r5   ú<module>rH      s-   ðÛ Û 	Ý #ß (Ñ (ã ôL�u—x‘x—‘õ Lr;   