ó
\K]c           @   sÿ  d  Z  d d l Z d d l m Z m Z d d l m Z d d l m	 Z	 m
 Z
 m Z m Z m Z m Z m Z m Z m Z m Z m Z d d l m Z d e f d „  ƒ  YZ d	 e j f d
 „  ƒ  YZ d e f d „  ƒ  YZ d e j f d „  ƒ  YZ e	 j e ƒ d „  ƒ Z e	 j e ƒ d „  ƒ Z e
 d ƒ d „  ƒ Z  e
 e ƒ d „  ƒ Z! e e ƒ d e j" f d „  ƒ  Yƒ Z# e e ƒ d e j" f d „  ƒ  Yƒ Z$ e e d d ƒ e e d d ƒ e e d d ƒ d „  Z% d „  Z& e d  e ƒ d! „  ƒ Z' e d  e ƒ d" „  ƒ Z( e d e e j) ƒ d# „  ƒ Z* e d e e j) ƒ d$ „  ƒ Z+ e e e j) e ƒ d% „  ƒ Z, e e ƒ d& „  ƒ Z- e e ƒ d' „  ƒ Z. e e ƒ d( „  ƒ Z/ e e ƒ d) „  ƒ Z0 e e d* ƒ d+ „  ƒ Z1 e e2 ƒ d, „  ƒ Z3 e e d- ƒ d. „  ƒ Z4 d S(/   s.   
Implementation of a minimal Pandas-like API.
iÿÿÿÿN(   t   typest   cgutils(   t   models(   t   typeof_implt   type_callablet   register_modelt   lower_builtint   boxt   unboxt   NativeValuet   overloadt   overload_attributet   overload_methodt   make_attribute_wrapper(   t   impl_ret_borrowedt   Indexc           B   s>   e  Z d  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z RS(   s-   
    A minimal pandas.Index-like object.
    c         C   s:   t  | t j ƒ s t ‚ | j d k s- t ‚ | |  _ d  S(   Ni   (   t
   isinstancet   npt   ndarrayt   AssertionErrort   ndimt   _data(   t   selft   data(    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   __init__   s    c         C   s   t  |  j ƒ S(   N(   t   iterR   (   R   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   __iter__   s    c         C   s
   |  j  j S(   N(   R   t   dtype(   R   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR      s    c         C   s
   |  j  j S(   N(   R   t   flags(   R   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR   !   s    (   t   __name__t
   __module__t   __doc__R   R   t   propertyR   R   (    (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR      s
   		t	   IndexTypec           B   sM   e  Z d  Z d Z d „  Z e d „  ƒ Z e d „  ƒ Z d d d d „ Z	 RS(   s+   
    The type class for Index objects.
    iè  c         C   s)   | |  _  t t |  ƒ j | d | ƒ d  S(   Ni   (   t   pyclasst   superR!   R   (   R   R   t   layoutR"   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR   ,   s    	c         C   s   |  j  |  j |  j f S(   N(   R"   R   R$   (   R   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   key0   s    c         C   s   t  j |  j d |  j ƒ S(   Ni   (   R    t   ArrayR   R$   (   R   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   as_array4   s    i   c         C   sR   | d k s t  ‚ | d  k r* |  j } n  | p6 |  j } t |  ƒ | | |  j ƒ S(   Ni   (   R   t   NoneR   R$   t   typeR"   (   R   R   R   R$   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   copy8   s
    N(
   R   R   R   t   array_priorityR   R    R%   R'   R(   R*   (    (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR!   &   s   	t   Seriesc           B   s>   e  Z d  Z d „  Z d „  Z e d „  ƒ Z e d „  ƒ Z RS(   s.   
    A minimal pandas.Series-like object.
    c         C   sX   t  | t j ƒ s t ‚ t  | t ƒ s- t ‚ | j d k sB t ‚ | |  _ | |  _ d  S(   Ni   (   R   R   R   R   R   R   t   _valuest   _index(   R   R   t   index(    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR   E   s
    	c         C   s   t  |  j ƒ S(   N(   R   R-   (   R   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR   L   s    c         C   s
   |  j  j S(   N(   R-   R   (   R   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR   O   s    c         C   s
   |  j  j S(   N(   R-   R   (   R   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR   S   s    (   R   R   R   R   R   R    R   R   (    (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR,   @   s
   		t
   SeriesTypec           B   sM   e  Z d  Z d Z d „  Z e d „  ƒ Z e d „  ƒ Z d d d d „ Z	 RS(	   s,   
    The type class for Series objects.
    iè  c         C   sl   t  | t ƒ s t ‚ | |  _ | |  _ t j |  j d d ƒ |  _ d | | f } t t	 |  ƒ j
 | ƒ d  S(   Ni   t   Cs   series(%s, %s)(   R   R!   R   R   R/   R    R&   t   valuesR#   R0   R   (   R   R   R/   t   name(    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR   ^   s    		c         C   s   |  j  |  j f S(   N(   R   R/   (   R   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR%   f   s    c         C   s   |  j  S(   N(   R2   (   R   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR'   j   s    i   R1   c         C   sR   | d k s t  ‚ | d k s$ t  ‚ | d  k r< |  j } n  t |  ƒ | |  j ƒ S(   Ni   R1   (   R   R(   R   R)   R/   (   R   R   R   R$   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR*   n   s
    N(
   R   R   R   R+   R   R    R%   R'   R(   R*   (    (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR0   X   s   	c         C   sC   t  |  j | ƒ } | j d k s' t ‚ t | j | j t |  ƒ ƒ S(   Ni   (   R   R   R   R   R!   R   R$   R)   (   t   valt   ct   arrty(    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   typeof_indexv   s    c         C   s^   t  |  j | ƒ } t  |  j | ƒ } | j d k s9 t ‚ | j d k sN t ‚ t | j | ƒ S(   Ni   R1   (   R   R.   R-   R   R   R$   R0   R   (   R4   R5   R/   R6   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   typeof_series|   s
    t   __array_wrap__c         C   s   d „  } | S(   Nc         S   s>   t  |  t t f ƒ r: |  j d | j d | j d | j ƒ Sd  S(   NR   R   R$   (   R   R!   R0   R*   R   R   R$   (   t
   input_typet   result(    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   typer†   s    	(    (   t   contextR<   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   type_array_wrap„   s    	c         C   s   d „  } | S(   Nc         S   s_   t  | t ƒ r[ t  |  t j ƒ r[ |  j d k s6 t ‚ |  j d k sK t ‚ t |  j | ƒ Sd  S(   NR1   i   (	   R   R!   R    R&   R$   R   R   R0   R   (   R   R/   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR<      s    !(    (   R=   R<   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   type_series_constructorŽ   s    	t
   IndexModelc           B   s   e  Z d  „  Z RS(   c         C   s/   d | j  f g } t j j |  | | | ƒ d  S(   NR   (   R'   R   t   StructModelR   (   R   t   dmmt   fe_typet   members(    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR      s    (   R   R   R   (    (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR@   ›   s   t   SeriesModelc           B   s   e  Z d  „  Z RS(   c         C   s;   d | j  f d | j f g } t j j |  | | | ƒ d  S(   NR/   R2   (   R/   R'   R   RA   R   (   R   RB   RC   RD   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyR   £   s    (   R   R   R   (    (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyRE   ¡   s   R   R   R/   R.   R2   R-   c         K   s   t  j | ƒ |  | |  S(   N(   R   t   create_struct_proxy(   R=   t   buildert   typt   kwargs(    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt
   make_index®   s    c         K   s   t  j | ƒ |  | |  S(   N(   R   RF   (   R=   RG   RH   RI   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   make_series±   s    t	   __array__c         C   s0   t  |  | | j d d | d ƒ} | j d ƒ S(   Ni    t   refR   (   RJ   t   argst   _get_ptr_by_name(   R=   RG   t   sigRN   R4   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   index_as_array´   s    #c         C   s0   t  |  | | j d d | d ƒ} | j d ƒ S(   Ni    RM   R2   (   RK   RN   RO   (   R=   RG   RP   RN   R4   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   series_as_array¹   s    #c         C   s>   t  |  | | j ƒ } | d | _ t |  | | j | j ƒ  ƒ S(   Ni   (   RJ   t   return_typeR   R   t	   _getvalue(   R=   RG   RP   RN   t   dest(    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   index_wrap_array¾   s    c         C   sm   t  |  | | j d d | d ƒ} t  |  | | j ƒ } | d | _ | j | _ t |  | | j | j ƒ  ƒ S(   Ni    t   valuei   (   RK   RN   RS   R2   R/   R   RT   (   R=   RG   RP   RN   t   srcRU   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   series_wrap_arrayÄ   s
    #c         C   sO   | \ } } t  |  | | j ƒ } | | _ | | _ t |  | | j | j ƒ  ƒ S(   N(   RK   RS   R/   R2   R   RT   (   R=   RG   RP   RN   R   R/   t   series(    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   pdseries_constructorÌ   s
    		c         C   sX   | j  j | d ƒ } t | j | j |  ƒ } | j |  j | ƒ j | _ t	 | j
 ƒ  ƒ S(   s7   
    Convert a Index object to a native structure.
    R   (   t   pyapit   object_getattr_stringRJ   R=   RG   R   R'   RW   R   R	   RT   (   RH   t   objR5   R   R/   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   unbox_indexÕ   s    c         C   sˆ   | j  j | d ƒ } | j  j | d ƒ } t | j | j |  ƒ } | j |  j | ƒ j | _ | j |  j | ƒ j | _ t	 | j
 ƒ  ƒ S(   s8   
    Convert a Series object to a native structure.
    R.   R-   (   R\   R]   RK   R=   RG   R   R/   RW   R2   R	   RT   (   RH   R^   R5   R/   R2   RZ   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   unbox_seriesà   s    c         C   ss   t  | j | j |  d | ƒ} | j j | j j |  j ƒ ƒ } | j |  j | j	 ƒ } | j j
 | | f ƒ } | S(   s=   
    Convert a native index structure to a Index object.
    RW   (   RJ   R=   RG   R\   t   unserializet   serialize_objectR"   R   R'   R   t   call_function_objargs(   RH   R4   R5   R/   t   classobjt   arrayobjt   indexobj(    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt	   box_indexî   s
    !c         C   s‹   t  | j | j |  d | ƒ} | j j | j j t ƒ ƒ } | j |  j | j ƒ } | j |  j	 | j
 ƒ } | j j | | | f ƒ } | S(   s?   
    Convert a native series structure to a Series object.
    RW   (   RK   R=   RG   R\   Ra   Rb   R,   R   R/   R'   R2   Rc   (   RH   R4   R5   RZ   Rd   Rf   Re   t	   seriesobj(    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt
   box_seriesú   s    t   is_monotonic_increasingc         C   s   d „  } | S(   s'   
    Index.is_monotonic_increasing
    c         S   sT   |  j  } t | ƒ d k r t S| d } x$ | D] } | | k  rF t S| } q0 Wt S(   Ni    (   R   t   lent   Truet   False(   R/   R   t   ut   v(    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   getter  s    	

(    (   RH   Rp   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   index_is_monotonic_increasing  s    	c         C   s    t  |  t ƒ r d „  } | Sd S(   s   
    len(Series)
    c         S   s   t  |  j ƒ S(   N(   Rk   R-   (   RZ   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   len_impl  s    N(   R   R0   (   RZ   Rr   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt
   series_len  s    	t   clipc         C   s   d „  } | S(   s   
    Series.clip(...)
    c         S   sx   |  j  j ƒ  } xV t t | ƒ ƒ D]B } | | } | | k  rK | | | <q" | | k r" | | | <q" q" Wt | |  j ƒ S(   N(   R-   R*   t   rangeRk   R,   R.   (   RZ   t   lowert   upperR   t   iRo   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt	   clip_impl(  s    
(    (   RZ   Rv   Rw   Ry   (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   series_clip#  s    	
(5   R   t   numpyR   t   numbaR    R   t   numba.datamodelR   t   numba.extendingR   R   R   R   R   R   R	   R
   R   R   R   t   numba.targets.imputilsR   t   objectR   t   BufferR!   R,   t   ArrayCompatibleR0   t   registerR7   R8   R>   R?   RA   R@   RE   RJ   RK   RQ   RR   R&   RV   RY   R[   R_   R`   Rg   Ri   Rq   Rk   Rs   Rz   (    (    (    s9   lib/python2.7/site-packages/numba/tests/pdlike_usecase.pyt   <module>   sD   L
			
