U
    sVcw$                     @   s   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
 d dlmZmZmZ d dlmZ G dd deZejdeeegdd	 ZdS )
    N)BooleanArray)
kleene_and	kleene_or
kleene_xor)BaseOpsUtilc                   @   s  e Zd Zdd Zdd Zdd Zejdde	
d	d
d
dedgdd Zdd Zdd Zejddd
gdd Zdd Zejde	jdddgfddddgfeddddgfddddgfeddddgfgdd Zdd Zejde	jdddgfddddgfddddgfeddddgfeddddgfgdd  Zd!d" Zejde	jdddgfddddgfeddddgfeddddgfgd#d$ Zejddde	jdddgd% gd&d' ZdS )(TestLogicalOpsc                 C   sV   t jddd gdd}t||}t|d|td t|d|td d S NTFbooleanZdtype)pdarraygetattrtmassert_extension_array_equalnpbool_)selfall_logical_operatorsaop r   L/tmp/pip-unpacked-wheel-xj8nt62q/pandas/tests/arrays/boolean/test_logical.pytest_numpy_scalars_ok   s    
z$TestLogicalOps.test_numpy_scalars_okc                    sd   | d}d|kr|n|d }ztt|}W n2 tk
r^   tt|dd    fdd}Y nX |S )N_xor   c                    s
    || S )Nr   )xyZropr   r   <lambda>!       z1TestLogicalOps.get_op_from_name.<locals>.<lambda>)stripr   operatorAttributeError)r   op_nameZshort_opnamer   r   r   r   get_op_from_name   s    
zTestLogicalOps.get_op_from_namec                 C   sf   t jg dd}|}t||d}t|| t||d}t|| t||t j}t|| d S )Nr	   r
   TF)r   r   r   r   r   NA)r   r   r   r$   resultr   r   r   test_empty_ok%   s    zTestLogicalOps.test_empty_okotherr   i  r         c                 C   sV   t ddg}||k}t ddg}t|| ||k}t ddg}t|| d S )NTFr   r   r   r   )r   r)   Zarrr'   expectedr   r   r   test_eq_mismatched_type1   s    z&TestLogicalOps.test_eq_mismatched_typec              	   C   s   |}t jddd gdd}d}tjt|d t||ddg W 5 Q R X tjt|d t||tddg W 5 Q R X tjt|d" t||t jddgdd W 5 Q R X d S )NTFr	   r
   zLengths must matchmatch)r   r   pytestraises
ValueErrorr   r   r   r   r$   r   msgr   r   r   #test_logical_length_mismatch_raises?   s    "z2TestLogicalOps.test_logical_length_mismatch_raisesc              	   C   sJ   |}t jddd gdd}d}tjt|d t||tj W 5 Q R X d S )NTFr	   r
   zGot float insteadr/   )r   r   r1   r2   	TypeErrorr   r   nanr4   r   r   r   test_logical_nan_raisesM   s
    z&TestLogicalOps.test_logical_nan_raisesc              	   C   sH   t jddgdd}tjttt|jd t||| W 5 Q R X d S )NTFr	   r
   r/   )	r   r   r1   r2   r7   strtype__name__r   )r   r)   r   r   r   r   r    test_non_bool_or_na_other_raisesU   s    z/TestLogicalOps.test_non_bool_or_na_other_raisesc              
   C   s   t jdgd dgd  d gd  dd}t jddd gd dd}||B }t jdddddd dd d g	dd}t|| ||B }t|| t|t jdgd dgd  d gd  dd t|t jddd gd dd d S NT   Fr	   r
   r,   r   r   br'   r-   r   r   r   test_kleene_or[   s$    (  & zTestLogicalOps.test_kleene_orzother, expectedTNFc                 C   sj   t jddd gdd}||B }t j|dd}t|| ||B }t|| t|t jddd gdd d S r   r,   r   r)   r-   r   r'   r   r   r   test_kleene_or_scalarp   s     z$TestLogicalOps.test_kleene_or_scalarc              
   C   s   t jdgd dgd  d gd  dd}t jddd gd dd}||@ }t jddd dddd dd g	dd}t|| ||@ }t|| t|t jdgd dgd  d gd  dd t|t jddd gd dd d S r>   r,   r@   r   r   r   test_kleene_and   s$    (  & zTestLogicalOps.test_kleene_andc                 C   sj   t jddd gdd}||@ }t j|dd}t|| ||@ }t|| t|t jddd gdd d S r   r,   rC   r   r   r   test_kleene_and_scalar   s     z%TestLogicalOps.test_kleene_and_scalarc              
   C   s   t jdgd dgd  d gd  dd}t jddd gd dd}||A }t jddd ddd d d d g	dd}t|| ||A }t|| t|t jdgd dgd  d gd  dd t|t jddd gd dd d S r>   r,   r@   r   r   r   test_kleene_xor   s$    (  & zTestLogicalOps.test_kleene_xorc                 C   sj   t jddd gdd}||A }t j|dd}t|| ||A }t|| t|t jddd gdd d S r   r,   rC   r   r   r   test_kleene_xor_scalar   s    
 z%TestLogicalOps.test_kleene_xor_scalarr?   c                 C   s   t jtdddddddddg	tdgd dddg }t jdgd dgd  d gd  dd}t|tr|t j|dd}t|||}t|||}t	|| t|trd|j
|j< d|j
|j< t|||}t|||}t	|| d S )NTF   r?   r	   r
   )r   Zarraysr   r   r   
isinstancelistr   r   r   _dataZ_mask)r   r)   r   r   rA   r'   r-   r   r   r   test_no_masked_assumptions   s     (

z)TestLogicalOps.test_no_masked_assumptions)r<   
__module____qualname__r   r%   r(   r1   markparametrizer   Z	Timestampr   Ztimedelta64r.   r6   r9   r=   rB   r&   r   rD   rE   rF   rG   rH   rM   r   r   r   r   r      s\    





	
 r   	operationc              	   C   s<   d}t jt|d  | ddtdtd W 5 Q R X d S )Nz2Either `left` or `right` need to be a np\.ndarray.r/   Tr   )r1   r2   r7   r   zeros)rR   r5   r   r   r   test_error_both_scalar   s    rT   )r"   Znumpyr   r1   Zpandasr   Zpandas._testingZ_testingr   Zpandas.arraysr   Zpandas.core.ops.mask_opsr   r   r   Zpandas.tests.extension.baser   r   rP   rQ   rT   r   r   r   r   <module>   s    i