Ë
    ÜÓ^jø€  ã                   ó`  — 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 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$  ejJ                  e&«      Z'ee G d„ de«      «       «       Z(ee G d„ de«      «       «       Z) G d„ dejT                  «      Z+ G d„ dejT                  «      Z, ed«       G d„ dejT                  «      «       Z- G d„ dejT                  «      Z.	 d1dejT                  dej^                  dej^                  d ej^                  d!ej^                  dz  d"e0d#e0e1z  d$ee   fd%„Z2 G d&„ d'ejT                  «      Z3 G d(„ d)ejT                  «      Z4e G d*„ d+e«      «       Z5e G d,„ d-e5«      «       Z6 G d.„ d/e5«      Z7g d0¢Z8y)2é    N)ÚCallableÚSequence)Ú	dataclassé   )Úinitialization)Úuse_kernel_forward_from_hub)ÚFlashAttentionKwargs)ÚBaseModelOutput)ÚALL_ATTENTION_FUNCTIONSÚPreTrainedModel)ÚUnpack)ÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚlogging)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚTimesFmConfigc                   ób   — e Zd ZU dZdZej                  dz  ed<   dZej                  dz  ed<   y)Ú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   © ó    úw/var/www/ramen.bs-engineer-server.com/venv/lib/python3.12/site-packages/transformers/models/timesfm/modeling_timesfm.pyr   r   ,   s/   … ñð  $€Cˆ�‰˜Ñ	Ó#Ø!%€Eˆ5�<‰<˜$ÑÔ%r"   r   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j                  e
z  dz  ed<   y)Ú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%   :   sI   … ñð -1Ð�e—l‘l TÑ)Ó0Ø,0Ð�e—l‘l TÑ)Ó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¬«      | _	        y )Nç�íµ ÷Æ°>)Únormalized_shapeÚeps)
ÚsuperÚ__init__Úhidden_sizeÚintermediate_sizeÚnnÚLinearÚ	gate_projÚ	down_projÚ	LayerNormÚ
layer_norm)Úselfr,   r3   r4   Ú	__class__s       €r#   r2   zTimesFmMLP.__init__N   s]   ø€ Ü‰ÑÔØ×(Ñ(ˆØ"×4Ñ4ÐäŸ™ ;Ð0AÓBˆŒÜŸ™Ð#4°kÓBˆŒÜŸ,™,¸ÈÔNˆ�r"   c                 óÄ   — | j                  |«      }| j                  |«      }t        j                  |«      }| j	                  |«      }|�|d|d d …d d …d f   z
  z  }||z   S )Nç      ð?)r:   r7   ÚFÚrelur8   )r;   ÚxÚpaddingsÚgate_inpÚgateÚoutputss         r#   ÚforwardzTimesFmMLP.forwardW   sc   € Ø—?‘? 1Ó%ˆØ�~‰~˜hÓ'ˆÜ�v‰v�d‹|ˆØ—.‘. Ó&ˆØÐØ  x²²1°d°
Ñ';Ñ!;Ñ<ˆGØ˜‰{Ðr"   ©N©r   r   r   r   r   r2   rF   Ú__classcell__©r<   s   @r#   r+   r+   K   s   ø„ Ùð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                  ||«      | _        y rG   )r1   r2   Ú
input_dimsÚhidden_dimsÚoutput_dimsr5   r6   Úinput_layerÚSiLUÚ
activationÚoutput_layerÚresidual_layer)r;   rN   rO   rP   r<   s       €r#   r2   zTimesFmResidualBlock.__init__d   sk   ø€ Ü‰ÑÔØ$ˆŒØ&ˆÔØ&ˆÔäŸ9™9 Z°Ó=ˆÔÜŸ'™'›)ˆŒÜŸI™I k°;Ó?ˆÔÜ Ÿi™i¨
°KÓ@ˆÕr"   c                 ó”   — | j                  |«      }| j                  |«      }| j                  |«      }| j                  |«      }||z   S rG   )rQ   rS   rT   rU   )r;   rA   ÚhiddenÚoutputÚresiduals        r#   rF   zTimesFmResidualBlock.forwardo   sK   € Ø×!Ñ! !Ó$ˆØ—‘ Ó(ˆØ×"Ñ" 6Ó*ˆØ×&Ñ& qÓ)ˆØ˜Ñ Ð r"   )r   r   r   r   r2   rF   rI   rJ   s   @r#   rL   rL   a   s   ø„ Ù!ô	Aö!r"   rL   ÚRMSNormc                   óh   ‡ — e Zd Zddeddfˆ fd„Zdej                  dej                  fd„Zd„ Zˆ xZ	S )	ÚTimesFmRMSNormr0   ÚreturnNc                 óŠ   •— t         ‰| �  «        t        j                  t	        j
                  |«      «      | _        || _        y)z=
        TimesFmRMSNorm is equivalent to T5LayerNorm
        N)r1   r2   r5   Ú	Parameterr   ÚonesÚweightÚvariance_epsilon)r;   r3   r0   r<   s      €r#   r2   zTimesFmRMSNorm.__init__y   s1   ø€ ô 	‰ÑÔÜ—l‘l¤5§:¡:¨kÓ#:Ó;ˆŒØ #ˆÕr"   Úhidden_statesc                 ó"  — |j                   }|j                  t        j                  «      }|j	                  d«      j                  dd¬«      }|t        j                  || j                  z   «      z  }| j                  |j                  |«      z  S )Né   éÿÿÿÿT)Úkeepdim)	ÚdtypeÚtor   Úfloat32ÚpowÚmeanÚrsqrtrb   ra   )r;   rc   Úinput_dtypeÚvariances       r#   rF   zTimesFmRMSNorm.forward�   sy   € Ø#×)Ñ)ˆØ%×(Ñ(¬¯©Ó7ˆØ ×$Ñ$ QÓ'×,Ñ,¨R¸Ð,Ó>ˆØ%¬¯©°H¸t×?TÑ?TÑ4TÓ(UÑUˆØ�{‰{˜]×-Ñ-¨kÓ:Ñ:Ð:r"   c                 ó^   — t        | j                  j                  «      › d| j                  › �S )Nz, eps=)Útuplera   Úshaperb   )r;   s    r#   Ú
extra_reprzTimesFmRMSNorm.extra_reprˆ   s*   € Ü˜Ÿ™×)Ñ)Ó*Ð+¨6°$×2GÑ2GÐ1HÐIÐIr"   )r.   )
r   r   r   r)   r2   r   r   rF   rs   rI   rJ   s   @r#   r\   r\   w   s7   ø„ ñ$¨ð $¸$õ $ð; U§\¡\ð ;°e·l±ló ;öJr"   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  }| j                  d|t        j                  t        j                  |t        j                  ¬«      | z  «      z  «       y )Nre   r   Úinv_timescales©rh   )r1   r2   Úmin_timescaleÚmax_timescaler3   Úembedding_dimsÚmathÚlogr)   ÚmaxÚregister_bufferr   ÚexpÚarangerj   )r;   r,   ry   rz   Únum_timescalesÚlog_timescale_incrementr<   s         €r#   r2   z#TimesFmPositionalEmbedding.__init__�   sÁ   ø€ Ü‰ÑÔØ×,Ñ,ˆØ×,Ñ,ˆØ1>ÀÐ.ˆÔ˜DÔ.Ø$×0Ñ0ˆÔà×,Ñ,°Ñ1ˆÜ"&§(¡(¬5°Ó+?Ä%ÈÓBVÑ+VÓ"WÔZ]Ð^lÐopÑ^pÐrsÓZtÑ"tÐØ×ÑØØœEŸI™I¤e§l¡l°>ÌÏÉÔ&WÐ[rÐZrÑ&rÓsÑsõ	
r"   c                 óN  — |€|€t        d«      ‚|€Jt        j                  |t        j                  | j                  j
                  ¬«      j                  d«      }n'|j                  dk7  rt        d|j                  › �«      ‚ |j                  g |j                  ¢d‘­Ž | j                  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]
        z.Either position or seq_length must be provided©rh   Údevicer   re   z*position must be 2-dimensional, got shape r   rf   ©Údim)Ú
ValueErrorr   r�   rj   rw   r†   Ú	unsqueezeÚndimrr   ÚviewÚcatÚsinÚcosr?   Úpadr{   )r;   Ú
seq_lengthÚpositionÚscaled_timeÚsignals        r#   rF   z"TimesFmPositionalEmbedding.forward�   sÿ   € ð Ð 
Ð 2ÜÐMÓNÐNàÐä—|‘| J´e·m±mÈD×L_ÑL_×LfÑLfÔg×qÑqÐrsÓt‰HØ�]‰]˜aÒÜÐIÈ(Ï.É.ÐIYÐZÓ[Ð[à#�h—m‘mÐ7 X§^¡^Ð7°QÒ7¸$×:MÑ:M×:RÑ:RÐSTÐVWÐY[Ó:\Ñ\ˆÜ—‘œEŸI™I kÓ2´E·I±I¸kÓ4JÐKÐQRÔSˆô —‘�v  1 a¨×)<Ñ)<¸qÑ)@ÐAÓBˆØˆr"   ©NNrH   rJ   s   @r#   ru   ru   Œ   s   ø„ Ù@ð
˜}õ 
÷r"   ru   ÚmoduleÚquery_statesÚ
key_statesÚvalue_statesÚattention_maskÚscalingÚdropoutÚkwargsc                 óÀ  — t        j                  ||j                  dd«      «      |z  }|�||z   }t        j                  j                  |dt         j                  ¬«      j                  |j                  «      }t        j                  j                  ||| j                  ¬«      }t        j                  ||«      }	|	j                  dd«      j                  «       }	|	|fS )Nre   r   rf   )rˆ   rh   )ÚpÚtrainingr   )r   ÚmatmulÚ	transposer5   Ú
functionalÚsoftmaxrj   ri   rh   rœ   r    Ú
contiguous)
r–   r—   r˜   r™   rš   r›   rœ   r�   Úattn_weightsÚattn_outputs
             r#   Úsimple_eager_attention_forwardr¨   º   s¼   € ô —<‘< ¨j×.BÑ.BÀ1ÀaÓ.HÓIÈGÑS€LØÐ!Ø# nÑ4ˆä—=‘=×(Ñ(¨¸2ÄUÇ]Á]Ð(ÓS×VÑVÐWc×WiÑWiÓj€LÜ—=‘=×(Ñ(¨¸È6Ï?É?Ð(Ó[€LÜ—,‘,˜|¨\Ó:€KØ×'Ñ'¨¨1Ó-×8Ñ8Ó:€Kà˜Ð$Ð$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                  «      | _        y )NT)r1   r2   r,   Ú	is_causalÚattention_dropoutr«   Únum_attention_headsÚ	num_headsr3   Úhead_dimÚq_sizeÚkv_sizer5   r_   r   Úemptyr›   r6   Úq_projÚk_projÚv_projÚo_proj©r;   r,   r«   r<   s      €r#   r2   zTimesFmAttention.__init__Ó   s3  ø€ Ü‰ÑÔØˆŒØˆŒØ!'×!9Ñ!9ˆÔØ"ˆŒà×3Ñ3ˆŒØ!×-Ñ-ˆÔØŸ™ˆŒà—n‘n t§}¡}Ñ4ˆŒØ—~‘~¨¯©Ñ5ˆŒÜ—|‘|¤E§K¡K°·±Ð0@Ó$AÓBˆŒä—i‘i × 0Ñ 0°$·.±.À4Ç=Á=Ñ2PÓQˆŒÜ—i‘i × 0Ñ 0°$·.±.À4Ç=Á=Ñ2PÓQˆŒÜ—i‘i × 0Ñ 0°$·.±.À4Ç=Á=Ñ2PÓQˆŒÜ—i‘i §¡°·±Ñ >À×@PÑ@PÓQˆ�r"   Úqueryr]   c                 óº   — t        j                  | j                  «      j                  dt	        j
                  | j                  «      z  «      }||d d d d d …f   z  S )Ng^$3eG÷?)r?   Úsoftplusr›   Úmulr|   Úsqrtr±   )r;   rº   r   s      r#   Ú_scale_queryzTimesFmAttention._scale_queryç   sJ   € Ü—
‘
˜4Ÿ<™<Ó(×,Ñ,¨[¼4¿9¹9ÀTÇ]Á]Ó;SÑ-SÓTˆØ�u˜T 4¨ªqÐ0Ñ1Ñ1Ð1r"   Nrc   rš   r�   c                 ó¨  — |j                   d d }g |¢d‘| j                  ‘­}| j                  |«      j                  |«      j	                  dd«      }| j                  |«      }| j                  |«      j                  |«      j	                  dd«      }| j                  |«      j                  |«      j	                  dd«      }t        j                  | j                  j                  t        «      }	 |	| ||||f| j                  sdn| j                  ddœ|¤Ž\  }
} |
j                  g |¢d‘­Ž j!                  «       }
| j#                  |
«      }
|
|fS )Nrf   r   re   ç        r>   )rœ   r›   )rr   r±   rµ   rŒ   r¢   r¿   r¶   r·   r   Úget_interfacer,   Ú_attn_implementationr¨   r    r®   Úreshaper¥   r¸   )r;   rc   rš   r�   Úinput_shapeÚhidden_shaper—   r˜   r™   Úattention_interfacer§   r¦   s               r#   rF   zTimesFmAttention.forwardë   sW  € ð $×)Ñ)¨#¨2Ð.ˆØ8˜Ð8 bÐ8¨$¯-©-Ñ8ˆà—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆØ×(Ñ(¨Ó6ˆØ—[‘[ Ó/×4Ñ4°\ÓB×LÑLÈQÐPQÓRˆ
Ø—{‘{ =Ó1×6Ñ6°|ÓD×NÑNÈqÐRSÓTˆä(?×(MÑ(MØ�K‰K×,Ñ,Ô.Ló)
Ðñ %8ØØØØØð	%
ð  $Ÿ}š}‘C°$×2HÑ2HØñ	%
ð ñ	%
Ñ!ˆ�\ð *�k×)Ñ)Ð;¨;Ð;¸Ò;×FÑFÓHˆØ—k‘k +Ó.ˆØ˜LÐ(Ð(r"   rG   )r   r   r   r   r   Úintr2   r   r   r¿   r   r	   rq   rF   rI   rJ   s   @r#   rª   rª   Ð   s‘   ø„ ÙvðR˜}ð R¸õ Rð(2 %§,¡,ð 2°5·<±<ó 2ð /3ñ)à—|‘|ð)ð Ÿ™ tÑ+ð)ð Ð-Ñ.ð	)ð
 
ˆu�|‰|˜UŸ\™\¨DÑ0Ð0Ñ	1÷)r"   rª   c                   ó”   ‡ — 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                  ¬«      | _	        y )N)r«   )r0   )
r1   r2   rª   Ú	self_attnr+   Úmlpr\   r3   Úrms_norm_epsÚinput_layernormr¹   s      €r#   r2   zTimesFmDecoderLayer.__init__  sC   ø€ Ü‰ÑÔä)¨&¸IÔFˆŒÜ˜fÓ%ˆŒÜ-¨f×.@Ñ.@Àf×FYÑFYÔZˆÕr"   rc   rš   rB   r]   c                 óˆ   — |}| j                  |«      }| j                  ||¬«      \  }}||z   }| j                  ||¬«      }|S )N)rc   rš   )rB   )rÏ   rÌ   rÍ   )r;   rc   rš   rB   r�   rY   Ú_s          r#   rF   zTimesFmDecoderLayer.forward  s]   € ð !ˆØ×,Ñ,¨]Ó;ˆØŸ>™>Ø'Ø)ð *ó 
Ñˆ�qð ! =Ñ0ˆð Ÿ™ ¸˜ÓBˆàÐr"   )r   r   r   r   r   rÈ   r2   r   r   rF   rI   rJ   s   @r#   rÊ   rÊ     sW   ø„ Ùð[˜}ð [¸õ [ðà—|‘|ðð Ÿ™ðð —,‘,ð	ð 
�‰÷r"   rÊ   c                   ór   ‡ — 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)rc   Ú
attentionsc           
      ó"  •— t         ‰| �  |«       t        |t        «      r t	        j
                  |j                  «       y 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  «       y y )Nre   r   rx   )r1   Ú_init_weightsÚ
isinstancerª   ÚinitÚones_r›   ru   r{   rz   ry   r|   r}   r)   r~   Úcopy_rw   r   r€   r�   rj   )r;   r–   r‚   rz   ry   rƒ   r<   s         €r#   rÙ   z$TimesFmPreTrainedModel._init_weights9  sÚ   ø€ ä‰Ñ˜fÔ%Ü�fÔ.Ô/ä�J‰J�v—~‘~Õ&Ü˜Ô :Ô;Ø#×2Ñ2°aÑ7ˆNØ+1×+?Ñ+?À×AUÑAU˜=ˆMÜ&*§h¡h¬u°]Ó/CÄeÈMÓFZÑ/ZÓ&[Ô^aØ Ñ" Aó_ñ 'Ð#ô �J‰JØ×%Ñ%ØÜ—)‘)œEŸL™L¨¼u¿}¹}ÔMÐQhÐPhÑhÓ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Ù   rI   rJ   s   @r#   rÓ   rÓ   ,  sR   ø… àÓØ!ÐØ.Ð/ÐØ#€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                  t        |j                  «      D �cg c]  }t        ||«      ‘Œ c}«      | _        | j                  j"                  rt%        |¬«      | _        | j)                  «        y c c}w )Nre   ©rN   rP   rO   )Únum_embeddingsÚembedding_dim)r,   )r1   r2   r,   rL   Úpatch_lengthr3   r4   Úinput_ff_layerr5   Ú	EmbeddingÚ	freq_sizeÚfreq_embÚ
ModuleListÚrangeÚnum_hidden_layersrÊ   ÚlayersÚuse_positional_embeddingru   Úposition_embÚ	post_initr¹   s      €r#   r2   zTimesFmModel.__init__N  sÄ   ø€ Ü‰Ñ˜Ô àˆŒÜ2Ø˜6×.Ñ.Ñ.Ø×*Ñ*Ø×0Ñ0ô
ˆÔô
 Ÿ™°F×4DÑ4DÐTZ×TfÑTfÔgˆŒÜ—m‘mÜEJÈ6×KcÑKcÓEdÖe¸	Ô  ¨Õ3Òeó
ˆŒð �;‰;×/Ò/Ü :À&Ô IˆDÔð 	�‰Õùò fs   Â"C9ÚinputsÚpatched_padsr]   c                 óê  — | j                  ||«      \  }}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].©ÚminNr…   )Ú_timesfm_masked_mean_stdr   Úclampr,   Ú	toleranceÚwhereÚabsÚpad_valÚtensorrh   r†   )r;   r÷   rø   ÚmuÚsigmarE   s         r#   Ú_forward_transformzTimesFmModel._forward_transforma  sÉ   € ð ×1Ñ1°&¸,ÓG‰	ˆˆEÜ—‘˜E t§{¡{×'<Ñ'<Ô=ˆð ˜Bšq $¨˜}Ñ-Ñ-°²q¸$À°}Ñ1EÑEˆÜ—+‘+Ü�I‰I�f˜tŸ{™{×2Ñ2Ñ2Ó3°d·k±k×6KÑ6KÑKÜ�L‰L˜Ÿ™×,Ñ,°G·M±MÈ'Ï.É.ÔYØó
ˆð
 ˜˜U˜Ð#Ð#r"   rÕ   Úpast_values_paddingÚfreqr�   c                 ór  — |j                   d   }|j                  |d| j                  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                  ¬«      |«      }| j                  ||«      \  }}|d|z
  z  }t	        j                  ||gd¬«      }	| j                  |	«      }
t	        j                  |d¬«      d   }| j                  j                   r]| j#                  |
j                   d   «      }t	        j$                  |g|
j                   d   z  d¬«      }| j'                  ||«      }|
|z  }
| j)                  |«      }|
|z  }
|
}| j+                  ||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   rf   r>   rÁ   r…   r‡   r   T)rš   Úsequence_lengthrh   r†   r­   N)rš   rB   )Úlast_hidden_stater   r   )rr   rŒ   r,   rë   r   rÿ   r   rþ   r  rh   r†   r  r  r�   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_embrc   rš   Úlayers                    r#   rF   zTimesFmModel.forwardq  s…  € ð& ×!Ñ! !Ñ$ˆØ$×)Ñ)¨%°°T·[±[×5MÑ5MÓNˆØ*×/Ñ/°°r¸4¿;¹;×;SÑ;SÓTˆäŸ™Ü�I‰I�l SÑ(Ó)¨D¯K©K×,AÑ,AÑAÜ�L‰L˜ N×$8Ñ$8À×AVÑAVÔWØó
ˆô
 —{‘{Ü�I‰I�n t§{¡{×':Ñ':Ñ:Ó;¸d¿k¹k×>SÑ>SÑSÜ�L‰L˜ L×$6Ñ$6¸|×?RÑ?RÔSØó
ˆð
 !%× 7Ñ 7¸ÈÓ UÑˆ˜ð (¨3°Ñ+=Ñ>ˆÜŸ	™	 >°<Ð"@ÀbÔIˆØ×)Ñ)¨-Ó8ˆô  Ÿ)™) L°bÔ9¸!Ñ<ˆØ�;‰;×/Ò/Ø×'Ñ'¨×(9Ñ(9¸!Ñ(<Ó=ˆGÜ—l‘l G 9¨{×/@Ñ/@ÀÑ/CÑ#CÈÔKˆGØ×4Ñ4°_ÀgÓNˆGØ˜7Ñ"ˆKà—‘˜dÓ#ˆØ�uÑˆð $ˆØ×8Ñ8Ø*Ø)×/Ñ/°Ñ2Ø×%Ñ%Ø ×'Ñ'Øð 9ó 
ˆð —[‘[Ð!@ 4§;¡;×#@Ñ#@ÐAò 	ˆEÙ!Øðà-Ø(ñð ñ	‰Mð	ô Ø+Ø�a‘Ø˜‘(ô
ð 	
r"   rš   Nr	  rh   r†   r­   c                 ó²  — |j                   rt        j                  |«      j                  nt        j                  |«      j                  }| �&| j                  | j                  d   ddd«      } | |z  } |rbt        j                  t        j                  ||f||¬«      |z  d¬«      }|j                  dd||«      }| �t        j                  | |«      } | S |} | 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)
        r   r   rf   r…   )Údiagonal)
Úis_floating_pointr   Úfinforû   ÚiinforŒ   rr   Útriur`   Úminimum)rš   r	  rh   r†   r­   Ú	min_valueÚcausal_masks          r#   r  z'TimesFmModel._prepare_4d_attention_mask¼  sÝ   € ð, /4×.EÒ.E”E—K‘K Ó&×*Ò*Ì5Ï;É;ÐW\ÓK]×KaÑKaˆ	ð Ð%à+×0Ñ0°×1EÑ1EÀaÑ1HÈ!ÈQÐPRÓSˆNØ+¨iÑ7ˆNñ ÜŸ*™*Ü—
‘
˜O¨_Ð=ÀUÐSYÔZÐ]fÑfØôˆKð &×*Ñ*¨1¨a°À/ÓRˆKð Ð)Ü!&§¡¨~¸{Ó!K�ð Ðð "-�àÐr"   Úpaddingc                 óF  — 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  }||j                  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\  j                  t         j                  «      d¬«      }| dk\  j                  t         j                  «      j	                  d¬«      }t        j
                  |dk(  | j                  d   dz
  |«      S )Nr   r   r‡   r   )r   Úargmaxri   Úint32Úsumrÿ   rr   )r"  ÚindicesÚrow_sums      r#   Ú_get_patch_indexz?TimesFmModel._timesfm_masked_mean_std.<locals>._get_patch_indexú  sk   € Ü—l‘l C¨1¡H§=¡=´·±Ó#=À1ÔEˆGØ˜a‘x—m‘m¤E§K¡KÓ0×4Ñ4¸Ð4Ó;ˆGÜ—;‘;˜w¨!™|¨S¯Y©Y°q©\¸AÑ-=¸wÓGÐGr"   r   re   r‡   r   Nr>   rú   rf   rÁ   )r   r   r&  r�   rr   rý   rŠ   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ê  s  € ð 	H¤%§,¡,ó 	Hô
 —)‘)˜A ™K¨QÔ/ˆÙ(¨Ó1ˆÜ—‘˜VŸ\™\¨!™_Ó-ˆà�U˜Mª1Ð,Ñ-ˆØ�e˜]ªAÐ-Ñ.ˆð �3‰wˆô #ŸY™Y t°Ô3ÐÜ"Ÿ[™[Ð);ÀÔEÐô —Y‘Y˜s T™z¨qÔ1ˆ
Ø Ð#5Ñ5ˆð  # [×%:Ñ%:¸2Ó%>Ñ>À$ÑFÐÜ—Y‘YÐ2°AÑ5¸1Ô=Ð@RÑRˆ
Ü—[‘[ °Ô5ˆ
Ü—Z‘Z 
Ó+ˆ
à˜JÐ&Ð&r"   r-  Úseqc                 ó„  — |j                   \  }}}| dk(  }|j                  t        j                  «      j	                  d¬«      }d||j                  d¬«       <   t        j                  ||j                  ¬«      j                  ddd«      j                  |d|«      }||dd…ddf   z
  |z  }|j                  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   r‡   rf   )r†   N)rr   ri   r   r%  r$  Úanyr�   r†   rŒ   ÚexpandÚgather)
r-  r4  Ú
batch_sizeÚnum_seqÚfeature_dimÚnew_maskr'  Ú	idx_rangeÚshifted_idxÚshifted_seqs
             r#   r  z&TimesFmModel._timesfm_shift_padded_seq  sÄ   € ð ,/¯9©9Ñ(ˆ
�G˜[à%)¨Q¡Yˆð —+‘+œeŸk™kÓ*×1Ñ1°aÐ1Ó8ˆð )+ˆ�—‘ !�Ó$Ð$Ñ%ô —L‘L °·±Ô<×AÑAÀ!ÀRÈÓK×RÑRÐS]Ð_aÐcnÓoˆ	ð ! 7ª1¨d°D¨=Ñ#9Ñ9¸WÑDˆð —j‘j  KÓ0ˆàÐr"   )T)r   r   r   r   r2   r   r   rq   r  r   r   r   Ú
LongTensorr   r   r   rF   ÚstaticmethodrÈ   rh   r†   Úboolr  rü   r  rI   rJ   s   @r#   ræ   ræ   L  s°  ø„ ð˜}õ ð&$Ø—l‘lð$Ø27·,±,ð$à	ˆu�|‰|˜U 5§<¡<°·±Ð#=Ñ>Ð>Ñ	?ó$ð   ØØðF
à—\‘\ðF
ð #×-Ñ-ðF
ð �l‰lð	F
ð
 Ð+Ñ,ðF
ð 
òF
ó ó ó  ðF
ðP ð ñ+ØŸ™ tÑ+ð+àð+ð �{‰{ð+ð —‘ð	+ð
 ð+ð 
�‰˜Ñ	ò+ó ð+ðZ ð,'¨¯©ð ,'ÀÇÁð ,'ÐQVÐW\×WcÑWcÐej×eqÑeqÐWqÑQrò ,'ó ð,'ð\ ð¨¯©ð ¸5¿<¹<ð ÈEÏLÉLò ó ôr"   ræ   c                   óR  ‡ — 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                 óJ  •— t         ‰| �  |«       || _        |j                  | _        |j
                  | _        t        |«      | _        t        |j                  |j
                  dt        |j                  «      z   z  |j                  ¬«      | _        | j                  «        y )Nr   rè   )r1   r2   r,   Úcontext_lengthÚcontext_lenÚhorizon_lengthÚhorizon_lenræ   ÚdecoderrL   r3   ÚlenÚ	quantilesr4   Úhorizon_ff_layerrö   )r;   r,   r<   s     €r#   r2   z"TimesFmModelForPrediction.__init__=  sŠ   ø€ Ü‰Ñ˜Ô àˆŒØ!×0Ñ0ˆÔØ!×0Ñ0ˆÔä# FÓ+ˆŒô !5Ø×)Ñ)Ø×-Ñ-°´S¸×9IÑ9IÓ5JÑ1JÑKØ×0Ñ0ô!
ˆÔð 	�‰Õr"   Nr÷   r  rG  r]   .c                 óX  — |€| j                   }g g }}|D �]  }|j                  d   }t        j                  || j                  z   |j
                  |j                  ¬«      }||k  rŒ||z
  }	t        j                  t        j                  |	|j
                  |j                  ¬«      |gd¬«      }t        j                  t        j                  |	|j
                  |j                  ¬«      |gd¬«      }n||kD  r|| d }||| j                  z    d }|j                  |«       |j                  |«       �Œ t        j                  |d¬«      t        j                  |d¬«      f}
|�E|
t        j                  |dt        |«       t        j                  ¬«      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   r…   r‡   rx   rf   r   )rG  rr   r   ÚzerosrI  rh   r†   r�   r`   ÚappendÚstackr  rK  r%  rÄ   )r;   r÷   r  rG  Úinput_tsÚinput_paddingÚtsÚ	input_lenr   Únum_front_padÚresults              r#   Ú_preprocessz%TimesFmModelForPrediction._preprocessP  s€  € ð ÐØ×*Ñ*ˆKà"$ b�-ˆàó 	*ˆBØŸ™ ™ˆIÜ—k‘k )¨d×.>Ñ.>Ñ">ÀbÇhÁhÐWY×W`ÑW`ÔaˆGØ˜;Ò&Ø +¨iÑ 7�Ü—Y‘Y¤§¡¨MÀÇÁÐRT×R[ÑR[Ô \Ð^`ÐaÐghÔi�ÜŸ)™)¤U§Z¡Z°ÀRÇXÁXÐV]×VdÑVdÔ%eÐgnÐ$oÐuvÔw‘Ø˜[Ò(Ø˜˜˜Ð&�Ø! K°$×2BÑ2BÑ$BÐ"CÐ"EÐF�à�O‰O˜BÔØ× Ñ  Ö)ð	*ô —+‘+˜h¨AÔ.´·±¸MÈqÔ0QÐRˆØÐØœuŸ|™|¨D°´3°v³;Ð,?ÄuÇ{Á{ÔS×[Ñ[Ð\^Ð`aÓbÐdÑdˆFØˆr"   Úmodel_outputr  c                 ó  — | j                  |«      }|j                  \  }}}|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)rM  rr   rŒ   r,   rH  rK  rL  )	r;   rY  r  Ú	output_tsÚbÚnrÑ   r  r  s	            r#   Ú_postprocess_outputz-TimesFmModelForPrediction._postprocess_outputu  s�   € ð ×)Ñ)¨,Ó7ˆ	ð —/‘/‰ˆˆ1ˆaØ—N‘N 1 a¨¯©×)CÑ)CÄSÈÏÉ×I^ÑI^ÓE_ÐbcÑEcÓdˆ	à‰	ˆˆEØ˜5¢ D¨$°Ð!4Ñ5Ñ5¸º1¸dÀDÈ$Ð;NÑ8OÑOÐOr"   ÚpredictionsÚtargetsc                 ó*  — g }t        | j                  j                  «      D ]M  \  }}||d|f   z
  }t        j                  |dz
  |z  ||z  «      }|j                  |j                  «       «       ŒO t        j                  |«      j                  «       S )N.r   )Ú	enumerater,   rL  r   r~   rP  rl   rQ  )r;   r_  r`  ÚlossesÚiÚqÚerrorsr(   s           r#   Ú_quantile_lossz(TimesFmModelForPrediction._quantile_loss„  s…   € ØˆÜ˜dŸk™k×3Ñ3Ó4ò 	'‰DˆAˆqØ˜{¨3°¨6Ñ2Ñ2ˆFÜ—9‘9˜a !™e vÑ-¨q°6©zÓ:ˆDØ�M‰M˜$Ÿ)™)›+Õ&ð	'ô �{‰{˜6Ó"×'Ñ'Ó)Ð)r"   rÕ   Úwindow_sizeÚfuture_valuesÚforecast_context_lenÚreturn_forecast_on_contextÚtruncate_negativer�   c           
      ó>	  — |€| j                   }	n|}	|d   j                  }
|D �cg c]  }||	 d ‘Œ
 }}t        j                  t        j                  |D �cg c]  }t        j                  |«      ‘Œ c}«      «      }|�Yg }g }t        |«      D ]A  \  }}|j                  | j                  ||«      «       |€Œ*|j                  ||   gdz  «       ŒC |}|�|}|€$t        j                  d«       dgt        |«      z  }| j                  ||«      \  }}}|j                  |
«      }|j                  |
«      }|j                  |
«      }|}|j                  d   }g }|j                  d   |j                  d   | j                  z   k7  r8t        d|j                  d   › d|j                  d   › d| j                  › �«      ‚| j                   j"                  }| j                  |z   dz
  |z  }t%        |«      D �]/  }|dd…d|j                  d   …f   }|dd…|	 d…f   }|dd…|	 d…f   } | j&                  d|||d	œ|¤Ž}| j)                  |j*                  |j,                  |j.                  f«      }|rl|dk(  rg|dd…dd
…d| j                   j0                  …dd…f   }|j3                  |j5                  d«      d
|j5                  d«      «      }|j7                  |«       |dd…d
d|…df   }|dd…d
d|…dd…f   }|j7                  |«       t        j8                  ||gd
¬«      }�Œ2 |rHt        j8                  |d¬«      dd…d|| j                   j0                  z
  | j                  z   …dd…f   }n-t        j8                  |d¬«      dd…d| j                  …dd…f   }|dd…dd…df   }|�*|ddd…df   |ddd…df   z   }|ddd…df   |ddd…df   z   }|rQ|dk\  } t        j:                  | |j=                  d«      |«      }t        j:                  | |j=                  d«      |«      }d}!|�9t?        j@                  ||«      }"| jC                  |dd…dd…dd…f   |«      }#|"|#z   }!tE        j*                  |jF                  |jH                  |||!¬«      S c c}w c c}w )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   re   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  rf   r   )Úaxis.rÁ   )r
  r×   rc   r&   r'   r(   r!   )%rG  r†   r   rû   rQ  rb  ÚextendÚ_timesfm_moving_averageÚloggerÚinforK  rX  ri   rr   rI  r‰   r,   rH  rñ   rJ  r^  r
  r   r   rë   rÄ   ÚsizerP  Úconcatenaterÿ   Ú	clamp_minr?   Úmse_lossrg  r%   r×   rc   )$r;   rÕ   r  rh  ri  rj  rk  rl  r�   Úfcontext_lenr†   rT  r÷   Úinp_minÚ
new_inputsÚ	new_freqsrd  rR  rS  Úinp_freqÚ	final_outrG  Úfull_outputsÚoutput_patch_lenÚnum_decode_patchesÚ
step_indexÚcurrent_paddingÚdecoder_outputÚfprop_outputsÚnew_full_tsÚnew_tsÚmean_outputsrý   r(   rv  Úquantile_losss$                                       r#   rF   z!TimesFmModelForPrediction.forwardŒ  s  € ð^  Ð'Ø×+Ñ+‰Là/ˆLà˜Q‘×&Ñ&ˆà/:Ö;¨�"�l�]�^Ò$Ð;ˆÐ;Ü—)‘)œEŸK™KÀÖ(H¸2¬¯©°2­Ò(HÓIÓJˆàÐ"ØˆJØˆIÜ" 6Ó*ò 4‘��2Ø×!Ñ! $×">Ñ">¸rÀ;Ó"OÔPØÑ#Ø×$Ñ$ d¨1¡g Y°¡]Õ3ð4ð  ˆFØÐØ �àˆ<Ü�K‰KÐPÔQØ�3œ˜V›Ñ$ˆDà,0×,<Ñ,<¸VÀTÓ,JÑ)ˆ�- Ø—;‘;˜vÓ&ˆØ%×(Ñ(¨Ó0ˆØ—;‘;˜vÓ&ˆàˆ	Ø—o‘o aÑ(ˆØˆà×Ñ˜qÑ! Y§_¡_°QÑ%7¸$×:JÑ:JÑ%JÒJÜðØ!×'Ñ'¨Ñ*Ð+¨4°	·±ÀÑ0BÐ/CÀ3Àt×GWÑGWÐFXðZóð ð  Ÿ;™;×5Ñ5Ðà"×.Ñ.Ð1AÑAÀAÑEÐJZÑZÐÜÐ 2Ó3ó 	HˆJØ+ªA¨q°9·?±?À1Ñ3EÐ/EÐ,EÑFˆOØ ¢ \ M¡NÐ!2Ñ3ˆHØ+ªA°¨}©~Ð,=Ñ>ˆMØ,8¨D¯L©Lð -Ø$Ø$1Øñ-ð ñ	-ˆNð !×4Ñ4Ø×0Ñ0Ø×#Ñ# ^×%9Ñ%9Ð:óˆMñ
 *¨j¸AªoØ+ªA¨s°¨sÐ4N°d·k±k×6NÑ6NÐ4NÒPQÐ,QÑR�Ø)×1Ñ1°+×2BÑ2BÀ1Ó2EÀrÈ;×K[ÑK[Ð\]ÓK^Ó_�Ø×#Ñ# KÔ0à"¢1 bÐ*;Ð+;Ð*;¸QÐ#>Ñ?ˆFØ'ª¨2Ð/@Ð0@Ð/@Â!Ð(CÑDˆKØ×Ñ Ô,Ü×)Ñ)¨9°fÐ*=ÀBÔGŠIð/	Hñ2 &Ü ×,Ñ,¨\ÀÔBÚÐP�k D§K¡K×$<Ñ$<Ñ<¸t×?OÑ?OÑOÐPÒRSÐSñ‰Lô !×,Ñ,¨\ÀÔBÂ1ÀaÈ$×JZÑJZÐFZÒ\]ÐC]Ñ^ˆLà#¢A¢q¨! GÑ,ˆØÐ"Ø'¨¨¨1¨¨c¨	Ñ2°\À!À$ÀQÀ$ÈÀ)Ñ5LÑLˆLØ'¨¨¨1¨¨c¨	Ñ2°\À!À$ÀQÀ$ÈÀ)Ñ5LÑLˆLÙà˜q‘LˆEÜ Ÿ;™; u¨l×.DÑ.DÀSÓ.IÈ<ÓXˆLÜ Ÿ;™; u¨l×.DÑ.DÀSÓ.IÈ<ÓXˆLàˆØÐ$Ü—z‘z ,°Ó>ˆHØ ×/Ñ/°ºQÂÀ1Á2¸XÑ0FÈÓVˆMØ˜mÑ+ˆDä)Ø,×>Ñ>Ø%×0Ñ0Ø(×6Ñ6Ø)Ø)Øô
ð 	
ùòg <ùÚ(Hs   ¥RÁRr"  c                 ó4  — t        j                  | |dz
  dfdd«      }t        j                  || j                  | j
                  ¬«      |z  }t        j                  |j                  ddd«      |j                  ddd«      «      j                  «       }|| |z
  gS )zCCalculates the moving average using PyTorch's convolution function.r   r   Úconstantr…   rf   )	r?   r�   r   r`   rh   r†   Úconv1drŒ   Úsqueeze)r"  rh  Ú
arr_paddedÚkernelÚsmoothed_arrs        r#   rp  z1TimesFmModelForPrediction._timesfm_moving_average  sƒ   € ô —U‘U˜3 ¨q¡°!Ð 4°jÀ!ÓDˆ
ä—‘˜K¨s¯y©yÀÇÁÔLÈ{ÑZˆä—x‘x 
§¡°°1°bÓ 9¸6¿;¹;ÀqÈ!ÈRÓ;PÓQ×YÑYÓ[ˆØ˜c LÑ0Ð1Ð1r"   r•   )NNNNFF)r   r   r   r   r   r2   r   r   r   rÈ   rq   rX  r^  rg  r   r   rB  r   r   r%   rF   rA  Úlistrp  rI   rJ   s   @r#   rD  rD  :  sÆ  ø„ Ù9ð˜}õ ð( lpñ#Ø˜uŸ|™|Ñ,ð#Ø4<¸S±MÀDÑ4Hð#Ø^aÐdhÑ^hð#à	ˆu�|‰|˜SÐ Ñ	!ó#ðJPØ!ŸL™LðPØ16°u·|±|ÀUÇ\Á\Ð7QÑ1RðPà	�‰óPð*¨%¯,©,ð *ÀÇÁð *ÐRW×R^ÑR^ó *ð Øð 59Ø"&Ø-1Ø+/Ø+0Ø"'ñN
à˜eŸl™lÑ+ðN
ð �u—|‘| cÑ)Ñ*¨TÑ1ðN
ð ˜4‘Zð	N
ð
 —|‘| dÑ*ðN
ð " D™jðN
ð %)ðN
ð  ðN
ð Ð+Ñ,ðN
ð 
$òN
ó ó ðN
ð` ð2 U§\¡\ð 2Àð 2ÈÈUÏ\É\ÑHZò 2ó ô2r"   rD  )rD  rÓ   ræ   )rÁ   )9r|   Úcollections.abcr   r   Údataclassesr   r   Útorch.nnr5   Útorch.nn.functionalr£   r?   Ú r   rÛ   Úintegrationsr   Úmodeling_flash_attention_utilsr	   Úmodeling_outputsr
   Úmodeling_utilsr   r   Úprocessing_utilsr   Úutilsr   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_timesfmr   Ú
get_loggerr   rq  r   r%   ÚModuler+   rL   r\   ru   r   r)   rÈ   r¨   rª   rÊ   rÓ   ræ   rD  Ú__all__r!   r"   r#   ú<module>r¡     sÝ  ðó* ß .Ý !ã Ý ß Ð å &Ý 7Ý BÝ /ß FÝ &ß RÓ RÝ 7Ý 5Ý 0ð 
ˆ×	Ñ	˜HÓ	%€ð Ø
ô	&�Oó 	&ó ó ð	&ð Ø
ô- ó -ó ó ð-ô�—‘ô ô,!˜2Ÿ9™9ô !ñ, ˜YÓ'ôJ�R—Y‘Yó Jó (ðJô(+ §¡ô +ðj ñ%Ø�I‰Ið%à—,‘,ð%ð —‘ð%ð —,‘,ð	%ð
 —L‘L 4Ñ'ð%ð ð%ð �S‰[ð%ð Ð'Ñ(ó%ô,9)�r—y‘yô 9)ôx˜"Ÿ)™)ô ð@ ô˜_ó ó ðð> ôjÐ)ó jó ðjôZm2Ð 6ô m2ò` R�r"   