§
    ‚ŠtjBx  ã                   ó‚  — d Z ddlZddlmZ ddlmZ ddlmZ ddlZ	ddl
Z
ddl
mZ ddlmZ dd	lmZ dd
lmZ ddlmZmZ ddlmZmZ ddlmZ ddlmZmZmZmZ ddlm Z m!Z! ddl"m#Z#m$Z$ ddl%m&Z& ddl'm(Z(  ej)        e*¦  «        Z+ ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z, ed¬¦  «        e G d„ de¦  «        ¦   «         ¦   «         Z-d„ Z. G d„ dej/        ¦  «        Z0 G d„ dej/        ¦  «        Z1	 	 dEd!ej/        d"e
j2        d#e
j2        d$e
j2        d%e
j2        dz  d&e3dz  d'e3d(ee         fd)„Z4 G d*„ d+ej/        ¦  «        Z5 G d,„ d-ej/        ¦  «        Z6 G d.„ d/ej/        ¦  «        Z7 G d0„ d1ej/        ¦  «        Z8 G d2„ d3ej/        ¦  «        Z9 G d4„ d5e¦  «        Z: G d6„ d7ej/        ¦  «        Z;e G d8„ d9e¦  «        ¦   «         Z<e G d:„ d;e<¦  «        ¦   «         Z= G d<„ d=ej/        ¦  «        Z> ed>¬¦  «         G d?„ d@e<¦  «        ¦   «         Z? edA¬¦  «         G dB„ dCe<¦  «        ¦   «         Z@g dD¢ZAdS )Fz,PyTorch VideoMAE (masked autoencoder) model.é    N)ÚCallable)Údeepcopy)Ú	dataclass)Únn)ÚMSELossé   )ÚACT2FN)ÚGradientCheckpointingLayer)ÚBaseModelOutputÚImageClassifierOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚlogging)ÚIMAGENET_DEFAULT_MEANÚIMAGENET_DEFAULT_STD)Úcan_return_tupleÚmerge_with_config_defaults)Úcapture_outputsé   )ÚVideoMAEConfigz[
    Class for VideoMAEDecoder's outputs, with potential hidden states and attentions.
    )Úcustom_introc                   ó†   — e Zd ZU dZdZej        dz  ed<   dZe	ej                 dz  ed<   dZ
e	ej                 dz  ed<   dS )ÚVideoMAEDecoderOutputz„
    logits (`torch.FloatTensor` of shape `(batch_size, patch_size ** 2 * num_channels)`):
        Pixel reconstruction logits.
    NÚlogitsÚhidden_statesÚ
attentions)Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚFloatTensorÚ__annotations__r   Útupler    © ó    úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/videomae/modeling_videomae.pyr   r   )   sp   € € € € € € ðð ð
 (,€FˆEÔ Ñ$Ð+Ð+Ñ+Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6r*   r   zb
    Class for VideoMAEForPreTraining's outputs, with potential hidden states and attentions.
    c                   ó¤   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dZ	e
ej                 dz  ed<   dZe
ej                 dz  ed<   dS )ÚVideoMAEForPreTrainingOutputz×
    loss (`torch.FloatTensor` of shape `(1,)`):
        Pixel reconstruction loss.
    logits (`torch.FloatTensor` of shape `(batch_size, patch_size ** 2 * num_channels)`):
        Pixel reconstruction logits.
    NÚlossr   r   r    )r!   r"   r#   r$   r.   r%   r&   r'   r   r   r(   r    r)   r*   r+   r-   r-   :   sˆ   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6r*   r-   c                 ód  ‡‡— ˆfd„Št          j        ˆfd„t          | ¦  «        D ¦   «         ¦  «        }t          j        |dd…ddd…f         ¦  «        |dd…ddd…f<   t          j        |dd…ddd…f         ¦  «        |dd…ddd…f<   t          j        |¦  «                             d¦  «        S )z Sinusoid position encoding tablec                 ó>   •‡ — ˆˆ fd„t          ‰¦  «        D ¦   «         S )Nc           	      óR   •— g | ]#}‰t          j        d d|dz  z  ‰z  ¦  «        z  ‘Œ$S )i'  é   )ÚnpÚpower)Ú.0Úhid_jÚd_hidÚpositions     €€r+   ú
<listcomp>zOget_sinusoid_encoding_table.<locals>.get_position_angle_vec.<locals>.<listcomp>U   s8   ø€ Ð_Ð_Ð_È��2œ8 E¨1°¸±
Ñ+;¸eÑ+CÑDÔDÑDÐ_Ð_Ð_r*   )Úrange)r8   r7   s   `€r+   Úget_position_angle_vecz;get_sinusoid_encoding_table.<locals>.get_position_angle_vecT   s+   øø€ Ø_Ð_Ð_Ð_Ð_ÕRWÐX]ÑR^ÔR^Ð_Ñ_Ô_Ð_r*   c                 ó&   •— g | ]} ‰|¦  «        ‘ŒS r)   r)   )r5   Úpos_ir;   s     €r+   r9   z/get_sinusoid_encoding_table.<locals>.<listcomp>W   s%   ø€ Ð\Ð\Ð\ÀÐ5Ð5°eÑ<Ô<Ð\Ð\Ð\r*   Nr   r2   r   )r3   Úarrayr:   ÚsinÚcosr%   r&   Ú	unsqueeze)Ú
n_positionr7   Úsinusoid_tabler;   s    ` @r+   Úget_sinusoid_encoding_tablerD   P   sÚ   øø€ ð`ð `ð `ð `ð `õ ”XÐ\Ð\Ð\Ð\Í%ÐPZÑJ[ÔJ[Ð\Ñ\Ô\Ñ]Ô]€NÝ œf ^°A°A°A°q°t¸!°t°GÔ%<Ñ=Ô=€N�1�1�1�a�d˜�d�7ÑÝ œf ^°A°A°A°q°t¸!°t°GÔ%<Ñ=Ô=€N�1�1�1�a�d˜�d�7ÑåÔ˜^Ñ,Ô,×6Ò6°qÑ9Ô9Ð9r*   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚVideoMAEEmbeddingsz7
    Construct the patch and position embeddings.

    c                 óÞ   •— t          ¦   «                              ¦   «          t          |¦  «        | _        | j        j        | _        t          | j        |j        ¦  «        | _        || _        d S ©N)	ÚsuperÚ__init__ÚVideoMAEPatchEmbeddingsÚpatch_embeddingsÚnum_patchesrD   Úhidden_sizeÚposition_embeddingsÚconfig©ÚselfrP   Ú	__class__s     €r+   rJ   zVideoMAEEmbeddings.__init__d   s[   ø€ Ý‰Œ×ÒÑÔÐå 7¸Ñ ?Ô ?ˆÔØÔ0Ô<ˆÔå#>¸tÔ?OÐQWÔQcÑ#dÔ#dˆÔ ØˆŒˆˆr*   c                 ó  — |                       |¦  «        }|| j                             ¦   «                              |¦  «                             |j        d¬¦  «        z   }|�+|j        \  }}}||          }|                     |d|¦  «        }|S )NT©ÚdeviceÚcopyéÿÿÿÿ)rL   rO   ÚdetachÚtype_asÚtorV   ÚshapeÚreshape)rR   Úpixel_valuesÚbool_masked_posÚ
embeddingsÚ
batch_sizeÚ_Únum_channelss          r+   ÚforwardzVideoMAEEmbeddings.forwardm   sŸ   € à×*Ò*¨<Ñ8Ô8ˆ
ð   $Ô":×"AÒ"AÑ"CÔ"C×"KÒ"KÈJÑ"WÔ"W×"ZÒ"ZØÔ$¨4ð #[ñ #
ô #
ñ 
ˆ
ð
 Ð&Ø*4Ô*:Ñ'ˆJ˜˜<Ø# _Ð$4Ô5ˆJØ#×+Ò+¨J¸¸LÑIÔIˆJàÐr*   ©r!   r"   r#   r$   rJ   rd   Ú__classcell__©rS   s   @r+   rF   rF   ^   sQ   ø€ € € € € ðð ð
ð ð ð ð ðð ð ð ð ð ð r*   rF   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )rK   aw  
    Video to Patch Embedding. This module turns a batch of videos of shape (batch_size, num_frames, num_channels,
    height, width) into a tensor of shape (batch_size, seq_len, hidden_size) to be consumed by a Transformer encoder.

    The seq_len (the number of patches) equals (number of frames // tubelet_size) * (height // patch_size) * (width //
    patch_size).

    c           	      óv  •— t          ¦   «                              ¦   «          |j        }|j        }|j        }|j        }|j        }|j        }t          |t          j
        j        ¦  «        r|n||f}t          |t          j
        j        ¦  «        r|n||f}|| _        || _        t          |¦  «        | _        |d         |d         z  |d         |d         z  z  || j        z  z  }|| _        || _        t          j        ||| j        |d         |d         f| j        |d         |d         f¬¦  «        | _        d S )Nr   r   )Úin_channelsÚout_channelsÚkernel_sizeÚstride)rI   rJ   Ú
image_sizeÚ
patch_sizerc   rN   Ú
num_framesÚtubelet_sizeÚ
isinstanceÚcollectionsÚabcÚIterableÚintrM   r   ÚConv3dÚ
projection)
rR   rP   rn   ro   rc   rN   rp   rq   rM   rS   s
            €r+   rJ   z VideoMAEPatchEmbeddings.__init__‰   sC  ø€ Ý‰Œ×ÒÑÔÐàÔ&ˆ
ØÔ&ˆ
ØÔ*ˆØÔ(ˆØÔ&ˆ
ØÔ*ˆå#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ý#-¨j½+¼/Ô:RÑ#SÔ#SÐq�Z�ZÐZdÐfpÐYqˆ
Ø$ˆŒØ$ˆŒÝ Ñ-Ô-ˆÔà˜Œ]˜j¨œmÑ+°
¸1´ÀÈAÄÑ0NÑOÐS]ÐaeÔarÑSrÑsð 	ð )ˆÔØ&ˆÔÝœ)Ø$Ø$ØÔ*¨J°q¬M¸:Àa¼=ÐIØÔ% z°!¤}°jÀ´mÐDð	
ñ 
ô 
ˆŒˆˆr*   c                 ó¦  — |j         \  }}}}}|| j        k    rt          d¦  «        ‚|| j        d         k    s|| j        d         k    r2t          d|› d|› d| j        d         › d| j        d         › d�	¦  «        ‚|                     dddd	d
¦  «        }|                      |¦  «                             d¦  «                             dd¦  «        }|S )NzeMake sure that the channel dimension of the pixel values match with the one set in the configuration.r   r   zInput image size (Ú*z) doesn't match model (z).r2   r   é   )r\   rc   Ú
ValueErrorrn   Úpermuterx   ÚflattenÚ	transpose)rR   r^   ra   rp   rc   ÚheightÚwidthr`   s           r+   rd   zVideoMAEPatchEmbeddings.forward¤   sù   € Ø>JÔ>PÑ;ˆ
�J ¨f°eØ˜4Ô,Ò,Ð,ÝØwñô ð ð �T”_ QÔ'Ò'Ð'¨5°D´OÀAÔ4FÒ+FÐ+FÝØw VÐwÐw¨eÐwÐwÈDÌOÐ\]ÔL^ÐwÐwÐaeÔapÐqrÔasÐwÐwÐwñô ð ð $×+Ò+¨A¨q°!°Q¸Ñ:Ô:ˆØ—_’_ \Ñ2Ô2×:Ò:¸1Ñ=Ô=×GÒGÈÈ1ÑMÔMˆ
ØÐr*   re   rg   s   @r+   rK   rK      sQ   ø€ € € € € ðð ð
ð 
ð 
ð 
ð 
ð6ð ð ð ð ð ð r*   rK   ç        ÚmoduleÚqueryÚkeyÚvalueÚattention_maskÚscalingÚdropoutÚkwargsc                 ó®  — |€|                      d¦  «        dz  }t          j        ||                     dd¦  «        ¦  «        |z  }|�||z   }t          j                             |d¬¦  «        }t          j                             ||| j        ¬¦  «        }t          j        ||¦  «        }	|	                     dd¦  «         	                    ¦   «         }	|	|fS )NrX   ç      à¿r2   r   ©Údim)ÚpÚtrainingr   )
Úsizer%   Úmatmulr   r   Ú
functionalÚsoftmaxr‰   r�   Ú
contiguous)
rƒ   r„   r…   r†   r‡   rˆ   r‰   rŠ   Úattn_weightsÚattn_outputs
             r+   Úeager_attention_forwardr˜   µ   sÈ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$r*   c                   óp   ‡ — e Zd Zdeddfˆ fd„Z	 ddej        dz  deej        ej        f         fd„Zˆ xZ	S )ÚVideoMAESelfAttentionrP   ÚreturnNc                 ó¤  •— t          ¦   «                              ¦   «          |j        |j        z  dk    r0t	          |d¦  «        s t          d|j        › d|j        › d�¦  «        ‚|| _        |j        | _        t          |j        |j        z  ¦  «        | _        | j        | j        z  | _	        |j
        | _        | j        dz  | _        d| _        t          j        |j        | j	        |j        ¬¦  «        | _        t          j        |j        | j	        |j        ¬¦  «        | _        t          j        |j        | j	        |j        ¬¦  «        | _        d S )	Nr   Úembedding_sizezThe hidden size z4 is not a multiple of the number of attention heads ú.rŒ   F©Úbias)rI   rJ   rN   Únum_attention_headsÚhasattrr|   rP   rv   Úattention_head_sizeÚall_head_sizeÚattention_probs_dropout_probÚdropout_probrˆ   Ú	is_causalr   ÚLinearÚqkv_biasr„   r…   r†   rQ   s     €r+   rJ   zVideoMAESelfAttention.__init__Ò   sB  ø€ Ý‰Œ×ÒÑÔÐØÔ Ô :Ñ:¸aÒ?Ð?ÍÐPVÐXhÑHiÔHiÐ?Ýð7 6Ô#5ð 7ð 7ØÔ3ð7ð 7ð 7ñô ð ð ˆŒØ#)Ô#=ˆÔ Ý#& vÔ'9¸FÔ<VÑ'VÑ#WÔ#WˆÔ Ø!Ô5¸Ô8PÑPˆÔØ"Ô?ˆÔØÔ/°Ñ5ˆŒØˆŒå”Y˜vÔ1°4Ô3EÈFÌOÐ\Ñ\Ô\ˆŒ
Ý”9˜VÔ/°Ô1CÈ&Ì/ÐZÑZÔZˆŒÝ”Y˜vÔ1°4Ô3EÈFÌOÐ\Ñ\Ô\ˆŒ
ˆ
ˆ
r*   r   c           
      óÄ  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }t          j        | j	        j
        t          ¦  «        } || |||d | j        | j        | j        sdn| j        ¬¦  «        \  }}	|                     ¦   «         d d…         | j        fz   }
|                     |
¦  «        }||	fS )NrX   r   r2   r‚   )r§   rˆ   r‰   éþÿÿÿ)r\   r£   r…   Úviewr   r†   r„   r   Úget_interfacerP   Ú_attn_implementationr˜   r§   rˆ   r�   r¦   r‘   r¤   r]   )rR   r   Úinput_shapeÚhidden_shapeÚkeysÚvaluesÚqueriesÚattention_interfaceÚcontext_layerÚattention_probsÚnew_context_layer_shapes              r+   rd   zVideoMAESelfAttention.forwardå   si  € ð $Ô)¨#¨2¨#Ô.ˆàC˜ÐC bÐC¨$Ô*BÐCÐCˆØ�xŠx˜Ñ&Ô&×+Ò+¨LÑ9Ô9×CÒCÀAÀqÑIÔIˆØ—’˜MÑ*Ô*×/Ò/°Ñ=Ô=×GÒGÈÈ1ÑMÔMˆØ—*’*˜]Ñ+Ô+×0Ò0°Ñ>Ô>×HÒHÈÈAÑNÔNˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð *=Ð)<ØØØØØØ”nØ”LØ#œ}ÐC�C�C°$Ô2Cð	*
ñ 	*
ô 	*
Ñ&ˆ�ð #0×"4Ò"4Ñ"6Ô"6°s¸°sÔ";¸tÔ?QÐ>SÑ"SÐØ%×-Ò-Ð.EÑFÔFˆà˜oÐ-Ð-r*   rH   )
r!   r"   r#   r   rJ   r%   ÚTensorr(   rd   rf   rg   s   @r+   rš   rš   Ñ   s–   ø€ € € € € ð]˜~ð ]°$ð ]ð ]ð ]ð ]ð ]ð ]ð( 48ð.ð .Ø"œ\¨DÑ0ð.à	ˆuŒ|˜Uœ\Ð)Ô	*ð.ð .ð .ð .ð .ð .ð .ð .r*   rš   c                   óZ   ‡ — e Zd ZdZdefˆ fd„Zdej        dej        dej        fd„Zˆ xZ	S )ÚVideoMAESelfOutputz¥
    The residual connection is defined in VideoMAELayer instead of here (as is the case with other models), due to the
    layernorm applied before each block.
    rP   c                 óÌ   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        ¦  «        | _        d S rH   )	rI   rJ   r   r¨   rN   ÚdenseÚDropoutÚhidden_dropout_probr‰   rQ   s     €r+   rJ   zVideoMAESelfOutput.__init__  sJ   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3EÑFÔFˆŒ
Ý”z &Ô"<Ñ=Ô=ˆŒˆˆr*   r   Úinput_tensorr›   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S rH   ©r¼   r‰   ©rR   r   r¿   s      r+   rd   zVideoMAESelfOutput.forward  s*   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØÐr*   )
r!   r"   r#   r$   r   rJ   r%   r¸   rd   rf   rg   s   @r+   rº   rº     s   ø€ € € € € ðð ð
>˜~ð >ð >ð >ð >ð >ð >ð
 U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð r*   rº   c                   óX   ‡ — e Zd Zdefˆ fd„Zdej        dee         dej        fd„Z	ˆ xZ
S )ÚVideoMAEAttentionrP   c                 ó˜   •— t          ¦   «                              ¦   «          t          |¦  «        | _        t	          |¦  «        | _        d S rH   )rI   rJ   rš   Ú	attentionrº   ÚoutputrQ   s     €r+   rJ   zVideoMAEAttention.__init__  s;   ø€ Ý‰Œ×ÒÑÔÐÝ.¨vÑ6Ô6ˆŒÝ(¨Ñ0Ô0ˆŒˆˆr*   r   rŠ   r›   c                 óT   —  | j         |fi |¤Ž\  }}|                      ||¦  «        }|S rH   )rÆ   rÇ   )rR   r   rŠ   Úself_attn_outputrb   rÇ   s         r+   rd   zVideoMAEAttention.forward  s<   € ð
 -˜dœn¨]ÐEÐE¸fÐEÐEÑÐ˜!Ø—’Ð-¨}Ñ=Ô=ˆØˆr*   )r!   r"   r#   r   rJ   r%   r¸   r   r   rd   rf   rg   s   @r+   rÄ   rÄ     s~   ø€ € € € € ð1˜~ð 1ð 1ð 1ð 1ð 1ð 1ð
à”|ðð Ð+Ô,ðð 
Œð	ð ð ð ð ð ð ð r*   rÄ   c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )ÚVideoMAEIntermediaterP   c                 ó  •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          |j        t          ¦  «        rt          |j                 | _        d S |j        | _        d S rH   )rI   rJ   r   r¨   rN   Úintermediate_sizer¼   rr   Ú
hidden_actÚstrr	   Úintermediate_act_fnrQ   s     €r+   rJ   zVideoMAEIntermediate.__init__)  sn   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ1°6Ô3KÑLÔLˆŒ
Ý�fÔ'­Ñ-Ô-ð 	9Ý'-¨fÔ.?Ô'@ˆDÔ$Ð$Ð$à'-Ô'8ˆDÔ$Ð$Ð$r*   r   r›   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S rH   )r¼   rÐ   )rR   r   s     r+   rd   zVideoMAEIntermediate.forward1  s,   € ØŸ
š
 =Ñ1Ô1ˆØ×0Ò0°Ñ?Ô?ˆØÐr*   ©	r!   r"   r#   r   rJ   r%   r¸   rd   rf   rg   s   @r+   rË   rË   (  sj   ø€ € € € € ð9˜~ð 9ð 9ð 9ð 9ð 9ð 9ð U¤\ð °e´lð ð ð ð ð ð ð ð r*   rË   c                   óV   ‡ — e Zd Zdefˆ fd„Zdej        dej        dej        fd„Zˆ xZS )ÚVideoMAEOutputrP   c                 óÌ   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¦  «        | _        t          j        |j        ¦  «        | _	        d S rH   )
rI   rJ   r   r¨   rÍ   rN   r¼   r½   r¾   r‰   rQ   s     €r+   rJ   zVideoMAEOutput.__init__9  sJ   ø€ Ý‰Œ×ÒÑÔÐÝ”Y˜vÔ7¸Ô9KÑLÔLˆŒ
Ý”z &Ô"<Ñ=Ô=ˆŒˆˆr*   r   r¿   r›   c                 ód   — |                       |¦  «        }|                      |¦  «        }||z   }|S rH   rÁ   rÂ   s      r+   rd   zVideoMAEOutput.forward>  s4   € ØŸ
š
 =Ñ1Ô1ˆØŸš ]Ñ3Ô3ˆØ%¨Ñ4ˆØÐr*   rÒ   rg   s   @r+   rÔ   rÔ   8  su   ø€ € € € € ð>˜~ð >ð >ð >ð >ð >ð >ð
 U¤\ð ÀÄð ÐRWÔR^ð ð ð ð ð ð ð ð r*   rÔ   c                   ó\   ‡ — e Zd ZdZdefˆ fd„Zdej        dee	         dej        fd„Z
ˆ xZS )ÚVideoMAELayerz?This corresponds to the Block class in the timm implementation.rP   c                 óz  •— t          ¦   «                              ¦   «          |j        | _        d| _        t	          |¦  «        | _        t          |¦  «        | _        t          |¦  «        | _	        t          j        |j        |j        ¬¦  «        | _        t          j        |j        |j        ¬¦  «        | _        d S )Nr   ©Úeps)rI   rJ   Úchunk_size_feed_forwardÚseq_len_dimrÄ   rÆ   rË   ÚintermediaterÔ   rÇ   r   Ú	LayerNormrN   Úlayer_norm_epsÚlayernorm_beforeÚlayernorm_afterrQ   s     €r+   rJ   zVideoMAELayer.__init__I  sš   ø€ Ý‰Œ×ÒÑÔÐØ'-Ô'EˆÔ$ØˆÔÝ*¨6Ñ2Ô2ˆŒÝ0°Ñ8Ô8ˆÔÝ$ VÑ,Ô,ˆŒÝ "¤¨VÔ-?ÀVÔEZÐ [Ñ [Ô [ˆÔÝ!œ|¨FÔ,>ÀFÔDYÐZÑZÔZˆÔÐÐr*   r   rŠ   r›   c                 óÖ   — |                       |¦  «        } | j        |fi |¤Ž}||z   }|                      |¦  «        }|                      |¦  «        }|                      ||¦  «        }|S rH   )rá   rÆ   râ   rÞ   rÇ   )rR   r   rŠ   Úhidden_states_normÚattention_outputÚlayer_outputs         r+   rd   zVideoMAELayer.forwardS  s‚   € ð
 "×2Ò2°=ÑAÔAÐØ)˜4œ>Ð*<ÐGÐGÀÐGÐGÐð )¨=Ñ8ˆð ×+Ò+¨MÑ:Ô:ˆØ×(Ò(¨Ñ6Ô6ˆð —{’{ <°Ñ?Ô?ˆàÐr*   )r!   r"   r#   r$   r   rJ   r%   r¸   r   r   rd   rf   rg   s   @r+   rØ   rØ   F  s‹   ø€ € € € € ØIÐIð[˜~ð [ð [ð [ð [ð [ð [ðà”|ðð Ð+Ô,ðð 
Œð	ð ð ð ð ð ð ð r*   rØ   c                   óN   ‡ — e Zd Zdefˆ fd„Zdej        dee         de	fd„Z
ˆ xZS )ÚVideoMAEEncoderrP   c                 óÔ   •‡— t          ¦   «                              ¦   «          ‰| _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        d| _        d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r)   ©rØ   )r5   rb   rP   s     €r+   r9   z,VideoMAEEncoder.__init__.<locals>.<listcomp>m  s!   ø€ Ð#cÐ#cÐ#c¸a¥M°&Ñ$9Ô$9Ð#cÐ#cÐ#cr*   F)	rI   rJ   rP   r   Ú
ModuleListr:   Únum_hidden_layersÚlayerÚgradient_checkpointingrQ   s    `€r+   rJ   zVideoMAEEncoder.__init__j  s`   øø€ Ý‰Œ×ÒÑÔÐØˆŒÝ”]Ð#cÐ#cÐ#cÐ#cÅ5ÈÔIaÑCbÔCbÐ#cÑ#cÔ#cÑdÔdˆŒ
Ø&+ˆÔ#Ð#Ð#r*   r   rŠ   r›   c                 óH   — | j         D ]} ||fi |¤Ž}Œt          |¬¦  «        S )N©Úlast_hidden_state)rî   r   )rR   r   rŠ   Úlayer_modules       r+   rd   zVideoMAEEncoder.forwardp  sA   € ð
 !œJð 	Bð 	BˆLØ(˜L¨ÐAÐA¸&ÐAÐAˆMˆMå°Ð?Ñ?Ô?Ð?r*   )r!   r"   r#   r   rJ   r%   r¸   r   r   r   rd   rf   rg   s   @r+   rè   rè   i  s‡   ø€ € € € € ð,˜~ð ,ð ,ð ,ð ,ð ,ð ,ð@à”|ð@ð Ð+Ô,ð@ð 
ð	@ð @ð @ð @ð @ð @ð @ð @r*   rè   c                   óL   — e Zd ZU eed<   dZdZdZdZddgZ	dZ
dZdZdZeedœZd	S )
ÚVideoMAEPreTrainedModelrP   Úvideomaer^   ÚvideoTrF   rØ   )r   r    N)r!   r"   r#   r   r'   Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_no_split_modulesÚ_supports_sdpaÚ_supports_flash_attnÚ_supports_flex_attnÚ_supports_attention_backendrØ   rš   Ú_can_record_outputsr)   r*   r+   rõ   rõ   {  sj   € € € € € € àÐÐÑØ"ÐØ$€OØÐØ&*Ð#Ø-¨Ð?ÐØ€NØÐØÐØ"&Ðà&Ø+ðð ÐÐÐr*   rõ   c                   óª   ‡ — e Zd Zˆ fd„Zd„ Ze ed¬¦  «        e	 ddej	        dej
        dz  dee         d	efd
„¦   «         ¦   «         ¦   «         Zˆ xZS )ÚVideoMAEModelc                 ó8  •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          |¦  «        | _        |j        rd | _        n%t          j
        |j        |j        ¬¦  «        | _        |                      ¦   «          d S )NrÚ   )rI   rJ   rP   rF   r`   rè   ÚencoderÚuse_mean_poolingÚ	layernormr   rß   rN   rà   Ú	post_initrQ   s     €r+   rJ   zVideoMAEModel.__init__�  s‰   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒå,¨VÑ4Ô4ˆŒÝ& vÑ.Ô.ˆŒàÔ"ð 	YØ!ˆDŒNˆNåœ\¨&Ô*<À&ÔBWÐXÑXÔXˆDŒNð 	�ŠÑÔÐÐÐr*   c                 ó   — | j         j        S rH   )r`   rL   )rR   s    r+   Úget_input_embeddingsz"VideoMAEModel.get_input_embeddingsž  s   € ØŒÔ/Ð/r*   F)Útie_last_hidden_statesNr^   r_   rŠ   r›   c                 ó¾   — |                       ||¦  «        }|                      |¦  «        }|j        }| j        �|                      |¦  «        }t	          |¬¦  «        S )aB  
        bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, sequence_length)`, *optional*):
            Boolean masked positions. Indicates which patches are masked (1) and which aren't (0). Each video in the
            batch must have the same number of masked patches. If `None`, then all patches are considered. Sequence
            length is `(num_frames // tubelet_size) * (image_size // patch_size) ** 2`.

        Examples:

        ```python
        >>> import torch
        >>> from transformers import VideoMAEVideoProcessor, VideoMAEModel
        >>> from huggingface_hub import hf_hub_download

        >>> # replace this with your own video file
        >>> video_path = hf_hub_download(
        ...     repo_id="nielsr/video-demo", filename="eating_spaghetti.mp4", repo_type="dataset"
        ... )

        >>> video_processor = VideoMAEVideoProcessor.from_pretrained("MCG-NJU/videomae-base")
        >>> model = VideoMAEModel.from_pretrained("MCG-NJU/videomae-base")

        >>> # prepare video for the model
        >>> inputs = video_processor(video_path, return_tensors="pt")

        >>> # forward pass
        >>> with torch.no_grad():
        ...     outputs = model(**inputs)

        >>> last_hidden_states = outputs.last_hidden_state
        >>> list(last_hidden_states.shape)
        [1, 1568, 768]
        ```Nrñ   )r`   r  rò   r  r   )rR   r^   r_   rŠ   Úembedding_outputÚencoder_outputsÚsequence_outputs          r+   rd   zVideoMAEModel.forward¡  s]   € ðT  Ÿ?š?¨<¸ÑIÔIÐà+/¯<ª<Ð8HÑ+IÔ+IˆØ)Ô;ˆØŒ>Ð%Ø"Ÿnšn¨_Ñ=Ô=ˆOå°ÐAÑAÔAÐAr*   rH   )r!   r"   r#   rJ   r
  r   r   r   r%   r&   Ú
BoolTensorr   r   r   rd   rf   rg   s   @r+   r  r  �  sØ   ø€ € € € € ðð ð ð ð ð0ð 0ð 0ð  Ø€_¨EÐ2Ñ2Ô2Øð 48ð.Bð .BàÔ'ð.Bð Ô)¨DÑ0ð.Bð Ð+Ô,ð	.Bð
 
ð.Bð .Bð .Bñ „^ñ 3Ô2ñ  Ôð.Bð .Bð .Bð .Bð .Br*   r  c                   ó>   ‡ — e Zd Zdefˆ fd„Zdej        defd„Zˆ xZ	S )ÚVideoMAEDecoderrP   c                 ó2  •‡— t          ¦   «                              ¦   «          |j        |j        z  |j        dz  z  }t          |¦  «        Š|j        ‰_        |j        ‰_	        |j
        ‰_        |j        ‰_        t          j        ˆfd„t!          |j        ¦  «        D ¦   «         ¦  «        | _        t          j        |j        ¦  «        | _        |dk    rt          j        |j        |¦  «        nt          j        ¦   «         | _        d| _        ‰| _        d S )Nr2   c                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r)   rë   )r5   rb   Údecoder_configs     €r+   r9   z,VideoMAEDecoder.__init__.<locals>.<listcomp>á  s!   ø€ Ð\Ð\Ð\¨q�]˜>Ñ*Ô*Ð\Ð\Ð\r*   r   F)rI   rJ   rc   rq   ro   r   Údecoder_hidden_sizerN   Údecoder_num_hidden_layersrí   Údecoder_num_attention_headsr¡   Údecoder_intermediate_sizerÍ   r   rì   r:   Údecoder_layersrß   Únormr¨   ÚIdentityÚheadrï   rP   )rR   rP   Údecoder_num_labelsr  rS   s      @€r+   rJ   zVideoMAEDecoder.__init__Ö  s  øø€ Ý‰Œ×ÒÑÔÐà#Ô0°6Ô3FÑFÈÔIZÐ\]ÑI]Ñ]Ðå! &Ñ)Ô)ˆØ%+Ô%?ˆÔ"Ø+1Ô+KˆÔ(Ø-3Ô-OˆÔ*Ø+1Ô+KˆÔ(Ý œmØ\Ð\Ð\Ð\µE¸&Ô:ZÑ4[Ô4[Ð\Ñ\Ô\ñ
ô 
ˆÔõ ”L Ô!;Ñ<Ô<ˆŒ	àI[Ð^_ÒI_ÐI_�BŒI�fÔ0Ð2DÑEÔEÐEÕegÔepÑerÔerð 	Œ	ð ',ˆÔ#Ø$ˆŒˆˆr*   r   Úreturn_token_numc                 ó¾   — | j         D ]} ||¦  «        }Œ|d d …| d …f         }|                      |¦  «        }|                      |¦  «        }t          |¬¦  «        S )N)r   )r  r  r  r   )rR   r   r  ró   r   s        r+   rd   zVideoMAEDecoder.forwardì  sw   € à Ô/ð 	8ð 	8ˆLØ(˜L¨Ñ7Ô7ˆMˆMà% a a aÐ*:Ð):Ð);Ð);Ð&;Ô<ˆð Ÿ	š	 -Ñ0Ô0ˆØ—’˜=Ñ)Ô)ˆå$¨FÐ3Ñ3Ô3Ð3r*   )
r!   r"   r#   r   rJ   r%   r¸   rv   rd   rf   rg   s   @r+   r  r  Õ  sh   ø€ € € € € ð%˜~ð %ð %ð %ð %ð %ð %ð,4 U¤\ð 4ÀSð 4ð 4ð 4ð 4ð 4ð 4ð 4ð 4r*   r  zb
    The VideoMAE Model transformer with the decoder on top for self-supervised pre-training.
    c            
       óv   ‡ — e Zd Zˆ fd„Zeedej        dej        de	e
         defd„¦   «         ¦   «         Zˆ xZS )ÚVideoMAEForPreTrainingc                 óÒ  •— t          ¦   «                              |¦  «         || _        t          |¦  «        | _        t          j        |j        |j        d¬¦  «        | _	        t          j
        t          j        dd|j        ¦  «        ¦  «        | _        t          | j        j        j        |j        ¦  «        | _        t%          |¦  «        | _        |                      ¦   «          d S )NFrŸ   r   )rI   rJ   rP   r  rö   r   r¨   rN   r  Úencoder_to_decoderÚ	Parameterr%   ÚzerosÚ
mask_tokenrD   r`   rM   rO   r  Údecoderr  rQ   s     €r+   rJ   zVideoMAEForPreTraining.__init__   s¾   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ØˆŒå% fÑ-Ô-ˆŒå"$¤)¨FÔ,>ÀÔ@ZÐafÐ"gÑ"gÔ"gˆÔÝœ,¥u¤{°1°a¸Ô9SÑ'TÔ'TÑUÔUˆŒÝ#>ØŒMÔ$Ô0°&Ô2Lñ$
ô $
ˆÔ õ ' vÑ.Ô.ˆŒð 	�ŠÑÔÐÐÐr*   r^   r_   rŠ   r›   c                 óB  —  | j         |fd|i|¤Ž}|j        }|                      |¦  «        }|j        \  }}}|€t	          d¦  «        ‚| j                             |dd¦  «                             |¦  «        }	|	                     ¦   «          	                    |j
        d¬¦  «        }	|	|                               |d|¦  «        }
|	|                              |d|¦  «        }t          j        ||
z   | j        |z   gd¬¦  «        }|                      ||j        d         ¦  «        }|j        }d}t          j        ¦   «         5  | j        j        d	k    r|}nŒ|j
        }|j        }t          j        t,          ¦  «         	                    ||¬
¦  «        dddd…ddf         }t          j        t.          ¦  «         	                    ||¬
¦  «        dddd…ddf         }||z  |z   }|j        \  }}}}}| j        j        | j        j        }}| j        j        rø|                     |||z  ||||z  |||z  |¦  «        }|                     dddddddd	¦  «                             ¦   «         }|                     |||z  |z  |z  |z  |z  ||z  |z  |¦  «        }||                     dd¬¦  «        z
  |                     ddd¬¦  «                              ¦   «         dz   z  }|                     |||z  |z  |z  |z  |z  ||z  |z  |z  ¦  «        }n¡| j        j        d	k    rt	          d¦  «        ‚|                     |||z  ||||z  |||z  |¦  «        }|                     dddddddd	¦  «                             ¦   «         }|                     |||z  |z  |z  |z  |z  ||z  |z  |z  ¦  «        }|j        \  }}}||                              |d|¦  «        }ddd¦  «         n# 1 swxY w Y   tC          ¦   «         } |||¦  «        }tE          |||j#        |j$        ¬¦  «        S )a  
        bool_masked_pos (`torch.BoolTensor` of shape `(batch_size, sequence_length)`):
            Boolean masked positions. Indicates which patches are masked (1) and which aren't (0). Each video in the
            batch must have the same number of masked patches. Sequence length is `(num_frames // tubelet_size) *
            (image_size // patch_size) ** 2`.

        Examples:
        ```python
        >>> from transformers import AutoImageProcessor, VideoMAEForPreTraining
        >>> import numpy as np
        >>> import torch

        >>> num_frames = 16
        >>> video = list(np.random.randint(0, 256, (num_frames, 3, 224, 224)))

        >>> image_processor = AutoImageProcessor.from_pretrained("MCG-NJU/videomae-base")
        >>> model = VideoMAEForPreTraining.from_pretrained("MCG-NJU/videomae-base")

        >>> pixel_values = image_processor(video, return_tensors="pt").pixel_values

        >>> num_patches_per_frame = (model.config.image_size // model.config.patch_size) ** 2
        >>> seq_length = (num_frames // model.config.tubelet_size) * num_patches_per_frame
        >>> bool_masked_pos = torch.randint(0, 2, (1, seq_length)).bool()

        >>> outputs = model(pixel_values, bool_masked_pos=bool_masked_pos)
        >>> loss = outputs.loss
        ```r_   Nz!One must provided a boolean mask rX   TrU   r   r�   r   )rV   Údtyper   r{   é   r2   é   é   r«   )rŽ   Úkeepdim)rŽ   Úunbiasedr.  g�íµ ÷Æ°>zQCan't unnormalize non-RGB images. Consider setting config.norm_pix_loss to False.©r.   r   r   r    )%rö   rò   r$  r\   r|   rO   ÚexpandrZ   rY   r[   rV   r]   r%   Úcatr'  r(  r   Úno_gradrP   rc   r*  Ú	as_tensorr   r   rq   ro   Únorm_pix_lossr¬   r}   r•   ÚmeanÚvarÚsqrtr   r-   r   r    )rR   r^   r_   rŠ   Úoutputsr  ra   rb   rc   Úexpanded_position_embeddingsÚpos_emb_visibleÚpos_emb_maskÚx_fullÚdecoder_outputsr   r.   ÚframesrV   r*  r6  ÚstdÚtimer€   r�   rq   ro   Úframes_normÚvideos_patchÚlabelsÚloss_fcts                                 r+   rd   zVideoMAEForPreTraining.forward  s>  € ðF $1 4¤=°Ð#iÐ#iÈÐ#iÐbhÐ#iÐ#iˆà!Ô3ˆØ×1Ò1°/ÑBÔBˆð '6Ô&;Ñ#ˆ
�A�|ð Ð"ÝÐ@ÑAÔAÐAà'+Ô'?×'FÒ'FÀzÐSUÐWYÑ'ZÔ'Z×'bÒ'bÐcoÑ'pÔ'pÐ$Ø'C×'JÒ'JÑ'LÔ'L×'OÒ'OÐWcÔWjÐquÐ'OÑ'vÔ'vÐ$Ø6¸Ð7GÔH×PÒPÐQ[Ð]_ÐamÑnÔnˆØ3°OÔD×LÒLÈZÐY[Ð]iÑjÔjˆõ ”˜O¨oÑ=¸t¼ÐQ]Ñ?]Ð^ÐdeÐfÑfÔfˆð 26·²¸fÀlÔFXÐYZÔF[Ñ1\Ô1\ˆØ Ô'ˆàˆÝŒ]‰_Œ_ð H	Yð H	YàŒ{Ô'¨1Ò,Ð,à%��ð &Ô,�Ø$Ô*�Ý”Õ'<Ñ=Ô=×@Ò@ÈÐV[Ð@Ñ\Ô\Ð]aÐcgÐijÐijÐijÐlpÐrvÐ]vÔw�Ý”oÕ&:Ñ;Ô;×>Ò>ÀfÐTYÐ>ÑZÔZÐ[_ÐaeÐghÐghÐghÐjnÐptÐ[tÔu�Ø%¨Ñ+¨dÑ2�à<B¼LÑ9ˆJ˜˜l¨F°EØ'+¤{Ô'?ÀÄÔAW˜*ˆLØŒ{Ô(ð 6àŸšØØ˜LÑ(Ø Ø Ø˜jÑ(ØØ˜ZÑ'Øñ	ô 	�ð  Ÿš¨¨1¨a°°A°q¸!¸QÑ?Ô?×JÒJÑLÔL�àŸšØØ˜LÑ(¨6Ñ1°ZÑ?À%ÑGÈ:ÑUØ  :Ñ-°
Ñ:Ø ñ	ô �ð  &¨¯ª¸ÀD¨Ñ(IÔ(IÑIØ—J’J 2°¸d�JÑCÔC×HÒHÑJÔJÈTÑQñ�ð  +×/Ò/ØØ˜LÑ(¨6Ñ1°ZÑ?À%ÑGÈ:ÑUØ  :Ñ-°
Ñ:¸\ÑIñ ô  ��ð ”;Ô+¨qÒ0Ð0Ý$Økñô ð ð  ŸšØØ˜LÑ(Ø Ø Ø˜jÑ(ØØ˜ZÑ'Øñ	ô 	�ð  Ÿš¨¨1¨a°°A°q¸!¸QÑ?Ô?×JÒJÑLÔL�à%Ÿ{š{ØØ˜LÑ(¨6Ñ1°ZÑ?À%ÑGÈ:ÑUØ  :Ñ-°
Ñ:¸\ÑIñ ô  �ð +7Ô*<Ñ'ˆJ˜˜<Ø! /Ô2×:Ò:¸:ÀrÈ<ÑXÔXˆFðQH	Yð H	Yð H	Yñ H	Yô H	Yð H	Yð H	Yð H	Yð H	Yð H	Yð H	Yøøøð H	Yð H	Yð H	Yð H	YõT ‘9”9ˆØˆx˜ Ñ'Ô'ˆå+ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
s   ÅJOÏO#Ï&O#)r!   r"   r#   rJ   r   r   r%   r&   r  r   r   r-   rd   rf   rg   s   @r+   r"  r"  ú  s¡   ø€ € € € € ðð ð ð ð ð" ØðL
àÔ'ðL
ð Ô)ðL
ð Ð+Ô,ð	L
ð
 
&ðL
ð L
ð L
ñ „^ñ ÔðL
ð L
ð L
ð L
ð L
r*   r"  z­
    VideoMAE Model transformer with a video classification head on top (a linear layer on top of the average pooled hidden
    states of all tokens) e.g. for ImageNet.
    c                   óˆ   ‡ — e Zd Zˆ fd„Zee	 	 ddej        dz  dej        dz  dee	         de
fd„¦   «         ¦   «         Zˆ xZS )	ÚVideoMAEForVideoClassificationc                 ó„  •— t          ¦   «                              |¦  «         |j        | _        t          |¦  «        | _        |j        rt          j        |j        ¦  «        nd | _	        |j        dk    rt          j
        |j        |j        ¦  «        nt          j        ¦   «         | _        |                      ¦   «          d S )Nr   )rI   rJ   Ú
num_labelsr  rö   r  r   rß   rN   Úfc_normr¨   r  Ú
classifierr  rQ   s     €r+   rJ   z'VideoMAEForVideoClassification.__init__©  s§   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à Ô+ˆŒÝ% fÑ-Ô-ˆŒð <BÔ;RÐ\•r”| FÔ$6Ñ7Ô7Ð7ÐX\ˆŒØNTÔN_ÐbcÒNcÐNc�"œ) FÔ$6¸Ô8IÑJÔJÐJÕikÔitÑivÔivˆŒð 	�ŠÑÔÐÐÐr*   Nr^   rD  rŠ   r›   c                 ó>  —  | j         |fi |¤Ž}|j        }| j        �+|                     d¦  «        }|                      |¦  «        }n|dd…df         }|                      |¦  «        }d}|� | j        ||| j        fi |¤Ž}t          |||j        |j	        ¬¦  «        S )a˜  
        labels (`torch.LongTensor` of shape `(batch_size,)`, *optional*):
            Labels for computing the image classification/regression loss. Indices should be in `[0, ...,
            config.num_labels - 1]`. If `config.num_labels == 1` a regression loss is computed (Mean-Square loss), If
            `config.num_labels > 1` a classification loss is computed (Cross-Entropy).

        Examples:

        ```python
        >>> import torch
        >>> from transformers import VideoMAEVideoProcessor, VideoMAEForVideoClassification
        >>> from huggingface_hub import hf_hub_download

        >>> # replace this with your own video file
        >>> video_path = hf_hub_download(
        ...     repo_id="nielsr/video-demo", filename="eating_spaghetti.mp4", repo_type="dataset"
        ... )

        >>> video_processor = VideoMAEVideoProcessor.from_pretrained("MCG-NJU/videomae-base-finetuned-kinetics")
        >>> model = VideoMAEForVideoClassification.from_pretrained("MCG-NJU/videomae-base-finetuned-kinetics")

        >>> inputs = video_processor(video_path, return_tensors="pt")

        >>> with torch.no_grad():
        ...     outputs = model(**inputs)
        ...     logits = outputs.logits

        >>> # model predicts one of the 400 Kinetics-400 classes
        >>> predicted_label = logits.argmax(-1).item()
        >>> print(model.config.id2label[predicted_label])
        eating spaghetti
        ```Nr   r   r0  )
rö   rò   rJ  r6  rK  Úloss_functionrP   r   r   r    )	rR   r^   rD  rŠ   r9  r  rÇ   r   r.   s	            r+   rd   z&VideoMAEForVideoClassification.forward¶  sË   € ðR $1 4¤=°Ð#HÐ#HÀÐ#HÐ#HˆØ!Ô3ˆàŒ<Ð#Ø$×)Ò)¨!Ñ,Ô,ˆFØ—\’\ &Ñ)Ô)ˆFˆFà$ Q Q Q¨ TÔ*ˆFà—’ Ñ(Ô(ˆàˆØÐØ%�4Ô% f¨f°d´kÐLÐLÀVÐLÐLˆDå$ØØØ!Ô/ØÔ)ð	
ñ 
ô 
ð 	
r*   )NN)r!   r"   r#   rJ   r   r   r%   r¸   r   r   r   rd   rf   rg   s   @r+   rG  rG  ¢  sª   ø€ € € € € ðð ð ð ð ð Øð -1Ø&*ð;
ð ;
à”l TÑ)ð;
ð ”˜tÑ#ð;
ð Ð+Ô,ð	;
ð
 
ð;
ð ;
ð ;
ñ „^ñ Ôð;
ð ;
ð ;
ð ;
ð ;
r*   rG  )r"  r  rõ   rG  )Nr‚   )Br$   Úcollections.abcrs   r   rW   r   Údataclassesr   Únumpyr3   r%   r   Útorch.nnr   Úactivationsr	   Úmodeling_layersr
   Úmodeling_outputsr   r   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.constantsr   r   Úutils.genericr   r   Úutils.output_capturingr   Úconfiguration_videomaer   Ú
get_loggerr!   Úloggerr   r-   rD   ÚModulerF   rK   r¸   Úfloatr˜   rš   rº   rÄ   rË   rÔ   rØ   rè   rõ   r  r  r"  rG  Ú__all__r)   r*   r+   ú<module>ra     sË  ðð 3Ð 2à Ð Ð Ð Ø $Ð $Ð $Ð $Ð $Ð $Ø Ð Ð Ð Ð Ð Ø !Ð !Ð !Ð !Ð !Ð !à Ð Ð Ð Ø €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð à !Ð !Ð !Ð !Ð !Ð !Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ JÐ JÐ JÐ JÐ JÐ JÐ JÐ JØ IÐ IÐ IÐ IÐ IÐ IÐ IÐ IØ 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø 2Ð 2Ð 2Ð 2Ð 2Ð 2ð 
ˆÔ	˜HÑ	%Ô	%€ð €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7˜Kñ 7ô 7ñ „ñô ð7ð €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7 ;ñ 7ô 7ñ „ñô ð7ð :ð :ð :ðð ð ð ð ˜œñ ô ð ðB2ð 2ð 2ð 2ð 2˜bœiñ 2ô 2ð 2ðx !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð80.ð 0.ð 0.ð 0.ð 0.˜BœIñ 0.ô 0.ð 0.ðhð ð ð ð ˜œñ ô ð ð$ð ð ð ð ˜œ	ñ ô ð ð"ð ð ð ð ˜2œ9ñ ô ð ð 
ð 
ð 
ð 
ð 
�R”Yñ 
ô 
ð 
ðð ð ð ð Ð.ñ ô ð ðF@ð @ð @ð @ð @�b”iñ @ô @ð @ð$ ðð ð ð ð ˜oñ ô ñ „ðð" ðDBð DBð DBð DBð DBÐ+ñ DBô DBñ „ðDBðN"4ð "4ð "4ð "4ð "4�b”iñ "4ô "4ð "4ðJ €ððñ ô ð
`
ð `
ð `
ð `
ð `
Ð4ñ `
ô `
ñô ð
`
ðF €ððñ ô ðK
ð K
ð K
ð K
ð K
Ð%<ñ K
ô K
ñô ðK
ð\ sÐ
rÐ
r€€€r*   