
    )j                     r    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dS )    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                            | ||||f          | _        d S )Ng      ?lowhighshape)super__init__mathsqrtmxrandomuniformweight)selfr   r   r   scale	__class__s        [/lsinfo/ai/hellotax_ai/base_platform/venv/lib/python3.11/site-packages/mlx_lm/models/mla.pyr   zMultiLinear.__init__
   sa    	#
*++i''k:6 ( 
 
    Tc                 V    |r|| j                             dd          z  S || j         z  S )N)r   swapaxesr   x	transposes      r   __call__zMultiLinear.__call__   s3     	#t{++B3333t{?"r   affine
group_sizebitsmodec                     | j         j        \  }}}t          ||||||          }t          j        | j         |||          ^|_         |_        }|r|d         n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$
 
 )+K	)
 )
 )
%	29v "(1F1IIT		r   T)r#   )	__name__
__module____qualname__intr   r"   strr.   __classcell__r   s   @r   r   r   	   s        
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                    t                                                       || _        || _        || _        t          j        d|z            }t          j        	                    | ||||f          }t          j
        ||||          ^| _        | _        }	|	r|	d         nd | _        |                                  d S )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 # 
 

 -/KJ4-
 -
 -
)T[6 $*3fQiitr   Tc           
          t          j        || d         | d         |                     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   sN    "N>88H%%	
 	
 	
 		
r   r/   )r0   r1   r2   r3   r4   r   r"   r5   r6   s   @r   r)   r)   -   s          	
        :

 

 

 

 

 

 

 

r   r)   )	r   mlx.corecorer   mlx.nnnnModuler   r)    r   r   <module>rD      s                ! ! ! ! !") ! ! !H(
 (
 (
 (
 (
29 (
 (
 (
 (
 (
r   