
    G/Ph                         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n# e	$ r ddlZY nw xY we
Ze
fZeZeZeZd Zd Zd Zd Zdd
Zd ZdZd Zd Zd Zd Z G d d          Z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   c                 t    t          | t                    r|                     d          S t          |           S Nlatin1
isinstancer   decodestrss    Q/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/numpy/compat/py3k.pyr   r   "   1    !U "xx!!!q66M    c                 t    t          | t                    r| S t          |                               d          S r   )r   r   r   encoder    s    r"   r   r   '   s1    !U q66=="""r$   c                 t    t          | t                    r|                     d          S t          |           S r   r   r    s    r"   r   r   ,   r#   r$   c                     t          | t          j        t          j        t          j        f          sdS 	 |                                  dS # t          $ r Y dS w xY w)NFT)r   ioFileIOBufferedReaderBufferedWriterfilenoOSError)fs    r"   r   r   1   sc    a")R%68IJKK u 	



t   uus   A 
AArc                 &    t          | |d          S )Nz
iso-8859-1)modeencoding)open)filenamer2   s     r"   r   r   <   s    tl;;;;r$   c                     | S N r    s    r"   r   r   ?   s    Hr$   Uc                  4    t          j                    d         S )N   )sysexc_infor8   r$   r"   r   r   D   s    <>>!r$   c                     t          | d          r(t          | t          t          f          sd | D             S t	          |           S )N__iter__c                 ,    g | ]}t          |          S r8   )r	   .0ys     r"   
<listcomp>z"asbytes_nested.<locals>.<listcomp>I   s     ---aq!!---r$   )hasattrr   r   r   r   xs    r"   r	   r	   G   sJ    q* jUG4D&E&E --1----qzzr$   c                     t          | d          r(t          | t          t          f          sd | D             S t	          |           S )Nr?   c                 ,    g | ]}t          |          S r8   )r
   rA   s     r"   rD   z$asunicode_nested.<locals>.<listcomp>O   s!    /// ##///r$   )rE   r   r   r   r   rF   s    r"   r
   r
   M   sJ    q* jUG4D&E&E //Q////||r$   c                 ,    t          | t                    S )z
    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     c4   r$   c                   &    e Zd ZdZddZd Z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                     || _         d S r7   enter_result)selfrO   s     r"   __init__zcontextlib_nullcontext.__init__j   s    (r$   c                     | j         S r7   rN   )rP   s    r"   	__enter__z contextlib_nullcontext.__enter__m   s      r$   c                     d S r7   r8   )rP   excinfos     r"   __exit__zcontextlib_nullcontext.__exit__p   s    r$   r7   )__name__
__module____qualname____doc__rQ   rS   rV   r8   r$   r"   r   r   \   sP         ) ) ) )! ! !    r$   r   c                 J    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.machineryr\   load_module)namefninfor\   s       r"   r   r   t   s5    0 544444D"%%11333r$   )r0   r7   )"rZ   __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   r8   r$   r"   <module>rj      s   K K K 


 				       				   MMMMM 

  
# # #
  
	 	 	< < < <         ! ! !       04 4 4 48 I	ks    	++