o
    i7                     @   s(  d dl mZ d dlZd dlZd dlZd dlZd dlZd dlm	Z	 d dl
mZ edddgZeejejejjejjdd	ejjejjdd	ejejjejjdd	ejjejjdd	ejej	e	jd
 ZG dd deZdd ZG dd deZG dd deZdddZdddZdd Zdd ZdS )    )
namedtupleN)
_helperlib)configExtentbeginend   )ndimattempt_nocopy_reshapec                   @   sN   e Zd ZdZdZdd Zdd Zdd Zd	d
 Zdd Z	dddZ
dd ZdS )DimzA single dimension of the array

    Attributes
    ----------
    start:
        start offset
    stop:
        stop offset
    size:
        number of items
    stride:
        item stride
    startstopsizestridesinglec                 C   s6   || _ || _|| _|| _|| _|r|dksJ d S d S Nr   r   selfr   r   r   r   r    r   d/var/www/html/eduruby.in/lip-sync/lip-sync-env/lib/python3.10/site-packages/numba/misc/dummyarray.py__init__,   s   zDim.__init__c           	      C   s   t |tr?|| j\}}}|| j }| j|t| j  }| j|t| j  }|dkr.d}nt|||}t||||dd}|S |dkrK| ||d  n| dd  }|jdkrXt	t|j|j
|j|jddS )Nr   r   Fr   T)
isinstancesliceindicesr   r   r   abs_compute_sizer   
IndexErrorr   )	r   itemr   r   stepr   r   retZslicedr   r   r   __getitem__4   s4   

$
zDim.__getitem__c                 C   s   | j || j  S N)r   r   )r   idxr   r   r   
get_offsetR      zDim.get_offsetc                 C   s   d}|| j | j| j| jf S )Nz*Dim(start=%s, stop=%s, size=%s, stride=%s))r   r   r   r   )r   Zstrfmtr   r   r   __repr__U   s   zDim.__repr__c                 C   s$   t | j| | j| | j| j| jdS )Nr   )r   r   r   r   r   r   )r   baser   r   r   	normalizeY   s   zDim.normalizeNc                 C   sV   |d u r| j }|d u r| j}|d u r| j}|d u r| j}|d u r#| j}t|||||S r#   )r   r   r   r   r   r   r   r   r   r   copy]   s   zDim.copyc                 C   s
   | j |kS r#   r   )r   itemsizer   r   r   is_contiguousj      
zDim.is_contiguous)NNNNN)__name__
__module____qualname____doc__	__slots__r   r"   r%   r'   r)   r*   r-   r   r   r   r   r      s    
r   c                 C   s   t dd t| |D S )Nc                 s   s    | ]
\}}| |V  qd S r#   )r%   ).0idr   r   r   	<genexpr>o   s    z compute_index.<locals>.<genexpr>)sumzip)r   dimsr   r   r   compute_indexn   s   r;   c                   @   s    e Zd ZdZdd Zdd ZdS )ElementFc                 C   s
   || _ d S r#   extent)r   r>   r   r   r   r   u   r.   zElement.__init__c                 c   s    | j V  d S r#   r=   r   r   r   r   iter_contiguous_extentx   s   zElement.iter_contiguous_extentN)r/   r0   r1   is_arrayr   r@   r   r   r   r   r<   r   s    r<   c                   @   s   e Zd ZdZdZedd Zdd Zdd Zd	d
 Z	dd Z
dd Zedd Zedd Zdd Zdd ZdddZdddZdS )Arraya  A dummy numpy array-like object.  Consider it an array without the
    actual data, but offset from the base data pointer.

    Attributes
    ----------
    dims: tuple of Dim
        describing each dimension of the array

    ndim: int
        number of dimension

    shape: tuple of int
        size of each dimension

    strides: tuple of int
        stride of each dimension

    itemsize: int
        itemsize

    extent: (start, end)
        start and end offset containing the memory region
    Tc           	      C   sJ   g }t ||D ]\}}t||||  ||dd}|| d}q| ||S )NF)r   r   )r9   r   append)	clsoffsetshapestridesr,   r:   ZashapeZastridedimr   r   r   	from_desc   s   

zArray.from_descc                 C   st   t || _t| j| _t dd | jD | _t dd | jD | _|| _tt	j
| jd| _|  | _|  | _d S )Nc                 s       | ]}|j V  qd S r#   )r   r4   rH   r   r   r   r7          z!Array.__init__.<locals>.<genexpr>c                 s   rJ   r#   r+   rK   r   r   r   r7      rL   r   )tupler:   lenr	   rF   rG   r,   	functoolsreduceoperatormulr   _compute_extentr>   _compute_layoutflags)r   r:   r,   r   r   r   r      s   

zArray.__init__c                 C   s   | j sdddS tdd | j D rdddS ddd}| j}t| j D ]!}|jdkr2ddd  S |jdkrE|j|kr@d|d< ||j9 }q$| j}| j D ]}|jdkre|j|kr`d|d	< |  S ||j9 }qL|S )
NT)C_CONTIGUOUSF_CONTIGUOUSc                 S   s   g | ]}|j d kqS )r   r+   rK   r   r   r   
<listcomp>   s    z)Array._compute_layout.<locals>.<listcomp>Fr   r   rV   rW   )r:   anyr,   reversedr   r   )r   rU   sdrH   r   r   r   rT      s.   










zArray._compute_layoutc                 C   sN   dg| j  }dd | jD }t|| j}t|| j| j }t||}t||S )Nr   c                 S   s   g | ]}|d  qS )r   r   r4   sr   r   r   rX          z)Array._compute_extent.<locals>.<listcomp>)r	   rF   r;   r:   r,   maxr   )r   ZfirstidxZlastidxr   r   r   r   r   rS      s   

zArray._compute_extentc                 C   s   d| j | jf S )Nz<Array dims=%s itemsize=%s>)r:   r,   r?   r   r   r   r'      r&   zArray.__repr__c                 C   s   t |ts	|g}nt|}t|}t| j}||kr#td|| f t||k r7|td d  t||k s)dd t| j|D }dd |D }t	|| j
}|rX|j| d S t|jS )Nz%d extra indices givenc                 S   s   g | ]	\}}| |qS r   )r"   )r4   rH   itr   r   r   rX      s    z%Array.__getitem__.<locals>.<listcomp>c                 S   s   g | ]}|j s|jqS r   )r   r   )r4   r6   r   r   r   rX      s    r   )r   rM   listrN   r:   r   rC   r   r9   rB   r,   reshaper<   r>   )r   r   Znitemr	   r:   newshapearrr   r   r   r"      s    


zArray.__getitem__c                 C   
   | j d S )NrV   rU   r?   r   r   r   is_c_contig      
zArray.is_c_contigc                 C   re   )NrW   rf   r?   r   r   r   is_f_contig   rh   zArray.is_f_contigc                 c   s   | j s| jr| jV  dS | jd j| jd jk r-| jd }| jdd }| jdd }n| jd }| jdd }| jdd }|| jrgdd |D }tj	| D ]}t
||}||j ||j fV  qRdS dd | jD }tj	| D ]}t
|| j}||| j fV  qtdS )z Generates extents
        r   r   r   Nc                 S      g | ]}t |qS r   ranger\   r   r   r   rX     r^   z0Array.iter_contiguous_extent.<locals>.<listcomp>c                 S   rj   r   rk   r\   r   r   r   rX     r^   )rg   ri   r>   r:   r   rF   r-   r,   	itertoolsproductr;   r   r   )r   ZinnerdimZ	outerdimsZ
outershapeZoslenr   r(   rE   r   r   r   r@      s*   


zArray.iter_contiguous_extentc              
   O   s  | j }t|}|| jkr| d fS |dd}|r td|  |dvr(tdd}d}t|D ]\}}	|	dk rC|dkr?|}q0td	||	9 }q0|dkro|dksW| j| dkr[td
|d| | j| f ||d d   }t	
tj|d}
|dkr| jrdnd}|
| jkrtd| js| jr|dkrtt| |}nG|dkrtt| |}n;tdt|tjj}tj| jtjjd}tj| jtjjd}tj|tjjd}t||||||| j|dkstd| j| jj||| jd}|t|  fS )NorderCzunknown keyword arguments %sCFAorder not C|F|Ar   r   r   z&can only specify one unknown dimensionz.cannot infer valid shape for unknown dimensionAFz%reshape changes the size of the arrayZunreachable)Zdtypezreshape would require copyrF   rG   r,   ) r	   rN   rF   pop	TypeErrorkeys
ValueError	enumerater   rO   rP   rQ   rR   ri   rg   ra   iter_strides_c_contigiter_strides_f_contigAssertionErrornpempty	ctypeslibc_intparrayrG   r
   r,   NotImplementedErrorrI   r>   r   r@   )r   ZnewdimskwsZoldndZnewndro   Z
unknownidxZ	knownsizer5   rH   Znewsize
newstridesZolddimsZ
oldstridesr!   r   r   r   rb     sn   





zArray.reshapeNc           	      C   s   g g }}|d u r$t | j| jD ]\}}|dkr"|| || qn6t|ts,|f}|D ]}| j| dkr;tdq.tt | j| jD ]\}\}}||vrY|| || qE| j| j	j
||| jd}|t|  fS )Nr   zDcannot select an axis to squeeze out which has size not equal to oneru   )r9   rF   rG   rC   r   rM   ry   rz   rI   r>   r   r,   ra   r@   )	r   Zaxisrc   r   lengthr   axr5   Znewarrr   r   r   squeezea  s8   





zArray.squeezerp   c                 C   sj   |dvrt d|dv r| js|dv r1| jr1| jf}| jf}| | jj||| j}|t| 	 fS t
d)Nrq   rr   CAZFAzravel on non-contiguous array)ry   rg   ri   r   r,   rI   r>   r   ra   r@   r   )r   ro   rc   r   rd   r   r   r   ravel}  s   zArray.ravelr#   )rp   )r/   r0   r1   r2   rA   classmethodrI   r   rT   rS   r'   r"   propertyrg   ri   r@   rb   r   r   r   r   r   r   rB   |   s$    
	
&


LrB   c                 c   sL    |du r| j n|}| j}|V  d}|dd D ]}||9 }|| V  qdS )z$yields the f-contiguous strides
    Nr   r   )rF   r,   )rd   rF   r,   r8   r]   r   r   r   r|     s   r|   c                 #   sF    du r| j n| j  fdd}tt| D ]}|V  qdS )z$yields the c-contiguous strides
    Nc                  3   s8     V  d} t dd  D ]}| |9 } |   V  qd S r   )rZ   )r8   r]   r,   rF   r   r   gen  s   z"iter_strides_c_contig.<locals>.gen)rF   r,   rZ   ra   )rd   rF   r   r5   r   r   r   r{     s   r{   c                 C   sB   t | trdS t | trt| |krtdd | D sdS dS dS )NFc                 s   s    | ]}t |tV  qd S r#   )r   r   )r4   r`   r   r   r   r7     s    z&is_element_indexing.<locals>.<genexpr>T)r   r   rM   rN   rY   )r   r	   r   r   r   is_element_indexing  s   

r   c                 C   s@   |dkr	| }|}n|}| }| }||krdS || d | d S )z1Algorithm adapted from cpython rangeobject.c
    r   r   r   )r   r   r    lohir   r   r   r     s   r   r#   )collectionsr   rm   rO   rQ   ctypesnumpyr~   Znumbar   Z
numba.corer   r   Z	CFUNCTYPEc_intZc_longr   Z	ndpointerr   Z	c_helpersr
   objectr   r;   r<   rB   r|   r{   r   r   r   r   r   r   <module>   s@    
R
  

