o
    g 2                     @   s  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mZ d dlm  mZ d dlZd dlmZ e	jdG d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 )$    )datetimeN)Path)EmptyDataErrorPerformanceWarningz*ignore:can't resolve package:ImportWarningc                   @   s   e Zd Zejddd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dd Zdd ZdS )TestSAS7BDATT)autousec           
      C   s  |ddd| _ g | _ttdddgg| _dD ]j}tj| 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rz|jd d |f tj|jd d |f< qU| j| qd S )Niosasdata      )r      test_sas7bdat_z.csvi  Column4d)unitColumn12)dirpathr
   listrangetest_ixospathjoinpdread_csvr   to_timedeltashapeilocdtypenpint64astypefloat64append)
selfdatapathjfnamedfepocht1t2kcol r/   _/home/ubuntu/cloudmapper/venv/lib/python3.10/site-packages/pandas/tests/io/sas/test_sas7bdat.pysetup_method   s$   
(zTestSAS7BDAT.setup_methodc                 C   sZ   dD ](}| j | }| j| D ]}tj| jd| d}tj|dd}t	|| qqd S Nr   r   test	.sas7bdatutf-8encoding)
r
   r   r   r   r   r   r   read_sastmassert_frame_equalr%   r'   df0r-   r(   r)   r/   r/   r0   test_from_file*   s   
zTestSAS7BDAT.test_from_filec           
   
   C   s   dD ]^}| j | }| j| D ]Q}tj| jd| d}t|d}| }W d    n1 s0w   Y  t	|}t
j|dddd}| }	W d    n1 sRw   Y  tj|	|d	d
 qqd S )Nr3   r4   r5   rbsas7bdatTr6   formatiteratorr8   Fcheck_exact)r
   r   r   r   r   r   openreadr   BytesIOr   r9   r:   r;   )
r%   r'   r=   r-   r(   fbytsbufrdrr)   r/   r/   r0   test_from_buffer3   s"   



zTestSAS7BDAT.test_from_bufferc              
   C   s   dD ][}| j | }| j| D ]N}tj| 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 sWw   Y  qqd S )Nr3   r4   r5   Tr6   rC   r8   r   r         )r
   r   r   r   r   r   r   r9   rG   r:   r;   r   )r%   r'   r=   r-   r(   rL   r)   r/   r/   r0   test_from_iteratorB   s   


 zTestSAS7BDAT.test_from_iteratorc              	   C   s^   dD ]*}| j | }| j| D ]}ttj| jd| d}tj|dd}t	
|| qqd S r2   )r
   r   r   r   r   r   r   r   r9   r:   r;   r<   r/   r/   r0   test_path_pathlibN   s   
zTestSAS7BDAT.test_path_pathlibzpy.pathc              	   C   sj   ddl m} dD ]*}| j| }| j| D ]}|tj| jd| d}tj	|dd}t
|| qqd S )Nr   )localr3   r4   r5   r6   r7   )py.pathrS   r
   r   r   r   r   r   r   r9   r:   r;   )r%   	LocalPathr'   r=   r-   r(   r)   r/   r/   r0   test_path_localpathW   s   
z TestSAS7BDAT.test_path_localpathc                 C   s   dD ]H}| j | D ]@}dD ];}tj| jd| d}tj||dd}d}|D ]	}||jd 7 }q(W d    n1 s<w   Y  ||jksHJ qq	qd S )Nr3   )rO   rP   
      r4   r5   r6   )	chunksizer8   r   )	r   r   r   r   r   r   r9   r   	row_count)r%   r'   r-   rY   r(   rL   yxr/   r/   r0   test_iterator_loopc   s"   zTestSAS7BDAT.test_iterator_loopc                 C   s   | j d d }tj| jd| 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 sOw   Y  t	
|| d S )
Nr   r4   r5   r@   Tr6   rA      rN   )r   r   r   r   r   r   r9   rG   rZ   r:   r;   )r%   r-   r(   rL   d1d2r/   r/   r0   test_iterator_read_too_muchr   s   z(TestSAS7BDAT.test_iterator_read_too_muchN)__name__
__module____qualname__pytestfixturer1   markslowr>   rM   rQ   rR   td
skip_if_norV   r]   ra   r/   r/   r/   r0   r      s"    







r   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	} ||d	d
}|
 }|  t|j|jD ]\}}	||	 ks[J qOd S )Nr   r	   r
   ztest1.sas7bdatr6   r7   r   )SAS7BDATReaderF)convert_header_text)r   r9   columnsstrdecodeAttributeErrorr:   r;   pandas.io.sas.sas7bdatrk   rG   closezip)
r&   r(   df1df2r.   rk   rL   df3r\   r[   r/   r/   r0   test_encoding_options   s"   

rw   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.sas7bdatr6   r7   zproductsales.csvMONTHparse_dates)ACTUALPREDICTQUARTERYEARr   r9   r   r"   r    r#   r:   r;   )r&   r(   r)   r=   vnr/   r/   r0   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/   r0   
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.csvFrD   r   r   r/   r/   r0   test_airline   s   

r   c                 C   sp   | dddd}t |}| dddd}t j|g dd}|jd d df jd	|jd d df< t|| d S )
Nr   r	   r
   zdatetime.sas7bdatzdatetime.csv)Date1Date2DateTime
DateTimeHiTaiwry   rO   us)r   r9   r   r   dtroundr:   r;   r   r/   r/   r0   test_date_time   s   
(r   c                 C   sh   | dddd}t j|dd}|d }|d  }tj||dd	 |d
 }|d
  }tj||dd	 d S )Nr   r	   r
   zcars.sas7bdatlatin-1r7   WGTTrD   CYL)r   r9   r   r:   assert_series_equal)r&   r(   r)   resultexpectedr/   r/   r0   test_compact_numerical_values   s   r   c                 C   s~   | dddd}d }|st }t| tj|dd}W d    n1 s$w   Y  | dddd}tj|dd}t|| d S )Nr   r	   r
   zmany_columns.sas7bdatr   r7   zmany_columns.csv)r   r:   assert_produces_warningr   r9   r   r;   )r&   using_array_managerr(   expected_warningr)   r=   r/   r/   r0   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   r7   i1  )r   r9   len)r&   r(   r)   r/   r/   r0    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)re   raisesr   r   r9   )r&   r(   r/   r/   r0   test_zero_variables   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   )re   r   rp   r   r9   )r&   r(   msgr/   r/   r0   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 )Ni  )microsecond)timestr)

isinstancer   replaceintr   r   rn   dateutilparserparse)ts_tsr/   r/   r0   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-1r7   c                 S      t | tr	|  S | S Nr   rn   lstripr\   r/   r/   r0   <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rm   )r   r9   applymapr   r   _libstslibsnp_datetimeOutOfBoundsDatetimer   rp   apply	DataFramer   r:   r;   r&   r(   r)   r   r/   r/   r0   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   )r8   rY   c                 S   r   r   r   r   r/   r/   r0   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   r9   r   r   r   r   r   r   r   r   rp   r   reset_indexr$   r   r   r    
datetime64rs   r:   r;   )r&   	col_orderr(   resultsr)   r   r   r/   r/   r0   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.sas7bdatr6   r7   r   r   r   r   r   iQ> )datecoldatetimecol)r   r9   r   r   NaTr:   r;   r   r/   r/   r0   test_null_dateN  s   
r   )'r   r   r   pathlibr   dateutil.parserr   numpyr    re   pandas.errorsr   r   pandas.util._test_decoratorsutil_test_decoratorsri   pandasr   pandas._testing_testingr:   rg   filterwarningsr   rw   r   r   r   r   r   r   r   r   r   r   r   r   r   r/   r/   r/   r0   <module>   s6    
j
			
#.