
    J/Ph7                        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	  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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         ]/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numba/cuda/cudadrv/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__2   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_offsetP   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__S   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.normalizeW   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_contiguoush   s    {h&&r   )NNNNN)__name__
__module____qualname____doc__	__slots__r   r&   r*   r-   r0   r2   r6    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>m   s0      >>41aq||A>>>>>>r   )sumzip)r   dimss     r   compute_indexrF   l   s)    >>3w+=+=>>>>>>r   c                       e Zd ZdZd Zd ZdS )ElementFc                     || _         d S r(   extent)r   rK   s     r   r   zElement.__init__s   s    r   c              #      K   | j         V  d S r(   rJ   r   s    r   iter_contiguous_extentzElement.iter_contiguous_extentv   s      kr   N)r7   r8   r9   is_arrayr   rN   r<   r   r   rH   rH   p   s7        H      r   rH   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   )rD   r   append)	clsoffsetshapestridesr5   rE   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?   rZ   s     r   rB   z!Array.__init__.<locals>.<genexpr>   s$      9938999999r   c              3   $   K   | ]}|j         V  d S r(   r4   r^   s     r   rB   z!Array.__init__.<locals>.<genexpr>   s$      ==CSZ======r   r   )tuplerE   lenr	   rV   rW   r5   	functoolsreduceoperatormulr   _compute_extentrK   _compute_layoutflags)r   rE   r5   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   r4   r^   s     r   
<listcomp>z)Array._compute_layout.<locals>.<listcomp>   s    555C
a555r   Fr   r   rj   rk   )rE   anyr5   reversedr   r   )r   rh   sdrZ   s       r   rg   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   rm   z)Array._compute_extent.<locals>.<listcomp>   s    ---Q1q5---r   )r	   rV   rF   rE   r5   maxr   )r   firstidxlastidxr   r   s        r   rf   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=>)rE   r5   rM   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?   rZ   its      r   rm   z%Array.__getitem__.<locals>.<listcomp>   s(    HHHR##HHHr   c                 *    g | ]}|j         	|j        S r<   )r   r   )r?   rA   s     r   rm   z%Array.__getitem__.<locals>.<listcomp>   s!    999q9AF999r   r   )r   r`   listra   rE   r!   rS   r   rD   rQ   r5   reshaperH   rK   )r   r"   nitemr	   rE   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 )Nrj   rh   rM   s    r   is_c_contigzArray.is_c_contig       z.))r   c                     | j         d         S )Nrk   r   rM   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<   rangers   s     r   rm   z0Array.iter_contiguous_extent.<locals>.<listcomp>	      666aq666r   c                 ,    g | ]}t          |          S r<   r   rs   s     r   rm   z0Array.iter_contiguous_extent.<locals>.<listcomp>  r   r   )r   r   rK   rE   r   rV   r6   r5   	itertoolsproductrF   r   r   )r   innerdim	outerdims
outershapeoslenr   r/   rU   s           r   rN   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rV   rW   r5   ) r	   ra   rV   pop	TypeErrorkeys
ValueError	enumerater   rb   rc   rd   re   r   r   r~   iter_strides_c_contigiter_strides_f_contigAssertionErrornpempty	ctypeslibc_intparrayrW   r
   r5   NotImplementedErrorr[   rK   r   rN   )r   newdimskwsoldndnewndr   
unknownidx	knownsizer@   rZ   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!!;!;  "9 : : : "!J,/yI-/0j1noo./ "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   )rD   rV   rW   rS   r   r`   r   r   r[   rK   r   r5   r~   rN   )	r   axisr   r   lengthr   axr@   newarrs	            r   squeezezArray.squeeze`  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   r5   r[   rK   r   r~   rN   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   )r7   r8   r9   r:   rO   classmethodr[   r   rg   rf   r-   r&   propertyr   r   rN   r   r   r   r<   r   r   rQ   rQ   z   s        . H# # [#, , ,$ $ $L# # #J J J' ' '0 * * X* * * X*9 9 94K8 K8 K8Z; ; ; ;8G G G G G Gr   rQ   c              #   l   K   || j         n|}| j        }|V  d}|dd         D ]}||z  }||z  V  dS )z$yields the f-contiguous strides
    Nr   r   )rV   r5   )r   rV   r5   rC   rt   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   )ro   )rC   rt   r5   rV   s     r   genz"iter_strides_c_contig.<locals>.gen  sZ      %)$$ 	! 	!A1HC.    	! 	!r   )rV   r5   ro   r~   )r   rV   r   r@   r5   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   rB   z&is_element_indexing.<locals>.<genexpr>  s,      <<z"e,,<<<<<<r   T)r   r   r`   ra   rn   )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   rb   rd   ctypesnumpyr   numbar   r   	CFUNCTYPEc_intc_longr   	ndpointerr   	c_helpersr
   objectr   rF   rH   rQ   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   OG OG OG OG OGF OG OG OGd	 	 	 	   "  % % % % %r   