o
    piN-                     @  s>  d dl 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	Z	d dl
Z
d dlZd dlmZ d dlZzd dlmZ W n   G dd dZY d dlZeeZdgZedZd	Zd2ddZd3d4ddZdd Zdd Z				d5d6dd Zd!d" ZdeiZd7d#d$Zd3d%d&Z d'd( Z!d)d* Z"d8d,d-Z#d.d/ Z$d0d1 Z%dS )9    )annotationsN)Literal)tqdmc                   @  s.   e Zd Zd
ddZdd Zdd Zdd	 ZdS )r   Nc                 C  s   || _ d| _d S )Nr   )totaln)selfr    r   \/home/app/PaddleOCR-VL/.venv_paddleocr/lib/python3.10/site-packages/paddle/utils/download.py__init__"   s   
ztqdm.__init__c                 C  sf   |  j |7  _ | jd u rtjd| j dd ntjdd| j  t| j dd tj  d S )Nz.1fz bytesd   %)r   r   sysstderrwritefloatflush)r   r   r   r   r	   update&   s
   
&ztqdm.updatec                 C  s   | S Nr   )r   r   r   r	   	__enter__.   s   ztqdm.__enter__c                 C  s   t jd d S )N
)r   r   r   )r   exc_typeexc_valexc_tbr   r   r	   __exit__1   s   ztqdm.__exit__r   )__name__
__module____qualname__r
   r   r   r   r   r   r   r	   r   !   s
    
r   get_weights_path_from_urlz~/.cache/paddle/hapi/weights   pathstrreturnboolc                 C  s   |  dp	|  dS )zR
    Whether path is URL.
    Args:
        path (string): URL string or not.
    zhttp://zhttps://)
startswith)r    r   r   r	   is_url@   s   r%   urlmd5sum
str | Nonec                 C  s   t | t|}|S )a:  Get weights path from WEIGHT_HOME, if not exists,
    download it from url.

    Args:
        url (str): download url
        md5sum (str): md5 sum of download package

    Returns:
        str: a local path to save downloaded weights.

    Examples:
        .. code-block:: python

            >>> from paddle.utils.download import get_weights_path_from_url

            >>> resnet18_pretrained_weight_url = 'https://paddle-hapi.bj.bcebos.com/models/resnet18.pdparams'
            >>> local_weight_path = get_weights_path_from_url(resnet18_pretrained_weight_url)

    )get_path_from_urlWEIGHTS_HOME)r&   r'   r    r   r   r	   r   I   s   c                 C  s   t | d }|}t ||S )N)ospsplitjoin)r&   root_dirfnameZfpathr   r   r	   	_map_patha   s   r1   c                 C  s^   |    t }t }| D ]}|dd }||v rq|| || qtd|  |S )N:r   zunique_endpoints )sortsetr-   addloggerinfo)trainer_endpointsipsunique_endpointsZendpointipr   r   r	   _get_unique_endpointsh   s   
r<   Tgetr/   check_exist
decompressmethodLiteral['wget', 'get']c           	      C  s   ddl m} t| sJ d|  dt| |}t| jdd }t|r6|r6t||r6t	
d|  n | j|v rEt| |||d}ntj|sVtd tj|rK| j|v rl|rlt|sht|rlt|}|S )	a  Download from given url to root_dir.
    if file or directory specified by url is exists under
    root_dir, return the path directly, otherwise download
    from url and decompress it, return the path.

    Args:
        url (str): download url
        root_dir (str): root dir for downloading, it should be
                        WEIGHTS_HOME or DATASET_HOME
        md5sum (str|None, optional): md5 sum of download package
        decompress (bool, optional): decompress zip or tar file. Default is `True`
        method (str, optional): which download method to use. Support `wget` and `get`. Default is `get`.

    Returns:
        str: a local path to save downloaded models & weights & datasets.
    r   )ParallelEnvzdownloading from z
 not a urlNzFound )r@      )Zpaddle.distributedrB   r%   r1   r<   r8   r,   exists	_md5checkr6   r7   Zcurrent_endpoint	_downloadosr    timesleeptarfile
is_tarfilezipfile
is_zipfile_decompress)	r&   r/   r'   r>   r?   r@   rB   fullpathr:   r   r   r	   r)   w   s&   

r)   c           
      C  sz  t |}ztjd| d dd}|jdkr!td|  d|j d|d }|jd	}t|d
I}|rbt	t
|d d d}|jddD ]}|| |d qEW d    n1 s\w   Y  n|jddD ]	}|rq|| qhW d    n1 s|w   Y  t|| |W  d    W S 1 sw   Y  W d S  ty }	 ztd| d|  d|	  W Y d }	~	dS d }	~	ww )NGETT)timeoutZfollow_redirects   zDownloading from z failed with code !Z_tmpzcontent-lengthwbi  i   )r   )
chunk_sizerC   Downloading  from z failed with exception F)r,   basenamehttpxstreamstatus_codeRuntimeErrorheadersr=   openr   intZ
iter_bytesr   r   shutilmove	Exceptionr6   r7   )
r&   fullnamer0   reqZtmp_fullname
total_sizefZpbarchunker   r   r	   _get_download   sH   




(ri   c                 C  s   |t v sJ d| dt|st| t| d }t||}d}td| d|   t|r:t	||smtd| d|  |t
k rN|d	7 }ntd
|  dt | | |sctd	 q0t|r:t	||r:|S )z
    Download from url, save to path.

    url (str): download url
    path (str): download to given path
    md5sum (str): md5 sum of download package
    method (str): which download method to use. Support `wget` and `get`. Default is `get`.

    zmake sure `z` implementedr+   r   rV   rW   z	md5check z and rC   zDownload from z failed. Retry limit reached)_download_methodsr,   rD   rG   makedirsr-   r.   r6   r7   rE   DOWNLOAD_RETRY_LIMITr\   rH   rI   )r&   r    r'   r@   r0   rc   Z	retry_cntr   r   r	   rF      s&   





rF   c              	     s   |d u rdS t d|  d t }t| d t fdddD ]}|| q"W d    n1 s4w   Y  | }||krRt d|  d| d	| d
 dS dS )NTzFile z md5 checking...rbc                     s
     dS )Ni   )readr   rf   r   r	   <lambda>   s   
 z_md5check.<locals>.<lambda>    z md5 check failed, z
(calc) != z(base)F)r6   r7   hashlibmd5r^   iterr   	hexdigest)rc   r'   rs   rg   Zcalc_md5sumr   ro   r	   rE      s$   rE   c                 C  sL   t d|  d t| rt| }|S t| rt| }|S td|  )z)
    Decompress for zip and tar file
    zDecompressing z...zUnsupported compress file type )	r6   r7   rJ   rK   _uncompress_file_tarrL   rM   _uncompress_file_zip	TypeError)r0   uncompressed_pathr   r   r	   rN     s   

rN   c                 C  s0  t | d}| }g }|D ]}||dd qtj| }t|r6|d }tj	||}|
| nOt|r[tj|d tjd tjd }tj	||}|
| n*tj| d tjd }tj	||}tj|s{t| |
tj	|| |W  d    S 1 sw   Y  d S )Nr../ r   r+   )rL   ZipFilenamelistappendreplacerG   r    dirname_is_a_single_filer.   
extractall_is_a_single_dirsplitextstripsepr-   rD   rk   )filepathfilesfile_list_tmp	file_listfilefile_dirrootpathry   r   r   r	   rw     s2   
$rw   r:*c           	      C  sL  t | |}| }g }|D ]}|d dksJ d| d||dd qtj| }t|rD|d }tj	||}|
| nOt|ritj|d tjd tjd }tj	||}|
| n*tj| d tjd }tj	||}tj|st| |
tj	|| |W  d    S 1 sw   Y  d S )Nr   /zuncompress file path z should not start with /r{   r|   r+   )rJ   r^   getnamesr   r   rG   r    r   r   r.   r   r   r   r   r   r-   rD   rk   )	r   moder   r   r   r   r   r   ry   r   r   r	   rv   <  s8   

$rv   c                 C  s(   t | dkr| d tjdk rdS dS )NrC   r   TF)lenfindrG   r   )r   r   r   r	   r   ]  s    r   c                 C  s   g }| D ]}d|v r| dtj}nd|v r| dtj}|| q|d tjd }tdt|D ]}||| tjd krE dS q4dS )Nr   \r   rC   FT)r   rG   r   r   r-   ranger   )r   Znew_file_list	file_path	file_nameir   r   r	   r   c  s   r   )r    r!   r"   r#   r   )r&   r!   r'   r(   r"   r!   )NTTr=   )r&   r!   r/   r!   r'   r(   r>   r#   r?   r#   r@   rA   r"   r!   )Nr=   )r   )&
__future__r   rr   rG   Zos.pathr    r,   r`   r   rJ   rH   rL   typingr   rY   r   logging	getLoggerr   r6   __all__
expanduserr*   rl   r%   r   r1   r<   r)   ri   rj   rF   rE   rN   rw   rv   r   r   r   r   r   r	   <module>   sL   


	4!

$
 !