
    Z jD              	          S r SSKrSSKJr  SSKJr  SSKJr  SSKJ	r	J
r
  SSKJrJrJrJr  SS	KJr  SS
KJr  SSKJrJrJr  SSKJrJr  SSKJr  SSKJr  \R>                  " \ 5      r!S/S\RD                  S\#S\$S\RD                  4S jjr% " S S\RL                  5      r' " S S\RL                  5      r( " S S\RR                  5      r* " S S\RL                  5      r+ " S S\RL                  5      r, " S S \RL                  5      r-\ " S! S"\5      5       r. " S# S$\.5      r/\ " S% S&\.5      5       r0\" S'S(9 " S) S*\.5      5       r1\" S+S(9 " S, S-\	\.5      5       r2/ S.Qr3g)0zPyTorch ConvNextV2 model.    N)nn   )initialization)ACT2FN)BackboneMixinfilter_output_hidden_states)BackboneOutputBaseModelOutputWithNoAttention(BaseModelOutputWithPoolingAndNoAttention$ImageClassifierOutputWithNoAttention)PreTrainedModel)Unpack)TransformersKwargsauto_docstringlogging)can_return_tuplemerge_with_config_defaults)capture_outputs   )ConvNextV2Configinput	drop_probtrainingreturnc                    US:X  d  U(       d  U $ SU-
  nU R                   S   4SU R                  S-
  -  -   nU[        R                  " X@R                  U R
                  S9-   nUR                  5         U R                  U5      U-  nU$ )z[
Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).

        r   r   )r   )dtypedevice)shapendimtorchrandr   r   floor_div)r   r   r   	keep_probr   random_tensoroutputs          ڃ/root/GenerationalWealth/GenerationalWealth/venv/lib/python3.13/site-packages/transformers/models/convnextv2/modeling_convnextv2.py	drop_pathr)   (   s    
 CxII[[^

Q 77E

5ELL YYMYYy!M1FM    c                      ^  \ rS rSrSrSS\S-  SS4U 4S jjjrS\R                  S\R                  4S jr	S\
4S	 jrS
rU =r$ )ConvNextV2DropPath8   zXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).Nr   r   c                 .   > [         TU ]  5         Xl        g N)super__init__r   )selfr   	__class__s     r(   r1   ConvNextV2DropPath.__init__;   s    "r*   hidden_statesc                 B    [        XR                  U R                  5      $ r/   )r)   r   r   )r2   r5   s     r(   forwardConvNextV2DropPath.forward?   s    FFr*   c                      SU R                    3$ )Nzp=r   )r2   s    r(   
extra_reprConvNextV2DropPath.extra_reprB   s    DNN#$$r*   r:   r/   )__name__
__module____qualname____firstlineno____doc__floatr1   r!   Tensorr7   strr;   __static_attributes____classcell__r3   s   @r(   r,   r,   8   sQ    b#%$, #$ # #GU\\ Gell G%C % %r*   r,   c                   n   ^  \ rS rSrSrS\4U 4S jjrS\R                  S\R                  4S jr	Sr
U =r$ )	ConvNextV2GRNF   z)GRN (Global Response Normalization) layerdimc                    > [         TU ]  5         [        R                  " [        R
                  " SSSU5      5      U l        [        R                  " [        R
                  " SSSU5      5      U l        g )Nr   )r0   r1   r   	Parameterr!   zerosweightbias)r2   rK   r3   s     r(   r1   ConvNextV2GRN.__init__I   sL    ll5;;q!Q#<=LLQ1c!:;	r*   r5   r   c                     [         R                  R                  USSSS9nX"R                  SSS9S-   -  nU R                  X-  -  U R
                  -   U-   nU$ )N   )r   rS   T)ordrK   keepdim)rK   rU   ư>)r!   linalgvector_normmeanrO   rP   )r2   r5   global_featuresnorm_featuress       r(   r7   ConvNextV2GRN.forwardN   se    ,,22=aV]a2b'+?+?BPT+?+UX\+\]}'DE		QTaar*   )rP   rO   )r=   r>   r?   r@   rA   intr1   r!   FloatTensorr7   rE   rF   rG   s   @r(   rI   rI   F   s6    3<C <
U%6%6 5;L;L  r*   rI   c                   v   ^  \ rS rSrSrSSS.U 4S jjrS\R                  S\R                  4U 4S	 jjrS
r	U =r
$ )ConvNextV2LayerNormX   a5  LayerNorm that supports two data formats: channels_last (default) or channels_first.
The ordering of the dimensions in the inputs. channels_last corresponds to inputs with shape (batch_size, height,
width, channels) while channels_first corresponds to inputs with shape (batch_size, channels, height, width).
rW   channels_lastepsdata_formatc                `   > [         TU ]  " U4SU0UD6  US;  a  [        SU 35      eX0l        g )Nre   )rc   channels_firstzUnsupported data format: )r0   r1   NotImplementedErrorrf   )r2   normalized_shapere   rf   kwargsr3   s        r(   r1   ConvNextV2LayerNorm.__init__^   s=    )=s=f=AA%(A+&OPP&r*   featuresr   c                    > U R                   S:X  a9  UR                  SSSS5      n[        TU ]  U5      nUR                  SSSS5      nU$ [        TU ]  U5      nU$ )zt
Args:
    features: Tensor of shape (batch_size, channels, height, width) OR (batch_size, height, width, channels)
rh   r   rS   r   r   )rf   permuter0   r7   )r2   rm   r3   s     r(   r7   ConvNextV2LayerNorm.forwardd   sj    
 //''1a3Hwx0H''1a3H  wx0Hr*   rf   r=   r>   r?   r@   rA   r1   r!   rC   r7   rE   rF   rG   s   @r(   ra   ra   X   s9    
 15/ ' '   r*   ra   c                   f   ^  \ rS rSrSrU 4S jrS\R                  S\R                  4S jr	Sr
U =r$ )ConvNextV2Embeddingss   zThis class is comparable to (and inspired by) the SwinEmbeddings class
found in src/transformers/models/swin/modeling_swin.py.
c                   > [         TU ]  5         [        R                  " UR                  UR
                  S   UR                  UR                  S9U l        [        UR
                  S   SSS9U l	        UR                  U l        g )Nr   kernel_sizestriderW   rh   rd   )
r0   r1   r   Conv2dnum_channelshidden_sizes
patch_sizepatch_embeddingsra   	layernormr2   configr3   s     r(   r1   ConvNextV2Embeddings.__init__x   sr     "		!4!4Q!7VEVEV_e_p_p!
 -V-@-@-C[kl"//r*   pixel_valuesr   c                     UR                   S   nX R                  :w  a  [        S5      eU R                  U5      nU R	                  U5      nU$ )Nr   zeMake sure that the channel dimension of the pixel values match with the one set in the configuration.)r   r{   
ValueErrorr~   r   )r2   r   r{   
embeddingss       r(   r7   ConvNextV2Embeddings.forward   sT    #))!,,,,w  **<8
^^J/
r*   )r   r{   r~   )r=   r>   r?   r@   rA   r1   r!   r_   rC   r7   rE   rF   rG   s   @r(   rt   rt   s   s/    0E$5$5 %,,  r*   rt   c                   j   ^  \ rS rSrSrSU 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )	ConvNextV2Layer   a  This corresponds to the `Block` class in the original implementation.

There are two equivalent implementations: [DwConv, LayerNorm (channels_first), Conv, GELU,1x1 Conv]; all in (N, C,
H, W) (2) [DwConv, Permute to (N, H, W, C), LayerNorm (channels_last), Linear, GELU, Linear]; Permute back

The authors used (2) as they find it slightly faster in PyTorch.

Args:
    config ([`ConvNextV2Config`]): Model configuration class.
    dim (`int`): Number of input channels.
    drop_path (`float`): Stochastic depth rate. Default: 0.0.
c                   > [         TU ]  5         [        R                  " X"SSUS9U l        [        USS9U l        [        R                  " USU-  5      U l        [        UR                     U l        [        SU-  5      U l        [        R                  " SU-  U5      U l        US:  a  [        U5      U l        g [        R                   " 5       U l        g )N   r   )rx   paddinggroupsrW   re      r   )r0   r1   r   rz   dwconvra   r   Linearpwconv1r   
hidden_actactrI   grnpwconv2r,   Identityr)   )r2   r   rK   r)   r3   s       r(   r1   ConvNextV2Layer.__init__   s    iia3O,Sd;yya#g.&++, S)yyS#.:Cc/+I6r{{}r*   rm   r   c                 L   UnU R                  U5      nUR                  SSSS5      nU R                  U5      nU R                  U5      nU R	                  U5      nU R                  U5      nU R                  U5      nUR                  SSSS5      nX R                  U5      -   nU$ )Nr   rS   r   r   )r   ro   r   r   r   r   r   r)   )r2   rm   residuals      r(   r7   ConvNextV2Layer.forward   s    ;;x(##Aq!Q/>>(+<<)88H%88H%<<)##Aq!Q/nnX66r*   )r   r)   r   r   r   r   r   )r   rr   rG   s   @r(   r   r      s.    
]   r*   r   c                   j   ^  \ rS rSrSrSU 4S jjrS\R                  S\R                  4S jrSr	U =r
$ )	ConvNextV2Stage   a  ConvNeXTV2 stage, consisting of an optional downsampling layer + multiple residual blocks.

Args:
    config ([`ConvNextV2Config`]): Model configuration class.
    in_channels (`int`): Number of input channels.
    out_channels (`int`): Number of output channels.
    depth (`int`): Number of residual blocks.
    drop_path_rates(`list[float]`): Stochastic depth rates for each layer.
c                   > [         T	U ]  5         X#:w  d  US:  a:  [        R                  " [	        USSS9[        R
                  " X#XES9/5      U l        O[        R                  " 5       U l        U=(       d    S/U-  n[        R                  " [        U5       Vs/ s H  n[        XXx   S9PM     sn5      U l	        g s  snf )Nr   rW   rh   rd   rw   r   )rK   r)   )
r0   r1   r   
ModuleListra   rz   downsampling_layerranger   layers)
r2   r   in_channelsout_channelsrx   ry   depthdrop_path_ratesjr3   s
            r(   r1   ConvNextV2Stage.__init__   s    &&1*&(mm'K[\IIk[`'D# ')mmoD#):cUU]mm^cdi^jk^jYZ_VAST^jk
ks   B>rm   r   c                 r    U R                    H  nU" U5      nM     U R                   H  nU" U5      nM     U$ r/   r   r   )r2   rm   layers      r(   r7   ConvNextV2Stage.forward   s7    ,,EXH -[[EXH !r*   r   )rS   rS   rS   Nrr   rG   s   @r(   r   r      s-    
"   r*   r   c                   n   ^  \ rS rSr% \\S'   SrSrSrS/r	\
R                  " 5       U 4S j5       rSrU =r$ )	ConvNextV2PreTrainedModel   r   
convnextv2r   )imager   c                    > [         TU ]  U5        [        U[        5      (       aA  [        R
                  " UR                  5        [        R
                  " UR                  5        gg)zInitialize the weightsN)r0   _init_weights
isinstancerI   initzeros_rO   rP   )r2   moduler3   s     r(   r   'ConvNextV2PreTrainedModel._init_weights   sD     	f%fm,,KK&KK$ -r*    )r=   r>   r?   r@   r   __annotations__base_model_prefixmain_input_nameinput_modalities_no_split_modulesr!   no_gradr   rE   rF   rG   s   @r(   r   r      s;    $$O!*+
]]_% %r*   r   c                      ^  \ rS rSrSrS\0rU 4S jr\\	" SS9S\
R                  S\\   S\4S j5       5       rS	rU =r$ )
ConvNextV2Encoder   r5   c           
      P  > [         TU ]  U5        [        R                  " 5       U l        [
        R                  " SUR                  [        UR                  5      SS9R                  UR                  5       Vs/ s H  nUR                  5       PM     nnUR                  S   n[        UR                  5       HT  nUR                  U   n[        UUUUS:  a  SOSUR                  U   X5   S9nU R                  R!                  U5        UnMV     U R#                  5         g s  snf )Nr   cpu)r   rS   r   )r   r   ry   r   r   )r0   r1   r   r   stagesr!   linspacedrop_path_ratesumdepthssplittolistr|   r   
num_stagesr   append	post_init)	r2   r   xr   prev_chsiout_chsstager3   s	           r(   r1   ConvNextV2Encoder.__init__   s    mmo ^^Av'<'<c&-->PY^_eeflfsfst
t HHJt 	 
 &&q)v(()A))!,G#$$EqqmmA& / 2E KKu%H * 	%
s   :D#F)tie_last_hidden_statesrk   r   c                 J    U R                    H  nU" U5      nM     [        US9$ )N)last_hidden_state)r   r
   )r2   r5   rk   layer_modules       r(   r7   ConvNextV2Encoder.forward  s)     !KKL(7M ( .NNr*   )r   )r=   r>   r?   r@   r   r   _can_record_outputsr1   r   r   r!   rC   r   r   r
   r7   rE   rF   rG   s   @r(   r   r      sd    %O*O<.  E2O||O +,O 
(	O 3  Or*   r   c            	       x   ^  \ rS rSrU 4S jr\\ S	S\R                  S-  S\	\
   S\4S jj5       5       rSrU =r$ )
ConvNextV2Modeli  c                    > [         TU ]  U5        Xl        [        U5      U l        [        U5      U l        [        R                  " UR                  S   UR                  S9U l        U R                  5         g )NrV   r   )r0   r1   r   rt   r   r   encoderr   	LayerNormr|   layer_norm_epsr   r   r   s     r(   r1   ConvNextV2Model.__init__  s^     .v6(0 f&9&9"&=6CXCXY 	r*   Nr   rk   r   c                     Uc  [        S5      eU R                  U5      nU R                  " U40 UD6nUR                  nU R	                  UR                  SS/5      5      n[        UUUR                  S9$ )Nz You have to specify pixel_valuesrV   )r   pooler_outputr5   )r   r   r   r   r   rZ   r   r5   )r2   r   rk   embedding_outputencoder_outputsr   pooled_outputs          r(   r7   ConvNextV2Model.forward%  s    
 ?@@??<8:>,,GW:b[a:b+== '8'='=r2h'GH7/')77
 	
r*   )r   r   r   r   r/   )r=   r>   r?   r@   r1   r   r   r!   r_   r   r   r   r7   rE   rF   rG   s   @r(   r   r     sP     7;
!--4
GMN`Ga
	1
  
r*   r   z
    ConvNextV2 Model with an image classification head on top (a linear layer on top of the pooled features), e.g. for
    ImageNet.
    )custom_introc            	          ^  \ rS rSrSrU 4S jr\\ S
S\R                  S-  S\R                  S-  S\4S jj5       5       rS	rU =r$ ) ConvNextV2ForImageClassificationi;  Fc                 B  > [         TU ]  U5        UR                  U l        [        U5      U l        UR                  S:  a4  [
        R                  " UR                  S   UR                  5      U l        O[
        R                  " 5       U l        U R                  5         g )Nr   rV   )r0   r1   
num_labelsr   r   r   r   r|   
classifierr   r   r   s     r(   r1   )ConvNextV2ForImageClassification.__init__E  su      ++)&1 q  ii(;(;B(?ARARSDO kkmDO 	r*   Nr   labelsr   c                     U R                   " U40 UD6nUR                  nU R                  U5      nSnUb  U R                  X&U R                  S9n[        UUUR                  S9$ )ab  
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).
N)r   pooled_logitsr   )losslogitsr5   )r   r   r   loss_functionr   r   r5   )r2   r   r   rk   outputsr   r   r   s           r(   r7   (ConvNextV2ForImageClassification.forwardT  su     =AOOL<c\b<c--/%%VRVR]R]%^D3!//
 	
r*   )r   r   r   )NN)r=   r>   r?   r@   accepts_loss_kwargsr1   r   r   r!   r_   
LongTensorr   r7   rE   rF   rG   s   @r(   r   r   ;  s^       _c
!--4
EJEUEUX\E\
	-
  
r*   r   zT
    ConvNeXT V2 backbone, to be used with frameworks like DETR and MaskFormer.
    c            	       z   ^  \ rS rSrSrU 4S jr\\\S\	R                  S\\   S\4S j5       5       5       rSrU =r$ )	ConvNextV2Backbonein  Fc                 l  > [         TU ]  U5        [        U5      U l        [	        U5      U l        UR                  S   /UR                  -   U l        0 n[        U R                  U R                  5       H  u  p4[        USS9X#'   M     [        R                  " U5      U l        U R                  5         g )Nr   rh   rq   )r0   r1   rt   r   r   r   r|   num_featureszipout_featureschannelsra   r   
ModuleDicthidden_states_normsr   )r2   r   r  r   r{   r3   s        r(   r1   ConvNextV2Backbone.__init__w  s     .v6(0#0034v7J7JJ !#&t'8'8$--#HE)<\Wg)h& $I#%==1D#E  	r*   r   rk   r   c                 B   SUS'   U R                  U5      nU R                  " U40 UD6nUR                  n/ n[        U R                  U5       H<  u  pxXpR
                  ;   d  M  U R                  U   " U5      nUR                  U5        M>     [        [        U5      US9$ )aK  
Examples:

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

>>> 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("facebook/convnextv2-tiny-1k-224")
>>> model = AutoBackbone.from_pretrained("facebook/convnextv2-tiny-1k-224")

>>> inputs = processor(image, return_tensors="pt")
>>> outputs = model(**inputs)
```Toutput_hidden_states)feature_mapsr5   )
r   r   r5   r   stage_namesr  r  r   r	   tuple)	r2   r   rk   r   r   r5   r  r   hidden_states	            r(   r7   ConvNextV2Backbone.forward  s    8 *.%&??<8:>,,GW:b[a:b'55#&t'7'7#GE)))#77>|L##L1 $H
 5+>m\\r*   )r   r   r  r   )r=   r>   r?   r@   has_attentionsr1   r   r   r   r!   rC   r   r   r	   r7   rE   rF   rG   s   @r(   r   r   n  s^     N   %]ll%] +,%] 
	%]  ! %]r*   r   )r   r   r   r   )r   F)4rA   r!   r    r   r   activationsr   backbone_utilsr   r   modeling_outputsr	   r
   r   r   modeling_utilsr   processing_utilsr   utilsr   r   r   utils.genericr   r   utils.output_capturingr   configuration_convnextv2r   
get_loggerr=   loggerrC   rB   boolr)   Moduler,   rI   r   ra   rt   r   r   r   r   r   r   r   __all__r   r*   r(   <module>r     s}       & ! H  . & @ @ I 5 6 
		H	%U\\ e T V[VbVb  % %BII $",, 6299 0(bii (X!bii !H % % %"%O1 %OP !
/ !
 !
H )
'@ )
)
X ;](A ;];]| ur*   