U
    +ifSG                     @   sB   d dl Z d dlZd dlmZ d dlmZ d dlZG dd dZ	dS )    N)config)OptionErrorc                   @   s   e Zd Ze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!d" Zd#d$ Zd%d& Zd'd( Zd)d* Zd+d, Zd-d. Zd/d0 Zd1S )2
TestConfigc                 C   sL   ddl m} t| _|t| jd| _|t| jd| _|t| jd| _d S )Nr   )deepcopy_global_config_deprecated_options_registered_options)copyr   cfgetattrgcdoro)clsr    r   R/home/mars/bis/venv/lib/python3.8/site-packages/pandas/tests/config/test_config.pysetup_class   s
    zTestConfig.setup_classc                 C   sV   t | jdi  t | jd| j| jj t | jdi  t | jdi  | jdd d S )Nr   optionsr   r   Zchained_assignmentraise)setattrr
   ZDictWrapperr   register_optionselfmethodr   r   r   setup_method   s
    zTestConfig.setup_methodc                 C   s4   t | jd| j t | jd| j t | jd| j d S )Nr   r   r   )r   r
   r   r   r   r   r   r   r   teardown_method!   s    zTestConfig.teardown_methodc                 C   s<   t tdstt tdstt tds*tt tds8td S )N
get_option
set_optionreset_optiondescribe_option)hasattrpdAssertionErrorr   r   r   r   test_api&   s    zTestConfig.test_apic              	   C   sJ   | j d dg}|d |d  d}tjt|d |d W 5 Q R X d S )N   zValue must be one of None\|12match皙?)r
   is_one_of_factorypytestraises
ValueError)r   vmsgr   r   r   test_is_one_of_factory.   s    z!TestConfig.test_is_one_of_factoryc              	   C   s:  | j ddd d}tjt|d | j ddd W 5 Q R X d}tjt|d | j ddd W 5 Q R X tjt|d | j ddd W 5 Q R X d	}tjt|d | j d
d W 5 Q R X tjt|d | j dd W 5 Q R X d}tjt|d | j dd W 5 Q R X | j ddd | j ddd d S )Na   docz&Option 'a' has already been registeredr&   z.Path prefix to option 'a' is already an optionza.b.c.d1a.b.c.d2zfor is a python keywordforr   za.for.bz(oh my goddess! is not a valid identifierzOh my Goddess!zk.b.c.d1zk.b.c.d2)r
   r   r*   r+   r   r,   r   r.   r   r   r   test_register_option7   s&    zTestConfig.test_register_optionc              	   C   s  | j ddd | j ddd | j d | j ddd | j ddd	 | j d
d | j dd | j dd | j jddd | j dd d}tjt|d | j d W 5 Q R X d| j jdddkstd| j jdddkstd| j jdddkstd| j jdddks"td	| j jdddks<td| j jd
ddksVtd| j jdddksptd| j jdddkstd| j jdddkstd| j jdddkstd| j jdddkst| j dd d| j jdddks td S )Nr0   r1   r2   bdoc2zc.d.e1Zdoc3zc.d.e2Zdoc4fzg.hk   ZrkeylfoozNo such keys\(s\)r&   no.such.keyFZ_print_descZprecated	availablebar)	r
   r   deprecate_optionr*   r+   r   r   r"   r   r5   r   r   r   test_describe_optionX   s4    zTestConfig.test_describe_optionc              	   C   s   | j ddd d| j jdddks(t| j ddks<t| j dd	 | j d
d	ks^td}tjt|d | j d W 5 Q R X | j 	d | j 
d
std S )NZKanBANr1   r2   ZkanbaNFr@   ZkanBaNZKanBanr;   ZkAnBaN#No such keys\(s\): 'no_such_option'r&   no_such_option)r
   r   r   r"   r   r   r*   r+   r   rC   _is_deprecatedr5   r   r   r   test_case_insensitive   s    z TestConfig.test_case_insensitivec              	   C   s   | j ddd | j ddd | j dd d | j ddksDt| j ddksXt| j dd ksltd}tjt|d	 | j d
 W 5 Q R X d S )Nr0   r1   r2   b.chullor8   b.brE   r&   rF   )r
   r   r   r"   r*   r+   r   r5   r   r   r   test_get_option   s    zTestConfig.test_get_optionc              	   C   s  | j ddd | j ddd | j dd d | j ddksDt| j ddksXt| j dd kslt| j dd | j dd	 | j dd
 | j ddkst| j dd	kst| j dd
kstd}tjt|d | j dd  W 5 Q R X d S )Nr0   r1   r2   rI   rJ   r8   rK   r;   wurldr(   z No such keys\(s\): 'no.such.key'r&   r?   )r
   r   r   r"   r   r*   r+   r   r5   r   r   r   test_set_option   s    zTestConfig.test_set_optionc              	   C   s,   d}t jt|d | j  W 5 Q R X d S )N4Must provide an even number of non-keyword argumentsr&   r*   r+   r,   r
   r   r5   r   r   r   test_set_option_empty_args   s    z%TestConfig.test_set_option_empty_argsc              	   C   s2   d}t jt|d | jddd W 5 Q R X d S )NrO   r&   za.br;   rI   rP   r5   r   r   r   test_set_option_uneven_args   s    z&TestConfig.test_set_option_uneven_argsc              	   C   s.   d}t jt|d | jd W 5 Q R X d S )NrO   r&   r;   rP   r5   r   r   r   ,test_set_option_invalid_single_argument_type   s    z7TestConfig.test_set_option_invalid_single_argument_typec                 C   s   | j ddd | j ddd | j dd d | j ddksDt| j ddksXt| j dd kslt| j dddd dd	 | j ddkst| j dd kst| j dd	kstd S )
Nr0   r1   r2   rI   rJ   r8   rK   2g      $@)r
   r   r   r"   r   r#   r   r   r   test_set_option_multiple   s    z#TestConfig.test_set_option_multiplec              	   C   s  | j jddd| j jd | j jddd| j jd | j jddd| j jd d	}tjt|d
 | j jddd| j jd W 5 Q R X | j dd | j dd | j dd | j dd  tjt|d
 | j dd  W 5 Q R X tjt|d
 | j dd W 5 Q R X d}tjt|d
 | j jddd| j jd W 5 Q R X tjt|d
 | j jddd| j jd W 5 Q R X d}tjt|d
 | j dd W 5 Q R X | j 	d | j j
g}| j jddd d|d | j ddj | j dd  tjtdd
 | j dd W 5 Q R X d S )Nr0   r1   r2   	validatordrI   rJ   r8   z$Value must have type '<class 'int'>'r&   r3   NOr;   rM   abz+Value must be a nonnegative integer or Noneza.b.c.d3z;Value must be an instance of <class 'str'>\|<class 'bytes'>r7   c                   S   s   d S Nr   r   r   r   r   <lambda>       z,TestConfig.test_validation.<locals>.<lambda>z%.1fzValue must be a callable)r
   r   is_intZis_nonnegative_intZis_textr*   r+   r,   r   r)   Zis_callableformat)r   r.   rW   r   r   r   test_validation   sL    "      zTestConfig.test_validationc                 C   s
  | j jddd| j jd | j jddd| j jd | j ddksDt| j ddksXt| j dd | j dd	 | j ddkst| j dd	kst| j d | j ddkst| j dd	kst| j d | j ddkst| j ddkstd S )
Nr0   r1   r2   rV   rI   rJ   r8   r;   rM   r
   r   r_   Zis_strr   r"   r   r   r#   r   r   r   test_reset_option   s    zTestConfig.test_reset_optionc                 C   s   | j jddd| j jd | j jddd| j jd | j ddksDt| j ddksXt| j dd | j dd	 | j ddkst| j dd	kst| j d
 | j ddkst| j ddkstd S )Nr0   r1   r2   rV   rI   rJ   r8   r;   rM   allrb   r#   r   r   r   test_reset_option_all  s    z TestConfig.test_reset_option_allc              
   C   sB  | j d | j dsttjddZ}td tjt	dd | j 
d W 5 Q R X t|dksjtdt|d	 ks~tW 5 Q R X | j jd
dd| j jd | j ddd | j ddd | j jd
dd tjdd}td | j 
d
 t|dkstdt|d	 kstdt|d	 ks2td}tjt|d | j d
 W 5 Q R X W 5 Q R X | j dd tjddD}td | j 
d t|dkstdt|d	 kstW 5 Q R X | j ddd | j ddd | j 
ddks t| j 
ddkst| j jddd tjddN}td | j 
ddksTtt|dksftdt|d	 ks|tW 5 Q R X tjddF}td | j dd t|dkstdt|d	 kstW 5 Q R X tjddN}td | j 
ddkstt|dkstdt|d	 ks4tW 5 Q R X d S )Nr>   T)recordalwayszNo such keys.s.: 'foo'r&   r1   
deprecatedr0   r2   rV   rI   rJ   r8   Z	nifty_ver)Zremoval_verZ	eprecatedz1Option 'a' has already been defined as deprecatedzzounds!d.azd.deprB   r<   Zbaz)r
   rC   rG   r"   warningscatch_warningssimplefilterr*   r+   KeyErrorr   lenstrr   r_   r   r   )r   wr.   r   r   r   test_deprecate_option  s^    

 
 
 
 
z TestConfig.test_deprecate_optionc              	   C   s\  | j d | j ddd | j ddd | j ddksBt| j ddksVt| j dd | j dd	 | j ddkst| j dd	kstW 5 Q R X | j d
dkst| j dd	kstd| j jd
ddkstd| j jdddkst| j d
 | j d | j d2 | j ddks8t| j ddksNtW 5 Q R X d S )Nbaser0   r1   Zdoc1r7   r;   r8         zbase.azbase.bFr@   )r
   Zconfig_prefixr   r   r"   r   r   r   r#   r   r   r   test_config_prefix\  s$    zTestConfig.test_config_prefixc                    s   d g d g fdd}j jdd|d j jdd|d  d= d= j dd  d dksjtd dkszt d= d= j dd	  d dkstd d	kst d= d= j d  d dkstd S )
Nc                    s      |   j|  d S r\   )appendr
   r   keyr:   r   r-   r   r   callbackx  s    
z*TestConfig.test_callback.<locals>.callbackrj   r>   cbzd.bri   Zfoozboo)r
   r   r   r"   r   )r   r{   r   rz   r   test_callbackt  s     zTestConfig.test_callbackc              
      s   fdd j dd  d j dd8  d j dd  d W 5 Q R X  d W 5 Q R X  d j dd  d j dd fd	d
}|  d S )Nc                    s    j d| kstd S )Nr0   )r
   r   r"   )valr#   r   r   eq  s    z.TestConfig.test_set_ContextManager.<locals>.eqr0   r            {   c                      s    d d S )Nr   r   r   )r   r   r   r9     s    z-TestConfig.test_set_ContextManager.<locals>.f)r
   r   option_contextr   )r   r9   r   )r   r   r   test_set_ContextManager  s    z"TestConfig.test_set_ContextManagerc              	      s  g   fdd}| j dd | j jdd|d | j j}|jdksFt| j dd |jdksdtW 5 Q R X d|_| j ddkst| j d |j| j ddkstd	}tj	t
|d
 d|_W 5 Q R X tj	t
|d
 d|_W 5 Q R X d|_t dkstd S )Nc                    s     d d S )NT)rw   rx   Zholderr   r   f3  s    z,TestConfig.test_attribute_access.<locals>.f3r0   r   cr|   r   i  z.You can only set the value of existing optionsr&   r1   )r
   r   r   r0   r"   r   r   r   r*   r+   r   r7   displayr   ro   )r   r   r   r.   r   r   r   test_attribute_access  s&    z TestConfig.test_attribute_accessc              	   C   sx   d}d}d}| j || | j ||}| j ||ks<t| | j ||ksVtW 5 Q R X | j ||ksttd S )N<   
   r0   )r
   r   r   r   r"   )r   original_valueZcontext_valueZoption_namectxr   r   r   test_option_context_scope  s    z$TestConfig.test_option_context_scopec              	   C   s:   | j j}tjtdd |j W 5 Q R X t|dr6td S )NzNo such optionr&   bananas)r
   r   r*   r+   r   r   r    r"   )r   r   r   r   r   test_dictwrapper_getattr  s    z#TestConfig.test_dictwrapper_getattrN)__name__
__module____qualname__classmethodr   r   r   r$   r/   r6   rD   rH   rL   rN   rQ   rR   rS   rU   ra   rc   re   rr   rv   r   r   r   r   r   r   r   r   r   r      s2   
	!')Ar   )
rk   r*   Zpandas._configr   r
   Zpandas._config.configr   Zpandasr!   r   r   r   r   r   <module>   s
   