
    Nj                         d dl mZ d dlmZ d dlZd dlmZ d dlm	Z	 d dlm
Z
  G d dej                        Z G d d	e      Z G d
 de      Zy)    )castN)OptimizerLRScheduler)jaccard_score)nnc                       e Zd Zdej                  deddf fdZdej                  dej                  dej                  fdZ	dej                  dej                  fd	Z
d
eej                  ej                  f   dedej                  fdZd
eej                  ej                  f   dedej                  fdZdefdZ xZS )StaticLightningModulemodellearning_ratereturnNc                 `    t         |           || _        || _        | j                  | _        y)Initialize the LightningModule.N)super__init__r	   r
   cosine_distanceloss_function)selfr	   r
   	__class__s      r/Users/ahmed/devFolder/Ultron/claude-voice/.venv/lib/python3.12/site-packages/model2vec/train/lightning_modules.pyr   zStaticLightningModule.__init__   s+    
*!11    xyc                    t         j                  j                  j                  |d      }t         j                  j                  j                  |d      }dt        j                  ||z  d      z
  j                         S )z*Returns the cosine distance loss function.   dim)torchr   
functional	normalizesummean)r   r   r   s      r   r   z%StaticLightningModule.cosine_distance   sc    HH))!)3HH))!)3EIIa!e++1133r   c                 $    | j                  |      S )zSimple forward pass.)r	   )r   r   s     r   forwardzStaticLightningModule.forward   s    zz!}r   batch	batch_idxc                     |\  }}| j                  |      \  }}| j                  ||      }| j                  d|d       |S )ziTraining step using cross-entropy loss for single-label and binary cross-entropy for multilabel training.
train_lossTprog_barr	   r   logr   r#   r$   r   r   head_out_losss           r   training_stepz#StaticLightningModule.training_step   sE    1jjm!!!(A.td3r   c                     |\  }}| j                  |      \  }}| j                  ||      }| j                  d|d       |S ),Validation step computing loss and accuracy.val_lossTr'   r)   r+   s           r   validation_stepz%StaticLightningModule.validation_step$   sE    1jjm!!!(A.TD1r   c           	          t         j                  j                  | j                  j	                         | j
                        }t         j                  j                  j                  |dddddd      }||d	d
dS )z0Configure optimizer and learning rate scheduler.)lrmin      ?   gư>gQ?rel)modefactorpatiencemin_lr	thresholdthreshold_moder2   )	schedulermonitor)	optimizerlr_scheduler)r   optimAdamr	   
parametersr
   rC   ReduceLROnPlateau)r   rB   r@   s      r   configure_optimizersz*StaticLightningModule.configure_optimizers-   su    KK$$TZZ%:%:%<ASAS$T	KK,,>>  ? 
	 'i\f8ghhr   )__name__
__module____qualname__r   Modulefloatr   r   Tensorr   r"   tupleintr/   r3   r   rH   __classcell__r   s   @r   r   r   
   s    2bii 2 2$ 24 4%,, 45<< 4 %,, 5u||)C#D QT Y^YeYe U5<<+E%F SV [`[g[g i&: ir   r   c            	            e Zd Zd
dej                  dedej                  dz  ddf fdZde	ej                  ej                  f   de
dej                  fd	Z xZS )ClassifierLightningModuleNr	   r
   class_weightr   c                 x    t         |   ||       || _        || _        t	        j
                  |      | _        y)r   )weightN)r   r   r	   r
   r   CrossEntropyLossr   r   r	   r
   rU   r   s       r   r   z"ClassifierLightningModule.__init__=   s4    .
*00Er   r#   r$   c                 
   |\  }}| j                  |      \  }}| j                  ||      }|j                  d      |k(  j                         j	                         }| j                  d|       | j                  d|d       |S )r1   r   r   r2   val_accuracyTr'   )r	   r   argmaxrM   r    r*   )	r   r#   r$   r   r   r,   r-   r.   accuracys	            r   r3   z)ClassifierLightningModule.validation_stepD   sz    1jjm!!!(A.OOO*a/668==?T"D9r   NrI   rJ   rK   r   rL   rM   r   rN   r   rO   rP   r3   rQ   rR   s   @r   rT   rT   <   sl    Fbii F FU\\\`M` Flp F	U5<<+E%F 	SV 	[`[g[g 	r   rT   c            	            e Zd Zd
dej                  dedej                  dz  ddf fdZde	ej                  ej                  f   de
dej                  fd	Z xZS )#MultiLabelClassifierLightningModuleNr	   r
   rU   r   c                 x    t         |   ||       || _        || _        t	        j
                  |      | _        y)r   )
pos_weightN)r   r   r	   r
   r   BCEWithLogitsLossr   rY   s       r   r   z,MultiLabelClassifierLightningModule.__init__Q   s4    .
*11\Jr   r#   r$   c                 d   |\  }}| j                  |      \  }}| j                  ||      }t        j                  |      dkD  j	                         }t        t        t        |j                         |j                         d            }	| j                  d|       | j                  d|	d       |S )r1   r7   samples)averager2   r[   Tr'   )	r	   r   r   sigmoidrM   r   r   cpur*   )
r   r#   r$   r   r   r,   r-   r.   predsr]   s
             r   r3   z3MultiLabelClassifierLightningModule.validation_stepX   s    1jjm!!!(A.x(3.557}QUUWeiik9UVT"D9r   r^   r_   rR   s   @r   ra   ra   P   sl    Kbii K KU\\\`M` Klp KU5<<+E%F SV [`[g[g r   ra   )typingr   lightning.pytorchpytorchplr   !lightning.pytorch.utilities.typesr   sklearn.metricsr   r   LightningModuler   rT   ra    r   r   <module>rs      sF       B ) /iB.. /id 5 (*? r   