o
    6aC                     @   s   d Z g dZddlZddlZddlmZ ddlZddlZddlmZ	 zddl
ZW n ey5   ddlZY nw eZefZeZeZeZdd Zdd	 Zd
d Zdd Zd ddZdd ZdZdd Zdd Zdd Zdd ZG dd dZd!ddZ ej!Z"ej#Z$dS )"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   )ABCc                 C      t | tr
| dS t| S Nlatin1
isinstancer   decodestrs r"   3/usr/lib/python3/dist-packages/numpy/compat/py3k.pyr   &      

r   c                 C   s   t | tr| S t| dS r   )r   r   r   encoder    r"   r"   r#   r   +   s   
r   c                 C   r   r   r   r    r"   r"   r#   r
   0   r$   r
   c                 C   s   t | tjtjtjfS N)r   ioFileIOBufferedReaderBufferedWriter)fr"   r"   r#   r   5   s   r   rc                 C   s   t | |ddS )Nz
iso-8859-1)modeencoding)open)filenamer-   r"   r"   r#   r   8   s   r   c                 C   s   | S r&   r"   r    r"   r"   r#   r   ;      r   Uc                   C   s   t  d S )N   )sysexc_infor"   r"   r"   r#   r   @   s   r   c                 C   .   t | drt| ttfsdd | D S t| S )N__iter__c                 S      g | ]}t |qS r"   )r   .0yr"   r"   r#   
<listcomp>E       z"asbytes_nested.<locals>.<listcomp>)hasattrr   r   r   r   xr"   r"   r#   r   C      r   c                 C   r6   )Nr7   c                 S   r8   r"   )r	   r9   r"   r"   r#   r<   K   r=   z$asunicode_nested.<locals>.<listcomp>)r>   r   r   r   r   r?   r"   r"   r#   r	   I   rA   r	   c                 C   s
   t | tS )z
    Check whether obj is a `pathlib.Path` object.

    Prefer using ``isinstance(obj, os.PathLike)`` instead of this function.
    )r   r   )objr"   r"   r#   r   O   s   
r   c                   @   s*   e Zd ZdZd	ddZdd Zdd ZdS )
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                 C   s
   || _ d S r&   enter_result)selfrD   r"   r"   r#   __init__f   s   
zcontextlib_nullcontext.__init__c                 C   s   | j S r&   rC   )rE   r"   r"   r#   	__enter__i   s   z contextlib_nullcontext.__enter__c                 G   s   d S r&   r"   )rE   excinfor"   r"   r#   __exit__l   r1   zcontextlib_nullcontext.__exit__r&   )__name__
__module____qualname____doc__rF   rG   rI   r"   r"   r"   r#   r   X   s
    
r   c                 C   s   ddl m} || | S )a  
    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

    .. versionadded:: 1.11.2

    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.machineryrN   load_module)namefninforN   r"   r"   r#   r   p   s   r   )r,   r&   )%rM   __all__r4   ospathlibr   r'   abcr   abc_ABCpickle5r   ImportErrorintr   r   r   r   r   r   r   r   r
   r   r   r   r   r   r   r	   r   r   r   fspathr   PathLiker   r"   r"   r"   r#   <module>   sB    
	

