U
    ÎZj²—  ã                   @  s’  d Z ddlmZ ddlmZmZ ddlZddlZddlZddl	Z	ddl
Z
ddlmZmZmZmZmZm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mZmZmZmZmZmZm Z m!Z!m"Z" ddl#m$Z$m%Z&m'Z'm(Z(m)Z) ddl*Z*ddl+Z+dd	l,m-Z-m.Z.m/Z/m0Z0m1Z1m2Z2m3Z3 dd
l4m5Z5 ddl6m7Z7 ddl8m9Z9 ddl:m;Z; ddl<m=Z=m>Z>m?Z?m@Z@ ddlAmBZB eCe)e' e( ƒZDeD Ed¡ e Fd¡ZGe de-d�ZHejIG dd„ dƒƒZJejIG dd„ dee ƒƒZKdddœdd„ZLe"dddœdd „ƒZMe"dddœd!d „ƒZMd"d"dœd#d „ZMdd$d%œd&d'„ZNe"d~d)ddd*œd+d,„ƒZOe"ddddd*œd-d,„ƒZOd€d/dd"d*œd0d,„ZOd1d2„ ZPd3ddœd4d5„ZQe9eBd6 eBd7 d8 d9�d�d3dd<dd=dd>œd?d@„ƒZRdddAœdBdC„ZSdDdDdDdDdEdFdGdHdIdJœ	ZTeCeT U¡ ƒZVd<dKdLœdMdN„ZWe9eBd7 d8 dO�d3dPdPdQœdRdS„ƒZXdTd$dAœdUdV„ZYe"d(d(d(d(d(dWœd3ddPd<ddXdPd=dYdZœ	d[d\„ƒZZe"d(d(d(d(d(d(d]œd3ddPd<dd^dPd=d_dZœ	d`d\„ƒZZe"d(d(d(d(d(d(d]œd3ddPd<dddPd=dadZœ	dbd\„ƒZZe9eBd7 dc dO�ddd.ddddd]œd3ddPd<dddPd=dadZœ	ded\„ƒZZG dfdg„ dgeeƒZ[G dhdi„ die[ƒZ\G djdk„ dke[ƒZ]G dldm„ dmƒZ^G dndo„ doƒZ_dpddqdrœdsdt„Z`d3ddœdudv„Zad3dddwœdxdy„Zbe	jcdzd{œd|d}„ƒZddS )‚zCommon IO api utilitiesé    )Úannotations)ÚABCÚabstractmethodN)ÚBufferedIOBaseÚBytesIOÚ	RawIOBaseÚStringIOÚ
TextIOBaseÚTextIOWrapper)ÚPath)
ÚIOÚAnyÚAnyStrÚGenericÚLiteralÚMappingÚSequenceÚTypeVarÚcastÚoverload)ÚurljoinÚurlparseÚuses_netlocÚuses_paramsÚuses_relative)Ú
BaseBufferÚCompressionDictÚCompressionOptionsÚFilePathÚ
ReadBufferÚStorageOptionsÚWriteBuffer)Úget_lzma_file)Úimport_optional_dependency)Údoc)Úfind_stack_level)Úis_boolÚis_file_likeÚ
is_integerÚis_list_like)Ú_shared_docsÚ z^[A-Za-z][A-Za-z0-9+\-+.]*://ÚBaseBufferT)Úboundc                   @  s>   e Zd ZU dZded< ded< ded< ded< d	Zd
ed< dS )ÚIOArgsz?
    Return value of io/common.py:_get_filepath_or_buffer.
    ústr | BaseBufferÚfilepath_or_bufferÚstrÚencodingÚmoder   ÚcompressionFÚboolÚshould_closeN)Ú__name__Ú
__module__Ú__qualname__Ú__doc__Ú__annotations__r6   © r<   r<   úS/var/www/html/TRUCKING_PROJECT/venv/lib/python3.8/site-packages/pandas/io/common.pyr.   N   s   
r.   c                   @  sn   e Zd ZU dZded< ded< ejed�Zded< d	Z	d
ed< ddœdd„Z
ddœdd„Zdddœdd„ZdS )Ú	IOHandlesau  
    Return value of io/common.py:get_handle

    Can be used as a context manager.

    This is used to easily close created buffers and to handle corner cases when
    TextIOWrapper is inserted.

    handle: The file handle to be used.
    created_handles: All file handles that are created by get_handle
    is_wrapped: Whether a TextIOWrapper needs to be detached.
    z
IO[AnyStr]Úhandler   r4   )Údefault_factoryzlist[IO[bytes] | IO[str]]Úcreated_handlesFr5   Ú
is_wrappedÚNone©Úreturnc                 C  s\   | j r8t| jtƒst‚| j ¡  | j ¡  | j | j¡ | jD ]}| 	¡  q>g | _d| _ dS )zµ
        Close all created buffers.

        Note: If a TextIOWrapper was inserted, it is flushed and detached to
        avoid closing the potentially user-created buffer.
        FN)
rB   Ú
isinstancer?   r
   ÚAssertionErrorÚflushÚdetachrA   ÚremoveÚclose)Úselfr?   r<   r<   r=   rK   p   s    



zIOHandles.closezIOHandles[AnyStr]c                 C  s   | S ©Nr<   ©rL   r<   r<   r=   Ú	__enter__�   s    zIOHandles.__enter__r   )ÚargsrE   c                 G  s   |   ¡  d S rM   )rK   )rL   rP   r<   r<   r=   Ú__exit__„   s    zIOHandles.__exit__N)r7   r8   r9   r:   r;   ÚdataclassesÚfieldÚlistrA   rB   rK   rO   rQ   r<   r<   r<   r=   r>   [   s   
r>   Úobjectr5   )ÚurlrE   c                 C  s   t | tƒsdS t| ƒjtkS )zÚ
    Check to see if a URL has a valid protocol.

    Parameters
    ----------
    url : str or unicode

    Returns
    -------
    isurl : bool
        If `url` has a valid protocol return True otherwise False.
    F)rF   r1   Ú	parse_urlÚschemeÚ_VALID_URLS©rV   r<   r<   r=   Úis_urlˆ   s    
r[   r1   )r0   rE   c                 C  s   d S rM   r<   ©r0   r<   r<   r=   Ú_expand_userš   s    r]   c                 C  s   d S rM   r<   r\   r<   r<   r=   r]   Ÿ   s    zstr | BaseBufferTc                 C  s   t | tƒrtj | ¡S | S )a]  
    Return the argument with an initial component of ~ or ~user
    replaced by that user's home directory.

    Parameters
    ----------
    filepath_or_buffer : object to be converted if possible

    Returns
    -------
    expanded_filepath_or_buffer : an expanded filepath or the
                                  input if not expandable
    )rF   r1   ÚosÚpathÚ
expanduserr\   r<   r<   r=   r]   ¤   s    
rC   )ÚheaderrE   c                 C  s˜   | d krd S t | ƒr2tt| ƒ} | dk r.tdƒ‚d S t| dd�r|tt| ƒ} ttt | ƒƒs^tdƒ‚tdd„ | D ƒƒrxtdƒ‚d S t	| ƒrŒt
d	ƒ‚tdƒ‚d S )
Nr   zUPassing negative integer to header is invalid. For no header, use header=None insteadF)Z
allow_setsz*header must be integer or list of integersc                 s  s   | ]}|d k V  qdS )r   Nr<   )Ú.0Úir<   r<   r=   Ú	<genexpr>Ç   s     z&validate_header_arg.<locals>.<genexpr>z8cannot specify multi-index header with negative integersz–Passing a bool to header is invalid. Use header=None for no header or header=int or list-like of ints to specify the row(s) making up the column names)r(   r   ÚintÚ
ValueErrorr)   r   ÚallÚmapÚanyr&   Ú	TypeError)ra   r<   r<   r=   Úvalidate_header_arg·   s*    
ÿ
ÿrk   .r   )r0   Úconvert_file_likerE   c                 C  s   d S rM   r<   ©r0   rl   r<   r<   r=   Ústringify_pathÔ   s    rn   c                 C  s   d S rM   r<   rm   r<   r<   r=   rn   Ù   s    FzFilePath | BaseBufferTc                 C  s2   |st | ƒrtt| ƒS t| tjƒr*|  ¡ } t| ƒS )aó  
    Attempt to convert a path-like object to a string.

    Parameters
    ----------
    filepath_or_buffer : object to be converted

    Returns
    -------
    str_filepath_or_buffer : maybe a string version of the object

    Notes
    -----
    Objects supporting the fspath protocol (python 3.6+) are coerced
    according to its __fspath__ method.

    Any other object is passed through unchanged, which includes bytes,
    strings, buffers, or anything else that's not even path-like.
    )r'   r   r,   rF   r^   ÚPathLikeÚ
__fspath__r]   rm   r<   r<   r=   rn   à   s
    
c                  O  s   ddl }|jj| |ŽS )z`
    Lazy-import wrapper for stdlib urlopen, as that imports a big chunk of
    the stdlib.
    r   N)Úurllib.requestÚrequestÚurlopen)rP   ÚkwargsÚurllibr<   r<   r=   rs     s    rs   zFilePath | BaseBufferc                 C  s$   t | tƒo"tt | ¡ƒo"|  d¡ S )zR
    Returns true if the given URL looks like
    something fsspec can handle
    )zhttp://zhttps://)rF   r1   r5   Ú_RFC_3986_PATTERNÚmatchÚ
startswithrZ   r<   r<   r=   Úis_fsspec_url  s
    
ÿ
ýry   Ústorage_optionsÚcompression_optionsr0   )rz   r{   úutf-8Úrr   r    )r0   r2   r4   r3   rz   rE   c              	   C  sÐ  t | ƒ} t|ƒ\}}t| |ƒ}|rJt| dƒrJd|krJtjdttƒ d� d}t||d�}d|krŠ|dkrŠ|d	krŠtj|› d
|› �t	tƒ d� |}d|kr¦d|kr¦|d7 }t
| tƒ�r.t| ƒ�r.|pÂi }ddl}|jj| |d�}t|ƒ�2}	|	j dd¡}
|
dk�rddi}t|	 ¡ ƒ}W 5 Q R X t|||d|d�S t| ƒ�rXt
| tƒ�sHt‚|  d¡�r`|  dd¡} |  d¡�rx|  dd¡} tdƒ}g }z&tdƒ ddlm}m} ||tg}W n tk
�rÀ   Y nX z$|j | fd|i|�pÚi —Ž  ¡ }W n^ t!|ƒk
�rD   |dk�rddi}nt|ƒ}d|d< |j | fd|i|�p6i —Ž  ¡ }Y nX t|||d|d�S |�rft"dƒ‚t
| tt#t$j$fƒ�r�tt%| ƒ||d|d�S t| dƒ�s¾t| dƒ�s¾dt&| ƒ› �}t"|ƒ‚t| ||d|d�S )a%  
    If the filepath_or_buffer is a url, translate and return the buffer.
    Otherwise passthrough.

    Parameters
    ----------
    filepath_or_buffer : a url, filepath (str, py.path.local or pathlib.Path),
                         or buffer
    {compression_options}

        .. versionchanged:: 1.4.0 Zstandard support.

    encoding : the encoding to use to decode bytes, default is 'utf-8'
    mode : str, optional

    {storage_options}

        .. versionadded:: 1.2.0

    ..versionchange:: 1.2.0

      Returns the dataclass IOArgs.
    ÚwriteÚbzDcompression has no effect when passing a non-binary object as input.)Ú
stacklevelN)ÚmethodÚw)Úbz2Úxz)zutf-16zutf-32z( will not write the byte order mark for Útr   )ÚheaderszContent-EncodingÚgzipr�   T)r0   r2   r4   r6   r3   zs3a://zs3://zs3n://ÚfsspecZbotocore)ÚClientErrorÚNoCredentialsErrorr3   Zanonz?storage_options passed with file object or non-fsspec file pathFÚreadz)Invalid file path or buffer object type: )'rn   Úget_compression_methodÚinfer_compressionÚhasattrÚwarningsÚwarnÚRuntimeWarningr%   ÚdictÚUnicodeWarningrF   r1   r[   rq   rr   ÚRequestrs   r†   Úgetr   r‹   r.   ry   rG   rx   Úreplacer#   Zbotocore.exceptionsr‰   rŠ   ÚPermissionErrorÚImportErrorÚopenÚtuplerf   ÚbytesÚmmapr]   Útype)r0   r2   r4   r3   rz   Úcompression_methodZfsspec_moderu   Úreq_infoÚreqÚcontent_encodingÚreaderrˆ   Zerr_types_to_retry_with_anonr‰   rŠ   Zfile_objÚmsgr<   r<   r=   Ú_get_filepath_or_buffer  sâ    "
ýÿþýý	

û
 ÿ
ýÿÿÿ

ÿÿÿûÿûÿÿûr¤   )r_   rE   c                 C  s   ddl m} td|| ƒƒS )z©
    converts an absolute native path to a FILE URL.

    Parameters
    ----------
    path : a path in native format

    Returns
    -------
    a valid FILE URL
    r   )Úpathname2urlzfile:)rq   r¥   r   )r_   r¥   r<   r<   r=   Úfile_path_to_urlÎ  s    r¦   Útarr‡   rƒ   Úzipr„   Úzstd)	ú.tarú.tar.gzú.tar.bz2ú.tar.xzú.gzú.bz2ú.zipú.xzz.zstz"tuple[str | None, CompressionDict])r4   rE   c              
   C  s`   t | tƒrPt| ƒ}z| d¡}W qX tk
rL } ztdƒ|‚W 5 d}~X Y qXX ni }| }||fS )a  
    Simplifies a compression argument to a compression method string and
    a mapping containing additional arguments.

    Parameters
    ----------
    compression : str or mapping
        If string, specifies the compression method. If mapping, value at key
        'method' specifies compression method.

    Returns
    -------
    tuple of ({compression method}, Optional[str]
              {compression arguments}, Dict[str, Any])

    Raises
    ------
    ValueError on mapping missing 'method' key
    r�   z.If mapping, compression must have key 'method'N)rF   r   r’   ÚpopÚKeyErrorrf   )r4   Úcompression_argsrž   Úerrr<   r<   r=   rŒ   î  s    
rŒ   )r{   ú
str | None)r0   r4   rE   c                 C  s’   |dkrdS |dkrZt | dd�} t| tƒs.dS t ¡ D ]\}}|  ¡  |¡r6|  S q6dS |tkrf|S ddgttƒ }d|› d|› �}t	|ƒ‚dS )a/  
    Get the compression method for filepath_or_buffer. If compression='infer',
    the inferred compression method is returned. Otherwise, the input
    compression method is returned unchanged, unless it's invalid, in which
    case an error is raised.

    Parameters
    ----------
    filepath_or_buffer : str or file handle
        File path or object.
    {compression_options}

        .. versionchanged:: 1.4.0 Zstandard support.

    Returns
    -------
    string or None

    Raises
    ------
    ValueError on invalid compression specified.
    NZinferT)rl   úUnrecognized compression type: z
Valid compression types are )
rn   rF   r1   Ú_extension_to_compressionÚitemsÚlowerÚendswithÚ_supported_compressionsÚsortedrf   )r0   r4   Ú	extensionZvalidr£   r<   r<   r=   r�     s     

ÿr�   z
Path | strc                 C  s&   t | ƒj}| ¡ s"td|› d�ƒ‚dS )z±
    Check if parent directory of a file exists, raise OSError if it does not

    Parameters
    ----------
    path: Path or str
        Path to check parent directory of
    z1Cannot save file into a non-existent directory: 'ú'N)r   ÚparentÚis_dirÚOSError)r_   rÀ   r<   r<   r=   Úcheck_parent_directoryJ  s    	
rÃ   )r2   r4   Ú
memory_mapÚerrorsrz   zLiteral[False]zIOHandles[bytes])	Úpath_or_bufr3   r2   r4   rÄ   Úis_textrÅ   rz   rE   c                C  s   d S rM   r<   ©rÆ   r3   r2   r4   rÄ   rÇ   rÅ   rz   r<   r<   r=   Ú
get_handleX  s    rÉ   )r2   r4   rÄ   rÇ   rÅ   rz   zLiteral[True]zIOHandles[str]c                C  s   d S rM   r<   rÈ   r<   r<   r=   rÉ   g  s    z!IOHandles[str] | IOHandles[bytes]c                C  s   d S rM   r<   rÈ   r<   r<   r=   rÉ   v  s    rÆ   Tc                C  s¾  |pd}|pd}t | |ƒr*d|kr*|d7 }t |¡ t|tƒrHt |¡ t| ||||d�}|j}	t|	|ƒ\}	}}
t|	tƒ}t	|j
ƒ}| d¡}d|kr¦|r¦tt|	ƒƒ |�rR|dkrÆ|j dd	¡|_n |dkræd|jkræ| jd7  _|d
k�r2t|	tƒ�rtjf |	|jdœ|—Ž}	ntjf |	|jdœ|—Ž}	�n|dk�rXtj|	fd|ji|—Ž}	�nÞ|dk�rÜt|	|jf|Ž}	|	jjdk�r6|
 |	¡ |	j ¡ }t|ƒdk�r´|	j | ¡ ¡}	n$|�sÊtd| › �ƒ‚ntd|› �ƒ‚�nZ|dk�r°| d|j¡ t|	tƒ�rtf d|	i|—Ž}	ntf d|	i|—Ž}	t|	tƒ�s6t‚d|	jjk�r6|
 |	¡ |	j ¡ }t|ƒdk�rŠ|	j |d ¡}|dk	�s„t‚|}	n$|�s td| › �ƒ‚ntd|› �ƒ‚n†|dk�rÊtƒ |	|jƒ}	nl|dk�r$t dƒ}d|jk�rúd|j!f |Ži}nd|j"f |Ži}|j|	fd|ji|—Ž}	nd|› �}t|ƒ‚t|	tƒ�rFt‚|
 |	¡ nNt|	tƒ�r |j#�rŠd|jk�rŠt|	|j|j#|d	d�}	nt|	|jƒ}	|
 |	¡ d }|�sÒ|jd!k�rÒt|	t$ƒ�rÒt%|	|j#d"�}	n~|�rP|�sò|�sòt |	|jƒ�rPt&|	d#ƒ�rt&|	d$ƒ�rt&|	d%ƒ�st'|	ƒ}	t(|	|j#|d	d�}	|
 |	¡ t|jtƒ�pL|j) }d|jk�r~t&|	d&ƒ�s~t*d't+|jƒ› d(�ƒ‚|
 ,¡  |j)�r¬t|jtƒ�r t‚|
 |j¡ t-|	|
||j
d)�S )*aŽ  
    Get file handle for given path/buffer and mode.

    Parameters
    ----------
    path_or_buf : str or file handle
        File path or object.
    mode : str
        Mode to open path_or_buf with.
    encoding : str or None
        Encoding to use.
    {compression_options}

        .. versionchanged:: 1.0.0
           May now be a dict with key 'method' as compression mode
           and other keys as compression options if compression
           mode is 'zip'.

        .. versionchanged:: 1.1.0
           Passing compression options as keys in dict is now
           supported for compression modes 'gzip', 'bz2', 'zstd' and 'zip'.

        .. versionchanged:: 1.4.0 Zstandard support.

    memory_map : bool, default False
        See parsers._parser_params for more information. Only used by read_csv.
    is_text : bool, default True
        Whether the type of the content passed to the file/buffer is string or
        bytes. This is not the same as `"b" not in mode`. If a string content is
        passed to a binary file/buffer, a wrapper is inserted.
    errors : str, default 'strict'
        Specifies how encoding and decoding errors are to be handled.
        See the errors argument for :func:`open` for a full list
        of options.
    storage_options: StorageOptions = None
        Passed to _get_filepath_or_buffer

    .. versionchanged:: 1.2.0

    Returns the dataclass IOHandles
    r|   Ústrictr   )r2   r4   r3   rz   r�   r}   r©   r…   r+   r‡   )Úfilenamer3   )Úfileobjr3   rƒ   r3   r¨   é   zZero files found in ZIP file z9Multiple files found in ZIP file. Only one file per ZIP: r§   ÚnamerÌ   r   Nz Zero files found in TAR archive zDMultiple files found in TAR archive. Only one file per TAR archive: r„   Ú	zstandardZdctxZcctxr·   )r2   rÅ   ÚnewlineFÚrb)r2   ÚreadableÚwritableÚseekabler‹   z1Expected file path name or file-like object, got z type)r?   rA   rB   r4   ).Ú_is_binary_modeÚcodecsÚlookuprF   r1   Úlookup_errorr¤   r0   Ú_maybe_memory_mapr’   r4   r²   rÃ   r3   r–   r‡   ÚGzipFilerƒ   ÚBZ2FileÚ_BytesZipFileÚbufferÚappendÚnamelistÚlenr™   rf   Ú
setdefaultÚ_BytesTarFilerG   ÚgetnamesÚextractfiler"   r#   ÚZstdDecompressorZZstdCompressorr2   r	   Ú_BytesIOWrapperrŽ   Ú
_IOWrapperr
   r6   rj   r�   Úreverser>   )rÆ   r3   r2   r4   rÄ   rÇ   rÅ   rz   Zioargsr?   ÚhandlesZis_pathr´   Z	zip_namesÚfilesÚfiler©   Z	open_argsr£   rB   r<   r<   r=   rÉ   …  s>   6


û



þýüû
	
ÿþý

 ÿÿ

ÿ
ÿÿ

ÿ

ÿþý
û	
þÿÿ
ÿÿþýü
ÿÿ÷c                      s8   e Zd ZdZeddœdd„ƒZddœ‡ fdd„Z‡  ZS )Ú_BufferedWriterz�
    Some objects do not support multiple .write() calls (TarFile and ZipFile).
    This wrapper writes to the underlying buffer on close.
    rC   rD   c                 C  s   d S rM   r<   rN   r<   r<   r=   Úwrite_to_buffer£  s    z_BufferedWriter.write_to_bufferc              	     sP   | j r
d S |  ¡ r8|  d¡ | j� |  ¡  W 5 Q R X n
| j ¡  tƒ  ¡  d S )Nr   )ÚclosedÚgetvalueÚseekrÝ   rí   rK   ÚsuperrN   ©Ú	__class__r<   r=   rK   §  s    

z_BufferedWriter.close)r7   r8   r9   r:   r   rí   rK   Ú__classcell__r<   r<   rò   r=   rì   �  s   rì   c                      sX   e Zd Zdddddddœ‡ fdd	„Zd
d
dœdd„Zddœdd„Zddœdd„Z‡  ZS )râ   Nr}   r¶   zLiteral[('r', 'a', 'w', 'x')]z-ReadBuffer[bytes] | WriteBuffer[bytes] | NonerC   )rÎ   r3   rÌ   Úarchive_namerE   c                   s<   t ƒ  ¡  || _|| _tjjf ||  |¡|dœ|—Ž| _d S )N)rÎ   r3   rÌ   )	rñ   Ú__init__rõ   rÎ   ÚtarfileÚTarFiler™   Úextend_moderÝ   )rL   rÎ   r3   rÌ   rõ   rt   rò   r<   r=   rö   ¸  s    
ýüz_BytesTarFile.__init__r1   )r3   rE   c                 C  sP   |  dd¡}|dkr|S | jd k	rLt| jƒj}|dkrL|› d|dd … › �}|S )Nr   r+   r‚   )r®   r±   r¯   ú:rÍ   )r–   rÎ   r   Úsuffix)rL   r3   rû   r<   r<   r=   rù   Í  s    
z_BytesTarFile.extend_moderD   c                 C  sP   | j dkrdS t| j ƒ}|jdkr.| d¡j S |jdkrJ| d¡ d¡j S |j S )z¶
        If an explicit archive_name is not given, we still want the file inside the zip
        file not to be named something.tar, because that causes confusion (GH39465).
        Nrª   r+   )r«   r¬   r­   )rÎ   r   rû   Úwith_suffix©rL   rË   r<   r<   r=   Úinfer_filename×  s    



z_BytesTarFile.infer_filenamec                 C  s>   | j p|  ¡ pd}tj|d�}t|  ¡ ƒ|_| j || ¡ d S )Nr§   ©rÎ   )	rõ   rþ   r÷   ÚTarInforà   rï   ÚsizerÝ   Úaddfile)rL   rõ   Útarinfor<   r<   r=   rí   æ  s    z_BytesTarFile.write_to_buffer)Nr}   NN)r7   r8   r9   rö   rù   rþ   rí   rô   r<   r<   rò   r=   râ   ·  s       û
râ   c                      sF   e Zd Zddddddœ‡ fdd„Zdd	œd
d„Zdd	œdd„Z‡  ZS )rÜ   Nz1FilePath | ReadBuffer[bytes] | WriteBuffer[bytes]r1   r¶   rC   )rë   r3   rõ   rE   c                   s@   t ƒ  ¡  | dd¡}|| _| dtj¡ tj||f|Ž| _d S )Nr   r+   r4   )	rñ   rö   r–   rõ   rá   ÚzipfileÚZIP_DEFLATEDÚZipFilerÝ   )rL   rë   r3   rõ   rt   rò   r<   r=   rö   ï  s
    
z_BytesZipFile.__init__rD   c                 C  s@   t | jjtjtfƒr<t| jjƒ}|jdkr6| d¡j	S |j	S dS )z¶
        If an explicit archive_name is not given, we still want the file inside the zip
        file not to be named something.zip, because that causes confusion (GH39465).
        r°   r+   N)
rF   rÝ   rË   r^   ro   r1   r   rû   rü   rÎ   rý   r<   r<   r=   rþ      s    
z_BytesZipFile.infer_filenamec                 C  s(   | j p|  ¡ pd}| j ||  ¡ ¡ d S )Nr¨   )rõ   rþ   rÝ   Úwritestrrï   )rL   rõ   r<   r<   r=   rí     s    z_BytesZipFile.write_to_buffer)N)r7   r8   r9   rö   rþ   rí   rô   r<   r<   rò   r=   rÜ   î  s    ürÜ   c                   @  sT   e Zd Zdddœdd„Zddœdd	„Zd
dœdd„Zd
dœdd„Zd
dœdd„ZdS )rç   r   rC   )rÝ   rE   c                 C  s
   || _ d S rM   )rÝ   )rL   rÝ   r<   r<   r=   rö     s    z_IOWrapper.__init__r1   rÿ   c                 C  s   t | j|ƒS rM   ©ÚgetattrrÝ   )rL   rÎ   r<   r<   r=   Ú__getattr__  s    z_IOWrapper.__getattr__r5   rD   c                 C  s   t | jdƒr| j ¡ S dS )NrÒ   T)rŽ   rÝ   rÒ   rN   r<   r<   r=   rÒ     s    
z_IOWrapper.readablec                 C  s   t | jdƒr| j ¡ S dS )NrÔ   T)rŽ   rÝ   rÔ   rN   r<   r<   r=   rÔ   %  s    
z_IOWrapper.seekablec                 C  s   t | jdƒr| j ¡ S dS )NrÓ   T)rŽ   rÝ   rÓ   rN   r<   r<   r=   rÓ   *  s    
z_IOWrapper.writableN)r7   r8   r9   rö   r
  rÒ   rÔ   rÓ   r<   r<   r<   r=   rç     s
   rç   c                   @  s@   e Zd Zdddddœdd„Zddœd	d
„Zddddœdd„ZdS )ræ   r|   zStringIO | TextIOBaser1   rC   )rÝ   r2   rE   c                 C  s   || _ || _d| _d S )Nó    )rÝ   r2   Úoverflow)rL   rÝ   r2   r<   r<   r=   rö   4  s    z_BytesIOWrapper.__init__)Úattrc                 C  s   t | j|ƒS rM   r  )rL   r  r<   r<   r=   r
  =  s    z_BytesIOWrapper.__getattr__éÿÿÿÿz
int | Noner›   )ÚnrE   c                 C  st   | j d k	st‚| j  |¡ | j¡}| j| }|d ksH|dk sH|t|ƒkrRd| _|S |d |… }||d … | _|S d S )Nr   r  )rÝ   rG   r‹   Úencoder2   r  rà   )rL   r  Ú
bytestringZcombined_bytestringZ	to_returnr<   r<   r=   r‹   @  s    
z_BytesIOWrapper.readN)r|   )r  )r7   r8   r9   rö   r
  r‹   r<   r<   r<   r=   ræ   1  s   	ræ   r/   z/tuple[str | BaseBuffer, bool, list[BaseBuffer]])r?   rÄ   rE   c              	   C  sŒ   g }|t | dƒpt| tƒM }|s*| ||fS t| tƒrHt| dƒ} | | ¡ zttj|  	¡ dtj
d�ƒ}W 5 t|ƒD ]} |  ¡  qpX |||gfS )zTry to memory map file/buffer.ÚfilenorÑ   r   )Úaccess)rŽ   rF   r1   r™   rÞ   ÚreversedrK   rç   rœ   r  ÚACCESS_READ)r?   rÄ   ré   Úwrappedr<   r<   r=   rÙ   N  s$    



  ÿÿrÙ   c              	   C  sH   d}t | ƒ} t| tƒs|S ztj | ¡}W n ttfk
rB   Y nX |S )zTest whether file exists.F)rn   rF   r1   r^   r_   Úexistsrj   rf   )r0   r  r<   r<   r=   Úfile_existsm  s    
r  )r?   r3   rE   c                 C  sV   d|ksd|krd|kS t jt jt jf}tt| ƒ|ƒr:dS t| tƒ ƒpTdt| d|ƒkS )z+Whether the handle is opened in binary moder…   r   Fr3   )	rÖ   ÚStreamWriterÚStreamReaderÚStreamReaderWriterÚ
issubclassr�   rF   Ú_get_binary_io_classesr	  )r?   r3   Ztext_classesr<   r<   r=   rÕ   {  s    ü  ÿrÕ   ztuple[type, ...]rD   c               	   C  sH   t tf} tddd�}|dk	rD| ¡  d¡�}| t|ƒf7 } W 5 Q R X | S )z!IO classes that that expect bytesrÏ   Úignore)rÅ   Nr  )r   r   r#   rå   Zstream_readerr�   )Zbinary_classesr©   r¢   r<   r<   r=   r  �  s    r  ).).)F)r|   Nr}   N)er:   Ú
__future__r   Úabcr   r   rƒ   rÖ   rR   Ú	functoolsr‡   Úior   r   r   r   r	   r
   rœ   r^   Úpathlibr   Úrer÷   Útypingr   r   r   r   r   r   r   r   r   r   Úurllib.parser   r   rW   r   r   r   r�   r  Zpandas._typingr   r   r   r   r   r    r!   Zpandas.compatr"   Zpandas.compat._optionalr#   Zpandas.util._decoratorsr$   Zpandas.util._exceptionsr%   Zpandas.core.dtypes.commonr&   r'   r(   r)   Zpandas.core.shared_docsr*   ÚsetrY   ÚdiscardÚcompilerv   r,   Ú	dataclassr.   r>   r[   r]   rk   rn   rs   ry   r¤   r¦   r¸   Úvaluesr¼   rŒ   r�   rÃ   rÉ   rì   râ   rÜ   rç   ræ   rÙ   r  rÕ   Ú	lru_cacher  r<   r<   r<   r=   Ú<module>   sê    0$	

, ÿ þ"

þ    û 3÷#8÷$÷$÷$÷$  7$