Ë
    ÜÓ^j¦;  ã                   ó  — d Z ddlmZ ddlZddlmZ ddlmZ ddlmZ ddl	m
Z
mZ ddlmZmZmZmZ dd	lmZ dd
lmZmZ ddlmZ ddlmZ  ej4                  e«      Z G d„ dej:                  «      Z G d„ dej:                  «      Z G d„ dej:                  «      Z  G d„ dej:                  «      Z!e G d„ de«      «       Z"e G d„ de"«      «       Z# ed¬«       G d„ de"«      «       Z$ ed¬«       G d„ d e
e"«      «       Z%g d!¢Z&y)"zPyTorch TextNet model.é    )ÚAnyN)ÚTensoré   )ÚACT2CLS)ÚBackboneMixinÚfilter_output_hidden_states)ÚBackboneOutputÚBaseModelOutputWithNoAttentionÚ(BaseModelOutputWithPoolingAndNoAttentionÚ$ImageClassifierOutputWithNoAttention)ÚPreTrainedModel)Úauto_docstringÚlogging)Úcan_return_tupleé   )ÚTextNetConfigc                   ó\   ‡ — e Zd Zdefˆ fd„Zdej                  dej                  fd„Zˆ xZS )ÚTextNetConvLayerÚconfigc                 ó”  •— t         ‰| �  «        |j                  | _        |j                  | _        |j                  | _        t        |j                  t        «      r$|j                  d   dz  |j                  d   dz  fn|j                  dz  }t        j                  |j                  |j                  |j                  |j                  |d¬«      | _        t        j                  |j                  |j                   «      | _        t        j$                  «       | _        | j                  �t)        | j                     «       | _        y y )Nr   é   r   F)Úkernel_sizeÚstrideÚpaddingÚbias)ÚsuperÚ__init__Ústem_kernel_sizer   Ústem_strider   Ústem_act_funcÚactivation_functionÚ
isinstanceÚtupleÚnnÚConv2dÚstem_num_channelsÚstem_out_channelsÚconvÚBatchNorm2dÚbatch_norm_epsÚ
batch_normÚIdentityÚ
activationr   )Úselfr   r   Ú	__class__s      €úw/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/textnet/modeling_textnet.pyr   zTextNetConvLayer.__init__(   s  ø€ Ü‰ÑÔà!×2Ñ2ˆÔØ×(Ñ(ˆŒØ#)×#7Ñ#7ˆÔ ô ˜&×1Ñ1´5Ô9ð ×Ñ Ñ" aÑ'¨×);Ñ);¸AÑ)>À!Ñ)CÑDà×(Ñ(¨AÑ-ð 	ô —I‘IØ×$Ñ$Ø×$Ñ$Ø×/Ñ/Ø×%Ñ%ØØô
ˆŒ	ô Ÿ.™.¨×)AÑ)AÀ6×CXÑCXÓYˆŒäŸ+™+›-ˆŒØ×#Ñ#Ð/Ü% d×&>Ñ&>Ñ?ÓAˆD�Oð 0ó    Úhidden_statesÚreturnc                 óh   — | j                  |«      }| j                  |«      }| j                  |«      S ©N)r(   r+   r-   )r.   r2   s     r0   ÚforwardzTextNetConvLayer.forwardC   s-   € ØŸ	™	 -Ó0ˆØŸ™¨Ó6ˆØ�‰˜}Ó-Ð-r1   )	Ú__name__Ú
__module__Ú__qualname__r   r   Útorchr   r6   Ú__classcell__©r/   s   @r0   r   r   '   s,   ø„ ðB˜}õ Bð6. U§\¡\ð .°e·l±l÷ .r1   r   c            
       óp   ‡ — e Zd ZdZdededededef
ˆ fd„Zdej                  d	ej                  fd
„Z	ˆ xZ
S )ÚTextNetRepConvLayera›  
    This layer supports re-parameterization by combining multiple convolutional branches
    (e.g., main convolution, vertical, horizontal, and identity branches) during training.
    At inference time, these branches can be collapsed into a single convolution for
    efficiency, as per the re-parameterization paradigm.

    The "Rep" in the name stands for "re-parameterization" (introduced by RepVGG).
    r   Úin_channelsÚout_channelsr   r   c                 ót  •— t         ‰	| �  «        || _        || _        || _        || _        |d   dz
  dz  |d   dz
  dz  f}t        j                  «       | _        t        j                  |||||d¬«      | _
        t        j                  ||j                  ¬«      | _        |d   dz
  dz  df}d|d   dz
  dz  f}|d   dk7  rLt        j                  |||d   df||d¬«      | _        t        j                  ||j                  ¬«      | _        nd\  | _        | _        |d   dk7  rLt        j                  ||d|d   f||d¬«      | _        t        j                  ||j                  ¬«      | _        nd\  | _        | _        ||k(  r,|dk(  r't        j                  ||j                  ¬«      | _        y d | _        y )Nr   r   r   F)r?   r@   r   r   r   r   )Únum_featuresÚeps©NN)r   r   Únum_channelsr@   r   r   r$   ÚReLUr!   r%   Ú	main_convr)   r*   Úmain_batch_normÚvertical_convÚvertical_batch_normÚhorizontal_convÚhorizontal_batch_normÚrbr_identity)
r.   r   r?   r@   r   r   r   Úvertical_paddingÚhorizontal_paddingr/   s
            €r0   r   zTextNetRepConvLayer.__init__S   sÓ  ø€ Ü‰ÑÔà'ˆÔØ(ˆÔØ&ˆÔØˆŒà ‘N QÑ&¨1Ñ,¨{¸1©~ÀÑ/AÀaÑ.GÐHˆä#%§7¡7£9ˆÔ äŸ™Ø#Ø%Ø#ØØØô
ˆŒô  "Ÿ~™~¸<ÈV×MbÑMbÔcˆÔà(¨™^¨aÑ/°AÑ5°qÐ9ÐØ +¨a¡.°1Ñ"4¸Ñ!:Ð;Ðà�q‰>˜QÒÜ!#§¡Ø'Ø)Ø(¨™^¨QÐ/ØØ(Øô"ˆDÔô (*§~¡~À<ÐU[×UjÑUjÔ'kˆDÕ$à;EÑ8ˆDÔ Ô 8à�q‰>˜QÒÜ#%§9¡9Ø'Ø)Ø ¨A¡Ð/ØØ*Øô$ˆDÔ ô *,¯©À\ÐW]×WlÑWlÔ)mˆDÕ&à?IÑ<ˆDÔ  $Ô"<ð ˜{Ò*¨v¸ª{ô �N‰N¨¸×9NÑ9NÔOð 	Õð ð 	Õr1   r2   r3   c                 óx  — | j                  |«      }| j                  |«      }| j                  �'| j                  |«      }| j                  |«      }||z   }| j                  �'| j	                  |«      }| j                  |«      }||z   }| j                  �| j                  |«      }||z   }| j                  |«      S r5   )rG   rH   rI   rJ   rK   rL   rM   r!   )r.   r2   Úmain_outputsÚvertical_outputsÚhorizontal_outputsÚid_outs         r0   r6   zTextNetRepConvLayer.forwardŒ   sÏ   € Ø—~‘~ mÓ4ˆØ×+Ñ+¨LÓ9ˆð ×ÑÐ)Ø#×1Ñ1°-Ó@ÐØ#×7Ñ7Ð8HÓIÐØ'Ð*:Ñ:ˆLð ×ÑÐ+Ø!%×!5Ñ!5°mÓ!DÐØ!%×!;Ñ!;Ð<NÓ!OÐØ'Ð*<Ñ<ˆLà×ÑÐ(Ø×&Ñ& }Ó5ˆFØ'¨&Ñ0ˆLà×'Ñ'¨Ó5Ð5r1   )r7   r8   r9   Ú__doc__r   Úintr   r:   r   r6   r;   r<   s   @r0   r>   r>   I   sN   ø„ ñð7
˜}ð 7
¸3ð 7
Ècð 7
Ð`cð 7
Ðmpõ 7
ðr6 U§\¡\ð 6°e·l±l÷ 6r1   r>   c                   ó.   ‡ — e Zd Zdedefˆ fd„Zd„ Zˆ xZS )ÚTextNetStager   Údepthc                 óp  •— t         ‰| �  «        |j                  |   }|j                  |   }t	        |«      }|j
                  |   }|j
                  |dz      }|g|g|dz
  z  z   }|g|z  }	g }
t        ||	||«      D ]  }|
j                  t        |g|¢­Ž «       Œ t        j                  |
«      | _        y )Nr   )r   r   Úconv_layer_kernel_sizesÚconv_layer_stridesÚlenÚhidden_sizesÚzipÚappendr>   r$   Ú
ModuleListÚstage)r.   r   rY   r   r   Ú
num_layersÚstage_in_channel_sizeÚstage_out_channel_sizer?   r@   rb   Ústage_configr/   s               €r0   r   zTextNetStage.__init__¤   sÎ   ø€ Ü‰ÑÔØ×4Ñ4°UÑ;ˆØ×*Ñ*¨5Ñ1ˆä˜Ó%ˆ
Ø &× 3Ñ 3°EÑ :ÐØ!'×!4Ñ!4°U¸Q±YÑ!?Ðà,Ð-Ð1GÐ0HÈJÐYZÉNÑ0[Ñ[ˆØ.Ð/°*Ñ<ˆàˆÜ ¨\¸;ÈÓOò 	EˆLØ�L‰LÔ,¨VÐC°lÒCÕDð	Eä—]‘] 5Ó)ˆ�
r1   c                 ó8   — | j                   D ]
  } ||«      }Œ |S r5   )rb   )r.   Úhidden_stateÚblocks      r0   r6   zTextNetStage.forwardµ   s%   € Ø—Z‘Zò 	/ˆEÙ  Ó.‰Lð	/àÐr1   )r7   r8   r9   r   rV   r   r6   r;   r<   s   @r0   rX   rX   £   s   ø„ ð*˜}ð *°Sõ *ö"r1   rX   c            	       ób   ‡ — e Zd Zdefˆ fd„Z	 	 d	dej                  dedz  dedz  defd„Z	ˆ xZ
S )
ÚTextNetEncoderr   c                 óÚ   •— t         ‰| �  «        g }t        |j                  «      }t	        |«      D ]  }|j                  t        ||«      «       Œ t        j                  |«      | _	        y r5   )
r   r   r]   r[   Úranger`   rX   r$   ra   Ústages)r.   r   rn   Ú
num_stagesÚstage_ixr/   s        €r0   r   zTextNetEncoder.__init__¼   s\   ø€ Ü‰ÑÔàˆÜ˜×7Ñ7Ó8ˆ
Ü˜jÓ)ò 	:ˆHØ�M‰Mœ, v¨xÓ8Õ9ð	:ô —m‘m FÓ+ˆ�r1   Nrh   Úoutput_hidden_statesÚreturn_dictr3   c                 ó”   — |g}| j                   D ]  } ||«      }|j                  |«       Œ |s|f}|r||fz   S |S t        ||¬«      S )N)Úlast_hidden_stater2   )rn   r`   r
   )r.   rh   rq   rr   r2   rb   Úoutputs          r0   r6   zTextNetEncoder.forwardÆ   se   € ð &˜ˆØ—[‘[ò 	/ˆEÙ  Ó.ˆLØ× Ñ  Õ.ð	/ñ Ø"�_ˆFÙ0D�6˜]Ð,Ñ,ÐPÈ&ÐPä-ÀÐ\iÔjÐjr1   rD   )r7   r8   r9   r   r   r:   r   Úboolr
   r6   r;   r<   s   @r0   rk   rk   »   sS   ø„ ð,˜}õ ,ð -1Ø#'ñ	kà—l‘lðkð # T™kðkð ˜D‘[ð	kð
 
(÷kr1   rk   c                   ó    — e Zd ZU eed<   dZdZy)ÚTextNetPreTrainedModelr   ÚtextnetÚpixel_valuesN)r7   r8   r9   r   Ú__annotations__Úbase_model_prefixÚmain_input_name© r1   r0   rx   rx   Ø   s   … àÓØ!ÐØ$�Or1   rx   c                   ót   ‡ — e Zd Zˆ fd„Ze	 	 ddededz  dedz  deee	e   f   ee   z  e
z  fd„«       Zˆ xZS )	ÚTextNetModelc                 ó¸   •— t         ‰| �  |«       t        |«      | _        t	        |«      | _        t        j                  d«      | _        | j                  «        y )N)r   r   )
r   r   r   Ústemrk   Úencoderr$   ÚAdaptiveAvgPool2dÚpoolerÚ	post_init©r.   r   r/   s     €r0   r   zTextNetModel.__init__á   sD   ø€ Ü‰Ñ˜Ô Ü$ VÓ,ˆŒ	Ü% fÓ-ˆŒÜ×*Ñ*¨6Ó2ˆŒØ�‰Õr1   Nrz   rq   rr   r3   c                 ó:  — |�|n| j                   j                  }|�|n| j                   j                  }| j                  |«      }| j	                  |||¬«      }|d   }| j                  |«      }|s||f}	|r	|	|d   fz   S |	S t        |||r
|d   ¬«      S d ¬«      S )N©rq   rr   r   r   )rt   Úpooler_outputr2   )r   rr   rq   r‚   rƒ   r…   r   )
r.   rz   rq   rr   Úkwargsrh   Úencoder_outputsrt   Úpooled_outputru   s
             r0   r6   zTextNetModel.forwardè   sÑ   € ð &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð —y‘y Ó.ˆàŸ,™,ØÐ/CÐQ\ð 'ó 
ˆð ,¨AÑ.ÐØŸ™Ð$5Ó6ˆáØ'¨Ð7ˆFÙ5I�6˜_¨QÑ/Ð1Ñ1ÐUÈvÐUä7Ø/Ø'Ù0D˜/¨!Ñ,ô
ð 	
ð KOô
ð 	
r1   rD   )r7   r8   r9   r   r   r   rv   r#   r   Úlistr   r6   r;   r<   s   @r0   r€   r€   ß   sn   ø„ ôð ð -1Ø#'ñ	
àð
ð # T™kð
ð ˜D‘[ð	
ð 
ˆs�D˜‘Iˆ~Ñ	  s¡Ñ	+Ð.VÑ	Vò
ó ô
r1   r€   z‡
    TextNet Model with an image classification head on top (a linear layer on top of the pooled features), e.g. for
    ImageNet.
    )Úcustom_introc                   óŽ   ‡ — e Zd Zˆ fd„Ze	 	 	 	 d	dej                  dz  dej                  dz  dedz  dedz  de	f
d„«       Z
ˆ xZS )
ÚTextNetForImageClassificationc                 óö  •— t         ‰| �  |«       |j                  | _        t        |«      | _        t        j                  d«      | _        t        j                  «       | _	        |j                  dkD  r-t        j                  |j                  d   |j                  «      nt        j                  «       | _        t        j                  | j                  | j                  g«      | _        | j!                  «        y )N)r   r   r   éÿÿÿÿ)r   r   Ú
num_labelsr€   ry   r$   r„   Úavg_poolÚFlattenÚflattenÚLinearr^   r,   Úfcra   Ú
classifierr†   r‡   s     €r0   r   z&TextNetForImageClassification.__init__  s°   ø€ Ü‰Ñ˜Ô Ø ×+Ñ+ˆŒÜ# FÓ+ˆŒÜ×,Ñ,¨VÓ4ˆŒÜ—z‘z“|ˆŒØKQ×K\ÑK\Ð_`ÒK`”"—)‘)˜F×/Ñ/°Ñ3°V×5FÑ5FÔGÔfh×fqÑfqÓfsˆŒô Ÿ-™-¨¯©¸¿¹Ð(EÓFˆŒð 	�‰Õr1   Nrz   Úlabelsrq   rr   r3   c                 óX  — |�|n| j                   j                  }| j                  |||¬«      }|d   }| j                  D ]
  } ||«      }Œ | j	                  |«      }	d}
|�| j                  ||	| j                   «      }
|s|	f|dd z   }|
�|
f|z   S |S t        |
|	|j                  ¬«      S )a½  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).

        Examples:
        ```python
        >>> import torch
        >>> import httpx
        >>> from io import BytesIO
        >>> from transformers import TextNetForImageClassification, TextNetImageProcessor
        >>> from PIL import Image

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> processor = TextNetImageProcessor.from_pretrained("czczup/textnet-base")
        >>> model = TextNetForImageClassification.from_pretrained("czczup/textnet-base")

        >>> inputs = processor(images=image, return_tensors="pt")
        >>> with torch.no_grad():
        ...     outputs = model(**inputs)
        >>> outputs.logits.shape
        torch.Size([1, 2])
        ```Nr‰   r   r   )ÚlossÚlogitsr2   )r   rr   ry   rš   r™   Úloss_functionr   r2   )r.   rz   r›   rq   rr   r‹   Úoutputsrt   Úlayerrž   r�   ru   s               r0   r6   z%TextNetForImageClassification.forward  sÎ   € ðH &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà—,‘,˜|ÐBVÐdo�,ÓpˆØ# A™JÐØ—_‘_ò 	9ˆEÙ %Ð&7Ó 8Ñð	9à—‘Ð*Ó+ˆØˆàÐØ×%Ñ% f¨f°d·k±kÓBˆDáØ�Y ¨¨ Ñ,ˆFØ'+Ð'7�D�7˜VÑ#ÐC¸VÐCä3¸ÀfÐ\c×\qÑ\qÔrÐrr1   )NNNN)r7   r8   r9   r   r   r:   ÚFloatTensorÚ
LongTensorrv   r   r6   r;   r<   s   @r0   r‘   r‘   	  s   ø„ ôð ð 26Ø*.Ø,0Ø#'ñ3sà×'Ñ'¨$Ñ.ð3sð × Ñ  4Ñ'ð3sð # T™kð	3sð
 ˜D‘[ð3sð 
.ò3só ô3sr1   r‘   zP
    TextNet backbone, to be used with frameworks like DETR and MaskFormer.
    c                   óv   ‡ — e Zd ZdZˆ fd„Zeee	 	 d	dede	dz  de	dz  de
e
   ez  fd„«       «       «       Zˆ xZS )
ÚTextNetBackboneFc                 ó†   •— t         ‰| �  |«       t        |«      | _        |j                  | _        | j                  «        y r5   )r   r   r€   ry   r^   rB   r†   r‡   s     €r0   r   zTextNetBackbone.__init__]  s6   ø€ Ü‰Ñ˜Ô ä# FÓ+ˆŒØ"×/Ñ/ˆÔð 	�‰Õr1   Nrz   rq   rr   r3   c                 ó®  — |�|n| j                   j                  }|�|n| j                   j                  }| j                  |d|¬«      }|r|j                  n|d   }d}t        | j                  «      D ]  \  }}	|	| j                  v sŒ|||   fz  }Œ |s |f}
|r|r|j                  n|d   }|
|fz  }
|
S t        ||r|j                  d¬«      S dd¬«      S )aÑ  
        Examples:

        ```python
        >>> import torch
        >>> import httpx
        >>> from io import BytesIO
        >>> from PIL import Image
        >>> from transformers import AutoImageProcessor, AutoBackbone

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> with httpx.stream("GET", url) as response:
        ...     image = Image.open(BytesIO(response.read()))

        >>> processor = AutoImageProcessor.from_pretrained("czczup/textnet-base")
        >>> model = AutoBackbone.from_pretrained("czczup/textnet-base")

        >>> inputs = processor(image, return_tensors="pt")
        >>> with torch.no_grad():
        >>>     outputs = model(**inputs)
        ```NTr‰   r   r~   )Úfeature_mapsr2   Ú
attentions)	r   rr   rq   ry   r2   Ú	enumerateÚstage_namesÚout_featuresr	   )r.   rz   rq   rr   r‹   r    r2   r¨   Úidxrb   ru   s              r0   r6   zTextNetBackbone.forwardf  s  € ð> &1Ð%<‘kÀ$Ç+Á+×BYÑBYˆà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð —,‘,˜|À$ÐT_�,Ó`ˆá1<˜×-Ò-À'È!Á*ˆàˆÜ# D×$4Ñ$4Ó5ò 	6‰JˆC�Ø˜×)Ñ)Ò)Ø ¨sÑ!3Ð 5Ñ5‘ð	6ñ Ø"�_ˆFÙ#Ù9D × 5Ò 5È'ÐRSÉ*�Ø˜=Ð*Ñ*�ØˆMäØ%Ù3G˜'×/Ñ/Øô
ð 	
àMQØô
ð 	
r1   rD   )r7   r8   r9   Úhas_attentionsr   r   r   r   r   rv   r#   r	   r6   r;   r<   s   @r0   r¥   r¥   U  sr   ø„ ð €Nôð Ø Øð -1Ø#'ñ	5
àð5
ð # T™kð5
ð ˜D‘[ð	5
ð 
ˆu‰˜Ñ	&ò5
ó ó !ó ô5
r1   r¥   )r¥   r€   rx   r‘   )'rU   Útypingr   r:   Útorch.nnr$   r   Úactivationsr   Úbackbone_utilsr   r   Úmodeling_outputsr	   r
   r   r   Úmodeling_utilsr   Úutilsr   r   Úutils.genericr   Úconfiguration_textnetr   Ú
get_loggerr7   ÚloggerÚModuler   r>   rX   rk   rx   r€   r‘   r¥   Ú__all__r~   r1   r0   ú<module>r¼      s'  ðñ å ã Ý Ý å "ß H÷ó õ .ß ,Ý -Ý 0ð 
ˆ×	Ñ	˜HÓ	%€ô.�r—y‘yô .ôDW6˜"Ÿ)™)ô W6ôt�2—9‘9ô ô0k�R—Y‘Yô kð: ô%˜_ó %ó ð%ð ô&
Ð)ó &
ó ð&
ñR ðôôCsÐ$:ó CsóðCsñL ðôô
D
�mÐ%;ó D
óð
D
òN i�r1   