Ë
    T^(h7 ã                  óf  — d Z ddlmZ ddlZddlZ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mZmZ ddlZddlmZ dd	lmZmZmZmZmZ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(m)Z)  e&jT                  e+«      Z,dZ-dZ.g d¢Z/dZ0dZ1e G d„ de"«      «       Z2e G d„ de"«      «       Z3e G d„ de"«      «       Z4e G d„ de"«      «       Z5dLd„Z6dMd„Z7	 dN	 	 	 	 	 	 	 	 	 dOd„Z8 G d„ dejr                  jt                  «      Z; G d„ d ejr                  jt                  «      Z< G d!„ d"ejr                  jt                  «      Z= G d#„ d$ejr                  jt                  «      Z> G d%„ d&ejr                  jt                  «      Z? G d'„ d(ejr                  jt                  «      Z@ G d)„ d*ejr                  jt                  «      ZA G d+„ d,ejr                  jt                  «      ZB G d-„ d.ejr                  jt                  «      ZC G d/„ d0ejr                  jt                  «      ZD G d1„ d2ejr                  jt                  «      ZE G d3„ d4ejr                  jt                  «      ZF G d5„ d6e«      ZGd7ZHd8ZIdPd9„ZJ G d:„ d;ejr                  jt                  «      ZKe G d<„ d=ejr                  jt                  «      «       ZL e$d>eH«       G d?„ d@eG«      «       ZM G dA„ dBejr                  jt                  «      ZN G dC„ dDejr                  jt                  «      ZO e$dEeH«       G dF„ dGeG«      «       ZP e$dHeH«       G dI„ dJeGe«      «       ZQg dK¢ZRy)QzTF 2.0 Swin Transformer model.é    )ÚannotationsN)Ú	dataclass)Úpartial)ÚAnyÚCallableÚDictÚIterableÚListÚOptionalÚTupleÚUnioné   )ÚACT2FN)ÚTFPreTrainedModelÚTFSequenceClassificationLossÚget_initializerÚkerasÚkeras_serializableÚunpack_inputs)Ú
shape_list)ÚModelOutputÚadd_code_sample_docstringsÚadd_start_docstringsÚ%add_start_docstrings_to_model_forwardÚloggingÚreplace_return_docstringsé   )Ú
SwinConfigr   z&microsoft/swin-tiny-patch4-window7-224)r   é1   i   ztabby, tabby catc                  óJ   — e Zd ZU dZdZded<   dZded<   dZded<   dZded<   y)	ÚTFSwinEncoderOutputaH  
    Swin encoder's outputs, with potential hidden states and attentions.

    Args:
        last_hidden_state (`tf.Tensor` of shape `(batch_size, sequence_length, hidden_size)`):
            Sequence of hidden-states at the output of the last layer of the model.
        hidden_states (`tuple(tf.Tensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `tf.Tensor` (one for the output of the embeddings + one for the output of each stage) of shape
            `(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the initial embedding outputs.
        attentions (`tuple(tf.Tensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `tf.Tensor` (one for each stage) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
        reshaped_hidden_states (`tuple(tf.Tensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `tf.Tensor` (one for the output of the embeddings + one for the output of each stage) of shape
            `(batch_size, hidden_size, height, width)`.

            Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
            include the spatial dimensions.
    NúOptional[tf.Tensor]Úlast_hidden_stateúTuple[tf.Tensor, ...] | NoneÚhidden_statesÚ
attentionsÚreshaped_hidden_states)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r#   Ú__annotations__r%   r&   r'   © ó    úg/var/www/skyplay_api_hub/venv/lib/python3.12/site-packages/transformers/models/swin/modeling_tf_swin.pyr!   r!   C   s7   … ñð2 .2ÐÐ*Ó1Ø26€MÐ/Ó6Ø/3€JÐ,Ó3Ø;?ÐÐ8Ô?r.   r!   c                  óX   — e Zd ZU dZdZded<   dZded<   dZded<   dZded	<   dZ	ded
<   y)ÚTFSwinModelOutputa  
    Swin model's outputs that also contains a pooling of the last hidden states.

    Args:
        last_hidden_state (`tf.Tensor` of shape `(batch_size, sequence_length, hidden_size)`):
            Sequence of hidden-states at the output of the last layer of the model.
        pooler_output (`tf.Tensor` of shape `(batch_size, hidden_size)`, *optional*, returned when `add_pooling_layer=True` is passed):
            Average pooling of the last layer hidden-state.
        hidden_states (`tuple(tf.Tensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `tf.Tensor` (one for the output of the embeddings + one for the output of each stage) of shape
            `(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the initial embedding outputs.
        attentions (`tuple(tf.Tensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `tf.Tensor` (one for each stage) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
        reshaped_hidden_states (`tuple(tf.Tensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `tf.Tensor` (one for the output of the embeddings + one for the output of each stage) of shape
            `(batch_size, hidden_size, height, width)`.

            Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
            include the spatial dimensions.
    Nr"   r#   útf.Tensor | NoneÚpooler_outputr$   r%   r&   r'   )
r(   r)   r*   r+   r#   r,   r3   r%   r&   r'   r-   r.   r/   r1   r1   d   sB   … ñð6 .2ÐÐ*Ó1Ø&*€MÐ#Ó*Ø26€MÐ/Ó6Ø/3€JÐ,Ó3Ø;?ÐÐ8Ô?r.   r1   c                  óh   — e Zd ZU dZdZded<   dZded<   dZded<   dZded	<   dZ	ded
<   e
d„ «       Zy)ÚTFSwinMaskedImageModelingOutputa‡  
    Swin masked image model outputs.

    Args:
        loss (`tf.Tensor` of shape `(1,)`, *optional*, returned when `bool_masked_pos` is provided):
            Masked image modeling (MLM) loss.
        reconstruction (`tf.Tensor` of shape `(batch_size, num_channels, height, width)`):
            Reconstructed pixel values.
        hidden_states (`tuple(tf.Tensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `tf.Tensor` (one for the output of the embeddings + one for the output of each stage) of shape
            `(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the initial embedding outputs.
        attentions (`tuple(tf.Tensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `tf.Tensor` (one for each stage) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
        reshaped_hidden_states (`tuple(tf.Tensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `tf.Tensor` (one for the output of the embeddings + one for the output of each stage) of shape
            `(batch_size, hidden_size, height, width)`.

            Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
            include the spatial dimensions.
    Nr2   Úlossr"   Úreconstructionr$   r%   r&   r'   c                óN   — t        j                  dt        «       | j                  S )Nzžlogits attribute is deprecated and will be removed in version 5 of Transformers. Please use the reconstruction attribute to retrieve the final output instead.)ÚwarningsÚwarnÚFutureWarningr7   ©Úselfs    r/   Úlogitsz&TFSwinMaskedImageModelingOutput.logits«   s%   € ä�‰ð]äô	
ð
 ×"Ñ"Ð"r.   )r(   r)   r*   r+   r6   r,   r7   r%   r&   r'   Úpropertyr>   r-   r.   r/   r5   r5   ˆ   sS   … ñð6 "€DÐ
Ó!Ø*.€NÐ'Ó.Ø26€MÐ/Ó6Ø/3€JÐ,Ó3Ø;?ÐÐ8Ó?àñ#ó ñ#r.   r5   c                  óX   — e Zd ZU dZdZded<   dZded<   dZded<   dZded	<   dZ	ded
<   y)ÚTFSwinImageClassifierOutputaÁ  
    Swin outputs for image classification.

    Args:
        loss (`tf.Tensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
            Classification (or regression if config.num_labels==1) loss.
        logits (`tf.Tensor` of shape `(batch_size, config.num_labels)`):
            Classification (or regression if config.num_labels==1) scores (before SoftMax).
        hidden_states (`tuple(tf.Tensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `tf.Tensor` (one for the output of the embeddings + one for the output of each stage) of shape
            `(batch_size, sequence_length, hidden_size)`.

            Hidden-states of the model at the output of each layer plus the initial embedding outputs.
        attentions (`tuple(tf.Tensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
            Tuple of `tf.Tensor` (one for each stage) of shape `(batch_size, num_heads, sequence_length,
            sequence_length)`.

            Attentions weights after the attention softmax, used to compute the weighted average in the self-attention
            heads.
        reshaped_hidden_states (`tuple(tf.Tensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
            Tuple of `tf.Tensor` (one for the output of the embeddings + one for the output of each stage) of shape
            `(batch_size, hidden_size, height, width)`.

            Hidden-states of the model at the output of each layer plus the initial embedding outputs reshaped to
            include the spatial dimensions.
    Nr2   r6   r"   r>   r$   r%   r&   r'   )
r(   r)   r*   r+   r6   r,   r>   r%   r&   r'   r-   r.   r/   rA   rA   µ   sA   … ñð6 "€DÐ
Ó!Ø"&€FÐÓ&Ø26€MÐ/Ó6Ø/3€JÐ,Ó3Ø;?ÐÐ8Ô?r.   rA   c           	     óÊ   — t        | «      \  }}}}t        j                  | |||z  |||z  ||f«      } t        j                  | d«      }t        j                  |d|||f«      }|S )z2
    Partitions the given input into windows.
    ©r   r   r   é   é   é   éÿÿÿÿ)r   ÚtfÚreshapeÚ	transpose)Úinput_featureÚwindow_sizeÚ
batch_sizeÚheightÚwidthÚnum_channelsÚwindowss          r/   Úwindow_partitionrR   Ù   st   € ô /9¸Ó.GÑ+€J�˜˜|Ü—J‘JØØ	�V˜{Ñ*¨K¸À+Ñ9MÈ{Ð\hÐió€Mô �l‰l˜=Ð*<Ó=€GÜ�j‰j˜ 2 {°KÀÐ"NÓO€GØ€Nr.   c           	     ót  — t        j                  | «      d   }t        j                  ||z  ||z  z  t         j                  «      }t         j                  j                  ||«      }t        j                  | |||z  ||z  ||df«      } t        j                  | d«      } t        j                  | |||df«      } | S )z?
    Merges windows to produce higher resolution features.
    r   rG   rC   )rH   ÚshapeÚcastÚint32ÚmathÚfloordivrI   rJ   )rQ   rL   rN   rO   ÚxÚyrM   s          r/   Úwindow_reverser[   ç   s¬   € ô 	�‰�Ó˜!Ñ€AÜ
�‰�˜‘ +°Ñ";Ñ<¼b¿h¹hÓG€AÜ—‘×!Ñ! ! QÓ'€JÜ�j‰jØ�*˜f¨Ñ3°U¸kÑ5IÈ;ÐXcÐegÐhó€Gô �l‰l˜7Ð$6Ó7€GÜ�j‰j˜ :¨v°u¸bÐ"AÓB€GØ€Nr.   c                óþ   — |dk(  s|s| S d|z
  }t        | «      }t        |«      }|d   gdg|dz
  z  z   }t        j                  j	                  |«      }t        j
                  ||k  dd«      }|dkD  r|r||z  }| |z  S )zb
    Drop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).
    ç        r   r   ç      ð?)r   ÚlenrH   ÚrandomÚuniformÚwhere)	ÚinputÚ	drop_probÚtrainingÚscale_by_keepÚ	keep_probÚinput_shapeÚndimrT   Úrandom_tensors	            r/   Ú	drop_pathrk   ö   s•   € ð �CÒ™xØˆØ�I‘€IÜ˜UÓ#€KÜˆ{Ó€DØ˜‰^Ð ˜s d¨Q¡hÑ/Ñ/€EÜ—I‘I×%Ñ% eÓ,€MÜ—H‘H˜]¨iÑ7¸¸cÓB€MØ�3‚™=Ø˜Ñ"ˆØ�=Ñ Ð r.   c                  óH   ‡ — e Zd ZdZddˆ fd„Zdd„Z	 d	 	 	 	 	 	 	 d	d„Zˆ xZS )
ÚTFSwinEmbeddingszW
    Construct the patch and position embeddings. Optionally, also the mask token.
    c                óÀ  •— t        ‰| �  di |¤Ž t        |d¬«      | _        | j                  j                  | _        | j                  j
                  | _        |j                  | _        || _        |j                  | _	        t        j                  j                  dd¬«      | _        t        j                  j                  |j                  d¬«      | _        || _        y )NÚpatch_embeddings©ÚnameÚnormçñhãˆµøä>)rq   ÚepsilonÚdropoutr-   )ÚsuperÚ__init__ÚTFSwinPatchEmbeddingsro   Únum_patchesÚ	grid_sizeÚ
patch_gridÚ	embed_dimÚuse_mask_tokenÚuse_absolute_embeddingsr   ÚlayersÚLayerNormalizationrr   ÚDropoutÚhidden_dropout_probru   Úconfig)r=   rƒ   r}   ÚkwargsÚ	__class__s       €r/   rw   zTFSwinEmbeddings.__init__  s°   ø€ Ü‰ÑÑ"˜6Ò"Ü 5°fÐCUÔ VˆÔØ×0Ñ0×<Ñ<ˆÔØ×/Ñ/×9Ñ9ˆŒØ×)Ñ)ˆŒØ,ˆÔØ'-×'EÑ'EˆÔ$ä—L‘L×3Ñ3¸ÈÐ3ÓNˆŒ	Ü—|‘|×+Ñ+¨F×,FÑ,FÈYÐ+ÓWˆŒØˆ�r.   c                óÂ  — | j                   r'| j                  dd| j                  fdd¬«      | _        nd | _        | j                  r4| j                  d| j
                  dz   | j                  fdd¬«      | _        nd | _        | j                  ry d| _        t        | dd «      �Mt        j                  | j                  j                  «      5  | j                  j                  d «       d d d «       t        | d	d «      �dt        j                  | j                  j                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       t        | d
d «      �Nt        j                  | j                   j                  «      5  | j                   j                  d «       d d d «       y y # 1 sw Y   ŒÖxY w# 1 sw Y   ŒqxY w# 1 sw Y   y xY w)Nr   ÚzerosÚ
mask_token©rT   Úinitializerrq   Úpositional_embeddings)rŠ   rq   Tro   rr   ru   )r}   Ú
add_weightr|   rˆ   r~   ry   Úposition_embeddingsÚbuiltÚgetattrrH   Ú
name_scopero   rq   Úbuildrr   rƒ   ru   ©r=   rh   s     r/   r‘   zTFSwinEmbeddings.build  s‘  € Ø×ÒØ"Ÿo™o°Q¸¸4¿>¹>Ð4JÐX_Ðfr˜oÓsˆD�Oà"ˆDŒOà×'Ò'Ø'+§¡Ø�D×$Ñ$ qÑ(¨$¯.©.Ð9ÀwÐUlð (7ó (ˆDÕ$ð (,ˆDÔ$à�:Š:ØØˆŒ
Ü�4Ð+¨TÓ2Ð>Ü—‘˜t×4Ñ4×9Ñ9Ó:ñ 2Ø×%Ñ%×+Ñ+¨DÔ1÷2ä�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ EØ—	‘	—‘  t¨T¯[©[×-BÑ-BÐ CÔD÷Eä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ð )ð 6÷2ð 2ú÷Eð Eú÷)ð )ús$   ÃF=Ä&3G	ÆGÆ=GÇ	GÇGc                óÒ  — | j                  ||¬«      \  }}| j                  ||¬«      }t        |«      \  }}}|�|t        j                  | j
                  |d«      }	t        j                  |	|d«      }	t        j                  |d«      }
t        j                  |
|	j                  «      }
|d|
z
  z  |	|
z  z   }| j                  �|| j                  z   }| j                  ||¬«      }||fS )N©re   r   r   rG   r^   )ro   rr   r   rH   Úrepeatrˆ   Úexpand_dimsrU   Údtyper�   ru   )r=   Úpixel_valuesÚbool_masked_posre   Ú
embeddingsÚoutput_dimensionsrM   Úseq_lenÚ_Úmask_tokensÚmasks              r/   ÚcallzTFSwinEmbeddings.call5  sé   € ð )-×(=Ñ(=¸lÐU]Ð(=Ó(^Ñ%ˆ
Ð%Ø—Y‘Y˜z°H�YÓ=ˆ
Ü!+¨JÓ!7Ñˆ
�G˜QàÐ&ÜŸ)™) D§O¡O°ZÀÓCˆKÜŸ)™) K°¸!Ó<ˆKä—>‘> /°2Ó6ˆDÜ—7‘7˜4 ×!2Ñ!2Ó3ˆDà# s¨T¡zÑ2°[À4Ñ5GÑGˆJà×#Ñ#Ð/Ø# d×&>Ñ&>Ñ>ˆJà—\‘\ *°x�\Ó@ˆ
àÐ,Ð,Ð,r.   ©F)rƒ   r   r}   ÚboolÚreturnÚNone©rh   útf.TensorShaper£   r¤   )NF)r˜   ú	tf.Tensorr™   úOptional[bool]re   r¢   r£   ú!Tuple[tf.Tensor, Tuple[int, int]])r(   r)   r*   r+   rw   r‘   r    Ú__classcell__©r…   s   @r/   rm   rm   	  s>   ø„ ñöó)ð6 afð-Ø%ð-Ø8Fð-ØY]ð-à	*÷-r.   rm   c                  ó<   ‡ — e Zd ZdZˆ fd„Zdd„Zddd„Zd	d„Zˆ xZS )
rx   z#
    Image to Patch Embedding.
    c                óB  •— t        ‰| �  di |¤Ž |j                  |j                  }}|j                  |j
                  }}t        |t        j                  j                  «      r|n||f}t        |t        j                  j                  «      r|n||f}|d   |d   z  |d   |d   z  z  }|| _        || _        || _        || _
        |d   |d   z  |d   |d   z  f| _        t        j                  j                  || j                  | j                  dd¬«      | _        y )Nr   r   ÚvalidÚ
projection)ÚfiltersÚkernel_sizeÚstridesÚpaddingrq   r-   )rv   rw   Ú
image_sizeÚ
patch_sizerP   r|   Ú
isinstanceÚcollectionsÚabcr	   ry   rz   r   r   ÚConv2Dr¯   )	r=   rƒ   r„   r´   rµ   rP   Úhidden_sizery   r…   s	           €r/   rw   zTFSwinPatchEmbeddings.__init__R  s  ø€ Ü‰ÑÑ"˜6Ò"Ø!'×!2Ñ!2°F×4EÑ4E�Jˆ
Ø$*×$7Ñ$7¸×9IÑ9I�kˆÜ#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ü#-¨j¼+¿/¹/×:RÑ:RÔ#S‘ZÐZdÐfpÐYqˆ
Ø! !‘}¨
°1©Ñ5¸*ÀQ¹-È:ÐVWÉ=Ñ:XÑYˆØ$ˆŒØ$ˆŒØ(ˆÔØ&ˆÔØ$ Q™-¨:°a©=Ñ8¸*ÀQ¹-È:ÐVWÉ=Ñ:XÐYˆŒäŸ,™,×-Ñ-ØØŸ™Ø—O‘OØØð .ó 
ˆ�r.   c                óR  — || j                   d   z  dk7  r>dddd| j                   d   || j                   d   z  z
  ff}t        j                  ||«      }|| j                   d   z  dk7  r>ddd| j                   d   || j                   d   z  z
  fdf}t        j                  ||«      }|S )Nr   r   ©r   r   )rµ   rH   Úpad)r=   r˜   rN   rO   Ú
pad_valuess        r/   Ú	maybe_padzTFSwinPatchEmbeddings.maybe_padg  s¸   € Ø�4—?‘? 1Ñ%Ñ%¨Ò*Ø  &¨&°1°d·o±oÀaÑ6HÈ5ÐSW×SbÑSbÐcdÑSeÑKeÑ6eÐ2fÐgˆJÜŸ6™6 ,°
Ó;ˆLØ�D—O‘O AÑ&Ñ&¨!Ò+Ø  &¨1¨d¯o©o¸aÑ.@À6ÈDÏOÉOÐ\]ÑL^ÑC^Ñ.^Ð*_ÐagÐhˆJÜŸ6™6 ,°
Ó;ˆLØÐr.   c                ó°  — t        |«      \  }}}}t        j                  «       r|| j                  k7  rt	        d«      ‚| j                  |||«      }t        j                  |d«      }| j                  ||¬«      }t        j                  |d«      }t        |«      \  }}	}}||f}
t        j                  |||	df«      }t        j                  |d«      }||
fS )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.©r   rD   r   r   r”   ©r   r   r   rD   rG   ©r   rD   r   )	r   rH   Úexecuting_eagerlyrP   Ú
ValueErrorr¿   rJ   r¯   rI   )r=   r˜   re   r�   rP   rN   rO   rš   rM   Úchannelsr›   s              r/   r    zTFSwinPatchEmbeddings.callp  sØ   € Ü)3°LÓ)AÑ&ˆˆ<˜ Ü×ÑÔ! l°d×6GÑ6GÒ&GÜØwóð ð —~‘~ l°F¸EÓBˆô —|‘| L°,Ó?ˆà—_‘_ \¸H�_ÓEˆ
ô —\‘\ *¨lÓ;ˆ
ä.8¸Ó.DÑ+ˆ
�H˜f eØ# U˜OÐä—Z‘Z 
¨Z¸À2Ð,FÓGˆ
Ü—\‘\ *¨iÓ8ˆ
ØÐ,Ð,Ð,r.   c                ó  — | j                   ry d| _         t        | dd «      �\t        j                  | j                  j
                  «      5  | j                  j                  d d d | j                  g«       d d d «       y y # 1 sw Y   y xY w)NTr¯   )rŽ   r�   rH   r�   r¯   rq   r‘   rP   r’   s     r/   r‘   zTFSwinPatchEmbeddings.buildˆ  s}   € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ MØ—‘×%Ñ% t¨T°4¸×9JÑ9JÐ&KÔL÷Mð Mð 9÷Mð Mús   Á*A?Á?B)r˜   r§   rN   ÚintrO   rÈ   r£   r§   r¡   )r˜   r§   re   r¢   r£   r©   ©N©	r(   r)   r*   r+   rw   r¿   r    r‘   rª   r«   s   @r/   rx   rx   M  s   ø„ ñô
ó*ô-÷0Mr.   rx   c                  óP   ‡ — e Zd ZdZ	 d	 	 	 	 	 	 	 dˆ fd„Zdd„Zd	d
d„Zdd„Zˆ xZS )ÚTFSwinPatchMergingaB  
    Patch Merging Layer.

    Args:
        input_resolution (`Tuple[int]`):
            Resolution of input feature.
        dim (`int`):
            Number of input channels.
        norm_layer (`keras.layer.Layer`, *optional*, defaults to `keras.layers.LayerNormalization`):
            Normalization layer class.
    c                ó  •— t        ‰| �  d	i |¤Ž || _        || _        t        j
                  j                  d|z  dd¬«      | _        |€'t        j
                  j                  dd¬«      | _	        y  |d¬«      | _	        y )
NrD   FÚ	reduction)Úuse_biasrq   rs   rr   ©rt   rq   rp   r-   )
rv   rw   Úinput_resolutionÚdimr   r   ÚDenserÎ   r€   rr   )r=   rÑ   rÒ   Ú
norm_layerr„   r…   s        €r/   rw   zTFSwinPatchMerging.__init__ž  sr   ø€ ô 	‰ÑÑ"˜6Ò"Ø 0ˆÔØˆŒÜŸ™×+Ñ+¨A°©G¸eÈ+Ð+ÓVˆŒØÐäŸ™×7Ñ7ÀÈ6Ð7ÓRˆD�Iá"¨Ô/ˆD�Ir.   c                óz   — |dz  dk(  xs |dz  dk(  }|r&dd|dz  fd|dz  fdf}t        j                  ||«      }|S )NrD   r   r¼   r   )rH   r½   )r=   rK   rN   rO   Ú
should_padr¾   s         r/   r¿   zTFSwinPatchMerging.maybe_pad«  sS   € Ø˜q‘j A‘oÒ:¨5°1©9¸©>ˆ
ÙØ  1 f¨q¡j /°A°u¸q±y°>À6ÐJˆJÜŸF™F =°*Ó=ˆMàÐr.   c                óØ  — |\  }}t        |«      \  }}}t        j                  |||||f«      }| j                  |||«      }|d d …dd d…dd d…d d …f   }	|d d …dd d…dd d…d d …f   }
|d d …dd d…dd d…d d …f   }|d d …dd d…dd d…d d …f   }t        j                  |	|
||gd«      }t        j                  ||dd|z  f«      }| j                  ||¬«      }| j                  ||¬«      }|S )Nr   rD   r   rG   rE   r”   )r   rH   rI   r¿   Úconcatrr   rÎ   )r=   rK   Úinput_dimensionsre   rN   rO   rM   r�   rP   Úinput_feature_0Úinput_feature_1Úinput_feature_2Úinput_feature_3s                r/   r    zTFSwinPatchMerging.call³  s)  € Ø(‰ˆ�ä&0°Ó&?Ñ#ˆ
�A�|äŸ
™
 =°:¸vÀuÈlÐ2[Ó\ˆàŸ™ }°f¸eÓDˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆà'ª¨1¨4¨a¨4°°°A°²qÐ(8Ñ9ˆäŸ	™	 ?°OÀ_ÐVeÐ"fÐhjÓkˆÜŸ
™
Ø˜J¨¨A°Ñ,<Ð=ó
ˆð Ÿ	™	 -¸(˜	ÓCˆØŸ™ }¸x˜ÓHˆàÐr.   c                ó  — | j                   ry d| _         t        | dd «      �]t        j                  | j                  j
                  «      5  | j                  j                  d d d| j                  z  g«       d d d «       t        | dd «      �^t        j                  | j                  j
                  «      5  | j                  j                  d d d| j                  z  g«       d d d «       y y # 1 sw Y   ŒuxY w# 1 sw Y   y xY w)NTrÎ   rE   rr   )	rŽ   r�   rH   r�   rÎ   rq   r‘   rÒ   rr   r’   s     r/   r‘   zTFSwinPatchMerging.buildÎ  sÓ   € Ø�:Š:ØØˆŒ
Ü�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ AØ—‘×$Ñ$ d¨D°!°d·h±h±,Ð%?Ô@÷Aä�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ <Ø—	‘	—‘  t¨Q°·±©\Ð :Ô;÷<ð <ð 3÷Að Aú÷<ð <ús   Á,C+Â5,C7Ã+C4Ã7D rÉ   )rÑ   úTuple[int, int]rÒ   rÈ   rÔ   úOptional[Callable]r£   r¤   )rK   r§   rN   rÈ   rO   rÈ   r£   r§   r¡   )rK   r§   rÙ   rß   re   r¢   r£   r§   rÊ   r«   s   @r/   rÌ   rÌ   ‘  sC   ø„ ñ
ð ]að0Ø /ð0Ø69ð0ØGYð0à	õ0óô÷6	<r.   rÌ   c                  ó0   ‡ — e Zd ZdZddˆ fd„Zddd„Zˆ xZS )ÚTFSwinDropPathzXDrop paths (Stochastic Depth) per sample (when applied in main path of residual blocks).c                óH   •— t        t        | �
  di |¤Ž || _        || _        y ©Nr-   )rv   râ   rw   rd   rf   )r=   rd   rf   r„   r…   s       €r/   rw   zTFSwinDropPath.__init__Ý  s$   ø€ ÜŒn˜dÑ,Ñ6¨vÒ6Ø"ˆŒØ*ˆÕr.   c                óF   — t        || j                  || j                  «      S rÉ   )rk   rd   rf   )r=   rc   re   s      r/   r    zTFSwinDropPath.callâ  s   € Ü˜ §¡°¸$×:LÑ:LÓMÐMr.   )NT)rd   zOptional[float]rf   r¢   r£   r¤   r¡   )rc   r§   re   r¢   r£   r§   ©r(   r)   r*   r+   rw   r    rª   r«   s   @r/   râ   râ   Ú  s   ø„ Ùbö+÷
Nð Nr.   râ   c                  óX   ‡ — e Zd Zdˆ fd„Zdd„Zdd„Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 d	d„Zˆ xZS )
ÚTFSwinSelfAttentionc                ót  •— t        ‰| �  d	i |¤Ž ||z  dk7  rt        d|› d|› d�«      ‚|| _        t	        ||z  «      | _        | j                  | j
                  z  | _        |j                  }t        |t        j                  j                  «      r|n||f| _        t        j                  j                  | j                  t        |j                   «      |j"                  d¬«      | _        t        j                  j                  | j                  t        |j                   «      |j"                  d¬«      | _        t        j                  j                  | j                  t        |j                   «      |j"                  d¬«      | _        t        j                  j+                  |j,                  «      | _        y )
Nr   zThe hidden size (z6) is not a multiple of the number of attention heads (ú)Úquery)Úkernel_initializerrÏ   rq   ÚkeyÚvaluer-   )rv   rw   rÅ   Únum_attention_headsrÈ   Úattention_head_sizeÚall_head_sizerL   r¶   r·   r¸   r	   r   r   rÓ   r   Úinitializer_rangeÚqkv_biasrë   rí   rî   r�   Úattention_probs_dropout_probru   )r=   rƒ   rÒ   Ú	num_headsr„   rL   r…   s         €r/   rw   zTFSwinSelfAttention.__init__ç  s€  ø€ Ü‰ÑÑ"˜6Ò"Ø�‰?˜aÒÜØ# C 5Ð(^Ð_hÐ^iÐijÐkóð ð $-ˆÔ Ü#& s¨Y¡Ó#7ˆÔ Ø!×5Ñ5¸×8PÑ8PÑPˆÔØ×(Ñ(ˆä% k´;·?±?×3KÑ3KÔL‰KÐS^Ð`kÐRlð 	Ôô —\‘\×'Ñ'Ø×ÑÜ.¨v×/GÑ/GÓHØ—_‘_Øð	 (ó 
ˆŒ
ô —<‘<×%Ñ%Ø×ÑÜ.¨v×/GÑ/GÓHØ—_‘_Øð	 &ó 
ˆŒô —\‘\×'Ñ'Ø×ÑÜ.¨v×/GÑ/GÓHØ—_‘_Øð	 (ó 
ˆŒ
ô —|‘|×+Ñ+¨F×,OÑ,OÓPˆ�r.   c                ó"  — | j                  d| j                  d   z  dz
  d| j                  d   z  dz
  z  | j                  fdd¬«      | _        | j                  | j                  d   dz  | j                  d   dz  fdt        j
                  d¬	«      | _        t	        j                  | j                  d   «      }t	        j                  | j                  d   «      }t	        j                  t	        j                  ||d
¬«      «      }t	        j                  |t        |«      d   df«      }|d d …d d …d f   |d d …d d d …f   z
  }t	        j                  |d«      }t	        j                  |d¬«      \  }}|| j                  d   dz
  z  }|d| j                  d   z  dz
  z  }|| j                  d   dz
  z  }t	        j                  ||gd¬«      }| j                  j                  t	        j                  t	        j                   |d¬«      t        j
                  «      «       | j"                  ry d| _        t%        | dd «      �Zt	        j&                  | j(                  j*                  «      5  | j(                  j-                  d d | j.                  g«       d d d «       t%        | dd «      �Zt	        j&                  | j0                  j*                  «      5  | j0                  j-                  d d | j.                  g«       d d d «       t%        | dd «      �[t	        j&                  | j2                  j*                  «      5  | j2                  j-                  d d | j.                  g«       d d d «       y y # 1 sw Y   ŒÙxY w# 1 sw Y   Œ~xY w# 1 sw Y   y xY w)NrD   r   r   r‡   Úrelative_position_bias_tabler‰   FÚrelative_position_index)rT   Ú	trainabler—   rq   Úij)ÚindexingrG   )r   rD   r   ©ÚaxisTrë   rí   rî   )rŒ   rL   rï   r÷   rH   rV   rø   ÚrangeÚstackÚmeshgridrI   r   rJ   ÚunstackÚassignrU   Ú
reduce_sumrŽ   r�   r�   rë   rq   r‘   rñ   rí   rî   )	r=   rh   Úcoords_hÚcoords_wÚcoordsÚcoords_flattenÚrelative_coordsÚstack_0Ústack_1s	            r/   r‘   zTFSwinSelfAttention.build  s!  € Ø,0¯O©OØ˜×)Ñ)¨!Ñ,Ñ,¨qÑ0°Q¸×9IÑ9IÈ!Ñ9LÑ5LÈqÑ5PÑQÐTX×TlÑTlÐmØØ/ð -<ó -
ˆÔ)ð
 (,§¡Ø×#Ñ# AÑ&¨!Ñ+¨T×-=Ñ-=¸aÑ-@ÀAÑ-EÐFØÜ—(‘(Ø*ð	 (7ó (
ˆÔ$ô —8‘8˜D×,Ñ,¨QÑ/Ó0ˆÜ—8‘8˜D×,Ñ,¨QÑ/Ó0ˆÜ—‘œ"Ÿ+™+ h°À4ÔHÓIˆÜŸ™ F¬Z¸Ó-?ÀÑ-BÀBÐ,GÓHˆØ(ªªA¨t¨Ñ4°~ÂaÈÊqÀjÑ7QÑQˆÜŸ,™, ¸	ÓBˆäŸ:™: o¸AÔ>Ñˆ�Ø�4×#Ñ# AÑ&¨Ñ*Ñ*ˆØ�1�t×'Ñ'¨Ñ*Ñ*¨QÑ.Ñ.ˆØ�4×#Ñ# AÑ&¨Ñ*Ñ*ˆÜŸ(™( G¨WÐ#5¸AÔ>ˆà×$Ñ$×+Ñ+¬B¯G©G´B·M±MÀ/ÐXZÔ4[Ô]_×]eÑ]eÓ,fÔgà�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ CØ—
‘
× Ñ  $¨¨d×.@Ñ.@Ð!AÔB÷Cä�4˜ Ó%Ð1Ü—‘˜tŸx™xŸ}™}Ó-ñ AØ—‘—‘  d¨D×,>Ñ,>Ð?Ô@÷Aä�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ CØ—
‘
× Ñ  $¨¨d×.@Ñ.@Ð!AÔB÷Cð Cð 4÷Cð Cú÷Að Aú÷Cð Cús$   É,)M-Ë)M9Ì:)NÍ-M6Í9NÎNc                ó¨   — t        |«      d d | j                  | j                  gz   }t        j                  ||«      }t        j
                  |d«      S )NrG   ©r   rD   r   r   )r   rï   rð   rH   rI   rJ   )r=   rY   Únew_x_shapes      r/   Útranspose_for_scoresz(TFSwinSelfAttention.transpose_for_scores5  sI   € Ü  “m C RÐ(¨D×,DÑ,DÀd×F^ÑF^Ð+_Ñ_ˆÜ�J‰J�q˜+Ó&ˆÜ�|‰|˜A˜|Ó,Ð,r.   c                ób  — t        |«      \  }}}| j                  |«      }	| j                  | j                  |«      «      }
| j                  | j	                  |«      «      }| j                  |	«      }t        j                  |t        j                  |
d«      «      }|t        j                  | j                  «      z  }t        j                  | j                  t        j                  | j                  d«      «      }t        j                  || j                  d   | j                  d   z  | j                  d   | j                  d   z  df«      }t        j                  |d«      }|t        j                   |d«      z   }|�‹t        |«      d   }t        j                  |||z  || j"                  ||f«      }t        j                   |d«      }t        j                   |d«      }||z   }t        j                  |d| j"                  ||f«      }t
        j$                  j'                  |d¬«      }| j)                  ||¬«      }|�||z  }t        j                  ||«      }t        j                  |d	«      }t        |«      d d
 | j*                  gz   }t        j                  ||«      }|r||f}|S |f}|S )N)r   r   r   rD   ©rG   r   r   rG   )rD   r   r   rü   r”   r  éþÿÿÿ)r   rë   r  rí   rî   rH   ÚmatmulrJ   rW   Úsqrtrð   Úgatherr÷   rI   rø   rL   r–   rï   ÚnnÚsoftmaxru   rñ   )r=   r%   Úattention_maskÚ	head_maskÚoutput_attentionsre   rM   rÒ   r�   Úmixed_query_layerÚ	key_layerÚvalue_layerÚquery_layerÚattention_scoresÚrelative_position_biasÚ
mask_shapeÚattention_probsÚcontext_layerÚnew_context_layer_shapeÚoutputss                       r/   r    zTFSwinSelfAttention.call:  s˜  € ô (¨Ó6Ñˆ
�C˜Ø ŸJ™J }Ó5Ðà×-Ñ-¨d¯h©h°}Ó.EÓFˆ	Ø×/Ñ/°·
±
¸=Ó0IÓJˆØ×/Ñ/Ð0AÓBˆô Ÿ9™9 [´"·,±,¸yÈ,Ó2WÓXÐà+¬d¯i©i¸×8PÑ8PÓ.QÑQÐÜ!#§¡Ø×-Ñ-¬r¯z©z¸$×:VÑ:VÐX]Ó/^ó"
Ðô "$§¡Ø"Ø×Ñ˜aÑ  4×#3Ñ#3°AÑ#6Ñ6¸×8HÑ8HÈÑ8KÈd×N^ÑN^Ð_`ÑNaÑ8aÐceÐfó"
Ðô
 "$§¡Ð.DÀiÓ!PÐØ+¬b¯n©nÐ=SÐUVÓ.WÑWÐàÐ%ä# NÓ3°AÑ6ˆJÜ!Ÿz™zØ  :°Ñ#;¸ZÈ×IaÑIaÐcfÐhkÐ"ló Ðô  Ÿ^™^¨N¸AÓ>ˆNÜŸ^™^¨N¸AÓ>ˆNØ/°.Ñ@ÐÜ!Ÿz™zÐ*:¸RÀ×AYÑAYÐ[^Ð`cÐ<dÓeÐô Ÿ%™%Ÿ-™-Ð(8¸r˜-ÓBˆð Ÿ,™, À˜,ÓJˆð Ð Ø-°	Ñ9ˆOäŸ	™	 /°;Ó?ˆÜŸ™ ]°LÓAˆÜ",¨]Ó";¸C¸RÐ"@Ø×ÑðD
ñ #
Ðô Ÿ
™
 =Ð2IÓJˆá6G�= /Ð2ˆàˆð O\ÐM]ˆàˆr.   ©rƒ   r   rÒ   rÈ   rõ   rÈ   r£   r¤   r¥   ©rY   r§   r£   r§   ©NNFF)r%   r§   r  r2   r  r2   r  r¢   re   r¢   r£   úTuple[tf.Tensor, ...])r(   r)   r*   rw   r‘   r  r    rª   r«   s   @r/   rè   rè   æ  sc   ø„ õ"QóH(CóT-ð ,0Ø&*Ø"'Øð=à ð=ð )ð=ð $ð	=ð
  ð=ð ð=ð 
÷=r.   rè   c                  ó2   ‡ — e Zd Zdˆ fd„Zddd„Zdd„Zˆ xZS )ÚTFSwinSelfOutputc                óÞ   •— t        ‰| �  di |¤Ž t        j                  j	                  |d¬«      | _        t        j                  j                  |j                  d¬«      | _        || _	        y ©NÚdenserp   ru   r-   )
rv   rw   r   r   rÓ   r-  r�   rô   ru   rÒ   ©r=   rƒ   rÒ   r„   r…   s       €r/   rw   zTFSwinSelfOutput.__init__{  sW   ø€ Ü‰ÑÑ"˜6Ò"Ü—\‘\×'Ñ'¨°'Ð'Ó:ˆŒ
Ü—|‘|×+Ñ+¨F×,OÑ,OÐV_Ð+Ó`ˆŒØˆ�r.   c                óN   — | j                  |«      }| j                  ||¬«      }|S ©Nr”   ©r-  ru   )r=   r%   Úinput_tensorre   s       r/   r    zTFSwinSelfOutput.call�  ó(   € ØŸ
™
 =Ó1ˆØŸ™ ]¸X˜ÓFˆØÐr.   c                óà  — | j                   ry d| _         t        | dd «      �Zt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY w)NTr-  ru   )	rŽ   r�   rH   r�   r-  rq   r‘   rÒ   ru   r’   s     r/   r‘   zTFSwinSelfOutput.build†  s¾   € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ 9Ø—
‘
× Ñ  $¨¨d¯h©hÐ!7Ô8÷9ä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ð )ð 6÷9ð 9ú÷)ð )ús   Á)CÂ2C$ÃC!Ã$C-©rƒ   r   rÒ   rÈ   r£   r¤   r¡   )r%   r§   r2  r§   re   r¢   r£   r§   rÉ   ©r(   r)   r*   rw   r    r‘   rª   r«   s   @r/   r*  r*  z  s   ø„ õô÷
	)r.   r*  c                  óV   ‡ — e Zd Zdˆ fd„Zd„ Z	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )	ÚTFSwinAttentionc                ó�   •— t        ‰| �  di |¤Ž t        |||d¬«      | _        t	        ||d¬«      | _        t        «       | _        y )Nr=   rp   Úoutputr-   )rv   rw   rè   r=   r*  Úself_outputÚsetÚpruned_heads)r=   rƒ   rÒ   rõ   r„   r…   s        €r/   rw   zTFSwinAttention.__init__“  s@   ø€ Ü‰ÑÑ"˜6Ò"Ü'¨°°YÀVÔLˆŒ	Ü+¨F°C¸hÔGˆÔÜ›EˆÕr.   c                ó   — t         ‚)z”
        Prunes heads of the model. See base class PreTrainedModel heads: dict of {layer_num: list of heads to prune in
        this layer}
        )ÚNotImplementedError)r=   Úheadss     r/   Úprune_headszTFSwinAttention.prune_heads™  s
   € ô
 "Ð!r.   c                ór   — | j                  |||||¬«      }| j                  |d   ||¬«      }|f|dd  z   }|S )Nr”   r   r   )r=   r;  )	r=   r%   r  r  r  re   Úself_outputsÚattention_outputr$  s	            r/   r    zTFSwinAttention.call   sT   € ð —y‘y °À	ÐK\Ðgo�yÓpˆØ×+Ñ+¨L¸©O¸]ÐU]Ð+Ó^ÐØ#Ð%¨°Q°RÐ(8Ñ8ˆØˆr.   c                óÆ  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY w)NTr=   r;  )rŽ   r�   rH   r�   r=   rq   r‘   r;  r’   s     r/   r‘   zTFSwinAttention.build­  sµ   € Ø�:Š:ØØˆŒ
Ü�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ &Ø—	‘	—‘ Ô%÷&ä�4˜¨Ó-Ð9Ü—‘˜t×/Ñ/×4Ñ4Ó5ñ -Ø× Ñ ×&Ñ& tÔ,÷-ð -ð :÷&ð &ú÷-ð -úó   ÁCÂ%CÃCÃC r%  r'  )r%   r§   r  r2   r  r2   r  r¢   re   r¢   r£   r§   rÉ   )r(   r)   r*   rw   rA  r    r‘   rª   r«   s   @r/   r8  r8  ’  s_   ø„ õ"ò"ð ,0Ø&*Ø"'Øðà ðð )ðð $ð	ð
  ðð ðð 
ó÷	-r.   r8  c                  ó0   ‡ — e Zd Zdˆ fd„Zdd„Zdd„Zˆ xZS )ÚTFSwinIntermediatec                ó@  •— t        ‰| �  di |¤Ž t        j                  j	                  t        |j                  |z  «      d¬«      | _        t        |j                  t        «      r t        |j                     | _        || _        y |j                  | _        || _        y )Nr-  rp   r-   )rv   rw   r   r   rÓ   rÈ   Ú	mlp_ratior-  r¶   Ú
hidden_actÚstrr   Úintermediate_act_fnrÒ   r.  s       €r/   rw   zTFSwinIntermediate.__init__º  s�   ø€ Ü‰ÑÑ"˜6Ò"Ü—\‘\×'Ñ'¬¨F×,<Ñ,<¸sÑ,BÓ(CÈ'Ð'ÓRˆŒ
Ü�f×'Ñ'¬Ô-Ü'-¨f×.?Ñ.?Ñ'@ˆDÔ$ð ˆ�ð (.×'8Ñ'8ˆDÔ$Øˆ�r.   c                óJ   — | j                  |«      }| j                  |«      }|S rÉ   )r-  rM  )r=   r%   s     r/   r    zTFSwinIntermediate.callÃ  s&   € ØŸ
™
 =Ó1ˆØ×0Ñ0°Ó?ˆØÐr.   c                ó  — | j                   ry d| _         t        | dd «      �[t        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       y y # 1 sw Y   y xY w©NTr-  )rŽ   r�   rH   r�   r-  rq   r‘   rÒ   r’   s     r/   r‘   zTFSwinIntermediate.buildÈ  sr   € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ 9Ø—
‘
× Ñ  $¨¨d¯h©hÐ!7Ô8÷9ð 9ð 4÷9ð 9ús   Á)A>Á>Br5  )r%   r§   r£   r§   rÉ   r6  r«   s   @r/   rH  rH  ¹  s   ø„ õó÷
9r.   rH  c                  ó2   ‡ — e Zd Zdˆ fd„Zddd„Zdd„Zˆ xZS )ÚTFSwinOutputc                óê   •— t        ‰| �  di |¤Ž t        j                  j	                  |d¬«      | _        t        j                  j                  |j                  d«      | _        || _	        || _
        y r,  )rv   rw   r   r   rÓ   r-  r�   r‚   ru   rƒ   rÒ   r.  s       €r/   rw   zTFSwinOutput.__init__Ò  sZ   ø€ Ü‰ÑÑ"˜6Ò"Ü—\‘\×'Ñ'¨°'Ð'Ó:ˆŒ
Ü—|‘|×+Ñ+¨F×,FÑ,FÈ	ÓRˆŒØˆŒØˆ�r.   c                óN   — | j                  |«      }| j                  ||¬«      }|S r0  r1  )r=   r%   re   s      r/   r    zTFSwinOutput.callÙ  r3  r.   c           	     óT  — | j                   ry d| _         t        | dd «      �{t        j                  | j                  j
                  «      5  | j                  j                  d d t        | j                  j                  | j                  z  «      g«       d d d «       y y # 1 sw Y   y xY wrP  )rŽ   r�   rH   r�   r-  rq   r‘   rÈ   rƒ   rJ  rÒ   r’   s     r/   r‘   zTFSwinOutput.buildÞ  s‹   € Ø�:Š:ØØˆŒ
Ü�4˜ $Ó'Ð3Ü—‘˜tŸz™zŸ™Ó/ñ VØ—
‘
× Ñ  $¨¬c°$·+±+×2GÑ2GÈ$Ï(É(Ñ2RÓ.SÐ!TÔU÷Vð Vð 4÷Vð Vús   ÁA	BÂB'r5  r¡   )r%   r§   re   r¢   r£   r§   rÉ   r6  r«   s   @r/   rR  rR  Ñ  s   ø„ õô÷
Vr.   rR  c                  óŠ   ‡ — e Zd Z	 	 d	 	 	 	 	 	 	 	 	 dˆ fd„Zdd„Z	 	 	 	 	 	 	 	 	 	 d	d„Z	 	 	 d
	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )ÚTFSwinLayerc                ó¤  •— t        ‰	| �  di |¤Ž |j                  | _        t        j                  |«      }||j
                  k  r|n|j
                  | _        || j
                  k  rdn|| _        || _        t        j                  j                  |j                  d¬«      | _        t        |||d¬«      | _        |dkD  rt        |d¬«      n t        j                  j!                  dd¬«      | _        t        j                  j                  |j                  d	¬«      | _        t'        ||d
¬«      | _        t+        ||d¬«      | _        || _        y )Nr   Úlayernorm_beforerÐ   Ú	attentionrp   r]   rk   ÚlinearÚlayernorm_afterÚintermediater:  r-   )rv   rw   Úchunk_size_feed_forwardrH   Ú
reduce_minrL   Ú
shift_sizerÑ   r   r   r€   Úlayer_norm_epsrY  r8  rZ  râ   Ú
Activationrk   r\  rH  r]  rR  Úswin_outputrÒ   )
r=   rƒ   rÒ   rÑ   rõ   Údrop_path_rater`  r„   Úmin_resr…   s
            €r/   rw   zTFSwinLayer.__init__è  s$  ø€ ô 	‰ÑÑ"˜6Ò"Ø'-×'EÑ'EˆÔ$Ü—-‘-Ð 0Ó1ˆØ&-°×1CÑ1CÒ&C™7È×I[ÑI[ˆÔØ&¨$×*:Ñ*:Ò:™!À
ˆŒØ 0ˆÔä %§¡× ?Ñ ?È×H]ÑH]ÐdvÐ ?Ó wˆÔÜ(¨°°iÀkÔRˆŒð  Ò#ô ˜>°Õ<ä—‘×(Ñ(¨¸Ð(ÓDð 	Œô
  %Ÿ|™|×>Ñ>Àv×G\ÑG\ÐctÐ>ÓuˆÔÜ.¨v°sÀÔPˆÔÜ'¨°¸(ÔCˆÔØˆ�r.   c           
     óè  — t        j                  ||f«      }d| f| | f| dff}d| f| | f| dff}|dkD  rñd}|D ]ê  }	|D ]ã  }
t        j                  |	d   |z  |	d   |z  dz   «      }t        j                  |
d   |z  |
d   |z  dz   «      }t        j                  t        j                  t        j
                  ||«      d¬«      d«      }t        |«      dk\  rEt        j                  t        |«      f|j                  ¬«      |z  }t        j                  |||«      }|dz  }Œå Œì t        j                  |d«      }t        j                  |d«      }t        ||«      }t        j                  |d||z  f«      }t        j                  |d«      t        j                  |d«      z
  }t        j                  |dk7  t        d«      |«      }t        j                  |dk(  t        d	«      |«      }|S )
Nr   rG   r   rü   )rG   rD   )r—   rD   g      YÀr]   )rH   r‡   rþ   rI   rÿ   r   r_   Úonesr—   Útensor_scatter_nd_updater–   rR   rb   Úfloat)r=   rN   rO   rL   r`  Úimg_maskÚheight_slicesÚwidth_slicesÚcountÚheight_sliceÚwidth_sliceÚheight_indsÚ
width_indsÚindicesÚupdatesÚmask_windowsÚ	attn_masks                    r/   Úget_attn_maskzTFSwinLayer.get_attn_mask  sð  € Ü—8‘8˜V U˜OÓ,ˆØ˜k˜\Ð*¨k¨\¸J¸;Ð,GÈ:È+ÐWYÐIZÐ[ˆØ˜[˜LÐ)¨[¨L¸:¸+Ð+FÈ*ÈÐVXÐHYÐZˆð ˜Š>ØˆEØ -ò �Ø#/ò �KÜ"$§(¡(¨<¸©?¸VÑ+CÀ\ÐRSÁ_ÐW]ÑE]Ð`aÑEaÓ"b�KÜ!#§¡¨+°a©.¸5Ñ*@À+ÈaÁ.ÐSXÑBXÐ[\ÑB\Ó!]�JÜ Ÿj™j¬¯©´"·+±+¸kÈ:Ó2VÐ]_Ô)`ÐbiÓj�GÜ˜7“| qÒ(Ü"$§'¡'¬3¨w«<¨/ÀÇÁÔ"PÐSXÑ"X˜Ü#%×#>Ñ#>¸xÈÐRYÓ#Z˜Ø˜Q‘J‘Eñðô —>‘> (¨BÓ/ˆÜ—>‘> (¨AÓ.ˆä'¨°+Ó>ˆÜ—z‘z ,°°[À;Ñ5NÐ0OÓPˆÜ—N‘N <°Ó3´b·n±nÀ\ÐSTÓ6UÑUˆ	Ü—H‘H˜Y¨!™^¬U°6«]¸IÓFˆ	Ü—H‘H˜Y¨!™^¬U°3«Z¸ÓCˆ	ØÐr.   c                óª   — |||z  z
  |z  }|||z  z
  |z  }ddgd|gd|gddgg}t        j                  ||«      }t        j                  |d«      }||fS )Nr   r  )rH   r½   rI   )r=   r%   rL   rN   rO   Ú	pad_rightÚ
pad_bottomr¾   s           r/   r¿   zTFSwinLayer.maybe_pad!  su   € ð ! 5¨;Ñ#6Ñ6¸+ÑEˆ	Ø! F¨[Ñ$8Ñ8¸KÑGˆ
Ø˜!�f˜q *˜o°°9¨~ÀÀ1¸vÐFˆ
ÜŸ™˜}¨jÓ9ˆÜ—Z‘Z 
¨EÓ2ˆ
Ø˜jÐ(Ð(r.   c                óB  — t        j                  |«      }|| j                  k  rdn| j                  }|| j                  k  r|n| j                  }|\  }	}
t	        |«      \  }}}|}| j                  ||¬«      }t        j                  |||	|
|f«      }| j                  |||	|
«      \  }}t	        |«      \  }}}}|dkD  rt        j                  || | fd¬«      }n|}t        ||«      }t        j                  |d||z  |f«      }| j                  ||||¬«      }| j                  |||||¬«      }|d   }t        j                  |d|||f«      }t        ||||«      }|dkD  rt        j                  |||fd¬«      }n|}|d   dkD  xs |d	   dkD  }|r|d d …d |	…d |
…d d …f   }t        j                  |||	|
z  |f«      }|| j                  ||¬«      z   }| j                  ||¬«      }| j                  |«      }|| j!                  ||¬«      z   }|r	||d
   f}|S |f}|S )Nr   r”   )r   rD   )Úshiftrý   rG   )rN   rO   rL   r`  )r  re   r   rF   r   )rH   r_  rL   r`  r   rY  rI   r¿   ÚrollrR   rv  rZ  r[   rk   r\  r]  rc  )r=   r%   rÙ   r  r  re   re  r`  rL   rN   rO   rM   r�   rÆ   Úshortcutr¾   Ú
height_padÚ	width_padÚshifted_hidden_statesÚhidden_states_windowsru  Úattention_outputsrD  Úattention_windowsÚshifted_windowsÚ
was_paddedÚlayer_outputÚlayer_outputss                               r/   r    zTFSwinLayer.call+  sš  € ô —-‘-Ð 0Ó1ˆØ! T×%5Ñ%5Ò5‘Q¸4¿?¹?ˆ
Ø!(¨D×,<Ñ,<Ò!<‘gÀ$×BRÑBRˆà(‰ˆ�Ü",¨]Ó";Ñˆ
�A�xØ ˆà×-Ñ-¨mÀhÐ-ÓOˆÜŸ
™
 =°:¸vÀuÈhÐ2WÓXˆà$(§N¡N°=À+ÈvÐW\Ó$]Ñ!ˆ�zä&0°Ó&?Ñ#ˆˆ:�y !à˜Š>Ü$&§G¡G¨MÀ:À+ÐPZÈ{ÐA[ÐbhÔ$iÑ!à$1Ð!ô !1Ð1FÈÓ TÐÜ "§
¡
Ð+@À2À{ÐU`ÑG`ÐbjÐBkÓ lÐØ×&Ñ&Ø Y¸KÐT^ð 'ó 
ˆ	ð !ŸN™NØ! 9¨iÐK\Ðgoð +ó 
Ðð -¨QÑ/ÐäŸJ™JÐ'7¸"¸kÈ;ÐX`Ð9aÓbÐÜ(Ð):¸KÈÐU^Ó_ˆð ˜Š>Ü "§¡¨À
ÈJÐ?WÐ^dÔ eÑà /Ðà ‘] QÑ&Ò;¨*°Q©-¸!Ñ*;ˆ
ÙØ 1²!°W°f°W¸f¸u¸fÂaÐ2GÑ HÐäŸJ™JÐ'8¸:ÀvÐPUÁ~ÐW_Ð:`ÓaÐà  4§>¡>Ð2CÈh >Ó#WÑWˆà×+Ñ+¨MÀHÐ+ÓMˆØ×(Ñ(¨Ó6ˆØ$ t×'7Ñ'7¸ÈxÐ'7Ó'XÑXˆá@Q˜Ð'8¸Ñ';Ð<ˆØÐð YeÐWfˆØÐr.   c                ó0  — | j                   ry d| _         t        | dd «      �Zt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Zt        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   �ŒÛxY w# 1 sw Y   �ŒŽxY w# 1 sw Y   �ŒAxY w# 1 sw Y   ŒæxY w# 1 sw Y   Œ˜xY w# 1 sw Y   y xY w)NTrY  rZ  rk   r\  r]  rc  )rŽ   r�   rH   r�   rY  rq   r‘   rÒ   rZ  rk   r\  r]  rc  r’   s     r/   r‘   zTFSwinLayer.buildm  s  € Ø�:Š:ØØˆŒ
Ü�4Ð+¨TÓ2Ð>Ü—‘˜t×4Ñ4×9Ñ9Ó:ñ DØ×%Ñ%×+Ñ+¨T°4¸¿¹Ð,BÔC÷Dä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ +Ø—‘×$Ñ$ TÔ*÷+ä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ +Ø—‘×$Ñ$ TÔ*÷+ä�4Ð*¨DÓ1Ð=Ü—‘˜t×3Ñ3×8Ñ8Ó9ñ CØ×$Ñ$×*Ñ*¨D°$¸¿¹Ð+AÔB÷Cä�4˜¨Ó.Ð:Ü—‘˜t×0Ñ0×5Ñ5Ó6ñ .Ø×!Ñ!×'Ñ'¨Ô-÷.ä�4˜¨Ó-Ð9Ü—‘˜t×/Ñ/×4Ñ4Ó5ñ -Ø× Ñ ×&Ñ& tÔ,÷-ð -ð :÷Dñ Dú÷+ñ +ú÷+ñ +ú÷Cð Cú÷.ð .ú÷-ð -úsH   Á)IÂ2IÄI'Å&)I4ÇJ È'JÉIÉI$É'I1É4I=Ê J	ÊJ)r]   r   )
rÑ   rß   rõ   rÈ   rd  ri  r`  rÈ   r£   r¤   )
rN   rÈ   rO   rÈ   rL   rÈ   r`  rÈ   r£   r2   )
r%   r§   rL   rÈ   rN   rÈ   rO   rÈ   r£   zTuple[tf.Tensor, tf.Tensor]©NFF)r%   r§   rÙ   rß   r  r2   r  r¢   re   r¢   r£   r§   rÉ   )	r(   r)   r*   rw   rv  r¿   r    r‘   rª   r«   s   @r/   rW  rW  ç  sË   ø„ ð !$Øðð *ð	ð
 ðð ðð ðð 
õó:ð8)Ø&ð)Ø58ð)ØBEð)ØNQð)à	$ó)ð '+Ø"'Øð@à ð@ð *ð@ð $ð	@ð
  ð@ð ð@ð 
ó@÷D-r.   rW  c                  ón   ‡ — e Zd Z	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dˆ fd„Z	 	 	 d	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )ÚTFSwinStagec                óx  •— t        ‰
| �  d
i |¤Ž || _        || _        t	        |«      D �	cg c]1  }	t        |||||	dz  dk(  rdn|j                  dz  ||	   d|	› �¬«      ‘Œ3 c}	| _        |�< |||t        t        j                  j                  d¬«      d¬«      | _        d	| _        y d | _        d	| _        y c c}	w )NrD   r   zblocks.)rƒ   rÒ   rÑ   rõ   r`  rd  rq   rs   )rt   Ú
downsample)rÒ   rÔ   rq   Fr-   )rv   rw   rƒ   rÒ   rþ   rW  rL   Úblocksr   r   r   r€   r�  Úpointing)r=   rƒ   rÒ   rÑ   Údepthrõ   rk   r�  r„   Úir…   s             €r/   rw   zTFSwinStage.__init__†  sÏ   ø€ ô 	‰ÑÑ"˜6Ò"ØˆŒØˆŒô ˜5“\ö
ð ô ØØØ!1Ø#Ø!" Q¡¨!¢™1°&×2DÑ2DÈÑ2IØ(¨™|Ø˜q˜c�]öò
ˆŒð Ð!Ù(Ø ØÜ"¤5§<¡<×#BÑ#BÈDÔQØ!ô	ˆDŒOð ˆ�ð #ˆDŒOàˆ�ùò1
s   ¬6B7c                ó  — |\  }}t        | j                  «      D ]   \  }}	|�||   nd }
 |	|||
||¬«      }|d   }Œ" | j                  �.|dz   dz  |dz   dz  }}||||f}| j                  d   ||¬«      }n||||f}||f}|r|dd  z  }|S )Nr”   r   r   rD   )Ú	enumeraterŽ  r�  )r=   r%   rÙ   r  r  re   rN   rO   r‘  Úlayer_moduleÚlayer_head_maskr‡  Úheight_downsampledÚwidth_downsampledr›   Ústage_outputss                   r/   r    zTFSwinStage.call®  sè   € ð )‰ˆ�Ü(¨¯©Ó5ò 	-‰OˆAˆ|Ø.7Ð.C˜i¨šlÈˆOá(ØÐ/°ÐBSÐ^fôˆMð *¨!Ñ,‰Mð	-ð �?‰?Ð&Ø5;¸a±ZÀAÑ4EÈÐPQÉ	ÐVWÑGWÐ 1ÐØ!'¨Ð0BÐDUÐ VÐØ ŸO™O¨M¸!Ñ,<Ð>NÐYa˜OÓb‰Mà!'¨°¸Ð >Ðà&Ð(9Ð:ˆáØ˜]¨1¨2Ð.Ñ.ˆMØÐr.   c                óÀ  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �K| j                  D ];  }t        j                  |j
                  «      5  |j                  d «       d d d «       Œ= y y # 1 sw Y   ŒbxY w# 1 sw Y   ŒUxY w)NTr�  rŽ  )rŽ   r�   rH   r�   r�  rq   r‘   rŽ  ©r=   rh   Úlayers      r/   r‘   zTFSwinStage.buildÍ  s¼   € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜ 4Ó(Ð4ØŸ™ò &�Ü—]‘] 5§:¡:Ó.ñ &Ø—K‘K Ô%÷&ð &ñ&ð 5÷,ð ,ú÷&ð &ús   ÁCÂ*CÃCÃC	)rƒ   r   rÒ   rÈ   rÑ   rß   r�  rÈ   rõ   rÈ   rk   zList[float]r�  rà   r£   r¤   r‰  )r%   r§   rÙ   rß   r  r2   r  r¨   re   r¢   r£   r(  rÉ   r6  r«   s   @r/   r‹  r‹  …  s¦   ø„ ð&àð&ð ð&ð *ð	&ð
 ð&ð ð&ð ð&ð 'ð&ð 
õ&ðX '+Ø,1Øðà ðð *ðð $ð	ð
 *ðð ðð 
ó÷>
&r.   r‹  c                  óZ   ‡ — e Zd Zdˆ fd„Z	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„Zdd„Zˆ xZS )ÚTFSwinEncoderc                ó´  •— t        ‰| �  di |¤Ž t        |j                  «      | _        || _        t        t        j                  ddt        |j                  «      «      |j                  z  j                  «       «      }t        | j                  «      D �cg c]©  }t        |t        |j                  d|z  z  «      |d   d|z  z  |d   d|z  z  f|j                  |   |j                   |   |t        |j                  d | «      t        |j                  d |dz    «       || j                  dz
  k  rt"        nd d|› �¬«      ‘Œ« c}| _        d| _        y c c}w )Nr   r   rD   zlayers.)rƒ   rÒ   rÑ   r�  rõ   rk   r�  rq   Fr-   )rv   rw   r_   ÚdepthsÚ
num_layersrƒ   ÚlistrH   ÚlinspaceÚsumrd  Únumpyrþ   r‹  rÈ   r|   rõ   rÌ   r   Úgradient_checkpointing)r=   rƒ   rz   r„   ÚdprÚi_layerr…   s         €r/   rw   zTFSwinEncoder.__init__Û  sD  ø€ Ü‰ÑÑ"˜6Ò"Ü˜fŸm™mÓ,ˆŒØˆŒÜ”B—K‘K  1¤c¨&¯-©-Ó&8Ó9¸F×<QÑ<QÑQ×XÑXÓZÓ[ˆô ! §¡Ó1ö
ð ô ØÜ˜×(Ñ(¨1¨g©:Ñ5Ó6Ø"+¨A¡,°1°g±:Ñ">À	È!ÁÐQRÐT[ÑQ[Ñ@\Ð!]Ø—m‘m GÑ,Ø ×*Ñ*¨7Ñ3Øœc &§-¡-°°Ð"9Ó:¼SÀÇÁÈ}ÐQXÐ[\ÑQ\ÐA]Ó=^Ð_Ø29¸D¿O¹OÈaÑ<OÒ2OÕ-ÐVZØ˜w˜iÐ(ö	ò
ˆŒð ',ˆÕ#ùò
s   ÂB.Ec                ób  — d}|rdnd }	|rdnd }
|rdnd }|rMt        |«      \  }}}t        j                  ||g|¢|‘­«      }t        j                  |d«      }|	|fz  }	|
|fz  }
t	        | j
                  «      D ]�  \  }}|�||   nd } ||||||¬«      }|d   }|d   }|d   |d   f}||fz  }|rMt        |«      \  }}}t        j                  ||g|¢|‘­«      }t        j                  |d«      }|	|fz  }	|
|fz  }
|sŒˆ||dd  z  }Œ‘ |st        d	„ ||	|fD «       «      S t        ||	||
¬
«      S )Nr-   rÂ   r”   r   r   r  rG   rD   c              3  ó&   K  — | ]	  }|€Œ|–— Œ y ­wrÉ   r-   )Ú.0Úvs     r/   ú	<genexpr>z%TFSwinEncoder.call.<locals>.<genexpr>   s   è ø€ Òm˜qÐ_`Ñ_lœÑmùs   ‚Š)r#   r%   r&   r'   )r   rH   rI   rJ   r“  r   Útupler!   )r=   r%   rÙ   r  r  Úoutput_hidden_statesÚreturn_dictre   Úall_input_dimensionsÚall_hidden_statesÚall_reshaped_hidden_statesÚall_self_attentionsrM   r�   rº   Úreshaped_hidden_stater‘  r”  r•  r‡  r›   s                        r/   r    zTFSwinEncoder.callð  s»  € ð  "ÐÙ"6™B¸DÐÙ+?¡RÀTÐ"Ù$5™b¸4ÐáÜ)3°MÓ)BÑ&ˆJ˜˜;ä$&§J¡J¨}¸zÐ>jÐL\Ð>jÐ^iÑ>jÓ$kÐ!Ü$&§L¡LÐ1FÈÓ$UÐ!Ø -Ð!1Ñ1ÐØ&Ð+@Ð*BÑBÐ&ä(¨¯©Ó5ò 	9‰OˆAˆ|Ø.7Ð.C˜i¨šlÈˆOá(ØÐ/°ÐBSÐ^fôˆMð *¨!Ñ,ˆMØ -¨aÑ 0Ðà 1°"Ñ 5Ð7HÈÑ7LÐMÐØ Ð%5Ð$7Ñ7Ð á#Ü-7¸Ó-FÑ*�
˜A˜{ä(*¯
©
°=À:ÐBnÐP`ÐBnÐbmÑBnÓ(oÐ%Ü(*¯©Ð5JÈLÓ(YÐ%Ø! mÐ%5Ñ5Ð!Ø*Ð/DÐ.FÑFÐ*â Ø# }°Q°RÐ'8Ñ8Ñ#ð-	9ñ0 ÜÑm ]Ð4EÐGZÐ$[ÔmÓmÐmä"Ø+Ø+Ø*Ø#=ô	
ð 	
r.   c                óô   — | j                   ry d| _         t        | dd «      �K| j                  D ];  }t        j                  |j
                  «      5  |j                  d «       d d d «       Œ= y y # 1 sw Y   ŒIxY w)NTr   )rŽ   r�   r   rH   r�   rq   r‘   rš  s      r/   r‘   zTFSwinEncoder.build)  sp   € Ø�:Š:ØØˆŒ
Ü�4˜ 4Ó(Ð4ØŸ™ò &�Ü—]‘] 5§:¡:Ó.ñ &Ø—K‘K Ô%÷&ð &ñ&ð 5÷&ð &ús   ÁA.Á.A7	)rƒ   r   rz   rß   )NFFTF)r%   r§   rÙ   rß   r  r2   r  r¢   r®  r¢   r¯  r¢   re   r¢   r£   z1Union[Tuple[tf.Tensor, ...], TFSwinEncoderOutput]rÉ   r6  r«   s   @r/   r�  r�  Ú  sr   ø„ õ,ð2 '+Ø"'Ø%*Ø Øð7
à ð7
ð *ð7
ð $ð	7
ð
  ð7
ð #ð7
ð ð7
ð ð7
ð 
;ó7
÷r&r.   r�  c                  ó   — e Zd ZdZeZdZdZy)ÚTFSwinPreTrainedModelz†
    An abstract class to handle weights initialization and a simple interface for downloading and loading pretrained
    models.
    Úswinr˜   N)r(   r)   r*   r+   r   Úconfig_classÚbase_model_prefixÚmain_input_namer-   r.   r/   r·  r·  3  s   „ ñð
 €LØÐØ$�Or.   r·  a`  
    This model is a Tensorflow
    [keras.layers.Layer](https://www.tensorflow.org/api_docs/python/tf/keras/layers/Layer) sub-class. Use it as a
    regular Tensorflow Module and refer to the Tensorflow documentation for all matter related to general usage and
    behavior.

    Parameters:
        config ([`SwinConfig`]): Model configuration class with all the parameters of the model.
            Initializing with a config file does not load the weights associated with the model, only the
            configuration. Check out the [`~PreTrainedModel.from_pretrained`] method to load the model weights.
a:  
    Args:
        pixel_values (`tf.Tensor` of shape `(batch_size, num_channels, height, width)`):
            Pixel values. Pixel values can be obtained using [`AutoImageProcessor`]. See [`ViTImageProcessor.__call__`]
            for details.
        head_mask (`tf.Tensor` of shape `(num_heads,)` or `(num_layers, num_heads)`, *optional*):
            Mask to nullify selected heads of the self-attention modules. Mask values selected in `[0, 1]`:

            - 1 indicates the head is **not masked**,
            - 0 indicates the head is **masked**.

        output_attentions (`bool`, *optional*):
            Whether or not to return the attentions tensors of all attention layers. See `attentions` under returned
            tensors for more detail.
        output_hidden_states (`bool`, *optional*):
            Whether or not to return the hidden states of all layers. See `hidden_states` under returned tensors for
            more detail.
        return_dict (`bool`, *optional*):
            Whether or not to return a [`~utils.ModelOutput`] instead of a plain tuple.
c                óœ   — | €t         j                  j                  «       } | j                  «       }|dvrt	        dt        | «      z   «      ‚|S )z¢
    From tensorflow addons
    https://github.com/tensorflow/addons/blob/8cec33fcaaf1cf90aec7bdd55a0fcdbb251ce5c2/tensorflow_addons/utils/keras_utils.py#L71
    >   Úchannels_lastÚchannels_firstzWThe `data_format` argument must be one of "channels_first", "channels_last". Received: )r   ÚbackendÚimage_data_formatÚlowerrÅ   rL  )rî   Údata_formats     r/   Únormalize_data_formatrÃ  `  sS   € ð
 €}Ü—‘×/Ñ/Ó1ˆØ—+‘+“-€KØÐ=Ñ=ÜØeÔhkÐlqÓhrÑró
ð 	
ð Ðr.   c                  óh   ‡ — e Zd ZdZej
                  df	 	 	 	 	 	 	 dˆ fd„Zdd„Zd	d„Zd
ˆ fd„Z	ˆ xZ
S )ÚAdaptiveAveragePooling1Da|  
    Args:
    Average 1D Pooling with adaptive kernel size.
      output_size: An integer or tuple/list of a single integer, specifying pooled_features.
        The new size of output channels.
      data_format: A string,
        one of `channels_last` (default) or `channels_first`. The ordering of the dimensions in the inputs.
        `channels_last` corresponds to inputs with shape `(batch, steps, channels)` while `channels_first` corresponds
        to inputs with shape `(batch, channels, steps)`.
    Input shape:
      - If `data_format='channels_last'`: 3D tensor with shape `(batch, steps, channels)`.
      - If `data_format='channels_first'`: 3D tensor with shape `(batch, channels, steps)`.
    Output shape:
      - If `data_format='channels_last'`: 3D tensor with shape `(batch_size, pooled_steps, channels)`.
      - If `data_format='channels_first'`: 3D tensor with shape `(batch_size, channels, pooled_steps)`.

    Adapted from [tensorflow-addon's adaptive pooling.py](
        https://github.com/tensorflow/addons/blob/8cec33fcaaf1cf90aec7bdd55a0fcdbb251ce5c2/tensorflow_addons/layers/adaptive_pooling.py#L90-L120
    )
    Nc                ó˜   •— t        |«      | _        || _        t        |t        «      r|fn
t        |«      | _        t        ‰| �   di |¤Ž y rä   )	rÃ  rÂ  Úreduce_functionr¶   rÈ   r­  Úoutput_sizerv   rw   )r=   rÈ  rÇ  rÂ  r„   r…   s        €r/   rw   z!AdaptiveAveragePooling1D.__init__…  sE   ø€ ô 1°Ó=ˆÔØ.ˆÔÜ-7¸ÄSÔ-I˜K™>ÌuÐU`ÓOaˆÔÜ‰ÑÑ"˜6Ó"r.   c                óN  — | j                   d   }| j                  dk(  rDt        j                  ||d¬«      }t        j                  |d¬«      }| j                  |d¬«      }|S t        j                  ||d¬«      }t        j                  |d¬«      }| j                  |d¬«      }|S )Nr   r½  r   rü   rD   r   )rÈ  rÂ  rH   Úsplitrÿ   rÇ  )r=   ÚinputsÚargsÚbinsÚsplitsÚout_vects         r/   r    zAdaptiveAveragePooling1D.call‘  sœ   € Ø×Ñ Ñ"ˆØ×Ñ˜Ò.Ü—X‘X˜f d°Ô3ˆFÜ—X‘X˜f¨1Ô-ˆFØ×+Ñ+¨F¸Ð+Ó;ˆHð
 ˆô —X‘X˜f d°Ô3ˆFÜ—X‘X˜f¨1Ô-ˆFØ×+Ñ+¨F¸Ð+Ó;ˆHØˆr.   c                ó  — t        j                  |«      j                  «       }| j                  dk(  r-t        j                  |d   | j                  d   |d   g«      }|S t        j                  |d   |d   | j                  d   g«      }|S )Nr½  r   rD   r   )rH   ÚTensorShapeÚas_listrÂ  rÈ  )r=   rh   rT   s      r/   Úcompute_output_shapez-AdaptiveAveragePooling1D.compute_output_shape�  s‡   € Ü—n‘n [Ó1×9Ñ9Ó;ˆØ×Ñ˜Ò.Ü—N‘N K°¡N°D×4DÑ4DÀQÑ4GÈÐUVÉÐ#XÓYˆEð ˆô —N‘N K°¡N°KÀ±NÀD×DTÑDTÐUVÑDWÐ#XÓYˆEØˆr.   c                ó^   •— | j                   | j                  dœ}t        ‰| �  «       }i |¥|¥S )N)rÈ  rÂ  )rÈ  rÂ  rv   Ú
get_config)r=   rƒ   Úbase_configr…   s      €r/   rÕ  z#AdaptiveAveragePooling1D.get_config¥  s;   ø€ à×+Ñ+Ø×+Ñ+ñ
ˆô ‘gÑ(Ó*ˆØ(�+Ð( Ð(Ð(r.   )rÈ  zUnion[int, Iterable[int]]rÇ  r   rÂ  zOptional[str]r£   r¤   )rË  r§   r£   r¤   )rh   zIterable[int]r£   r¦   )r£   zDict[str, Any])r(   r)   r*   r+   rH   Úreduce_meanrw   r    rÓ  rÕ  rª   r«   s   @r/   rÅ  rÅ  o  sS   ø„ ñð0 %'§N¡NØ%)ð	
#à.ð
#ð "ð
#ð #ð	
#ð 
õ
#ó
ó÷)ñ )r.   rÅ  c                  ó–   ‡ — e Zd ZeZ	 d	 	 	 	 	 	 	 dˆ fd„Zd	d„Zd
d„Zdd„Ze		 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       Z
dd„Zˆ xZS )ÚTFSwinMainLayerc                óÊ  •— t        ‰| �  di |¤Ž || _        t        |j                  «      | _        t        |j                  d| j
                  dz
  z  z  «      | _        t        ||d¬«      | _
        t        || j                  j                  d¬«      | _        t        j                  j!                  |j"                  d¬«      | _        |rt'        d	¬
«      | _        y d | _        y )NrD   r   rš   )r}   rq   Úencoderrp   Ú	layernormrÐ   ©r   )rÈ  r-   )rv   rw   rƒ   r_   rŸ  r   rÈ   r|   Únum_featuresrm   rš   r�  r{   rÛ  r   r   r€   ra  rÜ  rÅ  Úpooler©r=   rƒ   Úadd_pooling_layerr}   r„   r…   s        €r/   rw   zTFSwinMainLayer.__init__²  sµ   ø€ ô 	‰ÑÑ"˜6Ò"ØˆŒÜ˜fŸm™mÓ,ˆŒÜ × 0Ñ 0°1¸¿¹È1Ñ9LÑ3MÑ MÓNˆÔä*¨6À.ÐWcÔdˆŒÜ$ V¨T¯_©_×-GÑ-GÈiÔXˆŒäŸ™×8Ñ8À×AVÑAVÐ]hÐ8ÓiˆŒÙDUÔ.¸4Ô@ˆ�Ð[_ˆ�r.   c                ó.   — | j                   j                  S rÉ   )rš   ro   r<   s    r/   Úget_input_embeddingsz$TFSwinMainLayer.get_input_embeddingsÀ  s   € Ø�‰×/Ñ/Ð/r.   c                ó˜   — |j                  «       D ]7  \  }}| j                  j                  |   j                  j	                  |«       Œ9 y)z�
        Prunes heads of the model. heads_to_prune: dict of {layer_num: list of heads to prune in this layer} See base
        class PreTrainedModel
        N)ÚitemsrÛ  r›  rZ  rA  )r=   Úheads_to_pruner›  r@  s       r/   Ú_prune_headszTFSwinMainLayer._prune_headsÃ  sE   € ð
 +×0Ñ0Ó2ò 	C‰LˆE�5Ø�L‰L×Ñ˜uÑ%×/Ñ/×;Ñ;¸EÕBñ	Cr.   c                óX   — |�t         ‚d gt        | j                  j                  «      z  S rÉ   )r?  r_   rƒ   rŸ  )r=   r  s     r/   Úget_head_maskzTFSwinMainLayer.get_head_maskË  s*   € ØÐ Ü%Ð%Øˆvœ˜DŸK™K×.Ñ.Ó/Ñ/Ð/r.   c           	     ól  — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|€t	        d«      ‚| j                  |«      }| j                  |||¬«      \  }}	| j                  ||	|||||¬«      }
|
d   }| j                  ||¬«      }d }| j                  �8t        |«      \  }}}| j                  |«      }t        j                  |||f«      }|s||f|
dd  z   }|S t        |||
j                  |
j                  |
j                   ¬«      S )Nú You have to specify pixel_values)r™   re   ©r  r  r®  r¯  re   r   r”   r   )r#   r3   r%   r&   r'   )rƒ   r  r®  Úuse_return_dictrÅ   ré  rš   rÛ  rÜ  rß  r   rH   rI   r1   r%   r&   r'   )r=   r˜   r™   r  r  r®  r¯  re   Úembedding_outputrÙ   Úencoder_outputsÚsequence_outputÚpooled_outputrM   r�   rÞ  r:  s                    r/   r    zTFSwinMainLayer.callÐ  sn  € ð 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐÜÐ?Ó@Ð@ð ×&Ñ& yÓ1ˆ	Ø-1¯_©_Ø¨/ÀHð .=ó .
Ñ*ÐÐ*ð Ÿ,™,ØØØØ/Ø!5Ø#Øð 'ó 
ˆð *¨!Ñ,ˆØŸ.™.¨À8˜.ÓLˆàˆØ�;‰;Ð"Ü*4°_Ó*EÑ'ˆJ˜˜<Ø ŸK™K¨Ó8ˆMÜŸJ™J }°zÀ<Ð6PÓQˆMáØ% }Ð5¸ÈÈÐ8KÑKˆFØˆMä Ø-Ø'Ø)×7Ñ7Ø&×1Ñ1Ø#2×#IÑ#Iô
ð 	
r.   c                ó¬  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �[t        j                  | j                  j
                  «      5  | j                  j                  d d | j                  g«       d d d «       y y # 1 sw Y   ŒÌxY w# 1 sw Y   Œ~xY w# 1 sw Y   y xY w)NTrš   rÛ  rÜ  )
rŽ   r�   rH   r�   rš   rq   r‘   rÛ  rÜ  rÞ  r’   s     r/   r‘   zTFSwinMainLayer.build  s  € Ø�:Š:ØØˆŒ
Ü�4˜ tÓ,Ð8Ü—‘˜tŸ™×3Ñ3Ó4ñ ,Ø—‘×%Ñ% dÔ+÷,ä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ä�4˜ dÓ+Ð7Ü—‘˜tŸ~™~×2Ñ2Ó3ñ FØ—‘×$Ñ$ d¨D°$×2CÑ2CÐ%DÔE÷Fð Fð 8÷,ð ,ú÷)ð )ú÷Fð Fús$   ÁD2Â%D>Ã?)E
Ä2D;Ä>EÅ
E©TF©rƒ   r   rá  r¢   r}   r¢   r£   r¤   )r£   rx   )ræ  zDict[int, List])r  zOptional[Any]r£   r
   ©NNNNNNF©r˜   r2   r™   r2   r  r2   r  r¨   r®  r¨   r¯  r¨   re   r¢   r£   z/Union[TFSwinModelOutput, Tuple[tf.Tensor, ...]]rÉ   )r(   r)   r*   r   r¹  rw   rã  rç  ré  r   r    r‘   rª   r«   s   @r/   rÙ  rÙ  ®  sÉ   ø„ à€Lð Z_ð`Ø ð`Ø59ð`ØRVð`à	õ`ó0óCó0ð
 ð *.Ø,0Ø&*Ø,0Ø/3Ø&*Øð:
à&ð:
ð *ð:
ð $ð	:
ð
 *ð:
ð -ð:
ð $ð:
ð ð:
ð 
9ò:
ó ð:
÷xFr.   rÙ  z^The bare Swin Model transformer outputting raw hidden-states without any specific head on top.c                  ó°   ‡ — e Zd Z	 d	 	 	 	 	 	 	 dˆ fd„Z ee«       eeee	de
¬«      e	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d	d„«       «       «       Zd
d„Zˆ xZS )ÚTFSwinModelc                óX   •— t        ‰| �  |fi |¤Ž || _        t        |d¬«      | _        y )Nr¸  rp   )rv   rw   rƒ   rÙ  r¸  rà  s        €r/   rw   zTFSwinModel.__init__!  s,   ø€ ô 	‰Ñ˜Ñ* 6Ò*ØˆŒÜ# F°Ô8ˆ�	r.   Úvision)Ú
checkpointÚoutput_typer¹  ÚmodalityÚexpected_outputc           	     óì   — |�|n| j                   j                  }|�|n| j                   j                  }|�|n| j                   j                  }|€t	        d«      ‚| j                  |||||||¬«      }|S )zÄ
        bool_masked_pos (`tf.Tensor` of shape `(batch_size, num_patches)`, *optional*):
            Boolean masked positions. Indicates which patches are masked (1) and which aren't (0).
        rë  )r˜   r™   r  r  r®  r¯  re   )rƒ   r  r®  rí  rÅ   r¸  )	r=   r˜   r™   r  r  r®  r¯  re   Úswin_outputss	            r/   r    zTFSwinModel.call(  s”   € ð. 2CÐ1NÑ-ÐTX×T_ÑT_×TqÑTqÐà$8Ð$DÑ È$Ï+É+×JjÑJjð 	ð &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆàÐÜÐ?Ó@Ð@à—y‘yØ%Ø+ØØ/Ø!5Ø#Øð !ó 
ˆð Ðr.   c                óú   — | j                   ry d| _         t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   y xY w)NTr¸  )rŽ   r�   rH   r�   r¸  rq   r‘   r’   s     r/   r‘   zTFSwinModel.buildT  se   € Ø�:Š:ØØˆŒ
Ü�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ &Ø—	‘	—‘ Ô%÷&ð &ð 3÷&ð &ús   ÁA1Á1A:ró  rô  rõ  rö  rÉ   )r(   r)   r*   rw   r   ÚSWIN_INPUTS_DOCSTRINGr   Ú_CHECKPOINT_FOR_DOCr1   Ú_CONFIG_FOR_DOCÚ_EXPECTED_OUTPUT_SHAPEr   r    r‘   rª   r«   s   @r/   rø  rø    sÛ   ø„ ð Z_ð9Ø ð9Ø59ð9ØRVð9à	õ9ñ +Ð+@ÓAÙØ&Ø%Ø$ØØ.ôð ð *.Ø,0Ø&*Ø,0Ø/3Ø&*Øð!à&ð!ð *ð!ð $ð	!ð
 *ð!ð -ð!ð $ð!ð ð!ð 
9ò!ó óó Bð!÷F&r.   rø  c                  ó,   ‡ — e Zd ZdZdˆ fd„Zdd„Zˆ xZS )ÚTFSwinPixelShufflez0TF layer implementation of torch.nn.PixelShufflec                óx   •— t        ‰| �  di |¤Ž t        |t        «      r|dk  rt	        d|› �«      ‚|| _        y )NrD   z1upscale_factor must be an integer value >= 2 got r-   )rv   rw   r¶   rÈ   rÅ   Úupscale_factor)r=   r	  r„   r…   s      €r/   rw   zTFSwinPixelShuffle.__init__`  sA   ø€ Ü‰ÑÑ"˜6Ò"Ü˜.¬#Ô.°.À1Ò2DÜÐPÐQ_ÐP`ÐaÓbÐbØ,ˆÕr.   c           
     ó®  — |}t        |«      \  }}}}| j                  dz  }t        ||z  «      }t        j                  t        |«      D ��	cg c]  }t        |«      D ]
  }	||	|z  z   ‘Œ Œ c}	}g«      }
t        j                  |t        j                  |
|dg«      d¬«      }t        j                  j                  || j                  d¬«      }|S c c}	}w )NrD   r   rG   )Úparamsrr  Ú
batch_dimsÚNHWC)Ú
block_sizerÂ  )
r   r	  rÈ   rH   Úconstantrþ   r  Útiler  Údepth_to_space)r=   rY   r%   rM   r�   Únum_input_channelsÚblock_size_squaredÚoutput_depthr‘  ÚjÚpermutations              r/   r    zTFSwinPixelShuffle.callf  sÙ   € ØˆÜ/9¸-Ó/HÑ,ˆ
�A�qÐ,Ø!×0Ñ0°!Ñ3ÐÜÐ-Ð0BÑBÓCˆô
 —k‘kÜ27Ð8JÓ2K×i¨QÔUZÐ[gÓUhÒiÐPQˆa�!Ð(Ñ(Ó(ÐiÐ(ÓiÐjó
ˆô Ÿ	™	¨ÄÇÁÈÐV`ÐbcÐUdÓ@eÐrtÔuˆÜŸ™×,Ñ,¨]Àt×GZÑGZÐhnÐ,ÓoˆØÐùó	 js   ÁC
)r	  rÈ   r£   r¤   r&  ræ   r«   s   @r/   r  r  ]  s   ø„ Ù:õ-÷r.   r  c                  ó0   ‡ — e Zd Zdˆ fd„Zdd„Zdd„Zˆ xZS )ÚTFSwinDecoderc                óî   •— t        ‰| �  di |¤Ž t        j                  j	                  |j
                  dz  |j                  z  ddd¬«      | _        t        |j
                  d¬«      | _	        || _
        y )NrD   r   Ú0)r°   r±   r²   rq   Ú1rp   r-   )rv   rw   r   r   r¹   Úencoder_striderP   Úconv2dr  Úpixel_shufflerƒ   )r=   rƒ   r„   r…   s      €r/   rw   zTFSwinDecoder.__init__x  sn   ø€ Ü‰ÑÑ"˜6Ò"Ü—l‘l×)Ñ)Ø×)Ñ)¨1Ñ,¨v×/BÑ/BÑBÐPQÐ[\Ðcfð *ó 
ˆŒô 0°×0EÑ0EÈCÔPˆÔØˆ�r.   c                ó¦   — |}t        j                  |d«      }| j                  |«      }| j                  |«      }t        j                  |d«      }|S )NrÁ   rÂ   )rH   rJ   r  r  )r=   rY   r%   s      r/   r    zTFSwinDecoder.call€  sK   € ØˆäŸ™ ]°LÓAˆØŸ™ MÓ2ˆØ×*Ñ*¨=Ó9ˆäŸ™ ]°LÓAˆØÐr.   c                óö  — | j                   ry d| _         t        | dd «      �et        j                  | j                  j
                  «      5  | j                  j                  d d d | j                  j                  g«       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY w)NTr  r  )
rŽ   r�   rH   r�   r  rq   r‘   rƒ   rº   r  r’   s     r/   r‘   zTFSwinDecoder.buildŠ  sÐ   € Ø�:Š:ØØˆŒ
Ü�4˜ 4Ó(Ð4Ü—‘˜tŸ{™{×/Ñ/Ó0ñ OØ—‘×!Ñ! 4¨¨t°T·[±[×5LÑ5LÐ"MÔN÷Oä�4˜¨$Ó/Ð;Ü—‘˜t×1Ñ1×6Ñ6Ó7ñ /Ø×"Ñ"×(Ñ(¨Ô.÷/ð /ð <÷Oð Oú÷/ð /ús   Á4C#Â=C/Ã#C,Ã/C8©rƒ   r   r&  rÉ   r6  r«   s   @r/   r  r  w  s   ø„ õó÷	/r.   r  zvSwin Model with a decoder on top for masked image modeling, as proposed in [SimMIM](https://arxiv.org/abs/2111.09886).c                  ó˜   ‡ — e Zd Zdˆ fd„Z ee«       eee¬«      e		 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       «       «       Z
dd„Zˆ xZS )	ÚTFSwinForMaskedImageModelingc                óp   •— t         ‰| �  |«       t        |ddd¬«      | _        t	        |d¬«      | _        y )NFTr¸  )rá  r}   rq   Údecoderrp   )rv   rw   rÙ  r¸  r  r%  ©r=   rƒ   r…   s     €r/   rw   z%TFSwinForMaskedImageModeling.__init__œ  s2   ø€ Ü‰Ñ˜Ô ä# F¸eÐTXÐ_eÔfˆŒ	ä$ V°)Ô<ˆ�r.   )rü  r¹  c           	     óì  — |�|n| j                   j                  }| j                  |||||||¬«      }|d   }	t        j                  |	d«      }	t        |	«      \  }
}}t        |dz  «      x}}t        j                  |	|
|||f«      }	| j                  |	«      }d}|��–| j                   j                  | j                   j                  z  }t        j                  |d||f«      }t        j                  || j                   j                  d«      }t        j                  || j                   j                  d«      }t        j                  |d«      }t        j                  |t        j                  «      }t        j                   j#                  t        j                  |d	«      t        j                  |d	«      «      }t        j                  |d«      }t        j$                  ||z  «      }t        j$                  |«      d
z   | j                   j&                  z  }||z  }t        j                  |d«      }|s|f|dd z   }|�|f|z   S |S t)        |||j*                  |j,                  |j.                  ¬«      S )aA  
        bool_masked_pos (`tf.Tensor` of shape `(batch_size, num_patches)`):
            Boolean masked positions. Indicates which patches are masked (1) and which aren't (0).

        Returns:

        Examples:
        ```python
        >>> from transformers import AutoImageProcessor, TFSwinForMaskedImageModeling
        >>> import tensorflow as tf
        >>> from PIL import Image
        >>> import requests

        >>> url = "http://images.cocodataset.org/val2017/000000039769.jpg"
        >>> image = Image.open(requests.get(url, stream=True).raw)

        >>> image_processor = AutoImageProcessor.from_pretrained("microsoft/swin-tiny-patch4-window7-224")
        >>> model = TFSwinForMaskedImageModeling.from_pretrained("microsoft/swin-tiny-patch4-window7-224")

        >>> num_patches = (model.config.image_size // model.config.patch_size) ** 2
        >>> pixel_values = image_processor(images=image, return_tensors="tf").pixel_values
        >>> # create random boolean mask of shape (batch_size, num_patches)
        >>> bool_masked_pos = tf.random.uniform((1, num_patches)) >= 0.5

        >>> outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)
        >>> loss, reconstructed_pixel_values = outputs.loss, outputs.reconstruction
        >>> list(reconstructed_pixel_values.shape)
        [1, 3, 224, 224]
        ```N)r™   r  r  r®  r¯  re   r   rÃ   g      à?rG   r   rD   )r   rD   r   r   rs   rÝ  )r6   r7   r%   r&   r'   )rƒ   rí  r¸  rH   rJ   r   rÈ   rI   r%  r´   rµ   r•   r–   rU   Úfloat32r   ÚlossesÚmean_absolute_errorr  rP   r5   r%   r&   r'   )r=   r˜   r™   r  r  r®  r¯  re   r$  rð  rM   rP   Úsequence_lengthrN   rO   Úreconstructed_pixel_valuesÚmasked_im_lossÚsizerŸ   Úreconstruction_lossÚ
total_lossÚnum_masked_pixelsr:  s                          r/   r    z!TFSwinForMaskedImageModeling.call£  s@  € ðT &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—)‘)ØØ+ØØ/Ø!5Ø#Øð ó 
ˆð " !™*ˆäŸ,™, ¸	ÓBˆÜ4>¸Ó4OÑ1ˆ
�L /Ü˜_¨cÑ1Ó2Ð2ˆ�ÜŸ*™* _°zÀ<ÐQWÐY^Ð6_Ó`ˆð &*§\¡\°/Ó%BÐ"àˆØÑ&Ø—;‘;×)Ñ)¨T¯[©[×-CÑ-CÑCˆDÜ Ÿj™j¨¸2¸tÀTÐ:JÓKˆOÜ—9‘9˜_¨d¯k©k×.DÑ.DÀaÓHˆDÜ—9‘9˜T 4§;¡;×#9Ñ#9¸1Ó=ˆDÜ—>‘> $¨Ó*ˆDÜ—7‘7˜4¤§¡Ó,ˆDä"'§,¡,×"BÑ"Bä—‘˜\¨<Ó8Ü—‘Ð7¸ÓFó#Ðô
 #%§.¡.Ð1DÀaÓ"HÐÜŸ™Ð':¸TÑ'AÓBˆJÜ!#§¡¨tÓ!4°tÑ!;¸t¿{¹{×?WÑ?WÑ WÐØ'Ð*;Ñ;ˆNÜŸZ™Z¨¸Ó=ˆNáØ0Ð2°W¸Q¸R°[Ñ@ˆFØ3AÐ3M�^Ð%¨Ñ.ÐYÐSYÐYä.ØØ5Ø!×/Ñ/Ø×)Ñ)Ø#*×#AÑ#Aô
ð 	
r.   c                óÆ  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �Nt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       y y # 1 sw Y   ŒexY w# 1 sw Y   y xY w)NTr¸  r%  )rŽ   r�   rH   r�   r¸  rq   r‘   r%  r’   s     r/   r‘   z"TFSwinForMaskedImageModeling.build  s±   € Ø�:Š:ØØˆŒ
Ü�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ &Ø—	‘	—‘ Ô%÷&ä�4˜ DÓ)Ð5Ü—‘˜tŸ|™|×0Ñ0Ó1ñ )Ø—‘×"Ñ" 4Ô(÷)ð )ð 6÷&ð &ú÷)ð )úrF  r!  rõ  )r˜   r2   r™   r2   r  r2   r  r¨   r®  r¨   r¯  r¨   re   r¢   r£   z-Union[Tuple, TFSwinMaskedImageModelingOutput]rÉ   )r(   r)   r*   rw   r   r  r   r5   r  r   r    r‘   rª   r«   s   @r/   r#  r#  –  s²   ø„ õ=ñ +Ð+@ÓAÙÐ+JÐYhÔiØð *.Ø,0Ø&*Ø,0Ø/3Ø&*Øð[
à&ð[
ð *ð[
ð $ð	[
ð
 *ð[
ð -ð[
ð $ð[
ð ð[
ð 
7ò[
ó ó jó Bð[
÷z	)r.   r#  z¥
    Swin Model transformer with an image classification head on top (a linear layer on top of the final hidden state of
    the [CLS] token) e.g. for ImageNet.
    c                  óœ   ‡ — e Zd Zdˆ fd„Z ee«       eeee	e
¬«      e	 	 	 	 	 	 	 d	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 dd„«       «       «       Zdd„Zˆ xZS )	ÚTFSwinForImageClassificationc                ó6  •— t         ‰| �  |«       |j                  | _        t        |d¬«      | _        |j                  dkD  r1t
        j                  j                  |j                  d¬«      | _	        y t
        j                  j                  dd¬«      | _	        y )Nr¸  rp   r   Ú
classifierr[  )
rv   rw   Ú
num_labelsrÙ  r¸  r   r   rÓ   rb  r6  r&  s     €r/   rw   z%TFSwinForImageClassification.__init__  s�   ø€ Ü‰Ñ˜Ô à ×+Ñ+ˆŒÜ# F°Ô8ˆŒ	ð
 × Ñ  1Ò$ô �L‰L×Ñ˜v×0Ñ0°|ÐÓDð 	�ô —‘×(Ñ(¨¸Ð(ÓEð 	�r.   )rû  rü  r¹  rþ  c                óF  — |�|n| j                   j                  }| j                  ||||||¬«      }|d   }	| j                  |	|¬«      }
|€dn| j	                  ||
«      }|s|
f|dd z   }|�|f|z   S |S t        ||
|j                  |j                  |j                  ¬«      S )aƒ  
        labels (`tf.Tensor` 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).
        Nrì  r   r”   rD   )r6   r>   r%   r&   r'   )	rƒ   rí  r¸  r6  Úhf_compute_lossrA   r%   r&   r'   )r=   r˜   r  Úlabelsr  r®  r¯  re   r$  rñ  r>   r6   r:  s                r/   r    z!TFSwinForImageClassification.call$  sÎ   € ð0 &1Ð%<‘kÀ$Ç+Á+×B]ÑB]ˆà—)‘)ØØØ/Ø!5Ø#Øð ó 
ˆð   ™
ˆà—‘ ¸�ÓBˆà�~‰t¨4×+?Ñ+?ÀÈÓ+OˆáØ�Y ¨¨ Ñ,ˆFØ)-Ð)9�T�G˜fÑ$ÐE¸vÐEä*ØØØ!×/Ñ/Ø×)Ñ)Ø#*×#AÑ#Aô
ð 	
r.   c                ó"  — | j                   ry d| _         t        | dd «      �Mt        j                  | j                  j
                  «      5  | j                  j                  d «       d d d «       t        | dd «      �|t        | j                  d«      ret        j                  | j                  j
                  «      5  | j                  j                  d d | j                  j                  g«       d d d «       y y y # 1 sw Y   Œ“xY w# 1 sw Y   y xY w)NTr¸  r6  rq   )
rŽ   r�   rH   r�   r¸  rq   r‘   Úhasattrr6  rÞ  r’   s     r/   r‘   z"TFSwinForImageClassification.buildY  sÚ   € Ø�:Š:ØØˆŒ
Ü�4˜ Ó&Ð2Ü—‘˜tŸy™yŸ~™~Ó.ñ &Ø—	‘	—‘ Ô%÷&ä�4˜ tÓ,Ð8Ü�t—‘¨Ô/Ü—]‘] 4§?¡?×#7Ñ#7Ó8ñ PØ—O‘O×)Ñ)¨4°°t·y±y×7MÑ7MÐ*NÔO÷Pð Pð 0ð 9÷&ð &ú÷Pð Pús   ÁC9Â;3DÃ9DÄDr!  rõ  )r˜   r2   r  r2   r:  r2   r  r¨   r®  r¨   r¯  r¨   re   r¢   r£   z9Union[Tuple[tf.Tensor, ...], TFSwinImageClassifierOutput]rÉ   )r(   r)   r*   rw   r   r  r   Ú_IMAGE_CLASS_CHECKPOINTrA   r  Ú_IMAGE_CLASS_EXPECTED_OUTPUTr   r    r‘   rª   r«   s   @r/   r4  r4    s³   ø„ õ
ñ +Ð+@ÓAÙØ*Ø/Ø$Ø4ô	ð ð *.Ø&*Ø#'Ø,0Ø/3Ø&*Øð+
à&ð+
ð $ð+
ð !ð	+
ð
 *ð+
ð -ð+
ð $ð+
ð ð+
ð 
Cò+
ó óó Bð+
÷Z
Pr.   r4  )r4  r#  rø  r·  )rK   r§   rL   rÈ   r£   r§   )
rQ   r§   rL   rÈ   rN   rÈ   rO   rÈ   r£   r§   )r]   FT)
rc   r§   rd   ri  re   r¢   rf   r¢   r£   r§   )rî   rL  r£   rL  )Sr+   Ú
__future__r   Úcollections.abcr·   rW   r9   Údataclassesr   Ú	functoolsr   Útypingr   r   r   r	   r
   r   r   r   Ú
tensorflowrH   Úactivations_tfr   Úmodeling_tf_utilsr   r   r   r   r   r   Útf_utilsr   Úutilsr   r   r   r   r   r   Úconfiguration_swinr   Ú
get_loggerr(   Úloggerr  r  r  r=  r>  r!   r1   r5   rA   rR   r[   rk   r   ÚLayerrm   rx   rÌ   râ   rè   r*  r8  rH  rR  rW  r‹  r�  r·  ÚSWIN_START_DOCSTRINGr  rÃ  rÅ  rÙ  rø  r  r  r#  r4  Ú__all__r-   r.   r/   ú<module>rO     s  ðñ %å "ã Û Û Ý !Ý ß N× NÓ Nã å $÷÷ õ #÷÷ õ +ð 
ˆ×	Ñ	˜HÓ	%€ð €ð ?Ð Ú%Ð ð CÐ Ø1Ð ð ô@˜+ó @ó ð@ð@ ô @˜ó  @ó ð @ðF ô)# kó )#ó ð)#ðX ô @ +ó  @ó ð @óFóð  ]að!Øð!Ø!&ð!Ø8<ð!ØUYð!àó!ô&A-�u—|‘|×)Ñ)ô A-ôHAM˜EŸL™L×.Ñ.ô AMôHF<˜Ÿ™×+Ñ+ô F<ôR	N�U—\‘\×'Ñ'ô 	NôQ˜%Ÿ,™,×,Ñ,ô Qôh)�u—|‘|×)Ñ)ô )ô0$-�e—l‘l×(Ñ(ô $-ôN9˜Ÿ™×+Ñ+ô 9ô0V�5—<‘<×%Ñ%ô Vô,[-�%—,‘,×$Ñ$ô [-ô|R&�%—,‘,×$Ñ$ô R&ôjV&�E—L‘L×&Ñ&ô V&ôr%Ð-ô %ð
Ð ðÐ ó,ô<)˜uŸ|™|×1Ñ1ô <)ð~ ôjF�e—l‘l×(Ñ(ó jFó ðjFñZ ØdØóô:&Ð'ó :&ó	ð:&ôz˜Ÿ™×+Ñ+ô ô4/�E—L‘L×&Ñ&ô /ñ> ð3àóô
q)Ð#8ó q)óð
q)ñh ðð óôMPÐ#8Ð:Vó MPóðMPò` s�r.   