ó
    SBìgÛ  ã                   ó  • S r / SQrSSKrSSKrSSKJr  SSKr SSKr\
r\
4r\r\r\rS rS rS rS rSS	 jrS
 rSrS rS rS rS r " S S5      rSS jr\R<                  r\R@                  r!g! \	 a    SSKr Naf = f)a³  
Python 3.X compatibility tools.

While this file was originally intended for Python 2 -> 3 transition,
it is now used to create a compatibility layer between different
minor versions of Python 3.

While the active version of numpy may not support a given version of python, we
allow downstream libraries to continue to use these shims for forward
compatibility with numpy while they transition their code to newer versions of
Python.
)ÚbytesÚasbytesÚ	isfileobjÚgetexceptionÚstrcharÚunicodeÚ	asunicodeÚasbytes_nestedÚasunicode_nestedÚasstrÚopen_latin1ÚlongÚ
basestringÚsixuÚinteger_typesÚis_pathlib_pathÚnpy_load_moduleÚPathÚpickleÚcontextlib_nullcontextÚ	os_fspathÚos_PathLikeé    N)r   c                 ód   • [        U [        5      (       a  U R                  S5      $ [        U 5      $ ©NÚlatin1©Ú
isinstancer   ÚdecodeÚstr©Úss    Ú3/usr/lib/python3/dist-packages/numpy/compat/py3k.pyr   r   "   ó'   € Ü�!”U×ÑØ�x‰x˜Ó!Ð!Üˆq‹6€Mó    c                 ód   • [        U [        5      (       a  U $ [        U 5      R                  S5      $ r   )r   r   r   Úencoder    s    r"   r   r   '   s'   € Ü�!”U×ÑØˆÜˆq‹6�=‰=˜Ó"Ð"r$   c                 ód   • [        U [        5      (       a  U R                  S5      $ [        U 5      $ r   r   r    s    r"   r   r   ,   r#   r$   c                 óÄ   • [        U [        R                  [        R                  [        R                  45      (       d  g U R                  5         g! [         a     gf = f)NFT)r   ÚioÚFileIOÚBufferedReaderÚBufferedWriterÚfilenoÚOSError)Úfs    r"   r   r   1   sN   € Ü�aœ"Ÿ)™)¤R×%6Ñ%6¼×8IÑ8IÐJ×KÑKØðð 	
�‰Œ
ØøÜó Ùðús   ÁA Á
AÁAc                 ó   • [        XSS9$ )Nz
iso-8859-1)ÚmodeÚencoding)Úopen)Úfilenamer1   s     r"   r   r   <   s   € Ü�¨lÑ;Ð;r$   c                 ó   • U $ ©N© r    s    r"   r   r   ?   s   € Ø€Hr$   ÚUc                  ó2   • [         R                  " 5       S   $ )Né   )ÚsysÚexc_infor7   r$   r"   r   r   D   s   € Ü�<Š<‹>˜!ÑÐr$   c                 ó²   • [        U S5      (       a7  [        U [        [        45      (       d  U  Vs/ s H  n[	        U5      PM     sn$ [        U 5      $ s  snf ©NÚ__iter__)Úhasattrr   r   r   r	   r   ©ÚxÚys     r"   r	   r	   G   sI   € Üˆq�*×Ñ¤j°´U¼GÐ4D×&EÑ&EÙ+,Ó-ª1 a”˜qÖ!©1Ñ-Ð-ä�q‹zÐùò .ó   ±Ac                 ó²   • [        U S5      (       a7  [        U [        [        45      (       d  U  Vs/ s H  n[	        U5      PM     sn$ [        U 5      $ s  snf r>   )r@   r   r   r   r
   r   rA   s     r"   r
   r
   M   sJ   € Üˆq�*×Ñ¤j°´U¼GÐ4D×&EÑ&EÙ-.Ó/ªQ¨Ô  Ö#©QÑ/Ð/ä˜‹|Ðùò 0rD   c                 ó"   • [        U [        5      $ )zx
Check whether obj is a `pathlib.Path` object.

Prefer using ``isinstance(obj, os.PathLike)`` instead of this function.
)r   r   )Úobjs    r"   r   r   S   s   € ô �cœ4Ó Ð r$   c                   ó.   • \ rS rSrSrSS jrS rS rSrg)	r   é\   a�  Context manager that does no additional processing.

Used as a stand-in for a normal context manager, when a particular
block of code is only sometimes used with a normal context manager:

cm = optional_cm if condition else nullcontext()
with cm:
    # Perform operation, using optional_cm if condition is True

.. note::
    Prefer using `contextlib.nullcontext` instead of this context manager.
Nc                 ó   • Xl         g r6   ©Úenter_result)ÚselfrL   s     r"   Ú__init__Úcontextlib_nullcontext.__init__j   s   € Ø(Õr$   c                 ó   • U R                   $ r6   rK   )rM   s    r"   Ú	__enter__Ú contextlib_nullcontext.__enter__m   s   € Ø× Ñ Ð r$   c                 ó   • g r6   r7   )rM   Úexcinfos     r"   Ú__exit__Úcontextlib_nullcontext.__exit__p   s   € Ør$   rK   r6   )	Ú__name__Ú
__module__Ú__qualname__Ú__firstlineno__Ú__doc__rN   rQ   rU   Ú__static_attributes__r7   r$   r"   r   r   \   s   † ñô)ò!õr$   r   c                 ó:   • SSK Jn  U" X5      R                  5       $ )ax  
Load a module. Uses ``load_module`` which will be deprecated in python
3.12. An alternative that uses ``exec_module`` is in
numpy.distutils.misc_util.exec_mod_from_location

Parameters
----------
name : str
    Full module name.
fn : str
    Path to module file.
info : tuple, optional
    Only here for backward compatibility with Python 2.*.

Returns
-------
mod : module

r   )ÚSourceFileLoader)Úimportlib.machineryr^   Úload_module)ÚnameÚfnÚinfor^   s       r"   r   r   t   s   € õ, 5Ù˜DÓ%×1Ñ1Ó3Ð3r$   )Úrr6   )"r[   Ú__all__r;   ÚosÚpathlibr   r)   Úpickle5r   ÚImportErrorÚintr   r   r   r   r   r   r   r   r   r   r   r   r   r   r	   r
   r   r   r   Úfspathr   ÚPathLiker   r7   r$   r"   Ú<module>rm      s¶   ðñòK€ó Û 	Ý Û 	ðÛð €Ø�€Ø€
Ø
€Ø€òò
#ò
ò
	ô<òð €òòòò!÷ñ ô04ð4 �I‰I€	Ø�k‰k�øðm ó Ýðús   šA3 Á3
B Á?B 