
    
f7                        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j        ej        ej        ej                            ej        j        d	          ej                            ej        j        d	          ej        ej                            ej        j        d	          ej                            ej        j        d	          ej        ej        	  	        e	j        d
                   Z G d de          Zd Z G d de          Z G d de          ZddZddZd Zd ZdS )    )
namedtupleN)
_helperlib)configExtentbeginend   )ndimattempt_nocopy_reshapec                   B    e Zd ZdZdZd Zd Zd Zd Zd Z	dd	Z
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                 d    || _         || _        || _        || _        || _        |r|dk    sJ d S d S Nr	   r   selfr   r   r   r   r   s         5lib/python3.11/site-packages/numba/misc/dummyarray.py__init__zDim.__init__,   sA    
		&TQYYYY&&YY    c                    t          |t                    r|                    | j                  \  }}}|| j        z  }| j        |t          | j                  z  z   }| j        |t          | j                  z  z   }|dk    rd}nt          |||          }t          ||||d          }|S |dk    r| ||dz            n	| dd          }|j        dk    rt          t          |j        |j
        |j        |j        d          S )Nr   r	   Fr   T)
isinstancesliceindicesr   r   r   abs_compute_sizer   
IndexErrorr   )	r   itemr   r   stepr   r   retsliceds	            r   __getitem__zDim.__getitem__4   s#   dE"" 	 $TY 7 7E4DK'FJT[)9)9!99E:s4;'7'7 77D{{$UD&99  C J,0BJJT$tax-((DIF{a  l[[}   r   c                 &    | j         || j        z  z   S N)r   r   )r   idxs     r   
get_offsetzDim.get_offsetR   s    zC$+---r   c                 @    d}|| j         | j        | j        | j        fz  S )Nz*Dim(start=%s, stop=%s, size=%s, stride=%s))r   r   r   r   )r   strfmts     r   __repr__zDim.__repr__U   s#    =TY	4;GGGr   c                 h    t          | j        |z
  | j        |z
  | j        | j        | j                  S )Nr   )r   r   r   r   r   r   )r   bases     r   	normalizezDim.normalizeY   s<    d*T1A	$+dkK K K 	Kr   Nc                     || j         }|| j        }|| j        }|| j        }|| j        }t          |||||          S r)   )r   r   r   r   r   r   r   s         r   copyzDim.copy]   sT    =JE<9D<9D>[F>[F5$ff555r   c                     | j         |k    S r)   r   )r   itemsizes     r   is_contiguouszDim.is_contiguousj   s    {h&&r   )NNNNN)__name__
__module____qualname____doc__	__slots__r   r'   r+   r.   r1   r3   r7    r   r   r   r      s          <I' ' '  <. . .H H HK K K6 6 6 6' ' ' ' 'r   r   c                 P    t          d t          | |          D                       S )Nc              3   F   K   | ]\  }}|                     |          V  d S r)   )r+   ).0ids      r   	<genexpr>z compute_index.<locals>.<genexpr>o   s0      >>41aq||A>>>>>>r   )sumzip)r   dimss     r   compute_indexrG   n   s)    >>3w+=+=>>>>>>r   c                       e Zd ZdZd Zd ZdS )ElementFc                     || _         d S r)   extent)r   rL   s     r   r   zElement.__init__u   s    r   c              #      K   | j         V  d S r)   rK   r   s    r   iter_contiguous_extentzElement.iter_contiguous_extentx   s      kr   N)r8   r9   r:   is_arrayr   rO   r=   r   r   rI   rI   r   s7        H      r   rI   c                       e Zd ZdZdZed             Zd Zd Zd Z	d Z
d Zed	             Zed
             Zd Zd ZddZ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                     g }t          ||          D ]6\  }}t          ||||z  z   ||d          }|                    |           d}7 | ||          S )NF)r   r   )rE   r   append)	clsoffsetshapestridesr6   rF   ashapeastridedims	            r   	from_desczArray.from_desc   sx    "5'22 	 	OFGffv'77"$ $ $CKKFFs4"""r   c                    t          |          | _        t          | j                  | _        t          d | j        D                       | _        t          d | j        D                       | _        || _        t          j        t          j
        | j        d          | _        |                                 | _        |                                 | _        d S )Nc              3   $   K   | ]}|j         V  d S r)   )r   r@   r[   s     r   rC   z!Array.__init__.<locals>.<genexpr>   s$      9938999999r   c              3   $   K   | ]}|j         V  d S r)   r5   r_   s     r   rC   z!Array.__init__.<locals>.<genexpr>   s$      ==CSZ======r   r	   )tuplerF   lenr
   rW   rX   r6   	functoolsreduceoperatormulr   _compute_extentrL   _compute_layoutflags)r   rF   r6   s      r   r   zArray.__init__   s    $KK		NN	99ty99999
==49===== $X\4:qAA	**,,))++


r   c                    | j         sdddS t          d | j         D                       rdddS ddd}| j        }t          | j                   D ]9}|j        dk    rdddc S |j        dk    r|j        |k    rd|d<   ||j        z  }:| j        }| j         D ]+}|j        dk    r|j        |k    r	d|d<   |c S ||j        z  },|S )	NT)C_CONTIGUOUSF_CONTIGUOUSc                 $    g | ]}|j         d k    S )r   r5   r_   s     r   
<listcomp>z)Array._compute_layout.<locals>.<listcomp>   s    555C
a555r   Fr   r	   rk   rl   )rF   anyr6   reversedr   r   )r   ri   sdr[   s       r   rh   zArray._compute_layout   s!    y 	@$($??? 554955566 	B$)5AAA!%t<< ]DI&& 	 	Cx1}}(,dCCCCCx1}}:##,1E.)ch ]9 	 	Cx1}}:##,1E.) LLLchr   c                     dg| j         z  }d | j        D             }t          || j                  }t          || j                  | j        z   }t          ||          }t          ||          S )Nr   c                     g | ]}|d z
  S )r	   r=   r@   ss     r   rn   z)Array._compute_extent.<locals>.<listcomp>   s    ---Q1q5---r   )r
   rW   rG   rF   r6   maxr   )r   firstidxlastidxr   r   s        r   rg   zArray._compute_extent   sl    3?--$*---h	22Wdi004=@4eT"""r   c                 (    d| j         d| j        dS )Nz<Array dims=z
 itemsize=>)rF   r6   rN   s    r   r.   zArray.__repr__   s     04			4===IIr   c                 .   t          |t                    s|g}nt          |          }t          |          }t          | j                  }||k    rt          d||z
  fz            t          |          |k     r6|                    t          d d                      t          |          |k     6d t          | j        |          D             }d |D             }t          || j
                  }|r |j        | d         S t          |j                  S )Nz%d extra indices givenc                 >    g | ]\  }}|                     |          S r=   )r'   )r@   r[   its      r   rn   z%Array.__getitem__.<locals>.<listcomp>   s(    HHHR##HHHr   c                 *    g | ]}|j         	|j        S r=   )r   r   )r@   rB   s     r   rn   z%Array.__getitem__.<locals>.<listcomp>   s!    999q9AF999r   r   )r   ra   listrb   rF   r"   rT   r   rE   rR   r6   reshaperI   rL   )r   r#   nitemr
   rF   newshapearrs          r   r'   zArray.__getitem__   s   $&& 	6DD::DD		49~~4<<5GHHH $ii$KKdD))*** $ii$ IH3ty$3G3GHHH99D999D$-(( 	'3;)!,,3:&&&r   c                     | j         d         S )Nrk   ri   rN   s    r   is_c_contigzArray.is_c_contig       z.))r   c                     | j         d         S )Nrl   r   rN   s    r   is_f_contigzArray.is_f_contig   r   r   c              #   ~  K   | 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                  rEd |D             }t          j	        | D ](}t          ||          }||j        z   ||j        z   fV  )dS d | j        D             }t          j	        | D ]%}t          || j                  }||| j        z   fV  &dS )z Generates extents
        r   r   r	   Nc                 ,    g | ]}t          |          S r=   rangert   s     r   rn   z0Array.iter_contiguous_extent.<locals>.<listcomp>      666aq666r   c                 ,    g | ]}t          |          S r=   r   rt   s     r   rn   z0Array.iter_contiguous_extent.<locals>.<listcomp>  r   r   )r   r   rL   rF   r   rW   r7   r6   	itertoolsproductrG   r   r   )r   innerdim	outerdims
outershapeoslenr   r0   rV   s           r   rO   zArray.iter_contiguous_extent   s       	9t/ 	9+y|"TYr]%9999Q< IabbM	!Z^

9R= IcrcN	!Z_
%%dm44 	966:666(0%8 F FG()<<D/1EEEEEEF F 764:666(0%8 9 9G*7DI>>F &4="8888889 9r   c                    | j         }t          |          }|| j        k    r| d fS |                    dd          }|r$t	          d|                                z            |dvrt          d          d}d}t          |          D ](\  }}	|	dk     r|dk    r|}t          d	          ||	z  })|dk    rG|dk    s| j        |z  dk    rt          d
          |d|         | j        |z  fz   ||dz   d          z   }t          j
        t          j        |d          }
|dk    r| j        rdnd}|
| j        k    rt          d          | j        s| j        rW|dk    rt          t!          | |                    }n|dk    rt          t#          | |                    }nt%          d          t'          j        |t&          j        j                  }t'          j        | j        t&          j        j                  }t'          j        | j        t&          j        j                  }t'          j        |t&          j        j                  }t3          ||||||| j        |dk              st7          d          |                     | j        j        ||| j                  }|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 arrayunreachable)dtypezreshape would require copyrW   rX   r6   ) r
   rb   rW   pop	TypeErrorkeys
ValueError	enumerater   rc   rd   re   rf   r   r   r   iter_strides_c_contigiter_strides_f_contigAssertionErrornpempty	ctypeslibc_intparrayrX   r   r6   NotImplementedErrorr\   rL   r   rO   )r   newdimskwsoldndnewndr   
unknownidx	knownsizerA   r[   newsize
newstridesolddims
oldstridesr%   s                  r   r   zArray.reshape  s   	Gdj  :%% 	I:SXXZZGHHH./// 
	(( 	! 	!FAsQww##!"JJ$%MNNNS 		 ??A~~Y!6!!;!; !QRRR!!J,/9	134!*q.//23 "8<!<<C<<+4CCEdiDEEE 	Ht/ 	H||!"7g"F"FGG

#!"7g"F"FGG

$]333%)<==J htz1DEEEG$,bl6IJJJJhwbl.ABBBG)	 	 
H **FGGGnnT[.g%/$-  I I D44667777r   Nc                 |   g g }}|Qt          | j        | j                  D ]5\  }}|dk    r*|                    |           |                    |           6nt	          |t
                    s|f}|D ]"}| j        |         dk    rt          d          #t          t          | j        | j                            D ]6\  }\  }}||vr*|                    |           |                    |           7|                     | j	        j
        ||| j                  }|t          |                                           fS )Nr	   zDcannot select an axis to squeeze out which has size not equal to oner   )rE   rW   rX   rT   r   ra   r   r   r\   rL   r   r6   r   rO   )	r   axisr   r   lengthr   axrA   newarrs	            r   squeezezArray.squeezea  sj   !2*<"%dj$,"?"? . .Q;;OOF+++%%f---.
 dE** w  :b>Q&&$!   '
 (1TZ1N1N'O'O . .##FFD==OOF+++%%f---K]	   
 
 tD7799::::r   r   c                 &   |dvrt          d          |dv r| j        s|dv ra| j        rZ| j        f}| j        f}|                     | j        j        ||| j                  }|t          | 	                                          fS t          d          )Nr   r   CAFAzravel on non-contiguous array)r   r   r   r   r6   r\   rL   r   r   rO   r   )r   r   r   r   r   s        r   ravelzArray.ravel}  s    .///TMMd.MD==T%5=	|H-)J..!2Hj!%0 0CT88::;;;; &&EFFFr   r)   )r   )r8   r9   r:   r;   rP   classmethodr\   r   rh   rg   r.   r'   propertyr   r   rO   r   r   r   r=   r   r   rR   rR   |   s        . H# # [#, , ,$ $ $L# # #J J J' ' '0 * * X* * * X*9 9 94J8 J8 J8X; ; ; ;8G G G G G Gr   rR   c              #   l   K   || j         n|}| j        }|V  d}|dd         D ]}||z  }||z  V  dS )z$yields the f-contiguous strides
    Nr	   r   )rW   r6   )r   rW   r6   rD   ru   s        r   r   r     si       CIIEE|H
NNN
C3B3Z  qHn r   c              #      K   | j         n| j        fd}t          t           |                                D ]}|V  dS )z$yields the c-contiguous strides
    Nc               3   d   K   V  d} t          dd                    D ]}| |z  } | z  V  d S r   )rp   )rD   ru   r6   rW   s     r   genz"iter_strides_c_contig.<locals>.gen  sZ      %)$$ 	! 	!A1HC.    	! 	!r   )rW   r6   rp   r   )r   rW   r   rA   r6   s    `  @r   r   r     sx       CIIEE|H! ! ! ! ! ! d3355kk""   r   c                     t          | t                    rdS t          | t                    r/t          |           |k    rt	          d | D                       sdS ndS dS )NFc              3   @   K   | ]}t          |t                    V  d S r)   )r   r   )r@   r}   s     r   rC   z&is_element_indexing.<locals>.<genexpr>  s,      <<z"e,,<<<<<<r   T)r   r   ra   rb   ro   )r#   r
   s     r   is_element_indexingr     sm    $ 	u	D%	 	  t99<<t<<<<< t t5r   c                 R    |dk    r| }|}n|}| }| }||k    rdS ||z
  dz
  |z  dz   S )z1Algorithm adapted from cpython rangeobject.c
    r   r	   r=   )r   r   r$   lohis        r   r!   r!     sP     axxu	RxxqGaKD 1$$r   r)   )collectionsr   r   rc   re   ctypesnumpyr   numbar   
numba.corer   r   	CFUNCTYPEc_intc_longr   	ndpointerr   	c_helpersr   objectr   rG   rI   rR   r   r   r   r!   r=   r   r   <module>r      s?   " " " " " "                           
Hw.	/	/
))
L
ML2<.Q77L2<.Q77
ML2<.Q77L2<.Q77
M
L
 
 /0
2 
2 O' O' O' O' O'& O' O' O'd? ? ?    f   NG NG NG NG NGF NG NG NGb	 	 	 	   "  % % % % %r   