o
    [۷i$                     @  s   d dl mZ d dlmZmZmZ d dlZd dlmZm	Z	 d dl
Zd dlmZ eeZG dd deZG dd	 d	eed
ZG dd deZdS )    )annotations)ABCABCMetaabstractmethodN)AnyCallable)	DTypeLikec                      s   e Zd Zd	 fddZ  ZS )
LazyMetanamestrbasestuple[type, ...]	namespacedict[str, Any]c                   s   ddd}||d< dd	ddd}dD ]}d| d}||dd	||< qdD ]}	d|	 d}||dd	||< q&dD ]}
d|
 d}||dd	||< q9t  j| |||fi |S )Nr
   r   returnr   c                   sX   t | j }t|rt| j fdd| dS t|| jr*t|  fdd| S |S )Nc                   s   t |  |i |S Ngetattr)sargskwargsr
    ?/home/ubuntu/vllm_env/lib/python3.10/site-packages/gguf/lazy.py<lambda>   s    z7LazyMeta.__new__.<locals>.__getattr__.<locals>.<lambda>)use_selfc                   s
   t |  S r   r   )r   r   r   r   r      s   
 )r   _metacallabletype_wrap_fn
isinstance_tensor_type)selfr
   	meta_attrr   r   r   __getattr__   s   
z%LazyMeta.__new__.<locals>.__getattr__r$   F	meta_noopop_namer&   boolc                  s    fdd}|S )Nc                   s0   t | jtt | j d| g|R i |S )Nr%   )r   r   r   r!   )r"   r   r   r&   r'   r   r   wrapped_special_op'   s   z=LazyMeta.__new__.<locals>.mk_wrap.<locals>.wrapped_special_opr   )r'   r&   r*   r   r)   r   mk_wrap%   s   z!LazyMeta.__new__.<locals>.mk_wrap)&ltleeqnegegtaddandfloordivlshiftmodmulmatmulorpowrshiftsubtruedivxoriaddiand	ifloordivilshiftimodimuliorirshiftisubixorraddrand	rfloordivrmulrorrpowrsubrtruedivrxor__)notabsinvertnegposT)getitemsetitemlen)r
   r   r   r   )r'   r   r&   r(   )super__new__)clsr
   r   r   r   r$   r+   	binary_op	attr_nameunary_op
special_op	__class__r   r   r\      s   
zLazyMeta.__new__)r
   r   r   r   r   r   )__name__
__module____qualname__r\   __classcell__r   r   rb   r   r	      s    r	   c                      s   e Zd ZU ded< ded< ded< ded< d	ed
< ded< dddddd5 fddZd6 fddZed7dd Zedd!d"d8d(d)Z	ed9d+d,Z
ed9d-d.Zeed:d1d2Zed9d3d4Z  ZS );LazyBaser   r!   r   r   
Any | None_datatuple_argsr   _kwargsCallable[[Any], Any] | None_funcNr   )datar   r   funcmetarp   r   r   dict[str, Any] | Nonerq   c                  sT   t    || _|| _|| _|d ur|ni | _|| _| jd us&| jd us(J d S d S r   )r[   __init__r   rj   rl   rm   ro   )r"   rr   rp   r   r   rq   rb   r   r   rt   U   s   
 zLazyBase.__init__r   Nonec                   s"   d| j vrtd| t  S )Nr!   z,property '_tensor_type' must be defined for )__dict__	TypeErrorr[   __init_subclass__r]   rb   r   r   rx   ^   s   

zLazyBase.__init_subclass__ofnCallable[[Any], Any]c                 C  sZ   t | ttfr"g }| D ]}|t|| qt | tr t|}|S t | tr+|| S | S r   )r    listrk   appendrh   _recurse_apply)rz   r{   Litemr   r   r   r   c   s   

zLazyBase._recurse_applyF)r   r&   r   r   LazyBase | Noner&   Qbool | DTypeLike | tuple[DTypeLike, Callable[[tuple[int, ...]], tuple[int, ...]]]c                  s    fdd}|S )Nc                    sx  d u ri d urfnd|  } t | dd }ttr5s5z	|i W nE ty4   d Y n;w t| dks=J | d tsHJ jdurottrh\}}t|s^J 	||j
n	j
tjr| dS ttrtfddD r| d gddfdd t fddttD S | }|i S )Nr   c                 S  s   | j S r   )r   )tr   r   r   r   y   s    z7LazyBase._wrap_fn.<locals>.wrapped_fn.<locals>.<lambda>r   Trr   r   r   rq   c                 3  s    | ]	}t | jV  qd S r   )r    r!   ).0r   ry   r   r   	<genexpr>   s    z8LazyBase._wrap_fn.<locals>.wrapped_fn.<locals>.<genexpr>a	list[Any]iintr   rh   c                  s>   t | dksJ | d d u r | d i || d< | d | S )N      r   )rZ   )r   r   kw)r{   r   r   eager_tuple_element   s   zBLazyBase._wrap_fn.<locals>.wrapped_fn.<locals>.eager_tuple_elementc                 3  s.    | ]}   | |fd V  qdS )r   N)eager_to_meta)r   r   )r]   r   r   resshared_argsr   r   r      s   , )r   )r   r   r   r   r   rh   )rh   r   r    r(   NotImplementedErrorrZ   r   rk   r   meta_with_dtype_and_shapeshaper!   r   allrangeto_eager)r   r   	meta_argsdtyper   
eager_argsr]   r{   r&   r   )r   r   r   r   r   
wrapped_fnt   s:   
 &
z%LazyBase._wrap_fn.<locals>.wrapped_fnr   )r]   r{   r   r&   r   r   r   r   r   r   s   /zLazyBase._wrap_fnr   c                   s   d fdd  |S )N_trh   r   r   c                   s   | j d ur| j S | jd usJ  | j| _| j| ji | j| _ | j d us)J | j j| jjks3J | j j| jjks=J | j S r   )rj   ro   r   rl   rm   r   r   r   )r   r]   simple_to_eagerr   r   r      s   
z*LazyBase.to_eager.<locals>.simple_to_eager)r   rh   r   r   )r   r]   r   r   r   r   r      s   zLazyBase.to_eagerc                 C  s   |  |j|jS r   )r   r   r   r   r   r   r   r      s   zLazyBase.eager_to_metar   r   c                 C  s   d S r   r   )r]   r   r   r   r   r   r      s   z"LazyBase.meta_with_dtype_and_shapec                 C  sF   t || u r|S t|| jr| | ||dS tt |d| jS )N)rr   rp   z is not compatible with )r   r    r!   r   rw   r   r   r   r   
from_eager   s
   zLazyBase.from_eager)
rr   r   rp   ri   r   rk   r   rs   rq   rn   )r   ru   )rz   r   r{   r|   r   r   )r{   r   r   r   r&   r   r   r|   )r   r   r   r   )r   r   r   r   r   r   )rd   re   rf   __annotations__rt   rx   staticmethodr   classmethodr   r   r   r   r   r   rg   r   r   rb   r   rh   M   s,   
 	2rh   )	metaclassc                   @  s:   e Zd ZU ejZded< edddZd	d
 Z	dd Z
dS )LazyNumpyTensortuple[int, ...]r   r   r   r   np.ndarray[Any, Any]c                 C  s(   t d|}t jj||dd |D S )Nr   c                 s  s    | ]}d V  qdS )r   Nr   )r   _r   r   r   r      s    z<LazyNumpyTensor.meta_with_dtype_and_shape.<locals>.<genexpr>)npzeroslibstride_tricks
as_strided)r]   r   r   cheatr   r   r   r      s   z)LazyNumpyTensor.meta_with_dtype_and_shapec                 O  s8   t | || jj}| |f| }t | |||dd dS )Nc                 _  s   | j |i |S r   )astype)r   r   r   r   r   r   r      s    z(LazyNumpyTensor.astype.<locals>.<lambda>r   )r   r   r   r   )r"   r   r   r   rr   	full_argsr   r   r   r      s   zLazyNumpyTensor.astypec                 O  s   t | }|j|i |S r   )r   r   tofile)r"   r   r   eagerr   r   r   r      s   
zLazyNumpyTensor.tofileN)r   r   r   r   r   r   )rd   re   rf   r   ndarrayr!   r   r   r   r   r   r   r   r   r   r      s   
 r   )
__future__r   abcr   r   r   loggingtypingr   r   numpyr   numpy.typingr   	getLoggerrd   loggerr	   rh   r   r   r   r   r   <module>   s    
? 