U
    ¿mœdÂ  ã                   @  s  d dl mZ d dlmZ d dlZd dlmZ d dlZd dlm	Z	m
Z
mZ d dlZd dlmZmZmZ d dlmZ d dlmZ d d	lmZ d d
lmZ eddddœdd„ƒZedddœdd„ƒZed&ddddœdd„ƒZeddœdd„ƒZeddœd d!„ƒZed'ddœd"d#„ƒZd$d%„ ZdS )(é    )Úannotations)ÚcontextmanagerN)ÚPath)ÚIOÚAnyÚ	Generator)Ú
BaseBufferÚCompressionOptionsÚFilePath)ÚPYPY)ÚChainedAssignmentError)Ú
set_option)Ú
get_handlezFilePath | BaseBufferr	   z Generator[IO[bytes], None, None])ÚpathÚcompressionÚreturnc              	   c  s(   t | d|dd��}|jV  W 5 Q R X dS )a&  
    Open a compressed file and return a file object.

    Parameters
    ----------
    path : str
        The path where the file is read from.

    compression : {'gzip', 'bz2', 'zip', 'xz', 'zstd', None}
        Name of the decompression to use

    Returns
    -------
    file object
    ÚrbF)r   Zis_textN)r   Úhandle)r   r   r   © r   úQ/home/sam/Atlas/atlas_env/lib/python3.8/site-packages/pandas/_testing/contexts.pyÚdecompress_file   s    r   ÚstrzGenerator[(None, None, None)])Útzr   c                 #  sH   ddl ‰ ddœ‡ fdd„}tj d¡}|| ƒ z
dV  W 5 ||ƒ X dS )a¼  
    Context manager for temporarily setting a timezone.

    Parameters
    ----------
    tz : str
        A string representing a valid timezone.

    Examples
    --------
    >>> from datetime import datetime
    >>> from dateutil.tz import tzlocal
    >>> tzlocal().tzname(datetime(2021, 1, 1))  # doctest: +SKIP
    'IST'

    >>> with set_timezone('US/Eastern'):
    ...     tzlocal().tzname(datetime(2021, 1, 1))
    ...
    'EST'
    r   NÚNone©r   c                   sB   | d kr,zt jd= W q> tk
r(   Y q>X n| t jd< ˆ  ¡  d S )NÚTZ)ÚosÚenvironÚKeyErrorÚtzset)r   ©Útimer   r   ÚsetTZJ   s    
zset_timezone.<locals>.setTZr   )r!   r   r   Úget)r   r"   Zorig_tzr   r    r   Úset_timezone2   s    

r$   FÚboolr   zGenerator[Any, None, None])Úreturn_filelikeÚkwargsr   c              	   k  s�   t t ¡ ƒ}| dkrd} tt ¡ ƒ|  } ||  }| ¡  t|ƒ}|r\| dd¡ t|f|Ž}z
|V  W 5 t	|tƒsz| 
¡  | ¡ rŠ| ¡  X dS )az  
    Gets a temporary path and agrees to remove on close.

    This implementation does not use tempfile.mkstemp to avoid having a file handle.
    If the code using the returned path wants to delete the file itself, windows
    requires that no program has a file handle to it.

    Parameters
    ----------
    filename : str (optional)
        suffix of the created file.
    return_filelike : bool (default False)
        if True, returns a file-like which is *always* cleaned. Necessary for
        savefig and other functions which want to append extensions.
    **kwargs
        Additional keywords are passed to open().

    NÚ Úmodezw+b)r   ÚtempfileÚ
gettempdirr   ÚuuidÚuuid4ÚtouchÚ
setdefaultÚopenÚ
isinstanceÚcloseÚis_fileÚunlink)Úfilenamer&   r'   Úfolderr   Zhandle_or_strr   r   r   Úensure_clean\   s     

r7   r   c               	   c  s2   t tjƒ} z
dV  W 5 tj ¡  tj | ¡ X dS )zÚ
    Get a context manager to safely set environment variables

    All changes will be undone on close, hence environment variables set
    within this contextmanager will neither persist nor change global state.
    N)Údictr   r   ÚclearÚupdate)Zsaved_environr   r   r   Ú!ensure_safe_environment_variables‰   s
    


r;   c              	   k  sL   ddl }dddh}| |kr"tdƒ‚|j| f|Ž z
dV  W 5 | | ¡ X dS )au  
    Context manager to temporarily register a CSV dialect for parsing CSV.

    Parameters
    ----------
    name : str
        The name of the dialect.
    kwargs : mapping
        The parameters for the dialect.

    Raises
    ------
    ValueError : the name of the dialect conflicts with a builtin one.

    See Also
    --------
    csv : Python's CSV library.
    r   NÚexcelz	excel-tabÚunixz Cannot override builtin dialect.)ÚcsvÚ
ValueErrorÚregister_dialectÚunregister_dialect)Únamer'   r>   Z_BUILTIN_DIALECTSr   r   r   Úwith_csv_dialect™   s    

rC   c              	   c  sX   ddl m} |d kr|j}|j}|j}td| ƒ ||_z
d V  W 5 ||_td|ƒ X d S )Nr   )Úexpressionszcompute.use_numexpr)Zpandas.core.computationrD   Z_MIN_ELEMENTSZUSE_NUMEXPRr   )ZuseZmin_elementsÚexprZolduseZoldminr   r   r   Úuse_numexpr»   s    

rF   c                  C  s2   t rddlm}  | ƒ S ddlm} |tdd�S d S )Nr   )Únullcontext)Úassert_produces_warningzYA value is trying to be set on a copy of a DataFrame or Series through chained assignment)Úmatch)r   Ú
contextlibrG   Zpandas._testingrH   r   )rG   rH   r   r   r   Úraises_chained_assignment_errorÍ   s    ýrK   )NF)N) Ú
__future__r   rJ   r   r   Úpathlibr   r*   Útypingr   r   r   r,   Zpandas._typingr   r	   r
   Zpandas.compatr   Zpandas.errorsr   Zpandasr   Zpandas.io.commonr   r   r$   r7   r;   rC   rF   rK   r   r   r   r   Ú<module>   s4   )   ÿ,!