U
    ­Ê¹jˆ}  ã                   @   sà  U d dl Z d dlmZ d dlmZ d dlmZmZmZm	Z	m
Z
mZ d dlZd dlmZ ddlmZmZ ddlmZ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mZ dddddddddddgZ G dd„ de
ƒZ!G dd„ deƒZ"G dd„ dej#ƒZ$G dd„ dej#ƒZ%G d d„ dej#ƒZ&e'e'e'e'e'ee e(ee&d!œ	d"d#„Z)d$eiZ*ee+ef e,d%< e*d&d'd(œ–Z-G d)d„ deƒZ.G d*d„ deƒZ/G d+d„ deƒZ0G d,d„ deƒZ1G d-d„ deƒZ2eƒ ed.e.j3fd/�dd0d1œee. e(ee&d2œd3d„ƒƒZ4eƒ ed.e/j3fd/�dd0d1œee/ e(ee&d2œd4d„ƒƒZ5eƒ ed.e0j3fd/�dd0d1œee0 e(ee&d2œd5d„ƒƒZ6eƒ ed.e1j3fd/�dd0d1œee1 e(ee&d2œd6d„ƒƒZ7eƒ ed7d/�dd0d1œee2 e(ee&d2œd8d„ƒƒZ8d?e'e'd;e+e(d;d<œd=d>„Z9dS )@é    N)ÚOrderedDict)Úpartial)ÚAnyÚCallableÚDictÚListÚ
NamedTupleÚOptionalé   )ÚConv2dNormActivationÚMLP)ÚImageClassificationÚInterpolationMode)Ú_log_api_usage_onceé   )Úregister_modelÚWeightsÚWeightsEnum)Ú_IMAGENET_CATEGORIES)Ú_ovewrite_named_paramÚhandle_legacy_interfaceÚVisionTransformerÚViT_B_16_WeightsÚViT_B_32_WeightsÚViT_L_16_WeightsÚViT_L_32_WeightsÚViT_H_14_WeightsÚvit_b_16Úvit_b_32Úvit_l_16Úvit_l_32Úvit_h_14c                   @   sV   e Zd ZU eed< eed< eed< ejZedej	f ed< ej
Zedej	f ed< dS )ÚConvStemConfigÚout_channelsÚkernel_sizeÚstride.Ú
norm_layerÚactivation_layerN)Ú__name__Ú
__module__Ú__qualname__ÚintÚ__annotations__ÚnnZBatchNorm2dr&   r   ÚModuleZReLUr'   © r/   r/   úd/var/www/html/bwave/python/venv/lib/python3.8/site-packages/torchvision/models/vision_transformer.pyr"       s
   
r"   c                       s:   e Zd ZdZdZeeedœ‡ fdd„Z‡ fdd„Z‡  Z	S )ÚMLPBlockzTransformer MLP block.r
   )Úin_dimÚmlp_dimÚdropoutc                    sd   t ƒ j|||gtjd |d� |  ¡ D ]:}t|tjƒr$tj |j	¡ |j
d k	r$tjj|j
dd� q$d S )N)r'   Zinplacer4   ç�íµ ÷Æ°>©Ústd)ÚsuperÚ__init__r-   ZGELUÚmodulesÚ
isinstanceÚLinearÚinitZxavier_uniform_ÚweightÚbiasÚnormal_)Úselfr2   r3   r4   Úm©Ú	__class__r/   r0   r9   -   s    
zMLPBlock.__init__c              	      s”   |  dd ¡}|d ks|dk rxtdƒD ]R}	dD ]H}
|› d|	d › d|
› �}|› d|	 › d|
› �}||kr,| |¡||< q,q$tƒ  |||||||¡ d S )NÚversionr
   )r>   r?   Zlinear_r   Ú.é   )ÚgetÚrangeÚpopr8   Ú_load_from_state_dict)rA   Z
state_dictÚprefixZlocal_metadataÚstrictZmissing_keysZunexpected_keysZ
error_msgsrE   ÚiÚtypeÚold_keyZnew_keyrC   r/   r0   rK   6   s"    
ùzMLPBlock._load_from_state_dict)
r(   r)   r*   Ú__doc__Ú_versionr+   Úfloatr9   rK   Ú__classcell__r/   r/   rC   r0   r1   (   s   	r1   c                	       sZ   e Zd ZdZeejdd�feeeeee	de
jjf dœ‡ fdd„Ze
jdœd	d
„Z‡  ZS )ÚEncoderBlockzTransformer encoder block.r5   ©Úeps.)Ú	num_headsÚ
hidden_dimr3   r4   Úattention_dropoutr&   c                    sV   t ƒ  ¡  || _||ƒ| _tj|||dd�| _t |¡| _||ƒ| _	t
|||ƒ| _d S )NT)r4   Zbatch_first)r8   r9   rX   Úln_1r-   ZMultiheadAttentionÚself_attentionÚDropoutr4   Úln_2r1   Úmlp)rA   rX   rY   r3   r4   rZ   r&   rC   r/   r0   r9   Y   s    	


zEncoderBlock.__init__©Úinputc                 C   sj   t  | ¡ dkd|j› �¡ |  |¡}| j|||dd�\}}|  |¡}|| }|  |¡}|  |¡}|| S )NrG   ú2Expected (batch_size, seq_length, hidden_dim) got F)Zneed_weights)	ÚtorchÚ_assertÚdimÚshaper[   r\   r4   r^   r_   )rA   ra   ÚxÚ_Úyr/   r/   r0   Úforwardn   s    



zEncoderBlock.forward©r(   r)   r*   rQ   r   r-   Ú	LayerNormr+   rS   r   rc   r.   r9   ÚTensorrj   rT   r/   r/   rC   r0   rU   V   s   	ùùrU   c                       s^   e Zd ZdZeejdd�feeeeeeee	de
jjf dœ‡ fdd„Ze
jdœd	d
„Z‡  ZS )ÚEncoderz?Transformer Model Encoder for sequence to sequence translation.r5   rV   .)Ú
seq_lengthÚ
num_layersrX   rY   r3   r4   rZ   r&   c	                    s~   t ƒ  ¡  t t d||¡jdd�¡| _t |¡| _	t
ƒ }	t|ƒD ] }
t||||||ƒ|	d|
› �< qBt |	¡| _||ƒ| _d S )Nr   g{®Gáz”?r6   Zencoder_layer_)r8   r9   r-   Ú	Parameterrc   Úemptyr@   Úpos_embeddingr]   r4   r   rI   rU   Ú
SequentialÚlayersÚln)rA   ro   rp   rX   rY   r3   r4   rZ   r&   ru   rN   rC   r/   r0   r9   }   s    
úzEncoder.__init__r`   c                 C   s<   t  | ¡ dkd|j› �¡ || j }|  |  |  |¡¡¡S )NrG   rb   )rc   rd   re   rf   rs   rv   ru   r4   )rA   ra   r/   r/   r0   rj   š   s    
zEncoder.forwardrk   r/   r/   rC   r0   rn   z   s   ÷÷rn   c                       s�   e Zd ZdZddddeejdd�dfeeeeeeeeee	e e
dejjf e	ee  dœ‡ fd	d
„Zejejdœdd„Zejdœdd„Z‡  ZS )r   z;Vision Transformer as per https://arxiv.org/abs/2010.11929.ç        iè  Nr5   rV   .)Ú
image_sizeÚ
patch_sizerp   rX   rY   r3   r4   rZ   Únum_classesÚrepresentation_sizer&   Úconv_stem_configsc                    sø  t ƒ  ¡  t| ƒ t || dkd¡ || _|| _|| _|| _|| _	|| _
|	| _|
| _|| _|d k	rÔt ¡ }d}t|ƒD ]:\}}| d|› �t||j|j|j|j|jd�¡ |j}qx| dtj||dd�¡ || _ntjd|||d	�| _|| d
 }t t dd|¡¡| _|d7 }t||||||||ƒ| _|| _tƒ }|
d k�rRt  ||	¡|d< n,t  ||
¡|d< t !¡ |d< t  |
|	¡|d< t |¡| _"t#| jtjƒ�rø| jj$| jjd  | jjd  }tj%j&| jj't( )d| ¡d� | jj*d k	�rbtj% +| jj*¡ nj| jj,d k	�rbt#| jj,tjƒ�rbtj%j-| jj,j'dt( )d| jj,j ¡d� | jj,j*d k	�rbtj% +| jj,j*¡ t.| j"dƒ�r¾t#| j"j/tj ƒ�r¾| j"j/j0}tj%j&| j"j/j't( )d| ¡d� tj% +| j"j/j*¡ t#| j"j1tj ƒ�rôtj% +| j"j1j'¡ tj% +| j"j1j*¡ d S )Nr   z&Input shape indivisible by patch size!rG   Zconv_bn_relu_)Úin_channelsr#   r$   r%   r&   r'   Ú	conv_lastr   )r}   r#   r$   )r}   r#   r$   r%   r
   ÚheadÚ
pre_logitsZactr6   rw   g       @)Zmeanr7   )2r8   r9   r   rc   rd   rx   ry   rY   r3   rZ   r4   rz   r{   r&   r-   rt   Ú	enumerateZ
add_moduler   r#   r$   r%   r'   ZConv2dÚ	conv_projrq   ZzerosÚclass_tokenrn   Úencoderro   r   r<   ZTanhÚheadsr;   r}   r=   Ztrunc_normal_r>   ÚmathÚsqrtr?   Zzeros_r~   r@   Úhasattrr€   Zin_featuresr   )rA   rx   ry   rp   rX   rY   r3   r4   rZ   rz   r{   r&   r|   Zseq_projZprev_channelsrN   Zconv_stem_layer_configro   Zheads_layersZfan_inrC   r/   r0   r9   £   s     
úþ ÿ   ÿø

    ÿ 
 zVisionTransformer.__init__)rg   Úreturnc           	      C   s˜   |j \}}}}| j}t || jkd| j› d|› d�¡ t || jkd| j› d|› d�¡ || }|| }|  |¡}| || j|| ¡}| ddd¡}|S )NzWrong image height! Expected z	 but got ú!zWrong image width! Expected r   r
   r   )	rf   ry   rc   rd   rx   r‚   ÚreshaperY   Úpermute)	rA   rg   ÚnÚcÚhÚwÚpZn_hZn_wr/   r/   r0   Ú_process_input  s    ""
z VisionTransformer._process_input)rg   c                 C   s^   |   |¡}|jd }| j |dd¡}tj||gdd�}|  |¡}|d d …df }|  |¡}|S )Nr   éÿÿÿÿr   ©re   )r’   rf   rƒ   Úexpandrc   Úcatr„   r…   )rA   rg   r�   Zbatch_class_tokenr/   r/   r0   rj   !  s    



zVisionTransformer.forward)r(   r)   r*   rQ   r   r-   rl   r+   rS   r	   r   rc   r.   r   r"   r9   rm   r’   rj   rT   r/   r/   rC   r0   r       s.   
ó
ói)	ry   rp   rX   rY   r3   ÚweightsÚprogressÚkwargsr‰   c           
   	   K   s˜   |d k	rTt |dt|jd ƒƒ |jd d |jd d ks>t‚t |d|jd d ƒ | dd¡}tf || ||||dœ|—Ž}	|r”|	 |j|d	d
�¡ |	S )Nrz   Ú
categoriesÚmin_sizer   r   rx   éà   )rx   ry   rp   rX   rY   r3   T)r˜   Z
check_hash)r   ÚlenÚmetaÚAssertionErrorrJ   r   Zload_state_dictZget_state_dict)
ry   rp   rX   rY   r3   r—   r˜   r™   rx   Úmodelr/   r/   r0   Ú_vision_transformer4  s$    
 úù
r¡   rš   Ú_COMMON_METAz(https://github.com/facebookresearch/SWAGz:https://github.com/facebookresearch/SWAG/blob/main/LICENSE)ÚrecipeÚlicensec                   @   s¶   e Zd Zedeedd�edddddd	d
œiddddœ–d�Zedeeddej	d�e
dddddd
œiddddœ–d�Zedeeddej	d�e
ddddddd
œidddd œ–d�ZeZd!S )"r   z9https://download.pytorch.org/models/vit_b_16-c867db91.pthrœ   ©Ú	crop_sizeièê(©rœ   rœ   zNhttps://github.com/pytorch/vision/tree/main/references/classification#vit_b_16úImageNet-1KgøSã¥›DT@g1¬ZÔW@©zacc@1zacc@5gªñÒMb�1@gÃõ(\�¤t@ú²
                These weights were trained from scratch by using a modified version of `DeIT
                <https://arxiv.org/abs/2012.12877>`_'s training recipe.
            ©Ú
num_paramsr›   r£   Ú_metricsÚ_opsÚ
_file_sizeÚ_docs©ÚurlZ
transformsrž   z>https://download.pytorch.org/models/vit_b_16_swag-9ac1b537.pthé€  ©r¦   Úresize_sizeÚinterpolationiè^-)r³   r³   gú~j¼tSU@gš™™™™iX@gË¡E¶ó½K@gî|?5^¶t@úË
                These weights are learnt via transfer learning by end-to-end fine-tuning the original
                `SWAG <https://arxiv.org/abs/2201.08371>`_ weights on ImageNet-1K data.
            ©r¬   r›   r­   r®   r¯   r°   zAhttps://download.pytorch.org/models/vit_b_16_lc_swag-4e70ced5.pthú+https://github.com/pytorch/vision/pull/5793gbX9´xT@gìQ¸…X@úã
                These weights are composed of the original frozen `SWAG <https://arxiv.org/abs/2201.08371>`_ trunk
                weights and a linear classifier learnt on top of them trained on ImageNet-1K data.
            ©r£   r¬   r›   r­   r®   r¯   r°   N©r(   r)   r*   r   r   r   r¢   ÚIMAGENET1K_V1r   ÚBICUBICÚ_COMMON_SWAG_METAÚIMAGENET1K_SWAG_E2E_V1ÚIMAGENET1K_SWAG_LINEAR_V1ÚDEFAULTr/   r/   r/   r0   r   _  sz   
þÿóýüþÿôøüþÿóøc                   @   sD   e Zd Zedeedd�edddddd	d
œiddddœ–d�ZeZdS )r   z9https://download.pytorch.org/models/vit_b_32-d86f8d99.pthrœ   r¥   iè1Br§   zNhttps://github.com/pytorch/vision/tree/main/references/classification#vit_b_32r¨   gî|?5^úR@gçû©ñÒW@r©   g‰A`åÐ¢@g‹lçû©	u@rª   r«   r±   N©	r(   r)   r*   r   r   r   r¢   r½   rÂ   r/   r/   r/   r0   r   ®  s$   
þÿóýc                   @   s¸   e Zd Zedeeddd�eddddd	d
dœiddddœ–d�Zedeeddej	d�e
ddddddœiddddœ–d�Zedeeddej	d�e
dddddddœiddd d!œ–d�ZeZd"S )#r   z9https://download.pytorch.org/models/vit_l_16-852ce7e3.pthrœ   éò   )r¦   rµ   iè§#r§   zNhttps://github.com/pytorch/vision/tree/main/references/classification#vit_l_16r¨   gî|?5^êS@gF¶óýÔ¨W@r©   g×£p=
ÇN@g;ßO�$’@a  
                These weights were trained from scratch by using a modified version of TorchVision's
                `new training recipe
                <https://pytorch.org/blog/how-to-train-state-of-the-art-models-using-torchvision-latest-primitives/>`_.
            r«   r±   z>https://download.pytorch.org/models/vit_l_16_swag-4f3808c9.pthé   r´   iè—0)rÅ   rÅ   gj¼t“V@gTã¥›Ä X@g²�ï§ÆŸv@gyé&11’@r·   r¸   zAhttps://download.pytorch.org/models/vit_l_16_lc_swag-4d563306.pthr¹   gÓMbXIU@g^ºI[X@rº   r»   Nr¼   r/   r/   r/   r0   r   È  sz   þÿóýüþÿôøüþÿóøc                   @   sD   e Zd Zedeedd�edddddd	d
œiddddœ–d�ZeZdS )r   z9https://download.pytorch.org/models/vit_l_32-c7638314.pthrœ   r¥   iè[Er§   zNhttps://github.com/pytorch/vision/tree/main/references/classification#vit_l_32r¨   g‘í|?5>S@g®GázDW@r©   g¨ÆK7‰Á.@gžï§ÆËE’@rª   r«   r±   NrÃ   r/   r/   r/   r0   r     s$   
þÿóýc                   @   s‚   e Zd Zedeeddejd�edddddd	œid
dddœ–d�Z	edeeddejd�eddddddd	œiddddœ–d�Z
e	ZdS )r   z>https://download.pytorch.org/models/vit_h_14_swag-80465313.pthé  r´   ièýÁ%)rÆ   rÆ   r¨   gÙÎ÷S#V@g#Ûù~j¬X@r©   gÛù~j¼Å�@g¨ÆK7Iá¢@r·   r¸   r±   zAhttps://download.pytorch.org/models/vit_h_14_lc_swag-c1eb923e.pthrœ   r¹   iè@¬%r§   gZd;ßOmU@g…ëQ¸nX@g=
×£péd@gºIkÖ¢@rº   r»   N)r(   r)   r*   r   r   r   r   r¾   r¿   rÀ   rÁ   rÂ   r/   r/   r/   r0   r   2  sX   üþÿôøüþÿóøÚ
pretrained)r—   T)r—   r˜   )r—   r˜   r™   r‰   c              
   K   s(   t  | ¡} tf ddddd| |dœ|—ŽS )a­  
    Constructs a vit_b_16 architecture from
    `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale <https://arxiv.org/abs/2010.11929>`_.

    Args:
        weights (:class:`~torchvision.models.ViT_B_16_Weights`, optional): The pretrained
            weights to use. See :class:`~torchvision.models.ViT_B_16_Weights`
            below for more details and possible values. By default, no pre-trained weights are used.
        progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.vision_transformer.VisionTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vision_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.ViT_B_16_Weights
        :members:
    é   é   é   é   ©ry   rp   rX   rY   r3   r—   r˜   )r   Úverifyr¡   ©r—   r˜   r™   r/   r/   r0   r   k  s    
ùøc              
   K   s(   t  | ¡} tf ddddd| |dœ|—ŽS )a­  
    Constructs a vit_b_32 architecture from
    `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale <https://arxiv.org/abs/2010.11929>`_.

    Args:
        weights (:class:`~torchvision.models.ViT_B_32_Weights`, optional): The pretrained
            weights to use. See :class:`~torchvision.models.ViT_B_32_Weights`
            below for more details and possible values. By default, no pre-trained weights are used.
        progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.vision_transformer.VisionTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vision_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.ViT_B_32_Weights
        :members:
    é    rÉ   rÊ   rË   rÌ   )r   rÍ   r¡   rÎ   r/   r/   r0   r   �  s    
ùøc              
   K   s(   t  | ¡} tf ddddd| |dœ|—ŽS )a­  
    Constructs a vit_l_16 architecture from
    `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale <https://arxiv.org/abs/2010.11929>`_.

    Args:
        weights (:class:`~torchvision.models.ViT_L_16_Weights`, optional): The pretrained
            weights to use. See :class:`~torchvision.models.ViT_L_16_Weights`
            below for more details and possible values. By default, no pre-trained weights are used.
        progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.vision_transformer.VisionTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vision_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.ViT_L_16_Weights
        :members:
    rÈ   é   é   é   rÌ   )r   rÍ   r¡   rÎ   r/   r/   r0   r   ¯  s    
ùøc              
   K   s(   t  | ¡} tf ddddd| |dœ|—ŽS )a­  
    Constructs a vit_l_32 architecture from
    `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale <https://arxiv.org/abs/2010.11929>`_.

    Args:
        weights (:class:`~torchvision.models.ViT_L_32_Weights`, optional): The pretrained
            weights to use. See :class:`~torchvision.models.ViT_L_32_Weights`
            below for more details and possible values. By default, no pre-trained weights are used.
        progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.vision_transformer.VisionTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vision_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.ViT_L_32_Weights
        :members:
    rÏ   rÐ   rÈ   rÑ   rÒ   rÌ   )r   rÍ   r¡   rÎ   r/   r/   r0   r    Ñ  s    
ùø)rÇ   Nc              
   K   s(   t  | ¡} tf ddddd| |dœ|—ŽS )a­  
    Constructs a vit_h_14 architecture from
    `An Image is Worth 16x16 Words: Transformers for Image Recognition at Scale <https://arxiv.org/abs/2010.11929>`_.

    Args:
        weights (:class:`~torchvision.models.ViT_H_14_Weights`, optional): The pretrained
            weights to use. See :class:`~torchvision.models.ViT_H_14_Weights`
            below for more details and possible values. By default, no pre-trained weights are used.
        progress (bool, optional): If True, displays a progress bar of the download to stderr. Default is True.
        **kwargs: parameters passed to the ``torchvision.models.vision_transformer.VisionTransformer``
            base class. Please refer to the `source code
            <https://github.com/pytorch/vision/blob/main/torchvision/models/vision_transformer.py>`_
            for more details about this class.

    .. autoclass:: torchvision.models.ViT_H_14_Weights
        :members:
    é   rÏ   rÈ   i   i   rÌ   )r   rÍ   r¡   rÎ   r/   r/   r0   r!   ó  s    
ùøÚbicubicFzOrderedDict[str, torch.Tensor])rx   ry   Úmodel_stateÚinterpolation_modeÚreset_headsr‰   c                 C   sh  |d }|j \}}}|dkr,td|j › �ƒ‚| | d d }	|	|k�rd|d8 }|	d8 }	|dd…dd…dd…f }
|dd…dd…dd…f }| ddd¡}tt |¡ƒ}|| |krÊtd|| › d|› �ƒ‚| d|||¡}| | }tjj	|||d	d
�}| d||	¡}| ddd¡}t
j|
|gdd�}||d< |�rdtƒ }| ¡ D ]\}}| d¡�s@|||< �q@|}|S )aŸ  This function helps interpolate positional embeddings during checkpoint loading,
    especially when you want to apply a pre-trained model on images with different resolution.

    Args:
        image_size (int): Image size of the new model.
        patch_size (int): Patch size of the new model.
        model_state (OrderedDict[str, torch.Tensor]): State dict of the pre-trained model.
        interpolation_mode (str): The algorithm used for upsampling. Default: bicubic.
        reset_heads (bool): If true, not copying the state of heads. Default: False.

    Returns:
        OrderedDict[str, torch.Tensor]: A state dict which can be loaded into the new model.
    zencoder.pos_embeddingr   z%Unexpected position embedding shape: r
   Nr   zPseq_length is not a perfect square! Instead got seq_length_1d * seq_length_1d = z and seq_length = T)ÚsizeÚmodeZalign_cornersr”   r…   )rf   Ú
ValueErrorrŒ   r+   r†   r‡   r‹   r-   Z
functionalZinterpolaterc   r–   r   ÚitemsÚ
startswith)rx   ry   rÕ   rÖ   r×   rs   r�   ro   rY   Znew_seq_lengthZpos_embedding_tokenZpos_embedding_imgZseq_length_1dZnew_seq_length_1dZnew_pos_embedding_imgZnew_pos_embeddingZmodel_state_copyÚkÚvr/   r/   r0   Úinterpolate_embeddings  sF    
ÿürß   )rÔ   F):r†   Úcollectionsr   Ú	functoolsr   Útypingr   r   r   r   r   r	   rc   Ztorch.nnr-   Zops.miscr   r   Ztransforms._presetsr   r   Úutilsr   Z_apir   r   r   Ú_metar   Z_utilsr   r   Ú__all__r"   r1   r.   rU   rn   r   r+   Úboolr¡   r¢   Ústrr,   r¿   r   r   r   r   r   r½   r   r   r   r    r!   rß   r/   r/   r/   r0   Ú<module>   sš     õ.$& ÷! ÿýOP9$ $ $ $ $$  ûú