§
    ‚ŠtjÅü  ã            )       ó”  — d Z ddlmZ ddl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 dd
lmZ ddlmZ ddlmZmZmZmZmZ ddlmZ ddlmZ ddlm Z   e¦   «         r#ddl!m"Z# ddl!m$Z$m%Z%m&Z& dZ' G d„ dee$¦  «        Z(�n-ddl)m*Z* ddl+m,Z, ddl-m.Z. ddlm/Z/ e0ej1        ej1        ej1        f         Z2e3e4e2f         Z%dZ'dedej1        de5ej1        z  dz  dej1        fd„Z&	 	 	 	 	 	 	 	 	 dfd ej1        d!ej1        d"ej1        d#ej1        d$ej1        dz  d%ej1        dz  d&ej1        dz  d'ej1        dz  d(ej1        dz  d)ej1        dz  d*e5dz  d+e4d,e4de0ej1        ej1        ej1        f         fd-„Z6	 	 	 dgd/ej1        d ej1        d!ej1        d$ej1        d%ej1        d&ej1        d#ej1        d"ej1        d*e5d+e4d,e4d0e5de0ej1        ej1        ej1        f         fd1„Z7	 	 	 	 	 	 	 	 dhd2ej1        d3ej1        d4ej1        d5ej1        d6ej1        d7ej1        dz  d8ej1        dz  d9ej1        dz  d*e5dz  d:e8d;e8d+e4d0e5de0ej1        ej1        ej1        e0ej1        ej1        ej1        f         dz  e0ej1        ej1        ej1        f         dz  f         fd<„Z9	 	 	 	 	 	 did2ej1        d3ej1        d4ej1        d5ej1        d6ej1        d=ej1        dz  d>ej1        dz  d?ej1        dz  d:e8d0e5d+e4dej1        e0ej1        e0ej1        ej1        ej1        f         f         z  fd@„Z:d.ej;        fd2ej1        d3ej1        d4ej1        d5ej1        d6ej1        d7ej1        d8ej1        d9ej1        d0e5dAej<        de0ej1        e0ej1        ej1        ej1        f         f         fdB„Z=ddddd.ej;        fd2ej1        d3ej1        d4ej1        d5ej1        d6ej1        d=ej1        dz  d>ej1        dz  d?ej1        dz  d:e8d0e5dAej<        de0ej1        ej1        ej1        e0ej1        ej1        ej1        f         dz  e0ej1        ej1        ej1        f         dz  f         fdC„Z>ddddd.ej?        dfdDe*d2ej1        d3ej1        d4ej1        d6ej1        d5ej1        d=ej1        dz  d>ej1        dz  d?ej1        dz  d:e8d0e5dEej<        d+e4dej1        e0ej1        e0ej1        ej1        ej1        f         f         z  fdF„Z@ddddd.ej?        ddfdDe*dGe*dHe*d2ej1        d3ej1        d4ej1        d6ej1        d5ej1        d=ej1        dz  d>ej1        dz  d?ej1        dz  d:e8d0e5dEej<        d+e4dIe8dej1        e0ej1        e0ej1        ej1        ej1        f         f         z  f"dJ„ZA G dK„ dLejB        ¦  «        ZC G dM„ dNejB        ¦  «        Z# G dO„ dPejB        ¦  «        ZD G dQ„ dRejB        ¦  «        ZE G dS„ dTejB        ¦  «        ZF G dU„ de¦  «        Z(dV„ ZGdW„ ZH G dX„ dYe¦  «        ZI G dZ„ d[¦  «        ZJee G d\„ d]e¦  «        ¦   «         ¦   «         ZKe G d^„ d_eI¦  «        ¦   «         ZLee G d`„ dae¦  «        ¦   «         ¦   «         ZMe G db„ dceIe¦  «        ¦   «         ZNg dd¢ZOdS )jzPyTorch xLSTM Model.é    )Ú	dataclassN)Únn)ÚCrossEntropyLossé   )Úinitialization)ÚGenerationMixin)ÚGradientCheckpointingLayer)ÚPreTrainedModel)ÚUnpack)ÚModelOutputÚTransformersKwargsÚauto_docstringÚcan_return_tupleÚis_xlstm_available)Úmerge_with_config_defaults)Úcapture_outputsé   )ÚxLSTMConfig)ÚRMSNorm)Ú
mLSTMBlockÚmLSTMStateTypeÚsoft_capTc                   ó   — e Zd ZdS )Ú
xLSTMBlockN)Ú__name__Ú
__module__Ú__qualname__© ó    úf/var/www/html/CA-Chatbot/venv/lib/python3.11/site-packages/transformers/models/xlstm/modeling_xlstm.pyr   r   (   s   € € € € € Øˆr   r   )ÚCallable)Úpartial)ÚLiteral)Úround_up_to_next_multiple_ofFÚvaluesÚ	cap_valueÚreturnc                 ó>   — |€| S |t          j        | |z  ¦  «        z  S )a  
        Soft caps a tensor to a value.

        Performs a tanh operation on the logits and scales the result to the cap value. Common technique in attention
        and output language heads to prevent large logits from dominating the softmax. See for example Gemma2:
        https://huggingface.co/papers/2408.00118

        Args:
            values: The tensor to cap.
            cap_value: The value to cap the values to. If None, no cap is applied.

        Returns:
            The capped values.
        )ÚtorchÚtanh)r%   r&   s     r    r   r   7   s)   € ð ÐØˆMØ�5œ: f¨yÑ&8Ñ9Ô9Ñ9Ð9r   é@   ÚmatKÚmatVÚvecBÚvecIÚmatC_statesÚvecN_statesÚscaMinter_statesÚmatC_initialÚvecN_initialÚscaMinter_initialÚqk_scaleÚ
chunk_sizeÚ
num_chunksc                 óä  — g | j         ¢|j         d         ‘R \  }}}}}|}| j        | j        }}|
€|dz  }
|€!t          j        |||dz   |z  |f||¬¦  «        }|€ t          j        |||dz   |z  f||¬¦  «        }|€t          j        |||dz   f||¬¦  «        }|€t          j        ||||f||¬¦  «        n|}|€t          j        |||f||¬¦  «        n|}|	€t          j        ||df||¬¦  «        n|	}|d         |z
  |z   }|d         }|                     d¦  «        j        }|                     d¦  «        }t          d|¦  «        D �]u}||d d …d d …||z  |dz   |z  …d d …f<   ||d d …d d …||z  |dz   |z  …f<   ||d d …d d …|f<   |d d …d d …|f         }|d d …d d …|f         }t          j        ||z   |¦  «        }| d d …d d …||z  |dz   |z  …d d …f         }|d d …d d …||z  |dz   |z  …d d …f         } |d d …d d …|d d …f         }!t          j	        |!|d         z
  ¦  «        d d …d d …d d …d f         }"||"z  }#t          j	        ||z   |z
  ¦  «        d d …d d …d f         }$|$d         |z  |# 
                    d	d¦  «        | z  z   }%|$|z  |# 
                    d	d¦  «                             d¦  «        z   }&|}|%}|&}�Œw||d d …d d …| d …d d …f<   ||d d …d d …| d …f<   ||d d …d d …df<   |||fS )
Néÿÿÿÿç      à¿r   ©ÚdtypeÚdevice).r:   N).r:   r   ).Néþÿÿÿ)Úshaper=   r>   r)   ÚzerosÚmaxr%   ÚsqueezeÚrangeÚexpÚ	transposeÚsum)'r,   r-   r.   r/   r0   r1   r2   r3   r4   r5   r6   r7   r8   Ú
batch_sizeÚnhÚ_ÚdhqkÚdhhvÚncÚ_dtypeÚ_deviceÚmatC_kÚvecN_kÚscaM_inter_kÚvecAÚscaGÚscaA_maxÚkeyÚ
scaA_max_kÚscaG_kÚscaM_inter_k_nextÚ
matK_chunkÚ
matV_chunkÚvecA_kÚ	vecAbar_kÚmatK_chunk_gatedÚ	scaGbar_kÚmatC_k_nextÚvecN_k_nexts'                                          r    Úmlstm_chunkwise_recurrent_fw_Crb   J   sP  € ð )D¨¬Ð(C°T´ZÀ´^Ð(CÐ(CÑ%ˆ
�B˜˜4 ØˆØœ* d¤k�ˆàÐØ˜T‘zˆHð ÐÝœ+ z°2¸¸Q¹À$±ÈÐ&MÐU[ÐdkÐlÑlÔlˆKØÐÝœ+ z°2¸¸Q¹À$±Ð&GÈvÐ^eÐfÑfÔfˆKØÐ#Ý$œ{¨J¸¸RÀ!¹VÐ+EÈVÐ\cÐdÑdÔdÐð
 Ð#õ ŒK˜ R¨¨tÐ4¸FÈ7ÐSÑSÔSÐSàð 	ð R^ÐQe�EŒK˜ R¨Ð.°fÀWÐMÑMÔMÐMÐkwð 	ð
 !Ð(õ ŒK˜ R¨Ð+°6À'ÐJÑJÔJÐJà"ð 	ð
 �MÔ" TÑ)¨DÑ0ˆØ�GŒ}ˆØ—8’8˜B‘<”<Ô&ˆà#×+Ò+¨BÑ/Ô/ˆå˜˜JÑ'Ô'ð 	!ñ 	!ˆCð CIˆK˜˜˜˜1˜1˜1˜c D™j¨C°!©G°tÑ+;Ð;¸Q¸Q¸QÐ>Ñ?Ø?EˆK˜˜˜˜1˜1˜1˜c D™j¨C°!©G°tÑ+;Ð;Ð;Ñ<Ø*6Ð˜Q˜Q˜Q    3˜YÑ'ð " ! ! ! Q Q Q¨ )Ô,ˆJØ˜!˜!˜!˜Q˜Q˜Q ˜)”_ˆFÝ %¤	¨&°<Ñ*?ÀÑ LÔ LÐà˜a˜a˜a    C¨*Ñ$4¸¸a¹À:Ñ7MÐ$MÈqÈqÈqÐPÔQˆJØ˜a˜a˜a    C¨*Ñ$4¸¸a¹À:Ñ7MÐ$MÈqÈqÈqÐPÔQˆJØ˜!˜!˜!˜Q˜Q˜Q  Q Q Q˜,Ô'ˆFåœ	 &Ð+<¸YÔ+GÑ"GÑHÔHÈÈÈÈAÈAÈAÈqÈqÈqÐRVÈÔWˆIà)¨IÑ5Ðåœ	 &¨<Ñ"7Ð:KÑ"KÑLÔLÈQÈQÈQÐPQÐPQÐPQÐSWÈZÔXˆIð $ IÔ.°Ñ7Ð:J×:TÒ:TÐUWÐY[Ñ:\Ô:\Ð`jÑ:kÑkˆKð $ fÑ,Ð/?×/IÒ/IÈ"ÈbÑ/QÔ/Q×/UÒ/UÐVXÑ/YÔ/YÑYˆKð -ˆLØ ˆFØ ˆF‰Fð (.ˆ�A�A�A�q�q�q˜4˜%˜&˜& ! ! !�OÑ$Ø$*ˆ�A�A�A�q�q�q˜4˜%˜&˜&�LÑ!Ø%1Ð˜˜˜˜A˜A˜A˜r˜Ñ"à˜KÐ)9Ð9Ð9r   ç�íµ ÷Æ°>ÚmatQÚepsc                 óž  — | j         }|
}|j        \  }}}}||z  }|                     |||||¦  «        }|                     ||||¦  «        }|}|                      ||||	|¦  «        } |                     ||||	|¦  «        }|                     ||||	|¦  «        }t          j        t          j        |	|	ft          j        |¬¦  «        ¦  «        }|d d …d d …d d …d d …d f         |d d …d d …d d …d d d …f         z
  }t          j        ||t          d¦  «         ¦  «        }||d d …d d …d d …d d d …f         z   }t          j	        |dd¬¦  «        j
        }||d d …d d …d d …d f         z   }t          j        ||¦  «        }|d d …d d …d d …d d …d f         }|d d …d d …d d …d d …d f         }||z
  }t          j        |¦  «        }| |                     dd¦  «        z  |z  }||z  } t          j        ||z
  ¦  «        }!| |!z  |z  }"|"|z  | |z  z   }#|"|                     d¦  «        z  |                      dd¬¦  «        z   }$t          j        t          j        |$¦  «        t          j        | ¦  «        ¦  «        }%|#|%|z   z  }&|&                     ||||	z  |¦  «        }'|%                     ||||	z  ¦  «        }(|                     ||||	z  ¦  «        })|'|(|)fS )Nr<   Úinfr:   F©ÚdimÚkeepdimr?   T)r>   r@   Úviewr)   ÚtrilÚonesÚboolÚwhereÚfloatrB   r%   ÚmaximumrE   rF   Ú	unsqueezerG   ÚabsÚreshape)*rd   r,   r-   r0   r1   r2   r/   r.   r6   r7   r8   re   rO   rM   rH   rI   ÚdqkÚdhvrK   ÚmatC_k_statesÚvecN_k_statesÚscaMinter_k_statesÚltrÚmatF_logsig_chunkÚmatF_logsig_mask_chunkÚmatLogD_chunkÚvecMintra_kÚvecM_b_interÚvecM_k_combineÚmatLogD_stabilized_chunkÚ
matD_chunkÚ
matS_chunkÚ
matM_chunkÚvecBbarÚmatQ_chunk_gatedÚmatNumerator_commonÚvecDenom_l_commonÚvecDenom_max_commonÚmatH_k_chunkÚmatH_outÚvecN_outÚvecM_outs*                                             r    Úmlstm_chunkwise_parallel_fw_HrŽ   ¤   s]  € ð ”+ˆØˆØ#.Ô#4Ñ ˆ
�B˜˜SØ�b‰yˆØ#×(Ò(¨°R¸¸TÀ3ÑGÔGˆØ#×(Ò(¨°R¸¸TÑBÔBˆØ-Ðà�yŠy˜ R¨¨Z¸Ñ>Ô>ˆØ�yŠy˜ R¨¨Z¸Ñ>Ô>ˆØ�yŠy˜ R¨¨Z¸Ñ=Ô=ˆåŒjÝŒJØ˜ZÐ(Ý”jØðñ ô ñ
ô 
ˆð !    A A A q q q¨!¨!¨!¨TÐ!1Ô2°T¸!¸!¸!¸Q¸Q¸QÀÀÀÀ4ÈÈÈÐ:JÔ5KÑKÐå!&¤¨SÐ2CÅeÈEÁlÄlÀ]Ñ!SÔ!SÐà.°°a°a°a¸¸¸¸A¸A¸A¸tÀQÀQÀQÐ6FÔ1GÑGˆõ ”i °2¸uÐEÑEÔEÔLˆð Ð0°°°°A°A°A°q°q°q¸$°Ô?Ñ?ˆÝœ |°[ÑAÔAˆà'¨¨¨¨1¨1¨1¨a¨a¨a°°°°DÐ(8Ô9ˆØ# A A A q q q¨!¨!¨!¨Q¨Q¨Q°Ð$4Ô5ˆà#0°>Ñ#AÐ Ý”YÐ7Ñ8Ô8ˆ
à˜TŸ^š^¨B°Ñ3Ô3Ñ3°xÑ?ˆ
à *Ñ,ˆ
õ ”)˜L¨>Ñ9Ñ:Ô:ˆØ '™>¨HÑ4Ðà.°Ñ>ÀÈdÑARÑRÐà,¨}×/FÒ/FÀrÑ/JÔ/JÑJÈZÏ^Ê^Ð`bÐlpÈ^ÑMqÔMqÑqÐå#œm­E¬IÐ6GÑ,HÔ,HÍ%Ì)ÐUcÐTcÑJdÔJdÑeÔeÐà*Ð.AÀCÑ.GÑHˆà×$Ò$ Z°°R¸*±_ÀcÑJÔJˆð '×.Ò.¨z¸2¸rÀJ¹ÑOÔOˆØ!×)Ò)¨*°b¸"¸z¹/ÑJÔJˆØ˜ 8Ð+Ð+r   ÚqueryrV   ÚvalueÚigateÚfgateÚcstateÚnstateÚmstateÚreturn_last_statesÚreturn_all_statesc                 ó¶  — | j         \  }}}}||z  dk    rt          d|› d|› d�¦  «        ‚||z  }|                     ||||¦  «        }|                     ||||¦  «        }|                     |¦  «        }|                     d¦  «        }|€|dz  }t          ||||||||||¬¦
  «
        \  }}}t          | |||d d …d d …d | …d d …f         |d d …d d …d | …f         |d d …d d …d d…f         ||||||¬¦  «        \  }}}|||f}|	r<||d d …d d …| d …d d …f         |d d …d d …| d …f         |d d …d d …dd …f         ffz  }n|d	z  }|
r
||||ffz  }n|d	z  }|S )
Nr   úSequence length ú  is not divisible by chunk size ú.r:   r;   ©
r,   r-   r.   r/   r3   r4   r5   r6   r7   r8   ©rd   r,   r-   r0   r1   r2   r/   r.   r6   r7   r8   re   ©N)r@   Ú
ValueErrorrk   Ú
logsigmoidÚcumsumrb   rŽ   )r�   rV   r�   r‘   r’   r“   r”   r•   r6   r–   r—   r7   re   rH   rI   Úsequence_lengthrK   rM   r/   ÚvecFÚvecF_logsigr.   rw   rx   ry   r‹   rŒ   r�   Ú	ret_tuples                                r    Úmlstm_chunkwise_fwr¦   ò   sJ  € ð* 16´Ñ-ˆ
�B˜¨Ø˜ZÑ'¨1Ò,Ð,ÝÐn°ÐnÐnÐakÐnÐnÐnÑoÔoÐoØ 
Ñ*ˆà�zŠz˜* b¨"¨jÑ9Ô9ˆØ�zŠz˜* b¨"¨jÑ9Ô9ˆð ×&Ò& tÑ,Ô,ˆØ×!Ò! "Ñ%Ô%ˆàÐØ˜T‘zˆHõ <ZØØØØØØØ$ØØ!Øð<
ñ <
ô <
Ñ8ˆ�}Ð&8õ (EØØØØ% a a a¨¨¨¨F¨d¨U¨F°A°A°A oÔ6Ø% a a a¨¨¨¨F¨d¨U¨F lÔ3Ø/°°°°1°1°1°c°r°c°	Ô:ØØØØ!ØØð(
ñ (
ô (
Ñ$ˆ�(˜Hð ˜x¨Ð2ˆ	Øð 	!ØØ˜q˜q˜q ! ! ! d U V V¨Q¨Q¨Q˜Ô/°¸q¸q¸qÀ!À!À!ÀdÀUÀVÀV¸|Ô1LÐN`ÐabÐabÐabÐdeÐdeÐdeÐgiÐgjÐgjÐajÔNkÐlðñ ˆIˆIð ˜Ñ ˆIàð 	!Ø˜=¨-Ð9KÐLÐNÑNˆIˆIà˜Ñ ˆIàÐr   Ú	c_initialÚ	n_initialÚ	m_initialc                 óx  — | j         \  }}}}||
z  dk    rt          d|› d|
› d�¦  «        ‚||
z  }|                     ||||
¦  «        }|                     ||||
¦  «        }t          j        |¦  «        }|                     d¦  «        }|dz  }t          |||||||||
|¬¦
  «
        \  }}}t          | |||d d …d d …d | …d d …f         |d d …d d …d | …f         |d d …d d …d d…f         ||||
||	¬¦  «        \  }}}|d d …d d …| d …d d …f         |d d …d d …| d …f         |d d …d d …dd …f         f}|r||fS |S )	Nr   r™   rš   r›   r:   r;   rœ   r�   )r@   rŸ   rk   ÚFr    r¡   rb   rŽ   )r�   rV   r�   r‘   r’   r§   r¨   r©   r–   re   r7   ÚkwargsrH   rI   r¢   rK   rM   r/   r£   r¤   r.   r6   rw   rx   ry   r‹   rŒ   r�   Úlast_statess                                r    Úmlstm_chunkwise_native_autogradr®   C  sú  € ð 16´Ñ-ˆ
�B˜¨Ø˜ZÑ'¨1Ò,Ð,ÝÐn°ÐnÐnÐakÐnÐnÐnÑoÔoÐoØ 
Ñ*ˆà�zŠz˜* b¨"¨jÑ9Ô9ˆØ�zŠz˜* b¨"¨jÑ9Ô9ˆõ ”l 4Ñ(Ô(ˆØ×!Ò! "Ñ%Ô%ˆà˜‘:ˆõ <ZØØØØØ"Ø"Ø'ØØ!Øð<
ñ <
ô <
Ñ8ˆ�}Ð&8õ (EØØØØ% a a a¨¨¨¨F¨d¨U¨F°A°A°A oÔ6Ø% a a a¨¨¨¨F¨d¨U¨F lÔ3Ø/°°°°1°1°1°c°r°c°	Ô:ØØØØ!ØØð(
ñ (
ô (
Ñ$ˆ�(˜Hð % Q Q Q¨¨¨¨D¨5¨6¨6°1°1°1 _Ô5°}ÀQÀQÀQÈÈÈÈDÈ5È6È6À\Ô7RÐTfÐghÐghÐghÐjkÐjkÐjkÐmoÐmpÐmpÐgpÔTqÐrˆàð 	Ø˜[Ð(Ð(àˆOr   Údtype_statec
           	      ó  — | j         }|                     |	¬¦  «        }|                     |	¬¦  «        }|                     |	¬¦  «        }| j        \  }}}|j        \  }}}| j        |j        k    rt          d¦  «        ‚|j        ||||fk    rt          d|j        › �¦  «        ‚|j        |||fk    rt          d|j        › �¦  «        ‚|j        ||dfk    rt          d|j        › �¦  «        ‚|j        ||dfk    rt          d|j        › �¦  «        ‚|j        ||dfk    rt          d|j        › �¦  «        ‚t          j        j                             |¦  «        }t	          j        ||z   |¦  «        }t	          j	        ||z   |z
  ¦  «        }t	          j	        ||z
  ¦  «        }| |d	z  z  }|d
d
…d
d
…d
d
…d
f         | 
                    ¦   «         z  |d
d
…d
d
…d
d
…d
f         |d
d
…d
d
…d
d
…d
f         |d
d
…d
d
…d
d
d
…f         z  z  z   }|| 
                    ¦   «         z  ||z  z   }|d
d
…d
d
…d
d
d
…f         |                     |¬¦  «        z  }|                     d¦  «                             |	¬¦  «        }|d
d
…d
d
…d
d
d
…f         |d
d
…d
d
…d
d
…d
f                              |¬¦  «        z  }|                     d¦  «        }t	          j	        | ¦  «        }t	          j        |                     ¦   «         |¦  «        |z                        |	¬¦  «        }||z  }|                     |¬¦  «        }|                     |	¬¦  «        }|                     |	¬¦  «        }|                     |	¬¦  «        }||||ffS )z?This is a single step of the mLSTM operation in recurrent form.©r=   z&query and key must have the same shapezmatC_old has wrong shape, got zvecN_old has wrong shape, got r   zscaM_old has wrong shape, got zscaI has wrong shape, got zscaF has wrong shape, got r;   Né   )r=   Útor@   rŸ   r)   r   Ú
functionalr    rB   rE   ÚclonerC   rq   rs   ) r�   rV   r�   r‘   r’   r“   r”   r•   re   r¯   r¬   Ú	dtype_qkvÚmatC_oldÚvecN_oldÚscaM_oldrH   rI   rK   rJ   rL   ÚscaF_logÚscaM_state_newÚscaF_actÚscaI_actÚvecQ_scaledÚmatC_state_newÚvecN_state_newÚh_numÚqn_dotproductÚmax_valÚh_denomÚhs                                    r    Úmlstm_recurrent_step_nativerÆ   „  së  € ð ”Kˆ	Ø—9’9 ;�9Ñ/Ô/ˆØ—9’9 ;�9Ñ/Ô/ˆØ—9’9 ;�9Ñ/Ô/ˆà$œ{Ñˆ
�B˜Ø”[‰
ˆˆ1ˆdØŒ;˜#œ)Ò#Ð#ÝÐEÑFÔFÐFØŒ>˜j¨"¨d°DÐ9Ò9Ð9ÝÐN¸h¼nÐNÐNÑOÔOÐOØŒ>˜j¨"¨dÐ3Ò3Ð3ÝÐN¸h¼nÐNÐNÑOÔOÐOØŒ>˜j¨"¨aÐ0Ò0Ð0ÝÐN¸h¼nÐNÐNÑOÔOÐOØŒ;˜: r¨1Ð-Ò-Ð-ÝÐG¸%¼+ÐGÐGÑHÔHÐHØŒ;˜: r¨1Ð-Ò-Ð-ÝÐG¸%¼+ÐGÐGÑHÔHÐHõ ”8Ô&×1Ò1°%Ñ8Ô8ˆõ œ 8¨hÑ#6¸Ñ>Ô>ˆå”9˜X¨Ñ0°>ÑAÑBÔBˆÝ”9˜U ^Ñ3Ñ4Ô4ˆà˜t¨™~Ñ.ˆØ! ! ! ! Q Q Q¨¨¨¨4 -Ô0°8·>²>Ñ3CÔ3CÑCÀhÈqÈqÈqÐRSÐRSÐRSÐUVÐUVÐUVÐX\È}ÔF]Ø����1�1�1�a�a�a˜�Ô  q q q¨!¨!¨!¨T°1°1°1 }Ô!5Ñ5ñG
ñ 
ˆð " H§N¢NÑ$4Ô$4Ñ4°xÀ#±~ÑEˆØ˜A˜A˜A˜q˜q˜q $¨¨¨˜MÔ*¨^×->Ò->ÀYÐ->Ñ-OÔ-OÑOˆØ—’˜aÑ Ô ×#Ò#¨+Ð#Ñ6Ô6ˆà# A A A q q q¨$°°° MÔ2°^ÀAÀAÀAÀqÀqÀqÈ!È!È!ÈTÀMÔ5R×5UÒ5UÐ\eÐ5UÑ5fÔ5fÑfˆØ%×-Ò-¨aÑ0Ô0ˆÝ”)˜^˜OÑ,Ô,ˆÝ”= ×!2Ò!2Ñ!4Ô!4°gÑ>Ô>ÀÑD×HÒHÈ{ÐHÑ[Ô[ˆØ�G‰Oˆà�DŠD�yˆDÑ!Ô!ˆØ'×*Ò*°Ð*Ñ=Ô=ˆØ'×*Ò*°Ð*Ñ=Ô=ˆØ'×*Ò*°Ð*Ñ=Ô=ˆØ�> >°>ÐBÐBÐBr   c                 ó2  — | j         \  }}}}|j         d         }| j        }|�i|�|€t          d¦  «        ‚|�|€t          d¦  «        ‚|                     |
¬¦  «        |                     |
¬¦  «        |                     |
¬¦  «        }}}nOt	          j        ||||f|
|¬¦  «        }t	          j        |||f|
|¬¦  «        }t	          j        ||df|
|¬¦  «        }g }t          |¦  «        D ]‹}|d d …d d …|d f         |d d …d d …|d f         }}| d d …d d …|d d …f         |d d …d d …|d d …f         |d d …d d …|d d …f         }}}t          d	|||||||||	|
dœ
|¤Ž\  }\  }}}|                     |¦  «         ŒŒt	          j	        |d¬¦  «        }|r||||ffS |S )
Nr:   z)Initial states must be provided together.r±   r<   r   )
r“   r”   r•   r�   rV   r�   r‘   r’   re   r¯   r?   ©ri   r   )
r@   r>   rŸ   r³   r)   rA   rD   rÆ   ÚappendÚstack)r�   rV   r�   r‘   r’   r§   r¨   r©   r–   re   r¯   r¬   rH   rI   r¢   rK   rv   r>   Ú
matC_stateÚ
vecN_stateÚ
vecM_stateÚ	vecH_listÚtÚvecF_tÚvecI_tÚvecQ_tÚvecK_tÚvecV_tÚvecHÚmatHs                                 r    Úmlstm_recurrent_sequence_nativer×   Ã  sG  € ð( 16´Ñ-ˆ
�B˜¨ØŒk˜"ŒoˆØ”ˆàÐ ØÐ  IÐ$5Ý Ð!LÑMÔMÐMØÐ  IÐ$5Ý Ð!LÑMÔMÐMà—’ ;�Ñ/Ô/Ø—’ ;�Ñ/Ô/Ø—’ ;�Ñ/Ô/ð %/˜
ˆJˆJõ œ j°"°d¸CÐ%@ÈÐ\bÐcÑcÔcˆJåœ j°"°dÐ%;À;ÐW]Ð^Ñ^Ô^ˆJåœ j°"°aÐ%8ÀÐTZÐ[Ñ[Ô[ˆJàˆ	Ý�Ñ'Ô'ð 	#ð 	#ˆAà" 1 1 1 a a a¨¨D =Ô1°5¸¸¸¸A¸A¸A¸qÀ$¸Ô3G�FˆFð &+¨1¨1¨1¨a¨a¨a°°A°A°A¨:Ô%6¸¸A¸A¸A¸q¸q¸qÀ!ÀQÀQÀQ¸J¼ÈÈqÈqÈqÐRSÐRSÐRSÐUVÐXYÐXYÐXYÈzÔIZ˜F�FˆFõ :Uð :Ø!Ø!Ø!ØØØØØØØ'ð:ð :ð ð:ð :Ñ6ˆDÑ6�:˜z¨:ð ×Ò˜TÑ"Ô"Ð"Ð"åŒ{˜9¨"Ð-Ñ-Ô-ˆàð 	Ø˜* j°*Ð=Ð=Ð=àˆKr   Úmlstm_chunkwise_kernelÚautocast_kernel_dtypec                 ó¨  — |	rt          dd¦  «        ‚|j        \  }}}}|}||z  dk    rõ||z   dz
  |z  |z  }|                     ||||j        d         ¦  «        }|                     ||||j        d         ¦  «        }|                     ||||j        d         ¦  «        }|                     |||¦  «        }|                     |||¦  «        }||d d …d d …d |…d d …f<   ||d d …d d …d |…d d …f<   ||d d …d d …d |…d d …f<   ||d d …d d …d |…f<   ||d d …d d …d |…f<   n
|}|}|}|}|} | d|||||||||	|
||dœ|¤Ž}|d d …d d …d |…d d …f         }|S )Nz6We are padding zeros, so we cannot return last states,z*as they would be not the true last states.r   r   r   )r�   rV   r�   r‘   r’   r§   r¨   r©   r–   re   rÙ   r7   r   )rŸ   r@   Ú	new_zeros)rØ   r�   rV   r�   r’   r‘   r§   r¨   r©   r–   re   rÙ   r7   r¬   rH   rI   r¢   rK   Ú
S_unpaddedÚS_paddedÚq_padÚk_padÚv_padÚi_padÚf_padrÖ   s                             r    Úwrap_chunkwise_pad_zerosrã     s  € ð  ð 	ÝØHØ<ñô ð ð
 16´Ñ-ˆ
�B˜¨Ø$ˆ
à˜ZÑ'¨1Ò,Ð,Ø(¨:Ñ5¸Ñ9¸jÑHÈJÑVˆHØ—O’O J°°H¸e¼kÈ!¼nÑMÔMˆEØ—M’M *¨b°(¸C¼IÀa¼LÑIÔIˆEØ—O’O J°°H¸e¼kÈ!¼nÑMÔMˆEØ—O’O J°°HÑ=Ô=ˆEØ—O’O J°°HÑ=Ô=ˆEØ*/ˆE�!�!�!�Q�Q�Q˜˜˜ Q Q QÐ&Ñ'Ø*-ˆE�!�!�!�Q�Q�Q˜˜˜ Q Q QÐ&Ñ'Ø*/ˆE�!�!�!�Q�Q�Q˜˜˜ Q Q QÐ&Ñ'Ø',ˆE�!�!�!�Q�Q�Q˜˜˜Ð#Ñ$Ø',ˆE�!�!�!�Q�Q�Q˜˜˜Ð#Ñ$Ð$àˆEØˆEØˆEØˆEØˆEà%Ð%ð 
ØØØØØØØØØ1ØØ"7Ø!ð
ð 
ð ð
ð 
ˆð �A�A�A�q�q�q˜+˜:˜+ q q qÐ(Ô)ˆØˆr   Úmlstm_sequence_kernelÚmlstm_step_kernelÚenable_loggingc                 ó  — |j         \  }}}}|j         d         }|�|n(t          j        |||||j        t          j        ¬¦  «        }|	�|	n't          j        ||||j        t          j        ¬¦  «        }|
�|
n't          j        ||d|j        t          j        ¬¦  «        }|dk    �rÓg }d}||z
  }||z  }|dk    r×||z  }||z   } | |d||…dd…f                              ¦   «         |d||…dd…f                              ¦   «         |d||…dd…f                              ¦   «         |d||…f                              ¦   «         |d||…f                              ¦   «         ||||d||¬¦  «        \  }\  }}}||z  }|                     |¦  «         ||z
  }|dk    rÆ ||d||…dd…f                              ¦   «         |d||…dd…f                              ¦   «         |d||…dd…f                              ¦   «         |d||…f                              ¦   «         |d||…f                              ¦   «         |||d|¬	¦
  «
        \  }\  }}}|                     |¦  «         t          j        |d
¬¦  «        }n|dk    rt          d|› d�¦  «        ‚ || 	                    d
¦  «        | 	                    d
¦  «        | 	                    d
¦  «        ||||||¬¦	  «	        \  }\  }}}|dd…dd…ddd…f         }|r||||ffS |S )af
  This function computes the last hidden state and matH outputs of the mLSTM, independently of the sequence length.

        For this it uses three kernels:
        - mlstm_chunkwise_kernel: mlstm chunkwise kernels that processes chunks of a given chunk size in parallel.
        - mlstm_sequence_kernel: mlstm kernel that processes the remaining sequence length in a single step recurrence.
        - mlstm_step_kernel: mlstm kernel that processes a sequence length of 1 in a single step.

        It tries to maximize the chunksizes to improve performance.
        It will start with the given chunk size and then divides the chunksize by 2 until the chunk size is smaller than 16.
        At every chunksize it will process the maximal number of chunks that fit into the remaining sequence length.

        E.g. for chunk_size = 64, this function will try the chunksizes [64, 32, 16] if necessary.

        For the remaining sequence length, which is smaller than 16, we use a different kernel that computes the mLSTM
        in a single step and loop over this in pytorch.

        Args:
            mlstm_chunkwise_kernel: The mLSTM chunkwise kernel that processes chunks of a given chunk size in parallel
            mlstm_sequence_kernel: The mLSTM kernel that processes the remaining sequence length in a single step recurrence
            query: The query tensor (batch_size, nh, sequence_length, dhqk)
            key: The key tensor (batch_size, nh, sequence_length, dhqk)
            value: The value tensor (batch_size, nh, sequence_length, dhhv)
            fgate: The forget gate tensor (batch_size, nh, sequence_length)
            igate: The input gate tensor (batch_size, nh, sequence_length)
            c_initial: The initial cell state tensor (batch_size, nh, dhqk, dhhv)
            n_initial: The initial hidden state tensor (batch_size, nh, dhqk)
            m_initial: The initial memory state tensor (batch_size, nh, 1)
            return_last_states: If True, the function will return the last states of the mLSTM
            eps: The epsilon value used for numerical stability
            autocast_kernel_dtype: The dtype used for the kernel computation
            chunk_size: The chunk size used for the chunkwise kernel
            enable_logging: If True, the function will log debug information. Default is False.

        Returns:
            The last hidden state tensor (batch_size, nh, sequence_length, dhhv) or a tuple containing the last hidden state tensor and the last states of the mLSTM
            Last states are (cstate (batch_size, nh, dhqk, dhhv), nstate (batch_size, nh, dhqk), mstate (batch_size, nh, 1)).
        r:   N©r>   r=   r   r   .T)r�   rV   r�   r’   r‘   r§   r¨   r©   r7   r–   rÙ   re   )
r�   rV   r�   r‘   r’   r§   r¨   r©   r–   re   r²   rÈ   z)Received empty sequence (sequence_length=z3), require at least single element in the sequence.)	r�   rV   r�   r‘   r’   r“   r”   r•   re   )
r@   r)   rA   r>   Úfloat32Ú
contiguousrÉ   ÚconcatenaterŸ   rC   )rØ   rä   rå   r�   rV   r�   r’   r‘   r§   r¨   r©   r–   re   rÙ   r7   ræ   rH   rI   r¢   rK   rL   Úc_stateÚn_stateÚm_stateÚh_outsÚseq_len_start_idxÚremaining_seq_lenr8   Úiter_seq_lenÚseq_len_idxÚh_outs                                  r    Ú(wrap_chunkwise_arbitrary_sequence_lengthrõ   J  sÿ  € ðp 14´	Ñ-ˆ
�B˜¨ØŒ{˜2Œˆð Ð$ð ˆIå”˜Z¨¨T°4ÀÄ
ÕRWÔR_Ð`Ñ`Ô`ð 	ð Ð$ð ˆIå”˜Z¨¨T¸#¼*ÍEÌMÐZÑZÔZð 	ð Ð$ð ˆIå”˜Z¨¨Q°s´zÍÌÐWÑWÔWð 	ð ˜QÒÑàˆFØ !ÐØ /Ð2CÑ CÐØ*¨jÑ8ˆJØ˜AŠ~ˆ~Ø)¨JÑ6�Ø/°,Ñ>�Ø5KÐ5KØ Ð%6°{Ð%BÀAÀAÀAÐ EÔF×QÒQÑSÔSØ˜CÐ!2°;Ð!>ÀÀÀÐAÔB×MÒMÑOÔOØ Ð%6°{Ð%BÀAÀAÀAÐ EÔF×QÒQÑSÔSØ Ð%6°{Ð%BÐ BÔC×NÒNÑPÔPØ Ð%6°{Ð%BÐ BÔC×NÒNÑPÔPØ%Ø%Ø%Ø)Ø'+Ø*?Øð6ñ 6ô 6Ñ2�Ñ2˜ ¨'ð " \Ñ1Ð!Ø—’˜eÑ$Ô$Ð$à /Ð2CÑ CÐà  1Ò$Ð$à5JÐ5JØ Ð%6°Ð%FÈÈÈÐ IÔJ×UÒUÑWÔWØ˜CÐ!2°?Ð!BÀAÀAÀAÐEÔF×QÒQÑSÔSØ Ð%6°Ð%FÈÈÈÐ IÔJ×UÒUÑWÔWØ Ð%6°Ð%FÐ FÔG×RÒRÑTÔTØ Ð%6°Ð%FÐ FÔG×RÒRÑTÔTØ%Ø%Ø%Ø'+Øð6ñ 6ô 6Ñ2�Ñ2˜ ¨'ð —’˜eÑ$Ô$Ð$ÝÔ% f°!Ð4Ñ4Ô4ˆEˆEð  !Ò#Ð#Ý ð EÀð  Eð  Eð  Eñô ð ð 2CÐ1BØ—m’m AÑ&Ô&Ø—K’K ‘N”NØ—m’m AÑ&Ô&ØØØØØØð
2ñ 
2ô 
2Ñ.ˆEÑ.�G˜W gð ˜!˜!˜!˜Q˜Q˜Q  a a a˜-Ô(ˆEàð 	Ø˜7 G¨WÐ5Ð5Ð5àˆLr   c                   óL  ‡ — e Zd ZdZeZdefˆ fd„Z	 	 	 	 	 ddej        dej        dej        dej        d	ej        d
ej        dz  dej        dz  dej        dz  de	dz  de
d         dz  dej        eej        eej        ej        ej        f         f         z  fd„Zdefd„Zˆ xZS )ÚxLSTMBackendz—xLSTM Backend Module for PyTorch.

        This module wraps the xLSTM kernels and provides a high-level interface for training and inference.
        Úconfigc                 óž  •— t          ¦   «                              ¦   «          || _        t          | _        t
          | _        t          | _        t          t          | j        t          | j        t          t          |j        ¦  «        ¬¦  «        t          | j        t          t          |j        ¦  «        ¬¦  «        |j        |j        t          t          |j        ¦  «        d¬¦  «        | _        t          | j        t          t          |j        ¦  «        |j        |j        ¬¦  «        }d|j        v rt          t&          |¬¦  «        }|| _        d S )N)r¯   T)rØ   rä   rå   r7   re   rÙ   r–   )rÙ   re   r7   Úwith_padding)rØ   )ÚsuperÚ__init__rø   r®   Úchunkwise_kernel_fnr×   Úsequence_kernel_fnrÆ   Ústep_kernel_fnr"   rõ   Úgetattrr)   Úinference_state_dtyper7   re   rÙ   Ú_inference_fnÚmoderã   Ú	_train_fn)Úselfrø   Útrain_kernel_fnÚ	__class__s      €r    rü   zxLSTMBackend.__init__ç  s/  ø€ Ý‰GŒG×ÒÑÔÐØ ˆDŒKÝ'FˆDÔ$Ý&EˆDÔ#Ý"=ˆDÔå!(Ý8Ø'+Ô'?Ý&-ØÔ+Ý '­¨vÔ/KÑ LÔ Lð'ñ 'ô 'õ #*ØÔ'Ý '­¨vÔ/KÑ LÔ Lð#ñ #ô #ð "Ô,Ø”JÝ&-­e°VÔ5QÑ&RÔ&RØ#'ð"ñ "ô "ˆDÔõ" &ØÔ(Ý&-­e°VÔ5QÑ&RÔ&RØ”JØ!Ô,ð	ñ ô ˆOð  ¤Ð,Ð,Ý")Õ*BÐ[jÐ"kÑ"kÔ"k�Ø,ˆDŒNˆNˆNr   Nr�   rV   r�   r‘   r’   r§   r¨   r©   r–   r  )ÚtrainÚ	inferencer'   c                 ó:  — |
€| j         j        }
d|
v rM|	€| j         j        }	| j         j        dk    r|	rt          d¦  «        ‚|                      |||||||||	¬¦	  «	        S d|
v r|                      ||||||||¬¦  «        S t          d| j         j        › �¦  «        ‚)	a  Forward pass of the mLSTM backend.

            Depending on the configured mode, this method will call the appropriate kernel function.

            Args:
                query: The query tensor of shape (batch_size, nh, sequence_length, dhqk).
                key: The key tensor of shape (batch_size, nh, sequence_length, dhqk).
                value: The value tensor of shape (batch_size, nh, sequence_length, dhhv).
                igate: The input gate preactivation tensor of shape (batch_size, nh, sequence_length).
                fgate: The forget gate preactivation tensor of shape (batch_size, nh, sequence_length).
                c_initial: The initial cell state tensor of shape (batch_size, nh, dhqk, dhhv).
                                                    Defaults to None.
                n_initial: The initial hidden state tensor of shape (batch_size, nh, dhqk). Defaults to None.
                m_initial: The initial memory tensor of shape (batch_size, nh, 1). Defaults to None.
                return_last_states: Whether to return the last states of the sequence. Defaults to None.
                                                    If None, the value from the config is used.

            Returns:
                hidden states of shape (batch_size, nh, sequence_length, dhhv)
                hidden states and last states the last states are the cell state cstate (batch_size, nh, dhqk, dhhv),
                the normalizer state nstate (batch_size, nh, dhqk), and the max state mstate (batch_size, nh, 1)
            Nr  Útrain_with_paddingzFreturn_last_states=True is not supported with train_with_padding mode.)	r�   rV   r�   r‘   r’   r§   r¨   r©   r–   r	  ©r�   rV   r�   r‘   r’   r§   r¨   r©   zUnknown mode: )rø   r  r–   rŸ   r  r  )r  r�   rV   r�   r‘   r’   r§   r¨   r©   r–   r  s              r    ÚforwardzxLSTMBackend.forward	  sí   € ðF ˆ|Ø”{Ô'�à˜$ˆˆØ%Ð-Ø)-¬Ô)GÐ&à”;Ô#Ð';Ò;Ð;Ø)ð sÝ(Ð)qÑrÔrÐrà—~’~ØØØØØØ'Ø'Ø'Ø'9ð &ñ 
ô 
ð 
ð  Ð$Ð$à×)Ò)ØØØØØØ'Ø'Ø'ð *ñ 	ô 	ð 	õ !Ð!D°$´+Ô2BÐ!DÐ!DÑEÔEÐEr   c                 ó   — | j         › S rž   ©rø   ©r  s    r    Ú
extra_reprzxLSTMBackend.extra_reprR  s   € Ø”kÐ#Ð#r   ©NNNNN)r   r   r   Ú__doc__r   Úconfig_classrü   r)   ÚTensorrn   r#   Útupler  Ústrr  Ú__classcell__©r  s   @r    r÷   r÷   ß  s}  ø€ € € € € ð	ð 	ð
 #ˆð 	- ;ð  	-ð  	-ð  	-ð  	-ð  	-ð  	-ðR .2Ø-1Ø-1Ø.2Ø9=ðG	Fð G	Fà”<ðG	Fð ”ðG	Fð ”<ð	G	Fð
 ”<ðG	Fð ”<ðG	Fð ”| dÑ*ðG	Fð ”| dÑ*ðG	Fð ”| dÑ*ðG	Fð !% t¡ðG	Fð Ð.Ô/°$Ñ6ðG	Fð Œ\˜E %¤,°°e´lÀEÄLÐRWÔR^Ð6^Ô0_Ð"_Ô`Ñ`ðG	Fð G	Fð G	Fð G	FðR	$ ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$ð 	$r   r÷   c                   ó®   ‡ — e Zd ZdZ	 	 	 	 ddedededed	ef
ˆ fd
„Zdej	        dej	        fd„Z
dej	        dej	        fd„Zdej	        dej	        fd„Zˆ xZS )ÚxLSTMRMSNorma3  Root mean square normalization layer implementation similar
        to https://pytorch.org/docs/stable/generated/torch.nn.RMSNorm.html.

        It normalizes the input tensor by the root mean square of the last dimension.

        Args:
            num_features: The number of features in the input tensor.
            eps: A small value to avoid division by zero.
            use_weight: Whether to use a learnable weight.
            use_bias: Whether to use a learnable bias.
            force_float32_reductions: Whether to force float32 reductions.
        rc   TFÚnum_featuresre   Ú
use_weightÚuse_biasÚforce_float32_reductionsc                 óH  •— t          ¦   «                              ¦   «          || _        || _        || _        |r,t          j        t          j        |¦  «        ¦  «        | _	        nd | _	        |r-t          j        t          j
        |¦  «        ¦  «        | _        d S d | _        d S rž   )rû   rü   r  re   r  r   Ú	Parameterr)   rm   ÚweightrA   Úbias)r  r  re   r  r  r  r  s         €r    rü   zxLSTMRMSNorm.__init__c  s�   ø€ õ ‰GŒG×ÒÑÔÐØ ,ˆDÔØˆDŒHØ,DˆDÔ)àð #Ý œl­5¬:°lÑ+CÔ+CÑDÔD�”�à"�”àð !ÝœL­¬°\Ñ)BÔ)BÑCÔC�”	�	�	à �”	�	�	r   Úxr'   c                 óJ   — | j         �
|| j         z  }| j        �
|| j        z   }|S rž   ©r"  r#  ©r  r$  s     r    Ú_apply_weight_biaszxLSTMRMSNorm._apply_weight_biasz  ó-   € ØŒ{Ð&Ø˜œ‘O�ØŒyÐ$Ø˜œ	‘M�ØˆHr   c                 óþ   — |j         }| j        r|                     ¦   «         }|t          j        |                     d¦  «                             dd¬¦  «        | j        z   ¦  «        z  }|                     |¦  «        S )Nr²   r:   Trh   )	r=   r  rp   r)   ÚrsqrtÚpowÚmeanre   r³   )r  r$  Úin_dtypes      r    Ú_rms_normalizezxLSTMRMSNorm._rms_normalize�  sf   € à”wˆHØÔ,ð Ø—G’G‘I”I�Ø•E”K §¢ a¡¤§¢°"¸d Ñ CÔ CÀdÄhÑ NÑOÔOÑOˆAØ—4’4˜‘>”>Ð!r   c                 óZ   — |                       |¦  «        }|                      |¦  «        }|S rž   )r/  r(  r'  s     r    r  zxLSTMRMSNorm.forward‰  s-   € Ø×#Ò# AÑ&Ô&ˆAØ×'Ò'¨Ñ*Ô*ˆAØˆHr   ©rc   TFT)r   r   r   r  Úintrp   rn   rü   r)   r  r(  r/  r  r  r  s   @r    r  r  U  sü   ø€ € € € € ð	ð 	ð  Ø#Ø"Ø-1ð	!ð 	!àð	!ð ð	!ð ð		!ð
 ð	!ð '+ð	!ð 	!ð 	!ð 	!ð 	!ð 	!ð.	¨¬ð 	¸¼ð 	ð 	ð 	ð 	ð	" E¤Lð 	"°U´\ð 	"ð 	"ð 	"ð 	"ð	˜Uœ\ð 	¨e¬lð 	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r   r  c                   ó²   ‡ — e Zd ZdZ	 	 	 	 ddedededed	ed
efˆ fd„Zdej	        dej	        fd„Z
dej	        dej	        fd„Zdej	        dej	        fd„Zˆ xZS )ÚxLSTMMultiHeadLayerNormam  Multi-head version of the LayerNorm layer.

        It normalizes the last dimension of the input tensor.

        The input is assumed to have the shape (batch_size, sequence_length, nh, DH), where:
        batch_size: batch size
        sequence_length: sequence length
        nh: number of heads
        DH: head dimension

        The normalization is applied over the last dimension (DH) of the input tensor.

        Args:
            num_heads: The number of heads.
            head_dim: The head dimension.
            eps: A small value to avoid division by zero.
            use_weight: Whether to use a learnable weight.
            use_bias: Whether to use a learnable bias.
            force_float32_reductions: Whether to force float32 reductions

        Returns:
            The normalized tensor with the shape (batch_size, sequence_length, nh * DH).
        rc   TFÚ	num_headsÚhead_dimre   r  r  r  c                 ó|  •— t          ¦   «                              ¦   «          ||z  | _        || _        || _        |r1t          j        t          j        | j        ¦  «        ¦  «        | _	        nd | _	        |r1t          j        t          j
        | j        ¦  «        ¦  «        | _        nd | _        || _        || _        d S rž   )rû   rü   r  re   r  r   r!  r)   rm   r"  rA   r#  r5  r6  )r  r5  r6  re   r  r  r  r  s          €r    rü   z xLSTMMultiHeadLayerNorm.__init__§  s§   ø€ õ ‰GŒG×ÒÑÔÐØ )¨HÑ 4ˆDÔØˆDŒHØ,DˆDÔ)àð #Ý œl­5¬:°dÔ6GÑ+HÔ+HÑIÔI�”�à"�”àð !ÝœL­¬°TÔ5FÑ)GÔ)GÑHÔH�”	�	à �”	Ø&ˆDŒNØ$ˆDŒMˆMˆMr   r$  r'   c                 óJ   — | j         �
|| j         z  }| j        �
|| j        z   }|S rž   r&  r'  s     r    r(  z*xLSTMMultiHeadLayerNorm._apply_weight_biasÁ  r)  r   c                 ó  — |j         }| j        r|                     ¦   «         }||                     dd¬¦  «        z
  }|t	          j        |                     ddd¬¦  «        | j        z   ¦  «        z  }|                     |¦  «        S )Nr:   Trh   F)ri   rj   Úunbiased)	r=   r  rp   r-  r)   r+  Úvarre   r³   )r  r$  r.  Ú
x_centeredÚys        r    Ú_layer_normalizez(xLSTMMultiHeadLayerNorm._layer_normalizeÈ  sz   € à”wˆHØÔ,ð Ø—G’G‘I”I�Ø˜QŸVšV¨°D˜VÑ9Ô9Ñ9ˆJØ�Uœ[¨¯ª°2¸tÈe¨Ñ)TÔ)TÐW[ÔW_Ñ)_Ñ`Ô`Ñ`ˆAØ—4’4˜‘>”>Ð!r   c                 óT  — |j         \  }}}}|| j        k    r"t          d| j        › d|› d|j         › �¦  «        ‚| j        |k    r"t          d| j        › d|› d|j         › �¦  «        ‚|                      |¦  «        }|                     ||d¦  «        }|                      |¦  «        }|S )Nz	Expected z heads, got z, input shape: z head dimension, got r:   )r@   r5  rŸ   r6  r>  rt   r(  )r  r$  rH   r¢   rI   ÚDHs         r    r  zxLSTMMultiHeadLayerNorm.forwardÑ  sÉ   € ð 34´'Ñ/ˆJ˜¨¨RØ�T”^Ò#Ð#Ý Ð!e¨T¬^Ð!eÐ!eÈÐ!eÐ!eÐ\]Ô\cÐ!eÐ!eÑfÔfÐfØŒ} Ò"Ð"Ý Ð!m¨T¬]Ð!mÐ!mÐQSÐ!mÐ!mÐdeÔdkÐ!mÐ!mÑnÔnÐnà×%Ò% aÑ(Ô(ˆAØ—	’	˜* o°rÑ:Ô:ˆAØ×'Ò'¨Ñ*Ô*ˆAØˆHr   r1  )r   r   r   r  r2  rp   rn   rü   r)   r  r(  r>  r  r  r  s   @r    r4  r4  Ž  s
  ø€ € € € € ð	ð 	ð8 Ø#Ø"Ø-1ð	%ð 	%àð	%ð ð	%ð ð		%ð
 ð	%ð ð	%ð '+ð	%ð 	%ð 	%ð 	%ð 	%ð 	%ð4	¨¬ð 	¸¼ð 	ð 	ð 	ð 	ð	" e¤lð 	"°u´|ð 	"ð 	"ð 	"ð 	"ð	àŒ|ð	ð Œ\ð	ð 	ð 	ð 	ð 	ð 	ð 	ð 	r   r4  c                   óH   ‡ — e Zd Zdefˆ fd„Zdej        dej        fd„Zˆ xZS )ÚxLSTMFeedForwardrø   c                 óœ  •— t          ¦   «                              ¦   «          || _        t          |j        |j        z  |j        ¦  «        | _        | j        j        dk    rat          j
        |j        | j        | j        j        ¬¦  «        | _        t          j
        |j        | j        | j        j        ¬¦  «        | _        nC| j        j        dk    r3t          j
        |j        d| j        z  | j        j        ¬¦  «        | _        t          j
        | j        |j        | j        j        ¬¦  «        | _        t          j        ¦   «         | _        d S )NÚsingle©Úin_featuresÚout_featuresr#  Úfusedr²   )rû   rü   rø   r$   Úhidden_sizeÚffn_proj_factorÚffn_round_up_to_multiple_ofÚup_proj_dimÚweight_moder   ÚLinearr  Úproj_up_gateÚproj_upÚproj_up_gate_zÚ	proj_downÚSiLUÚact_fn©r  rø   r  s     €r    rü   zxLSTMFeedForward.__init__á  s:  ø€ Ý‰GŒG×ÒÑÔÐØ ˆDŒKå;ØÔ" VÔ%;Ñ;ØÔ2ñ ô  ˆDÔð
 Œ{Ô&¨(Ò2Ð2Ý$&¤IØ &Ô 2Ø!%Ô!1ØœÔ-ð%ñ %ô %�Ô!õ
  "œyØ &Ô 2Ø!%Ô!1ØœÔ-ð ñ  ô  �”�ð
 ”Ô(¨GÒ3Ð3Ý&(¤iØ &Ô 2Ø!" TÔ%5Ñ!5ØœÔ-ð'ñ 'ô '�Ô#õ  œYØ Ô,Ø#Ô/Ø”[Ô)ðñ ô ˆDŒNõ œ'™)œ)ˆDŒKˆKˆKr   r$  r'   c                 óˆ  — | j         j        dk    r?|                      |                      |¦  «        ¦  «        |                      |¦  «        z  }n]| j         j        dk    rM|                      |¦  «        }t          j        || j        fd¬¦  «        \  }}|                      |¦  «        |z  }|  	                    |¦  «        }|S )NrD  rH  r:   rÈ   )
rø   rM  rT  rO  rP  rQ  r)   Útensor_splitrL  rR  )r  r$  ÚgateÚzr=  s        r    r  zxLSTMFeedForward.forward  s²   € ØŒ{Ô&¨(Ò2Ð2Ø—K’K × 1Ò 1°!Ñ 4Ô 4Ñ5Ô5¸¿ºÀQ¹¼ÑG��Ø”Ô(¨GÒ3Ð3Ø×'Ò'¨Ñ*Ô*�ÝÔ,¨Q°Ô1AÐ0CÈÐLÑLÔL‘��aØ—K’K Ñ%Ô%¨Ñ)�à—’˜qÑ!Ô!ˆAØˆHr   )	r   r   r   r   rü   r)   r  r  r  r  s   @r    rB  rB  à  sk   ø€ € € € € ð!	$ ;ð !	$ð !	$ð !	$ð !	$ð !	$ð !	$ðF		˜Uœ\ð 		¨e¬lð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		r   rB  c            
       ól   ‡ — e Zd Zdefˆ fd„Z	 ddej        dedz  deej        edz  f         fd„Z	ˆ xZ
S )	Ú
xLSTMLayerrø   c                 óè  •— t          ¦   «                              ¦   «          || _        t          |j        |j        z  ¦  «        | _        t          |j        |j        z  ¦  «        | _        | j        j	        dk    �r5t          j        | j        j        | j        | j        j        ¬¦  «        | _        t          j        | j        j        | j        | j        j        ¬¦  «        | _        t          j        | j        j        | j        | j        j        ¬¦  «        | _        t          j        | j        j        | j        | j        j        ¬¦  «        | _        t          j        | j        j        | j        j        d¬¦  «        | _        t          j        | j        j        | j        j        d¬¦  «        | _        n†| j        j	        dk    rvt          j        | j        j        d| j        z  d| j        z  z   | j        j        ¬¦  «        | _        t          j        | j        j        d| j        j        z  d¬¦  «        | _        t          j        ¦   «         | _        t1          | j        ¬¦  «        | _        t5          | j        j        | j        | j        j        z  | j        j        d| j        j        | j        j        ¬¦  «        | _        t          j        | j        | j        j        | j        j        ¬¦  «        | _        d S )NrD  rE  TrH  r²   r  )r5  r6  re   r  r  r  )rû   rü   rø   r2  rI  Úv_dim_factorÚv_dimÚqk_dim_factorÚqk_dimrM  r   rN  r  ÚqÚkÚvÚogate_preactr5  Úigate_preactÚfgate_preactÚqkv_opreactÚifgate_preactÚSigmoidÚogate_act_fnr÷   Úmlstm_backendr4  Únorm_epsÚnorm_reduction_force_float32Úmultihead_normÚout_projrU  s     €r    rü   zxLSTMLayer.__init__  s¡  ø€ Ý‰GŒG×ÒÑÔÐØ ˆDŒKå˜VÔ/°&Ô2EÑEÑFÔFˆDŒJÝ˜fÔ0°6Ô3GÑGÑHÔHˆDŒKàŒ{Ô&¨(Ò2Ñ2ÝœØ $¤Ô 7Ø!%¤ØœÔ-ðñ ô �”õ
 œØ $¤Ô 7Ø!%¤ØœÔ-ðñ ô �”õ
 œØ $¤Ô 7Ø!%¤ØœÔ-ðñ ô �”õ %'¤IØ $¤Ô 7Ø!%¤ØœÔ-ð%ñ %ô %�Ô!õ
 %'¤IØ $¤Ô 7Ø!%¤Ô!6Øð%ñ %ô %�Ô!õ
 %'¤IØ $¤Ô 7Ø!%¤Ô!6Øð%ñ %ô %�Ô!Ð!ð
 ”Ô(¨GÒ3Ð3Ý#%¤9Ø $¤Ô 7Ø!" T¤[¡°1°t´z±>Ñ!AØœÔ-ð$ñ $ô $�Ô õ
 &(¤YØ $¤Ô 7Ø!" T¤[Ô%:Ñ!:Øð&ñ &ô &�Ô"õ !#¤
¡¤ˆDÔÝ!-°T´[Ð!AÑ!AÔ!AˆDÔå"9Øœ+Ô/Øœ t¤{Ô'<Ñ<Ø”KÔ(ØØœÔ-Ø)-¬Ô)Qð#ñ #ô #ˆDÔõ œIØ œJØ!œ[Ô4Ø”[Ô)ðñ ô ˆDŒMˆMˆMr   Nr$  Ústater'   c           
      ó´  — |j         dk    rt          d|j        › �¦  «        ‚|j        \  }}}| j        j        dk    r±|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }|                      |¦  «        }	t          |  
                    |¦  «        | j        j        ¬¦  «        }
t          |                      |¦  «        | j        j        ¬¦  «        }n´| j        j        dk    r¤|                      |¦  «        }t          j        || j        d| j        z  d| j        z  | j        z   fd¬¦  «        \  }}}}	t          |                      |¦  «        | j        j        ¬¦  «        }t          j        || j        j        fd¬¦  «        \  }
}|                     ||| j        j        d¦  «                             d	d¦  «        }|                     ||| j        j        d¦  «                             d	d¦  «        }|                     ||| j        j        d¦  «                             d	d¦  «        }|
                     d	d¦  «        }
|                     d	d¦  «        }|€d
\  }}}n|\  }}}|                      ||||
||||¬¦  «        \  }}|| j        j        || j        | j        j        z  f}|j        |k    rt          d|j        › d|› �¦  «        ‚|                     d	d¦  «        }|                      |¦  «        }|                     ||d¦  «        }|                      |	¦  «        |z  }|                      |¦  «        }||fS )Nr   z=Input must have shape [batch_size, sequence_length, HD], got rD  )r&   rH  r²   r:   rÈ   r   )NNNr  zGot z, expected )ÚndimrŸ   r@   rø   rM  ra  rb  rc  rd  r   re  Úgate_soft_caprf  rg  r)   rW  r`  r^  rh  r5  rt   rF   rk  rn  rj  ro  )r  r$  rp  rH   r¢   rJ   r�   rV   r�   Úo_preactÚi_preactÚf_preactrg  Ú	if_preactr§   r¨   r©   rÅ   Úexpected_h_shapeÚh_normrô   r=  s                         r    r  zxLSTMLayer.forwardT  s`  € ð Œv˜Š{ˆ{Ý Ð!jÐabÔahÐ!jÐ!jÑkÔkÐkØ-.¬WÑ*ˆJ˜¨ØŒ{Ô&¨(Ò2Ð2ØŸš˜q™	œ	�Ø—f’f˜Q‘i”i�ØŸš˜q™	œ	�Ø×,Ò,¨QÑ/Ô/�Ý# D×$5Ò$5°aÑ$8Ô$8ÀDÄKÔD]Ð^Ñ^Ô^�Ý# D×$5Ò$5°aÑ$8Ô$8ÀDÄKÔD]Ð^Ñ^Ô^��à”Ô(¨GÒ3Ð3Ø"×.Ò.¨qÑ1Ô1�Ý.3Ô.@ØàœØ˜DœK™Ø˜DœK™¨$¬*Ñ4ðð
 ð/ñ /ô /Ñ+��s˜E 8õ % T×%7Ò%7¸Ñ%:Ô%:ÀdÄkÔF_Ð`Ñ`Ô`�	Ý%*Ô%7¸	ÀDÄKÔDYÐC[ÐacÐ%dÑ%dÔ%dÑ"�˜(à—M’M *¨o¸t¼{Ô?TÐVXÑYÔY×cÒcÐdeÐghÑiÔiˆEØ—+’+˜j¨/¸4¼;Ô;PÐRTÑUÔU×_Ò_Ð`aÐcdÑeÔeˆCØ—M’M *¨o¸t¼{Ô?TÐVXÑYÔY×cÒcÐdeÐghÑiÔiˆEØ×)Ò)¨!¨QÑ/Ô/ˆHØ×)Ò)¨!¨QÑ/Ô/ˆHØˆ}Ø2BÑ/�	˜9 i ià27Ñ/�	˜9 ià×)Ò)ØØØØØØ#Ø#Ø#ð *ñ 	ô 	‰HˆAˆuð Ø”Ô%ØØ”
˜dœkÔ3Ñ3ð	 Ðð ŒwÐ*Ò*Ð*Ý Ð!N¨¬Ð!NÐ!NÐ<LÐ!NÐ!NÑOÔOÐOà—’˜A˜qÑ!Ô!ˆAØ×(Ò(¨Ñ+Ô+ˆFØ—^’^ J°ÀÑDÔDˆFà×%Ò% hÑ/Ô/°&Ñ8ˆEà—’˜eÑ$Ô$ˆAØ�e�8ˆOr   rž   )r   r   r   r   rü   r)   r  ÚmLSTMLayerStateTyper  r  r  r  s   @r    r[  r[    s©   ø€ € € € € ðB	 ;ð B	ð B	ð B	ð B	ð B	ð B	ðJ HLðA	ð A	Ø”\ðA	Ø*=ÀÑ*DðA	à�5”<Ð!4°tÑ!;Ð;Ô<ðA	ð A	ð A	ð A	ð A	ð A	ð A	ð A	r   r[  c            	       ód   ‡ — e Zd Zdefˆ fd„Zddej        dedz  deej        ef         fd„Z	ˆ xZ
S )	r   rø   c                 óZ  •— t          ¦   «                              ¦   «          || _        t          |j        |j        d|j        |j        ¬¦  «        | _        t          |¦  «        | _
        t          |j        |j        d|j        |j        ¬¦  «        | _        t          |¦  «        | _        d S )NT)r  re   r  r  r  )rû   rü   rø   r  rI  rl  r  rm  Ú
norm_mlstmr[  Úmlstm_layerÚnorm_ffnrB  ÚffnrU  s     €r    rü   zxLSTMBlock.__init__˜  s¥   ø€ Ý‰GŒG×ÒÑÔÐØ ˆDŒKÝ*Ø#Ô/Ø”OØØœØ)/Ô)Lðñ ô ˆDŒOõ  *¨&Ñ1Ô1ˆDÔÝ(Ø#Ô/Ø”OØØœØ)/Ô)Lðñ ô ˆDŒMõ (¨Ñ/Ô/ˆDŒHˆHˆHr   Nr$  rp  r'   c                 óÎ   — |                       |¦  «        }|                      ||¦  «        \  }}||z   }|                      |¦  «        }|                      |¦  «        }||z   }||fS rž   )r}  r~  r  r€  )r  r$  rp  Úx_mlstmÚx_ffns        r    r  zxLSTMBlock.forward¬  sg   € Ø—o’o aÑ(Ô(ˆGØ!×-Ò-¨g°uÑ=Ô=‰NˆG�UØ�G‘ˆAà—M’M !Ñ$Ô$ˆEØ—H’H˜U‘O”OˆEØ�E‘	ˆAà�e�8ˆOr   rž   )r   r   r   r   rü   r)   r  r   r  r  r  r  s   @r    r   r   —  s‰   ø€ € € € € ð	0 ;ð 	0ð 	0ð 	0ð 	0ð 	0ð 	0ð(		ð 		˜Uœ\ð 		°.À4Ñ2Gð 		ÐSXÐY^ÔYeÐguÐYuÔSvð 		ð 		ð 		ð 		ð 		ð 		ð 		ð 		r   c                 ó(   ‡— dd| z  z  dz  Šˆfd„}|S )a>  
    Adapted from: https://github.com/EleutherAI/gpt-neox/blob/main/megatron/model/init_functions.py
    Fills the input Tensor with values according to the method described in Transformers without Tears: Improving
    the Normalization of Self-Attention - Nguyen, T. & Salazar, J. (2019), using a normal distribution.r²   é   ç      à?c                 ó2   •— t          j        | d‰¬¦  «        S ©Ng        )r-  Ústd©ÚinitÚnormal_©Útensorr‰  s    €r    Úinit_z small_init_method.<locals>.init_¿  ó   ø€ ÝŒ|˜F¨°#Ð6Ñ6Ô6Ð6r   r   )ri   r�  r‰  s     @r    Úsmall_init_methodr‘  ¸  s7   ø€ ð
 ��C‘‰=˜eÑ
$€Cð7ð 7ð 7ð 7ð 7ð €Lr   c                 ó(   ‡— d| z  |dz  z  Šˆfd„}|S )zh
    Adapted from https://github.com/EleutherAI/gpt-neox/blob/main/megatron/model/init_functions.py
    r²   r†  c                 ó2   •— t          j        | d‰¬¦  «        S rˆ  rŠ  r�  s    €r    r�  zwang_init_method.<locals>.init_Ë  r�  r   r   )Ún_layersri   r�  r‰  s      @r    Úwang_init_methodr•  Å  s7   ø€ ð ˆh‰,˜ ™Ñ
'€Cð7ð 7ð 7ð 7ð 7ð €Lr   c                   óp   ‡ — e Zd ZdZeZdZdgZdZdZ	de
iZd„ Z ej        ¦   «         ˆ fd„¦   «         Zˆ xZS )ÚxLSTMPreTrainedModelzR
    An abstract class for an interface to loading a pre-trained xLSTM model.
    Úbackboner   TÚhidden_statesc                 óJ   — |                       ¦   «         D ]\  }}||u r|c S ŒdS )NÚ )Únamed_modules)r  ÚmoduleÚnameÚmods       r    Ú_module_name_mapz%xLSTMPreTrainedModel._module_name_mapß  s=   € Ø×+Ò+Ñ-Ô-ð 	ð 	‰IˆD�#Ø�fˆ}ˆ}Ø���ð àˆrr   c           
      óä  •— t          ¦   «                              |¦  «         t          |t          j        ¦  «        r. t          | j        j        ¦  «        | j        j	        ¦  «         d S t          |t          j
        ¦  «        �rh|j        �t          j        |j        ¦  «         | j        j        dk    rÿd|                      |¦  «        v rèt          j        |j	        ¦  «         d|                      |¦  «        v r6t          j        |j        dt#          j        |j        ¦  «        z  ¦  «         d S d|                      |¦  «        v rit          j        |j        t#          j        dd|j        j        d         ¦  «                             |j        j        |j        j        ¬	¦  «        ¦  «         d S d S | j        j        d
k    �rZd|                      |¦  «        v �rBt          j        |j	        ¦  «         t          j        |j        d | j        j        …         |j        d | j        j        …         |j        d | j        j        …         z
  dt#          j        |j        ¦  «        z  z
  ¦  «         t          j        |j        d | j        j        …         |j        d | j        j        …         |j        | j        j        d …         z
  t#          j        dd|j        j        d         ¦  «                             |j        j        |j        j        ¬	¦  «        z   ¦  «         d S d|                      |¦  «        v r; t3          |j	        j        d         | j        j        ¬¦  «        |j	        ¦  «         d S d|                      |¦  «        v r5 t3          | j        j        | j        j        ¬¦  «        |j	        ¦  «         d S |j	        �+ t          | j        j        ¦  «        |j	        ¦  «         d S d S d S )NrD  rX  r‘   g      $Àr’   g      @g      @r:   rè   rH  g      $@rR  r   )ri   r”  ro  )rû   Ú_init_weightsÚ
isinstancer   Ú	Embeddingr‘  rø   rI  Ú
embeddingsr"  rN  r#  r‹  Úzeros_rM  r   Úcopy_r)   Ú	ones_likeÚlinspacer@   r³   r>   r=   r5  r•  Únum_hidden_layers)r  r�  r  s     €r    r¢  z"xLSTMPreTrainedModel._init_weightså  sÓ  ø€ å‰Œ×Ò˜fÑ%Ô%Ð%Ý�f�bœlÑ+Ô+ð 1	JØ6Õ˜dœkÔ5Ñ6Ô6°t´Ô7MÑNÔNÐNÐNÐNÝ˜¥¤	Ñ*Ô*ñ /	JØŒ{Ð&Ý”˜FœKÑ(Ô(Ð(ØŒ{Ô&¨(Ò2Ð2°vÀ×AVÒAVÐW]ÑA^ÔA^Ð7^Ð7^Ý”˜FœMÑ*Ô*Ð*à˜d×3Ò3°FÑ;Ô;Ð;Ð;Ý”J˜vœ{¨EµE´OÀFÄKÑ4PÔ4PÑ,PÑQÔQÐQÐQÐQØ × 5Ò 5°fÑ =Ô =Ð=Ð=Ý”JØœÝœØØØ"œKÔ-¨bÔ1ñô ÷ š"Ø#)¤;Ô#5Ø"(¤+Ô"3ð ñ ô ñ
ô 
ð 
ð 
ð 
ð >Ð=ð ”Ô(¨GÒ3Ñ3¸À$×BWÒBWÐX^ÑB_ÔB_Ð8_Ñ8_Ý”˜FœMÑ*Ô*Ð*å”
Ø”KÐ 7 $¤+Ô"7Ð 7Ô8Ø”KÐ 7 $¤+Ô"7Ð 7Ô8Ø”kÐ"9 D¤KÔ$9Ð"9Ô:ñ;à�Uœ_¨V¬[Ñ9Ô9Ñ9ñ:ñô ð õ ”
Ø”KÐ 7 $¤+Ô"7Ð 7Ô8Ø”KÐ 7 $¤+Ô"7Ð 7Ô8Ø”k $¤+Ô"7Ð"9Ð"9Ô:ñ;å”nØØØœÔ)¨"Ô-ñô ÷ ’bØ%œ{Ô1Ø$œkÔ/ð ñ ô ñ	ñô ð ð ð ð  × 5Ò 5°fÑ =Ô =Ð=Ð=ØdÕ  V¤]Ô%8¸Ô%;ÀdÄkÔFcÐdÑdÔdÐekÔerÑsÔsÐsÐsÐsØ˜t×4Ò4°VÑ<Ô<Ð<Ð<ØeÕ  T¤[Ô%<ÀtÄ{ÔGdÐeÑeÔeÐflÔfsÑtÔtÐtÐtÐtØ”Ð*Ø:Õ! $¤+Ô"9Ñ:Ô:¸6¼=ÑIÔIÐIÐIÐIð_/	Jð /	Jð\ +Ð*r   )r   r   r   r  r   r  Úbase_model_prefixÚ_no_split_modulesÚsupports_gradient_checkpointingÚ_is_statefulr   Ú_can_record_outputsr   r)   Úno_gradr¢  r  r  s   @r    r—  r—  Ñ  s›   ø€ € € € € ðð ð €LØ"ÐØ%˜ÐØ&*Ð#Ø€Là˜ðÐðð ð ð €U„]�_„_ð3Jð 3Jð 3Jð 3Jñ „_ð3Jð 3Jð 3Jð 3Jð 3Jr   r—  c            
       óP   — e Zd ZdZej        dfdededej        de	dz  fd„Z
d„ ZdS )	Ú
xLSTMCachead  
    Cache for xLSTM model which does not have attention mechanism and key value states.

    Arguments:
        config (`PreTrainedConfig):
            The configuration file defining the shape-related attributes required to initialize the static cache.
        max_batch_size (`int`):
            The batch size with which the model will be used.
        dtype (`torch.dtype`, *optional*, defaults to `torch.bfloat16`):
            The default `dtype` to use when initializing the layer.
        device (`torch.device` or `str`, *optional*):
            The device on which the cache should be initialized. Should be the same as the layer.

    Attributes:
        seqlen_offset: torch.Tensor
        dtype: torch.dtype

    Example:

        ```python
        >>> from transformers import AutoTokenizer, xLSTMForCausalLM, xLSTMCache

        >>> model = xLSTMForCausalLM.from_pretrained("NX-AI/xLSTM-7b")
        >>> tokenizer = xLSTMTokenizer.from_pretrained("NX-AI/xLSTM-7b")

        >>> inputs = tokenizer(text="I am an xLSTM", return_tensors="pt")

        >>> # Prepare a cache class and pass it to model's forward
        >>> cache_params = xLSTMCache(config=model.config, max_batch_size=1, device=model.device, dtype=model.dtype)
        >>> outputs = model(**inputs, cache_params=cache_params, use_cache=True)
        >>> outputs.cache_params
        xLSTMCache()
    Nrø   Úmax_batch_sizer=   r>   c                 ó¾   ‡‡‡‡— t          j        dgt          ‰¬¦  «        | _        ‰| _        ‰| _        ˆˆˆˆfd„t          ‰j        ¦  «        D ¦   «         | _        d S )Nr   r<   c           
      óê   •— i | ]o}|t          j        ‰‰j        ‰j        ‰j        g‰‰¬ ¦  «        t          j        ‰‰j        ‰j        g‰‰¬ ¦  «        t          j        ‰‰j        dg‰‰¬ ¦  «        f“ŒpS )r<   r   )r)   rA   r5  Úqk_head_dimÚ
v_head_dim)Ú.0Úlayerrø   r>   r=   r³  s     €€€€r    ú
<dictcomp>z'xLSTMCache.__init__.<locals>.<dictcomp>N  s£   ø€ ð 
ð 
ð 
ð ð Ý”Ø# VÔ%5°vÔ7IÈ6ÔK\Ð]ØØ!ðñ ô õ
 ”˜^¨VÔ-=¸vÔ?QÐRÐZ_ÐhnÐoÑoÔoÝ”˜^¨VÔ-=¸qÐAÈÐW]Ð^Ñ^Ô^ðð
ð 
ð 
r   )	r)   rŽ  r2  Úseqlen_offsetr=   rø   rD   rª  Ú	rnn_state)r  rø   r³  r=   r>   r¬   s    ```` r    rü   zxLSTMCache.__init__?  s{   øøøø€ õ #œ\¨1¨#µSÀÐHÑHÔHˆÔØˆŒ
ØˆŒð
ð 
ð 
ð 
ð 
ð 
ð 
õ ˜vÔ7Ñ8Ô8ð
ñ 
ô 
ˆŒˆˆr   c                 ó8   ‡ — ˆ fd„‰ j         D ¦   «         ‰ _         d S )Nc           	      óî   •— i | ]q}|t          j        ‰j        |         d          ¦  «        t          j        ‰j        |         d         ¦  «        t          j        ‰j        |         d         ¦  «        f“ŒrS )r   r   r²   )r)   Ú
zeros_liker¼  )r¸  r¹  r  s     €r    rº  z$xLSTMCache.reset.<locals>.<dictcomp>\  s~   ø€ ð 
ð 
ð 
ð ð ÝÔ  ¤°Ô!6°qÔ!9Ñ:Ô:ÝÔ  ¤°Ô!6°qÔ!9Ñ:Ô:ÝÔ  ¤°Ô!6°qÔ!9Ñ:Ô:ðð
ð 
ð 
r   )r¼  r  s   `r    ÚresetzxLSTMCache.reset[  s5   ø€ ð
ð 
ð 
ð 
ð œð
ñ 
ô 
ˆŒˆˆr   )r   r   r   r  r)   Úbfloat16r   r2  r=   r  rü   rÀ  r   r   r    r²  r²    s}   € € € € € ð ð  ðL #œ^Ø!ð
ð 
àð
ð ð
ð Œ{ð	
ð
 �d‘
ð
ð 
ð 
ð 
ð8
ð 
ð 
ð 
ð 
r   r²  c                   ól   — e Zd ZU dZej        dz  ed<   dZedz  ed<   dZ	e
ej                 dz  ed<   dS )ÚxLSTMOutputzÆ
    cache_params (`xLSTMCache`):
        The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to
        avoid providing the old `input_ids`.
    NÚlast_hidden_stateÚcache_paramsr™  )r   r   r   r  r)   ÚFloatTensorÚ__annotations__rÅ  r²  r™  r  r   r   r    rÃ  rÃ  f  sd   € € € € € € ðð ð Ô(¨4Ñ/Ð/Ð/Ñ/Ø&*€L�*˜tÑ#Ð*Ð*Ñ*Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ð9Ð9r   rÃ  c                   óÂ   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zeee	 	 	 	 dde	j
        dz  de	j
        dz  dedz  dedz  d	ee         d
eez  fd„¦   «         ¦   «         ¦   «         Zˆ xZS )Ú
xLSTMModelc                 óx  •‡— t          ¦   «                              ‰¦  «         t          j        ‰j        ‰j        ¦  «        | _        t          j        ˆfd„t          ‰j	        ¦  «        D ¦   «         ¦  «        | _
        t          ‰j        ‰j        ¬¦  «        | _        d| _        |                      ¦   «          d S )Nc                 ó.   •— g | ]}t          ‰¦  «        ‘ŒS r   )r   )r¸  rJ   rø   s     €r    ú
<listcomp>z'xLSTMModel.__init__.<locals>.<listcomp>z  s!   ø€ Ð$ZÐ$ZÐ$Z¸A¥Z°Ñ%7Ô%7Ð$ZÐ$ZÐ$Zr   )re   F)rû   rü   r   r¤  Ú
vocab_sizeÚembedding_dimr¥  Ú
ModuleListrD   Ú
num_blocksÚblocksr  rI  rl  Úout_normÚgradient_checkpointingÚ	post_initrU  s    `€r    rü   zxLSTMModel.__init__v  s�   øø€ Ý‰Œ×Ò˜Ñ Ô Ð åœ, vÔ'8¸&Ô:NÑOÔOˆŒÝ”mÐ$ZÐ$ZÐ$ZÐ$ZÅÀvÔGXÑAYÔAYÐ$ZÑ$ZÔ$ZÑ[Ô[ˆŒÝ$ VÔ%7¸V¼_ÐMÑMÔMˆŒØ&+ˆÔ#à�ŠÑÔÐÐÐr   c                 ó   — | j         S rž   ©r¥  r  s    r    Úget_input_embeddingszxLSTMModel.get_input_embeddings€  s
   € ØŒÐr   c                 ó   — || _         d S rž   rÖ  )r  Únew_embeddings     r    Úset_input_embeddingszxLSTMModel.set_input_embeddingsƒ  s   € Ø'ˆŒˆˆr   NÚ	input_idsÚinputs_embedsrÅ  Ú	use_cacher¬   r'   c           
      óH  — |                      d¦  «        }|€| j        j        }|du |duz  rt          d¦  «        ‚|€|                      |¦  «        }|r7|€5t          | j        |                     d¦  «        |j        |j        ¬¦  «        }|}| j	        �s²| j        j
        |j        d         k     �r–|�s“d}t          j        ¦   «         5  |€!t          | j        |j        d         ¬¦  «        }t          j        |¦  «        }	||j        d         k     �r|dd…|t          || j        j
        z   |j        d         ¦  «        …f         }
t!          | j        ¦  «        D ]\  }} ||
|j        |         ¬¦  «        \  }
}t'          t)          |j        |         ¦  «        ¦  «        D ]0}||         }|j        |         |                              |¦  «         Œ1d	|_        Œ€|
|	dd…|t          || j        j
        z   |j        d         ¦  «        …f<   || j        j
        z  }||j        d         k     �°|	}ddd¦  «         n# 1 swxY w Y   n™t!          | j        ¦  «        D ]„\  }} |||�|j        |         nd¦  «        \  }}|r_t'          t)          |j        |         ¦  «        ¦  «        D ]0}||         }|j        |         |                              |¦  «         Œ1d	|_        Œ…|r|xj        |j        d         z  c_        |                      |¦  «        }t3          ||¬
¦  «        S )úr
        cache_params (`xLSTMCache`, *optional*):
            The xLSTMCache that carries the RNN states.
        Úoutput_hidden_statesNz:You must specify exactly one of input_ids or inputs_embedsr   rè   r   )rø   r³  )rp  F)rÄ  rÅ  )Úgetrø   rà  rŸ   r¥  r²  Úsizer>   r=   ÚtrainingÚmax_inference_chunksizer@   r)   r°  r¿  ÚminÚ	enumeraterÑ  r¼  rD   Úlenr§  Úrnn_state_initialr»  rÒ  rÃ  )r  rÛ  rÜ  rÅ  rÝ  r¬   rà  r™  ÚoffsetÚfinal_stateÚhidden_states_chunkÚ	layer_idxÚxlstm_blockr¼  Ú	state_idxÚlocal_rnn_states                   r    r  zxLSTMModel.forward†  sê  € ð"  &ŸzšzÐ*@ÑAÔAÐØÐ'Ø#'¤;Ô#CÐ à˜Ð -°tÐ";Ñ<ð 	[ÝÐYÑZÔZÐZàÐ Ø ŸOšO¨IÑ6Ô6ˆMàð 	˜Ð-Ý%Ø”˜]×/Ò/°Ñ2Ô2¸=Ô;OÐWdÔWjðñ ô ˆLð &ˆð ”ñ'	;à”Ô3°mÔ6IÈ!Ô6LÒLÑLØ(ñ Mð ˆFÝ”‘”ð ,ð ,ØÐ'Ý#-°T´[ÐQ^ÔQdÐefÔQgÐ#hÑ#hÔ#h�LÝ#Ô.¨}Ñ=Ô=�Ø˜}Ô2°1Ô5Ò5Ñ5Ø*7Ø˜˜˜6¥C¨°´Ô1TÑ(TÐVcÔViÐjkÔVlÑ$mÔ$mÐmÐmô+Ð'õ 3<¸D¼KÑ2HÔ2Hð ?ð ?Ñ.˜	 ;Ø9D¸Ø/Ø".Ô"8¸Ô"Cð:ñ :ô :Ñ6Ð+¨Yõ */­s°<Ô3IÈ)Ô3TÑ/UÔ/UÑ)VÔ)Vð `ð `˜IØ.7¸	Ô.B˜OØ(Ô2°9Ô=¸iÔH×NÒNÈÑ_Ô_Ð_Ð_Ø9>˜Ô6Ð6ð ,ð  Ø˜˜˜6¥C¨°´Ô1TÑ(TÐVcÔViÐjkÔVlÑ$mÔ$mÐmÐmñð ˜dœkÔAÑA�Fð! ˜}Ô2°1Ô5Ò5Ñ5ð" !,�ð+,ð ,ð ,ñ ,ô ,ð ,ð ,ð ,ð ,ð ,ð ,øøøð ,ð ,ð ,ð ,øõ. +4°D´KÑ*@Ô*@ð 
;ð 
;Ñ&�	˜;Ø+6¨;Ø!Ø9EÐ9Q�LÔ*¨9Ô5Ð5ÐW[ñ,ô ,Ñ(�˜yð
  ð ;Ý%*­3¨|Ô/EÀiÔ/PÑ+QÔ+QÑ%RÔ%Rð \ð \˜	Ø*3°IÔ*>˜Ø$Ô.¨yÔ9¸)ÔD×JÒJÈ?Ñ[Ô[Ð[Ð[Ø5:�LÔ2øàð 	AØÐ&Ô&¨-Ô*=¸aÔ*@Ñ@Ð&Ô&àŸš mÑ4Ô4ˆåØ+Ø%ð
ñ 
ô 
ð 	
s   Ã
E&H<È<I ÉI )NNNN)r   r   r   rü   r×  rÚ  r   r   r   r)   Ú
LongTensorr²  rn   r   r   r  rÃ  r  r  r  s   @r    rÉ  rÉ  t  s  ø€ € € € € ðð ð ð ð ðð ð ð(ð (ð (ð  ØØð .2Ø15Ø*.Ø!%ðP
ð P
àÔ# dÑ*ðP
ð Ô'¨$Ñ.ðP
ð ! 4Ñ'ð	P
ð
 ˜$‘;ðP
ð Ð+Ô,ðP
ð 
�Ñ	ðP
ð P
ð P
ñ „^ñ „_ñ  ÔðP
ð P
ð P
ð P
ð P
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
dz  ed<   dZeej                 dz  ed<   dS )ÚxLSTMCausalLMOutputaP  
    loss (`torch.FloatTensor` of shape `(1,)`, *optional*, returned when `labels` is provided):
        Language modeling loss (for next-token prediction).
    logits (`torch.FloatTensor` of shape `(batch_size, sequence_length, config.vocab_size)`):
        Prediction scores of the language modeling head (scores for each vocabulary token before SoftMax).
    cache_params (`xLSTMCache`, *optional*, carrying the RNN states):
        The state of the model at the last time step. Can be used in a forward method with the next `input_ids` to
        avoid providing the old `input_ids`.
    NÚlossÚlogitsrÅ  r™  )r   r   r   r  ró  r)   rÆ  rÇ  rô  rÅ  r²  r™  r  r   r   r    rò  rò  Ü  s€   € € € € € € ðð ð &*€Dˆ%Ô
˜dÑ
"Ð)Ð)Ñ)Ø'+€FˆEÔ Ñ$Ð+Ð+Ñ+Ø&*€L�*˜tÑ#Ð*Ð*Ñ*Ø59€M�5˜Ô*Ô+¨dÑ2Ð9Ð9Ñ9Ð9Ð9r   rò  c                   óÔ   ‡ — e Zd Zˆ fd„Zd„ Zd„ Zd„ Zd„ Zee		 	 	 	 	 dde
j        dz  de
j        dz  d	edz  d
e
j        dz  dedz  dee         deez  fd„¦   «         ¦   «         Zˆ xZS )ÚxLSTMForCausalLMc                 óæ   •— t          ¦   «                              |¦  «         t          |¦  «        | _        t	          j        |j        |j        d¬¦  «        | _        |  	                    ¦   «          d S )NF)r#  )
rû   rü   rÉ  r˜  r   rN  rI  rÍ  Úlm_headrÔ  rU  s     €r    rü   zxLSTMForCausalLM.__init__ñ  s^   ø€ Ý‰Œ×Ò˜Ñ Ô Ð Ý" 6Ñ*Ô*ˆŒÝ”y Ô!3°VÔ5FÈUÐSÑSÔSˆŒà�ŠÑÔÐÐÐr   c                 ó   — | j         S rž   ©rø  r  s    r    Úget_output_embeddingsz&xLSTMForCausalLM.get_output_embeddingsø  s
   € ØŒ|Ðr   c                 ó   — || _         d S rž   rú  ©r  Únew_embeddingss     r    Úset_output_embeddingsz&xLSTMForCausalLM.set_output_embeddingsû  s   € Ø%ˆŒˆˆr   c                 ó4   — | j                              ¦   «         S rž   )r˜  r×  r  s    r    r×  z%xLSTMForCausalLM.get_input_embeddingsþ  s   € ØŒ}×1Ò1Ñ3Ô3Ð3r   c                 ó6   — | j                              |¦  «        S rž   )r˜  rÚ  rý  s     r    rÚ  z%xLSTMForCausalLM.set_input_embeddings  s   € ØŒ}×1Ò1°.ÑAÔAÐAr   NrÛ  rÜ  rÅ  ÚlabelsrÝ  r¬   r'   c                 ó�  —  | j         |f|||dœ|¤Ž}|d         }|                      |                     | j        j        j        ¦  «        ¦  «                             ¦   «         }	| j        sõ| j        j        |	j	        d         k     rÚd}
t          j        ¦   «         5  |
|	j	        d         k     r›t          |	dd…|
t          |
| j        j        z   |	j	        d         ¦  «        …f         | j        j        ¦  «        |	dd…|
t          |
| j        j        z   |	j	        d         ¦  «        …f<   |
| j        j        z  }
|
|	j	        d         k     °›ddd¦  «         n# 1 swxY w Y   nt          |	| j        j        ¦  «        }	d}|�­|                     |	j        ¦  «        }|	ddd…dd…f                              ¦   «         }|ddd…f                              ¦   «         }t#          ¦   «         } ||                     d|                     d¦  «        ¦  «        |                     d¦  «        ¦  «        }t)          ||	|j        |j        ¬¦  «        S )rß  )rÅ  rÜ  rÝ  r   r   N.r:   )ró  rô  rÅ  r™  )r˜  rø  r³   r"  r=   rp   rã  rø   rä  r@   r)   r°  r   rå  Úoutput_logit_soft_capr>   rê   r   rk   râ  rò  rÅ  r™  )r  rÛ  rÜ  rÅ  r  rÝ  r¬   Úxlstm_outputsr™  rô  ré  ró  Úshift_logitsÚshift_labelsÚloss_fcts                  r    r  zxLSTMForCausalLM.forward  s©  € ð &˜œØð
à%Ø'Øð	
ð 
ð
 ð
ð 
ˆð & aÔ(ˆà—’˜m×.Ò.¨t¬|Ô/BÔ/HÑIÔIÑJÔJ×PÒPÑRÔRˆàŒ}ð 
	I ¤Ô!DÀvÄ|ÐTUÄÒ!VÐ!VØˆFÝ”‘”ð Bð BØ˜vœ|¨AœÒ.Ð.ÝmuØ˜q˜q˜q &­3¨v¸¼Ô8[Ñ/[Ð]cÔ]iÐjkÔ]lÑ+mÔ+mÐ"mÐmÔnØœÔ9ñnô n�F˜1˜1˜1˜f¥s¨6°D´KÔ4WÑ+WÐY_ÔYeÐfgÔYhÑ'iÔ'iÐiÐiÑjð ˜dœkÔAÑA�Fð ˜vœ|¨AœÒ.Ð.ðBð Bð Bñ Bô Bð Bð Bð Bð Bð Bð Bøøøð Bð Bð Bð Bøõ ˜f d¤kÔ&GÑHÔHˆFàˆØÐà—Y’Y˜vœ}Ñ-Ô-ˆFà! # s¨ s¨A¨A¨A +Ô.×9Ò9Ñ;Ô;ˆLØ! # q r r 'œ?×5Ò5Ñ7Ô7ˆLå'Ñ)Ô)ˆHØ�8˜L×-Ò-¨b°,×2CÒ2CÀBÑ2GÔ2GÑHÔHÈ,×J[ÒJ[Ð\^ÑJ_ÔJ_Ñ`Ô`ˆDå"ØØØ&Ô3Ø'Ô5ð	
ñ 
ô 
ð 	
s   ÂB-EÅEÅEr  )r   r   r   rü   rû  rÿ  r×  rÚ  r   r   r)   rð  rÆ  r²  rn   r   r   r  rò  r  r  r  s   @r    rö  rö  ï  s)  ø€ € € € € ðð ð ð ð ðð ð ð&ð &ð &ð4ð 4ð 4ðBð Bð Bð Øð .2Ø26Ø*.Ø*.Ø!%ð4
ð 4
àÔ# dÑ*ð4
ð Ô(¨4Ñ/ð4
ð ! 4Ñ'ð	4
ð
 Ô  4Ñ'ð4
ð ˜$‘;ð4
ð Ð+Ô,ð4
ð 
Ð$Ñ	$ð4
ð 4
ð 4
ñ „^ñ Ôð4
ð 4
ð 4
ð 4
ð 4
r   rö  )rö  rÉ  r—  rž   )	NNNNNNNr+   r   )r+   r   rc   )NNNNFFr+   rc   )NNNFrc   r+   )Pr  Údataclassesr   r)   Útorch.nn.functionalr   r´   r«   Útorch.nnr   r›  r   r‹  Ú
generationr   Úmodeling_layersr	   Úmodeling_utilsr
   Úprocessing_utilsr   Úutilsr   r   r   r   r   Úutils.genericr   Úutils.output_capturingr   Úconfiguration_xlstmr   Úxlstm.xlstm_large.modelr   r  r   r   r   Úexternal_xlstmr   Úcollections.abcr!   Ú	functoolsr"   Útypingr#   r$   r  r  rz  Údictr2  rp   rb   rŽ   rn   r¦   r®   ré   r=   rÆ   r×   rÁ  rã   rõ   ÚModuler÷   r4  rB  r[  r‘  r•  r—  r²  rÃ  rÉ  rò  rö  Ú__all__r   r   r    ú<module>r     s[  ðð Ð à !Ð !Ð !Ð !Ð !Ð !à €€€Ø Ð Ð Ð Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð Ø %Ð %Ð %Ð %Ð %Ð %à &Ð &Ð &Ð &Ð &Ð &Ø )Ð )Ð )Ð )Ð )Ð )Ø 9Ð 9Ð 9Ð 9Ð 9Ð 9Ø -Ð -Ð -Ð -Ð -Ð -Ø &Ð &Ð &Ð &Ð &Ð &Ø jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jÐ jØ 7Ð 7Ð 7Ð 7Ð 7Ð 7Ø 5Ð 5Ð 5Ð 5Ð 5Ð 5Ø ,Ð ,Ð ,Ð ,Ð ,Ð ,ð ÐÑÔð SØ?Ð?Ð?Ð?Ð?Ð?ØLÐLÐLÐLÐLÐLÐLÐLÐLÐLà€Nðð ð ð ð Ð/°ñ ô ð ñ ð )Ð(Ð(Ð(Ð(Ð(Ø!Ð!Ð!Ð!Ð!Ð!ØÐÐÐÐÐàAÐAÐAÐAÐAÐAà ¤¨e¬l¸E¼LÐ HÔIÐØ˜#Ð2Ð2Ô3€Nà€Nð:ð :˜œð :°%¸%¼,Ñ2FÈÑ2Mð :ÐY^ÔYeð :ð :ð :ð :ð0 ,0Ø+/Ø04Ø,0Ø,0Ø15Ø!%ØØðX:ð X:ØŒlðX:àŒlðX:ð ŒlðX:ð Œlð	X:ð
 ”\ DÑ(ðX:ð ”\ DÑ(ðX:ð  œ,¨Ñ-ðX:ð ”l TÑ)ðX:ð ”l TÑ)ðX:ð !œ<¨$Ñ.ðX:ð ˜$‘,ðX:ð ðX:ð ðX:ð 
ˆuŒ|˜Uœ\¨5¬<Ð7Ô	8ðX:ð X:ð X:ð X:ðJ ØØðL,ð L,ØŒlðL,àŒlðL,ð ŒlðL,ð
 ”\ðL,ð ”\ðL,ð  œ,ðL,ð ŒlðL,ð ŒlðL,ð ðL,ð ðL,ð ðL,ð ðL,ð 
ˆuŒ|˜Uœ\¨5¬<Ð7Ô	8ðL,ð L,ð L,ð L,ðh '+Ø&*Ø&*Ø!%Ø#(Ø"'ØØðOð OØŒ|ðOàŒ\ðOð Œ|ðOð Œ|ð	Oð
 Œ|ðOð ”˜tÑ#ðOð ”˜tÑ#ðOð ”˜tÑ#ðOð ˜$‘,ðOð !ðOð  ðOð ðOð ðOð 
ØŒØŒØŒØˆeŒl˜EœL¨%¬,Ð6Ô7¸$Ñ>ØˆeŒl˜EœL¨%¬,Ð6Ô7¸$Ñ>ð		@ô
ðOð Oð Oð Oðn *.Ø)-Ø)-Ø#(ØØð?ð ?ØŒ|ð?àŒ\ð?ð Œ|ð?ð Œ|ð	?ð
 Œ|ð?ð ”< $Ñ&ð?ð ”< $Ñ&ð?ð ”< $Ñ&ð?ð !ð?ð ð?ð ð?ð 
Œ˜˜eœl¨E°%´,ÀÄÈeÌlÐ2ZÔ,[Ð[Ô\Ñ	\ð?ð ?ð ?ð ?ðT Ø#(¤=ð=Cð =CØŒ|ð=CàŒ\ð=Cð Œ|ð=Cð Œ|ð	=Cð
 Œ|ð=Cð ”ð=Cð ”ð=Cð ”ð=Cð ð=Cð ”[ð=Cð 
ˆuŒ|˜U 5¤<°´¸u¼|Ð#KÔLÐLÔ	Mð=Cð =Cð =Cð =CðJ *.Ø)-Ø)-Ø#(ØØ#(¤=ðGð GØŒ|ðGàŒ\ðGð Œ|ðGð Œ|ð	Gð
 Œ|ðGð ”< $Ñ&ðGð ”< $Ñ&ðGð ”< $Ñ&ðGð !ðGð ðGð ”[ðGð 
ØŒØŒØŒØˆeŒl˜EœL¨%¬,Ð6Ô7¸$Ñ>ØˆeŒl˜EœL¨%¬,Ð6Ô7¸$Ñ>ð		@ô
ðGð Gð Gð Gð` *.Ø)-Ø)-Ø#(ØØ-2¬^Øð<ð <Ø (ð<àŒ|ð<ð Œ\ð<ð Œ|ð	<ð
 Œ|ð<ð Œ|ð<ð ”< $Ñ&ð<ð ”< $Ñ&ð<ð ”< $Ñ&ð<ð !ð<ð ð<ð  %œ{ð<ð ð<ð 
Œ˜˜eœl¨E°%´,ÀÄÈeÌlÐ2ZÔ,[Ð[Ô\Ñ	\ð<ð <ð <ð <ðN *.Ø)-Ø)-Ø#'ØØ-2¬^ØØ$ð!Sð SØ (ðSà'ðSð $ðSð Œ|ð	Sð
 Œ\ðSð Œ|ðSð Œ|ðSð Œ|ðSð ”< $Ñ&ðSð ”< $Ñ&ðSð ”< $Ñ&ðSð !ðSð ðSð  %œ{ðSð ðSð  ð!Sð" 
Œ˜˜eœl¨E°%´,ÀÄÈeÌlÐ2ZÔ,[Ð[Ô\Ñ	\ð#Sð Sð Sð Sðjt$ð t$ð t$ð t$ð t$�r”yñ t$ô t$ð t$ðl7ð 7ð 7ð 7ð 7�r”yñ 7ô 7ð 7ðrPð Pð Pð Pð P "¤)ñ Pô Pð Pðd-ð -ð -ð -ð -˜2œ9ñ -ô -ð -ð^Fð Fð Fð Fð F�R”Yñ Fô Fð FðPð ð ð ð Ð/ñ ô ð ðB
ð 
ð 
ð	ð 	ð 	ðHJð HJð HJð HJð HJ˜?ñ HJô HJð HJðVG
ð G
ð G
ð G
ð G
ñ G
ô G
ð G
ðT Ø
ð	:ð 	:ð 	:ð 	:ð 	:�+ñ 	:ô 	:ñ „ñ „ð	:ð ðd
ð d
ð d
ð d
ð d
Ð%ñ d
ô d
ñ „ðd
ðN Ø
ð:ð :ð :ð :ð :˜+ñ :ô :ñ „ñ „ð:ð" ðJ
ð J
ð J
ð J
ð J
Ð+¨_ñ J
ô J
ñ „ðJ
ðZð ð €€€r   