U
    sVcCG                     @   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   C/tmp/pip-unpacked-wheel-xj8nt62q/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selfr   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AssertionErrorr   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 )Nr.   r/   r0   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   r3   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KanBANr/   r0   ZkanbaNFr>   ZkanBaNZKanBanr9   ZkAnBaN#No such keys\(s\): 'no_such_option'r$   no_such_option)r
   r   r   r!   r   r   r(   r)   r   rA   _is_deprecatedr3   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 )Nr.   r/   r0   b.chullor6   b.brC   r$   rD   )r
   r   r   r!   r(   r)   r   r3   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 )Nr.   r/   r0   rG   rH   r6   rI   r9   wurldr&   z No such keys\(s\): 'no.such.key'r$   r=   )r
   r   r   r!   r   r(   r)   r   r3   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   r3   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 )NrM   r$   za.br9   rG   rN   r3   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 )NrM   r$   r9   rN   r3   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 )
Nr.   r/   r0   rG   rH   r6   rI   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 )Nr.   r/   r0   	validatordrG   rH   r6   z$Value must have type '<class 'int'>'r$   r1   NOr9   rK   abz+Value must be a nonnegative integer or Noneza.b.c.d3z;Value must be an instance of <class 'str'>\|<class 'bytes'>r5   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,   rU   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 )
Nr.   r/   r0   rT   rG   rH   r6   r9   rK   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 )Nr.   r/   r0   rT   rG   rH   r6   r9   rK   allr`   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$   r/   
deprecatedr.   r0   rT   rG   rH   r6   Z	nifty_ver)Zremoval_verZ	eprecatedz1Option 'a' has already been defined as deprecatedzzounds!d.azd.depr@   r:   Zbaz)r
   rA   rE   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baser.   r/   Zdoc1r5   r9   r6         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 rZ   )appendr
   r   keyr8   r   r+   r   r   callbackx  s    
z*TestConfig.test_callback.<locals>.callbackrh   r<   cbzd.brg   ZfoozZboo)r
   r   r   r!   r   )r   ry   r   rx   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 )Nr.   )r
   r   r!   )valr   r   r   eq  s    z.TestConfig.test_set_ContextManager.<locals>.eqr.   r            {   c                      s    d d S )Nr   r   r   )r~   r   r   r7     s    z-TestConfig.test_set_ContextManager.<locals>.f)r
   r   option_contextr   )r   r7   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)ru   rv   Zholderr   r   f3  s    z,TestConfig.test_attribute_access.<locals>.f3r.   r   crz   r   i  z.You can only set the value of existing optionsr$   r/   )r
   r   r   r.   r!   r   r   r   r(   r)   r   r5   Zdisplayr   rm   )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<   
   r.   )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-   r4   rB   rF   rJ   rL   rO   rP   rQ   rS   r_   ra   rc   rp   rt   r|   r   r   r   r   r   r   r   r   r      s2   
	!')Ar   )
ri   r(   Zpandas._configr   r
   Zpandas._config.configr   Zpandasr    r   r   r   r   r   <module>   s
   