
    (HJj                     x    d dl Z d dlmZ d dlmZ  G d dej                        Z G d dej                        Zy)    Nc                   P     e Zd Zdedededdf fdZddZ	 dded	ed
efdZ xZS )MultiLinear
input_dimsoutput_dims	num_headsreturnNc                     t         |           t        j                  d|z        }t        j
                  j                  | ||||f      | _        y )Ng      ?lowhighshape)super__init__mathsqrtmxrandomuniformweight)selfr   r   r   scale	__class__s        [/Users/ahmed/devFolder/claude-voice/.venv/lib/python3.12/site-packages/mlx_lm/models/mla.pyr   zMultiLinear.__init__
   sN    		#
*+ii''k:6 ( 
    c                 b    |r|| j                   j                  dd      z  S || j                   z  S )N)r   swapaxesr   x	transposes      r   __call__zMultiLinear.__call__   s/    t{{++B333t{{?"r   
group_sizebitsmodec                     | j                   j                  \  }}}t        ||||||      }t        j                  | j                   |||      ^|_         |_        }|r|d   |_        |S d |_        |S )Nr%   r   )r   r   QuantizedMultiLinearr   quantizescalesbiases)	r   r#   r$   r%   r   r   r   qlr+   s	            r   to_quantizedzMultiLinear.to_quantized   s~     .2[[->->*	;
!Y
D$
 )+KK	)
%	29v "(F1I		 .2		r   T)affine)	__name__
__module____qualname__intr   r"   strr-   __classcell__r   s   @r   r   r   	   sO    
3 
S 
S 
T 
# 	  	r   r   c                   @     e Zd Zdedededededef fdZd	dZ xZS )
r(   r   r   r   r#   r$   r%   c                 P   t         
|           || _        || _        || _        t        j                  d|z        }t        j                  j                  | ||||f      }t        j                  ||||      ^| _        | _        }	|	r|	d   nd | _        | j                          y )N   r
   r'   r   )r   r   r#   r$   r%   r   r   r   r   r   r)   r   r*   r+   freeze)r   r   r   r   r#   r$   r%   r   r   r+   r   s             r   r   zQuantizedMultiLinear.__init__.   s     	$		 		!j.)""k:6 # 

 -/KKJ4-
)T[6 $*fQitr   c           
          t        j                  || d   | d   | j                  d      || j                  | j                  | j
                        S )Nr   r*   r+   )r*   r+   r!   r#   r$   r%   )r   quantized_matmulgetr#   r$   r%   r   s      r   r"   zQuantizedMultiLinear.__call__K   sJ    ""N>88H%	
 		
r   r.   )r0   r1   r2   r3   r4   r   r"   r5   r6   s   @r   r(   r(   -   sG      	
   :

r   r(   )	r   mlx.corecorer   mlx.nnnnModuler   r(    r   r   <module>rD      s1      !")) !H(
299 (
r   