§
    ƒÛg„7  ã                   óŽ  — 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 )ÚDimzÃA 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         úK/granary/edev/quantum/lib/python3.11/site-packages/numba/misc/dummyarray.pyÚ__init__zDim.__init__,   sA   € ØˆŒ
ØˆŒ	ØˆŒ	ØˆŒØˆŒØÐ&˜T QšY˜Y˜Y˜YÐ&Ð&˜Y˜Yó    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#  € Ý�d�EÑ"Ô"ð 	Ø $§¢¨T¬YÑ 7Ô 7ÑˆE�4˜Ø˜DœKÑ'ˆFØ”J ­¨T¬[Ñ)9Ô)9Ñ!9Ñ9ˆEØ”: ¥s¨4¬;Ñ'7Ô'7Ñ 7Ñ7ˆDØ˜Š{ˆ{Ø��å$ U¨D°&Ñ9Ô9�ÝØØØØØðñ ô ˆCð ˆJà,0°BªJ¨J�T˜$˜t a™x˜-Ô(Ð(¸DÀÀÀ¼IˆFØŒ{˜aÒÐÝ Ð ÝØ”lØ”[Ø”[Ø”}Øðñ ô ð r   c                 ó&   — | j         || j        z  z   S ©N)r   r   )r   Úidxs     r   Ú
get_offsetzDim.get_offsetR   s   € ØŒz˜C $¤+Ñ-Ñ-Ð-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#   € Ø=ˆØ˜œ T¤Y°´	¸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Ñ*°´¸TÑ1AØœ	¨$¬+¸d¼kð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   € Øˆ=Ø”JˆEØˆ<Ø”9ˆDØˆ<Ø”9ˆDØˆ>Ø”[ˆFØˆ>Ø”[ˆFÝ�5˜$  f¨fÑ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   è è € Ð>Ð>¡4 1 aˆq�|Š|˜A‰ŒÐ>Ð>Ð>Ð>Ð>Ð>r   )ÚsumÚzip)r   Údimss     r   Úcompute_indexrG   n   s)   € ÝÐ>Ð>­3¨w¸Ñ+=Ô+=Ð>Ñ>Ô>Ñ>Ô>Ð>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ð 	ð 	‰OˆF�GÝ�f˜f v°Ñ'7Ñ7¸ÀØ"ð$ñ $ô $ˆCà�KŠK˜ÑÔÐØˆFˆFØˆs�4˜Ñ"Ô"Ð"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¨˜3œ8Ð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$   è è € Ð=Ð=¨C˜SœZÐ=Ð=Ð=Ð=Ð=Ð=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©   € Ý˜$‘K”KˆŒ	Ý˜œ	‘N”NˆŒ	ÝÐ9Ð9¨t¬yÐ9Ñ9Ô9Ñ9Ô9ˆŒ
ÝÐ=Ð=°4´9Ð=Ñ=Ô=Ñ=Ô=ˆŒØ ˆŒÝÔ$¥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Ð5 C�”
˜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Ð5¨4¬9Ð5Ñ5Ô5Ñ6Ô6ð 	BØ$)¸5ÐAÐAÐAà!%°tÐ<Ð<ˆð Œ]ˆÝ˜DœIÑ&Ô&ð 	ð 	ˆCØŒx˜1Š}ˆ}à(,¸dÐCÐCÐCÐCÐCØŒx˜1Š}ˆ}Ø”: Ò#Ð#Ø,1�E˜.Ñ)Ø�c”h‘�øð Œ]ˆØ”9ð 	ð 	ˆCØŒx˜1Š}ˆ}Ø”: Ò#Ð#Ø,1�E˜.Ñ)Ø �L�L�LØ�c”h‘�øàˆ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   € Ð-Ð-Ð-˜Q�1�q‘5Ð-Ð-Ð-r   )r
   rW   rG   rF   r6   Úmaxr   )r   ÚfirstidxÚlastidxr   r   s        r   rg   zArray._compute_extentÐ   sl   € Ø�3˜œ‘?ˆØ-Ð- $¤*Ð-Ñ-Ô-ˆÝ˜h¨¬	Ñ2Ô2ˆÝ˜W d¤iÑ0Ô0°4´=Ñ@ˆÝ�4˜ÑÔˆÝ�e˜TÑ"Ô"Ð"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Ð9˜q°´Ð9�A”FÐ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  € Ý˜$¥Ñ&Ô&ð 	Ø�6ˆDˆDå˜‘:”:ˆDå�D‘	”	ˆÝ�4”9‰~Œ~ˆØ�4Š<ˆ<ÝÐ5¸À¹¸ÑGÑHÔHÐHõ �$‰iŒi˜$ÒÐØ�KŠK�˜d DÑ)Ô)Ñ*Ô*Ð*õ �$‰iŒi˜$ÒÐð IÐHµ3°t´yÀ$Ñ3GÔ3GÐHÑHÔHˆØ9Ð9 DÐ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Ð6 a�˜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‡  è è € ð Ôð 	9˜tÔ/ð 	9Ø”+ÐÐÐÐÐàŒy˜Œ|Ô" T¤Y¨r¤]Ô%9Ò9Ð9Øœ9 Qœ<�Ø œI a b bœM�	Ø!œZ¨¨¨œ^�
�
àœ9 Rœ=�Ø œI c r cœN�	Ø!œZ¨¨¨œ_�
à×%Ò% d¤mÑ4Ô4ð 	9Ø6Ð6¨:Ð6Ñ6Ô6�Ý(Ô0°%Ð8ð Fð F�GÝ(¨°)Ñ<Ô<�DØ ¤Ñ/°¸¼Ñ1EÐEÐEÐEÐEÐEðFð Fð 7Ð6¨4¬:Ð6Ñ6Ô6�Ý(Ô0°%Ð8ð 9ð 9�GÝ*¨7°D´IÑ>Ô>�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#          | |¦  «        ¦  «        }nÚt%          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‘”ˆà�d”jÒ Ð Ø˜�:Ðà—’˜ Ñ%Ô%ˆØð 	IÝÐ:¸S¿XºX¹Z¼ZÑGÑHÔHÐHØ˜ÐÐÝÐ.Ñ/Ô/Ð/ð ˆ
Øˆ	Ý Ñ(Ô(ð 	!ð 	!‰FˆAˆsØ�QŠwˆwØ Ò#Ð#Ø!"�J�Jå$Ð%MÑNÔNÐNà˜SÑ �	�	ð ˜Š?ˆ?Ø˜AŠ~ˆ~ ¤¨YÑ!6¸!Ò!;Ð!;Ý Ð!QÑRÔRÐRà! ! J ,Ô/Øœ9¨	Ñ1Ð3ñ4à! *¨q¡. / /Ô2ñ3�õ Ô"¥8¤<°¸!Ñ<Ô<ˆà�CŠ<ˆ<ØÔ+Ð4�C�C°ˆEà�d”iÒÐÝÐDÑEÔEÐEàÔð 	H˜tÔ/ð 	HØ˜Š|ˆ|Ý!Õ"7¸¸gÑ"FÔ"FÑGÔG�
�
Ø˜#’�Ý!Õ"7¸¸gÑ"FÔ"FÑGÔG�
�
å$ ]Ñ3Ô3Ð3åœ %­¬Ô)<Ñ=Ô=ˆJõ ”h˜tœzµ´Ô1DÐEÑEÔEˆGÝœ $¤,µb´lÔ6IÐJÑJÔJˆJÝ”h˜w­b¬lÔ.AÐBÑBÔBˆGå)ØØØØØØØ”Ø˜’ñ	ô 	ð 
Hõ *Ð*FÑGÔGÐGà�nŠn˜Tœ[Ô.°gØ%/¸$¼-ð ñ Iô Iˆð •D˜×4Ò4Ñ6Ô6Ñ7Ô7Ð7Ð7r   Nc                 ó|  — g g }}|€Qt          | j        | j        ¦  «        D ]5\  }}|dk    r*|                     |¦  «         |                     |¦  «         Œ6n›t	          |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�*ˆØˆ<Ý"% d¤j°$´,Ñ"?Ô"?ð .ð .‘�˜Ø˜Q’;�;Ø—O’O FÑ+Ô+Ð+Ø×%Ò% fÑ-Ô-Ð-øð.õ
 ˜d¥EÑ*Ô*ð Ø�w�Øð ð �Ø”:˜b”> QÒ&Ð&Ý$ð!ñô ð ð 'õ
 (1µ°T´ZÀÄÑ1NÔ1NÑ'OÔ'Oð .ð .Ñ#�Ñ#�F˜FØ˜D�=�=Ø—O’O FÑ+Ô+Ð+Ø×%Ò% fÑ-Ô-Ð-øØ—’ØŒKÔØØØ”]ð	  ñ 
ô 
ˆð •t˜D×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¢   € Ø˜ÐÐÝÐ.Ñ/Ô/Ð/à�TˆMˆM˜dÔ.ˆMØ˜D�=�= TÔ%5�=Øœ	�|ˆHØœ-Ð)ˆJØ—.’. ¤Ô!2°H¸jØ!%¤ñ0ô 0ˆCà�˜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ð 9ð4J8ð J8ð J8ðX;ð ;ð ;ð ;ð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   è è € ð ˜ˆCŒIˆI¨E€EØŒ|€HØ
€N€N€NØ
€CØ�3�B�3ŒZð ð ˆØˆq‰ˆØ�H‰nÐÐÐÐðð 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Ø�1‰HˆCØ˜‘.Ð Ð Ð Ð ð	!ð 	!r   )rW   r6   rp   r   )rƒ   rW   rÇ   rA   r6   s    `  @r   r¥   r¥   ™  sx   øøè è € ð ˜ˆCŒIˆI¨E€EØŒ|€Hð!ð !ð !ð !ð !ð !õ •d˜3˜3™5œ5‘k”kÑ"Ô"ð ð ˆØˆˆˆˆðð 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�%Ñ	 Ô	 ð Ýˆt‰9Œ9˜ÒÐÝÐ<Ð<°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   € ð ˆa‚x€xØˆØˆˆàˆØˆØˆuˆØ	ˆR‚x€xØˆqØ�‰G�a‰K˜DÑ  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?  ðØ "Ð "Ð "Ð "Ð "Ð "Ø Ð Ð Ð Ø Ð Ð Ð Ø €€€Ø €€€à Ð Ð Ð à Ð Ð Ð Ð Ð Ø Ð Ð Ð Ð Ð ð 
ˆ�H˜w¨Ð.Ñ	/Ô	/€ð
Ð)˜Ô)Ø
„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   