o
    ߥi                     @   s   d dl Z d dlmZ ddlmZmZ ddlmZ G dd dejZG dd	 d	eZ	G d
d de	Z
G dd de	ZG dd de	ZG dd de	ZdefddZdS )    N)nn   )basic_blocksglobal_utils)get_right_parentheses_indexc                       sV   e Zd Z					d fdd	Zdd Zdd Zd	d
 Zdd ZedddZ	  Z
S )PlainNetSuperBlockClassNFc                    s<   t t|   || _|| _|| _|| _|| _d | _d | _	d S N)
superr   __init__in_channelsout_channelsstride
sub_layers	no_create
block_listmodule_listselfr   r   r   r   r   kwargs	__class__ k/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/cv/tinynas_classfication/super_blocks.pyr
      s   
z PlainNetSuperBlockClass.__init__c                 C   s   |}| j D ]}||}q|S r   )r   )r   xoutputblockr   r   r   forward   s   

zPlainNetSuperBlockClass.forwardc                 C   "   t | jd| j| j| j| j S Nz({},{},{},{})type__name__formatr   r   r   r   r   r   r   r   __str__$      zPlainNetSuperBlockClass.__str__c                 C   s&   t | jd| j| j| j| j| j S )Nz({}|{},{},{},{}))r    r!   r"   
block_namer   r   r   r   r#   r   r   r   __repr__(   s   z PlainNetSuperBlockClass.__repr__c                 C   s   |}| j D ]}||}q|S r   )r   get_output_resolution)r   input_resolution
resolutionr   r   r   r   r(   -   s   
z-PlainNetSuperBlockClass.get_output_resolutionc              	   K   s   |  |sJ t|}|d usJ |t| jd | }|d}|dk r.dt j}n|d| }||d d  }|	d}t
|d }	t
|d }
t
|d }t
|d }| d
|	|
||||d	|||d d  fS )N(|r   zuuid{}r   ,      )r   r   r   r   r&   r   r   )is_instance_from_strr   lenr!   findr"   uuiduuid4hexsplitint)clssr   r   idx	param_strtmp_idxtmp_block_nameparam_str_splitr   r   r   r   r   r   r   create_from_str3   s4   

z'PlainNetSuperBlockClass.create_from_strNNNNF)F)r!   
__module____qualname__r
   r   r$   r'   r(   classmethodr?   __classcell__r   r   r   r   r      s    r   c                       s>   e Zd Z								d	 fdd	Zdd Zdd Z  ZS )
SuperConvKXBNRELUNFc	              	      s   t t| jdi |	 || _|| _|| _|| _|| _|| _|| _	|| _
d}
|}|}t| jD ](}| j
sBd|| j| j|| j| j}nd|| j| j|| j}|
|7 }
|}d}q.	 ti }tj|
||||d| _|sst| j| _d S d | _d S )N z!ConvKX({},{},{},{})BN({})RELU({})zConvKX({},{},{},{})RELU({})r   )r   netblocks_dict
no_reslinkno_BNr   )r	   rE   r
   r   r   r   r   kernel_sizer   rH   rI   ranger"   r   register_netblocks_dictr   create_netblock_list_from_strr   r   
ModuleListr   )r   r   r   r   r   rJ   r   rH   rI   r   full_strlast_channelscurrent_stridei	inner_strrG   r   r   r   r
   R   sJ   





zSuperConvKXBNRELU.__init__c                 C   r   r   r   r#   r   r   r   r$      r%   zSuperConvKXBNRELU.__str__c              	   C   s*   t | jd| j| j| j| j| j| j S )Nz8({}|in={},out={},stride={},sub_layers={},kernel_size={}))	r    r!   r"   r&   r   r   r   r   rJ   r#   r   r   r   r'      s   zSuperConvKXBNRELU.__repr__)NNNNNFFF)r!   rA   rB   r
   r$   r'   rD   r   r   r   r   rE   P   s    2rE   c                       (   e Zd Z					d fdd	Z  ZS )SuperConvK1BNRELUNFc              	      (   t t| jd||||d|d| d S )Nr   r   r   r   r   rJ   r   r   )r	   rU   r
   r   r   r   r   r
         
zSuperConvK1BNRELU.__init__r@   r!   rA   rB   r
   rD   r   r   r   r   rU          rU   c                       rT   )SuperConvK3BNRELUNFc              	      rV   )Nr/   rW   r   )r	   r[   r
   r   r   r   r   r
      rX   zSuperConvK3BNRELU.__init__r@   rY   r   r   r   r   r[      rZ   r[   c                       rT   )SuperConvK5BNRELUNFc              	      rV   )N   rW   r   )r	   r\   r
   r   r   r   r   r
      rX   zSuperConvK5BNRELU.__init__r@   rY   r   r   r   r   r\      rZ   r\   c                       rT   )SuperConvK7BNRELUNFc              	      rV   )N   rW   r   )r	   r^   r
   r   r   r   r   r
      rX   zSuperConvK7BNRELU.__init__r@   rY   r   r   r   r   r^      rZ   r^   rG   c                 C   s   t tttd}| | | S )N)rU   r[   r\   r^   )rU   r[   r\   r^   update)rG   this_py_file_netblocks_dictr   r   r   rL      s   
rL   )r3   torchr   rF   r   r   r   PlainNetBasicBlockClassr   rE   rU   r[   r\   r^   dictrL   r   r   r   r   <module>   s   D@