§
    ‚Štj.  ã                   óf  — d Z ddlZddlmZ ddlmZ ddlmZmZ ddlm	Z	 ddl
mZmZmZ dd	lmZ dd
lmZmZmZ ddlmZmZ ddlmZ ddlmZ ddlmZ ddlmZ ddlm Z m!Z!m"Z"m#Z#  ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z$ G d„ de"¦  «        Z% G d„ dej&        ¦  «        Z' G d„ de ¦  «        Z( G d„ de¦  «        Z) G d„ de¦  «        Z* G d „ d!e!¦  «        Z+ G d"„ d#e#¦  «        Z,e G d$„ d%e,¦  «        ¦   «         Z- ed&¬'¦  «         G d(„ d)ee,¦  «        ¦   «         Z.g d*¢Z/dS )+zPyTorch Pixio model.é    N)Ústrict)Únné   )ÚBackboneMixinÚfilter_output_hidden_states)Úcreate_bidirectional_mask)ÚBackboneOutputÚBaseModelOutputÚBaseModelOutputWithPooling)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚ
is_tracing)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚDinov2Config)Ú	Dinov2MLP)ÚSwinDropPath)ÚViTAttentionÚViTLayerÚViTPatchEmbeddingsÚViTPreTrainedModelzfacebook/pixio-huge)Ú
checkpointc                   óø   — e Zd ZU dZdZdZeed<   dZeed<   dZ	eed<   d	Z
eed
<   dZeee         z  eeef         z  ed<   dZeee         z  eeef         z  ed<    e¦   «         Z e¦   «         Z e¦   «         ZdS )ÚPixioConfigaû  
    apply_layernorm (`bool`, *optional*, defaults to `True`):
        Whether to apply layer normalization to the feature maps in case the model is used as backbone.
    reshape_hidden_states (`bool`, *optional*, defaults to `True`):
        Whether to reshape the feature maps to 4D tensors of shape `(batch_size, hidden_size, height, width)` in
        case the model is used as backbone. If `False`, the feature maps will be 3D tensors of shape `(batch_size,
        seq_len, hidden_size)`.
    n_cls_tokens (`int`, *optional*, defaults to 8):
        Number of class tokens in the Transformer encoder.

    Example:

    ```python
    >>> from transformers import PixioConfig, PixioModel

    >>> # Initializing a Pixio pixio-huge style configuration
    >>> configuration = PixioConfig()

    >>> # Initializing a model (with random weights) from the pixio-huge style configuration
    >>> model = PixioModel(configuration)

    >>> # Accessing the model configuration
    >>> configuration = model.config
    ```Úpixioi   Úhidden_sizeé    Únum_hidden_layersé   Únum_attention_headsé   Ún_cls_tokensé   Ú
image_sizeÚ
patch_sizeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú
model_typer   ÚintÚ__annotations__r!   r#   r%   r'   ÚlistÚtupler(   ÚAttributeErrorÚlayerscale_valueÚuse_swiglu_ffnÚuse_mask_token© ó    úe/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/pixio/modular_pixio.pyr   r   !   sÕ   € € € € € € ðð ð2 €Jà€K�ÐÐÑØÐ�sÐÐÑØ!Ð˜Ð!Ð!Ñ!Ø€L�#ÐÐÑØ47€J��d˜3”i‘ %¨¨S¨¤/Ñ1Ð7Ð7Ñ7Ø46€J��d˜3”i‘ %¨¨S¨¤/Ñ1Ð6Ð6Ñ6à%�~Ñ'Ô'ÐØ#�^Ñ%Ô%€NØ#�^Ñ%Ô%€N€N€Nr7   r   c                   ó   — e Zd ZdS )ÚPixioPatchEmbeddingsN©r)   r*   r+   r6   r7   r8   r:   r:   K   ó   € € € € € Ø€Dr7   r:   c                   ó|   ‡ — e Zd ZdZdeddfˆ fd„Zdej        dededej        fd	„Z	d
ej        dej        fd„Z
ˆ xZS )ÚPixioEmbeddingszB
    Construct the CLS tokens, position and patch embeddings.
    ÚconfigÚreturnNc                 óò  •— t          ¦   «                              ¦   «          t          j        t	          j        d|j        |j        ¦  «        ¦  «        | _        d | _	        t          |¦  «        | _        | j        j        }t          j        t	          j        d||j        z   |j        ¦  «        ¦  «        | _        t          j        |j        ¦  «        | _        |j        | _        |j        | _        || _        d S )Né   )ÚsuperÚ__init__r   Ú	ParameterÚtorchÚrandnr%   r   Ú	cls_tokenÚ
mask_tokenr:   Úpatch_embeddingsÚnum_patchesÚposition_embeddingsÚDropoutÚhidden_dropout_probÚdropoutr(   r?   )Úselfr?   rK   Ú	__class__s      €r8   rD   zPixioEmbeddings.__init__T   sÀ   ø€ Ý‰Œ×ÒÑÔÐåœ¥e¤k°!°VÔ5HÈ&ÔJ\Ñ&]Ô&]Ñ^Ô^ˆŒØˆŒÝ 4°VÑ <Ô <ˆÔØÔ+Ô7ˆÝ#%¤<µ´¸A¸{ÈVÔM`Ñ?`ÐbhÔbtÑ0uÔ0uÑ#vÔ#vˆÔ Ý”z &Ô"<Ñ=Ô=ˆŒØ"Ô/ˆÔØ Ô+ˆŒØˆŒˆˆr7   Ú
embeddingsÚheightÚwidthc                 ó  — |j         d         | j        z
  }| j        j         d         | j        z
  }t          ¦   «         s||k    r||k    r| j        S | j        dd…d| j        …f         }| j        dd…| j        d…f         }|j         d         }|| j        z  }	|| j        z  }
t          |dz  ¦  «        }|                     d|||¦  «        }|                     dddd¦  «        }|j        }t          j
                             |                     t          j        ¦  «        |	|
fdd	¬
¦  «                             |¬¦  «        }|                     dddd¦  «                             dd|¦  «        }t          j        ||fd¬¦  «        S )a#  
        This method allows to interpolate the pre-trained position encodings, to be able to use the model on higher
        resolution images. This method is also adapted to support tracing and interpolation at torch.float32 precision.

        Adapted from:
        - https://github.com/facebookresearch/dino/blob/de9ee3df6cf39fac952ab558447af1fa1365362a/vision_transformer.py#L174-L194, and
        - https://github.com/facebookresearch/dinov2/blob/e1277af2ba9496fbadf7aec6eba56e8d882d1e35/dinov2/models/vision_transformer.py#L179-L211
        rB   Néÿÿÿÿg      à?r   r   r   ÚbicubicF)ÚsizeÚmodeÚalign_corners©Údtype©Údim)Úshaper%   rL   r   r(   r.   ÚreshapeÚpermuter\   r   Ú
functionalÚinterpolateÚtorF   Úfloat32ÚviewÚcat)rP   rR   rS   rT   rK   Únum_positionsÚclass_pos_embedÚpatch_pos_embedr^   Ú
new_heightÚ	new_widthÚsqrt_num_positionsÚtarget_dtypes                r8   Úinterpolate_pos_encodingz(PixioEmbeddings.interpolate_pos_encodinga   s£  € ð !Ô& qÔ)¨DÔ,=Ñ=ˆØÔ0Ô6°qÔ9¸DÔ<MÑMˆå‰|Œ|ð 	, ¨}Ò <Ð <ÀÈ5ÂÀØÔ+Ð+àÔ2°1°1°1Ð6I¸Ô8IÐ6IÐ3IÔJˆØÔ2°1°1°1°dÔ6GÐ6IÐ6IÐ3IÔJˆàÔ˜rÔ"ˆà˜tœÑ.ˆ
Ø˜Tœ_Ñ,ˆ	å  °Ñ!3Ñ4Ô4ÐØ)×1Ò1°!Ð5GÐI[Ð]`ÑaÔaˆØ)×1Ò1°!°Q¸¸1Ñ=Ô=ˆØ&Ô,ˆÝœ-×3Ò3Ø×Ò�uœ}Ñ-Ô-Ø˜iÐ(ØØð	 4ñ 
ô 
÷
 Š"�<ˆ"Ñ
 Ô
 ð 	ð *×1Ò1°!°Q¸¸1Ñ=Ô=×BÒBÀ1ÀbÈ#ÑNÔNˆåŒy˜/¨?Ð;ÀÐCÑCÔCÐCr7   Úpixel_valuesc                 ób  — |j         \  }}}}| j        j        j        j        }|                      |                     |¬¦  «        ¦  «        }| j                             |dd¦  «        }t          j	        ||fd¬¦  «        }||  
                    |||¦  «        z   }|                      |¦  «        }|S )Nr[   rV   rB   r]   )r_   rJ   Ú
projectionÚweightr\   rd   rH   ÚexpandrF   rg   ro   rO   )	rP   rp   Ú
batch_sizeÚ_rS   rT   rn   rR   Ú
cls_tokenss	            r8   ÚforwardzPixioEmbeddings.forward‡   s«   € Ø'3Ô'9Ñ$ˆ
�A�v˜uØÔ,Ô7Ô>ÔDˆØ×*Ò*¨<¯?ª?À¨?Ñ+NÔ+NÑOÔOˆ
à”^×*Ò*¨:°r¸2Ñ>Ô>ˆ
Ý”Y 
¨JÐ7¸QÐ?Ñ?Ô?ˆ
à $×"?Ò"?À
ÈFÐTYÑ"ZÔ"ZÑZˆ
à—\’\ *Ñ-Ô-ˆ
àÐr7   )r)   r*   r+   r,   r   rD   rF   ÚTensorr.   ro   rx   Ú__classcell__©rQ   s   @r8   r>   r>   O   s»   ø€ € € € € ðð ð˜{ð ¨tð ð ð ð ð ð ð$D°5´<ð $DÈð $DÐUXð $DÐ]bÔ]ið $Dð $Dð $Dð $DðL E¤Lð °U´\ð ð ð ð ð ð ð ð r7   r>   c                   ó   — e Zd ZdS )ÚPixioAttentionNr;   r6   r7   r8   r}   r}   –   r<   r7   r}   c                   ó   — e Zd ZdS )ÚPixioMLPNr;   r6   r7   r8   r   r   š   r<   r7   r   c                   ó   — e Zd ZdS )ÚPixioDropPathNr;   r6   r7   r8   r�   r�   ž   r<   r7   r�   c            	       óp   ‡ — e Zd Zdefˆ fd„Z	 d	dej        dej        dz  dee         dej        fd„Z	ˆ xZ
S )
Ú
PixioLayerr?   c                 ó¸   •— t          ¦   «                              |¦  «         |j        dk    rt          |j        ¦  «        nt	          j        ¦   «         | _        d S )Ng        )rC   rD   Údrop_path_rater�   r   ÚIdentityÚ	drop_path©rP   r?   rQ   s     €r8   rD   zPixioLayer.__init__£   sN   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØAGÔAVÐY\ÒA\ÐA\� vÔ'<Ñ=Ô=Ð=ÕbdÔbmÑboÔboˆŒˆˆr7   NÚhidden_statesÚattention_maskÚkwargsr@   c                 ód  — |}|                       |¦  «        } | j        ||fi |¤Ž\  }}|                      |¦  «        }|                      |¦  «        |z   }|}|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        |z   }|S ©N)Úlayernorm_beforeÚ	attentionrO   r‡   Úlayernorm_afterÚmlp)rP   r‰   rŠ   r‹   Úresidualrv   s         r8   rx   zPixioLayer.forward§   s¹   € ð !ˆØ×-Ò-¨mÑ<Ô<ˆØ)˜4œ>¨-¸ÐRÐRÈ6ÐRÐRÑˆ�qØŸš ]Ñ3Ô3ˆØŸš }Ñ5Ô5¸Ñ@ˆà ˆØ×,Ò,¨]Ñ;Ô;ˆØŸš Ñ/Ô/ˆØŸš ]Ñ3Ô3ˆØŸš }Ñ5Ô5¸Ñ@ˆàÐr7   r�   )r)   r*   r+   r   rD   rF   ry   r   r   rx   rz   r{   s   @r8   rƒ   rƒ   ¢   s    ø€ € € € € ðp˜{ð pð pð pð pð pð pð /3ðð à”|ðð œ tÑ+ðð Ð+Ô,ð	ð
 
Œðð ð ð ð ð ð ð r7   rƒ   c                   ó   — e Zd ZdS )ÚPixioPreTrainedModelNr;   r6   r7   r8   r”   r”   ¼   r<   r7   r”   c                   ó²   ‡ — e Zd Zdefˆ fd„Ze ed¬¦  «        e	 	 ddej	        dz  dej	        dz  de
e         d	efd
„¦   «         ¦   «         ¦   «         Zˆ xZS )Ú
PixioModelr?   c                 ób  •‡— t          ¦   «                              ‰¦  «         ‰| _        t          ‰¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _	        t          j
        ‰j        ‰j        ¬¦  «        | _        |                      ¦   «          d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r6   )rƒ   ©Ú.0rv   r?   s     €r8   ú
<listcomp>z'PixioModel.__init__.<locals>.<listcomp>Ç   s!   ø€ Ð$aÐ$aÐ$a¸A¥Z°Ñ%7Ô%7Ð$aÐ$aÐ$ar7   ©Úeps)rC   rD   r?   r>   rR   r   Ú
ModuleListÚranger!   ÚlayersÚ	LayerNormr   Úlayer_norm_epsÚ	layernormÚ	post_initrˆ   s    `€r8   rD   zPixioModel.__init__Â   s•   øø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒå)¨&Ñ1Ô1ˆŒÝ”mÐ$aÐ$aÐ$aÐ$aÅÀvÔG_ÑA`ÔA`Ð$aÑ$aÔ$aÑbÔbˆŒåœ fÔ&8¸fÔ>SÐTÑTÔTˆŒà�ŠÑÔÐÐÐr7   F)Útie_last_hidden_statesNrp   rŠ   r‹   r@   c                 óR  — |€t          d¦  «        ‚|                      |¦  «        }t          | j        ||¬¦  «        }|}| j        D ]} |||fi |¤Ž}Œ|                      |¦  «        }|d d …d | j        j        …d d …f                              d¬¦  «        }t          ||¬¦  «        S )Nz You have to specify pixel_values)r?   Úinputs_embedsrŠ   rB   r]   )Úlast_hidden_stateÚpooler_output)	Ú
ValueErrorrR   r   r?   r    r£   r%   Úmeanr   )rP   rp   rŠ   r‹   Úembedding_outputr‰   ÚlayerÚpooled_outputs           r8   rx   zPixioModel.forwardÍ   sã   € ð ÐÝÐ?Ñ@Ô@Ð@àŸ?š?¨<Ñ8Ô8ÐÝ2Ø”;Ø*Ø)ð
ñ 
ô 
ˆð
 )ˆØ”[ð 	Kð 	KˆEØ!˜E -°ÐJÐJÀ6ÐJÐJˆMˆMØŸš }Ñ5Ô5ˆØ% a a aÐ)G¨4¬?Ô+GÐ)GÈÈÈÐ&JÔK×PÒPÐUVÐPÑWÔWˆå)Ø+Ø'ð
ñ 
ô 
ð 	
r7   )NN)r)   r*   r+   r   rD   r   r   r   rF   ry   r   r   r   rx   rz   r{   s   @r8   r–   r–   À   sÎ   ø€ € € € € ð	˜{ð 	ð 	ð 	ð 	ð 	ð 	ð  Ø€_¨EÐ2Ñ2Ô2Øð -1Ø.2ð
ð 
à”l TÑ)ð
ð œ tÑ+ð
ð Ð+Ô,ð	
ð
 
$ð
ð 
ð 
ñ „^ñ 3Ô2ñ  Ôð
ð 
ð 
ð 
ð 
r7   r–   zN
    Pixio backbone, to be used with frameworks like DETR and MaskFormer.
    )Úcustom_introc                   ó–   ‡ — e Zd Zdefˆ fd„Zeee	 d	dej	        dej	        dz  de
e         defd„¦   «         ¦   «         ¦   «         Zˆ xZS )
ÚPixioBackboner?   c                 ó6  •‡— t          ¦   «                              ‰¦  «         ˆfd„t          ‰j        dz   ¦  «        D ¦   «         | _        t          ‰¦  «        | _        t          j        ‰j	        ‰j
        ¬¦  «        | _        |                      ¦   «          d S )Nc                 ó   •— g | ]	}‰j         ‘Œ
S r6   )r   r™   s     €r8   r›   z*PixioBackbone.__init__.<locals>.<listcomp>ô   s   ø€ Ð]Ð]Ð]°A˜VÔ/Ð]Ð]Ð]r7   rB   rœ   )rC   rD   rŸ   r!   Únum_featuresr–   r   r   r¡   r   r¢   r£   r¤   rˆ   s    `€r8   rD   zPixioBackbone.__init__ñ   sŠ   øø€ Ý‰Œ×Ò˜Ñ Ô Ð à]Ð]Ð]Ð]½¸vÔ?WÐZ[Ñ?[Ñ9\Ô9\Ð]Ñ]Ô]ˆÔÝ Ñ'Ô'ˆŒ
Ýœ fÔ&8¸fÔ>SÐTÑTÔTˆŒà�ŠÑÔÐÐÐr7   Nrp   rŠ   r‹   r@   c                 óT  — d|d<    | j         ||fi |¤Ž}|j        }g }t          | j        |¦  «        D ]Í\  }}|| j        v r¿| j        j        r|                      |¦  «        }| j        j        r}|dd…| j         j	        j
        d…f         }|j        \  }	}
}}| j        j        }|                     |	||z  ||z  d¦  «        }|                     dddd¦  «                             ¦   «         }|                     |¦  «         ŒÎt#          t%          |¦  «        |j        |j        ¬	¦  «        S )
aw  
        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/pixio-huge")
        >>> model = AutoBackbone.from_pretrained(
        ...     "facebook/pixio-huge", out_features=["stage7", "stage15", "stage23", "stage31"]
        ... )

        >>> inputs = processor(image, return_tensors="pt")

        >>> outputs = model(**inputs)
        >>> feature_maps = outputs.feature_maps
        >>> list(feature_maps[-1].shape)
        [1, 1280, 16, 16]
        ```TÚoutput_hidden_statesNrV   r   r   rB   r   )Úfeature_mapsr‰   Ú
attentions)r   r‰   ÚzipÚstage_namesÚout_featuresr?   Úapply_layernormr£   Úreshape_hidden_statesrR   r%   r_   r(   r`   ra   Ú
contiguousÚappendr	   r1   r¸   )rP   rp   rŠ   r‹   Úoutputr‰   r·   ÚstageÚhidden_stateru   rv   rS   rT   r(   s                 r8   rx   zPixioBackbone.forwardú   s^  € ðF *.ˆÐ%Ñ&à", $¤*¨\¸>Ð"TÐ"TÈVÐ"TÐ"TˆØÔ,ˆàˆÝ#& tÔ'7¸Ñ#GÔ#Gð 
	2ð 
	2ÑˆE�<Ø˜Ô)Ð)Ð)Ø”;Ô.ð @Ø#'§>¢>°,Ñ#?Ô#?�LØ”;Ô4ð QØ#/°°°°4´:Ô3HÔ3UÐ3WÐ3WÐ0WÔ#X�LØ3?Ô3EÑ0�J  6¨5Ø!%¤Ô!7�JØ#/×#7Ò#7¸
ÀFÈjÑDXÐZ_ÐcmÑZmÐoqÑ#rÔ#r�LØ#/×#7Ò#7¸¸1¸aÀÑ#CÔ#C×#NÒ#NÑ#PÔ#P�LØ×#Ò# LÑ1Ô1Ð1øåÝ˜|Ñ,Ô,Ø Ô.ØÔ(ð
ñ 
ô 
ð 	
r7   r�   )r)   r*   r+   r   rD   r   r   r   rF   ry   r   r   r	   rx   rz   r{   s   @r8   r±   r±   ë   s¹   ø€ € € € € ð˜{ð ð ð ð ð ð ð Ø Øð /3ð6
ð 6
à”lð6
ð œ tÑ+ð6
ð Ð+Ô,ð	6
ð
 
ð6
ð 6
ð 6
ñ „^ñ !Ô ñ Ôð6
ð 6
ð 6
ð 6
ð 6
r7   r±   )r   r–   r”   r±   )0r,   rF   Úhuggingface_hub.dataclassesr   r   Úbackbone_utilsr   r   Úmasking_utilsr   Úmodeling_outputsr	   r
   r   Úprocessing_utilsr   Úutilsr   r   r   Úutils.genericr   r   Úutils.output_capturingr   Údinov2.configuration_dinov2r   Údinov2.modeling_dinov2r   Úswin.modeling_swinr   Úvit.modeling_vitr   r   r   r   r   r:   ÚModuler>   r}   r   r�   rƒ   r”   r–   r±   Ú__all__r6   r7   r8   ú<module>rÑ      s^  ðð Ð à €€€Ø .Ð .Ð .Ð .Ð .Ð .Ø Ð Ð Ð Ð Ð à HÐ HÐ HÐ HÐ HÐ HÐ HÐ HØ 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ð [Ø &Ð &Ð &Ð &Ð &Ð &Ø CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CÐ CØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 6Ð 6Ð 6Ð 6Ð 6Ð 6Ø .Ð .Ð .Ð .Ð .Ð .Ø -Ð -Ð -Ð -Ð -Ð -Ø ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]Ð ]ð €Ð0Ð1Ñ1Ô1Øð%&ð %&ð %&ð %&ð %&�,ñ %&ô %&ñ „ñ 2Ô1ð%&ðP	ð 	ð 	ð 	ð 	Ð-ñ 	ô 	ð 	ðDð Dð Dð Dð D�b”iñ Dô Dð DðN	ð 	ð 	ð 	ð 	�\ñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	ˆyñ 	ô 	ð 	ð	ð 	ð 	ð 	ð 	�Lñ 	ô 	ð 	ðð ð ð ð �ñ ô ð ð4	ð 	ð 	ð 	ð 	Ð-ñ 	ô 	ð 	ð ð'
ð '
ð '
ð '
ð '
Ð%ñ '
ô '
ñ „ð'
ðT €ððñ ô ð
C
ð C
ð C
ð C
ð C
�MÐ#7ñ C
ô C
ñô ð
C
ðL QÐ
PÐ
P€€€r7   