a
    \:b-1                  
   @   s  d dl mZ d dlZd dlZd dlZd dlmZm	Z	m
Z
mZmZmZmZ d dlmZ ejddgddd	 Zd
d ZG dd deZdd Zdd Zdd Zdd ZG dd deZejeeedfddd Zdd Zdd Zdd Zd d! Z ejd"d#e!d$e"d$gd%fdd&d' Z#eje$d(d)dd*dfdd+d, Z%d-d. Z&d/d0 Z'ejd"d(e!d1e"d2gfdd3d4 Z(ejd5e!d5d6e)d7d8d9e*d(fdd:d; Z+d<d= Z,d>d? Z-ejg d@ddAdB Z.dCdD Z/dEdF Z0dS )G    )OrderedDictN)
array_likePandasWrapper	bool_like	dict_like
float_likeint_likestring_like)_right_squeezeTF)paramsc                 C   s   | j S NZparamZrequest r   Qlib/python3.9/site-packages/statsmodels/tools/validation/tests/test_validation.py
use_pandas   s    r   c                 C   s^   | dkr"t d}|rZt|}n8| dkrDt d}|rZt|}nt t dd|  }|S )N   
         r      )npemptypdSeries	DataFramearange)Zdimr   outr   r   r   gen_data   s    

r   c                   @   sZ   e Zd Zdd Zdd Zdd Zdd Zd	d
 Zdd Ze	j
jdddd Zdd ZdS )TestArrayLikec                 C   s  t d|}t|d}|jdks"J |jdks0J t|tju sBJ t|ddd}|jdks^J t|ddd}|jdkszJ t|dddd}|jdksJ t|ddd	d}|jdksJ |jd	ksJ tjt	d
d t|ddd W d    n1 s0    Y  d S )Nr   ar   ndim)shaper   r$   r%   r   )r   r   a is required to have shapematch)r   
r   r   r$   r%   typer   ndarraypytestraises
ValueErrorselfr   datar!   r   r   r   test_1d)   s     

zTestArrayLike.test_1dc                 C   sN  t d|}t|ddd}|jdks&J |jdks4J t|tju sFJ t|ddd}|jdksbJ t|dddd}|jdksJ t|dddd}|jdksJ t|dddd}|jdksJ t|ddd	d}|jdksJ t|dd
d}|jd
ksJ |jdksJ tjt	dd  t|dddd W d    n1 s<0    Y  tjt	dd  t|dddd W d    n1 s|0    Y  tjt	dd  t|dddd W d    n1 s0    Y  d}tjt	|d t|ddd W d    n1 s0    Y  d}tjt	|d t|ddd W d    n1 s@0    Y  d S )Nr   r!   r#   r   )r   Nr&   )r   )Nr   )NN   )r   r   r   r'   r(   r"   )r   r   )Nr   z+a is required to have ndim 1 but has ndim 2r   a must have ndim <= 1Zmaxdimr*   )r1   r   r2   r!   r)   r   r   r   test_2d=   s<    
000.zTestArrayLike.test_2dc                 C   s  t dd}t|ddd}|jdks&J |jdks4J t|tju sFJ t|dddd}|jdksdJ t|dddd}|jdksJ t|dd	d}|jd
ksJ tjt	dd  t|dddd W d    n1 s0    Y  tjt	dd  t|dddd W d    n1 s0    Y  d}tjt	|d t|ddd W d    n1 sT0    Y  d}tjt	|d t|ddd W d    n1 s0    Y  d}tjt	|d t|ddd W d    n1 s0    Y  d S )Nr4   Fr!   r#   )r         )r   Nr9   r&   )NNr9   r   )r   r8   r9   r   r   r'   r(   r"   )NNr   z+a is required to have ndim 2 but has ndim 3r   r5   r   r6   za must have ndim <= 2)
r   r   r%   r$   r+   r   r,   r-   r.   r/   )r1   r2   r!   r)   r   r   r   test_3d`   s0    
.0..zTestArrayLike.test_3dc                 C   s   t d}t|ddd}|jdks&J t d}t|ddd}|jdksLJ t d}t|ddd}|jdksrJ t d}t|ddd}|jdksJ t d	}tt t|ddd W d    n1 s0    Y  d S )
N)r   r   r   r!   r4   r#   r   )r   r   r   )r   r   )r   r   r   r   )r   r   r   r   r   r   )r   r   r   r%   r-   r.   r/   )r1   r2   r!   r   r   r   test_right_squeeze_and_pad{   s    




z(TestArrayLike.test_right_squeeze_and_padc                 C   sF   t d}|d d d }t|ddd}|jd r4J |jd sBJ d S )Nr   r   r!   T)
contiguousZC_CONTIGUOUS)r   r   r   flags)r1   xyr!   r   r   r   test_contiguous   s
    
zTestArrayLike.test_contiguousc                 C   sN   t d}t|dt jd}|jt jks*J t|dt jd}|jt jksJJ d S )Nr   r!   )dtype)r   r   r   float32rA   Zuint8)r1   r>   r!   r   r   r   
test_dtype   s
    
zTestArrayLike.test_dtypezFailing for now)reasonc                 C   sD   t d|}t|d}t|j|tr*J t|j|tr@J d S )Nr   r!   )r   r   
isinstanceTdotr0   r   r   r   test_dot   s    

zTestArrayLike.test_dotc                 C   s6   t d|}t|ddd}t|dd  tju s2J d S )Nr   r!   r#   r   )r   r   r+   r   r,   r0   r   r   r   
test_slice   s    
zTestArrayLike.test_sliceN)__name__
__module____qualname__r3   r7   r:   r;   r@   rC   r-   ZmarkZxfailrH   rI   r   r   r   r   r    (   s   #
r    c                  C   s   t d} t| }|jdks J t d} t| }|jdks@J t d} t| }|jdks`J t d} t| }|jdksJ d S )N)r   r   r   )r   r   r   )r   r   )r   r   r   r   r   r   r   )r   r   r   r   r   r   r   r   )r   r   r
   r%   )r>   r?   r   r   r   test_right_squeeze   s    



rM   c                 C   s   t d| }t dd}t||}| r,tjntj}t||s@J | rR|jd u sRJ t|j|dd}t||srJ | r|jdksJ t|j|dgd}t||sJ | r|jdksJ | rtj	ntj}t||d d d f }t||sJ | r
|j
d dks
J t|j|d d d f dgd}t||s:J | rR|j
dgksRJ | rd}tjt|d, t||d d d d f  W d    n1 s0    Y  d}tjt|d0 t||d |jd d	   W d    n1 s0    Y  d S )
Nr   Fname)columnsr   z!Can only wrap 1 or 2-d array_liker(   z6obj must have the same number of elements in axis 0 asr   )r   r   wrapr   r   r   r,   rE   rN   r   rO   r-   r.   r/   r%   )r   r!   bwrappedZexpected_typer)   r   r   r   test_wrap_pandas   s4    

 <rS   c                  C   s   t dd} d| _t dd}t| j|dd}d}|j|ks>J t dd} d	d
 t| jd D | _t dd}t| j|dd}dd
 | jD }t|j|ksJ d S )Nr   TappleFappendedappendZapple_appendedr   c                 S   s   g | ]}d t | qS )Zapple_)str.0ir   r   r   
<listcomp>       z+test_wrap_pandas_append.<locals>.<listcomp>c                 S   s   g | ]}|d  qS Z	_appendedr   rZ   cr   r   r   r\      r]   r   rN   r   rP   ranger%   rO   listr!   rQ   rR   Zexpectedr   r   r   test_wrap_pandas_append   s    



re   c                  C   s   t dd} d| _t dd}t| j|dd}d}|j|ks>J t dd} d	d
 t| jd D | _t dd}t| j|dd}dd
 | jD }t|j|ksJ d S )Nr   Tr9   FrU   rV   Z
7_appendedr   c                 S   s   g | ]}|qS r   r   rY   r   r   r   r\      r]   z6test_wrap_pandas_append_non_string.<locals>.<listcomp>c                 S   s   g | ]}| d qS r^   r   r_   r   r   r   r\      r]   ra   rd   r   r   r   "test_wrap_pandas_append_non_string   s    



rf   c                   @   s   e Zd ZdS )
CustomDictN)rJ   rK   rL   r   r   r   r   rg     s   rg   c                 C   s   | j S r   r   r   r   r   r   	dict_type  s    rh   c                 C   s6   | d ur|  n| }t |ddd}t|t|s2J d S )NvalueToptional)r   rE   r+   )rh   valr   r   r   r   test_optional_dict_like
  s    rm   c                  C   s   d} t jt| d tg ddd W d    n1 s60    Y  t jt| d  tdhddd W d    n1 st0    Y  t jt| d tdddd W d    n1 s0    Y  d S )Nz5value must be a dict or dict_like \(i.e., a Mapping\)r(   ri   Trj   r!   )r-   r.   	TypeErrorr   r(   r   r   r   test_optional_dict_like_error  s    ,.ro   c                  C   s   t dd} | dksJ t dddd} | dks0J tjtdd t dd W d    n1 s^0    Y  tjtdd t dd W d    n1 s0    Y  tjtd	d t d
ddd W d    n1 s0    Y  d S )NrT   ri   rT   ZbananaZcherryoptionsvalue must be a stringr(   r      4z1value must be one of: 'apple', 'banana', 'cherry'date)r	   r-   r.   rn   r/   r   r   r   r   test_string  s    
((rw   c                  C   s   t dd} | dksJ t dddd} | dks0J t d ddd} | d u sJJ t d dddd} | d u sfJ tjtdd	 t d
ddd W d    n1 s0    Y  tjtdd	 t dddd W d    n1 s0    Y  d S )NrT   ri   rp   rq   Trj   )rk   rr   rs   r(   r   rt   )r	   r-   r.   rn   rv   r   r   r   test_optional_string,  s    
,rx   g      ?g?333333?y333333?        c                 C   s   | j S r   r   r   r   r   r   floatingA  s    rz   r   y333333?      ?z3.2c                 C   s   | j S r   r   r   r   r   r   not_floatingF  s    r{   c                 C   s   t t| dtsJ t t| dddts,J td dddd u sBJ t | ttjttjfrt t| dddtspJ td ddddd u sJ d S )Nrz   Trj   strictrk   r}   )rE   r   floatintr   integerZinexact)rz   r   r   r   test_float_likeK  s    r   c                 C   s8   t t t| d W d    n1 s*0    Y  d S )Nrz   )r-   r.   rn   r   )r{   r   r   r   test_not_float_likeT  s    r   g      @g      @c                 C   s   | j S r   r   r   r   r   r   r   Y  s    r   g	@y      @       @yffffff@        rT   y      ?        c                 C   s   | j S r   r   r   r   r   r   not_integer^  s    r   c                 C   s   t t| dtsJ t t| dddts,J td dddd u sBJ t | ttjfrt t| dddtsjJ td ddddd u sJ d S )Nr   Trj   rz   r|   r~   )rE   r   r   r   r   )r   r   r   r   test_int_likem  s    r   c                 C   s8   t t t| d W d    n1 s*0    Y  d S )Nr   )r-   r.   rn   r   )r   r   r   r   test_not_int_likev  s    r   )TFr   ry   r!    c                 C   s   | j S r   r   r   r   r   r   boolean{  s    r   c                 C   s   t t| dtsJ td dddd u s*J t | trNt t| dddtsJ n8tt t| ddd W d    n1 s|0    Y  d S )Nr   Trj   r|   )rE   r   boolr-   r.   rn   )r   r   r   r   test_bool_like  s    
r   c                   C   sB   t t$ ttddgt W d    n1 s40    Y  d S )NT)r-   r.   rn   r   r   arrayr   r   r   r   r   test_not_bool_like  s    r   )1collectionsr   Znumpyr   Zpandasr   r-   Zstatsmodels.tools.validationr   r   r   r   r   r   r	   Z'statsmodels.tools.validation.validationr
   Zfixturer   r   objectr    rM   rS   re   rf   dictrg   rh   rm   ro   rw   rx   rB   r   rz   r   r{   r   r   r   complexZtimedelta64r   r   r   r   r   r   r   r   r   r   <module>   s\   $

 $

"

	 

	

