o
    ߥi)                     @   sV   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 e Zdd ZG dd de	Z
dS )    N)
get_loggerc                 C   s:   t d|  t|  tj|  t|  tj|  d S )NzSeed: )printrandomseednptorchmanual_seedcudamanual_seed_all)r    r   l/home/ubuntu/.local/lib/python3.10/site-packages/modelscope/models/multi_modal/videocomposer/utils/config.py
setup_seed   s
   


r   c                   @   s   e Zd Z					d ddZdd Zdd	 Zd
d Zdd Zd!ddZd"ddZ	dd Z
dd Zdd Zdd Zdd Zdd ZdS )#ConfigTNexp06_text_depths_vs_style.yamlc                 C   s   |d urt j|r|d | _ntd| d|| _d|d ur$d| nd | _|rT|  | _t	
d| jj d| _|  }| | j}| ||}| |}|| _| | d S )	Nz/configsz
model_dir z is not exist!cfg. zLoading config from {}.T)ospathisdir	model_dir	Exceptioncfg_file_name_level_parse_argsargsloggerinfoformatcfg_fileneed_initialization_initialize_cfg
_load_yaml_merge_cfg_from_base_update_from_argscfg_dict_update_dict)selfloadr%   	cfg_levelr   r   cfg_baser   r   r   __init__   s*   

zConfig.__init__c                 C   s   t jdd}|jdddtj| j| jd |jddd	td
 |jdt	ddd |jddddd |jdddtdf |jdddtd |jdddtd |jddtd |jdd td!f |jd"d#d t j
d$ | S )%Nz?Argparser for configuring [code base name to think of] codebase)descriptionz--cfgr   zPath to the configuration file)desthelpdefaultz--init_methodz9Initialization method, includes TCP or shared file-systemztcp://localhost:9999)r.   r/   typez--seedi"  z$Need to explore for different videos)r0   r/   r.   z--debug
store_trueFzInto debug information)actionr/   r.   z--input_videozdemo_video/video_8800.mp4z;input video for full task, or motion vector of input videos)r/   r.   r0   z--image_pathr   zSingle Image Inputz--sketch_pathzSingle Sketch Inputz--style_image)r.   r0   z--input_text_desczwA colorful and beautiful fish swimming in a small glass bowl with              multicolored piece of stone, Macro Video)r/   r0   optszother configurations)r.   r/   nargs)argparseArgumentParseradd_argumentr   r   joinr   r   strint	REMAINDER
parse_args)r'   parserr   r   r   r   1   sl   zConfig._parse_argsc                 C   s&   d}|D ]}||d 7 }q|d d S )Nr   /r   )r'   	path_listr   pr   r   r   
_path_joind   s   zConfig._path_joinc                 C   s&   | j }t|D ]	}t||||< q|S N)r   varsgetattr)r'   r%   r   varr   r   r   r$   j   s   zConfig._update_from_argsc                 C   s   | j r`d| _ tjtj| jdr:ttj| jdd}tj|	 tj
d}W d    |S 1 s3w   Y  |S ttj| jdd}tj|	 tj
d}W d    |S 1 s[w   Y  |S )NFz	base.yamlrLoader)r    r   r   existsr8   r   openyamlr(   read
SafeLoader)r'   fr   r   r   r   r!   p   s   

zConfig._initialize_cfgr   c           	      C   s  |j d usJ |dks+t|d}tj| tjd}W d    n1 s%w   Y  nt dd |j dd krK|j 	t dd d|_ z%t|j d}tj| tjd}|j }W d    n1 sjw   Y  W nJ t
y } z>tjtdd d |j  |_ t|j d}tj| tjd}|j }W d    n1 sw   Y  t| W Y d }~nd }~ww d	| vrd
| vrd| vr|S d| v r%|d d dkr|d d}| |dd d|d d  |d d|d   }n|d 	d|j 	|j dd d}| ||}| ||}nd	| v rw|d	 d dkrV|d	 d}| |dd d|  |d	 d|d   }n|d	 	d|j 	|j dd d}| ||}| j||dd}d
| v r|d
 d dkr|d
 d}| |dd d|d
 d  |d
 d|d   }n|d
 	d|j 	|j dd d}| ||}| ||}| ||}|S )Nr   rG   rH   r>   r?   r   z./	_BASE_RUN_BASE_MODEL_BASE   r   z..T)preserve_base)r   rK   rL   r(   rM   rN   r   getcwdsplitreplacer   r   realpath__file__r   keyscountrB   r"   r#   _merge_cfg_from_command)	r'   r   	file_namerO   r   e
prev_countcfg_base_filer*   r   r   r   r"   {   s   "
zConfig._load_yamlFc                 C   s\   |  D ]'\}}|| v r!t|tr| || | q|||< qd|vs'|r+|||< q|S )NBASE)itemsr[   
isinstancedictr#   )r'   r*   cfg_newrU   kvr   r   r   r#      s   

zConfig._merge_cfg_from_basec                 C   s  t |jd dksJ d|jt |j|jdd d }|jdd d }t|D ]\}}|d}t |dksBJ dt ||d | v sSJ d|d t |dkrm|d ||d   v slJ d|n|t |d	kr|d ||d   v sJ d||d ||d  |d   v sJ d|nKt |dkr|d ||d   v sJ d||d ||d  |d   v sJ d||d	 ||d  |d  |d   v sJ d|t |dkr|| ||d < q)t |dkr|| ||d  |d < q)t |d	kr$|| ||d  |d  |d < q)t |dkr?|| ||d  |d  |d  |d	 < q)|S )
N   r   z$Override list {} has odd length: {}.rT   r      z1Key depth error. 
Maximum depth: 3
 Get depth: {}zNon-existant key: {}.   )lenr3   r   	enumeraterW   r[   )r'   r   r   r[   valsidxkey	key_splitr   r   r   r]      s   
"zConfig._merge_cfg_from_commandc                    s6   fdd t  fdd| D }j| d S )Nc                    sR   t |tu r| td||  j jdfS t |tu r%|dd dkr%t|}| |fS )NF)r(   r%   r)   r   r   rT   rk   ze-)r0   re   r   r   r   r9   float)rp   elemr'   r   r   recur   s   z"Config._update_dict.<locals>.recurc                 3   s    | ]
\}} ||V  qd S rC   r   ).0rg   rh   )ru   r   r   	<genexpr>  s    z&Config._update_dict.<locals>.<genexpr>)re   rc   __dict__update)r'   r%   dicr   )ru   r'   r   r&      s   zConfig._update_dictc                 C   s   | j S rC   )r   rt   r   r   r   get_args  s   zConfig.get_argsc                 C   s   d |  S )Nz{}
)r   dumprt   r   r   r   __repr__  s   zConfig.__repr__c                 C   s   t j| jddS )Nri   )indent)jsondumpsr%   rt   r   r   r   r|     s   zConfig.dumpc                 C   s
   t | S rC   )copydeepcopyrt   r   r   r   	deep_copy  s   
zConfig.deep_copy)TNNNr   )r   )F)__name__
__module____qualname__r+   r   rB   r$   r!   r"   r#   r]   r&   r{   r}   r|   r   r   r   r   r   r      s&    
3

E*r   )r5   r   r   r   rL   modelscope.utils.loggerr   r   r   objectr   r   r   r   r   <module>   s   