U
    -e                  
   @   s  d Z ddlmZ ddlmZ ddlZddlmZ dd Z	de	iZ
d'd	d
Zd(ddZeded eded z&ddlmZ d)ddZeded W n0 ek
r   ddlmZ eddd d Y nX z,ddlmZ eded ededdd W n ek
r   Y nX z0ddlZedejddd edejddd W n ek
rN   Y nX G dd deZzddlZej edeg  W n eeefk
r   Y nX zddlZed ejjd  W n ek
r   Y nX z"ddlZd*d!d"Z ed#e d$ W n ek
r   Y nX d%d& Z!dS )+z9Helper functions for a standard streaming compression API    )BZ2File)ZipFileN)AbstractBufferedFilec                 K   s   | S N )filemodekwargsr   r   S/var/www/html/Darija-Ai-Train/env/lib/python3.8/site-packages/fsspec/compression.py	noop_file	   s    r   Fc                 C   st   t |tr|g}| tkr(|s(td|  |D ]$}|tjjkr,|s,td|| f q,|t| < |D ]}| tjj|< q^dS )aA  Register an "inferable" file compression type.

    Registers transparent file compression type for use with fsspec.open.
    Compression can be specified by name in open, or "infer"-ed for any files
    ending with the given extensions.

    Args:
        name: (str) The compression type name. Eg. "gzip".
        callback: A callable of form (infile, mode, **kwargs) -> file-like.
            Accepts an input file-like object, the target mode and kwargs.
            Returns a wrapped file-like object.
        extensions: (str, Iterable[str]) A file extension, or list of file
            extensions for which to infer this compression scheme. Eg. "gz".
        force: (bool) Force re-registration of compression type or extensions.

    Raises:
        ValueError: If name or extensions already registered, and not force.

    z&Duplicate compression registration: %sz-Duplicate compression file extension: %s (%s)N)
isinstancestrcompr
ValueErrorfsspecutilscompressions)namecallback
extensionsforceextr   r   r
   register_compression   s    

r   rbc                    s|   d|krJ|pd}t | fddi|  j|dd}|jf fdd	|_|S t |  |d krf  d } j|fddi|S )	Nrr   r   w)r   c                    s   |  p   S r   )close)closerzr   r
   <lambda>>       zunzip.<locals>.<lambda>r   )r   openr   namelist)infiler   filenamer	   for   r   r
   unzip9   s    r'   zipbz2)igzipc                 K   s   t jf | |d|S )N)fileobjr   )r*   Z	IGzipFile)r$   r   r	   r   r   r
   isalL   s    r,   gzipgzGzipFilec                 K   s   t f d| i|S )Nr+   r/   )fr	   r   r   r
   r    T   r!   r    )LZMAFilelzmaxzT)r   c                       s@   e Zd Z fddZdddZdddZd	d
 Zdd Z  ZS )
SnappyFilec                    sV   dd l }t jf d d|dd dd| || _d|krH| | _n
| | _d S )Nr   snappybiɚ;)fspathr   sizer   )r6   super__init__stripr$   ZStreamDecompressorcodecZStreamCompressor)selfr$   r   r	   r6   	__class__r   r
   r<   i   s       zSnappyFile.__init__Fc                 C   s.   | j d | j| j  }| j| dS )Nr   T)bufferseekr>   Z	add_chunkreadr$   write)r?   finaloutr   r   r
   _upload_chunku   s    zSnappyFile._upload_chunkr   c                 C   s   t dd S )NzSnappyFile is not seekable)NotImplementedError)r?   locwhencer   r   r
   rC   {   s    zSnappyFile.seekc                 C   s   dS )NFr   )r?   r   r   r
   seekable~   s    zSnappyFile.seekablec                 C   s   | j || }| j|S )z*Get the specified set of bytes from remote)r$   rD   r>   
decompress)r?   startenddatar   r   r
   _fetch_range   s    zSnappyFile._fetch_range)F)r   )	__name__
__module____qualname__r<   rH   rC   rL   rQ   __classcell__r   r   r@   r
   r5   h   s
   

r5   r6   lz4c                 C   s4   d|krt  }|| S t jdd}|| S d S )Nr   
   )level)zstdZZstdDecompressorstream_readerZZstdCompressorZstream_writer)r$   r   Zcctxr   r   r
   zstandard_file   s
    
r[   rY   Zzstc                   C   s   t tS )z.Return a list of the implemented compressions.)listr   r   r   r   r
   available_compressions   s    r]   )F)r   N)r   )r   )"__doc__r)   r   zipfiler   Zfsspec.utilsr   Zfsspec.specr   r   r   r   r'   r,   r*   ImportErrorr-   r0   r3   r2   Zlzmaffir5   r6   compress	NameErrorAttributeErrorZ	lz4.framerV   framer"   Z	zstandardrY   r[   r]   r   r   r   r
   <module>   sh   
'

  

