§
    ‚Štjûw  ã                   óÖ  — d Z ddlZddlmZmZ ddlmZ ddlZddlm	Z	 ddl
m	c 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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'  ej(        e)¦  «        Z*ee G d„ de¦  «        ¦   «         ¦   «         Z+ee G d„ de¦  «        ¦   «         ¦   «         Z, G d„ de	j-        ¦  «        Z. G d„ de	j-        ¦  «        Z/ G d„ de#¦  «        Z0 G d„ de	j-        ¦  «        Z1 G d„ d e	j-        ¦  «        Z2 G d!„ d"e	j-        ¦  «        Z3e G d#„ d$e¦  «        ¦   «         Z4e G d%„ d&e4¦  «        ¦   «         Z5 G d'„ d(e4¦  «        Z6g d)¢Z7dS )*zPyTorch TimesFM model.é    N)ÚCallableÚSequence)Ú	dataclassé   )Úinitialization)ÚFlashAttentionKwargs)ÚBaseModelOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚLlamaRMSNorm)Úsimple_eager_attention_forwardé   )ÚTimesFmConfigc                   óP   — e Zd ZU dZdZej        dz  ed<   dZej        dz  ed<   dS )ÚTimesFmOutputzÇ
    loc (`torch.Tensor` of shape `(batch_size, )`):
        The mean of the time series inputs.
    scale (`torch.Tensor` of shape `(batch_size,)`):
        The scale of the time series inputs.
    NÚlocÚscale)	Ú__name__Ú
__module__Ú__qualname__Ú__doc__r   ÚtorchÚTensorÚ__annotations__r   © ó    úi/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/timesfm/modular_timesfm.pyr   r   (   sL   € € € € € € ðð ð  $€CˆŒ˜Ñ	Ð#Ð#Ñ#Ø!%€Eˆ5Œ<˜$ÑÐ%Ð%Ñ%Ð%Ð%r$   r   c                   ót   — 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j        e
z  dz  ed<   dS )ÚTimesFmOutputForPredictionaµ  
    mean_predictions (`torch.Tensor` of shape `(batch_size, sequence_length)`):
        The mean predictions of the time series.
    full_predictions (`torch.Tensor` of shape `(batch_size, sequence_length)`):
        The full predictions of the time series including the mean and the quantiles.
    loss (`torch.Tensor` of shape `(1,)`, *optional*, returned when `future_values` is provided):
        The loss of the TimesFM model.
    NÚmean_predictionsÚfull_predictionsÚloss)r   r   r   r   r(   r    r!   r"   r)   r*   Úfloatr#   r$   r%   r'   r'   6   sj   € € € € € € ðð ð -1Ð�e”l TÑ)Ð0Ð0Ñ0Ø,0Ð�e”l TÑ)Ð0Ð0Ñ0Ø(,€Dˆ%Œ,˜Ñ
 Ñ
%Ð,Ð,Ñ,Ð,Ð,r$   r'   c                   ó0   ‡ — e Zd ZdZdefˆ fd„Zdd„Zˆ xZS )Ú
TimesFmMLPzPax MLP in pytorch.Úconfigc                 ó  •— t          ¦   «                              ¦   «          |j        }|j        }t	          j        ||¦  «        | _        t	          j        ||¦  «        | _        t	          j        |d¬¦  «        | _	        d S )Ng�íµ ÷Æ°>)Únormalized_shapeÚeps)
ÚsuperÚ__init__Úhidden_sizeÚintermediate_sizeÚnnÚLinearÚ	gate_projÚ	down_projÚ	LayerNormÚ
layer_norm)Úselfr.   r4   r5   Ú	__class__s       €r%   r3   zTimesFmMLP.__init__J   sl   ø€ Ý‰Œ×ÒÑÔÐØÔ(ˆØ"Ô4Ðåœ ;Ð0AÑBÔBˆŒÝœÐ#4°kÑBÔBˆŒÝœ,¸ÈÐNÑNÔNˆŒˆˆr$   Nc                 óà   — |                       |¦  «        }|                      |¦  «        }t          j        |¦  «        }|                      |¦  «        }|�|d|d d …d d …d f         z
  z  }||z   S )Nç      ð?)r;   r8   ÚFÚrelur9   )r<   ÚxÚpaddingsÚgate_inpÚgateÚoutputss         r%   ÚforwardzTimesFmMLP.forwardS   st   € Ø—?’? 1Ñ%Ô%ˆØ�~Š~˜hÑ'Ô'ˆÝŒv�d‰|Œ|ˆØ—.’. Ñ&Ô&ˆØÐØ  x°°°°1°1°1°d°
Ô';Ñ!;Ñ<ˆGØ˜‰{Ðr$   ©N©r   r   r   r   r   r3   rG   Ú__classcell__©r=   s   @r%   r-   r-   G   se   ø€ € € € € ØÐðO˜}ð Oð Oð Oð Oð Oð Oðð ð ð ð ð ð ð r$   r-   c                   ó(   ‡ — e Zd ZdZˆ fd„Zd„ Zˆ xZS )ÚTimesFmResidualBlockzTimesFM residual block.c                 ó>  •— t          ¦   «                              ¦   «          || _        || _        || _        t          j        ||¦  «        | _        t          j        ¦   «         | _	        t          j        ||¦  «        | _
        t          j        ||¦  «        | _        d S rH   )r2   r3   Ú
input_dimsÚhidden_dimsÚoutput_dimsr6   r7   Úinput_layerÚSiLUÚ
activationÚoutput_layerÚresidual_layer)r<   rO   rP   rQ   r=   s       €r%   r3   zTimesFmResidualBlock.__init__`   s   ø€ Ý‰Œ×ÒÑÔÐØ$ˆŒØ&ˆÔØ&ˆÔåœ9 Z°Ñ=Ô=ˆÔÝœ'™)œ)ˆŒÝœI k°;Ñ?Ô?ˆÔÝ œi¨
°KÑ@Ô@ˆÔÐÐr$   c                 ó´   — |                       |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }||z   S rH   )rR   rT   rU   rV   )r<   rB   ÚhiddenÚoutputÚresiduals        r%   rG   zTimesFmResidualBlock.forwardk   sW   € Ø×!Ò! !Ñ$Ô$ˆØ—’ Ñ(Ô(ˆØ×"Ò" 6Ñ*Ô*ˆØ×&Ò& qÑ)Ô)ˆØ˜Ñ Ð r$   )r   r   r   r   r3   rG   rJ   rK   s   @r%   rM   rM   ]   sR   ø€ € € € € Ø!Ð!ð	Að 	Að 	Að 	Að 	Að!ð !ð !ð !ð !ð !ð !r$   rM   c                   ó   — e Zd ZdS )ÚTimesFmRMSNormN)r   r   r   r#   r$   r%   r\   r\   s   s   € € € € € Ø€Dr$   r\   c                   ó0   ‡ — e Zd ZdZdefˆ fd„Zdd„Zˆ xZS )ÚTimesFmPositionalEmbeddingz6Generates position embedding for a given 1-d sequence.r.   c           
      óÒ  •— t          ¦   «                              ¦   «          |j        }|j        }||c| _        | _        |j        | _        | j        dz  }t          j        t          |¦  «        t          |¦  «        z  ¦  «        t          |dz
  d¦  «        z  }|  
                    d|t          j        t          j        |t          j        ¬¦  «        | z  ¦  «        z  ¦  «         d S )Nr   r   Úinv_timescales©Údtype)r2   r3   Úmin_timescaleÚmax_timescaler4   Úembedding_dimsÚmathÚlogr+   ÚmaxÚregister_bufferr    ÚexpÚarangeÚfloat32)r<   r.   rc   rd   Únum_timescalesÚlog_timescale_incrementr=   s         €r%   r3   z#TimesFmPositionalEmbedding.__init__z   sá   ø€ Ý‰Œ×ÒÑÔÐØÔ,ˆØÔ,ˆØ1>ÀÐ.ˆÔ˜DÔ.Ø$Ô0ˆÔàÔ,°Ñ1ˆÝ"&¤(­5°Ñ+?Ô+?Å%ÈÑBVÔBVÑ+VÑ"WÔ"WÕZ]Ð^lÐopÑ^pÐrsÑZtÔZtÑ"tÐØ×ÒØØ�EœI¥e¤l°>ÍÌÐ&WÑ&WÔ&WÐ[rÐZrÑ&rÑsÔsÑsñ	
ô 	
ð 	
ð 	
ð 	
r$   Nc                 ó  — |€|€t          d¦  «        ‚|€?t          j        |t          j        | j        j        ¬¦  «                             d¦  «        }n"|j        dk    rt          d|j        › �¦  «        ‚ |j	        g |j        ¢d‘R Ž | j         	                    ddd¦  «        z  }t          j
        t          j        |¦  «        t          j        |¦  «        gd¬	¦  «        }t          j        |ddd| j        dz  f¦  «        }|S )
aÍ  Generates a Tensor of sinusoids with different frequencies.

        Args:
            seq_length: an optional Python int defining the output sequence length.
              if the `position` argument is specified.
            position: [B, seq_length], optional position for each token in the
              sequence, only required when the sequence is packed.

        Returns:
            [B, seqlen, D] if `position` is specified, else [1, seqlen, D]
        Nz.Either position or seq_length must be provided©rb   Údevicer   r   z*position must be 2-dimensional, got shape r   éÿÿÿÿ©Údim)Ú
ValueErrorr    rk   rl   r`   rq   Ú	unsqueezeÚndimÚshapeÚviewÚcatÚsinÚcosr@   Úpadre   )r<   Ú
seq_lengthÚpositionÚscaled_timeÚsignals        r%   rG   z"TimesFmPositionalEmbedding.forwardˆ   s  € ð Ð 
Ð 2ÝÐMÑNÔNÐNàÐå”| Jµe´mÈDÔL_ÔLfÐgÑgÔg×qÒqÐrsÑtÔtˆHˆHØŒ]˜aÒÐÝÐZÈ(Ì.ÐZÐZÑ[Ô[Ð[à#�h”mÐ7 X¤^Ð7°QÐ7Ð7Ð7¸$Ô:M×:RÒ:RÐSTÐVWÐY[Ñ:\Ô:\Ñ\ˆÝ”�EœI kÑ2Ô2µE´I¸kÑ4JÔ4JÐKÐQRÐSÑSÔSˆõ ”�v  1 a¨Ô)<¸qÑ)@ÐAÑBÔBˆØˆr$   ©NNrI   rK   s   @r%   r^   r^   w   s^   ø€ € € € € Ø@Ð@ð
˜}ð 
ð 
ð 
ð 
ð 
ð 
ðð ð ð ð ð ð ð r$   r^   c                   ó¼   ‡ — e Zd ZdZdedefˆ fd„Zdej        dej        fd„Z		 dd	ej        d
ej        dz  de
e         deej        ej        dz  f         fd„Zˆ xZS )ÚTimesFmAttentionzlImplements the attention used in TimesFM. One key difference is that there is _per_dim_scaling of the query.r.   Ú	layer_idxc                 óä  •— t          ¦   «                              ¦   «          || _        d| _        |j        | _        || _        |j        | _        |j        | _        |j	        | _	        | j        | j	        z  | _
        | j        | j	        z  | _        t          j        t          j        | j	        f¦  «        ¦  «        | _        t          j        | j        | j        | j	        z  ¦  «        | _        t          j        | j        | j        | j	        z  ¦  «        | _        t          j        | j        | j        | j	        z  ¦  «        | _        t          j        | j        | j	        z  | j        ¦  «        | _        d S )NT)r2   r3   r.   Ú	is_causalÚattention_dropoutr…   Únum_attention_headsÚ	num_headsr4   Úhead_dimÚq_sizeÚkv_sizer6   Ú	Parameterr    ÚemptyÚscalingr7   Úq_projÚk_projÚv_projÚo_proj©r<   r.   r…   r=   s      €r%   r3   zTimesFmAttention.__init__¨   s  ø€ Ý‰Œ×ÒÑÔÐØˆŒØˆŒØ!'Ô!9ˆÔØ"ˆŒàÔ3ˆŒØ!Ô-ˆÔØœˆŒà”n t¤}Ñ4ˆŒØ”~¨¬Ñ5ˆŒÝ”|¥E¤K°´Ð0@Ñ$AÔ$AÑBÔBˆŒå”i Ô 0°$´.À4Ä=Ñ2PÑQÔQˆŒÝ”i Ô 0°$´.À4Ä=Ñ2PÑQÔQˆŒÝ”i Ô 0°$´.À4Ä=Ñ2PÑQÔQˆŒÝ”i ¤°´Ñ >ÀÔ@PÑQÔQˆŒˆˆr$   ÚqueryÚreturnc                 ó°   — t          j        | j        ¦  «                             dt	          j        | j        ¦  «        z  ¦  «        }||d d d d d …f         z  S )Ng^$3eG÷?)r@   Úsoftplusr�   Úmulrf   Úsqrtr‹   )r<   r–   r   s      r%   Ú_scale_queryzTimesFmAttention._scale_query¼   sO   € Ý”
˜4œ<Ñ(Ô(×,Ò,¨[½4¼9ÀTÄ]Ñ;SÔ;SÑ-SÑTÔTˆØ�u˜T 4¨¨q¨q¨qÐ0Ô1Ñ1Ð1r$   NÚhidden_statesÚattention_maskÚkwargsc                 óÌ  — |j         d d…         }g |¢d‘| j        ‘R }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }|                      |¦  «                             |¦  «                             dd¦  «        }t          j	        | j
        j        t          ¦  «        }	 |	| ||||f| j        sdn| j        ddœ|¤Ž\  }
} |
j        g |¢d‘R Ž                      ¦   «         }
|                      |
¦  «        }
|
|fS )Nrr   r   r   ç        r?   )Údropoutr�   )rx   r‹   r‘   ry   Ú	transposerœ   r’   r“   r
   Úget_interfacer.   Ú_attn_implementationr   Útrainingrˆ   ÚreshapeÚ
contiguousr”   )r<   r�   rž   rŸ   Úinput_shapeÚhidden_shapeÚquery_statesÚ
key_statesÚvalue_statesÚattention_interfaceÚattn_outputÚattn_weightss               r%   rG   zTimesFmAttention.forwardÀ   sˆ  € ð $Ô)¨#¨2¨#Ô.ˆØ8˜Ð8 bÐ8¨$¬-Ð8Ð8ˆà—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆØ×(Ò(¨Ñ6Ô6ˆØ—[’[ Ñ/Ô/×4Ò4°\ÑBÔB×LÒLÈQÐPQÑRÔRˆ
Ø—{’{ =Ñ1Ô1×6Ò6°|ÑDÔD×NÒNÈqÐRSÑTÔTˆå(?Ô(MØŒKÔ,Õ.Lñ)
ô )
Ðð %8Ð$7ØØØØØð	%
ð  $œ}ÐH�C�C°$Ô2HØð	%
ð 	%
ð ð	%
ð 	%
Ñ!ˆ�\ð *�kÔ)Ð;¨;Ð;¸Ð;Ð;Ð;×FÒFÑHÔHˆØ—k’k +Ñ.Ô.ˆØ˜LÐ(Ð(r$   rH   )r   r   r   r   r   Úintr3   r    r!   rœ   r   r   ÚtuplerG   rJ   rK   s   @r%   r„   r„   ¥   så   ø€ € € € € ØvÐvðR˜}ð R¸ð Rð Rð Rð Rð Rð Rð(2 %¤,ð 2°5´<ð 2ð 2ð 2ð 2ð /3ð)ð )à”|ð)ð œ tÑ+ð)ð Ð-Ô.ð	)ð
 
ˆuŒ|˜Uœ\¨DÑ0Ð0Ô	1ð)ð )ð )ð )ð )ð )ð )ð )r$   r„   c                   ól   ‡ — e Zd ZdZdedefˆ fd„Zdej        dej        dej        dej        fd	„Z	ˆ xZ
S )
ÚTimesFmDecoderLayerzTransformer layer.r.   r…   c                 óÜ   •— t          ¦   «                              ¦   «          t          ||¬¦  «        | _        t	          |¦  «        | _        t          |j        |j        ¬¦  «        | _	        d S )N)r…   )r1   )
r2   r3   r„   Ú	self_attnr-   Úmlpr\   r4   Úrms_norm_epsÚinput_layernormr•   s      €r%   r3   zTimesFmDecoderLayer.__init__ä   s]   ø€ Ý‰Œ×ÒÑÔÐå)¨&¸IÐFÑFÔFˆŒÝ˜fÑ%Ô%ˆŒÝ-¨fÔ.@ÀfÔFYÐZÑZÔZˆÔÐÐr$   r�   rž   rC   r—   c                 ó    — |}|                       |¦  «        }|                      ||¬¦  «        \  }}||z   }|                      ||¬¦  «        }|S )N)r�   rž   )rC   )r¹   r¶   r·   )r<   r�   rž   rC   rŸ   rZ   Ú_s          r%   rG   zTimesFmDecoderLayer.forwardë   sh   € ð !ˆØ×,Ò,¨]Ñ;Ô;ˆØŸ>š>Ø'Ø)ð *ñ 
ô 
Ñˆ�qð ! =Ñ0ˆð Ÿš ¸˜ÑBÔBˆàÐr$   )r   r   r   r   r   r±   r3   r    r!   rG   rJ   rK   s   @r%   r´   r´   á   s›   ø€ € € € € ØÐð[˜}ð [¸ð [ð [ð [ð [ð [ð [ðà”|ðð œðð ”,ð	ð 
Œðð ð ð ð ð ð ð r$   r´   c                   ót   ‡ — e Zd ZU eed<   dZdgZdZdZdZ	e
edœZ ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )	ÚTimesFmPreTrainedModelr.   Útimesfmr´   Úpast_values)ÚtimeT)r�   Ú
attentionsc           
      ó4  •— t          ¦   «                              |¦  «         t          |t          ¦  «        rt	          j        |j        ¦  «         d S t          |t          ¦  «        r°|j        dz  }|j	        |j
        }}t          j        t          |¦  «        t          |¦  «        z  ¦  «        t          |dz
  d¦  «        z  }t	          j        |j        |t#          j        t#          j        |t"          j        ¬¦  «        | z  ¦  «        z  ¦  «         d S d S )Nr   r   ra   )r2   Ú_init_weightsÚ
isinstancer„   ÚinitÚones_r�   r^   re   rd   rc   rf   rg   r+   rh   Úcopy_r`   r    rj   rk   rl   )r<   Úmodulerm   rd   rc   rn   r=   s         €r%   rÃ   z$TimesFmPreTrainedModel._init_weights  s  ø€ å‰Œ×Ò˜fÑ%Ô%Ð%Ý�fÕ.Ñ/Ô/ð 	åŒJ�v”~Ñ&Ô&Ð&Ð&Ð&Ý˜Õ :Ñ;Ô;ð 
	Ø#Ô2°aÑ7ˆNØ+1Ô+?ÀÔAU˜=ˆMÝ&*¤h­u°]Ñ/CÔ/CÅeÈMÑFZÔFZÑ/ZÑ&[Ô&[Õ^aØ Ñ" Añ_ô _ñ 'Ð#õ ŒJØÔ%ØÝ”)�EœL¨½u¼}ÐMÑMÔMÐQhÐPhÑhÑiÔiñjñô ð ð ð ð
	ð 
	r$   )r   r   r   r   r"   Úbase_model_prefixÚ_no_split_modulesÚmain_input_nameÚinput_modalitiesÚ_supports_sdpar´   r„   Ú_can_record_outputsr    Úno_gradrÃ   rJ   rK   s   @r%   r½   r½     sŒ   ø€ € € € € € àÐÐÑØ!ÐØ.Ð/ÐØ#€OØ ÐØ€Nà,Ø&ðð Ðð
 €U„]�_„_ðð ð ð ñ „_ðð ð ð ð r$   r½   c                   ó  ‡ — e Zd Zdefˆ fd„Zdej        dej        deej        eej        ej        f         f         fd„Ze	e
edej        dej        d	ej        d
ee         def
d„¦   «         ¦   «         ¦   «         Ze	 ddej        dz  dedej        dej        dedej        dz  fd„¦   «         Zedej        dej        deej        ej        f         fd„¦   «         Zedej        dej        dej        fd„¦   «         Zˆ xZS )ÚTimesFmModelr.   c                 óÎ  •‡— t          ¦   «                              ‰¦  «         ‰| _        t          d‰j        z  ‰j        ‰j        ¬¦  «        | _        t          j	        ‰j
        ‰j        ¬¦  «        | _        t          j        ˆfd„t          ‰j        ¦  «        D ¦   «         ¦  «        | _        | j        j        rt#          ‰¬¦  «        | _        |                      ¦   «          d S )Nr   ©rO   rQ   rP   )Únum_embeddingsÚembedding_dimc                 ó0   •— g | ]}t          ‰|¦  «        ‘ŒS r#   )r´   )Ú.0r…   r.   s     €r%   ú
<listcomp>z)TimesFmModel.__init__.<locals>.<listcomp>.  s$   ø€ ÐeÐeÐe¸	Õ  ¨Ñ3Ô3ÐeÐeÐer$   )r.   )r2   r3   r.   rM   Úpatch_lengthr4   r5   Úinput_ff_layerr6   Ú	EmbeddingÚ	freq_sizeÚfreq_embÚ
ModuleListÚrangeÚnum_hidden_layersÚlayersÚuse_positional_embeddingr^   Úposition_embÚ	post_init©r<   r.   r=   s    `€r%   r3   zTimesFmModel.__init__#  sà   øø€ Ý‰Œ×Ò˜Ñ Ô Ð àˆŒÝ2Ø˜6Ô.Ñ.ØÔ*ØÔ0ð
ñ 
ô 
ˆÔõ
 œ°FÔ4DÐTZÔTfÐgÑgÔgˆŒÝ”mØeÐeÐeÐeÅUÈ6ÔKcÑEdÔEdÐeÑeÔeñ
ô 
ˆŒð Œ;Ô/ð 	JÝ :À&Ð IÑ IÔ IˆDÔð 	�ŠÑÔÐÐÐr$   ÚinputsÚpatched_padsr—   c                 ó”  — |                       ||¦  «        \  }}t          j        || j        j        ¬¦  «        }||dd…ddf         z
  |dd…ddf         z  }t          j        t          j        || j        j        z
  ¦  «        | j        j        k     t          j        | j        j        |j	        |j
        ¬¦  «        |¦  «        }|||ffS )zInput is of shape [B, N, P].©ÚminNrp   )Ú_timesfm_masked_mean_stdr    Úclampr.   Ú	toleranceÚwhereÚabsÚpad_valÚtensorrb   rq   )r<   ræ   rç   ÚmuÚsigmarF   s         r%   Ú_forward_transformzTimesFmModel._forward_transform6  sÈ   € ð ×1Ò1°&¸,ÑGÔG‰	ˆˆEÝ”˜E t¤{Ô'<Ð=Ñ=Ô=ˆð ˜B˜q˜q˜q $¨˜}Ô-Ñ-°°q°q°q¸$À°}Ô1EÑEˆÝ”+ÝŒI�f˜tœ{Ô2Ñ2Ñ3Ô3°d´kÔ6KÒKÝŒL˜œÔ,°G´MÈ'Ì.ÐYÑYÔYØñ
ô 
ˆð
 ˜˜U˜Ð#Ð#r$   r¿   Úpast_values_paddingÚfreqrŸ   c                 óâ  — |j         d         }|                     |d| j        j        ¦  «        }|                     |d| j        j        ¦  «        }t	          j        t	          j        |dz
  ¦  «        | j        j        k     t	          j        d|j	        |j
        ¬¦  «        |¦  «        }t	          j        t	          j        || j        j        z
  ¦  «        | j        j        k     t	          j        d|j	        |j
        ¬¦  «        |¦  «        }|                      ||¦  «        \  }}|d|z
  z  }t	          j        ||gd¬¦  «        }	|                      |	¦  «        }
t	          j        |d¬¦  «        d         }| j        j        r`|                      |
j         d         ¦  «        }t	          j        |g|
j         d         z  d¬¦  «        }|                      ||¦  «        }|
|z  }
|                      |¦  «        }|
|z  }
|
}|                      ||j         d         |j	        |j
        d¬	¦  «        }| j        d
| j        j        …         D ]} ||f||dœ|¤Ž}Œt1          ||d         |d         ¬¦  «        S )a°  
        past_values (`torch.FloatTensor` of shape `(batch_size, sequence_length)`):
            Past values of the time series that serves as input to the model.
        past_values_padding (`torch.LongTensor` of shape `(batch_size, sequence_length)`):
            The padding indicator of the time series.
        freq (`torch.LongTensor` of shape `(batch_size,)`):
            Frequency indices for the time series data.
        r   rr   r?   r¡   rp   rs   r   T)rž   Úsequence_lengthrb   rq   r‡   N)rž   rC   )Úlast_hidden_stater   r   )rx   ry   r.   rÙ   r    rî   rï   rí   rñ   rb   rq   rð   rô   rz   rÚ   rê   râ   rã   ÚconcatÚ_timesfm_shift_padded_seqrÝ   Ú_prepare_4d_attention_maskrá   rà   r   )r<   r¿   rõ   rö   rŸ   ÚbsizeÚpatched_inputsrç   ÚstatsÚconcat_inputsÚmodel_inputÚpatched_paddingÚpos_embÚf_embr�   rž   Úlayers                    r%   rG   zTimesFmModel.forwardF  s˜  € ð& Ô! !Ô$ˆØ$×)Ò)¨%°°T´[Ô5MÑNÔNˆØ*×/Ò/°°r¸4¼;Ô;SÑTÔTˆåœÝŒI�l SÑ(Ñ)Ô)¨D¬KÔ,AÒAÝŒL˜ NÔ$8ÀÔAVÐWÑWÔWØñ
ô 
ˆõ
 ”{ÝŒI�n t¤{Ô':Ñ:Ñ;Ô;¸d¼kÔ>SÒSÝŒL˜ LÔ$6¸|Ô?RÐSÑSÔSØñ
ô 
ˆð
 !%× 7Ò 7¸ÈÑ UÔ UÑˆ˜ð (¨3°Ñ+=Ñ>ˆÝœ	 >°<Ð"@ÀbÐIÑIÔIˆØ×)Ò)¨-Ñ8Ô8ˆõ  œ) L°bÐ9Ñ9Ô9¸!Ô<ˆØŒ;Ô/ð 	#Ø×'Ò'¨Ô(9¸!Ô(<Ñ=Ô=ˆGÝ”l G 9¨{Ô/@ÀÔ/CÑ#CÈÐKÑKÔKˆGØ×4Ò4°_ÀgÑNÔNˆGØ˜7Ñ"ˆKà—’˜dÑ#Ô#ˆØ�uÑˆð $ˆØ×8Ò8Ø*Ø)Ô/°Ô2ØÔ%Ø Ô'Øð 9ñ 
ô 
ˆð ”[Ð!@ 4¤;Ô#@Ð!@ÔAð 	ð 	ˆEØ!˜EØðà-Ø(ðð ð ð	ð ˆMˆMõ Ø+Ø�a”Ø˜”(ð
ñ 
ô 
ð 	
r$   Trž   Nrø   rb   rq   r‡   c                 ó”  — |j         rt          j        |¦  «        j        nt          j        |¦  «        j        }| �(|                      | j        d         ddd¦  «        } | |z  } |rbt          j        t          j        ||f||¬¦  «        |z  d¬¦  «        }|                     dd||¦  «        }| �t          j	        | |¦  «        } n|} | S )aí  
        Creates 4D attention mask and combines causal and padding masks if needed.

        Args:
            attention_mask: Optional tensor of shape (batch_size, seq_length) containing padding mask
            sequence_length: Length of the sequence
            dtype: Data type of the mask
            device: Device of the mask
            is_causal: Whether to apply causal masking

        Returns:
            4D attention mask of shape (batch_size, 1, seq_length, seq_length)
        Nr   r   rr   rp   )Údiagonal)
Úis_floating_pointr    Úfinforê   Úiinfory   rx   ÚtriuÚonesÚminimum)rž   rø   rb   rq   r‡   Ú	min_valueÚcausal_masks          r%   rü   z'TimesFmModel._prepare_4d_attention_mask‘  sé   € ð, /4Ô.EÐa•E”K Ñ&Ô&Ô*Ð*Í5Ì;ÐW\ÑK]ÔK]ÔKaˆ	ð Ð%à+×0Ò0°Ô1EÀaÔ1HÈ!ÈQÐPRÑSÔSˆNØ+¨iÑ7ˆNð ð 	-Ýœ*Ý”
˜O¨_Ð=ÀUÐSYÐZÑZÔZÐ]fÑfØðñ ô ˆKð &×*Ò*¨1¨a°À/ÑRÔRˆKð Ð)Ý!&¤¨~¸{Ñ!KÔ!K��à!,�àÐr$   Úpaddingc                 óD  — dt           j        fd„}t          j        d|z
  d¬¦  «        } ||¦  «        }t          j        | j        d         ¦  «        }| ||dd…f         }|||dd…f         }d|z
  }t          j        |d¬¦  «        }	t          j        |	d¬	¦  «        }	t          j        ||z  d¬¦  «        }
|
|	z  }||                     d
¦  «        z
  |z  }t          j        |dz  d¬¦  «        |	z  }t          j        |d¬	¦  «        }t          j        |¦  «        }||fS )aÃ  Calculates mean and standard deviation of `inputs` across axis 1.

        It excludes values where `padding` is 1.

        Args:
            inputs: A PyTorch tensor of shape [b, n, p].
            padding: A PyTorch tensor of shape [b, n, p] with values 0 or 1.

        Returns:
            A tuple containing the mean and standard deviation.
            We return the statistics of the first patch with more than three non-padded values.
        Úarrc                 ó.  — t          j        | dk                         t           j        ¦  «        d¬¦  «        }| dk                         t           j        ¦  «                             d¬¦  «        }t          j        |dk    | j        d         dz
  |¦  «        S )Nr   r   rs   r   )r    ÚargmaxÚtoÚint32Úsumrî   rx   )r  ÚindicesÚrow_sums      r%   Ú_get_patch_indexz?TimesFmModel._timesfm_masked_mean_std.<locals>._get_patch_indexÏ  ss   € Ý”l C¨1¢H§=¢=µ´Ñ#=Ô#=À1ÐEÑEÔEˆGØ˜a’x—m’m¥E¤KÑ0Ô0×4Ò4¸Ð4Ñ;Ô;ˆGÝ”;˜w¨!š|¨S¬Y°q¬\¸AÑ-=¸wÑGÔGÐGr$   r   r   rs   r   Nr?   ré   rr   r¡   )r    r!   r  rk   rx   rì   rv   r›   )ræ   r  r  Úpad_sumÚpatch_indicesÚbidxsr  r}   ÚmaskÚnum_valid_elementsÚ
masked_sumÚmasked_meanÚmasked_centered_arrÚ
masked_varÚ
masked_stds                  r%   rë   z%TimesFmModel._timesfm_masked_mean_std¿  sX  € ð 	H¥%¤,ð 	Hð 	Hð 	Hð 	Hõ
 ”)˜A ™K¨QÐ/Ñ/Ô/ˆØ(Ð(¨Ñ1Ô1ˆÝ”˜Vœ\¨!œ_Ñ-Ô-ˆà�U˜M¨1¨1¨1Ð,Ô-ˆØ�e˜]¨A¨A¨AÐ-Ô.ˆð �3‰wˆõ #œY t°Ð3Ñ3Ô3ÐÝ"œ[Ð);ÀÐEÑEÔEÐõ ”Y˜s T™z¨qÐ1Ñ1Ô1ˆ
Ø Ð#5Ñ5ˆð  # [×%:Ò%:¸2Ñ%>Ô%>Ñ>À$ÑFÐÝ”YÐ2°AÑ5¸1Ð=Ñ=Ô=Ð@RÑRˆ
Ý”[ °Ð5Ñ5Ô5ˆ
Ý”Z 
Ñ+Ô+ˆ
à˜JÐ&Ð&r$   r  Úseqc                 óž  — |j         \  }}}| dk    }|                     t          j        ¦  «                             d¬¦  «        }d||                     d¬¦  «         <   t          j        ||j        ¬¦  «                             ddd¦  «         	                    |d|¦  «        }||dd…ddf         z
  |z  }| 
                    d|¦  «        }	|	S )zéShifts rows of seq based on the first 0 in each row of the mask.

        Args:
            mask: mask tensor of shape [B, N]
            seq: seq tensor of shape [B, N, P]

        Returns:
            The shifted sequence.
        r   r   rs   rr   )rq   N)rx   r  r    r  r  Úanyrk   rq   ry   ÚexpandÚgather)
r  r%  Ú
batch_sizeÚnum_seqÚfeature_dimÚnew_maskr  Ú	idx_rangeÚshifted_idxÚshifted_seqs
             r%   rû   z&TimesFmModel._timesfm_shift_padded_seqî  sØ   € ð ,/¬9Ñ(ˆ
�G˜[à%)¨Q¢Yˆð —+’+�eœkÑ*Ô*×1Ò1°aÐ1Ñ8Ô8ˆð )+ˆ�—’ !�Ñ$Ô$Ð$Ñ%õ ”L °´Ð<Ñ<Ô<×AÒAÀ!ÀRÈÑKÔK×RÒRÐS]Ð_aÐcnÑoÔoˆ	ð ! 7¨1¨1¨1¨d°D¨=Ô#9Ñ9¸WÑDˆð —j’j  KÑ0Ô0ˆàÐr$   )T)r   r   r   r   r3   r    r!   r²   rô   r   r   r   Ú
LongTensorr   r   r   rG   Ústaticmethodr±   rb   rq   Úboolrü   rë   rû   rJ   rK   s   @r%   rÑ   rÑ   !  s  ø€ € € € € ð˜}ð ð ð ð ð ð ð&$Ø”lð$Ø27´,ð$à	ˆuŒ|˜U 5¤<°´Ð#=Ô>Ð>Ô	?ð$ð $ð $ð $ð   ØØðF
à”\ðF
ð #Ô-ðF
ð Œlð	F
ð
 Ð+Ô,ðF
ð 
ðF
ð F
ð F
ñ „^ñ „_ñ  ÔðF
ðP ð ð+ð +Øœ tÑ+ð+àð+ð Œ{ð+ð ”ð	+ð
 ð+ð 
Œ˜Ñ	ð+ð +ð +ñ „\ð+ðZ ð,'¨¬ð ,'ÀÄð ,'ÐQVÐW\ÔWcÐejÔeqÐWqÔQrð ,'ð ,'ð ,'ñ „\ð,'ð\ ð¨¬ð ¸5¼<ð ÈEÌLð ð ð ñ „\ðð ð ð ð r$   rÑ   c                   ó  ‡ — e Zd ZdZdefˆ fd„Z	 ddeej                 dee	         dz  de	dz  de
ej        d	f         fd
„Zdej        de
ej        ej        f         dej        fd„Zdej        dej        dej        fd„Zee	 	 	 	 	 	 ddeej                 deej        e	z           dz  de	dz  dej        dz  de	dz  dededee         defd„¦   «         ¦   «         Zedej        de	deej                 fd„¦   «         Zˆ xZS )ÚTimesFmModelForPredictionz/TimesFM model for quantile and mean prediction.r.   c                 óT  •— t          ¦   «                              |¦  «         || _        |j        | _        |j        | _        t          |¦  «        | _        t          |j
        |j        dt          |j        ¦  «        z   z  |j        ¬¦  «        | _        |                      ¦   «          d S )Nr   rÓ   )r2   r3   r.   Úcontext_lengthÚcontext_lenÚhorizon_lengthÚhorizon_lenrÑ   ÚdecoderrM   r4   ÚlenÚ	quantilesr5   Úhorizon_ff_layerrä   rå   s     €r%   r3   z"TimesFmModelForPrediction.__init__  sŸ   ø€ Ý‰Œ×Ò˜Ñ Ô Ð àˆŒØ!Ô0ˆÔØ!Ô0ˆÔå# FÑ+Ô+ˆŒõ !5ØÔ)ØÔ-°µS¸Ô9IÑ5JÔ5JÑ1JÑKØÔ0ð!
ñ !
ô !
ˆÔð 	�ŠÑÔÐÐÐr$   Nræ   rö   r8  r—   .c                 ó   — |€| j         }g g }}|D �]}|j        d         }t          j        || j        z   |j        |j        ¬¦  «        }||k     rt||z
  }	t          j        t          j        |	|j        |j        ¬¦  «        |gd¬¦  «        }t          j        t          j        |	|j        |j        ¬¦  «        |gd¬¦  «        }n$||k    r|| d…         }||| j        z    d…         }| 	                    |¦  «         | 	                    |¦  «         �Œt          j
        |d¬¦  «        t          j
        |d¬¦  «        f}
|�M|
t          j        |dt          |¦  «        …         t          j        ¬¦  «                             dd¦  «        fz   }
|
S )aá  Pad/truncate input time series to `context_len` and build a padding mask.

        Args:
            inputs: A list of 1d Tensors. Each Tensor is the context time series of a single forecast task.
            freq: Optional list of frequencies (returned as a tensor when provided).
            context_len: Optional context length override (defaults to `self.context_len`).

        Returns:
            Tuple of (padded_inputs, padding_mask) and optionally a freq tensor.
        Nr   rp   rs   ra   rr   r   )r8  rx   r    Úzerosr:  rb   rq   rz   r  ÚappendÚstackrñ   r<  r  r§   )r<   ræ   rö   r8  Úinput_tsÚinput_paddingÚtsÚ	input_lenr  Únum_front_padÚresults              r%   Ú_preprocessz%TimesFmModelForPrediction._preprocess%  s¥  € ð ÐØÔ*ˆKà"$ b�-ˆàð 	*ñ 	*ˆBØœ œˆIÝ”k )¨dÔ.>Ñ">ÀbÄhÐWYÔW`ÐaÑaÔaˆGØ˜;Ò&Ð&Ø +¨iÑ 7�Ý”Y¥¤¨MÀÄÐRTÔR[Ð \Ñ \Ô \Ð^`ÐaÐghÐiÑiÔi�Ýœ)¥U¤Z°ÀRÄXÐV]ÔVdÐ%eÑ%eÔ%eÐgnÐ$oÐuvÐwÑwÔw��Ø˜[Ò(Ð(Ø˜˜˜˜Ô&�Ø! K°$Ô2BÑ$BÐ"CÐ"EÐ"EÔF�à�OŠO˜BÑÔÐØ× Ò  Ñ)Ô)Ð)Ñ)å”+˜h¨AÐ.Ñ.Ô.µ´¸MÈqÐ0QÑ0QÔ0QÐRˆØÐØ�uœ|¨D°µ3°v±;´;°Ô,?ÅuÄ{ÐSÑSÔS×[Ò[Ð\^Ð`aÑbÔbÐdÑdˆFØˆr$   Úmodel_outputrÿ   c                 ó  — |                       |¦  «        }|j        \  }}}|                     ||| j        j        t          | j        j        ¦  «        dz   ¦  «        }|\  }}||dd…dddf         z  |dd…dddf         z   S )z*Postprocess output of stacked transformer.r   N)r>  rx   ry   r.   r9  r<  r=  )	r<   rJ  rÿ   Ú	output_tsÚbÚnr»   rò   ró   s	            r%   Ú_postprocess_outputz-TimesFmModelForPrediction._postprocess_outputJ  s’   € ð ×)Ò)¨,Ñ7Ô7ˆ	ð ”/‰ˆˆ1ˆaØ—N’N 1 a¨¬Ô)CÅSÈÌÔI^ÑE_ÔE_ÐbcÑEcÑdÔdˆ	à‰	ˆˆEØ˜5    D¨$°Ð!4Ô5Ñ5¸¸1¸1¸1¸dÀDÈ$Ð;NÔ8OÑOÐOr$   ÚpredictionsÚtargetsc                 ó4  — g }t          | j        j        ¦  «        D ]W\  }}||d|f         z
  }t          j        |dz
  |z  ||z  ¦  «        }|                     |                     ¦   «         ¦  «         ŒXt          j        |¦  «                             ¦   «         S )N.r   )Ú	enumerater.   r=  r    rh   rA  ÚmeanrB  )r<   rP  rQ  ÚlossesÚiÚqÚerrorsr*   s           r%   Ú_quantile_lossz(TimesFmModelForPrediction._quantile_lossY  s‘   € ØˆÝ˜dœkÔ3Ñ4Ô4ð 	'ð 	'‰DˆAˆqØ˜{¨3°¨6Ô2Ñ2ˆFÝ”9˜a !™e vÑ-¨q°6©zÑ:Ô:ˆDØ�MŠM˜$Ÿ)š)™+œ+Ñ&Ô&Ð&Ð&ÝŒ{˜6Ñ"Ô"×'Ò'Ñ)Ô)Ð)r$   Fr¿   Úwindow_sizeÚfuture_valuesÚforecast_context_lenÚreturn_forecast_on_contextÚtruncate_negativerŸ   c                 ó	  ‡#— |€| j         Š#n|Š#|d         j        }	ˆ#fd„|D ¦   «         }
t          j        t          j        d„ |
D ¦   «         ¦  «        ¦  «        }|�ig }g }t          |
¦  «        D ]O\  }}|                     |                      ||¦  «        ¦  «         |�|                     ||         gdz  ¦  «         ŒP|}
|�|}|€-t           	                    d¦  «         dgt          |
¦  «        z  }|                      |
|¦  «        \  }}}|                     |	¦  «        }|                     |	¦  «        }|                     |	¦  «        }|}|j        d         }g }|j        d         |j        d         | j        z   k    r3t          d|j        d         › d	|j        d         › d
| j        › �¦  «        ‚| j        j        }| j        |z   dz
  |z  }t%          |¦  «        D �]9}|dd…d|j        d         …f         }|dd…‰# d…f         }|dd…‰# d…f         } | j        d|||dœ|¤Ž}|                      |j        |j        |j        f¦  «        }|rv|dk    rp|dd…dd…d| j        j        …dd…f         }|                     |                     d¦  «        d|                     d¦  «        ¦  «        }|                     |¦  «         |dd…dd|…df         }|dd…dd|…dd…f         }|                     |¦  «         t          j        ||gd¬¦  «        }�Œ;|r;t          j        |d¬¦  «        dd…d|| j        j        z
  | j        z   …dd…f         }n*t          j        |d¬¦  «        dd…d| j        …dd…f         }|dd…dd…df         }|�6|ddd…df         |ddd…df         z   }|ddd…df         |ddd…df         z   }|rX|dk    }t          j        ||                     d¦  «        |¦  «        }t          j        ||                     d¦  «        |¦  «        }d} |�?t?          j         ||¦  «        }!|  !                    |dd…dd…dd…f         |¦  «        }"|!|"z   } tE          |j        |j#        |j$        ||| ¬¦  «        S )aŸ  
        past_values (`torch.FloatTensor` of shape `(batch_size, sequence_length)`):
            Past values of the time series that serves as input to the model.
        freq (`torch.LongTensor` of shape `(batch_size,)`):
            Frequency indices for the time series data.
        window_size (`int`, *optional*):
            Window size of trend + residual decomposition. If None then we do not do decomposition.
        future_values (`torch.Tensor`, *optional*):
            Optional future time series values to be used for loss computation.
        forecast_context_len (`int`, *optional*):
            Optional max context length.
        return_forecast_on_context (`bool`, *optional*):
            True to return the forecast on the context when available, i.e. after the first input patch.
        truncate_negative (`bool`, *optional*):
            Truncate to only non-negative values if any of the contexts have non-negative values,
            otherwise do nothing.

        Example:

        ```python
        >>> from transformers import TimesFmModelForPrediction

        >>> model = TimesFmModelForPrediction.from_pretrained("google/timesfm-2.0-500m-pytorch")

        >>> forecast_input = [torch.linspace(0, 20, 100).sin(), torch.linspace(0, 20, 200).sin(), torch.linspace(0, 20, 400).sin()]
        >>> frequency_input = torch.tensor([0, 1, 2], dtype=torch.long)

        >>> # Generate
        >>> with torch.no_grad():
        >>>     outputs = model(past_values=forecast_input, freq=frequency_input, return_dict=True)
        >>>     point_forecast_conv = outputs.mean_predictions
        >>>     quantile_forecast_conv = outputs.full_predictions
        ```
        Nr   c                 ó&   •— g | ]}|‰ d …         ‘ŒS rH   r#   )r×   rE  Úfcontext_lens     €r%   rØ   z5TimesFmModelForPrediction.forward.<locals>.<listcomp>—  s$   ø€ Ð;Ð;Ð;¨�"�l�]�^�^Ô$Ð;Ð;Ð;r$   c                 ó6   — g | ]}t          j        |¦  «        ‘ŒS r#   )r    rê   )r×   rE  s     r%   rØ   z5TimesFmModelForPrediction.forward.<locals>.<listcomp>˜  s    € Ð(HÐ(HÐ(H¸2­¬°2©¬Ð(HÐ(HÐ(Hr$   r   z6No frequency provided via `freq`. Default to high (0).r   z=Length of paddings must match length of input + horizon_len: z != z + )r¿   rõ   rö   rr   r   )Úaxis.r¡   )rù   rÁ   r�   r(   r)   r*   r#   )%r8  rq   r    rê   rB  rS  ÚextendÚ_timesfm_moving_averageÚloggerÚinfor<  rI  r  rx   r:  ru   r.   r9  rß   r;  rO  rù   r   r   rÙ   r§   ÚsizerA  Úconcatenaterî   Ú	clamp_minr@   Úmse_lossrY  r'   rÁ   r�   )$r<   r¿   rö   rZ  r[  r\  r]  r^  rŸ   rq   ræ   Úinp_minÚ
new_inputsÚ	new_freqsrV  rE  rC  rD  Úinp_freqÚ	final_outr8  Úfull_outputsÚoutput_patch_lenÚnum_decode_patchesÚ
step_indexÚcurrent_paddingÚdecoder_outputÚfprop_outputsÚnew_full_tsÚnew_tsÚmean_outputsrì   r*   rk  Úquantile_lossra  s$                                      @r%   rG   z!TimesFmModelForPrediction.forwarda  s¨  ø€ ð^  Ð'ØÔ+ˆLˆLà/ˆLà˜Q”Ô&ˆà;Ð;Ð;Ð;¨{Ð;Ñ;Ô;ˆÝ”)�EœKÐ(HÐ(HÀÐ(HÑ(HÔ(HÑIÔIÑJÔJˆàÐ"ØˆJØˆIÝ" 6Ñ*Ô*ð 4ð 4‘��2Ø×!Ò! $×">Ò">¸rÀ;Ñ"OÔ"OÑPÔPÐPØÐ#Ø×$Ò$ d¨1¤g Y°¡]Ñ3Ô3Ð3øØˆFØÐØ �àˆ<Ý�KŠKÐPÑQÔQÐQØ�3�˜V™œÑ$ˆDà,0×,<Ò,<¸VÀTÑ,JÔ,JÑ)ˆ�- Ø—;’;˜vÑ&Ô&ˆØ%×(Ò(¨Ñ0Ô0ˆØ—;’;˜vÑ&Ô&ˆàˆ	Ø”o aÔ(ˆØˆàÔ˜qÔ! Y¤_°QÔ%7¸$Ô:JÑ%JÒJÐJÝðZØ!Ô'¨Ô*ðZð ZØ09´ÀÔ0BðZð ZØGKÔGWðZð Zñô ð ð  œ;Ô5Ðà"Ô.Ð1AÑAÀAÑEÐJZÑZÐÝÐ 2Ñ3Ô3ð 	Hñ 	HˆJØ+¨A¨A¨A¨q°9´?À1Ô3EÐ/EÐ,EÔFˆOØ     \ M N NÐ!2Ô3ˆHØ+¨A¨A¨A°¨}¨~¨~Ð,=Ô>ˆMØ,8¨D¬Lð -Ø$Ø$1Øð-ð -ð ð	-ð -ˆNð !×4Ò4ØÔ0ØÔ# ^Ô%9Ð:ñô ˆMð
 *ð 1¨j¸Aªo¨oØ+¨A¨A¨A¨s°¨sÐ4N°d´kÔ6NÐ4NÐPQÐPQÐPQÐ,QÔR�Ø)×1Ò1°+×2BÒ2BÀ1Ñ2EÔ2EÀrÈ;×K[ÒK[Ð\]ÑK^ÔK^Ñ_Ô_�Ø×#Ò# KÑ0Ô0Ð0à" 1 1 1 bÐ*;Ð+;Ð*;¸QÐ#>Ô?ˆFØ'¨¨¨¨2Ð/@Ð0@Ð/@À!À!À!Ð(CÔDˆKØ×Ò Ñ,Ô,Ð,ÝÔ)¨9°fÐ*=ÀBÐGÑGÔGˆI‰Ià%ð 	_Ý Ô,¨\ÀÐBÑBÔBØ��ÐP�k D¤KÔ$<Ñ<¸tÔ?OÑOÐPÐRSÐRSÐRSÐSôˆLˆLõ !Ô,¨\ÀÐBÑBÔBÀ1À1À1ÀaÈ$ÔJZÐFZÐ\]Ð\]Ð\]ÐC]Ô^ˆLà# A A A q q q¨! GÔ,ˆØÐ"Ø'¨¨¨1¨¨c¨	Ô2°\À!À$ÀQÀ$ÈÀ)Ô5LÑLˆLØ'¨¨¨1¨¨c¨	Ô2°\À!À$ÀQÀ$ÈÀ)Ô5LÑLˆLØð 	Yà˜q’LˆEÝ œ; u¨l×.DÒ.DÀSÑ.IÔ.IÈ<ÑXÔXˆLÝ œ; u¨l×.DÒ.DÀSÑ.IÔ.IÈ<ÑXÔXˆLàˆØÐ$Ý”z ,°Ñ>Ô>ˆHØ ×/Ò/°¸Q¸Q¸QÀÀÀÀ1À2À2¸XÔ0FÈÑVÔVˆMØ˜mÑ+ˆDå)Ø,Ô>Ø%Ô0Ø(Ô6Ø)Ø)Øð
ñ 
ô 
ð 	
r$   r  c                 ó2  — t          j        | |dz
  dfdd¦  «        }t          j        || j        | j        ¬¦  «        |z  }t          j        |                     ddd¦  «        |                     ddd¦  «        ¦  «                             ¦   «         }|| |z
  gS )zCCalculates the moving average using PyTorch's convolution function.r   r   Úconstantrp   rr   )	r@   r}   r    r  rb   rq   Úconv1dry   Úsqueeze)r  rZ  Ú
arr_paddedÚkernelÚsmoothed_arrs        r%   re  z1TimesFmModelForPrediction._timesfm_moving_averageó  sŽ   € õ ”U˜3 ¨q¡°!Ð 4°jÀ!ÑDÔDˆ
å”˜K¨s¬yÀÄÐLÑLÔLÈ{ÑZˆå”x 
§¢°°1°bÑ 9Ô 9¸6¿;º;ÀqÈ!ÈRÑ;PÔ;PÑQÔQ×YÒYÑ[Ô[ˆØ˜c LÑ0Ð1Ð1r$   r‚   )NNNNFF)r   r   r   r   r   r3   r   r    r!   r±   r²   rI  rO  rY  r   r   r3  r   r   r'   rG   r2  Úlistre  rJ   rK   s   @r%   r5  r5    s9  ø€ € € € € Ø9Ð9ð˜}ð ð ð ð ð ð ð( lpð#ð #Ø˜uœ|Ô,ð#Ø4<¸S´MÀDÑ4Hð#Ø^aÐdhÑ^hð#à	ˆuŒ|˜SÐ Ô	!ð#ð #ð #ð #ðJPØ!œLðPØ16°u´|ÀUÄ\Ð7QÔ1RðPà	ŒðPð Pð Pð Pð*¨%¬,ð *ÀÄð *ÐRWÔR^ð *ð *ð *ð *ð Øð 59Ø"&Ø-1Ø+/Ø+0Ø"'ðN
ð N
à˜eœlÔ+ðN
ð �u”| cÑ)Ô*¨TÑ1ðN
ð ˜4‘Zð	N
ð
 ”| dÑ*ðN
ð " D™jðN
ð %)ðN
ð  ðN
ð Ð+Ô,ðN
ð 
$ðN
ð N
ð N
ñ „^ñ ÔðN
ð` ð2 U¤\ð 2Àð 2ÈÈUÌ\ÔHZð 2ð 2ð 2ñ „\ð2ð 2ð 2ð 2ð 2r$   r5  )r5  r½   rÑ   )8r   rf   Úcollections.abcr   r   Údataclassesr   r    Útorch.nnr6   Útorch.nn.functionalÚ
functionalr@   Ú r   rÅ   Úmodeling_flash_attention_utilsr   Úmodeling_outputsr	   Úmodeling_utilsr
   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úllama.modeling_llamar   Ú(phi4_multimodal.modeling_phi4_multimodalr   Úconfiguration_timesfmr   Ú
get_loggerr   rf  r   r'   ÚModuler-   rM   r\   r^   r„   r´   r½   rÑ   r5  Ú__all__r#   r$   r%   ú<module>r—     s­  ðð Ð à €€€Ø .Ð .Ð .Ð .Ð .Ð .Ð .Ð .Ø !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ð Ð Ð à &Ð &Ð &Ð &Ð &Ð &Ø BÐ BÐ BÐ BÐ BÐ BØ /Ð /Ð /Ð /Ð /Ð /Ø FÐ FÐ FÐ FÐ FÐ FÐ FÐ FØ &Ð &Ð &Ð &Ð &Ð &Ø RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RÐ RØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø /Ð /Ð /Ð /Ð /Ð /Ø UÐ UÐ UÐ UÐ UÐ UØ 0Ð 0Ð 0Ð 0Ð 0Ð 0ð 
ˆÔ	˜HÑ	%Ô	%€ð Ø
ð	&ð 	&ð 	&ð 	&ð 	&�Oñ 	&ô 	&ñ „ñ „ð	&ð Ø
ð-ð -ð -ð -ð - ñ -ô -ñ „ñ „ð-ðð ð ð ð �”ñ ô ð ð,!ð !ð !ð !ð !˜2œ9ñ !ô !ð !ð,	ð 	ð 	ð 	ð 	�\ñ 	ô 	ð 	ð+ð +ð +ð +ð + ¤ñ +ô +ð +ð\9)ð 9)ð 9)ð 9)ð 9)�r”yñ 9)ô 9)ð 9)ðxð ð ð ð ˜"œ)ñ ô ð ð@ ðð ð ð ð ˜_ñ ô ñ „ðð> ðjð jð jð jð jÐ)ñ jô jñ „ðjðZm2ð m2ð m2ð m2ð m2Ð 6ñ m2ô m2ð m2ð` RÐ
QÐ
Q€€€r$   