ó
šxŠ\c           @   sš   d  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
 m Z m Z m Z e d e f d „  ƒ  Yƒ Z d e
 f d „  ƒ  YZ d S(   s  Rudimentary Apache Arrow-backed ExtensionArray.

At the moment, just a boolean array / type is implemented.
Eventually, we'll want to parametrize the type and support
multiple dtypes. Not all methods are implemented yet, and the
current implementation is not efficient.
iÿÿÿÿN(   t   ExtensionArrayt   ExtensionDtypet   register_extension_dtypet   taket   ArrowBoolDtypec           B   sM   e  Z e j Z d  Z d Z e j Z	 e
 d „  ƒ Z e
 d „  ƒ Z d „  Z RS(   t   bt
   arrow_boolc         C   s2   | |  j  k r |  ƒ  St d j |  | ƒ ƒ ‚ d  S(   Ns!   Cannot construct a '{}' from '{}'(   t   namet	   TypeErrort   format(   t   clst   string(    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt   construct_from_string   s    	c         C   s   t  S(   N(   t   ArrowBoolArray(   R
   (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt   construct_array_type#   s    c         C   s   t  S(   N(   t   True(   t   self(    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt   _is_boolean'   s    (   t   __name__t
   __module__t   npt   bool_t   typet   kindR   t   pat   NULLt   na_valuet   classmethodR   R   R   (    (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyR      s   		R   c           B   sé   e  Z d  „  Z d „  Z e d „  ƒ Z e d „  ƒ Z e d e d „ ƒ Z	 d „  Z
 d „  Z e d „ Z e d „  ƒ Z e d	 „  ƒ Z d
 „  Z e d d „ Z e d „ Z d „  Z d „  Z e d „ Z d d d „ Z d d d „ Z RS(   c         C   sO   t  | t j ƒ s t ‚ n  | j t j ƒ  k s6 t ‚ | |  _ t ƒ  |  _	 d  S(   N(
   t
   isinstanceR   t   ChunkedArrayt
   ValueErrorR   R   t   AssertionErrort   _dataR   t   _dtype(   R   t   values(    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt   __init__,   s
    		c         C   s   d j  t |  j ƒ ƒ S(   Ns   ArrowBoolArray({})(   R	   t   reprR    (   R   (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt   __repr__4   s    c         C   s.   t  j t  j t j | ƒ ƒ g ƒ } |  | ƒ S(   N(   R   t   chunked_arrayt   arrayR   t   asarray(   R
   R"   t   arr(    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt   from_scalars7   s    $c         C   s.   t  | t j ƒ s t ‚ |  t j | g ƒ ƒ S(   N(   R   R   t   ArrayR   R&   (   R
   R)   (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt
   from_array<   s    c         C   s   |  j  | ƒ S(   N(   R*   (   R
   t   scalarst   dtypet   copy(    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt   _from_sequenceA   s    c         C   sP   t  j j j | ƒ r& |  j j ƒ  | S|  j j ƒ  | } t |  ƒ j | ƒ Sd  S(   N(   t   pdt   apit   typest	   is_scalarR    t	   to_pandasR   R*   (   R   t   itemt   vals(    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt   __getitem__E   s    c         C   s   t  |  j ƒ S(   N(   t   lenR    (   R   (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt   __len__L   s    c         C   sT   t  | t |  j ƒ ƒ r; | |  j k r; | r7 |  j ƒ  S|  St t |  ƒ j | | ƒ S(   N(   R   R   R.   R/   t   superR   t   astype(   R   R.   R/   (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyR<   O   s
    '
c         C   s   |  j  S(   N(   R!   (   R   (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyR.   W   s    c         C   s   t  d „  |  j j Dƒ ƒ S(   Nc         s   s7   |  ]- } | j  ƒ  D] } | d  k	 r | j Vq q d  S(   N(   t   bufferst   Nonet   size(   t   .0t   chunkt   x(    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pys	   <genexpr>]   s    (   t   sumR    t   chunks(   R   (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt   nbytes[   s    c         C   s+   t  j |  j j ƒ  ƒ } t |  ƒ j | ƒ S(   N(   R1   t   isnaR    R5   R   R*   (   R   t   nas(    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyRF   a   s    c         C   sa   |  j  j ƒ  } | r0 | d  k r0 |  j j } n  t | | d | d | ƒ} |  j | d |  j ƒS(   Nt
   fill_valuet
   allow_fillR.   (   R    R5   R>   R.   R   R   R0   (   R   t   indicesRI   RH   t   datat   result(    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyR   e   s    	c         C   sB   | r" t  |  ƒ t j |  j ƒ ƒ St  |  ƒ t j |  j ƒ ƒ Sd  S(   N(   R   R/   t   deepcopyR    (   R   t   deep(    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyR/   o   s    c         C   s;   t  t j j d „  | Dƒ ƒ ƒ } t j | ƒ } |  | ƒ S(   Nc         s   s   |  ] } | j  j Vq d  S(   N(   R    RD   (   R@   RB   (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pys	   <genexpr>v   s   (   t   listt	   itertoolst   chaint   from_iterableR   R&   (   R
   t	   to_concatRD   R)   (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt   _concat_same_typeu   s    c         C   s   t  |  ƒ j |  j j ƒ  ƒ S(   N(   R   R*   R    R5   (   R   (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt
   __invert__{   s    c         K   sW   | r |  |  j  ƒ  } n |  } y t | | ƒ } Wn t k
 rL t ‚ n X| |   S(   N(   RF   t   getattrt   AttributeErrorR   (   R   t   methodt   skipnat   kwargsR)   t   op(    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt   _reduce€   s    
i    c         C   s   |  j  j ƒ  j ƒ  S(   N(   R    R5   t   any(   R   t   axist   out(    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyR]   Œ   s    c         C   s   |  j  j ƒ  j ƒ  S(   N(   R    R5   t   all(   R   R^   R_   (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyR`      s    N(   R   R   R#   R%   R   R*   R,   R>   t   FalseR0   R8   R:   R   R<   t   propertyR.   RE   RF   R   R/   RT   RU   R\   R]   R`   (    (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyR   +   s&   					
		(   t   __doc__R/   RP   t   numpyR   t   pyarrowR   t   pandasR1   t   pandas.api.extensionsR    R   R   R   R   R   (    (    (    s@   lib/python2.7/site-packages/pandas/tests/extension/arrow/bool.pyt   <module>   s   "