
    h                        S SK r S SKrS SK Jr  S SKrS SKJr  S SKJr  S SKJ	r	J
r
  S SKJr   " S S\ R                  5      r\R                  " 5       r\S:w  a  S S	KJr  \R&                  rOSr\R*                  r\
" \	5      \SS
SS\4S\R,                  S\R,                  S\R,                  S\S\S-  S\S\S\\-  S-  S\\-  S\R,                  4S jj5       r " S S\R8                  5      rg)    N)auto)IGNORE_INDEX)LINEAR_CROSS_ENTROPY_DOCadd_doc_start)"torch_compile_linear_cross_entropyc                   0    \ rS rSr\" 5       r\" 5       rSrg)LinearCrossEntropyImpl    N)__name__
__module____qualname____firstlineno__r   CCETORCH_COMPILE__static_attributes__r       `/home/james-whalen/.local/lib/python3.13/site-packages/cut_cross_entropy/linear_cross_entropy.pyr	   r	      s    
&CFMr   r	   Darwin)cce_linear_cross_entropymeanFhighectargetsignore_indexsoftcap	reductionshift
filter_epsimplreturnc	           
         [        U[        5      (       a  UR                  R                  5       nU=S:X  a-    [        S:X  a  [        S5      e[        c   e[        XX#XEXg5      $ S:X  a  [        XX#XEU5      $  [        U S35      e)ag  
:param filter_eps: The threshold value used to determine which locations can be safely ignored
    in gradient computation. The default value of "auto" will automatically choose a value
    based on the input dtype. Only valid for the CCE implementation.
:param impl: The linear cross entropy implementation to use. Currently supports cce and torch_compile.
ccer   zSCCE does not support MacOS. Please use torch_compile when running on MacOS instead.torch_compilez is not implemented.)	
isinstancer	   namelowerPLATFORM_SYSTEMRuntimeErrorr   r   NotImplementedError)	r   r   r   r   r   r   r   r    r!   s	            r   linear_cross_entropyr,      s    & $.//yy 
(*"i  ,777+gW  5gW  %.B&CDDr   c                      ^  \ rS rSr\SSSS\4S\S\S-  S\S	\\-  S-  S
\	S\\
-  4U 4S jjjrS\R                  S\R                  S\R                  S\R                  4S jrSrU =r$ )LinearCrossEntropyE   Nr   r   Fr   r   r   r    r   r!   c                 j   > [         TU ]  5         Xl        X l        X0l        X@l        XPl        X`l        g )N)super__init__r   r   r   r    r   r!   )selfr   r   r   r    r   r!   	__class__s          r   r2   LinearCrossEntropy.__init__F   s/     	("$
	r   r   r   r   r"   c                     [        UUUU R                  U R                  U R                  U R                  U R
                  U R                  S9	$ )N)r   r    r   r!   )r,   r   r   r   r    r   r!   )r3   r   r   r   s       r   forwardLinearCrossEntropy.forwardX   sD    #LLnn**

 
	
r   )r    r   r!   r   r   r   )r   r   r   r   r   LCE_IMPL_DEFAULTintfloatstrboolr	   r2   torchTensorr7   r   __classcell__)r4   s   @r   r.   r.   E   s     ) $)/-=  	
 CK$&  ** $
 
%,, 
 
RWR^R^ 
 
r   r.   )enumplatformr   r>   torch.nnnncut_cross_entropy.constantsr   cut_cross_entropy.docr   r   cut_cross_entropy.torch_compiler   IntEnumr	   systemr)   cut_cross_entropy.ccer   r   r9   r   r?   r:   r;   r<   r=   r,   Moduler.   r   r   r   <module>rL      s2        4 I NT\\  //#h>-11#-;; '(
 % %+)9%E||%E||%E \\%E 	%E
 T\%E %E %E d"%E &
&%E \\%E )%EP
 
r   