U
    k/e]                  *   @   s
  d dl Z d dlZd dlZd dlZd dlZd dlZd dlZd dlZ	d dl
mZ d dlmZ ejdddgdde	jfdde	jfdde	jfd	de	jfde	 e	jfde	 e	jfde	 e	jfde	 e	jfde	 e	jfde	 e	jfde	 e	jfde	  e	j!fd
de	j"fe#d
e	# e	j$fd
e	% e	j&fe'dde	j(fe'dde	j)fdde	j*fdde	j+fde	, e	j-fde	. e	j/fde	0de	j1fdddgde	j2fddddge	3e	 e	j4fdddddge	5e	 de	j6fe j78 de	j9fe j78 e	: e	j;fe j < de	j=fe j < > j?d de	@de	jAfe j < > de	jBfe jCddde	jDfe	Edd	dgde	jFfdddgdde	jGfddge	He	I e	 e	jJfg"dd ZKdd  ZLd!d" ZMd#d$ ZNd%d& ZOd'd( ZPd)d* ZQd+d, ZRd-d. ZSd/d0 ZTd1d2 ZUd3d4 ZVd5d6 ZWejdd7gde	@dfd8e	@dfde	@dfde	@d9fd8e	@d9fde	@d9fde	Xd:fd;e	Xd:fde	Xd:fde	Xd<fd;e	Xd<fde	Xd<fde	Y fd8e	Y fde	Y fde	: fd;e	: fde	: fde	Zd<fd;e	Zd<fde	Zd<fde	[d<fd;e	[d<fde	[d<fd=e	\ fde	\ fge	j]d>d?d@Z^dAdB Z_ejj`ejadCkoteb  dDdEdFdG ZcdHdI ZddJdK ZeejjfdLdM ZgejjhdNdO ZidPdQ ZjdRdS ZkdTdU ZlejjfdVdW ZmejjhdXdY ZndZd[ Zoejdd\d]gejd^e	I e	j*fe	, e	j-fgd_d` Zpejddadbgejd^e	0 e	j+fe	. e	j/fgdcdd Zqdedf Zrejdge	5e	I e	j2fe	3e	I e	j4fgdhdi Zsdjdk Ztejjfdldm Zudndo Zvdpdq Zwdrds Zxdtdu Zydvdw Zzdxdy Z{dzd{ Z|dS )|    N)utilvaluetyklassFT   g      ?1.123z*1.1234567890123456789012345678901234567890strings   bytesZlargestrings
   largebytess   abc            )microseconds)daysi)abr   r   r   r   c                 C   s.  t j| |d}|  |jdd t||s0t| | ks@t|t j| |dksVt|| ksbt|dksntt|t|kst|jdkst|d kstt jd |jd}|jdkst| d kst|t j| |dkstt	
t	|}||stt|}| d k	st~| d ks*td S )NtypeTfullelseF)pascalarvalidate
isinstanceAssertionErroras_pyhashis_validr   pickleloadsdumpsequalsweakrefref)r   r   r   r   restoredwr r*   >/tmp/pip-unpacked-wheel-seu8352k/pyarrow/tests/test_scalars.pytest_basics    s*    (
r,   c               	   C   sL   t jtdt dd} |   tjtdd | jdd W 5 Q R X d S )N   Fsafez(string scalar contains invalid UTF8 datamatchTr   )	pccastr   r   r	   r   pytestraises
ValueErrorr   r*   r*   r+   test_invalid_scalard   s    r8   c                	   C   s"   t t t  W 5 Q R X d S )N)r4   r5   RuntimeErrorr   Z
NullScalarr*   r*   r*   r+   test_null_singletonl   s    r:   c                  C   s   t d } | t jkst|  d ks(t| dks4t| t d kdksJt| dkdksZtt jt jksjtt jdksxtt d d g}|D ]"}|t jkst| d kstqtt| }|	| stt
| }| d k	st~ | d k	std S )N	somethingTr   F)r   )r   r   ZNAr   r   arrayr"   r#   r$   r%   r&   r'   )nullarrvr(   r)   r*   r*   r+   
test_nullsq   s$    

r@   c                  C   sD   t td} t| |  }t|}t|ts0tt|dks@td S )Ni  )listranger   r<   setr   r   len)valuesr>   Zset_from_arrayr*   r*   r+   test_hashing   s
    rF   c                  C   s^   t ddiddigddid gg} t ddid gg}t| d }t|d }||ksZtd S )Nr   r         r   r   )r   r<   r    r   )r   r   Zhash1Zhash2r*   r*   r+   test_hashing_struct_scalar   s
    "rI   c                  C   s   t d} t d}t| t js$tt|t js4tt|dksDtt|dksTtt| dksdtt| dkstt| dkst|  dkstd S )NFTz<pyarrow.BooleanScalar: True>Truez<pyarrow.BooleanScalar: False>False)r   r   r   BooleanScalarr   reprstrr   )falsetruer*   r*   r+   	test_bool   s    

rQ   c               	   C   s  t d} t| t jstt| dks*tt| dks:t|  dksJtt	t
 t jddd W 5 Q R X t d} t| t jstt| dkstt| d	kst|  dkstt jtd
dd} t| t jstt| dkstt| dkst|  d
kstd S )Nr   z<pyarrow.Int64Scalar: 1>1r   uint8r         ?z<pyarrow.DoubleScalar: 1.5>z1.5g      ?float16z<pyarrow.HalfFloatScalar: 0.5>z0.5)r   r   r   Int64Scalarr   rM   rN   r   r4   r5   OverflowErrorDoubleScalarnprU   HalfFloatScalarr7   r*   r*   r+   test_numerics   s"    

r[   c               	   C   s   t d} t| }t|tjs$t| | ks4t|jt	ddksJtt d} t
tj tj| tj	dddd W 5 Q R X t
tj tj| tj	dddd W 5 Q R X tj| tj	dddd}t|tjst| | kstd S )Nr   r   r
   1.1234Zscaler   r   )decimalDecimalr   r   r   Decimal128Scalarr   r   r   
decimal128r4   r5   ArrowInvalidr?   r   r*   r*   r+   test_decimal128   s    


""rd   c               	   C   s   t d} t| }t|tjs$t| | ks4t|jt	ddksJtt d} t
tj tj| tj	dddd W 5 Q R X t
tj tj| tj	dddd W 5 Q R X tj| tj	dddd}t|tjst| | kstd S )	Nz,1234567890123456789012345678901234567890.123+   r
   r\   r   r]   r   r   )r^   r_   r   r   r   Decimal256Scalarr   r   r   Z
decimal256r4   r5   rb   rc   r*   r*   r+   test_decimal256   s    


""rg   c                  C   sb   t ddd} t ddd}t t fD ]0}| |fD ]"}tj||d}| |ks8tq8q,d S )Ni  r   i  r   )datetimedater   date32date64r   r   r   )d1Zd2r   dr   r*   r*   r+   	test_date   s    rn   c                  C   s`   t jtdddt dd} tddd}t  t  fD ]}| |}| |ks<t	q<d S )Ni  r   usr   )
r   r   rh   	timestampri   rj   rk   r3   r   r   )r   expectedr   resultr*   r*   r+   test_date_cast   s
    
rs   c                  C   sv   t dd} t dd}tdtdtdtdg}|D ]0}| |fD ]"}tj||d}| |ksLtqLq@d S )	N   r      r   msro   nsr   )rh   timer   time32time64r   r   r   )t1t2typesr   tr   r*   r*   r+   test_time_from_datetime_time   s    $r   	time_typei   @rv   ro   l            rw   )r   r   )r   c                 C   s,   t j| |d}|jdd |j| ks(td S )Nr   Tr   )r   r   r   r   r   )r   r   Ztime_scalarr*   r*   r+   test_temporal_values
  s    r   c               	   C   s   t jddd} | dt jdddks*t| dt jdddksFt| dt jdddksbttt t dd	 W 5 Q R X d S )
Nr   int8r   int64uint32r	   5fooint32)r   r   r3   r   r4   r5   r6   )valr*   r*   r+   	test_cast,  s    r   win32z-Timezone database is not installed on Windows)reasonc               	   C   sd   t d dd l} tjdddddd| jd}tj|tjdddd	}|t	 td
ks`t
d S )Npytzr     r   tzinforw   UTCtzr   z2000-01-01 00:00:00.000000000Z)r4   importorskipr   rh   utcr   r   rp   r3   r	   r   )r   dttsr*   r*   r+   test_cast_timestamp_to_string5  s
    
r   c               	   C   sl   t jdt  d} | jt  dd}t jdt  d}||ksBttt j | t   W 5 Q R X d S )NrT   r   Fr.   r   )	r   r   float64r3   r   r   r4   r5   rb   )Zfloat_scalarunsafe_castexpected_unsafe_castr*   r*   r+   test_cast_float_to_int@  s    r   c               	   C   sl   t jdt  d} | jt  dd}t jdt  d}||ksBttt j | t   W 5 Q R X d S )Nl   r   Fr.   g      PC)	r   r   r   r3   r   r   r4   r5   rb   )Z
int_scalarr   r   r*   r*   r+   test_cast_int_to_floatJ  s    r   c            
      C   s  dd l } | jdddj}ddddg}t|D ]\}}d	|}tj||}| 	d}|d 
 |ksnt|d jd
|  |jkstd}tj||d}	d	|}tjj|||	d}| 	dd|}|d 
 |kst|d jd
|  |jks,tq,d S )Nr   z2000-01-01 12:34:56
   )Zperiodsrw   ro   rv   r   zdatetime64[{}]  America/New_Yorkr   r   r   )pandasZ
date_rangerE   	enumerateformatr   Arrayfrom_pandasastypeZ	Timestampr   r   r   rp   Ztz_localizeZ
tz_convert)
pdr>   unitsiunitdtype	arrow_arrrq   r   Z
arrow_typer*   r*   r+   test_timestampT  s(    



r   c               	   C   s   t d dd l} d}tjd|d}tjd|d}| |}tjdd	d	d	|d
}||}|	 }||ksnt
|jdks|t
|jdkst
tjd|d}t t |	  W 5 Q R X d S )Nr   r   r   rw   r   l   $=3ir   r   r   )r   r   i         $=3i)r4   r   r   r   rp   r   timezonerh   fromutcr   r   yearhourr5   r6   )r   r   r   r   r   rq   rr   r*   r*   r+   test_timestamp_nanos_nopandasp  s    


r   c                  C   s   t d dd l} tjdddddd| jdtjddddd	d	d
| jdtjdddddd| jdg}|D ],}tj|tjdddd}| |ksdt	qdd S )Nr   r   r   r   i'           ;   i?B i  ro   r   r   r   )
r4   r   r   rh   r   r   r   rp   r   r   )r   Z
timestampsr   r   r*   r*   r+   test_timestamp_no_overflow  s    
r   c                  C   s:   t d tdgtjddd} t| d dks6td S )Nr   r   r   z+02:00r   z1970-01-01 02:00:00+02:00)r4   r   r   r<   rp   rN   r   )r>   r*   r*   r+   !test_timestamp_fixed_offset_print  s    
r   c                  C   s   t jddgdd} dddg}t|D ]\}}d|}t| |}tjd	d
}t|d 	 tjsjt
|d 	 |ks~t
|d jd|d   | d ks$t
q$d S )Nr        qaztimedelta64[ns]r   ro   rv   r   ztimedelta64[{}]  secondsr   r       eA)rY   r<   r   r   r   r   rh   	timedeltar   r   r   r   total_seconds)r>   r   r   r   r   r   rq   r*   r*   r+   test_duration  s    


r   c                  C   s   dd l } tjddgtdd}| d}t|d  | jsBt|d  |ksVt|d j|jksjttjdgtdd}|d  | jdddkstd S )	Nr   r   rw   r   z1 hourr   r   )r   )	r   r   r<   durationZ	Timedeltar   r   r   r   )r   r>   rq   r*   r*   r+   test_duration_nanos_pandas  s    
r   c               	   C   s   t ddgt d} tjdd}t| d  tjs:t| d  |ksNt| d j|	 d kshtt jdgt dd	} t
t | d   W 5 Q R X d S )
Nr   r   rw   r   r   r   r   r   r   )r   r<   r   rh   r   r   r   r   r   r   r4   r5   r6   )r>   rq   r*   r*   r+   test_duration_nanos_nopandas  s    r   c                  C   s^   t dddg} t | g}t|d  t js4t|d  | ksHt|d j| ksZtd S )Nii  ir   )r   MonthDayNanor<   r   r   r   r   )Ztripler>   r*   r*   r+   test_month_day_nano_interval  s
    r   r   u   mañana)r   
scalar_typc                 C   s   t j| |d}t||st| | ks,t| dks<tt| t|ksPtt|t| ksdt| }t|t js|t|	 | 
 kstd S )Nr   r;   )r   r   r   r   r   rM   rN   	as_bufferBuffer
to_pybytesencoder   r   r   r   bufr*   r*   r+   test_string  s    r   s   foos   barc                 C   s   t j| |d}t||st| | ks,tt|t| ks@tt| t|ksTt| | ksdt|dkspt| }t|t jst|	 | kstd S )Nr   s   xxxxx)
r   r   r   r   r   rN   rM   r   r   r   r   r*   r*   r+   test_binary  s    r   c               	   C   sd   t jdt dd} t| t js$t|  dks4ttt j	 t jdt dd W 5 Q R X d S )Ns   foofr   r   s   foof5)
r   r   binaryr   FixedSizeBinaryScalarr   r   r4   r5   rb   r7   r*   r*   r+   test_fixed_size_binary  s
    r   )r   r   c              	   C   s  dd g}t j|| d}|j| ks$tt|dks4tt|jt jsFt|j |ksXtt||sftt	|t	|kszt|
 |kst|d 
 dkst|d 
 d kst|d |d kst|d |d ksttt |d  W 5 Q R X tt |d  W 5 Q R X d S )	Nr   r   r   r   r   r   r   )r   r   r   r   rD   r   rE   r   	to_pylistrM   r   r4   r5   
IndexError)r   r   r?   r   r*   r*   r+   	test_list   s"    r   c                  C   sP   t tjdddgt d} | jt t  ks6t|  dddgksLtd S )Nr   r   r
   r   )	r   r   rY   r<   r   r   list_r   r   r7   r*   r*   r+   test_list_from_numpy  s    r   c                  C   s  dd l } t| dddg}| dddgks4ttjdfdtjgtt	 fdtjgtt
 fdtjgtt	dfd	tjgtt ftd
tjgttddfg}|D ]@\}}tttf tj||d W 5 Q R X tj||d	d}qd S )Nr   r   r   r
   r=   r	   s   stringrG   T0r   r   )r   r   )r   r   r   ZSeriesr   r   rY   nanr   r   utf8Zbool_r^   r_   ra   r4   r5   r6   	TypeError)r   r   ZcasesZcaser   r*   r*   r+   test_list_from_pandas  s     r   c               	   C   s   t jdd dgt t  dd} t| dks0tt| t js@tt| dksPt| 	 dd dgksft| d 	 dkszt| d 	 d kst| d | d kstt
t | d  W 5 Q R X t
t | d  W 5 Q R X d S )	Nr   r
   r   z+<pyarrow.FixedSizeListScalar: [1, None, 3]>r   r   r   )r   r   r   r   rD   r   r   FixedSizeListScalarrM   r   r4   r5   r   r7   r*   r*   r+   test_fixed_size_list6  s     r   c               	   C   s  t t dt  t dt  g} ddd}t j|| d}t|t|   krbddgkshn tt|	 t jdt  dt jdt  dgkstt|
 dt jdt  dfdt jdt  dfgkstd|kstd|kstd|kstd|ks
t| |kstt|t|ks2tt| t|ksLtt|dks^tt|d t jsttt|d t jst|d  dkst|d  dksttt |d	  W 5 Q R X t jd | d}t|t|   kr
ddgksn t| d ks"td|ks0td|ks>tt|d t jsTtt|d t jsjt|d jd
ks~t|d jd
kst|d  d kst|d  d kstd S )Nxyr   g      @)r   r   r   zr   znon-existentF)r   structfieldint16float32r   rA   keysr   rE   itemsr   rM   rD   r   Int16ScalarFloatScalarr4   r5   KeyErrorr!   )r   r?   r   r*   r*   r+   test_structF  sP    
*



.r   c               	   C   s  t t dt  t dt  t dt  g} t jdddg| d}t|t|   krndddgkstn t	t
|dkst	||kst	t| dt dt  fdt d	t  fdt dt  fgkst	d|kst	d|kst	d
|kst	d|kst	tt |d  W 5 Q R X t|d t js@t	|d  d	ksVt	t|d t jslt	|d  dkst	t|d t jst	|d  d	kst	t|d t jst	|d  dkst	dt|kst	tjtdd |  W 5 Q R X d S )Nr   r   )r   r   )r          @)r   r
   r   r
   r   r   r   r   r   zpyarrow.StructScalarzduplicate field namesr0   )r   r   r   r   r   r   r   rA   r   r   rD   r   r4   r5   r   r   r   r   r   rV   rM   r6   )r   r   r*   r*   r+   test_struct_duplicate_fieldsu  s>    ,

r   c               	   C   sz  t t  t  } ddg}t j|| d}t|dks:tt|t jsJtt|j	t j
s\tt|dkslt|j	 dddd	ddgkstt||D ]\}}||kstq| |kst|d t jd	t  dt jdt  dfkst|d
 |d kst|d |d ksttt |d  W 5 Q R X tt |d  W 5 Q R X tt|}||svtd S )Nr   r   r   r   z)<pyarrow.MapScalar: [('a', 1), ('b', 2)]>r   r   )keyr   r   r   r   r   r   )r   map_r	   r   r   rD   r   r   	MapScalarrE   r   rM   r   zipr   r4   r5   r   r"   r#   r$   r%   )r   r?   r   r   jr(   r*   r*   r+   test_map  s4    

r   c            	      C   s   t dd dddd g} t dddg}t j| |}dd dddd g}| |ksTttt| |D ]t\}\}}|| }| |kst|j	 |kst|j
|st|j|sttt|}||sbtqbd S )Nr   r   r   r   barZbaz)r   r<   ZDictionaryArrayfrom_arraysr   r   r   r   r   r   indexr%   
dictionaryr"   r#   r$   )	indicesr   r>   rq   r   r   r?   r   r(   r*   r*   r+   test_dictionary  s    r   c               	   C   s   dddddg} dddd dg}t j| |}|d }t|t jsBtt|jt jsTt|jt |d kslt|	 dks|t|d }t|jt jst|	 d kstt
t" t dt t  t   W 5 Q R X d S )	Nr
   r   r   r   r   r   r   r   )r   ZRunEndEncodedArrayr   r   ZRunEndEncodedScalarr   r   rV   r<   r   r4   r5   NotImplementedErrorr   Zrun_end_encodedr   )Zrun_endsrE   r>   r   r*   r*   r+   test_run_end_encoded  s    r   c               
   C   s  t jt jddddgt  dt ddddgt ddd	d
gg} | D ]h}|jdd t|t jsht|j	
| j	szt|jdksttt j tt| W 5 Q R X qH| d jdkst| d  dkst| d jdkst| d  dkst| d jdkst| d  d	ks(t| d	 jdks<t| d	  d
ksRtt jjt jdddddddgddt jddddddd	gddt jddddgddt jddd	gddgd} | D ]p}|jdd t|t jst|j	
| j	st|jdksttt j tt| W 5 Q R X q| d jdksDt| d  dksZt| d jdksnt| d  d	kstd S )Nr   r   r   r   r   crm   r   r
   r   Tr   r   r      a   b   c   dr   r   )r}   Zvalue_offsetschildrenr   )r   Z
UnionArrayZfrom_sparser<   r   r   r   ZUnionScalarr   r   r%   r!   r4   r5   ZArrowNotImplementedErrorr"   r#   r$   Z	type_coder   Z
from_dense)r>   r   r*   r*   r+   
test_union  sN    r  )}rh   r^   r"   r4   sysr&   ZnumpyrY   Zpyarrowr   Zpyarrow.computeZcomputer2   Zpyarrow.testsr   markZparametrizerL   rV   r   Z
Int8ScalarrS   ZUInt8Scalarr   r   Zuint16ZUInt16Scalarr   ZInt32Scalarr   ZUInt32Scalarr   Zuint64ZUInt64ScalarrX   rU   rZ   r   r   r_   r`   rf   ZStringScalarZBinaryScalarZlarge_stringZLargeStringScalarZlarge_binaryZLargeBinaryScalarr   r   Z
ListScalarZ
large_listZLargeListScalarr   r   ri   todayZDate32Scalarrk   ZDate64ScalarnowZTimestampScalarrx   replacery   ZTime32ScalarZTime64Scalarr   ZDurationScalarr   ZMonthDayNanoIntervalScalarZStructScalarr   r	   r   r,   r8   r:   r@   rF   rI   rQ   r[   rd   rg   rn   rs   r   rz   rj   rp   r   Zmonth_day_nano_intervalZDataTyper   r   ZskipifplatformZwindows_has_tzdatar   r   r   r   r   Znopandasr   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r   r  r*   r*   r*   r+   <module>   s  




 

 '
			







	
	





	

/+"