§
    ‚Štj—I ã                   óþ  — d Z ddlZddlmZ ddlmZ ddlZddlmZ ddlm	Z
 ddlmZ dd	lmZ 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mZmZm Z  ddl!m"Z"  e j#        e$¦  «        Z%	 	 dqdej&        dej'        dej'        dej'        dej'        dz  de(dz  de(dee         fd„Z) G d„ dej&        ¦  «        Z* G d„ dej&        ¦  «        Z+	 	 	 drd!ej'        d"e(d#e,dz  d$e-d%e.f
d&„Z/	 	 dsd!ej'        d'e,e.z  d#e,dz  d%e.fd(„Z0 G d)„ d*ej&        ¦  «        Z1 G d+„ d,ej&        ¦  «        Z2 G d-„ d.ej&        ¦  «        Z3e G d/„ d0e¦  «        ¦   «         Z4 G d1„ d2ej&        ¦  «        Z5 G d3„ d4ej&        ¦  «        Z6 G d5„ d6e4¦  «        Z7 ed7¬8¦  «        e G d9„ d:e¦  «        ¦   «         ¦   «         Z8 ed;¬8¦  «        e G d<„ d=e¦  «        ¦   «         ¦   «         Z9 ed>¬8¦  «        e G d?„ d@e¦  «        ¦   «         ¦   «         Z: edA¬8¦  «        e G dB„ dCe¦  «        ¦   «         ¦   «         Z; edD¬8¦  «        e G dE„ dFe¦  «        ¦   «         ¦   «         Z< edG¬8¦  «        e G dH„ dIe¦  «        ¦   «         ¦   «         Z=dJej>        j?        dKej'        dLej'        fdM„Z@dtdNej'        dOej'        dz  dLej'        fdP„ZA G dQ„ dRej&        ¦  «        ZB G dS„ dTej&        ¦  «        ZC G dU„ dVej&        ¦  «        ZD G dW„ dXej&        ¦  «        ZEe G dY„ dZe4¦  «        ¦   «         ZF G d[„ d\ej&        ¦  «        ZG ed]¬8¦  «         G d^„ d_e4¦  «        ¦   «         ZH G d`„ daej&        ¦  «        ZI edb¬8¦  «         G dc„ dde4¦  «        ¦   «         ZJ ede¬8¦  «         G df„ dgej&        ¦  «        ¦   «         ZK edh¬8¦  «         G di„ dje4¦  «        ¦   «         ZL G dk„ dlej&        ¦  «        ZM edm¬8¦  «         G dn„ doe4¦  «        ¦   «         ZNg dp¢ZOdS )uzPyTorch PatchTST model.é    N)ÚCallable)Ú	dataclass)Únné   )Úinitialization)ÚACT2CLS)Úis_deepspeed_zero3_enabled)ÚFlashAttentionKwargs)ÚBaseModelOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚNegativeBinomialOutputÚNormalOutputÚStudentTOutput)ÚModelOutputÚTransformersKwargsÚauto_docstringÚloggingé   )ÚPatchTSTConfigç        Ú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 )Néÿÿÿÿç      à¿é   r   ©Údim)ÚpÚtrainingr   )
ÚsizeÚtorchÚmatmulÚ	transposer   Ú
functionalÚsoftmaxr   r(   Ú
contiguous)
r   r   r   r   r   r   r   r    Úattn_weightsÚattn_outputs
             úl/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/patchtst/modeling_patchtst.pyÚeager_attention_forwardr3   '   sÈ   € ð €Ø—*’*˜R‘.”. DÑ(ˆõ ”<  s§}¢}°Q¸Ñ':Ô':Ñ;Ô;¸gÑE€LàÐ!Ø# nÑ4ˆå”=×(Ò(¨¸2Ð(Ñ>Ô>€LÝ”=×(Ò(¨¸È6Ì?Ð(Ñ[Ô[€Lå”,˜|¨UÑ3Ô3€KØ×'Ò'¨¨1Ñ-Ô-×8Ò8Ñ:Ô:€Kà˜Ð$Ð$ó    c                   óþ   ‡ — e Zd ZdZ	 	 	 	 	 ddededed	ed
edededz  fˆ fd„Z	 	 	 dde	j
        de	j
        dz  de	j
        dz  dedz  dee         dee	j
        e	j
        dz  ee	j
                 dz  f         fd„Zˆ xZS )ÚPatchTSTAttentionz=Multi-headed attention from 'Attention Is All You Need' paperr   FTNÚ	embed_dimÚ	num_headsr   Ú
is_decoderÚbiasÚ	is_causalÚconfigc                 ó
  •— t          ¦   «                              ¦   «          || _        || _        || _        ||z  | _        || _        | j        |z  | j        k    rt          d| j        › d|› d�¦  «        ‚| j        dz  | _        || _	        || _
        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        t          j        |||¬¦  «        | _        d S )Nz;embed_dim must be divisible by num_heads (got `embed_dim`: z and `num_heads`: ú).r#   ©r:   )ÚsuperÚ__init__r7   r8   r   Úhead_dimr<   Ú
ValueErrorr   r9   r;   r   ÚLinearÚk_projÚv_projÚq_projÚout_proj)	Úselfr7   r8   r   r9   r:   r;   r<   Ú	__class__s	           €r2   rA   zPatchTSTAttention.__init__G   s  ø€ õ 	‰Œ×ÒÑÔÐØ"ˆŒØ"ˆŒØˆŒØ! YÑ.ˆŒØˆŒàŒM˜IÑ%¨$¬.Ò8Ð8Ýð3ÈdÌnð 3ð 3Ø%.ð3ð 3ð 3ñô ð ð ”} dÑ*ˆŒØ$ˆŒØ"ˆŒå”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝ”i 	¨9¸4Ð@Ñ@Ô@ˆŒÝœ	 )¨Y¸TÐBÑBÔBˆŒˆˆr4   Úhidden_statesÚkey_value_statesr   Úoutput_attentionsr    Úreturnc                 óú  — |du}|j         dd…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }	|r|n|}
g |
j         dd…         ¢d‘| j        ‘R }|                      |
¦  «                             |¦  «                             dd¦  «        }|                      |
¦  «                             |¦  «                             dd¦  «        }t          j        | j	        j
        t          ¦  «        } || |	|||f| j        sdn| j        | j        |dœ|¤Ž\  }} |j        g |¢d‘R Ž                      ¦   «         }|                      |¦  «        }||dfS )z#Input shape: Batch x Time x ChannelNr"   r   r$   r   )r   r   rM   )ÚshaperB   rG   Úviewr,   rE   rF   r   Úget_interfacer<   Ú_attn_implementationr3   r(   r   r   Úreshaper/   rH   )rI   rK   rL   r   rM   r    Úis_cross_attentionÚinput_shapeÚhidden_shapeÚquery_statesÚcurrent_statesÚkv_shapeÚ
key_statesÚvalue_statesÚattention_interfacer1   r0   s                    r2   ÚforwardzPatchTSTAttention.forwardf   s½  € ð .°TÐ9Ðð $Ô)¨#¨2¨#Ô.ˆà8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆð —{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆà-?ÐRÐ)Ð)À]ˆØB�^Ô)¨#¨2¨#Ô.ÐB°ÐB°D´MÐBÐBˆØ—[’[ Ñ0Ô0×5Ò5°hÑ?Ô?×IÒIÈ!ÈQÑOÔOˆ
Ø—{’{ >Ñ2Ô2×7Ò7¸ÑAÔA×KÒKÈAÈqÑQÔQˆå(?Ô(MØŒKÔ,Õ.Eñ)
ô )
Ðð %8Ð$7ØØØØØð
%
ð  $œ}Ð>�C�C°$´,Ø”LØ/ð
%
ð 
%
ð ð
%
ð 
%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—m’m KÑ0Ô0ˆà˜L¨$Ð.Ð.r4   )r   FTFN)NNF)Ú__name__Ú
__module__Ú__qualname__Ú__doc__ÚintÚfloatÚboolr   rA   r*   ÚTensorr   r
   Útupler^   Ú__classcell__©rJ   s   @r2   r6   r6   D   sJ  ø€ € € € € ØGÐGð Ø ØØØ(,ðCð CàðCð ðCð ð	Cð
 ðCð ðCð ðCð  Ñ%ðCð Cð Cð Cð Cð CðD 15Ø.2Ø).ð0/ð 0/à”|ð0/ð  œ,¨Ñ-ð0/ð œ tÑ+ð	0/ð
   $™;ð0/ð Ð-Ô.ð0/ð 
ˆuŒ|˜Uœ\¨DÑ0°%¸¼Ô2EÈÑ2LÐLÔ	Mð0/ð 0/ð 0/ð 0/ð 0/ð 0/ð 0/ð 0/r4   r6   c                   ó>   ‡ — e Zd ZdZdefˆ fd„Zdej        fd„Zˆ xZ	S )ÚPatchTSTBatchNormzP
    Compute batch normalization over the sequence length (time) dimension.
    r<   c                 ó’   •— t          ¦   «                              ¦   «          t          j        |j        |j        ¬¦  «        | _        d S )N©Úeps)r@   rA   r   ÚBatchNorm1dÚd_modelÚnorm_epsÚ	batchnorm©rI   r<   rJ   s     €r2   rA   zPatchTSTBatchNorm.__init__ž   s7   ø€ Ý‰Œ×ÒÑÔÐÝœ¨¬¸F¼OÐLÑLÔLˆŒˆˆr4   Úinputsc                 ó„   — |                      dd¦  «        }|                      |¦  «        }|                      dd¦  «        S )a  
        Parameters:
            inputs (`torch.Tensor` of shape `(batch_size, sequence_length, d_model)`):
                input for Batch norm calculation
        Returns:
            `torch.Tensor` of shape `(batch_size, sequence_length, d_model)`
        r   r$   )r,   rr   )rI   rt   Úoutputs      r2   r^   zPatchTSTBatchNorm.forward¢   s@   € ð ×!Ò! ! QÑ'Ô'ˆØ—’ Ñ'Ô'ˆØ×Ò  1Ñ%Ô%Ð%r4   ©
r_   r`   ra   rb   r   rA   r*   rf   r^   rh   ri   s   @r2   rk   rk   ™   sr   ø€ € € € € ðð ðM˜~ð Mð Mð Mð Mð Mð Mð
&˜eœlð 
&ð 
&ð 
&ð 
&ð 
&ð 
&ð 
&ð 
&r4   rk   Frt   Ú
mask_ratioÚunmasked_channel_indicesÚchannel_consistent_maskingÚ
mask_valuec                 óÒ  — |dk     s|dk    rt          d|› d�¦  «        ‚| j        \  }}}}| j        }	t          |d|z
  z  ¦  «        }
|r0t	          j        |d||	¬¦  «        }|                     d|d¦  «        }nt	          j        ||||	¬¦  «        }t	          j        ||||	¬¦  «        }d|dd…dd…d|
…f<   t	          j        |d¬¦  «        }t	          j        |d¬¦  «        }t	          j	        |d|¬	¦  «        }| 
                    d¦  «                             ddd|¦  «        }|�d|dd…|dd…dd…f<   |                      |                     ¦   «         |¦  «        }||d
         fS )aÆ  random_masking: Mask the input considering the control variables.

    Args:
        inputs (`torch.Tensor` of shape `(batch_size, num_channels, sequence_length, num_features)`):
            The input tensor to mask.
        mask_ratio (`float`):
            Masking ratio applied to mask the input data during random pretraining. It is the number between 0 and 1.
        unmasked_channel_indices (list, *optional*):
            Indices of channels that will not be masked.
        channel_consistent_masking (bool, *optional*, defaults to `False`):
            When true, masking will be same across all channels of a timeseries. Otherwise, masking positions will vary
            across channels.
        mask_value (int, *optional*, defaults to 0):
            Define the value of masked patches for pretraining.

    Returns:
        `tuple(torch.Tensor)`: inputs_mask, masked input, same shape as input Tensor and mask tensor of shape [bs x c x
        n]
    r   r   zMask ratio z has to be between 0 and 1.©ÚdeviceNr"   r%   )r&   Úindex©.r   )rC   rP   r~   rc   r*   ÚrandÚrepeatÚonesÚargsortÚgatherÚ	unsqueezeÚmasked_fillre   )rt   rx   ry   rz   r{   Ú
batch_sizeÚnum_channelsÚsequence_lengthÚnum_featuresr~   Úlen_keepÚnoiseÚmaskÚids_shuffleÚids_restoreÚinputs_masks                   r2   Úrandom_maskingr’   ¯   s›  € ð4 �A‚~€~˜ qš˜ÝÐN zÐNÐNÐNÑOÔOÐOà>D¼lÑ;€J�˜o¨|ØŒ]€Få�? a¨*¡nÑ5Ñ6Ô6€Hà!ð UÝ”
˜: q¨/À&ÐIÑIÔIˆØ—’˜Q ¨aÑ0Ô0ˆˆõ ”
˜: |°_ÈVÐTÑTÔTˆõ Œ:�j ,°ÈÐOÑOÔO€DØ€DˆˆˆˆAˆAˆAˆy�ˆyˆÑõ ”- ¨2Ð.Ñ.Ô.€KÝ”- °Ð4Ñ4Ô4€KåŒ<˜ "¨KÐ8Ñ8Ô8€DØ�>Š>˜"ÑÔ×$Ò$ Q¨¨1¨lÑ;Ô;€DØÐ+Ø23ˆˆQˆQˆQÐ(¨!¨!¨!¨Q¨Q¨QÐ.Ñ/à×$Ò$ T§Y¢Y¡[¤[°*Ñ=Ô=€KØ˜˜VœÐ$Ð$r4   Únum_forecast_mask_patchesc                 ó®  — t          |t          ¦  «        r|g}d„ |D ¦   «         }| j        \  }}}}t          j        |||| j        ¬¦  «        }	g }
d}t          |¦  «        }t          ||¦  «        D ]V\  }}|dk    s||k    rt          d|› d�¦  «        ‚t          ||z  |z  ¦  «        }|
 	                    |||g¦  «         ||z  }ŒWt          |
d„ ¬¦  «        }
||k     r|
d         d         ||z
  z   |
d         d<   n#||k    r|
d	         d         ||z
  z   |
d	         d<   d}|
D ]\  }}}||z   }d
|	||…dd…| d…f<   |}Œt          j        |	j        d         ¦  «        }|	|         }	|	                     d	¦  «                             d
d
d
|¦  «        }	|�d|	dd…|dd…dd…f<   |                      |	                     ¦   «         |¦  «        }||	d         fS )a¡  Forecast masking that masks the last K patches where K is from the num_forecast_mask_patches.
    If num_forecast_mask_patches is a list, samples in the batch will be randomly masked by numbers defined in the list.

    Parameters:
        inputs (`torch.Tensor`):
            Input of shape `(bs, num_channels, num_patch, patch_length)`
        num_forecast_mask_patches (`list`):
            Number of patches to be masked at the end of each batch sample. e.g. 4 or [3, 5].
        unmasked_channel_indices (`list`, *optional*):
            Indices of channels that are not masked.
        mask_value (`int`, *optional*, defaults to 0):
            Values in the masked patches will be filled by `mask_value`.

    Returns:
        `tuple(torch.Tensor)`: inputs_mask, masked input, same shape as inputs Tensor and Mask tensor of shape `(bs,
        num_channels , num_patch)` or `(bs, tsg1, tsg2, num_channels, num_patch)`
    c                 ó   — g | ]}d ‘ŒS )r   © )Ú.0Ú_s     r2   ú
<listcomp>z$forecast_masking.<locals>.<listcomp>  s   € ÐAÐAÐA !˜AÐAÐAÐAr4   r}   r   znum_forecast_mask_patches z6 should be greater than 0 and less than total patches.c                 ó   — | d         S )Nr$   r–   )Úxs    r2   ú<lambda>z"forecast_masking.<locals>.<lambda>  s
   € ¨!¨A¬$€ r4   )r   r$   r"   r   Nr€   )Ú
isinstancerc   rP   r*   Úzerosr~   ÚsumÚziprC   ÚappendÚsortedÚrandpermr†   r‚   r‡   re   )rt   r“   ry   r{   Úforecast_mask_ratiosrˆ   r‰   rŠ   r‹   rŽ   Út_listÚtotal_lengthÚtotal_ratioÚpatch_lengthÚratioÚtemp_lenÚbatch1Ú	patch_lenr˜   Úbatch2Úpermr‘   s                         r2   Úforecast_maskingr¯   é   sU  € õ0 Ð+­SÑ1Ô1ð @Ø%>Ð$?Ð!ØAÐAÐ'@ÐAÑAÔAÐà>D¼lÑ;€J�˜o¨|ÝŒ;�z <°ÈÌÐWÑWÔW€Dà€FØ€LÝÐ*Ñ+Ô+€Kå"Ð#<Ð>RÑSÔSð !ð !Ñˆ�eØ˜1ÒÐ °Ò ?Ð ?ÝØq¨\ÐqÐqÐqñô ð õ �z EÑ)¨KÑ7Ñ8Ô8ˆØ�Š�| U¨HÐ5Ñ6Ô6Ð6Ø˜Ñ ˆˆå�F  Ð/Ñ/Ô/€Fà�jÒ Ð Ø˜a”y ”| z°LÑ'@ÑAˆˆqŒ	�!‰ˆØ	˜
Ò	"Ð	"Ø˜rœ
 1œ¨¸
Ñ)BÑCˆˆrŒ
�1‰à€FØ"(ð ð Ñˆ	�1�hØ˜(Ñ"ˆØ./ˆˆV�Fˆ]˜A˜A˜A 	˜z˜{˜{Ð*Ñ+ØˆˆåŒ>˜$œ* Qœ-Ñ(Ô(€DØ�Œ:€Dà�>Š>˜"ÑÔ×$Ò$ Q¨¨1¨lÑ;Ô;€DØÐ+Ø23ˆˆQˆQˆQÐ(¨!¨!¨!¨Q¨Q¨QÐ.Ñ/à×$Ò$ T§Y¢Y¡[¤[°*Ñ=Ô=€KØ˜˜VœÐ$Ð$r4   c                   ó>   ‡ — e Zd ZdZdefˆ fd„Zdej        fd„Zˆ xZ	S )ÚPatchTSTPatchifyz³
    A class to patchify the time series sequence into different patches

    Returns:
        `torch.Tensor` of shape `(batch_size, num_channels, num_patches, patch_length)`
    r<   c                 ó¦  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        | j        | j        k    r t          d| j        › d| j        › d�¦  «        ‚t          | j        | j        ¦  «        | j        z
  | j        z  dz   | _        | j        | j        | j        dz
  z  z   }| j        |z
  | _	        d S )NzSequence length (z+) has to be greater than the patch length (ú)r   )
r@   rA   Úcontext_lengthrŠ   r¨   Úpatch_striderC   ÚmaxÚnum_patchesÚsequence_start)rI   r<   Únew_sequence_lengthrJ   s      €r2   rA   zPatchTSTPatchify.__init__5  sá   ø€ Ý‰Œ×ÒÑÔÐà%Ô4ˆÔØ"Ô/ˆÔØ"Ô/ˆÔàÔ 4Ô#4Ò4Ð4ÝØy DÔ$8ÐyÐyÐeiÔevÐyÐyÐyñô ð õ
   Ô 4°dÔ6GÑHÔHÈ4ÔK\Ñ\ÐaeÔarÑrÐuvÑvˆÔØ"Ô/°$Ô2CÀtÔGWÐZ[ÑG[Ñ2\Ñ\ÐØ"Ô2Ð5HÑHˆÔÐÐr4   Úpast_valuesc                 ó,  — |j         d         }|| j        k    rt          d|› d| j        › d�¦  «        ‚|dd…| j        d…dd…f         }|                     d| j        | j        ¬¦  «        }|                     dd¦  «                             ¦   «         }|S )a!  
        Parameters:
            past_values (`torch.Tensor` of shape `(batch_size, sequence_length, num_channels)`, *required*):
                Input for patchification

        Returns:
            `torch.Tensor` of shape `(batch_size, num_channels, num_patches, patch_length)`
        éþÿÿÿzInput sequence length (z%) doesn't match model configuration (r>   N)Ú	dimensionr)   Ústepéýÿÿÿ)	rP   rŠ   rC   r¸   Úunfoldr¨   rµ   r,   r/   )rI   rº   rŠ   rv   s       r2   r^   zPatchTSTPatchify.forwardF  s²   € ð &Ô+¨BÔ/ˆØ˜dÔ2Ò2Ð2ÝØx¨/ÐxÐxÐ`dÔ`tÐxÐxÐxñô ð ð ˜Q˜Q˜Q Ô 3Ð 5Ð 5°q°q°qÐ8Ô9ˆà—’¨°$Ô2CÈ$ÔJ[�Ñ\Ô\ˆà×!Ò! " bÑ)Ô)×4Ò4Ñ6Ô6ˆØˆr4   rw   ri   s   @r2   r±   r±   -  sr   ø€ € € € € ðð ðI˜~ð Ið Ið Ið Ið Ið Ið" 5¤<ð ð ð ð ð ð ð ð r4   r±   c                   ó>   ‡ — e Zd ZdZdefˆ fd„Zdej        fd„Zˆ xZ	S )ÚPatchTSTMaskinga�  
    Class to perform random or forecast masking.

    Parameters:
        config (`PatchTSTConfig`): model config
    Returns:
        x_mask (`torch.Tensor` of shape `(batch_size, num_channels, num_patches, patch_length)`)
            Masked patched input
        mask (`torch.Tensor` of shape `(batch_size, num_channels, num_patches)`)
            Bool tensor indicating True on masked points
    r<   c                 ó  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        |j        | _        | j        �t          | j        ¦  «        | _        d S d S ©N)	r@   rA   Úrandom_mask_ratiorz   Ú	mask_typer“   ry   r{   r¢   rs   s     €r2   rA   zPatchTSTMasking.__init__j  sƒ   ø€ Ý‰Œ×ÒÑÔÐØ!'Ô!9ˆÔØ*0Ô*KˆÔ'ØÔ)ˆŒØ)/Ô)IˆÔ&Ø(.Ô(GˆÔ%Ø Ô+ˆŒØÔ(Ð4Ý,2°4Ô3PÑ,QÔ,QˆDÔ)Ð)Ð)ð 5Ð4r4   Úpatch_inputc                 ó2  — | j         dk    r,t          || j        | j        | j        | j        ¬¦  «        \  }}nI| j         dk    r&t          || j        | j        | j        ¬¦  «        \  }}nt          d| j         › d�¦  «        ‚| 	                    ¦   «         }||fS )aä  
        Parameters:
            patch_input (`torch.Tensor` of shape `(batch_size, num_channels, num_patches, patch_length)`, *required*):
                Patch input

        Return:
            masked_input (`torch.Tensor` of shape `(batch_size, num_channels, num_patches, patch_length)`)
                Masked patched input
            mask (`torch.Tensor` of shape `(batch_size, num_channels, num_patches)`)
                Bool tensor indicating True on masked points

        Úrandom)rt   rx   ry   rz   r{   Úforecast)rt   r“   ry   r{   zInvalid mask type ú.)
rÆ   r’   rÅ   ry   rz   r{   r¯   r“   rC   re   )rI   rÇ   Úmasked_inputrŽ   s       r2   r^   zPatchTSTMasking.forwardu  s¼   € ð Œ>˜XÒ%Ð%Ý!/Ø"ØÔ1Ø)-Ô)FØ+/Ô+JØœ?ð"ñ "ô "ÑˆL˜$˜$ð Œ^˜zÒ)Ð)Ý!1Ø"Ø*.Ô*HØ)-Ô)FØœ?ð	"ñ "ô "ÑˆL˜$˜$õ ÐC°$´.ÐCÐCÐCÑDÔDÐDð �yŠy‰{Œ{ˆØ˜TÐ!Ð!r4   rw   ri   s   @r2   rÂ   rÂ   ]  sr   ø€ € € € € ð
ð 
ð	R˜~ð 	Rð 	Rð 	Rð 	Rð 	Rð 	Rð!" 5¤<ð !"ð !"ð !"ð !"ð !"ð !"ð !"ð !"r4   rÂ   c                   óJ   ‡ — e Zd ZdZdefˆ fd„Zddej        dedz  fd„Z	ˆ xZ
S )	ÚPatchTSTEncoderLayerz 
    PatchTST encoder layer
    r<   c           
      ó  •— t          ¦   «                              ¦   «          |j        | _        t          |j        |j        |j        |¬¦  «        | _        |j        dk    rt          j
        |j        ¦  «        nt          j        ¦   «         | _        |j        dk    rt          |¦  «        | _        nH|j        dk    r&t          j        |j        |j        ¬¦  «        | _        nt%          |j        › d�¦  «        ‚| j        r¤|j        dk    rt          j
        |j        ¦  «        nt          j        ¦   «         | _        |j        dk    rt          |¦  «        | _        nH|j        dk    r&t          j        |j        |j        ¬¦  «        | _        nt%          |j        › d�¦  «        ‚t          j        t          j        |j        |j        |j        ¬¦  «        t3          |j                 ¦   «         |j        dk    rt          j
        |j        ¦  «        nt          j        ¦   «         t          j        |j        |j        |j        ¬¦  «        ¦  «        | _        |j        dk    rt          j
        |j        ¦  «        nt          j        ¦   «         | _        |j        dk    rt          |¦  «        | _        nH|j        dk    r&t          j        |j        |j        ¬¦  «        | _        nt%          |j        › d�¦  «        ‚|j        | _        d S )N)r7   r8   r   r<   r   rr   Ú	layernormrm   z$ is not a supported norm layer type.r?   ) r@   rA   Úchannel_attentionr6   rp   Únum_attention_headsÚattention_dropoutÚ	self_attnÚpath_dropoutr   ÚDropoutÚIdentityÚdropout_path1Ú	norm_typerk   Únorm_sublayer1Ú	LayerNormrq   rC   Údropout_path2Únorm_sublayer2Ú
SequentialrD   Úffn_dimr:   r   Úactivation_functionÚ
ff_dropoutÚffÚdropout_path3Únorm_sublayer3Úpre_normrs   s     €r2   rA   zPatchTSTEncoderLayer.__init__ž  s¾  ø€ Ý‰Œ×ÒÑÔÐà!'Ô!9ˆÔå*Ø”nØÔ0ØÔ,Øð	
ñ 
ô 
ˆŒð AGÔ@SÐVWÒ@WÐ@W�RœZ¨Ô(;Ñ<Ô<Ð<Õ]_Ô]hÑ]jÔ]jˆÔØÔ˜{Ò*Ð*Ý"3°FÑ";Ô";ˆDÔÐØÔ Ò,Ð,Ý"$¤,¨v¬~À6Ä?Ð"SÑ"SÔ"SˆDÔÐå Ô 0ÐVÐVÐVÑWÔWÐWð Ô!ð 	\ØDJÔDWÐZ[ÒD[ÐD[¥¤¨FÔ,?Ñ!@Ô!@Ð!@ÕacÔalÑanÔanˆDÔØÔ ;Ò.Ð.Ý&7¸Ñ&?Ô&?�Ô#Ð#ØÔ! [Ò0Ð0Ý&(¤l°6´>ÀvÄÐ&WÑ&WÔ&W�Ô#Ð#å  FÔ$4Ð!ZÐ!ZÐ!ZÑ[Ô[Ð[õ ”-ÝŒI�f”n f¤n¸6¼;ÐGÑGÔGÝ�FÔ.Ô/Ñ1Ô1Ø-3Ô->ÀÒ-BÐ-B�BŒJ�vÔ(Ñ)Ô)Ð)ÍÌÉÌÝŒI�f”n f¤n¸6¼;ÐGÑGÔGñ	
ô 
ˆŒð AGÔ@SÐVWÒ@WÐ@W�RœZ¨Ô(;Ñ<Ô<Ð<Õ]_Ô]hÑ]jÔ]jˆÔØÔ˜{Ò*Ð*Ý"3°FÑ";Ô";ˆDÔÐØÔ Ò,Ð,Ý"$¤,¨v¬~À6Ä?Ð"SÑ"SÔ"SˆDÔÐå Ô 0ÐVÐVÐVÑWÔWÐWàœˆŒˆˆr4   NÚhidden_staterM   c                 ó~  — |j         \  }}}}|                     ||z  ||¦  «        }| j        rG|                      |                      |¦  «        |¬¦  «        \  }}}	||                      |¦  «        z   }nF|                      ||¬¦  «        \  }}}	|                      ||                      |¦  «        z   ¦  «        }|                     ||||¦  «        }| j        �r|                     dd¦  «         	                    ¦   «         }|                     ||z  ||¦  «        }| j        rG|                      |  
                    |¦  «        |¬¦  «        \  }}
}	||                      |¦  «        z   }nF|                      ||¬¦  «        \  }}
}	|  
                    ||                      |¦  «        z   ¦  «        }|                     ||||¦  «        }|                     dd¦  «         	                    ¦   «         }|                     ||z  ||¦  «        }| j        r?||                      |                      |                      |¦  «        ¦  «        ¦  «        z   }n>|                      ||                      |                      |¦  «        ¦  «        z   ¦  «        }|                     ||||¦  «        }|f}|r|| j        r||
fn|fz  }|S )a¯  
        Parameters:
            hidden_state (`torch.Tensor` of shape `(batch_size, num_channels, sequence_length, d_model)`, *required*):
                Past values of the time series
            output_attentions (`bool`, *optional*):
                Whether or not to return the output attention of all layers
        Return:
            `torch.Tensor` of shape `(batch_size, num_channels, sequence_length, d_model)`

        )rK   rM   r$   r   )rP   rQ   rå   rÔ   rÚ   rØ   rT   rÑ   r,   r/   rÝ   rÜ   rã   râ   rä   )rI   ræ   rM   rˆ   Únum_input_channelsrŠ   rp   r1   r0   r˜   Úchannel_attn_weightsÚoutputss               r2   r^   zPatchTSTEncoderLayer.forwardÐ  s%  € ð DPÔCUÑ@ˆ
Ð&¨¸ð $×(Ò(¨Ð6HÑ)HÈ/Ð[bÑcÔcˆàŒ=ð 	_à+/¯>ª>Ø"×1Ò1°,Ñ?Ô?ÐSdð ,:ñ ,ô ,Ñ(ˆK˜ qð (¨$×*<Ò*<¸[Ñ*IÔ*IÑIˆLˆLð ,0¯>ª>Ø*Ð>Oð ,:ñ ,ô ,Ñ(ˆK˜ qð  ×.Ò.¨|¸d×>PÒ>PÐQ\Ñ>]Ô>]Ñ/]Ñ^Ô^ˆLð $×+Ò+¨JÐ8JÈOÐ]dÑeÔeˆð Ô!ñ 	Eà'×1Ò1°!°QÑ7Ô7×BÒBÑDÔDˆLà'×,Ò,¨Z¸/Ñ-IÐK]Ð_fÑgÔgˆLØŒ}ð cà7;·~²~Ø"&×"5Ò"5°lÑ"CÔ"CÐWhð 8Fñ 8ô 8Ñ4�Ð1°1ð  ,¨d×.@Ò.@ÀÑ.MÔ.MÑM��ð 8<·~²~Ø".ÐBSð 8Fñ 8ô 8Ñ4�Ð1°1ð  $×2Ò2°<À$×BTÒBTÐU`ÑBaÔBaÑ3aÑbÔb�ð (×/Ò/°
¸OÐM_ÐahÑiÔiˆLà'×1Ò1°!°QÑ7Ô7×BÒBÑDÔDˆLð $×(Ò(¨Ð6HÑ)HÈ/Ð[bÑcÔcˆØŒ=ð 	ið (¨$×*<Ò*<¸T¿WºWÀT×EXÒEXÐYeÑEfÔEfÑ=gÔ=gÑ*hÔ*hÑhˆLˆLð  ×.Ò.¨|¸d×>PÒ>PÐQU×QXÒQXÐYeÑQfÔQfÑ>gÔ>gÑ/gÑhÔhˆLð $×+Ò+¨JÐ8JÈOÐ]dÑeÔeˆà�/ˆØð 	kØ¸tÔ?UÐj˜Ð&:Ð;Ð;Ð\hÐ[jÑjˆGàˆr4   rÄ   )r_   r`   ra   rb   r   rA   r*   rf   re   r^   rh   ri   s   @r2   rÎ   rÎ   ™  s‡   ø€ € € € € ðð ð0(˜~ð 0(ð 0(ð 0(ð 0(ð 0(ð 0(ðdQð Q E¤Lð QÀTÈDÁ[ð Qð Qð Qð Qð Qð Qð Qð Qr4   rÎ   c                   óˆ   ‡ — e Zd ZU eed<   dZdZdZdZdZ	dZ
dZ ej        ¦   «         dej        fˆ fd„¦   «         Zd
d	„Zˆ xZS )ÚPatchTSTPreTrainedModelr<   Úmodelrº   )ÚtimeFTr   c                 óÈ  •— t          ¦   «                              |¦  «         t          |t          ¦  «        �r)t	          | j        j        | j        j        ¦  «        | j        j        z
  | j        j        z  dz   }| j        j	        r t          j        |j        d¬¦  «         |dz  }|                     | j        |¦  «        }t          ¦   «         rwddl}|j                             |j        d¬¦  «        5  |j                             ¦   «         dk    rt          j        |j        |¦  «         ddd¦  «         dS # 1 swxY w Y   dS t          j        |j        |¦  «         dS dS )z$
        Initialize weights
        r   g{®Gáz”?)Ústdr   N)Úmodifier_rank)r@   Ú_init_weightsr�   ÚPatchTSTPositionalEncodingr¶   r<   r´   r¨   rµ   Úuse_cls_tokenÚinitÚnormal_Ú	cls_tokenÚ_init_per	   Ú	deepspeedÚzeroÚGatheredParametersÚposition_encÚnumelÚcopy_)rI   r   r·   rü   rù   rJ   s        €r2   rò   z%PatchTSTPreTrainedModel._init_weights/  s·  ø€ õ
 	‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ8Ñ9Ô9ñ 	>õ �D”KÔ.°´Ô0HÑIÔIÈDÌKÔLdÑdØ”Ô)ñ*à,-ñ.ˆKð Œ{Ô(ð !Ý”˜VÔ-°4Ð8Ñ8Ô8Ð8Ø˜qÑ �à!Ÿ?š?¨4¬;¸ÑDÔDˆLÝ)Ñ+Ô+ð >Ø Ð Ð Ð à”^×6Ò6°vÔ7JÐZ^Ð6Ñ_Ô_ð Fð FØÔ*×0Ò0Ñ2Ô2°QÒ6Ð6Ýœ
 6Ô#6¸ÑEÔEÐEðFð Fð Fñ Fô Fð Fð Fð Fð Fð Fð Fð Føøøð Fð Fð Fð Fð Fð Fõ ”
˜6Ô.°Ñ=Ô=Ð=Ð=Ð=ð%	>ð 	>s   Ã48D9Ä9D=Å D=c                 óB   — t          |t          ¦  «        r	||_        d S d S rÄ   )r�   ÚPatchTSTEncoderÚgradient_checkpointing)rI   r   r   s      r2   Ú_set_gradient_checkpointingz3PatchTSTPreTrainedModel._set_gradient_checkpointingI  s,   € Ý�f�Ñ0Ô0ð 	2Ø,1ˆFÔ)Ð)Ð)ð	2ð 	2r4   )F)r_   r`   ra   r   Ú__annotations__Úbase_model_prefixÚmain_input_nameÚinput_modalitiesÚsupports_gradient_checkpointingÚ_supports_flash_attnÚ_supports_sdpaÚ_supports_flex_attnr*   Úno_gradr   ÚModulerò   r  rh   ri   s   @r2   rì   rì   $  s¢   ø€ € € € € € àÐÐÑØÐØ#€OØ ÐØ&+Ð#ØÐØ€NØÐà€U„]�_„_ð> B¤Ið >ð >ð >ð >ð >ñ „_ð>ð22ð 2ð 2ð 2ð 2ð 2ð 2ð 2r4   rì   c                   ó:   ‡ — e Zd Zdefˆ fd„Zdej        fd„Zˆ xZS )ÚPatchTSTEmbeddingr<   c                 óž  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        | j        r&t	          j        |j        |j        ¦  «        | _        d S t	          j	        ¦   «         | _        t          |j        ¦  «        D ]9}| j                             t	          j        |j        |j        ¦  «        ¦  «         Œ:d S rÄ   )r@   rA   rè   Úshare_embeddingr   rD   r¨   rp   Úinput_embeddingÚ
ModuleListÚranger¡   )rI   r<   r˜   rJ   s      €r2   rA   zPatchTSTEmbedding.__init__O  s»   ø€ Ý‰Œ×ÒÑÔÐØ"(Ô";ˆÔØ%Ô5ˆÔàÔð 	\Ý#%¤9¨VÔ-@À&Ä.Ñ#QÔ#QˆDÔ Ð Ð å#%¤=¡?¤?ˆDÔ Ý˜6Ô4Ñ5Ô5ð \ð \�ØÔ$×+Ò+­B¬I°fÔ6IÈ6Ì>Ñ,ZÔ,ZÑ[Ô[Ð[Ð[ð\ð \r4   rÇ   c                 ó  ‡ ‡— ‰j         d         }|‰ j        k    rt          d‰ j        › d|› d�¦  «        ‚‰ j        r‰                      ‰¦  «        }n2ˆˆ fd„t          |¦  «        D ¦   «         }t          j        |d¬¦  «        }|S )a%  
        Parameters:
            patch_input (`torch.Tensor` of shape `(batch_size, num_channels, num_patches, patch_length)`, *required*):
                Patch input for embedding
        return:
            `torch.Tensor` of shape `(batch_size, num_channels, num_patches, d_model)`
        r   z&The defined number of input channels (zQ) in the config has to be the same as the number of channels in the batch input (r³   c           
      ó\   •— g | ](} ‰j         |         ‰d d …|d d …d d …f         ¦  «        ‘Œ)S rÄ   )r  )r—   ÚirÇ   rI   s     €€r2   r™   z-PatchTSTEmbedding.forward.<locals>.<listcomp>m  sE   ø€ ÐnÐnÐnÈqÐ1˜$Ô.¨qÔ1°+¸a¸a¸aÀÀAÀAÀAÀqÀqÀq¸jÔ2IÑJÔJÐnÐnÐnr4   r%   )rP   rè   rC   r  r  r  r*   Ústack)rI   rÇ   rè   Ú
embeddingss   ``  r2   r^   zPatchTSTEmbedding.forward[  sÂ   øø€ ð )Ô.¨qÔ1ÐØ Ô!8Ò8Ð8Ýðj¸Ô9Pð jð jØTfðjð jð jñô ð ð Ôð 	8Ø×-Ò-¨kÑ:Ô:ˆJˆJànÐnÐnÐnÐnÕTYÐZlÑTmÔTmÐnÑnÔnˆJÝœ Z°QÐ7Ñ7Ô7ˆJØÐr4   ©	r_   r`   ra   r   rA   r*   rf   r^   rh   ri   s   @r2   r  r  N  sh   ø€ € € € € ð
\˜~ð 
\ð 
\ð 
\ð 
\ð 
\ð 
\ð 5¤<ð ð ð ð ð ð ð ð r4   r  c                   óp   ‡ — e Zd ZdZdedefˆ fd„Zedededej	        fd„¦   «         Z
dej        fd„Zˆ xZS )	ró   z'
    Class for positional encoding
    r<   r·   c                 ó¤  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        r8t	          j        t          j        ddd|j        ¦  «        ¦  «        | _	        |dz  }|  
                    ||¦  «        | _        |j        dk    rt	          j        |j        ¦  «        nt	          j        ¦   «         | _        d S )Nr   r   )r@   rA   rô   rè   r   Ú	Parameterr*   rž   rp   r÷   rø   rü   Úpositional_dropoutrÖ   r×   ©rI   r<   r·   rJ   s      €r2   rA   z#PatchTSTPositionalEncoding.__init__w  sº   ø€ Ý‰Œ×ÒÑÔÐØ#Ô1ˆÔØ"(Ô";ˆÔØÔð 	åœ\­%¬+°a¸¸A¸v¼~Ñ*NÔ*NÑOÔOˆDŒNØ˜1ÑˆKà ŸMšM¨&°+Ñ>Ô>ˆÔð 6<Ô5NÐQRÒ5RÐ5R�BŒJ�vÔ0Ñ1Ô1Ð1ÕXZÔXcÑXeÔXeð 	ÔÐÐr4   rN   c                 óð  — | j         dk    r0t          j        t          j        || j        ¦  «        d¬¦  «        }�n:| j         dk    �rt          j        || j        ¦  «        }t          j        d|¦  «                             d¦  «        }t          j	        t          j        d| j        d¦  «        t          j        d¦  «        | j        z   z  ¦  «        }t          j        ||z  ¦  «        |d d …dd d…f<   t          j        ||z  ¦  «        |d d …dd d…f<   ||                     ¦   «         z
  }||                     ¦   «         d	z  z  }t          j        |d
¬¦  «        }nt!          | j         › d�¦  «        ‚|S )NrÉ   T©Úrequires_gradÚsincosr   r   r$   g     ˆÃ@é
   FzN is not a valid positional encoder. Available types are 'random' and 'sincos'.)Úpositional_encoding_typer   r  r*   Úrandnrp   rž   Úaranger†   ÚexpÚmathÚlogÚsinÚcosÚmeanrð   rC   )r<   r·   rü   ÚpositionÚdiv_terms        r2   rø   z#PatchTSTPositionalEncoding._init_pe†  sy  € ð Ô*¨hÒ6Ð6Ýœ<­¬°KÀÄÑ(PÔ(PÐ`dÐeÑeÔeˆL‰LØÔ,°Ò8Ñ8Ý œ; {°F´NÑCÔCˆLÝ”| A {Ñ3Ô3×=Ò=¸aÑ@Ô@ˆHÝ”y¥¤¨a°´ÀÑ!CÔ!CÍÌÐQXÑHYÔHYÐ\bÔ\jÑHjÐFkÑ!kÑlÔlˆHÝ$)¤I¨h¸Ñ.AÑ$BÔ$BˆL˜˜˜˜A˜D˜q˜D˜Ñ!Ý$)¤I¨h¸Ñ.AÑ$BÔ$BˆL˜˜˜˜A˜D˜q˜D˜Ñ!Ø'¨,×*;Ò*;Ñ*=Ô*=Ñ=ˆLØ'¨<×+;Ò+;Ñ+=Ô+=ÀÑ+BÑCˆLÝœ<¨ÀEÐJÑJÔJˆLˆLåØÔ2ð  Cð  Cð  Cñô ð ð Ðr4   rÇ   c                 óX  — | j         r…|                      || j        dd …d d …f         z   ¦  «        }| j        | j        d d…d d …f         z   }|                     |j        d         | j        dd¦  «        }t          j        ||fd¬¦  «        }n|                      || j        z   ¦  «        }|S )Nr   r   r"   r$   r%   )	rô   r  rü   r÷   ÚexpandrP   rè   r*   Úcat)rI   rÇ   r÷   Ú
cls_tokensræ   s        r2   r^   z"PatchTSTPositionalEncoding.forwardš  sÅ   € ØÔð 	Tà×1Ò1°+ÀÔ@QÐRSÐRTÐRTÐVWÐVWÐVWÐRWÔ@XÑ2XÑYÔYˆKàœ¨Ô):¸2¸A¸2¸q¸q¸q¸5Ô)AÑAˆIà"×)Ò)¨+Ô*;¸AÔ*>ÀÔ@WÐY[Ð]_Ñ`Ô`ˆJå œ9 j°+Ð%>ÀAÐFÑFÔFˆLˆLð  ×2Ò2°;ÀÔARÑ3RÑSÔSˆLØÐr4   )r_   r`   ra   rb   r   rc   rA   Ústaticmethodr   r  rø   r*   rf   r^   rh   ri   s   @r2   ró   ró   r  s©   ø€ € € € € ðð ð
˜~ð 
¸Cð 
ð 
ð 
ð 
ð 
ð 
ð ð˜ð °cð ¸b¼lð ð ð ñ „\ðð& 5¤<ð ð ð ð ð ð ð ð r4   ró   c            	       ó`   ‡ — e Zd ZdZdedefˆ fd„Z	 	 ddej        de	dz  de	dz  d	e
fd
„Zˆ xZS )r   z
    PatchTST Encoder
    r<   r·   c                 óB  •‡— t          ¦   «                              ‰¦  «         d| _        t          ‰¦  «        | _        t          ‰|¦  «        | _        t          j        ˆfd„t          ‰j
        ¦  «        D ¦   «         ¦  «        | _        |                      ¦   «          d S )NFc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r–   )rÎ   )r—   r  r<   s     €r2   r™   z,PatchTSTEncoder.__init__.<locals>.<listcomp>¸  s"   ø€ Ð$kÐ$kÐ$kÀaÕ%9¸&Ñ%AÔ%AÐ$kÐ$kÐ$kr4   )r@   rA   r  r  Úembedderró   Úpositional_encoderr   r  r  Únum_hidden_layersÚlayersÚ	post_initr  s    ` €r2   rA   zPatchTSTEncoder.__init__¯  s‘   øø€ Ý‰Œ×Ò˜Ñ Ô Ð Ø&+ˆÔ#õ *¨&Ñ1Ô1ˆŒå"<¸VÀ[Ñ"QÔ"QˆÔå”mÐ$kÐ$kÐ$kÐ$kÍ5ÐQWÔQiÑKjÔKjÐ$kÑ$kÔ$kÑlÔlˆŒð 	�ŠÑÔÐÐÐr4   NrÇ   Úoutput_hidden_statesrM   rN   c                 ó<  — |�|n| j         j        }|�|n| j         j        }|                      |¦  «        }|                      |¦  «        }|rdnd}|rdnd}| j        D ]-}|r||fz   } |||¬¦  «        }	|	d         }|r||	d         fz   }Œ.t          |||¬¦  «        S )a²  
        Parameters:
            patch_input (`torch.Tensor` of shape `(batch_size, num_channels, num_patches, patch_length)`, *required*):
                Past values of the time series
            output_hidden_states (bool, optional): Indicates if hidden states should be outputted.
            output_attentions (bool, optional): Indicates if attentions should be outputted.

        return:
            `BaseModelOutput`
        Nr–   )ræ   rM   r   r   )Úlast_hidden_staterK   Ú
attentions)r<   rM   r<  r7  r8  r:  r   )
rI   rÇ   r<  rM   r    ræ   Úencoder_statesÚall_attentionsÚencoder_layerÚlayer_outputss
             r2   r^   zPatchTSTEncoder.forward½  sò   € ð" 2CÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð
 —m’m KÑ0Ô0ˆà×.Ò.¨{Ñ;Ô;ˆà3Ð=˜˜¸ˆØ0Ð:˜˜°dˆØ!œ[ð 
	Fð 
	FˆMØ#ð BØ!/°<°/Ñ!A�à)˜M°|ÐWhÐiÑiÔiˆMð )¨Ô+ˆLà ð FØ!/°=ÀÔ3CÐ2EÑ!E�øå°È^ÐhvÐwÑwÔwÐwr4   ©NN)r_   r`   ra   rb   r   rc   rA   r*   rf   re   r   r^   rh   ri   s   @r2   r   r   ª  s³   ø€ € € € € ðð ð˜~ð ¸Cð ð ð ð ð ð ð" -1Ø)-ð	)xð )xà”\ð)xð # T™kð)xð   $™;ð	)xð 
ð)xð )xð )xð )xð )xð )xð )xð )xr4   r   zG
    Base class for model's outputs, with potential hidden states.
    )Ú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Zej        dz  ed<   dZej        dz  ed<   dZej        dz  ed<   dZej        dz  ed	<   dS )
ÚPatchTSTModelOutputa>  
    last_hidden_state (`torch.FloatTensor` of shape `(batch_size, num_channels, num_patches, patch_length)`):
        Sequence of hidden-states at the output of the last layer of the model.
    hidden_states (`tuple(torch.FloatTensor)`, *optional*, returned when `output_hidden_states=True` is passed or when `config.output_hidden_states=True`):
        Tuple of `torch.FloatTensor` (one for the output of the embeddings, if the model has an embedding layer, +
        one for the output of each layer) of shape `(batch_size, num_channels, height, width)`. Hidden-states of
        the model at the output of each layer plus the optional initial embedding outputs.
    mask (`torch.FloatTensor` of shape `(batch_size, num_channels, num_patches)`, *optional*):
        Bool masked tensor indicating which patches are masked
    loc (`torch.FloatTensor` of shape `(batch_size, 1, num_channels)`, *optional*):
        Mean of the input data (batch_size, sequence_length, num_channels) over the sequence_length
    scale (`torch.FloatTensor` of shape `(batch_size, 1, num_channels)`, *optional*):
        Std of the input data (batch_size, sequence_length, num_channels) over the sequence_length
    patch_input (`torch.FloatTensor` of shape `(batch_size, num_channels, num_patches, patch_length)`):
        Patched input to the Transformer
    Nr>  rK   r?  rŽ   ÚlocÚscalerÇ   )r_   r`   ra   rb   r>  r*   ÚFloatTensorr  rK   rg   r?  rŽ   rH  rI  rÇ   r–   r4   r2   rG  rG  é  sÑ   € € € € € € ðð ð" 37Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ø%)€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø$(€CˆÔ	˜TÑ	!Ð(Ð(Ñ(Ø&*€Eˆ5Ô˜tÑ#Ð*Ð*Ñ*Ø,0€K�Ô" TÑ)Ð0Ð0Ñ0Ð0Ð0r4   rG  z4
    Output type of [`PatchTSTForPretraining`].
    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 )ÚPatchTSTForPretrainingOutputa  
    loss (*optional*, returned when `labels` is provided, `torch.FloatTensor` of shape `(1,)`):
        MSE loss.
    prediction_output (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction outputs of the time series modeling heads.
    NÚlossÚprediction_outputrK   r?  )r_   r`   ra   rb   rM  r*   rJ  r  rN  rK   rg   r?  r–   r4   r2   rL  rL  
  s‰   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6r4   rL  z3
    Output type of [`PatchTSTForRegression`].
    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 )ÚPatchTSTForRegressionOutputa  
    loss (*optional*, returned when `labels` is provided, `torch.FloatTensor` of shape `(1,)`):
        MSE loss.
    regression_outputs (`torch.FloatTensor` of shape `(batch_size, num_targets)`):
        Regression outputs of the time series modeling heads.
    NrM  Úregression_outputsrK   r?  )r_   r`   ra   rb   rM  r*   rJ  r  rQ  rK   rg   r?  r–   r4   r2   rP  rP    s‰   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø37Ð˜Ô)¨DÑ0Ð7Ð7Ñ7Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6r4   rP  z3
    Output type of [`PatchTSTForPrediction`].
    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Zej        dz  ed<   dZej        dz  ed<   dS )	ÚPatchTSTForPredictionOutputa!  
    loss (*optional*, returned when `labels` is provided, `torch.FloatTensor` of shape `(1,)`):
        MSE loss.
    prediction_outputs (`torch.FloatTensor` of shape `(batch_size, prediction_length, -1)`):
        Prediction outputs of the time series modeling heads.
    attentions (`tuple(torch.FloatTensor)`, *optional*, returned when `output_attentions=True` is passed or when `config.output_attentions=True`):
        Tuple of `torch.FloatTensor` (one for each layer) 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.
    loc: (`torch.FloatTensor` of shape `(batch_size, 1, num_channels)`, *optional*)
        Mean of the input data (batch_size, sequence_length, num_channels) over the sequence_length
    scale: (`torch.FloatTensor` of shape `(batch_size, 1, num_channels)`, *optional*)
        Std of the input data (batch_size, sequence_length, num_channels) over the sequence_length
    NrM  Úprediction_outputsrK   r?  rH  rI  )r_   r`   ra   rb   rM  r*   rJ  r  rT  rK   rg   r?  rH  rI  r–   r4   r2   rS  rS  2  s¹   € € € € € € ðð ð" &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø37Ð˜Ô)¨DÑ0Ð7Ð7Ñ7Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ø$(€CˆÔ	˜TÑ	!Ð(Ð(Ñ(Ø&*€Eˆ5Ô˜tÑ#Ð*Ð*Ñ*Ð*Ð*r4   rS  z7
    Output type of [`PatchTSTForClassification`].
    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 )ÚPatchTSTForClassificationOutputa‹  
    loss (*optional*, returned when `labels` is provided, `torch.FloatTensor` of shape `(1,)`):
        Total loss as the sum of the masked language modeling loss and the next sequence prediction
        (classification) loss.
    prediction_logits (`torch.FloatTensor` of shape `(batch_size, num_targets)`):
        Prediction scores of the PatchTST modeling head (scores before SoftMax).
    NrM  Úprediction_logitsrK   r?  )r_   r`   ra   rb   rM  r*   rJ  r  rW  rK   rg   r?  r–   r4   r2   rV  rV  R  s‰   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø26Ð�uÔ(¨4Ñ/Ð6Ð6Ñ6Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ø26€J��eÔ'Ô(¨4Ñ/Ð6Ð6Ñ6Ð6Ð6r4   rV  zƒ
    Base class for time series model's predictions outputs that contains the sampled values from the chosen
    distribution.
    c                   ó2   — e Zd ZU dZdZej        dz  ed<   dS )ÚSamplePatchTSTOutputz¤
    sequences (`torch.FloatTensor` of shape `(batch_size, num_samples, prediction_length, num_targets)`):
        Sampled values from the chosen distribution.
    NÚ	sequences)r_   r`   ra   rb   rZ  r*   rJ  r  r–   r4   r2   rY  rY  g  s6   € € € € € € ðð ð
 +/€IˆuÔ  4Ñ'Ð.Ð.Ñ.Ð.Ð.r4   rY  ÚinputÚtargetrN   c                 ó.   — |                       |¦  «         S )zc
    Computes the negative log likelihood loss from input distribution with respect to target.
    )Úlog_prob)r[  r\  s     r2   Únllr_  x  s   € ð �NŠN˜6Ñ"Ô"Ð"Ð"r4   Úinput_tensorÚweightsc                 ón  — |�žt          j        |dk    | |z  t          j        | ¦  «        ¦  «        }t          j        |r|                     |¬¦  «        n|                     ¦   «         d¬¦  «        }|r|                     |¬¦  «        n|                     ¦   «         |z  S |                      |¬¦  «        S )aj  
    Computes the weighted average of a given tensor across a given `dim`, masking values associated with weight zero,
    meaning instead of `nan * 0 = nan` you will get `0 * 0 = 0`.

    Args:
        input_tensor (`torch.FloatTensor`):
            Input tensor, of which the average must be computed.
        weights (`torch.FloatTensor`, *optional*):
            Weights tensor, of the same shape as `input_tensor`.
        dim (`int`, *optional*):
            The dim along which to average `input_tensor`.

    Returns:
        `torch.FloatTensor`: The tensor with values averaged along the specified `dim`.
    Nr   r%   ç      ð?©Úmin)r*   ÚwhereÚ
zeros_likeÚclamprŸ   r,  )r`  ra  r&   Úweighted_tensorÚsum_weightss        r2   Úweighted_averagerk  €  s±   € ð  ÐÝœ+ g°¢l°LÀ7Ñ4JÍEÔL\Ð]iÑLjÔLjÑkÔkˆÝ”k¸#Ð"P '§+¢+°# +Ñ"6Ô"6Ð"6À7Ç;Â;Á=Ä=ÐVYÐZÑZÔZˆØ03ÐN�×#Ò#¨Ð#Ñ,Ô,Ð,¸×9LÒ9LÑ9NÔ9NÐR]Ñ]Ð]à× Ò  SÐ Ñ)Ô)Ð)r4   c            	       ó€   ‡ — e Zd ZdZdefˆ fd„Zdej        dej        deej        ej        ej        f         fd„Z	ˆ xZ
S )ÚPatchTSTStdScalerz½
    Standardize features by calculating the mean and scaling along the first dimension, and then normalizes it by
    subtracting from the mean and dividing by the standard deviation.
    r<   c                 óü   •— t          ¦   «                              ¦   «          t          |d¦  «        r|j        nd| _        t          |d¦  «        r|j        nd| _        t          |d¦  «        r|j        nd| _        d S )NÚscaling_dimr   ÚkeepdimTÚminimum_scalegñhãˆµøä>)r@   rA   Úhasattrro  r&   rp  rq  rs   s     €r2   rA   zPatchTSTStdScaler.__init__Ÿ  sy   ø€ Ý‰Œ×ÒÑÔÐÝ)0°¸Ñ)GÔ)GÐN�6Ô%Ð%ÈQˆŒÝ)0°¸Ñ)CÔ)CÐM�v”~�~ÈˆŒÝ5<¸VÀ_Ñ5UÔ5UÐ_˜VÔ1Ð1Ð[_ˆÔÐÐr4   ÚdataÚobserved_indicatorrN   c                 ód  — |                      | j        | j        ¬¦  «        }|                     d¦  «        }||z                        | j        | j        ¬¦  «        |z  }||z
  |z  dz                        | j        | j        ¬¦  «        |z  }t	          j        || j        z   ¦  «        }||z
  |z  ||fS )áC  
        Parameters:
            data (`torch.Tensor` of shape `(batch_size, sequence_length, num_input_channels)`):
                input for Batch norm calculation
            observed_indicator (`torch.BoolTensor` of shape `(batch_size, sequence_length, num_input_channels)`):
                Calculating the scale on the observed indicator.
        Returns:
            tuple of `torch.Tensor` of shapes
                (`(batch_size, sequence_length, num_input_channels)`,`(batch_size, 1, num_input_channels)`,
                `(batch_size, 1, num_input_channels)`)
        ©rp  rc  r$   )rŸ   r&   rp  Ú	clamp_minr*   Úsqrtrq  )rI   rs  rt  ÚdenominatorrH  ÚvariancerI  s          r2   r^   zPatchTSTStdScaler.forward¥  s»   € ð )×,Ò,¨T¬X¸t¼|Ð,ÑLÔLˆØ!×+Ò+¨CÑ0Ô0ˆØÐ(Ñ(×-Ò-¨d¬hÀÄÐ-ÑMÔMÐP[Ñ[ˆà˜S‘jÐ$6Ñ6¸1Ñ<×AÒAÀ$Ä(ÐTXÔT`ÐAÑaÔaÐdoÑoˆÝ”
˜8 dÔ&8Ñ8Ñ9Ô9ˆØ�s‘
˜eÑ# S¨%Ð/Ð/r4   ©r_   r`   ra   rb   r   rA   r*   rf   rg   r^   rh   ri   s   @r2   rm  rm  ™  s—   ø€ € € € € ðð ð
`˜~ð `ð `ð `ð `ð `ð `ð0Ø”Lð0Ø6;´lð0à	ˆuŒ|˜Uœ\¨5¬<Ð7Ô	8ð0ð 0ð 0ð 0ð 0ð 0ð 0ð 0r4   rm  c            	       ó€   ‡ — e Zd ZdZdefˆ fd„Zdej        dej        deej        ej        ej        f         fd„Z	ˆ xZ
S )ÚPatchTSTMeanScalerzŠ
    Computes a scaling factor as the weighted average absolute value along the first dimension, and scales the data
    accordingly.
    r<   c                 ó8  •— t          ¦   «                              ¦   «          t          |d¦  «        r|j        nd| _        t          |d¦  «        r|j        nd| _        t          |d¦  «        r|j        nd| _        t          |d¦  «        r|j        nd | _        d S )Nro  r   rp  Trq  ç»½×Ùß|Û=Údefault_scale)r@   rA   rr  ro  r&   rp  rq  r�  rs   s     €r2   rA   zPatchTSTMeanScaler.__init__Ã  s™   ø€ Ý‰Œ×ÒÑÔÐÝ)0°¸Ñ)GÔ)GÐN�6Ô%Ð%ÈQˆŒÝ)0°¸Ñ)CÔ)CÐM�v”~�~ÈˆŒÝ5<¸VÀ_Ñ5UÔ5UÐ`˜VÔ1Ð1Ð[`ˆÔÝ5<¸VÀ_Ñ5UÔ5UÐ_˜VÔ1Ð1Ð[_ˆÔÐÐr4   rs  rt  rN   c                 ó¨  — ||z                        ¦   «                              | j        d¬¦  «        }|                     | j        d¬¦  «        }|t          j        |d¬¦  «        z  }| j        €W|                     d¬¦  «        }t          j        |                     d¦  «        d¬¦  «        }t          j        ||z  ¦  «        }n| j        t          j        |¦  «        z  }t          j        |dk    ||¦  «        }t          j        || j	        ¬¦  «        }||z  }	| j
        s|                     | j        ¬¦  «        }|	t          j        |¦  «        |fS )rv  Trw  r   rd  Nr   r%   )ÚabsrŸ   r&   r*   rh  r�  ÚsqueezeÚ	ones_likerf  rq  rp  rg  )
rI   rs  rt  Úts_sumÚnum_observedrI  Ú	batch_sumÚbatch_observationsr�  Úscaled_datas
             r2   r^   zPatchTSTMeanScaler.forwardÊ  sE  € ð Ð+Ñ+×0Ò0Ñ2Ô2×6Ò6°t´xÈÐ6ÑNÔNˆØ)×-Ò-¨d¬hÀÐ-ÑEÔEˆà�œ \°qÐ9Ñ9Ô9Ñ9ˆð ÔÐ%ØŸ
š
 q˜
Ñ)Ô)ˆIÝ!&¤¨\×-=Ò-=¸aÑ-@Ô-@ÀaÐ!HÑ!HÔ!HÐÝ!œM¨)Ð6HÑ*HÑIÔIˆMˆMà Ô.µ´ÀÑ1GÔ1GÑGˆMõ ”˜L¨1Ò,¨e°]ÑCÔCˆõ ”˜E tÔ'9Ð:Ñ:Ô:ˆØ˜U‘lˆàŒ|ð 	0Ø—M’M d¤h�MÑ/Ô/ˆEà�EÔ,¨UÑ3Ô3°UÐ:Ð:r4   r|  ri   s   @r2   r~  r~  ½  s—   ø€ € € € € ðð ð
`˜~ð `ð `ð `ð `ð `ð `ð&;Ø”Lð&;Ø6;´lð&;à	ˆuŒ|˜Uœ\¨5¬<Ð7Ô	8ð&;ð &;ð &;ð &;ð &;ð &;ð &;ð &;r4   r~  c            
       óŠ   ‡ — e Zd ZdZdefˆ fd„Z	 d	dej        dej        dz  deej        ej        ej        f         fd„Z	ˆ xZ
S )
ÚPatchTSTNOPScalerz|
    Assigns a scaling factor equal to 1 along the first dimension, and therefore applies no scaling to the input data.
    r<   c                 óÀ   •— t          ¦   «                              ¦   «          t          |d¦  «        r|j        nd| _        t          |d¦  «        r|j        nd| _        d S )Nro  r   rp  T)r@   rA   rr  ro  r&   rp  rs   s     €r2   rA   zPatchTSTNOPScaler.__init__ù  sW   ø€ Ý‰Œ×ÒÑÔÐÝ)0°¸Ñ)GÔ)GÐN�6Ô%Ð%ÈQˆŒÝ)0°¸Ñ)CÔ)CÐM�v”~�~ÈˆŒˆˆr4   Nrs  rt  rN   c                 óà   — t          j        |d¬¦  «                             | j        | j        ¬¦  «        }t          j        |d¬¦  «                             | j        | j        ¬¦  «        }|||fS )a�  
        Parameters:
            data (`torch.Tensor` of shape `(batch_size, sequence_length, num_input_channels)`):
                input for Batch norm calculation
        Returns:
            tuple of `torch.Tensor` of shapes
                (`(batch_size, sequence_length, num_input_channels)`,`(batch_size, 1, num_input_channels)`,
                `(batch_size, 1, num_input_channels)`)
        Fr   )r&   rp  )r*   r…  r,  r&   rp  rg  )rI   rs  rt  rI  rH  s        r2   r^   zPatchTSTNOPScaler.forwardþ  sl   € õ ” °EÐ:Ñ:Ô:×?Ò?ÀDÄHÐVZÔVbÐ?ÑcÔcˆÝÔ˜t°5Ð9Ñ9Ô9×>Ò>À4Ä8ÐUYÔUaÐ>ÑbÔbˆØ�S˜%ÐÐr4   rÄ   r|  ri   s   @r2   rŒ  rŒ  ô  s¨   ø€ € € € € ðð ðN˜~ð Nð Nð Nð Nð Nð Nð MQð ð  Ø”Lð Ø6;´lÀTÑ6Ið à	ˆuŒ|˜Uœ\¨5¬<Ð7Ô	8ð ð  ð  ð  ð  ð  ð  ð  r4   rŒ  c            	       ó|   ‡ — e Zd Zdefˆ fd„Zdej        dej        deej        ej        ej        f         fd„Zˆ xZ	S )ÚPatchTSTScalerr<   c                 ó  •— t          ¦   «                              ¦   «          |j        dk    s	|j        du rt          |¦  «        | _        d S |j        dk    rt          |¦  «        | _        d S t          |¦  «        | _        d S )Nr,  Trð   )r@   rA   r   r~  Úscalerrm  rŒ  rs   s     €r2   rA   zPatchTSTScaler.__init__  sx   ø€ Ý‰Œ×ÒÑÔÐØŒ>˜VÒ#Ð# v¤~¸Ð'=Ð'=Ý,¨VÑ4Ô4ˆDŒKˆKˆKØŒ^˜uÒ$Ð$Ý+¨FÑ3Ô3ˆDŒKˆKˆKå+¨FÑ3Ô3ˆDŒKˆKˆKr4   rs  rt  rN   c                 ó@   — |                       ||¦  «        \  }}}|||fS )a>  
        Parameters:
            data (`torch.Tensor` of shape `(batch_size, sequence_length, num_input_channels)`):
                Input for scaler calculation
            observed_indicator (`torch.BoolTensor` of shape `(batch_size, sequence_length, num_input_channels)`):
                Calculating the scale on the observed indicator.
        Returns:
            tuple of `torch.Tensor` of shapes
                (`(batch_size, sequence_length, num_input_channels)`,`(batch_size, 1, num_input_channels)`,
                `(batch_size, 1, um_input_channels)`)
        )r’  )rI   rs  rt  rH  rI  s        r2   r^   zPatchTSTScaler.forward  s,   € ð  Ÿ;š; tÐ-?Ñ@Ô@Ñˆˆc�5Ø�S˜%ÐÐr4   )
r_   r`   ra   r   rA   r*   rf   rg   r^   rh   ri   s   @r2   r�  r�    s†   ø€ € € € € ð4˜~ð 4ð 4ð 4ð 4ð 4ð 4ð Ø”Lð Ø6;´lð à	ˆuŒ|˜Uœ\¨5¬<Ð7Ô	8ð ð  ð  ð  ð  ð  ð  ð  r4   r�  c                   ó–   ‡ — e Zd Zdefˆ fd„Z	 	 	 	 	 ddej        dej        dz  dej        dz  dedz  dedz  d	edz  d
ee	z  fd„Z
ˆ xZS )ÚPatchTSTModelr<   c                 ó†  •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          |¦  «        | _        |j        | _        | j        j        }| j        rt          |¦  «        | _	        nt          j        ¦   «         | _	        t          ||¬¦  «        | _        |                      ¦   «          d S )N)r·   )r@   rA   r�  r’  r±   Ú
patchifierÚdo_mask_inputr·   rÂ   Úmaskingr   r×   r   Úencoderr;  r  s      €r2   rA   zPatchTSTModel.__init__-  s£   ø€ Ý‰Œ×Ò˜Ñ Ô Ð å$ VÑ,Ô,ˆŒÝ*¨6Ñ2Ô2ˆŒØ#Ô1ˆÔà”oÔ1ˆàÔð 	)Ý*¨6Ñ2Ô2ˆDŒLˆLåœ;™=œ=ˆDŒLÝ& v¸;ÐGÑGÔGˆŒð 	�ŠÑÔÐÐÐr4   Nrº   Úpast_observed_maskÚfuture_valuesr<  rM   Úreturn_dictrN   c           	      óD  — |�|n| j         j        }|�|n| j         j        }|�|n| j         j        }|€t	          j        |¦  «        }|                      ||¦  «        \  }}	}
|                      |¦  «        }| j        r|  	                    |¦  «        \  }}n|  	                    |¦  «        d}}|  
                    |||¬¦  «        }|s6|j        |j        |j        f}|||	|
|fz   }t          d„ |D ¦   «         ¦  «        S t          |j        |j        |j        ||	|
|¬¦  «        S )a  
        Parameters:
            past_values (`torch.Tensor` of shape `(bs, sequence_length, num_input_channels)`, *required*):
                Input sequence to the model
            past_observed_mask (`torch.BoolTensor` of shape `(batch_size, sequence_length, num_input_channels)`, *optional*):
                Boolean mask to indicate which `past_values` were observed and which were missing. Mask values selected
                in `[0, 1]`:

                - 1 for values that are **observed**,
                - 0 for values that are **missing** (i.e. NaNs that were replaced by zeros).
            future_values (`torch.BoolTensor` of shape `(batch_size, prediction_length, num_input_channels)`, *optional*):
                Future target values associated with the `past_values`
            output_hidden_states (`bool`, *optional*):
                Whether or not to return the hidden states of all layers
            output_attentions (`bool`, *optional*):
                Whether or not to return the output attention of all layers
            return_dict (`bool`, *optional*):
                Whether or not to return a `ModelOutput` instead of a plain tuple.

        Returns:
            `PatchTSTModelOutput` or tuple of `torch.Tensor` (if `return_dict`=False or `config.return_dict`=False)

        Examples:

        ```python
        >>> from huggingface_hub import hf_hub_download
        >>> import torch
        >>> from transformers import PatchTSTModel

        >>> file = hf_hub_download(
        ...     repo_id="hf-internal-testing/etth1-hourly-batch", filename="train-batch.pt", repo_type="dataset"
        ... )
        >>> batch = torch.load(file)

        >>> model = PatchTSTModel.from_pretrained("namctin/patchtst_etth1_pretrain")

        >>> # during training, one provides both past and future values
        >>> outputs = model(
        ...     past_values=batch["past_values"],
        ...     future_values=batch["future_values"],
        ... )

        >>> last_hidden_state = outputs.last_hidden_state
        ```N)rÇ   r<  rM   c              3   ó   K  — | ]}|®|V — Œ	d S rÄ   r–   )r—   Úvs     r2   ú	<genexpr>z(PatchTSTModel.forward.<locals>.<genexpr>�  s"   è è € Ð=Ð=˜q¨q¨}˜¨}¨}¨}¨}Ð=Ð=r4   )r>  rK   r?  rŽ   rH  rI  rÇ   )r<   r�  rM   r<  r*   r…  r’  r—  r˜  r™  rš  r>  rK   r?  rg   rG  )rI   rº   r›  rœ  r<  rM   r�  r    Úscaled_past_valuesrH  rI  Úpatched_valuesÚmasked_valuesrŽ   Úencoder_outputrê   s                   r2   r^   zPatchTSTModel.forward?  sq  € ðn &1Ð%<�k�kÀ$Ä+ÔBYˆØ1BÐ1NÐ-Ð-ÐTXÔT_ÔTqÐà$8Ð$DÐ Ð È$Ì+ÔJjð 	ð Ð%Ý!&¤°Ñ!=Ô!=Ðð *.¯ª°[ÐBTÑ)UÔ)UÑ&Ð˜C ð ŸšÐ);Ñ<Ô<ˆØÔð 	EØ"&§,¢,¨~Ñ">Ô">ÑˆM˜4˜4à"&§,¢,¨~Ñ">Ô">À˜4ˆMàŸšØ%Ð<PÐduð &ñ 
ô 
ˆð ð 	>Ø%Ô7¸Ô9UÐWeÔWpÐqˆGØ  s¨E°>Ð BÑBˆGÝÐ=Ð= GÐ=Ñ=Ô=Ñ=Ô=Ð=å"Ø,Ô>Ø(Ô6Ø%Ô0ØØØØ&ð
ñ 
ô 
ð 	
r4   ©NNNNN)r_   r`   ra   r   rA   r*   rf   re   rg   rG  r^   rh   ri   s   @r2   r•  r•  +  sä   ø€ € € € € ð˜~ð ð ð ð ð ð ð* 37Ø-1Ø,0Ø)-Ø#'ð[
ð [
à”\ð[
ð "œL¨4Ñ/ð[
ð ”| dÑ*ð	[
ð
 # T™kð[
ð   $™;ð[
ð ˜D‘[ð[
ð 
Ð$Ñ	$ð[
ð [
ð [
ð [
ð [
ð [
ð [
ð [
r4   r•  c                   óL   ‡ — e Zd ZdZdefˆ fd„Zdej        dej        fd„Zˆ xZ	S )ÚPatchTSTMaskPretrainHeadz-
    Pretraining head for mask modelling
    r<   c                 ó   •— t          ¦   «                              ¦   «          |j        dk    rt          j        |j        ¦  «        nt          j        ¦   «         | _        t          j        |j        |j	        ¦  «        | _
        |j        | _        d S ©Nr   )r@   rA   Úhead_dropoutr   rÖ   r×   r   rD   rp   r¨   Úlinearrô   rs   s     €r2   rA   z!PatchTSTMaskPretrainHead.__init__¢  ss   ø€ Ý‰Œ×ÒÑÔÐØ:@Ô:MÐPQÒ:QÐ:Q•r”z &Ô"5Ñ6Ô6Ð6ÕWYÔWbÑWdÔWdˆŒÝ”i ¤°Ô0CÑDÔDˆŒØ#Ô1ˆÔÐÐr4   Ú	embeddingrN   c                 óŒ   — |                       |                      |¦  «        ¦  «        }| j        r|dd…dd…dd…dd…f         }|S )aÛ  
        Parameters:
            embedding (`torch.Tensor` of shape `(bs, num_channels, num_patches, d_model)` or
                    `(bs, num_channels, num_patches+1, d_model)` if `cls_token` is set to True, *required*):
                Embedding from the model
        Returns:
            `torch.Tensor` of shape `(bs, num_channels, num_patches, d_model)` or
                            `(bs, num_channels, num_patches+1, d_model)` if `cls_token` is set to True

        Nr   )r¬  r   rô   )rI   r­  s     r2   r^   z PatchTSTMaskPretrainHead.forward¨  sT   € ð —K’K §¢¨YÑ 7Ô 7Ñ8Ô8ˆ	ØÔð 	/Ø! ! ! ! Q Q Q¨¨¨¨A¨A¨A +Ô.ˆIØÐr4   rw   ri   s   @r2   r¨  r¨  �  st   ø€ € € € € ðð ð2˜~ð 2ð 2ð 2ð 2ð 2ð 2ð ¤ð °%´,ð ð ð ð ð ð ð ð r4   r¨  z*
    The PatchTST for pretrain model.
    c                   ó€   ‡ — e Zd Zdefˆ fd„Z	 	 	 	 ddej        dej        dz  dedz  dedz  dedz  d	ee	z  fd
„Z
ˆ xZS )ÚPatchTSTForPretrainingr<   c                 óÒ   •— t          ¦   «                              |¦  «         d|_        t          |¬¦  «        | _        t          |¦  «        | _        |                      ¦   «          d S )NT)r<   )r@   rA   r˜  r•  rí   r¨  Úheadr;  rs   s     €r2   rA   zPatchTSTForPretraining.__init__¿  s\   ø€ Ý‰Œ×Ò˜Ñ Ô Ð à#ˆÔÝ"¨&Ð1Ñ1Ô1ˆŒ
Ý,¨VÑ4Ô4ˆŒ	ð 	�ŠÑÔÐÐÐr4   Nrº   r›  r<  rM   r�  rN   c                 óæ  — |�|n| j         j        }|                      ||||d¬¦  «        }|                      |j        ¦  «        }t          j        d¬¦  «        }	 |	||j        ¦  «        }
|
                     d¬¦  «        |j	        z   
                    ¦   «         |j	         
                    ¦   «         dz   z  }|j        }|s|f|d	d
…         z   }|�|f|z   n|}|S t          ||||j        ¬¦  «        S )aª	  
        Parameters:
            past_values (`torch.Tensor` of shape `(bs, sequence_length, num_input_channels)`, *required*):
                Input sequence to the model
            past_observed_mask (`torch.BoolTensor` of shape `(batch_size, sequence_length, num_input_channels)`, *optional*):
                Boolean mask to indicate which `past_values` were observed and which were missing. Mask values selected
                in `[0, 1]`:

                - 1 for values that are **observed**,
                - 0 for values that are **missing** (i.e. NaNs that were replaced by zeros).
            output_hidden_states (`bool`, *optional*):
                Whether or not to return the hidden states of all layers
            output_attentions (`bool`, *optional*):
                Whether or not to return the output attention of all layers
            return_dict (`bool`, *optional*): Whether or not to return a `ModelOutput` instead of a plain tuple.

        Returns:
            `PatchTSTForPretrainingOutput` or tuple of `torch.Tensor` (if `return_dict`=False or
            `config.return_dict`=False)

        Examples:

        ```python
        >>> from huggingface_hub import hf_hub_download
        >>> import torch
        >>> from transformers import PatchTSTConfig, PatchTSTForPretraining

        >>> file = hf_hub_download(
        ...     repo_id="hf-internal-testing/etth1-hourly-batch", filename="train-batch.pt", repo_type="dataset"
        ... )
        >>> batch = torch.load(file)

        >>> # Config for random mask pretraining
        >>> config = PatchTSTConfig(
        ...     num_input_channels=7,
        ...     context_length=512,
        ...     patch_length=12,
        ...     stride=12,
        ...     mask_type='random',
        ...     random_mask_ratio=0.4,
        ...     use_cls_token=True,
        ... )
        >>> # Config for forecast mask pretraining
        >>> config = PatchTSTConfig(
        ...     num_input_channels=7,
        ...     context_length=512,
        ...     patch_length=12,
        ...     stride=12,
        ...     mask_type='forecast',
        ...     num_forecast_mask_patches=5,
        ...     use_cls_token=True,
        ... )
        >>> model = PatchTSTForPretraining(config)

        >>> # during training, one provides both past and future values
        >>> outputs = model(past_values=batch["past_values"])

        >>> loss = outputs.loss
        >>> loss.backward()
        ```NT©rº   r›  r<  rM   r�  Únone©Ú	reductionr"   r%   r€  r   éüÿÿÿ)rM  rN  rK   r?  )r<   r�  rí   r²  r>  r   ÚMSELossrÇ   r,  rŽ   rŸ   rK   rL  r?  )rI   rº   r›  r<  rM   r�  r    Úmodel_outputÚx_hatrM  Úloss_valÚmasked_lossr@  rê   s                 r2   r^   zPatchTSTForPretraining.forwardÉ  s$  € ðL &1Ð%<�k�kÀ$Ä+ÔBYˆð —z’zØ#Ø1Ø!5Ø/Øð "ñ 
ô 
ˆð —	’	˜,Ô8Ñ9Ô9ˆõ Œz FÐ+Ñ+Ô+ˆØ�4˜˜|Ô7Ñ8Ô8ˆØ—}’}¨�}Ñ,Ô,¨|Ô/@Ñ@×EÒEÑGÔGÈ<ÔK\×K`ÒK`ÑKbÔKbÐejÑKjÑkˆà%Ô3ˆØð 	Ø�h ¨a°¨dÔ!3Ñ3ˆGØ2=Ð2I�{�n wÑ.Ð.ÈwˆGØˆNÝ+Ø°À^Ð`lÔ`wð
ñ 
ô 
ð 	
r4   )NNNN)r_   r`   ra   r   rA   r*   rf   re   rg   rL  r^   rh   ri   s   @r2   r°  r°  ¹  sÏ   ø€ € € € € ð˜~ð ð ð ð ð ð ð 37Ø,0Ø)-Ø#'ðb
ð b
à”\ðb
ð "œL¨4Ñ/ðb
ð # T™kð	b
ð
   $™;ðb
ð ˜D‘[ðb
ð 
Ð-Ñ	-ðb
ð b
ð b
ð b
ð b
ð b
ð b
ð b
r4   r°  c                   ó:   ‡ — e Zd Zdefˆ fd„Zdej        fd„Zˆ xZS )ÚPatchTSTClassificationHeadr<   c                 ó|  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        t	          j        d¬¦  «        | _        |j        dk    rt	          j        |j        ¦  «        nt	          j	        ¦   «         | _
        t	          j        |j        |j        z  |j        ¦  «        | _        d S ©Nr   ©Ú	start_dimr   )r@   rA   rô   Úpooling_typer   ÚFlattenÚflattenr«  rÖ   r×   r   rD   rè   rp   Únum_targetsr¬  rs   s     €r2   rA   z#PatchTSTClassificationHead.__init__/  s˜   ø€ Ý‰Œ×ÒÑÔÐØ#Ô1ˆÔØ"Ô/ˆÔÝ”z¨AÐ.Ñ.Ô.ˆŒØ:@Ô:MÐPQÒ:QÐ:Q•r”z &Ô"5Ñ6Ô6Ð6ÕWYÔWbÑWdÔWdˆŒÝ”i Ô 9¸F¼NÑ JÈFÔL^Ñ_Ô_ˆŒˆˆr4   r­  c                 óv  — | j         r|dd…dd…ddd…f         }na| j        dk    r|                     d¬¦  «        }n?| j        dk    r|                     d¬¦  «        j        }nt          d| j        › d�¦  «        ‚|                      |¦  «        }|                      |                      |¦  «        ¦  «        }|S )	a[  
        Parameters:
            embedding (`torch.Tensor` of shape `(bs, num_channels, num_patches, d_model)` or
                     `(bs, num_channels, num_patches+1, d_model)` if `cls_token` is set to True, *required*):
                Embedding from the model
        Returns:
            `torch.Tensor` of shape `(bs, num_targets)`

        Nr   r,  r$   r%   r¶   úpooling operator ú is not implemented yet)	rô   rÄ  r,  r¶   ÚvaluesrC   rÆ  r¬  r   ©rI   r­  Úpooled_embeddingrv   s       r2   r^   z"PatchTSTClassificationHead.forward7  sÒ   € ð Ôð 
	]à(¨¨¨¨A¨A¨A¨q°!°!°!¨Ô4ÐÐØÔ &Ò(Ð(à(Ÿ~š~°!˜~Ñ4Ô4ÐÐØÔ %Ò'Ð'à(Ÿ}š}°˜}Ñ3Ô3Ô:ÐÐåÐ[°Ô1BÐ[Ð[Ð[Ñ\Ô\Ð\àŸ<š<Ð(8Ñ9Ô9Ðà—’˜TŸ\š\Ð*:Ñ;Ô;Ñ<Ô<ˆØˆr4   r  ri   s   @r2   r¿  r¿  .  sh   ø€ € € € € ð`˜~ð `ð `ð `ð `ð `ð `ð ¤ð ð ð ð ð ð ð ð r4   r¿  z0
    The PatchTST for classification model.
    c                   óœ   ‡ — e Zd Zdefˆ fd„Ze	 	 	 	 	 ddej        dej        dz  dedz  dedz  dedz  d	edz  d
e	e
z  fd„¦   «         Zˆ xZS )ÚPatchTSTForClassificationr<   c                 ó  •— t          ¦   «                              |¦  «         |j        r!t                               d¦  «         d|_        t          |¦  «        | _        t          |¦  «        | _        |  	                    ¦   «          d S )Nú+Setting `do_mask_input` parameter to False.F)
r@   rA   r˜  ÚloggerÚwarningr•  rí   r¿  r²  r;  rs   s     €r2   rA   z"PatchTSTForClassification.__init__Y  sy   ø€ Ý‰Œ×Ò˜Ñ Ô Ð ð Ôð 	)Ý�NŠNÐHÑIÔIÐIØ#(ˆFÔ å" 6Ñ*Ô*ˆŒ
Ý.¨vÑ6Ô6ˆŒ	ð 	�ŠÑÔÐÐÐr4   Nrº   Útarget_valuesr›  r<  rM   r�  rN   c                 óB  — |�|n| j         j        }|                      ||||d¬¦  «        }|                      |j        ¦  «        }	d}
|�t          j        ¦   «         } ||	|¦  «        }
|s|	f|dd…         z   }|
�|
f|z   n|}|S t          |
|	|j        |j	        ¬¦  «        S )ac  
        past_values (`torch.Tensor` of shape `(bs, sequence_length, num_input_channels)`, *required*):
            Input sequence to the model
        target_values (`torch.Tensor`, *optional*):
            Labels associates with the `past_values`
        past_observed_mask (`torch.BoolTensor` of shape `(batch_size, sequence_length, num_input_channels)`, *optional*):
            Boolean mask to indicate which `past_values` were observed and which were missing. Mask values selected
            in `[0, 1]`:

            - 1 for values that are **observed**,
            - 0 for values that are **missing** (i.e. NaNs that were replaced by zeros).

        Examples:

        ```python
        >>> from transformers import PatchTSTConfig, PatchTSTForClassification

        >>> # classification task with two input channel2 and 3 classes
        >>> config = PatchTSTConfig(
        ...     num_input_channels=2,
        ...     num_targets=3,
        ...     context_length=512,
        ...     patch_length=12,
        ...     stride=12,
        ...     use_cls_token=True,
        ... )
        >>> model = PatchTSTForClassification(config=config)

        >>> # during inference, one only provides past values
        >>> past_values = torch.randn(20, 512, 2)
        >>> outputs = model(past_values=past_values)
        >>> labels = outputs.prediction_logits
        ```NTr´  r   r¿   )rM  rW  rK   r?  )
r<   r�  rí   r²  r>  r   ÚCrossEntropyLossrV  rK   r?  )rI   rº   rÔ  r›  r<  rM   r�  r    rº  Úy_hatr¼  rM  rê   s                r2   r^   z!PatchTSTForClassification.forwardg  sà   € ðZ &1Ð%<�k�kÀ$Ä+ÔBYˆà—z’zØ#Ø1Ø!5Ø/Øð "ñ 
ô 
ˆð —	’	˜,Ô8Ñ9Ô9ˆàˆØÐ$ÝÔ&Ñ(Ô(ˆDØ�t˜E =Ñ1Ô1ˆHàð 	Ø�h ¨a°¨dÔ!3Ñ3ˆGØ/7Ð/C�x�k GÑ+Ð+ÈˆGØˆNÝ.ØØ#Ø&Ô4Ø#Ô.ð	
ñ 
ô 
ð 	
r4   r¦  )r_   r`   ra   r   rA   r   r*   rf   re   rg   rV  r^   rh   ri   s   @r2   rÏ  rÏ  S  sí   ø€ € € € € ð˜~ð ð ð ð ð ð ð ð .2Ø*.Ø,0Ø)-Ø#'ðE
ð E
à”\ðE
ð ”| dÑ*ðE
ð ! 4™Kð	E
ð
 # T™kðE
ð   $™;ðE
ð ˜D‘[ðE
ð 
Ð0Ñ	0ðE
ð E
ð E
ñ „^ðE
ð E
ð E
ð E
ð E
r4   rÏ  z,
    The PatchTST for regression Model.
    c                   ó@   ‡ — e Zd Zddedefˆ fd„Zdej        fd„Zˆ xZ	S )ÚPatchTSTPredictionHeadNr<   r·   c                 óš  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        |j        | _        | j        s| j        r|j        }n
|j        |z  }| j        �s?t          j        ¦   «         | _	        t          j        ¦   «         | _
        t          j        ¦   «         | _        t          | j        ¦  «        D ]à}| j                             t          j        d¬¦  «        ¦  «         |€3| j	                             t          j        ||j        ¦  «        ¦  «         n-| j	                             |                     |¦  «        ¦  «         | j
                             |j        dk    rt          j        |j        ¦  «        nt          j        ¦   «         ¦  «         ŒádS t          j        d¬¦  «        | _        |€ t          j        ||j        ¦  «        | _        n|                     |¦  «        | _        |j        dk    rt          j        |j        ¦  «        nt          j        ¦   «         | _        dS )a  
        num_patches (`int`):
            The number of patches in the input sequence.
        distribution_output (`DistributionOutput`, *optional*):
            The distribution output layer for probabilistic forecasting. If None, a linear output layer is used.
        r$   rÂ  Nr   )r@   rA   Úshare_projectionrè   rô   rÄ  rp   r   r  ÚprojectionsÚdropoutsÚflattensr  r¡   rÅ  rD   Úprediction_lengthÚget_parameter_projectionr«  rÖ   r×   rÆ  Ú
projectionr   )rI   r<   r·   Údistribution_outputrB   r  rJ   s         €r2   rA   zPatchTSTPredictionHead.__init__¶  s  ø€ õ 	‰Œ×ÒÑÔÐà &Ô 7ˆÔØ"(Ô";ˆÔØ#Ô1ˆÔØ"Ô/ˆÔØÔð 	4 Ô 2ð 	4Ø”~ˆHˆHà”~¨Ñ3ˆHàÔ$ñ 	iå!œ}™œˆDÔÝœM™OœOˆDŒMÝœM™OœOˆDŒMÝ˜4Ô2Ñ3Ô3ð tð t�Ø”×$Ò$¥R¤Z¸!Ð%<Ñ%<Ô%<Ñ=Ô=Ð=Ø&Ð.àÔ$×+Ò+­B¬I°hÀÔ@XÑ,YÔ,YÑZÔZÐZÐZð Ô$×+Ò+Ð,?×,XÒ,XÐYaÑ,bÔ,bÑcÔcÐcØ”×$Ò$ÈÔH[Ð^_ÒH_ÐH_¥R¤Z°Ô0CÑ%DÔ%DÐ%DÕegÔepÑerÔerÑsÔsÐsÐsðtð tõ œ:°Ð2Ñ2Ô2ˆDŒLØ"Ð*å"$¤)¨H°fÔ6NÑ"OÔ"O�”�ð #6×"NÒ"NÈxÑ"XÔ"X�”Ø>DÔ>QÐTUÒ>UÐ>U�2œ: fÔ&9Ñ:Ô:Ð:Õ[]Ô[fÑ[hÔ[hˆDŒLˆLˆLr4   r­  c                 ó  — | j         r|dd…dd…ddd…f         }nK| j        dk    r|                     d¬¦  «        }n)| j        dk    r|                     d¬¦  «        j        }n|}| j        s”g }t          | j        ¦  «        D ]f} | j        |         |dd…|dd…f         ¦  «        } | j	        |         |¦  «        } | j
        |         |¦  «        }|                     |¦  «         Œgt          j        |d¬¦  «        }n?|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }t#          |t$          ¦  «        rt%          d„ |D ¦   «         ¦  «        }n|                     dd¦  «        }|S )	aj  
        Parameters:
            embedding (`torch.Tensor` of shape `(bs, num_channels, num_patches, d_model)` or
                     `(bs, num_channels, num_patches+1, d_model)` if `cls_token` is set to True, *required*):
                Embedding from the model
        Returns:
            `torch.Tensor` of shape `(bs, forecast_len, num_channels)`

        Nr   r,  r$   r%   r¶   r   c              3   óB   K  — | ]}|                      d d¦  «        V — ŒdS )r$   r   N)r,   )r—   Úzs     r2   r¡  z1PatchTSTPredictionHead.forward.<locals>.<genexpr>  s0   è è € Ð=Ð=°˜1Ÿ;š; q¨!Ñ,Ô,Ð=Ð=Ð=Ð=Ð=Ð=r4   )rô   rÄ  r,  r¶   rË  rÛ  r  rè   rÞ  rÝ  rÜ  r¡   r*   r  rÆ  r   rá  r�   rg   r,   )rI   r­  rÍ  rv   r  s        r2   r^   zPatchTSTPredictionHead.forwardá  sÀ  € ð Ôð 	-à(¨¨¨¨A¨A¨A¨q°!°!°!¨Ô4ÐÐàÔ  FÒ*Ð*à#,§>¢>°a >Ñ#8Ô#8Ð Ð ØÔ" eÒ+Ð+à#,§=¢=°Q =Ñ#7Ô#7Ô#>Ð Ð ð $-Ð àÔ$ð 	7ØˆFÝ˜4Ô2Ñ3Ô3ð 0ð 0�à#3 4¤=°Ô#3Ð4DÀQÀQÀQÈÈ1È1È1ÀWÔ4MÑ#NÔ#NÐ Ø#3 4¤=°Ô#3Ð4DÑ#EÔ#EÐ ð $7 4Ô#3°AÔ#6Ð7GÑ#HÔ#HÐ Ø—’Ð.Ñ/Ô/Ð/Ð/å”[ ¨QÐ/Ñ/Ô/ˆFˆFð  $Ÿ|š|Ð,<Ñ=Ô=ÐØ#Ÿ|š|Ð,<Ñ=Ô=Ðð —_’_Ð%5Ñ6Ô6ˆFå�f�eÑ$Ô$ð 	,åÐ=Ð=°fÐ=Ñ=Ô=Ñ=Ô=ˆFˆFà×%Ò% a¨Ñ+Ô+ˆFØˆr4   rÄ   )
r_   r`   ra   r   rc   rA   r*   rf   r^   rh   ri   s   @r2   rÙ  rÙ  °  sw   ø€ € € € € ð)ið )i˜~ð )i¸Cð )ið )ið )ið )ið )ið )iðV1 ¤ð 1ð 1ð 1ð 1ð 1ð 1ð 1ð 1r4   rÙ  z,
    The PatchTST for prediction model.
    c                   óò   ‡ — e Zd Zdefˆ fd„Z	 	 	 	 	 ddej        dej        dz  dej        dz  dedz  dedz  d	edz  d
ee	z  fd„Z
 ej        ¦   «         	 ddej        dej        dz  d
efd„¦   «         Zˆ xZS )ÚPatchTSTForPredictionr<   c                 óx  •— t          ¦   «                              |¦  «         |j        r!t                               d¦  «         d|_        t          |¦  «        | _        |j        dk    rd | _        n‰|j        dk    rt          |j
        ¬¦  «        | _        nc|j        dk    rt          |j
        ¬¦  «        | _        n=|j        dk    rt          |j
        ¬¦  «        | _        nt          d|j        › �¦  «        ‚t          || j        j        j        | j        ¬	¦  «        | _        |                      ¦   «          d S )
NrÑ  FÚmseÚ	student_tr%   ÚnormalÚnegative_binomialúUnknown distribution output )râ  )r@   rA   r˜  rÒ  rÓ  r•  rí   rM  râ  r   rß  r   r   rC   rÙ  r—  r·   r²  r;  rs   s     €r2   rA   zPatchTSTForPrediction.__init__  s:  ø€ Ý‰Œ×Ò˜Ñ Ô Ð ð Ôð 	)Ý�NŠNÐHÑIÔIÐIØ#(ˆFÔ å" 6Ñ*Ô*ˆŒ
àŒ;˜%ÒÐØ'+ˆDÔ$Ð$àÔ)¨[Ò8Ð8Ý+9¸fÔ>VÐ+WÑ+WÔ+W�Ô(Ð(ØÔ+¨xÒ7Ð7Ý+7¸FÔ<TÐ+UÑ+UÔ+U�Ô(Ð(ØÔ+Ð/BÒBÐBÝ+AÀfÔF^Ð+_Ñ+_Ô+_�Ô(Ð(å Ð!\ÀÔ@ZÐ!\Ð!\Ñ]Ô]Ð]å*Ø�D”JÔ)Ô5È4ÔKcð
ñ 
ô 
ˆŒ	ð
 	�ŠÑÔÐÐÐr4   Nrº   r›  rœ  r<  rM   r�  rN   c                 ó:  — |�|n| j         j        }|                      ||||d¬¦  «        }|                      |j        ¦  «        }	d}
| j        r|	}n|	|j        z  |j        z   }|�o| j        rG| j                             |	|j        |j        ¬¦  «        }t          ||¦  «        }
t          |
¦  «        }
n!t          j        d¬¦  «        } |||¦  «        }
|j        }|j        }|s|f|dd…         z   }|
�|
f|z   n|}|S t          |
||j        |j        ||¬	¦  «        S )
aV	  
        Parameters:
            past_values (`torch.Tensor` of shape `(bs, sequence_length, num_input_channels)`, *required*):
                Input sequence to the model
            past_observed_mask (`torch.BoolTensor` of shape `(batch_size, sequence_length, num_input_channels)`, *optional*):
                Boolean mask to indicate which `past_values` were observed and which were missing. Mask values selected
                in `[0, 1]`:

                - 1 for values that are **observed**,
                - 0 for values that are **missing** (i.e. NaNs that were replaced by zeros).
            future_values (`torch.Tensor` of shape `(bs, forecast_len, num_input_channels)`, *optional*):
                Future target values associated with the `past_values`
            output_hidden_states (`bool`, *optional*):
                Whether or not to return the hidden states of all layers
            output_attentions (`bool`, *optional*):
                Whether or not to return the output attention of all layers
            return_dict (`bool`, *optional*):
                Whether or not to return a `ModelOutput` instead of a plain tuple.

        Returns:
            `PatchTSTForPredictionOutput` or tuple of `torch.Tensor` (if `return_dict`=False or
            `config.return_dict`=False)

        Examples:

        ```python
        >>> from huggingface_hub import hf_hub_download
        >>> import torch
        >>> from transformers import PatchTSTConfig, PatchTSTForPrediction

        >>> file = hf_hub_download(
        ...     repo_id="hf-internal-testing/etth1-hourly-batch", filename="train-batch.pt", repo_type="dataset"
        ... )
        >>> batch = torch.load(file)

        >>> # Prediction task with 7 input channels and prediction length is 96
        >>> model = PatchTSTForPrediction.from_pretrained("namctin/patchtst_etth1_forecast")

        >>> # during training, one provides both past and future values
        >>> outputs = model(
        ...     past_values=batch["past_values"],
        ...     future_values=batch["future_values"],
        ... )

        >>> loss = outputs.loss
        >>> loss.backward()

        >>> # during inference, one only provides past values, the model outputs future values
        >>> outputs = model(past_values=batch["past_values"])
        >>> prediction_outputs = outputs.prediction_outputs
        ```NTr´  ©rH  rI  r,  r¶  r   r"   )rM  rT  rK   r?  rH  rI  )r<   r�  rí   r²  r>  râ  rI  rH  Údistributionr_  rk  r   r¹  rS  rK   r?  )rI   rº   r›  rœ  r<  rM   r�  r    rº  r×  r¼  Ú	y_hat_outrð  rM  rH  rI  rê   s                    r2   r^   zPatchTSTForPrediction.forward8  sz  € ð| &1Ð%<�k�kÀ$Ä+ÔBYˆð —z’zØ#Ø1Ø!5Ø/Øð "ñ 
ô 
ˆð —	’	˜,Ô8Ñ9Ô9ˆàˆàÔ#ð 	FØˆIˆIà Ô 2Ñ2°\Ô5EÑEˆIàÐ$ØÔ'ð 	:Ø#Ô7×DÒDØ˜|Ô/°|Ô7Ið  Eñ  ô  �õ ˜|¨]Ñ;Ô;�å+¨HÑ5Ô5��å”z¨FÐ3Ñ3Ô3�Ø˜4 	¨=Ñ9Ô9�àÔˆØÔ"ˆàð 	Ø �l \°!°B°$Ô%7Ñ7ˆGØ/7Ð/C�x�k GÑ+Ð+ÈˆGØˆNÝ*ØØ(Ø&Ô4Ø#Ô.ØØð
ñ 
ô 
ð 	
r4   c                 óX  ‡— | j         j        } | |d|d¬¦  «        }| j        r^| j                             |j        |j        |j        ¬¦  «        Šˆfd„t          |¦  «        D ¦   «         }t          j	        |d¬¦  «        }n|j         
                    d¦  «        }t          |¬¦  «        S )	a   
        Generate sequences of sample predictions from a model with a probability distribution head.

        Parameters:
            past_values (`torch.FloatTensor` of shape `(batch_size, sequence_length, num_input_channels)`):
                Past values of the time series that serves as context in order to predict the future.
            past_observed_mask (`torch.BoolTensor` of shape `(batch_size, sequence_length, num_input_channels)`, *optional*):
                Boolean mask to indicate which `past_values` were observed and which were missing. Mask values selected
                in `[0, 1]`:

                - 1 for values that are **observed**,
                - 0 for values that are **missing** (i.e. NaNs that were replaced by zeros).

        Return:
            [`SamplePatchTSTOutput`] where the outputs `sequences` tensor will have shape `(batch_size, number of
            samples, prediction_length, 1)` or `(batch_size, number of samples, prediction_length, num_input_channels)`
            for multivariate predictions.
        NF)rº   rœ  r›  r<  rï  c                 ó8   •— g | ]}‰                      ¦   «         ‘ŒS r–   ©Úsample©r—   r˜   rð  s     €r2   r™   z2PatchTSTForPrediction.generate.<locals>.<listcomp>Î  s%   ø€ ÐRÐRÐR°�|×*Ò*Ñ,Ô,ÐRÐRÐRr4   r   r%   ©rZ  )r<   Únum_parallel_samplesrâ  rð  rT  rH  rI  r  r*   r  r†   rY  ©rI   rº   r›  rø  rê   Úsamplesrð  s         @r2   ÚgeneratezPatchTSTForPrediction.generate¦  sÏ   ø€ ð2  $œ{Ô?Ðð �$Ø#ØØ1Ø!&ð	
ñ 
ô 
ˆð Ô#ð 
	>àÔ3×@Ò@ØÔ*°´À7Ä=ð Añ ô ˆLð SÐRÐRÐRµeÐ<PÑ6QÔ6QÐRÑRÔRˆGå”k '¨qÐ1Ñ1Ô1ˆGˆGàÔ0×:Ò:¸1Ñ=Ô=ˆGå#¨gÐ6Ñ6Ô6Ð6r4   r¦  rÄ   )r_   r`   ra   r   rA   r*   rf   re   rg   rS  r^   r  rY  rû  rh   ri   s   @r2   rç  rç    s9  ø€ € € € € ð˜~ð ð ð ð ð ð ð@ 37Ø-1Ø,0Ø)-Ø#'ðl
ð l
à”\ðl
ð "œL¨4Ñ/ðl
ð ”| dÑ*ð	l
ð
 # T™kðl
ð   $™;ðl
ð ˜D‘[ðl
ð 
Ð,Ñ	,ðl
ð l
ð l
ð l
ð\ €U„]�_„_ð 37ð-7ð -7à”\ð-7ð "œL¨4Ñ/ð-7ð 
ð	-7ð -7ð -7ñ „_ð-7ð -7ð -7ð -7ð -7r4   rç  c                   ó@   ‡ — e Zd ZdZddefˆ fd„Zdej        fd„Zˆ xZ	S )ÚPatchTSTRegressionHeadz
    Regression head
    Nr<   c                 óâ  •— t          ¦   «                              ¦   «          |j        | _        |j        | _        |j        | _        || _        |j        |j        z  }t          j
        d¬¦  «        | _        |j        dk    rt          j        |j        ¦  «        nt          j        ¦   «         | _        |€!t          j        ||j        ¦  «        | _        d S |                     |¦  «        | _        d S rÁ  )r@   rA   Úoutput_rangeÚy_rangerô   rÄ  râ  rè   rp   r   rÅ  rÆ  r«  rÖ   r×   r   rD   rÇ  rá  rà  )rI   r<   râ  rB   rJ   s       €r2   rA   zPatchTSTRegressionHead.__init__Ü  sÎ   ø€ Ý‰Œ×ÒÑÔÐØÔ*ˆŒØ#Ô1ˆÔØ"Ô/ˆÔØ#6ˆÔ àÔ,¨v¬~Ñ=ˆå”z¨AÐ.Ñ.Ô.ˆŒØ:@Ô:MÐPQÒ:QÐ:Q•r”z &Ô"5Ñ6Ô6Ð6ÕWYÔWbÑWdÔWdˆŒàÐ&Ý œi¨°&Ô2DÑEÔEˆDŒOˆOˆOà1×JÒJÈ8ÑTÔTˆDŒOˆOˆOr4   r­  c                 ó  — | j         r|dd…dd…ddd…f         }na| j        dk    r|                     d¬¦  «        }n?| j        dk    r|                     d¬¦  «        j        }nt          d| j        › d�¦  «        ‚|                      |                      |¦  «        ¦  «        }|                      |¦  «        }| j	        du | j
        duz  r>t          j        |¦  «        | j
        d	         | j
        d         z
  z  | j
        d         z   }|S )
aY  
        Parameters:
            embedding (`torch.Tensor` of shape `(bs, num_channels, num_patches, d_model)` or
                    `(bs, num_channels, num_patches+1, d_model)` if `cls_token` is set to True, *required*):
                Embedding from the model
        Returns:
            `torch.Tensor` of shape `(bs, output_dim)`

        Nr   r,  r$   r%   r¶   rÉ  rÊ  r   )rô   rÄ  r,  r¶   rË  rC   r   rÆ  rá  râ  r   r*   ÚsigmoidrÌ  s       r2   r^   zPatchTSTRegressionHead.forwardí  s'  € ð Ôð 
	]à(¨¨¨¨A¨A¨A¨q°!°!°!¨Ô4ÐÐØÔ &Ò(Ð(à(Ÿ~š~°!˜~Ñ4Ô4ÐÐØÔ %Ò'Ð'à(Ÿ}š}°˜}Ñ3Ô3Ô:ÐÐåÐ[°Ô1BÐ[Ð[Ð[Ñ\Ô\Ð\ð  Ÿ<š<¨¯ªÐ5EÑ(FÔ(FÑGÔGÐð —’Ð!1Ñ2Ô2ˆàÔ$¨Ð,°´ÀTÐ1IÑJð 	cÝ”] 6Ñ*Ô*¨d¬l¸1¬oÀÄÈQÄÑ.OÑPÐSWÔS_Ð`aÔSbÑbˆFØˆr4   rÄ   rw   ri   s   @r2   rý  rý  ×  sx   ø€ € € € € ðð ðUð U˜~ð Uð Uð Uð Uð Uð Uð" ¤ð ð ð ð ð ð ð ð r4   rý  z,
    The PatchTST for regression model.
    c                   ó  ‡ — e Zd Zdefˆ fd„Ze	 	 	 	 	 ddej        dej        dz  dej        dz  dedz  dedz  d	edz  d
e	e
z  fd„¦   «         Z ej        ¦   «         	 ddej        dej        dz  d
efd„¦   «         Zˆ xZS )ÚPatchTSTForRegressionr<   c                 óV  •— t          ¦   «                              |¦  «         |j        r!t                               d¦  «         d|_        t          |¦  «        | _        |j        dk    rd | _        n‰|j        dk    rt          |j
        ¬¦  «        | _        nc|j        dk    rt          |j
        ¬¦  «        | _        n=|j        dk    rt          |j
        ¬¦  «        | _        nt          d|j        › �¦  «        ‚t          || j        ¦  «        | _        |                      ¦   «          d S )	NrÑ  Fré  rê  r%   rë  rì  rí  )r@   rA   r˜  rÒ  rÓ  r•  rí   rM  râ  r   rÇ  r   r   rC   rý  r²  r;  rs   s     €r2   rA   zPatchTSTForRegression.__init__  s&  ø€ Ý‰Œ×Ò˜Ñ Ô Ð ð Ôð 	)Ý�NŠNÐHÑIÔIÐIØ#(ˆFÔ å" 6Ñ*Ô*ˆŒ
ØŒ;˜%ÒÐØ'+ˆDÔ$Ð$àÔ)¨[Ò8Ð8Ý+9¸fÔ>PÐ+QÑ+QÔ+Q�Ô(Ð(ØÔ+¨xÒ7Ð7Ý+7¸FÔ<NÐ+OÑ+OÔ+O�Ô(Ð(ØÔ+Ð/BÒBÐBÝ+AÀfÔFXÐ+YÑ+YÔ+Y�Ô(Ð(å Ð!\ÀÔ@ZÐ!\Ð!\Ñ]Ô]Ð]å*¨6°4Ô3KÑLÔLˆŒ	ð 	�ŠÑÔÐÐÐr4   Nrº   rÔ  r›  r<  rM   r�  rN   c                 ó   ‡ — |�|n‰ j         j        }‰                      ||||d¬¦  «        }‰                      |j        ¦  «        }	d}
|�}‰ j        rU‰ j                             |	¦  «        }t          ˆ fd„|	D ¦   «         ¦  «        }	t          ||¦  «        }
t          |
¦  «        }
n!t          j        d¬¦  «        }
 |
|	|¦  «        }
|s|	f|dd…         z   }|
�|
f|z   n|}|S t          |
|	|j        |j        ¬	¦  «        S )
a#  
        past_values (`torch.Tensor` of shape `(bs, sequence_length, num_input_channels)`, *required*):
            Input sequence to the model
        target_values (`torch.Tensor` of shape `(bs, num_input_channels)`):
            Target values associates with the `past_values`
        past_observed_mask (`torch.BoolTensor` of shape `(batch_size, sequence_length, num_input_channels)`, *optional*):
            Boolean mask to indicate which `past_values` were observed and which were missing. Mask values selected
            in `[0, 1]`:

            - 1 for values that are **observed**,
            - 0 for values that are **missing** (i.e. NaNs that were replaced by zeros).
            Whether or not to return a `ModelOutput` instead of a plain tuple.

        Examples:

        ```python
        >>> from transformers import PatchTSTConfig, PatchTSTForRegression

        >>> # Regression task with 6 input channels and regress 2 targets
        >>> model = PatchTSTForRegression.from_pretrained("namctin/patchtst_etth1_regression")

        >>> # during inference, one only provides past values, the model outputs future values
        >>> past_values = torch.randn(20, 512, 6)
        >>> outputs = model(past_values=past_values)
        >>> regression_outputs = outputs.regression_outputs
        ```NTr´  c              3   óX   •K  — | ]$}|                      d ‰j        j        ¦  «        V — Œ%dS )r"   N)rQ   r<   rÇ  )r—   ÚitemrI   s     €r2   r¡  z0PatchTSTForRegression.forward.<locals>.<genexpr>e  s6   øè è € ÐWÐWÈ˜dŸiši¨¨D¬KÔ,CÑDÔDÐWÐWÐWÐWÐWÐWr4   r,  r¶  r   r¿   )rM  rQ  rK   r?  )r<   r�  rí   r²  r>  râ  rð  rg   r_  rk  r   r¹  rP  rK   r?  )rI   rº   rÔ  r›  r<  rM   r�  r    rº  r×  rM  rð  rê   s   `            r2   r^   zPatchTSTForRegression.forward.  sG  ø€ ðL &1Ð%<�k�kÀ$Ä+ÔBYˆà—z’zØ#Ø1Ø!5Ø/Øð "ñ 
ô 
ˆð —	’	˜,Ô8Ñ9Ô9ˆàˆØÐ$ØÔ'ð 	2Ø#Ô7×DÒDÀUÑKÔK�åÐWÐWÐWÐWÐQVÐWÑWÔWÑWÔW�Ý˜<¨Ñ7Ô7�å'¨Ñ-Ô-��å”z¨FÐ3Ñ3Ô3�Ø�t˜E =Ñ1Ô1�àð 	à�h ¨a°¨dÔ!3Ñ3ˆGØ+/Ð+;�t�g Ñ'Ð'ÀˆGØˆNÝ*ØØ$Ø&Ô4Ø#Ô.ð	
ñ 
ô 
ð 	
r4   c                 ó8  ‡— | j         j        } | |d|d¬¦  «        }| j                             |j        ¦  «        Šˆfd„t          |¦  «        D ¦   «         }t          j        |d¬¦  «                             d|| j         j	        ¦  «        }t          |¬¦  «        S )	a¢  
        Generate sequences of sample predictions from a model with a probability distribution head.

        Parameters:
            past_values (`torch.FloatTensor` of shape `(batch_size, sequence_length, num_input_channels)`):
                Past values of the time series that serves as context in order to predict the future.
            past_observed_mask (`torch.BoolTensor` of shape `(batch_size, sequence_length, num_input_channels)`, *optional*):
                Boolean mask to indicate which `past_values` were observed and which were missing. Mask values selected
                in `[0, 1]`:

                - 1 for values that are **observed**,
                - 0 for values that are **missing** (i.e. NaNs that were replaced by zeros).

        Return:
            [`SamplePatchTSTOutput`] where the outputs `sequences` tensor will have shape `(batch_size, number of
            samples, num_targets)`.
        NF)rº   rÔ  r›  r<  c                 ó8   •— g | ]}‰                      ¦   «         ‘ŒS r–   rô  rö  s     €r2   r™   z2PatchTSTForRegression.generate.<locals>.<listcomp>ž  s%   ø€ ÐNÐNÐN¨Q�<×&Ò&Ñ(Ô(ÐNÐNÐNr4   r   r%   r"   r÷  )r<   rø  râ  rð  rQ  r  r*   r  rQ   rÇ  rY  rù  s         @r2   rû  zPatchTSTForRegression.generatey  s®   ø€ ð0  $œ{Ô?Ðð �$Ø#ØØ1Ø!&ð	
ñ 
ô 
ˆð Ô/×<Ò<¸WÔ=WÑXÔXˆàNÐNÐNÐNµ%Ð8LÑ2MÔ2MÐNÑNÔNˆå”+˜g¨1Ð-Ñ-Ô-×2Ò2°2Ð7KÈTÌ[ÔMdÑeÔeˆÝ#¨gÐ6Ñ6Ô6Ð6r4   r¦  rÄ   )r_   r`   ra   r   rA   r   r*   rf   re   rg   rP  r^   r  rY  rû  rh   ri   s   @r2   r  r    sD  ø€ € € € € ð˜~ð ð ð ð ð ð ð4 ð .2Ø26Ø,0Ø)-Ø#'ðH
ð H
à”\ðH
ð ”| dÑ*ðH
ð "œL¨4Ñ/ð	H
ð
 # T™kðH
ð   $™;ðH
ð ˜D‘[ðH
ð 
Ð,Ñ	,ðH
ð H
ð H
ñ „^ðH
ðT €U„]�_„_ð 37ð'7ð '7à”\ð'7ð "œL¨4Ñ/ð'7ð 
ð	'7ð '7ð '7ñ „_ð'7ð '7ð '7ð '7ð '7r4   r  )r•  rì   rç  r°  r  rÏ  )Nr   )NFr   rª  rD  )Prb   r(  Úcollections.abcr   Údataclassesr   r*   r   Ú r   rõ   Úactivationsr   Úintegrations.deepspeedr	   Úmodeling_flash_attention_utilsr
   Úmodeling_outputsr   Úmodeling_utilsr   r   Úprocessing_utilsr   Útime_series_utilsr   r   r   Úutilsr   r   r   r   Úconfiguration_patchtstr   Ú
get_loggerr_   rÒ  r  rf   rd   r3   r6   rk   Úlistre   rc   r’   r¯   r±   rÂ   rÎ   rì   r  ró   r   rG  rL  rP  rS  rV  rY  ÚdistributionsÚDistributionr_  rk  rm  r~  rŒ  r�  r•  r¨  r°  r¿  rÏ  rÙ  rç  rý  r  Ú__all__r–   r4   r2   ú<module>r     s	
  ðð Ð à €€€Ø $Ð $Ð $Ð $Ð $Ð $Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø "Ð "Ð "Ð "Ð "Ð "Ø @Ð @Ð @Ð @Ð @Ð @Ø BÐ BÐ BÐ BÐ BÐ BØ /Ð /Ð /Ð /Ð /Ð /Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UÐ UØ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MÐ MØ 2Ð 2Ð 2Ð 2Ð 2Ð 2ð 
ˆÔ	˜HÑ	%Ô	%€ð !Øð%ð %ØŒIð%àŒ<ð%ð 
Œð%ð Œ<ð	%ð
 ”L 4Ñ'ð%ð �T‰\ð%ð ð%ð Ð'Ô(ð%ð %ð %ð %ð:R/ð R/ð R/ð R/ð R/˜œ	ñ R/ô R/ð R/ðj&ð &ð &ð &ð &˜œ	ñ &ô &ð &ð2 -1Ø',Øð7%ð 7%ØŒLð7%àð7%ð # T™kð7%ð !%ð	7%ð
 ð7%ð 7%ð 7%ð 7%ðz -1Øð	A%ð A%ØŒLðA%à# c™zðA%ð # T™kðA%ð ð	A%ð A%ð A%ð A%ðH-ð -ð -ð -ð -�r”yñ -ô -ð -ð`9"ð 9"ð 9"ð 9"ð 9"�b”iñ 9"ô 9"ð 9"ðxHð Hð Hð Hð H˜2œ9ñ Hô Hð HðV ð&2ð &2ð &2ð &2ð &2˜oñ &2ô &2ñ „ð&2ðR!ð !ð !ð !ð !˜œ	ñ !ô !ð !ðH5ð 5ð 5ð 5ð 5 ¤ñ 5ô 5ð 5ðp<xð <xð <xð <xð <xÐ-ñ <xô <xð <xð~ €ððñ ô ð
 ð1ð 1ð 1ð 1ð 1˜+ñ 1ô 1ñ „ñô ð1ð6 €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7 ;ñ 7ô 7ñ „ñô ð7ð €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7 +ñ 7ô 7ñ „ñô ð7ð €ððñ ô ð
 ð+ð +ð +ð +ð + +ñ +ô +ñ „ñô ð+ð4 €ððñ ô ð
 ð7ð 7ð 7ð 7ð 7 kñ 7ô 7ñ „ñô ð7ð €ððñ ô ð ð/ð /ð /ð /ð /˜;ñ /ô /ñ „ñô ð/ð#ˆuÔ"Ô/ð #¸¼ð #È%Ì,ð #ð #ð #ð #ð*ð * 5¤<ð *¸%¼,ÈÑ:Mð *ÐchÔcoð *ð *ð *ð *ð2 0ð  0ð  0ð  0ð  0˜œ	ñ  0ô  0ð  0ðH3;ð 3;ð 3;ð 3;ð 3;˜œñ 3;ô 3;ð 3;ðn ð  ð  ð  ð  ˜œ	ñ  ô  ð  ð6 ð  ð  ð  ð  �R”Yñ  ô  ð  ð8 ðn
ð n
ð n
ð n
ð n
Ð+ñ n
ô n
ñ „ðn
ðbð ð ð ð ˜rœyñ ô ð ð8 €ððñ ô ð
m
ð m
ð m
ð m
ð m
Ð4ñ m
ô m
ñô ð
m
ð`"ð "ð "ð "ð " ¤ñ "ô "ð "ðJ €ððñ ô ð
U
ð U
ð U
ð U
ð U
Ð 7ñ U
ô U
ñô ð
U
ðp €ððñ ô ð
]ð ]ð ]ð ]ð ]˜RœYñ ]ô ]ñô ð
]ð@ €ððñ ô ð
z7ð z7ð z7ð z7ð z7Ð3ñ z7ô z7ñô ð
z7ðz4ð 4ð 4ð 4ð 4˜RœYñ 4ô 4ð 4ðn €ððñ ô ð
N7ð N7ð N7ð N7ð N7Ð3ñ N7ô N7ñô ð
N7ðbð ð €€€r4   