o
    *j                     @   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__ x/var/www/html/Deteccion_Ine/venv/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   Z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   )Zis_instance_from_strr   lenr!   findr"   uuiduuid4hexsplitint)clssr   r   idxZ	param_strZtmp_idxZtmp_block_nameZ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(   classmethodr9   __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	   r?   r
   r   r   r   r   kernel_sizer   rB   rC   ranger"   r   register_netblocks_dictr   Zcreate_netblock_list_from_strr   r   Z
ModuleListr   )r   r   r   r   r   rD   r   rB   rC   r   Zfull_strZlast_channelsZcurrent_strideiZ	inner_strrA   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   rD   r#   r   r   r   r'      s   zSuperConvKXBNRELU.__repr__)NNNNNFFF)r!   r;   r<   r
   r$   r'   r>   r   r   r   r   r?   P   s    2r?   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   rD   r   r   )r	   rI   r
   r   r   r   r   r
         
zSuperConvK1BNRELU.__init__r:   r!   r;   r<   r
   r>   r   r   r   r   rI          rI   c                       rH   )SuperConvK3BNRELUNFc              	      rJ   )Nr.   rK   r   )r	   rO   r
   r   r   r   r   r
      rL   zSuperConvK3BNRELU.__init__r:   rM   r   r   r   r   rO      rN   rO   c                       rH   )SuperConvK5BNRELUNFc              	      rJ   )N   rK   r   )r	   rP   r
   r   r   r   r   r
      rL   zSuperConvK5BNRELU.__init__r:   rM   r   r   r   r   rP      rN   rP   c                       rH   )SuperConvK7BNRELUNFc              	      rJ   )N   rK   r   )r	   rR   r
   r   r   r   r   r
      rL   zSuperConvK7BNRELU.__init__r:   rM   r   r   r   r   rR      rN   rR   rA   c                 C   s   t tttd}| | | S )N)rI   rO   rP   rR   )rI   rO   rP   rR   update)rA   Zthis_py_file_netblocks_dictr   r   r   rF      s   
rF   )r1   Ztorchr   r@   r   r   r   ZPlainNetBasicBlockClassr   r?   rI   rO   rP   rR   dictrF   r   r   r   r   <module>   s   D@