o
    0 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
    U/home/app/PaddleOCR-VL-test/.venv_paddleocr/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
   Z	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gtZ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ixorZraddZrandZ	rfloordivZrmulZrorZrpowZrsubZrtruedivZrxor__T)getitemsetitemlen)r
   r   r   r   )r&   r   r%   r'   )super__new__)
clsr
   r   r   r   r#   r*   Z	binary_op	attr_nameZ
special_op	__class__r   r   rP      s   
zLazyMeta.__new__)r
   r   r   r   r   r   )__name__
__module____qualname__rP   __classcell__r   r   rS   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metara   r   r   dict[str, Any] | Nonerb   c                  sT   t    || _|| _|| _|d ur|ni | _|| _| jd us&| jd us(J d S d S r   )rO   __init__r   r[   r]   r^   r`   )r"   rc   ra   r   r   rb   rS   r   r   re   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__	TypeErrorrO   __init_subclass__rQ   rS   r   r   ri   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    listr\   appendrY   _recurse_apply)rk   rl   Litemr   r   r   rp   ^   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rc   r   r   rb   c                 3  s    | ]	}t | jV  qd S r   )r    r!   ).0ru   rj   r   r   	<genexpr>   s    z8LazyBase._wrap_fn.<locals>.wrapped_fn.<locals>.<genexpr>a	list[Any]iintr   rY   c                  s>   t | dksJ | d d u r | d i || d< | d | S )N      r   )rN   )ry   r{   kw)rl   r   r   eager_tuple_element   s   zBLazyBase._wrap_fn.<locals>.wrapped_fn.<locals>.eager_tuple_elementc                 3  s.    | ]}   | |fd V  qdS )rv   N)eager_to_meta)rw   r{   )rQ   r   r   resshared_argsr   r   rx      s   , )r   )ry   rz   r{   r|   r   rY   )rY   rp   r    r'   NotImplementedErrorrN   r   r\   r   meta_with_dtype_and_shapeshaper!   r   allrangeto_eager)r   r   Z	meta_argsdtyper   Z
eager_argsrQ   rl   r%   r   )r   r   r   r   r   
wrapped_fno   s:   
 &
z%LazyBase._wrap_fn.<locals>.wrapped_fnr   )rQ   rl   r   r%   r   r   r   r   r   m   s   /zLazyBase._wrap_fnru   c                   s   d fdd  |S )N_trY   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   )r[   r`   rp   r]   r^   r   r   r   )r   rQ   simple_to_eagerr   r   r      s   
z*LazyBase.to_eager.<locals>.simple_to_eager)r   rY   r   r   )rp   rQ   ru   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   )rQ   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)rc   ra   z is not compatible with )r   r    r!   r   rh   r   r   r   r   
from_eager   s
   zLazyBase.from_eager)
rc   r   ra   rZ   r   r\   r   rd   rb   r_   )r   rf   )rk   r   rl   rm   r   r   )rl   r   r   rs   r%   rt   r   rm   )ru   r   r   r   )r   r   r   r   r   r   )rU   rV   rW   __annotations__re   ri   staticmethodrp   classmethodr   r   r   r   r   r   rX   r   r   rS   r   rY   H   s,   
 	2rY   )	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   )rw   _r   r   r   rx      s    z<LazyNumpyTensor.meta_with_dtype_and_shape.<locals>.<genexpr>)npZzeroslibZstride_tricksZ
as_strided)rQ   r   r   Z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)ry   r   r   r   r   r   r      s    z(LazyNumpyTensor.astype.<locals>.<lambda>rv   )r   r   r   r   )r"   r   r   r   rc   Z	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   )rU   rV   rW   r   Zndarrayr!   r   r   r   r   r   r   r   r   r   r      s   
 r   )
__future__r   abcr   r   r   loggingtypingr   r   numpyr   Znumpy.typingr   	getLoggerrU   loggerr	   rY   r   r   r   r   r   <module>   s    
: 