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&t  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
    F/home/ubuntu/veenaModal/venv/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notabsaddandfloordivinvertlshiftmodmulmatmulnegorpospowrshiftsubtruedivxoriaddiand	ifloordivilshiftimodimuliorirshiftisubixorraddrand	rfloordivrmulrorrpowrsubrtruedivrxor__T)getitemsetitemlen)r
   r   r   r   )r'   r   r&   r(   )super__new__)
clsr
   r   r   r   r$   r+   	binary_op	attr_name
special_op	__class__r   r   r[      s   
zLazyMeta.__new__)r
   r   r   r   r   r   )__name__
__module____qualname__r[   __classcell__r   r   r`   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metarn   r   r   dict[str, Any] | Nonero   c                  sT   t    || _|| _|| _|d ur|ni | _|| _| jd us&| jd us(J d S d S r   )rZ   __init__r   rh   rj   rk   rm   )r"   rp   rn   r   r   ro   r`   r   r   rr   P   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__	TypeErrorrZ   __init_subclass__r\   r`   r   r   rv   Y   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    listri   appendrf   _recurse_apply)rx   ry   Litemr   r   r   r}   ^   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   t   s    z7LazyBase._wrap_fn.<locals>.wrapped_fn.<locals>.<lambda>r   Trp   r   r   ro   c                 3  s    | ]	}t | jV  qd S r   )r    r!   ).0r   rw   r   r   	<genexpr>   s    z8LazyBase._wrap_fn.<locals>.wrapped_fn.<locals>.<genexpr>a	list[Any]iintr   rf   c                  s>   t | dksJ | d d u r | d i || d< | d | S )N      r   )rY   )r   r   kw)ry   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   rf   )rf   r}   r    r(   NotImplementedErrorrY   r   ri   r   meta_with_dtype_and_shapeshaper!   r   allrangeto_eager)r   r   	meta_argsdtyper   
eager_argsr\   ry   r&   r   )r   r   r   r   r   
wrapped_fno   s:   
 &
z%LazyBase._wrap_fn.<locals>.wrapped_fnr   )r\   ry   r   r&   r   r   r   r   r   m   s   /zLazyBase._wrap_fnr   c                   s   d fdd  |S )N_trf   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   )rh   rm   r}   rj   rk   r   r   r   )r   r\   simple_to_eagerr   r   r      s   
z*LazyBase.to_eager.<locals>.simple_to_eager)r   rf   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)rp   rn   z is not compatible with )r   r    r!   r   ru   r   r   r   r   
from_eager   s
   zLazyBase.from_eager)
rp   r   rn   rg   r   ri   r   rq   ro   rl   )r   rs   )rx   r   ry   rz   r   r   )ry   r   r   r   r&   r   r   rz   )r   r   r   r   )r   r   r   r   r   r   )rb   rc   rd   __annotations__rr   rv   staticmethodr}   classmethodr   r   r   r   r   r   re   r   r   r`   r   rf   H   s,   
 	2rf   )	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   rp   	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   )rb   rc   rd   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   	getLoggerrb   loggerr	   rf   r   r   r   r   r   <module>   s    
: 