o
    H!i>                     @   s   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 ddl	m
Z
 ddlmZ ddlmZ ddlmZmZmZ dd	lmZmZmZ dd
l	mZmZmZmZmZ ddgZdd Zdd Zdd ZG dd de Z!G dd de Z"G dd de Z#dS )    N)Requirement   )logging)download_and_extract)custom_open)install_packages'install_packages_from_requirements_fileuninstall_packages   )REPO_DIST_NAMESREPO_DOWNLOAD_BASEget_repo_meta)fetch_repo_using_gitinstall_external_depsremove_repo_using_rmreset_repo_using_gitswitch_working_dirbuild_repo_instancebuild_repo_group_installerc                 O   s   t }|| g|R i |}|S )r   )PPRepository)	repo_nameargskwargsZrepo_clsZrepo_instance r   e/home/app/PaddleOCR-VL-test/.venv_paddleocr/lib/python3.10/site-packages/paddlex/repo_manager/repo.pyr   +   s   c                  G      t t| S )r   )RepositoryGroupInstallerlistreposr   r   r   r   3      c                  G   r   )build_repo_group_getter)RepositoryGroupGetterr   r   r   r   r   r!   8   r    r!   c                       s   e Zd ZdZ fddZdd Zdd Zdd	 Zd
d Zd$ddZ	dd Z
dd Zdd Zdd Zdd Zd%ddZdd Zd%ddZd d! Zd"d# Z  ZS )&r   zh
    Installation, initialization, and PDX module import handler for a
    PaddlePaddle repository.
    c                    s   t    || _|| _t|| j| _t| j| _| jd | _	| j
dd | _| j
dd | _|jd | jd  | _| j
dd| _d S )Ngit_path	dist_nameimport_name.Zpdx_pkg_namemain_req_filerequirements.txt)super__init__namerepo_parent_dirospjoinroot_dirr   metar#   getr$   r%   __name__pdx_mod_namer'   )selfr+   r,   Zpdx_collection_mod	__class__r   r   r*   C   s   
zPPRepository.__init__c                 C   s:   |   sdS d| jv rt| jtj| jd < |   dS )
initializeFZpath_envT)check_installationr0   r-   abspathr/   osenvironget_pdxr4   r   r   r   r7   R   s   
zPPRepository.initializec                 C      t t | jdS )r8   
.installedr-   existsr.   r/   r=   r   r   r   r8   ^      zPPRepository.check_installationc                    s   t |d}| }W d   n1 sw   Y  g }|D ]5     r* dr+qt fdd|D d}|rM|| dkr@q|| d||   q|  qt|d}|d	d
 |D  W d   dS 1 snw   Y  dS )replace_repo_depsrN#c                 3   s    | ]	}| v r|V  qd S Nr   ).0depliner   r   	<genexpr>k   s    z1PPRepository.replace_repo_deps.<locals>.<genexpr>Nonez==wc                 S   s   g | ]}|d  qS )
r   )rG   lr   r   r   
<listcomp>v       z2PPRepository.replace_repo_deps.<locals>.<listcomp>)r   	readlinesstrip
startswithnextappendopen
writelines)r4   deps_to_replacesrc_requirementsfilelinesZexisting_depsZdep_to_replacer   rI   r   rC   b   s&   
"zPPRepository.replace_repo_depsc                 C   r>   )check_repo_exitingz.gitr@   r=   r   r   r   r]   x   rB   zPPRepository.check_repo_exitingTc                 C   s  | j d rg| j dd}|rt| j d t| jC z)dg}|r'dg}ndg}t||d t| j	| j W |rFd	}t
|rFt| n|rVd	}t
|rWt| w w w W d
   n1 sbw   Y  | j dg D ]X}t|trtt
| j|d > dg}|d rdg}ndg}zt||d W |rd	}t
|rt| n|rd	}t
|rt| w w w W d
   n1 sw   Y  qnd
S )r   install_pkgeditableTz$ will be installed in editable mode.z	--no-depsz-e .r&   pip_install_optsbuildN
extra_pkgsr      )r0   r1   r   warningr%   r   r/   r   r   r+   r-   rA   shutilrmtree
isinstancetupler.   )r4   cleanr_   ra   reqsZtmp_build_direr   r   r   r   |   sf   








zPPRepository.install_packagesc                 C   sR   g }| j d r|| j | j dg D ]}t|tr"||d  qt| dS )r	   r^   rc   r
   N)r0   rV   r$   r1   rh   ri   r	   )r4   Zpkgsrl   r   r   r   r	      s   

zPPRepository.uninstall_packagesc                 C   s:   t t| jdd	 W d    d S 1 sw   Y  d S )Nr?   wb)rW   r-   r.   r/   r=   r   r   r   mark_installed   s   "zPPRepository.mark_installedc                 C   s   t t| jd d S )Nr?   )r:   unlinkr-   r.   r/   r=   r   r   r   mark_uninstalled      zPPRepository.mark_uninstalledc                 C   s4   t  | j d}tj| jdd t|| j| j dS )zdownload from remotez.tarT)exist_okN)r   r+   r:   makedirsr,   r   )r4   Zdownload_urlr   r   r   download   s   zPPRepository.downloadc                 C   s:   t | j t| j W d   dS 1 sw   Y  dS removeN)r   r,   r   r+   r=   r   r   r   rv      s   "zPPRepository.removeNc                 C   s   | j dd}d| | j }t| j? zt||d td W n! tyB } zt	d| j
 d| d|  W Y d}~nd}~ww W d   dS W d   dS 1 sVw   Y  dS )	updatebranchNzhttps://)rx   url
FETCH_HEADzUpdate z from z/ failed, check your network connection. Error:
)r0   r1   r#   r   r/   r   r   	Exceptionr   re   r+   )r4   platformrx   Zgit_urlrl   r   r   r   rw      s    "zPPRepository.updatec                 C   s   t | jS )r<   )	importlibimport_moduler3   r=   r   r   r   r<      r    zPPRepository.get_pdxc              	   C   s0  | j g}| jdg D ]}t|tr|d pt|d d}|| q|durXi }|D ]}|d\}}|d\}}	|	|i||< q,t| j	d}
| j
|v rX| || j
 |
 g }|D ]%}tt| j	|dd	d
}||  W d   n1 s|w   Y  q\| jdg D ]}|| qd|}|S )get_depsrc   r   r   r(   N=r&   rD   utf-8encodingZpdx_pkg_depsrN   )r'   r0   r1   rh   ri   r-   r.   rV   splitr/   r+   rC   rW   read)r4   rY   Zreq_listrl   Z	deps_dictrH   partversionr   dep_namerZ   depsreqfr   r   r   r      s0   


zPPRepository.get_depsc                 C   sr   t | jd}t|ddd}| }W d   n1 sw   Y  |d  }|d  }||g}|d |S )get_versionz.pdx_gen.versionrD   r   r   Nr   r
   )r-   r.   r/   rW   rR   rstriprV   )r4   Zversion_filer   r\   Zsta_vercommitretr   r   r   r      s   

zPPRepository.get_versionc                 C   s   d| j  dt|  dS )N(z, ))r+   idr=   r   r   r   __str__   rq   zPPRepository.__str__)TrF   )r2   
__module____qualname____doc__r*   r7   r8   rC   r]   r   r	   rn   rp   rt   rv   rw   r<   r   r   r   __classcell__r   r   r5   r   r   =   s$    
'


r   c                       sb   e Zd Zd Z fddZ				dddZdd Zdd	d
ZdddZdddZ	dddZ
  ZS )r   c                       t    || _d S rF   r)   r*   r   r4   r   r5   r   r   r*         

z!RepositoryGroupInstaller.__init__FNc           	      C   s   |r|    g }| j| jdd}|D ]}|s| s |d q|d q|s/| j||d t||D ]\}}|rB|  |  q4dS )installTcheck_missingF)constraintsrY   N)		uninstall_sort_reposr   r8   rV   install_depszipr   rn   )	r4   force_reinstallno_depsr   rY   Z	ins_flagsr   repoZins_flagr   r   r   r     s    
z RepositoryGroupInstaller.installc                 C   sD   | j | jdd}|ddd }|D ]}| r|  |  qdS )r   Fr   N)r   r   r8   r	   rp   )r4   r   r   r   r   r   r   !  s   z"RepositoryGroupInstaller.uninstallc                 C   sV   g }| j | jdd}|D ]}|j|d}| j|d|j dd}|| qd|S )r   Tr   rY   z# z dependencies)headlinez

)r   r   r   _normalize_depsr+   rV   r.   )r4   rY   Z	deps_listr   r   r   r   r   r   r   +  s   
z!RepositoryGroupInstaller.get_depsc           
   	   C   s  | j |d}t r}t|d}t|ddd}|| W d   n1 s(w   Y  t|d}t|ddd }|durD|| |d |d	 |d
 W d   n1 s]w   Y  g }	|	d |	| t||	d W d   dS 1 sw   Y  dS )r   r   r(   rM   r   r   Nzconstraints.txtzopencv-python == 0.0.0
z opencv-python-headless == 0.0.0
z(opencv-contrib-python-headless == 0.0.0
z-cr`   )	r   tempfileTemporaryDirectoryr-   r.   rW   writerV   r   )
r4   r   rY   Zdeps_strtdreq_filefrZ	cons_fileZfcra   r   r   r   r   6  s*   





"z%RepositoryGroupInstaller.install_depsc                 C   s   g }|D ]}| |j|jf qg }t }|D ]\}}||v r q| ||f || qg }	g }
dd |D }|D ]\}}||v rL|| }|	 | q:|
 | q:|rnt|
dkrnt|
dkrbdnd}t|
 d| dt|	t| jksyJ |	S )	Nc                 S   s   i | ]}|j |qS r   )r+   )rG   r   r   r   r   
<dictcomp>^  rQ   z8RepositoryGroupInstaller._sort_repos.<locals>.<dictcomp>r   r
   isZare z required in the installation.)rV   r+   r0   setaddlenRuntimeErrorr   )r4   r   r   Zname_meta_pairsr   Zunique_pairsZhashsetr+   r0   Zsorted_reposZmissing_namesZ	name2repober   r   r   r   L  s.   z$RepositoryGroupInstaller._sort_reposc                 C   s   g }|d ur| | | D ]W}| }|sq|d}|dkr"q|dkr,|d | }t|}|jtv r6q|jdddv rBd}n|jdkrNd}|d	7 }n|jddd
krZd}n|jdkrad}| | qd|S )NrE   r   _-)zopencv-pythonopencv-contrib-pythonzopencv-python-headlesszopencv-contrib-python-headlessr   Zalbumentationszalbumentations @ https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/patched_packages/albumentations-1.4.10%2Bpdx-py3-none-any.whlz
albucore @ https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/patched_packages/albucore-0.0.13%2Bpdx-py3-none-any.whlznuscenes-devkitznuscenes-devkit @ https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/patched_packages/nuscenes_devkit-1.1.11%2Bpdx-py3-none-any.whlZimgaugzimgaug @ https://paddle-model-ecology.bj.bcebos.com/paddlex/PaddleX3.0/patched_packages/imgaug-0.4.0%2Bpdx-py2.py3-none-any.whlrN   )	rV   
splitlinesrS   findr   r+   r   replacer.   )r4   r   r   r\   rJ   Zline_sposr   r   r   r   r   l  s4   






z(RepositoryGroupInstaller._normalize_deps)FFNNrF   )F)r2   r   r   r   r*   r   r   r   r   r   r   r   r   r   r5   r   r      s    




 r   c                       s2   e Zd Zd Z fddZd	ddZdd Z  ZS )
r"   c                    r   rF   r   r   r5   r   r   r*     r   zRepositoryGroupGetter.__init__FNc                 C   s0   |r|    | jD ]}|  |j|d q	dS )clone)r|   N)rv   r   rt   rw   )r4   forcer|   r   r   r   r   r1     s   
zRepositoryGroupGetter.getc                 C   s   | j D ]}|  qdS ru   )r   rv   )r4   r   r   r   r   rv     s   

zRepositoryGroupGetter.remove)FN)r2   r   r   r   r*   r1   rv   r   r   r   r5   r   r"     s
    
r"   )$r}   r:   Zos.pathpathr-   rf   r   Zpackaging.requirementsr   utilsr   Zutils.downloadr   Zutils.file_interfacer   Zutils.installr   r   r	   r0   r   r   r   r   r   r   r   r   __all__r   r   r!   objectr   r   r"   r   r   r   r   <module>   s*    ? 