o
    iT8                     @   s  d dl Z d dlmZ d dlZd dlZd dlmZ d dlZd dlZ	d dl
Z
d dlmZ d dlm  mZ d dlZd dlmZ e
jdd Ze
jdeddfd	dgfgd
dd Ze
jdG dd dZdd Zdd Zdd Zdd Z dd Z!e
j"dddg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,d1d2 Z-e
j"d3d4d5gd6d7 Z.d8d9 Z/d:d; Z0d<d= Z1dS )>    N)datetime)Path)EmptyDataErrorc                 C   s   | dddS )Niosasdata )datapathr   r   \/var/www/edux/Edux_v2/venv/lib/python3.10/site-packages/pandas/tests/io/sas/test_sas7bdat.pydirpath   s   r            )paramsc                 C   s   | j \}}tj|d| d}t|}tddd}tj|d dd}|| |d< tj|d dd}|| |d< t|j	d D ]"}	|j
d d |	f }
|
jtjkrb||	|j
d d |	f tj q@||fS )	Ntest_sas7bdat_z.csvi  r   Column4d)unitColumn12)paramospathjoinpdread_csvr   to_timedeltarangeshapeilocdtypenpint64isetitemastypefloat64)requestr   itest_ixfnamedfepocht1t2kcolr   r   r
   data_test_ix   s   

"r/   z*ignore:can't resolve package:ImportWarningc                   @   s   e Zd Zejjdd Zejjdd Zejjdd Zejjdd Z	e
d	ejjd
d Zejjejddejdedddd Zdd ZdS )TestSAS7BDATc                 C   sF   |\}}|D ]}t j|d| d}tj|dd}t|| qd S Ntest	.sas7bdatutf-8encoding)r   r   r   r   read_sastmassert_frame_equalselfr   r/   df0r'   r-   r(   r)   r   r   r
   test_from_file+   s   zTestSAS7BDAT.test_from_filec              	   C   s   |\}}|D ]P}t j|d| d}t|d}| }W d    n1 s'w   Y  t|}	tj|	dddd}
|
 }W d    n1 sIw   Y  t	j
||dd	 qd S )
Nr2   r3   rbsas7bdatTr4   formatiteratorr6   Fcheck_exact)r   r   r   openreadr   BytesIOr   r7   r8   r9   )r;   r   r/   r<   r'   r-   r(   fbytsbufrdrr)   r   r   r
   test_from_buffer3   s   


zTestSAS7BDAT.test_from_bufferc           	   	   C   s   |\}}|D ]M}t j|d| d}tj|ddd0}|d}t||jddd d f  |d}t||jdd	d d f  W d    n1 sNw   Y  qd S )
Nr2   r3   Tr4   rB   r6   r   r         )	r   r   r   r   r7   rF   r8   r9   r   )	r;   r   r/   r<   r'   r-   r(   rK   r)   r   r   r
   test_from_iteratorA   s   

 zTestSAS7BDAT.test_from_iteratorc                 C   sJ   |\}}|D ]}t tj|d| d}tj|dd}t|| qd S r1   )r   r   r   r   r   r7   r8   r9   r:   r   r   r
   test_path_pathlibL   s   zTestSAS7BDAT.test_path_pathlibzpy.pathc           	      C   sV   ddl m} |\}}|D ]}|tj|d| d}tj|dd}t|| qd S )Nr   )localr2   r3   r4   r5   )	py.pathrR   r   r   r   r   r7   r8   r9   )	r;   r   r/   	LocalPathr<   r'   r-   r(   r)   r   r   r
   test_path_localpathT   s   z TestSAS7BDAT.test_path_localpath	chunksize)rN   rO   
      r-   r      c                 C   st   t j|d| d}tj||dd}d}|D ]	}||jd 7 }qW d    n1 s,w   Y  ||jks8J d S )Nr2   r3   r4   )rV   r6   r   )r   r   r   r   r7   r   	row_count)r;   r   r-   rV   r(   rK   yxr   r   r
   test_iterator_loop_   s   zTestSAS7BDAT.test_iterator_loopc                 C   s   t j|d}tj|dddd}||jd }W d    n1 s#w   Y  tj|ddd}||jd }W d    n1 sCw   Y  t|| d S )Ntest1.sas7bdatr?   Tr4   r@      rM   )	r   r   r   r   r7   rF   rZ   r8   r9   )r;   r   r(   rK   d1d2r   r   r
   test_iterator_read_too_muchk   s   z(TestSAS7BDAT.test_iterator_read_too_muchN)__name__
__module____qualname__pytestmarkslowr=   rL   rP   rQ   td
skip_if_norU   parametrizer   r]   rb   r   r   r   r
   r0   )   s"    




		r0   c           
   	   C   s   | dddd}t |}t j|dd}|jD ]}z|| jd||< W q ty-   Y qw t|| ddlm	} t
||d	d
}| }W d    n1 sRw   Y  t|j|jD ]\}}	||	 ksjJ q^d S )Nr   r   r   r^   r4   r5   r   )SAS7BDATReaderF)convert_header_text)r   r7   columnsstrdecodeAttributeErrorr8   r9   pandas.io.sas.sas7bdatrl   
contextlibclosingrF   zip)
r	   r(   df1df2r.   rl   rK   df3r\   r[   r   r   r
   test_encoding_optionsx   s"   


ry   c                 C   sf   | dddd}t j|dd}| dddd}t j|dgd	}g d
}|| tj||< t|| d S )Nr   r   r   zproductsales.sas7bdatr4   r5   zproductsales.csvMONTHparse_dates)ACTUALPREDICTQUARTERYEARr   r7   r   r#   r    r$   r8   r9   )r	   r(   r)   r<   vnr   r   r
   test_productsales   s   r   c                 C   sL   | dddd}t |}| dddd}t |}|tj}t|| d S )Nr   r   r   ztest_12659.sas7bdatztest_12659.csvr   r	   r(   r)   r<   r   r   r
   
test_12659   s   

r   c                 C   sP   | dddd}t |}| dddd}t |}|tj}tj||dd d S )Nr   r   r   zairline.sas7bdatzairline.csvFrC   r   r   r   r   r
   test_airline   s   

r   c                 C   sl   | dddd}t |}| dddd}t j|g dd}|jd d df jd	||jd < t|| d S )
Nr   r   r   zdatetime.sas7bdatzdatetime.csv)Date1Date2DateTime
DateTimeHiTaiwr{   rN   us)	r   r7   r   r   dtroundrn   r8   r9   r   r   r   r
   test_date_time   s   
$r   columnWGTCYLc                 C   sD   | dddd}t j|dd}|| }||  }tj||dd d S )	Nr   r   r   zcars.sas7bdatlatin-1r5   TrC   )r   r7   r   r8   assert_series_equal)r	   r   r(   r)   resultexpectedr   r   r
   test_compact_numerical_values   s
   r   c                 C   sH   | dddd}t j|dd}| dddd}t j|dd}t|| d S )Nr   r   r   zmany_columns.sas7bdatr   r5   zmany_columns.csvr   r7   r   r8   r9   r   r   r   r
   test_many_columns   s
   r   c                 C   s0   | dddd}t j|dd}t|dksJ d S )Nr   r   r   zload_log.sas7bdatr   r5   i1  r   r7   lenr	   r(   r)   r   r   r
    test_inconsistent_number_of_rows   s   r   c                 C   sL   | dddd}t jtdd t| W d    d S 1 sw   Y  d S )Nr   r   r   zzero_variables.sas7bdatzNo columns to parse from filematch)rf   raisesr   r   r7   )r	   r(   r   r   r
   test_zero_variables   s   "r   c                 C   sD   | dddd}t |}t dddgjd d }t|| d S )	Nr   r   r   zzero_rows.sas7bdatag      ?)
char_field	num_fieldr   )r   r7   	DataFramer   r8   r9   )r	   r(   r   r   r   r   r
   test_zero_rows   s   
r   c                 C   sP   | dddd}d}t jt|d t| W d    d S 1 s!w   Y  d S )Nr   r   r   zcorrupt.sas7bdatz4'SAS7BDATReader' object has no attribute 'row_count'r   )rf   r   rq   r   r7   )r	   r(   msgr   r   r
   test_corrupt_read   s
   "r   c                 C   sf   t | tr| jtt| jdd d dS t | tr1tjj	| d}|jtt|jdd d dS | S )N  )microsecond)timestr)

isinstancer   replaceintr   r   ro   dateutilparserparse)ts_tsr   r   r
   round_datetime_to_ms   s   
 
 r   c                 C   s   | dddd}t j|dd}|dd }z|d	 jd
|d	< W n# t jjjjy3   |t	}Y n t
yD   |d	 t	|d	< Y nw t jddgddgtdddddddtdddddddgddgtdddtdddgdg dd}t|| d S )Nr   r   r   max_sas_date.sas7bdat
iso-8859-1r5   c                 S      t | tr	|  S | S Nr   ro   lstripr\   r   r   r
   <lambda>       z#test_max_sas_date.<locals>.<lambda>dt_as_dtr   maxnormal`MBA'           ;   X> i     r      qgFA    @@textdt_as_floatr   date_as_floatdate_as_datern   )r   r7   applymapr   r   _libstslibsnp_datetimeOutOfBoundsDatetimer   rq   applyr   r   r8   r9   r	   r(   r)   r   r   r   r
   test_max_sas_date   s,   
r   c                 C   sF  g d}| dddd}g }t j|dddD ]E}|d	d
 }z|d jd|d< W n# t jjjjy<   |t	}Y n t
yM   |d t	|d< Y nw |jddd || qt jdgdgtdddddddgdgtdddgd|dt jdgdgtdgdgtdgd|dg}t||D ]
\}}t|| qd S )Nr   r   r   r   r   r   r   )r6   rV   c                 S   r   r   r   r   r   r   r
   r   #  r   z,test_max_sas_date_iterator.<locals>.<lambda>r   r   T)inplacedropr   r   r   r   r   r   r   r   r   r   r   r   z2019-08-01 23:59:59.999r   z
2019-08-01)r   r7   r   r   r   r   r   r   r   r   rq   r   reset_indexappendr   r   r    
datetime64ru   r8   r9   )r	   	col_orderr(   resultsr)   r   r   r   r   r
   test_max_sas_date_iterator  sH   


r   c                 C   s`   | dddd}t j|dd}t tddd	t jgtddd	d
dddt jgd}t|| d S )Nr   r   r   zdates_null.sas7bdatr4   r5   r   r   r   r   r   iQ> )datecoldatetimecol)r   r7   r   r   NaTr8   r9   r   r   r   r
   test_null_dateG  s   
r   c                 C   s,   | dddd}t |}t|dksJ d S )Nr   r   r   ztest_meta2_page.sas7bdatr   r   r   r   r   r
   test_meta2_pageZ  s   
r   	test_filetest2.sas7bdatztest3.sas7bdatc                    sh   t j  fdd}|t d| tjtdd t| ddd| W d	   d	S 1 s-w   Y  d	S )
z@Errors in RLE/RDC decompression should propagate the same error.c                    s   t | tr	td | |S )NzTest exception)r   r   	Exception)sizer   orig_np_zerosr   r
   _patched_zerosf  s   

zEtest_exception_propagation_rdc_rle_decompress.<locals>._patched_zeroszerosz^Test exception$r   r   r   r   N)r    r   setattrrf   r   r   r   r7   )r	   monkeypatchr   r   r   r   r
   -test_exception_propagation_rdc_rle_decompressa  s   "r   c                 C   s   t |ddddd}t| }W d   n1 sw   Y  d}d}d	}|||| < | d }|| tjtd
d t| W d   dS 1 sMw   Y  dS )zMIllegal control byte in RLE decompressor should raise the correct ValueError.r   r   r   r   r>   Nr   i   i  zunknown control byter   )	rE   	bytearrayrF   write_bytesrf   r   
ValueErrorr   r7   )tmp_pathr	   rH   r   invalid_control_bytepage_offsetcontrol_byte_postmp_filer   r   r
   )test_exception_propagation_rle_decompresst  s   
"r   c                 C   sH   | dddd}t j|dd}| dddd}t j|dd	}t|| d S )
Nr   r   r   z0x40controlbyte.sas7bdatasciir5   z0x40controlbyte.csvobject)r   r   r   r   r   r
   test_0x40_control_byte  s
   r   c                 C   s2   | dddd}t tj|dd}|jdksJ d S )Nr   r   r   z0x00controlbyte.sas7bdat.bz2*  )rV   )r   r_   )nextr   r7   r   r   r   r   r
   test_0x00_control_byte  s   r  )2rs   r   r   r   pathlibr   dateutil.parserr   numpyr    rf   pandas.errorsr   pandas.util._test_decoratorsutil_test_decoratorsri   pandasr   pandas._testing_testingr8   fixturer   r   r/   rg   filterwarningsr0   ry   r   r   r   r   rk   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r   r   r   r
   <module>   sP    


N
		
	
#.
	