o
    zit                     @   s@  d dl mZmZmZmZmZmZ d dlZd dlm	Z	 d dl
m	  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 d dlmZmZ d dlmZ d d	lmZ G d
d deZG dd deZG dd deZ G dd deZ!G dd deZ"G dd deZ#G dd de"Z$G dd deZ%G dd de	j&Z'dS )    )AnyDictIteratorListOptionalTupleN)Tensor)	Optimizer)LRScheduler)
DataLoaderDatasetIterableDatasetSubset)LightningDataModuleLightningModule)LightningOptimizer)STEP_OUTPUTc                   @   sJ   e Zd ZdZdedefddZdedeeef fdd	Z	defd
dZ
dS )RandomDictDatasetP
    .. warning::  This is meant for testing/debugging and is experimental.
    sizelengthc                 C      || _ t||| _d S Nlentorchrandndataselfr   r    r    Z/home/ubuntu/.local/lib/python3.10/site-packages/pytorch_lightning/demos/boring_classes.py__init__"      zRandomDictDataset.__init__indexreturnc                 C   s   | j | }|d }||dS )N   )abr   )r   r$   r'   r(   r    r    r!   __getitem__&   s   

zRandomDictDataset.__getitem__c                 C      | j S r   r   r   r    r    r!   __len__+      zRandomDictDataset.__len__N)__name__
__module____qualname____doc__intr"   r   strr   r*   r.   r    r    r    r!   r      s
    r   c                   @   sB   e Zd ZdZdedefddZdedefdd	Zdefd
dZdS )RandomDatasetr   r   r   c                 C   r   r   r   r   r    r    r!   r"   4   r#   zRandomDataset.__init__r$   r%   c                 C   s
   | j | S r   r)   )r   r$   r    r    r!   r*   8      
zRandomDataset.__getitem__c                 C   r+   r   r,   r-   r    r    r!   r.   ;   r/   zRandomDataset.__len__N)	r0   r1   r2   r3   r4   r"   r   r*   r.   r    r    r    r!   r6   /   s
    r6   c                   @   s4   e Zd ZdZdedefddZdee fddZd	S )
RandomIterableDatasetr   r   countc                 C      || _ || _d S r   r9   r   r   r   r9   r    r    r!   r"   D      
zRandomIterableDataset.__init__r%   c                 c   s$    t | jD ]	}t| jV  qd S r   )ranger9   r   r   r   r   _r    r    r!   __iter__H   s   zRandomIterableDataset.__iter__N)	r0   r1   r2   r3   r4   r"   r   r   rA   r    r    r    r!   r8   ?   s    r8   c                   @   sB   e Zd ZdZdedefddZdee fddZdefd	d
Z	dS )RandomIterableDatasetWithLenr   r   r9   c                 C   r:   r   r;   r<   r    r    r!   r"   R   r=   z%RandomIterableDatasetWithLen.__init__r%   c                 c   s&    t t| D ]	}t| jV  qd S r   )r>   r   r   r   r   r?   r    r    r!   rA   V   s   z%RandomIterableDatasetWithLen.__iter__c                 C   r+   r   )r9   r-   r    r    r!   r.   Z   r/   z$RandomIterableDatasetWithLen.__len__N)
r0   r1   r2   r3   r4   r"   r   r   rA   r.   r    r    r    r!   rB   M   s
    rB   c                       s   e Zd ZdZd! fddZdedefddZd"d	ed
ee defddZde	defddZ
de	dedefddZde	dedefddZde	dedefddZdeeejj ee f fddZdefddZdefddZdefddZdefdd Z  ZS )#BoringModela=  Testing PL Module.

    Use as follows:
    - subclass
    - modify the behavior for what you want

    .. warning::  This is meant for testing/debugging and is experimental.

    Example::

        class TestModel(BoringModel):
            def training_step(self, ...):
                ...  # do your own thing

    r%   Nc                    s   t    tjdd| _d S )N    r&   )superr"   r   nnLinearlayerr-   	__class__r    r!   r"   o   s   
zBoringModel.__init__xc                 C   s
   |  |S r   )rH   r   rK   r    r    r!   forwards   r7   zBoringModel.forwardpredslabelsc                 C   s"   |d u r	t |}t jj||S r   )r   	ones_likerF   
functionalmse_loss)r   rN   rO   r    r    r!   lossv   s   
zBoringModel.lossbatchc                 C   s   | |}|  |S r   )rS   )r   rT   outputr    r    r!   step|   s   
zBoringModel.step	batch_idxc                 C      d|  |iS )NrS   rV   r   rT   rW   r    r    r!   training_step      zBoringModel.training_stepc                 C   rX   )NrK   rY   rZ   r    r    r!   validation_step   r\   zBoringModel.validation_stepc                 C   rX   )NyrY   rZ   r    r    r!   	test_step   r\   zBoringModel.test_stepc                 C   s2   t jj|  dd}t jjj|dd}|g|gfS )Ng?lr   )	step_size)r   optimSGD
parameterslr_schedulerStepLR)r   	optimizerrg   r    r    r!   configure_optimizers   s   z BoringModel.configure_optimizersc                 C      t tddS NrD   @   r   r6   r-   r    r    r!   train_dataloader   r\   zBoringModel.train_dataloaderc                 C   rk   rl   rn   r-   r    r    r!   val_dataloader   r\   zBoringModel.val_dataloaderc                 C   rk   rl   rn   r-   r    r    r!   test_dataloader   r\   zBoringModel.test_dataloaderc                 C   rk   rl   rn   r-   r    r    r!   predict_dataloader   r\   zBoringModel.predict_dataloaderr%   Nr   )r0   r1   r2   r3   r"   r   rM   r   rS   r   rV   r4   r   r[   r]   r_   r   r   r   rd   r	   r
   rj   r   ro   rp   rq   rr   __classcell__r    r    rI   r!   rC   ^   s    "rC   c                       sl   e Zd ZdZd fddZdeddfddZdefd	d
ZdefddZ	defddZ
defddZ  ZS )BoringDataModuler   r%   Nc                    s   t    tdd| _d S )NrD      )rE   r"   r6   random_fullr-   rI   r    r!   r"      s   
zBoringDataModule.__init__stagec                 C   s~   |dkrt | jtdd| _|dv rt | jtddd| _|dkr,t | jtddd| _|dkr=t | jtdd	d| _d S d S )
Nfitrm   )indices)ry   validate   test   predictrv   )r   rw   r>   random_train
random_valrandom_testrandom_predict)r   rx   r    r    r!   setup   s   zBoringDataModule.setupc                 C   
   t | jS r   )r   r   r-   r    r    r!   ro      r7   z!BoringDataModule.train_dataloaderc                 C   r   r   )r   r   r-   r    r    r!   rp      r7   zBoringDataModule.val_dataloaderc                 C   r   r   )r   r   r-   r    r    r!   rq      r7   z BoringDataModule.test_dataloaderc                 C   r   r   )r   r   r-   r    r    r!   rr      r7   z#BoringDataModule.predict_dataloaderrs   )r0   r1   r2   r3   r"   r5   r   r   ro   rp   rq   rr   rt   r    r    rI   r!   ru      s    ru   c                       s8   e Zd ZdZd
 fddZdededefdd	Z  Z	S )ManualOptimBoringModelr   r%   Nc                    s   t    d| _d S )NF)rE   r"   automatic_optimizationr-   rI   r    r!   r"      s   

zManualOptimBoringModel.__init__rT   rW   c                 C   sB   |   }t|ttfsJ | |}|  | | |  |S r   )
optimizers
isinstancer	   r   rV   	zero_gradmanual_backward)r   rT   rW   optrS   r    r    r!   r[      s   

z$ManualOptimBoringModel.training_steprs   )
r0   r1   r2   r3   r"   r   r4   r   r[   rt   r    r    rI   r!   r      s    r   c                       sf   e Zd ZdZddedef fddZded	efd
dZde	ded	e
fddZd	ejjfddZ  ZS )	DemoModelr   
   {Gz?out_dimlearning_ratec                    s$   t    tjd|| _|| _d S )NrD   )rE   r"   r   rF   rG   l1r   )r   r   r   rI   r    r!   r"      s   

zDemoModel.__init__rK   r%   c              	   C   s   t | ||ddS )Nr   )r   relur   viewr   rL   r    r    r!   rM      s   zDemoModel.forwardrT   batch_nbc                 C   s   |}| |}|  S r   )sum)r   rT   r   rK   r    r    r!   r[      s   zDemoModel.training_stepc                 C   s   t jj|  | jdS )Nr`   )r   rd   Adamrf   r   r-   r    r    r!   rj      s   zDemoModel.configure_optimizers)r   r   )r0   r1   r2   r3   r4   floatr"   r   rM   r   r   r[   r   rd   r	   rj   rt   r    r    rI   r!   r      s    r   c                       s4   e Zd ZdZd	 fddZdedefddZ  ZS )
Netr   r%   Nc                    sf   t    tdddd| _tdddd| _td| _td| _t	dd| _
t	dd	| _d S )
Nrb   rD      rm   g      ?g      ?i $  r|   r   )rE   r"   rF   Conv2dconv1conv2Dropoutdropout1dropout2rG   fc1fc2r-   rI   r    r!   r"      s   
zNet.__init__rK   c                 C   s   |  |}t|}| |}t|}t|d}| |}t|d}| |}t|}| 	|}| 
|}tj|ddS )Nr&   rb   )dim)r   Fr   r   
max_pool2dr   r   flattenr   r   r   log_softmaxrL   r    r    r!   rM      s   








zNet.forwardrs   )r0   r1   r2   r3   r"   r   rM   rt   r    r    rI   r!   r      s    	r   )(typingr   r   r   r   r   r   r   torch.nnrF   torch.nn.functionalrQ   r   r   torch.optimr	   torch.optim.lr_schedulerr
   torch.utils.datar   r   r   r   pytorch_lightningr   r    pytorch_lightning.core.optimizerr   !pytorch_lightning.utilities.typesr   r   r6   r8   rB   rC   ru   r   r   Moduler   r    r    r    r!   <module>   s(    =#