o
    ϯi=)                  
   @   s   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 zeZ	dZ
W n ey4 Z	 zdZ
W Y dZ	[	ndZ	[	ww G dd deZefddZG d	d
 d
ejZG dd dejZG dd dejZedkrwe   e dZee j e  dS dS )    N)CfgNodeTFc                   @   s   e Zd ZdS )SubCNN)__name__
__module____qualname__ r   r   >/home/ubuntu/.local/lib/python3.10/site-packages/yacs/tests.pyr      s    r   c                 C   s   |  }d|_ |  |_d|j_d|j_|  |_d|j_|  |_d|j_d|j_|  |j_	d|jj	_d|jj	_|  |jj	_
d|jj	j
_d|jj	j
_|d |d |jd	d
dd | dd|_d|j_|  |j_d|jj_|S )N   g?)      r	      a_foo_model   r
   	FINAL_MSGMODEL.DILATIONEXAMPLE.OLD.KEYzEXAMPLE.NEW.KEYz*Please update your config fil config file.)messageT)new_allowedr   )NUM_GPUSTRAINHYPERPARAMETER_1SCALESMODELTYPESTRKEY1KEY2FOOBARregister_deprecated_keyregister_renamed_keyKWARGSzYX)clscfgr   r   r   get_cfg   s8   






r'   c                   @   s   e Zd Zdd ZdS )TestCfgNodec                 C   s  t  }d|_|  | t d|_d|_W d    n1 s w   Y  | s+J |jdks2J |  | r<J d|_|jdksFJ t  |_d|j_t  |j_	d|jj	_|  | sbJ | t d|jj	_d|j_W d    n1 s{w   Y  |jj	jdksJ d S )Nr   r   )
CNfoofreezeassertRaisesAttributeErrorbar	is_frozendefrostlevel1level2)selfar   r   r   test_immutability=   s0   



zTestCfgNode.test_immutabilityN)r   r   r   r5   r   r   r   r   r(   <   s    r(   c                   @   s   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Zdd Z	dd Z
dd Zdd Zdd Zdd Zdd Zdd Zdd Zdd  Zd!S )"TestCfgc                 C   s2   t  }| }|jj}d|j_|jj|ksJ d S )Ndummy)r'   cloner   r   r3   r&   cfg2sr   r   r   test_copy_cfgZ   s
   zTestCfg.test_copy_cfgc                 C   s  t  }d}| }||j_|| |jj|ksJ d}t| }||j_|| |jj|ks4J d}t }t |_||j_|| |jj|ksNJ d}t }t |_||j_	| 
t || W d    n1 spw   Y  t }t |_dg|j_|| t|jjtu sJ |jjd dksJ trd|_t }d|_|| t|jtksJ |jd	ksJ t }t |_d|j_| 
t || W d    d S 1 sw   Y  d S )
Ndummy0dummy1dummy2dummy3r   r   r*   s   barr.   )r'   r8   r   r   merge_from_other_cfgr)   load_cfgdumpr   r   r,   KeyErrorr   r   typetuplePY2A_UNICODE_KEYunicode
ValueError)r3   r&   r;   r:   r   r   r   test_merge_cfg_from_cfga   sV   





"zTestCfg.test_merge_cfg_from_cfgc                 C   s   t jdd5}t }||  |  |jj}d|j_|jj|ks%J ||j	 |jj|ks3J W d    d S 1 s>w   Y  d S Nwt)moder7   )
tempfileNamedTemporaryFiler'   writerC   flushr   r   merge_from_filenamer3   fr&   r;   r   r   r   test_merge_cfg_from_file   s   "z TestCfg.test_merge_cfg_from_filec                 C   s   t  }g d}t|jjdksJ |jjd dksJ |jjdks#J |jdks*J || t|jjt	u s9J t|jjdksCJ |jjd dksMJ |jjdksUJ |jdks\J d S N)zTRAIN.SCALESz(100, )z
MODEL.TYPEfoobarr   r
   r   d   rY   r
   r   )
r'   lenr   r   r   r   r   merge_from_listrE   rF   r3   r&   optsr   r   r   test_merge_cfg_from_list   s   
z TestCfg.test_merge_cfg_from_listc                 C   s   t  }g d}| t |j}W d    n1 sw   Y  | t |jj}W d    n1 s3w   Y  || | t |j}W d    n1 sPw   Y  | t |jj}W d    d S 1 sjw   Y  d S )N)r   rY   r   r
   )r'   r,   r-   r   r   DILATIONr\   r3   r&   r^   _r   r   r   test_deprecated_key_from_list   s   


"z%TestCfg.test_deprecated_key_from_listc                 C   sH   t  }ddg}| t || W d    d S 1 sw   Y  d S )NzMODEL.DOES_NOT_EXISTIGNORE)r'   r,   AssertionErrorr\   r]   r   r   r   test_nonexistant_key_from_list   s
   "z&TestCfg.test_nonexistant_key_from_listc                 C   sR   G dd dt j}d}| t tj| W d    d S 1 s"w   Y  d S )Nc                   @   s   e Zd ZdZejZdZdS )z7TestCfg.test_load_cfg_invalid_type.<locals>.CustomClassz,A custom class that yaml.safe_load can load.z!CustomClassN)r   r   r   __doc__yaml
SafeLoaderyaml_loaderyaml_tagr   r   r   r   CustomClass   s    rl   z"FOO:
 BAR:
  QUUX: !CustomClass {})rh   
YAMLObjectr,   re   yacsconfigrB   )r3   rl   
cfg_stringr   r   r   test_load_cfg_invalid_type   s
   "z"TestCfg.test_load_cfg_invalid_typec              	   C   s   t  }td\}| }d|j_||  |  | 	t
 |jj}W d    n1 s0w   Y  ||j | 	t
 |jj}W d    n1 sOw   Y  W d    d S W d    d S 1 sgw   Y  d S )NrM   r
   )r'   rO   rP   r8   r   r`   rQ   rC   rR   r,   r-   rS   rT   r3   r&   rV   r:   rb   r   r   r   test_deprecated_key_from_file   s    

"z%TestCfg.test_deprecated_key_from_filec                 C   s|   t  }ddg}| t |jjj}W d    n1 sw   Y  | t || W d    d S 1 s7w   Y  d S )Nr   rY   )r'   r,   r-   EXAMPLEOLDKEYrD   r\   ra   r   r   r   test_renamed_key_from_list   s   "z"TestCfg.test_renamed_key_from_listc              	   C   s   t  }tdc}| }t |_t |j_d|jj_||	  |
  | t |jjj}W d    n1 s;w   Y  | t ||j W d    n1 sVw   Y  W d    d S W d    d S 1 snw   Y  d S )NrM   rY   )r'   rO   rP   r8   r)   rt   RENAMEDrv   rQ   rC   rR   r,   r-   rD   rS   rT   rr   r   r   r   test_renamed_key_from_file   s"   

	"z"TestCfg.test_renamed_key_from_filec              	   C   s   t  }td8}||  |  t|jd}tj	
| W d    n1 s+w   Y  W d    d S W d    d S 1 sCw   Y  d S )NrM   rt)r'   rO   rP   rQ   rC   rR   openrT   rn   ro   rB   )r3   r&   rV   f_readr   r   r   test_load_cfg_from_file   s   "zTestCfg.test_load_cfg_from_filec                 C   sD   t  }|d |jjdksJ t  }|d |jjdks J d S )Nzexample/config_override.pyg?z$example/config_override_from_dict.py)r'   rS   r   r   r3   r&   r   r   r   test_load_from_python_file   s   

z"TestCfg.test_load_from_python_filec                 C   s>   t  }| t t |_W d    d S 1 sw   Y  d S )N)r'   r,   re   objectINVALID_KEY_TYPEr~   r   r   r   test_invalid_type
  s   
"zTestCfg.test_invalid_typec                 C   s"   d  }t }t||ksJ d S )Nz
KWARGS:
  Y:
    X: 1
  z: 0
MODEL:
  TYPE: a_foo_model
NUM_GPUS: 8
STR:
  FOO:
    BAR:
      KEY1: 1
      KEY2: 2
    KEY1: 1
    KEY2: 2
  KEY1: 1
  KEY2: 2
TRAIN:
  HYPERPARAMETER_1: 0.1
  SCALES: (2, 4, 8, 16)
)stripr'   str)r3   expected_strr&   r   r   r   test__str__  s
   zTestCfg.test__str__c                 C   sJ   t  }|d |jjdksJ |jjjdksJ |jjjjdks#J d S )Nzexample/config_new_allowed.yamlr   r
   3)r'   rS   r!   r4   BcDer~   r   r   r   test_new_allowed(  s
   
zTestCfg.test_new_allowedc                 C   sd   t  }| t |d W d    n1 sw   Y  |d |d |jjjdks0J d S )Nz#example/config_new_allowed_bad.yamlTr   )r'   r,   rD   rS   set_new_allowedr!   r#   rV   r~   r   r   r   test_new_allowed_bad/  s   

zTestCfg.test_new_allowed_badN)r   r   r   r<   rK   rW   r_   rc   rf   rq   rs   rw   ry   r}   r   r   r   r   r   r   r   r   r   r6   Y   s"    8
r6   c                   @   s$   e Zd Zdd Zdd Zdd ZdS )TestCfgNodeSubclassc                 C   s   t jdd6}tt}||  |  |jj}d|j_|jj|ks&J |	|j
 |jj|ks4J W d    d S 1 s?w   Y  d S rL   )rO   rP   r'   r   rQ   rC   rR   r   r   rS   rT   rU   r   r   r   rW   :  s   "z,TestCfgNodeSubclass.test_merge_cfg_from_filec                 C   s   t t}g d}t|jjdksJ |jjd dksJ |jjdks$J |jdks+J || t	|jjt
u s:J t|jjdksDJ |jjd dksNJ |jjdksVJ |jdks]J d S rX   )r'   r   r[   r   r   r   r   r   r\   rE   rF   r]   r   r   r   r_   E  s   
z,TestCfgNodeSubclass.test_merge_cfg_from_listc                 C   sn   t t}t t}d}||j_|| |jj|ksJ d}t| }||j_|| |jj|ks5J d S )Nr=   r>   )r'   r   r   r   rA   rB   rC   r9   r   r   r   rK   S  s   

z+TestCfgNodeSubclass.test_merge_cfg_from_cfgN)r   r   r   rW   r_   rK   r   r   r   r   r   9  s    r   __main__zyacs.config)loggingrO   unittestyacs.configrn   rh   r   r)   rI   _ignorerG   	Exceptionr   r'   TestCaser(   r6   r   r   basicConfig	getLoggeryacs_loggersetLevelDEBUGmainr   r   r   r   <module>   s2    ( a*
