§
    ƒÛgÜ  ã                   óJ   — d Z ddlZddlmZ dZ eddg¦  «        Zd
d„Zd	„ ZdS )zÁ
The same algorithm as translated from numpy.
See numpy/core/src/npysort/mergesort.c.src.
The high-level numba code is adding a little overhead comparing to
the pure-C implementation in numpy.
é    N)Ú
namedtupleé   ÚMergesortImplementationÚrun_mergesortFc                 ór  ‡‡‡— t          dd¬¦  «        }‰€ | di |¤Žd„ ¦   «         Šn  | di |¤Ž‰¦  «        Š|r | di |¤Žˆfd„¦   «         Šn | di |¤Žˆfd„¦   «         Š | di |¤Žˆˆfd„¦   «         Š | d¬¦  «        ˆfd	„¦   «         } | d¬¦  «        ˆfd
„¦   «         }t          |r|n|¬¦  «        S )NTF)Úno_cpython_wrapperÚ_nrtc                 ó   — | |k     S ©N© )ÚaÚbs     úJ/granary/edev/quantum/lib/python3.11/site-packages/numba/misc/mergesort.pyÚltzmake_mergesort_impl.<locals>.lt   s   € à�q’5ˆLó    c                 ó4   •—  ‰||          ||         ¦  «        S r   r   ©r   r   Úvalsr   s      €r   Úlessthanz%make_mergesort_impl.<locals>.lessthan   s   ø€ à�2�d˜1”g˜t AœwÑ'Ô'Ð'r   c                 ó   •—  ‰| |¦  «        S r   r   r   s      €r   r   z%make_mergesort_impl.<locals>.lessthan#   s   ø€ à�2�a˜‘8”8ˆOr   c                 óœ  •— | j         t          k    �r2| j         dz  } ‰
| d|…         ||¦  «          ‰
| |d…         ||¦  «         t          |¦  «        D ]}| |         ||<   Œ|d|…         }| |d…         }| }dx}x}}	||j         k     r`||j         k     rU ‰||         ||         |¦  «        s||         ||	<   |dz  }n||         ||	<   |dz  }|	dz  }	||j         k     r||j         k     °U||j         k     r ||         ||	<   |dz  }|	dz  }	||j         k     ° ||j         k     r"||         ||	<   |dz  }|	dz  }	||j         k     ° dS dS d}|| j         k     rz|}|dk    r` ‰| |         | |dz
           |¦  «        rD| |         | |dz
           c| |dz
  <   | |<   |dz  }|dk    r ‰| |         | |dz
           |¦  «        °D|dz  }|| j         k     °xdS dS )a—  The actual mergesort function

        Parameters
        ----------
        arr : array [read+write]
            The values being sorted inplace.  For argsort, this is the
            indices.
        vals : array [readonly]
            ``None`` for normal sort.  In argsort, this is the actual array values.
        ws : array [write]
            The workspace.  Must be of size ``arr.size // 2``
        é   Nr   é   )ÚsizeÚSMALL_MERGESORTÚrange)Úarrr   ÚwsÚmidÚiÚleftÚrightÚoutÚjÚkÚargmergesort_innerr   s             €€r   r&   z/make_mergesort_impl.<locals>.argmergesort_inner'   sZ  ø€ ð Œ8•oÒ%Ñ%à”(˜a‘-ˆCàÐ˜s 4 C 4œy¨$°Ñ3Ô3Ð3ØÐ˜s 3 4 4œy¨$°Ñ3Ô3Ð3õ ˜3‘Z”Zð ð �Ø˜Aœ��1‘�ð �d�s�d”8ˆDØ˜˜˜”IˆEØˆCàˆMˆAˆM��AØ�d”i’-�- A¨¬
¢N NØ�x  a¤¨$¨q¬'°4Ñ8Ô8ð Ø! !œW�C˜‘FØ˜‘F�A�Aà" 1œX�C˜‘FØ˜‘F�AØ�Q‘�ð �d”i’-�- A¨¬
¢N Nð �d”i’-�-Ø˜aœ��A‘Ø�Q‘�Ø�Q‘�ð �d”i’-�-ð
 �e”j’.�.Ø˜qœ��A‘Ø�Q‘�Ø�Q‘�ð �e”j’.�.�.�.�.�.ð ˆAØ�c”h’,�,Ø�Ø˜!’e�e  ¨¨Q¬°°Q¸±U´¸TÑ BÔ B�eØ),¨Q¬°°Q¸±U´Ð&�C˜˜A™‘J  A¡Ø˜‘F�Að ˜!’e�e  ¨¨Q¬°°Q¸±U´¸TÑ BÔ B�eð �Q‘�ð �c”h’,�,�,�,�,�,r   )r   c                 óh   •— t          j        | j        dz  | j        ¬¦  «        } ‰| d|¦  «         | S )ÚInplacer   ©ÚdtypeN)ÚnpÚemptyr   r*   )r   r   r&   s     €r   Ú	mergesortz&make_mergesort_impl.<locals>.mergesorte   s;   ø€ õ ŒX�c”h !‘m¨3¬9Ð5Ñ5Ô5ˆØÐ˜3  bÑ)Ô)Ð)Øˆ
r   c                 óš   •— t          j        | j        ¦  «        }t          j        | j        dz  |j        ¬¦  «        } ‰|| |¦  «         |S )zOut-of-placer   r)   )r+   Úaranger   r,   r*   )r   Úidxsr   r&   s      €r   Úargmergesortz)make_mergesort_impl.<locals>.argmergesortm   sL   ø€ õ Œy˜œÑ"Ô"ˆÝŒX�c”h !‘m¨4¬:Ð6Ñ6Ô6ˆØÐ˜4  bÑ)Ô)Ð)Øˆr   )r   r   )Údictr   )Úwrapr   Ú
is_argsortÚkwargs_liter-   r1   r&   r   s    `    @@r   Úmake_mergesort_implr6      s¬  øøø€ Ý¨$°UÐ;Ñ;Ô;€Kð 
€zØ	ˆÐ	Ð	�Ð	Ð	ð	ð 	ñ 
Ô	ð	ð 	ð !ˆTˆTÐ Ð �KÐ Ð  Ñ$Ô$ˆàð Ø	ˆÐ	Ð	�Ð	Ð	ð	(ð 	(ð 	(ð 	(ñ 
Ô	ð	(ð 	(ð 
ˆÐ	Ð	�Ð	Ð	ð	ð 	ð 	ð 	ñ 
Ô	ð	ð 
€TÐÐˆKÐÐð9ð 9ð 9ð 9ð 9ñ Ôð9ðz 
€T˜TÐ"Ñ"Ô"ðð ð ð ñ #Ô"ðð 
€T˜TÐ"Ñ"Ô"ðð ð ð ñ #Ô"ðõ #Ø'1Ð@�|�|°yð
ñ 
ô 
ð 
r   c                  ó.   — ddl m} t          |g| ¢R i |¤ŽS )Nr   )Únjit)Únumbar8   r6   )ÚargsÚkwargsr8   s      r   Úmake_jit_mergesortr<   z   s4   € ØÐÐÐÐÐõ ˜tÐ5 dÐ5Ð5Ð5¨fÐ5Ð5Ð5r   )NF)	Ú__doc__Únumpyr+   Úcollectionsr   r   r   r6   r<   r   r   r   ú<module>r@      sˆ   ððð ð Ð Ð Ð Ø "Ð "Ð "Ð "Ð "Ð "ð €ð %˜*Ð%>ØðAñ ô Ð ð
d
ð d
ð d
ð d
ðN6ð 6ð 6ð 6ð 6r   