Ë
      çi´  ã                   óì   — d 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mZ ddlmZ dd	lmZ  G d
„ dej,                  «      Z G d„ deee      «      Z G d„ de«      Zy)z—Demo of a simple LSTM language model.

Code is adapted from the PyTorch examples at
https://github.com/pytorch/examples/blob/main/word_language_model

é    )ÚIteratorÚSized)ÚOptionalN)ÚTensor)Ú	Optimizer)Ú
DataLoaderÚSampler)ÚLightningModule©Ú	WikiText2c                   ó‚   ‡ — e Zd Z	 ddededededef
ˆ fd„Zdd„Zd	ed
eeef   deeef   fd„Z	dedeeef   fd„Z
ˆ xZS )Ú
SimpleLSTMÚ
vocab_sizeÚninpÚnhidÚnlayersÚdropoutc                 óJ  •— t         ‰| �  «        || _        t        j                  |«      | _        t        j                  ||«      | _        t        j                  ||||d¬«      | _	        t        j                  ||«      | _        || _        || _        | j                  «        y )NT)r   Úbatch_first)ÚsuperÚ__init__r   ÚnnÚDropoutÚdropÚ	EmbeddingÚencoderÚLSTMÚrnnÚLinearÚdecoderr   r   Úinit_weights)Úselfr   r   r   r   r   Ú	__class__s         €úq/Volumes/fast/ai/experiments/voice-extract-mac/.venv/lib/python3.12/site-packages/pytorch_lightning/demos/lstm.pyr   zSimpleLSTM.__init__   s}   ø€ ô 	‰ÑÔØ$ˆŒÜ—J‘J˜wÓ'ˆŒ	Ü—|‘| J°Ó5ˆŒÜ—7‘7˜4  w¸ÈTÔRˆŒÜ—y‘y  zÓ2ˆŒØˆŒØˆŒ	Ø×ÑÕó    Úreturnc                 ó>  — t         j                  j                  | j                  j                  dd«       t         j                  j                  | j                  j                  «       t         j                  j                  | j                  j                  dd«       y )Ngš™™™™™¹¿gš™™™™™¹?)r   ÚinitÚuniform_r   ÚweightÚzeros_r    Úbias©r"   s    r$   r!   zSimpleLSTM.init_weights$   s\   € Ü
�‰×Ñ˜Ÿ™×,Ñ,¨d°CÔ8Ü
�‰�‰�t—|‘|×(Ñ(Ô)Ü
�‰×Ñ˜Ÿ™×,Ñ,¨d°CÕ8r%   ÚinputÚhiddenc                 ó  — | j                  | j                  |«      «      }| j                  ||«      \  }}| j                  |«      }| j                  |«      j	                  d| j
                  «      }t        j                  |d¬«      |fS )Néÿÿÿÿé   )Údim)r   r   r   r    Úviewr   ÚFÚlog_softmax)r"   r.   r/   ÚembÚoutputÚdecodeds         r$   ÚforwardzSimpleLSTM.forward)   sp   € Ø�i‰i˜Ÿ™ UÓ+Ó,ˆØŸ™ # vÓ.‰ˆ�Ø—‘˜6Ó"ˆØ—,‘,˜vÓ&×+Ñ+¨B°·±Ó@ˆÜ�}‰}˜W¨!Ô,¨fÐ4Ð4r%   Ú
batch_sizec                 óÐ   — t        | j                  «       «      }|j                  | j                  || j                  «      |j                  | j                  || j                  «      fS ©N)ÚnextÚ
parametersÚ	new_zerosr   r   )r"   r;   r*   s      r$   Úinit_hiddenzSimpleLSTM.init_hidden0   sQ   € Ü�d—o‘oÓ'Ó(ˆà×Ñ˜TŸ\™\¨:°t·y±yÓAØ×Ñ˜TŸ\™\¨:°t·y±yÓAð
ð 	
r%   )éþ�  é   rC   é   gš™™™™™É?©r&   N)Ú__name__Ú
__module__Ú__qualname__ÚintÚfloatr   r!   r   Útupler:   rA   Ú__classcell__©r#   s   @r$   r   r      s�   ø„ àloñØðØ-0ðØ>AðØRUðØdiõó9ð
5˜Vð 5¨U°6¸6°>Ñ-Bð 5ÀuÈVÐU[È^ÑG\ó 5ð
 cð 
¨e°F¸F°NÑ.C÷ 
r%   r   c                   óP   ‡ — e Zd Zdededdfˆ fd„Zdeee      fd„Zdefd„Z	ˆ xZ
S )ÚSequenceSamplerÚdatasetr;   r&   Nc                 óŒ   •— t         ‰| �  «        || _        || _        t	        | j                  «      | j                  z  | _        y r=   )r   r   rP   r;   ÚlenÚ
chunk_size)r"   rP   r;   r#   s      €r$   r   zSequenceSampler.__init__9   s5   ø€ Ü‰ÑÔØˆŒØ$ˆŒÜ˜dŸl™lÓ+¨t¯©Ñ>ˆ�r%   c           	   #   óÎ   K  — t        | j                  «      }t        | j                  «      D ]4  }t	        t        |||| j
                  z  z
  | j                  «      «      –— Œ6 y ­wr=   )rR   rP   ÚrangerS   Úlistr;   )r"   ÚnÚis      r$   Ú__iter__zSequenceSampler.__iter__?   sM   è ø€ Ü�—‘ÓˆÜ�t—‘Ö'ˆAÜ”u˜Q  Q¨¯©Ñ%8Ñ 9¸4¿?¹?ÓKÓLÓLñ (ùs   ‚A#A%c                 ó   — | j                   S r=   )rS   r-   s    r$   Ú__len__zSequenceSampler.__len__D   s   € Ø�‰Ðr%   )rF   rG   rH   r   rI   r   r   rV   rY   r[   rL   rM   s   @r$   rO   rO   8   s@   ø„ ð? ð ?°3ð ?¸4õ ?ðM˜( 4¨¡9Ñ-ó Mð
˜÷ r%   rO   c                   ól   ‡ — e Zd Zddefˆ fd„Zdd„Zdeeef   dedefd„Zdd„Z	de
fd	„Zdefd
„Zˆ xZS )ÚLightningLSTMr   c                 óR   •— t         ‰| �  «        t        |¬«      | _        d | _        y )N)r   )r   r   r   Úmodelr/   )r"   r   r#   s     €r$   r   zLightningLSTM.__init__I   s!   ø€ Ü‰ÑÔÜ¨:Ô6ˆŒ
Ø7;ˆ�r%   r&   c                 ó   — d | _         y r=   )r/   r-   s    r$   Úon_train_epoch_endz LightningLSTM.on_train_epoch_endN   s	   € Øˆ�r%   ÚbatchÚ	batch_idxc                 ó¾  — |\  }}| j                   €/| j                  j                  |j                  d«      «      | _         | j                   d   j	                  «       | j                   d   j	                  «       f| _         | j                  || j                   «      \  }| _         t        j                  ||j                  d«      «      }| j                  d|d¬«       |S )Nr   r2   r1   Ú
train_lossT)Úprog_bar)	r/   r_   rA   ÚsizeÚdetachr5   Únll_lossr4   Úlog)r"   rb   rc   r.   Útargetr8   Úlosss          r$   Útraining_stepzLightningLSTM.training_stepQ   s«   € Ø‰ˆˆvØ�;‰;ÐØŸ*™*×0Ñ0°·±¸A³Ó?ˆDŒKØ—{‘{ 1‘~×,Ñ,Ó.°·±¸A±×0EÑ0EÓ0GÐHˆŒØ"Ÿj™j¨°·±Ó<Ñˆ�”Ü�z‰z˜& &§+¡+¨b£/Ó2ˆØ�‰�˜t¨dˆÔ3Øˆr%   c                 ó   — t        d¬«       y )NT)Údownloadr   r-   s    r$   Úprepare_datazLightningLSTM.prepare_data[   s
   € Ü˜4Ö r%   c                 óF   — t        «       }t        |t        |d¬«      ¬«      S )Né   )r;   )Úbatch_sampler)r   r   rO   )r"   rP   s     r$   Útrain_dataloaderzLightningLSTM.train_dataloader^   s   € Ü“+ˆÜ˜'´ÀÐUWÔ1XÔYÐYr%   c                 ó`   — t         j                  j                  | j                  «       d¬«      S )Ng      4@)Úlr)ÚtorchÚoptimÚSGDr?   r-   s    r$   Úconfigure_optimizersz"LightningLSTM.configure_optimizersb   s    € Ü�{‰{�‰˜tŸ™Ó0°TˆÓ:Ð:r%   )rB   rE   )rF   rG   rH   rI   r   ra   rK   r   rm   rp   r   rt   r   rz   rL   rM   s   @r$   r]   r]   H   sV   ø„ ñ< 3õ <ó
ð 5¨°¨Ñ#8ð ÀSð ÈVó ó!ðZ *ó Zð; i÷ ;r%   r]   )Ú__doc__Úcollections.abcr   r   Útypingr   rw   Útorch.nnr   Útorch.nn.functionalÚ
functionalr5   r   Útorch.optimr   Útorch.utils.datar   r	   Úpytorch_lightning.corer
   Ú#pytorch_lightning.demos.transformerr   ÚModuler   rV   rI   rO   r]   © r%   r$   Ú<module>r‡      s_   ðñ÷ ,Ý ã Ý ß Ð Ý Ý !ß 0å 2Ý 9ô
�—‘ô 
ôD�g˜d 3™iÑ(ô ô ;�Oõ ;r%   