ó
¦–Õ\c           @` sý  d  d l  m Z m Z 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 Z m Z d  d l Z d  d l m Z m Z m Z d d l m Z d d l m Z d d	 l m Z d d
 l m Z d d l m Z d d l m Z d d l m  Z  m! Z! m" Z" m# Z# d d l m$ Z$ m% Z% d d l& m' Z' d d l( m) Z) m* Z* d d l m+ Z+ m, Z, m- Z- m. Z. m/ Z/ m0 Z0 m1 Z1 m2 Z2 m3 Z3 m4 Z4 m5 Z5 m6 Z6 m7 Z7 d d l8 m9 Z9 e e j: ƒ d d d „ ƒ Z: e e j< ƒ d „  ƒ Z< e e j= ƒ d „  ƒ Z= e e j> ƒ d „  ƒ Z> e e j? ƒ d „  ƒ Z? e e j@ ƒ eA d „ ƒ Z@ e e jB ƒ eA d „ ƒ ZB e e jC ƒ eA d „ ƒ ZC e e jD ƒ d „  ƒ ZD e e jE ƒ d d „ ƒ ZE d „  ZF e e jG ƒ d „  ƒ ZG e e jH ƒ d  „  ƒ ZH d! ZI eI jJ ƒ  ZK d" „  ZL e e jM ƒ d d# „ ƒ ZM e e jN ƒ d$ „  ƒ ZN e e jO ƒ d% „  ƒ ZO e$ e jP ƒ d& „  ƒ ZP e e jQ ƒ d' „  ƒ ZQ d( „  ZR e e jS ƒ d) „  ƒ ZS e e jT ƒ d* „  ƒ ZT e e jU ƒ d d+ „ ƒ ZU e e jV ƒ d d, d- „ ƒ ZV e e jW ƒ d d d. „ ƒ ZW d/ „  ZX e e jY ƒ d0 „  ƒ ZY eZ d1 „ Z[ e e j\ ƒ d d  d2 „ ƒ Z\ e e j] ƒ eA d3 „ ƒ Z] d d eA d d d4 „ Z^ e e j_ ƒ d d d  d d5 „ ƒ Z_ e e j` ƒ d d d6 „ ƒ Z` e e ja ƒ d  d7 „ ƒ Za eA d8 „ Zb e e jc ƒ eA eA eA d9 „ ƒ Zc eA d: „ Zd e$ ee e d; d ƒ ƒ eA eA d< „ ƒ Zf e e jg ƒ d d= „ ƒ Zg e e jh ƒ d> „  ƒ Zh e e ji ƒ d d? „ ƒ Zi e e jj ƒ d d@ „ ƒ Zj e e jk ƒ dA „  ƒ Zk e e jl ƒ d  dB „ ƒ Zl dC „  Zm e e jn ƒ d  dD „ ƒ Zn dE „  Zo dF „  Zp dG „  Zq e e jr ƒ dH dI eA dJ „ ƒ Zr e e js ƒ dH dI eA dK „ ƒ Zs dL „  Zt e e ju ƒ dM „  ƒ Zu dN „  Zv e jw ev dO ex g ƒZv dP „  Zy e e jz ƒ dQ „  ƒ Zz e e j{ ƒ d d dR „ ƒ Z{ e e j| ƒ d dS „ ƒ Z| e e j} ƒ dT „  ƒ Z} e e j~ ƒ dU „  ƒ Z~ dV „  Z dW „  Z€ e e j ƒ dX dY „ ƒ Z e e j‚ ƒ dZ „  ƒ Z‚ e e jƒ ƒ eA d[ „ ƒ Zƒ d  d\ „ Z„ e e j… ƒ d] „  ƒ Z… d d eA eA d^ „ Z† e e j‡ ƒ d d eA d_ „ ƒ Z‡ d S(`   i    (   t   divisiont   print_functiont   absolute_importN(   t   wrapst   partial(   t   Realt   Integral(   t   concatt   sliding_windowt
   interleavei   (   t   Iterable(   t   flatten(   t   tokenize(   t   HighLevelGraph(   t   funcnamei   (   t   chunk(   t   aranget   diagt   emptyt   indices(   t
   safe_wrapst   validate_axis(   t   ones(   t   multiplyt   sqrt(   t   Arrayt
   map_blockst   elemwiset
   from_arrayt   asarrayt
   asanyarrayt   concatenatet   stackt	   blockwiset   broadcast_shapest   is_scalar_for_elemwiset   broadcast_tot   tensordot_lookup(   t   einsumc         C` si   x5 | d  k	 r7 |  j | k  r7 |  d  d  d  … f }  q W| d  k	 re |  j | k re |  j | ƒ }  n  |  S(   N(   t   Nonet   ndimt   dtypet   astype(   t   xR)   t   ndmin(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   array   s
    c          G` s;   g  |  D]! } t  | ƒ r | n | j ^ q }  t j |  Œ  S(   N(   R#   R)   t   npt   result_type(   t   argst   a(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyR/   '   s    .c          G` sÊ   g  } xŸ |  D]— } t  | ƒ } | j d k r; | d } n\ | j d k rf | d  d  d  … d  f } n1 | j d k r— | d  d  … d  d  … d  f } n  | j | ƒ q Wt | ƒ d k rÂ | d S| Sd  S(   Ni    i   i   (   NNN(   R   R(   R'   t   appendt   len(   t   aryst   new_arysR+   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt
   atleast_3d-   s    "c          G` s–   g  } xk |  D]c } t  | ƒ } | j d k r; | d } n( | j d k rc | d  d  d  … f } n  | j | ƒ q Wt | ƒ d k rŽ | d S| Sd  S(   Ni    i   (   NN(   R   R(   R'   R2   R3   (   R4   R5   R+   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt
   atleast_2dA   s    c          G` sn   g  } xC |  D]; } t  | ƒ } | j d k r; | d  } n  | j | ƒ q Wt | ƒ d k rf | d S| Sd  S(   Ni    i   (   R   R(   R'   R2   R3   (   R4   R5   R+   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt
   atleast_1dS   s    c         C` s,   t  d „  |  Dƒ ƒ }  t |  d d d | ƒS(   Nc         s` s   |  ] } t  | ƒ Vq d  S(   N(   R7   (   t   .0R+   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>e   s    t   axisi    t   allow_unknown_chunksizes(   t   tupleR   (   t   tupR;   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   vstackc   s    c         C` sF   t  d „  |  Dƒ ƒ r, t |  d d d | ƒSt |  d d d | ƒSd  S(   Nc         s` s   |  ] } | j  d  k Vq d S(   i   N(   R(   (   R9   R+   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>k   s    R:   i    R;   i   (   t   allR   (   R=   R;   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   hstacki   s    c         C` s,   t  d „  |  Dƒ ƒ }  t |  d d d | ƒS(   Nc         s` s   |  ] } t  | ƒ Vq d  S(   N(   R6   (   R9   R+   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>s   s    R:   i   R;   (   R<   R   (   R=   R;   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   dstackq   s    c         C` s©   | | k r |  S| d k  r, | |  j  } n  | d k  rH | |  j  } n  t t |  j  ƒ ƒ } t | ƒ } | | | | <| | <t t j | |  | d | d | d |  j ƒS(   Ni    t   axis1t   axis2R)   (   R(   t   listt   rangeR!   R.   t   swapaxesR)   (   R1   RB   RC   t   indt   out(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyRF   w   s    c      	   ` sŸ   | r- t  | ƒ ˆ  j k rO t d ƒ ‚ qO n" t t ˆ  j ƒ ƒ d  d  d … } t ‡  f d †  | Dƒ ƒ } t t j | ˆ  t t ˆ  j ƒ ƒ d ˆ  j d | ƒS(   Ns   axes don't match arrayiÿÿÿÿc         3` s.   |  ]$ } | d  k  r" | ˆ  j  n | Vq d S(   i    N(   R(   (   R9   t   d(   R1   (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>   s    R)   t   axes(	   R3   R(   t
   ValueErrorR<   RE   R!   R.   t	   transposeR)   (   R1   RJ   (    (   R1   s2   lib/python2.7/site-packages/dask/array/routines.pyRL   †   s    "$c         C` s‰   t  |  ƒ }  |  j t d ƒ g } y t d d d ƒ | | <Wn6 t k
 rt t d t | ƒ t |  j ƒ f ƒ ‚ n Xt | ƒ } |  | S(   s¹   
    Reverse element order along axis.

    Parameters
    ----------
    axis : int
        Axis to reverse element order of.

    Returns
    -------
    reversed array : ndarray
    iÿÿÿÿs#   `axis` of %s invalid for %s-D arrayN(   R   R(   t   sliceR'   t
   IndexErrorRK   t   strR<   (   t   mR:   t   sl(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   flip’   s    &c         C` s   t  |  d ƒ S(   Ni    (   RR   (   RP   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   flipud®   s    c         C` s   t  |  d ƒ S(   Ni   (   RR   (   RP   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   fliplr³   s    t   abcdefghijklmnopqrstuvwxyzc   
      C` s­  t  |  | g d d „  ƒ} t j t | ƒ ƒ } t j g  | d D] } |  j | ^ qA ƒ } t j g  | d D] } | j | ^ qn ƒ } t | ƒ d k r@| | k j ƒ  r@| j	 ƒ  d k r@t j
 t g  t |  j ƒ D]" \ } } | | d k rÙ | ^ qÙ g  t | j ƒ D]" \ } } | | d k r| ^ qƒ ƒ } n | |  | d | ƒ} t d  d  ƒ g | j }	 x( t | d ƒ D] }  |	 j |  d  ƒ qW| t |	 ƒ } | S(   Nt   keyc         S` s   |  j  S(   N(   t   __array_priority__(   R+   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   <lambda>½   t    i    i   RJ   (   t   maxR%   t   dispatcht   typeR.   R-   t   shapeR3   R?   t   mint   zerosR<   t	   enumerateRM   R'   R(   t   sortedt   insert(
   R1   t   bRJ   R+   t	   tensordott   it   a_dimst   b_dimst   sRG   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt
   _tensordot¼   s    --6>Bc         C` sª  t  | t ƒ r | \ } } n? t t |  j d |  j | d d ƒ ƒ } t t d | ƒ ƒ } t  | t ƒ rx | f } n  t  | t ƒ r“ | f } n  t  | t ƒ r± t | ƒ } n  t  | t ƒ rÏ t | ƒ } n  t j |  j	 | j	 ƒ } t t |  j ƒ ƒ } t t |  j |  j | j ƒ ƒ } | | } x< t
 | | ƒ D]+ \ }	 }
 | j | |
 ƒ | |	 | |
 <q8Wt t | |  | | | d | d | | f ƒ} | j d | ƒ } | S(   Ni   iÿÿÿÿi    R)   RJ   R:   (   t
   isinstanceR
   R<   RE   R(   R   RD   R.   t   promote_typesR)   t   zipt   removeR!   Ri   t   sum(   t   lhst   rhsRJ   t	   left_axest
   right_axest   dtt
   left_indext   right_indext	   out_indext   lt   rt   intermediatet   result(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyRd   Ð   s2    *"
	c         C` s-   t  |  | d |  j d f | j d f f ƒS(   NRJ   i   i   (   Rd   R(   (   R1   Rc   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   dotô   s    c         C` s   t  |  j ƒ  j ƒ  | j ƒ  ƒ S(   N(   R{   t   conjt   ravel(   R1   Rc   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   vdotù   s    c         C` så  t  |  ƒ }  t  | ƒ } |  j d k s6 | j d k rE t d ƒ ‚ n  t } |  j d k r| t } |  t j d  d  … f }  n  t } | j d k r³ t } | d  d  … t j f } n  |  j | j k  ræ |  | j |  j t j f }  n3 |  j | j k r| |  j | j t j f } n  t t j t	 t
 d |  j d ƒ ƒ |  t	 t
 d |  j d ƒ ƒ |  j d d f | t	 t
 d |  j d ƒ ƒ d |  j f d t |  | ƒ d t ƒ} | rÎ| d d d  d  … f } n  | rá| d } n  | S(   Ni    s"   `matmul` does not support scalars.i   R)   R   .(   .i    (   R   R(   RK   t   Falset   TrueR.   t   newaxisR!   t   matmulR<   RE   R/   (   R1   Rc   t   a_is_1dt   b_is_1dRH   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyR‚   þ   s6    !!-,	c      	   C` sa   |  j  ƒ  }  | j  ƒ  } t j |  j j ƒ  | j j ƒ  ƒ j } t t j d |  d | d d | ƒS(   Nt   ijRe   t   jR)   (   R   R.   t   outerR)   R\   R!   (   R1   Rc   R)   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyR‡   %  s    'c         C` s   t  j | | |  | | Ž S(   N(   R.   t   apply_along_axis(   t   arrt   func1dt   func1d_axist   func1d_argst   func1d_kwargs(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   _inner_apply_along_axis/  s    c         O` s#  t  | ƒ } | j | t | j |  ƒ } t j d d | j ƒ} t j |  | | | Ž ƒ } | j | j |  | j | | d !f | j | d ƒ } | j	 t
 d t |  ƒ d d | j d | j |  | j | j | d d | d t t | | | j d ƒ ƒ d |  d	 | d
 | d | ƒ	} | S(   Ni   R)   t   names   -along-axist   chunkst	   drop_axist   new_axisRŠ   R‹   RŒ   R   (   i   (   R   R]   R3   R.   R   R)   R-   t   rechunkR   R   RŽ   R   RD   RE   R(   (   RŠ   R:   R‰   R0   t   kwargst	   test_datat   test_resultRz   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyRˆ   9  s&    4	#	c         C` sË   t  | ƒ } y t | ƒ } Wn t k
 r8 | f } n X| j t d  ƒ f } | } xo | D]g } t |  | | d ƒ } | j | j d k r¢ | | |  d } q\ | j | j k r\ t d ƒ ‚ q\ q\ W| S(   Ni    i   sJ   func must either preserve dimensionality of the input or reduce it by one.(   N(   R   R<   t	   TypeErrorR(   RM   R'   Rˆ   RK   (   t   funcR1   RJ   RQ   Rz   Re   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   apply_over_axes\  s    c         C` s    |  j  d | ƒ |  j d | ƒ S(   NR:   (   RZ   R^   (   R1   R:   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   ptpx  s    iÿÿÿÿc         C` sÁ   t  |  ƒ }  t | ƒ } t | ƒ } |  j t d  ƒ g } |  j t d  ƒ g } t d d  ƒ | | <t d  d ƒ | | <t | ƒ } t | ƒ } |  } x& t | ƒ D] } | | | | } q¡ W| S(   Ni   iÿÿÿÿ(   R   t   intR(   RM   R'   R<   RE   (   R1   t   nR:   t   sl_1t   sl_2Rx   Re   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   diff}  s    c         C` s“   t  |  ƒ }  |  j ƒ  } | d | d  } | g } | d  k	 r[ t  | ƒ j ƒ  g | } n  | d  k	 rƒ | t  | ƒ j ƒ  g } n  t | ƒ } | S(   Ni   iÿÿÿÿ(   R   R   R'   R   (   t   aryt   to_endt   to_begint   aryfRx   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   ediff1d“  s    	c         C` sU   | | } | d k	 r6 | | d | | d | !} n  t j |  | d | | } | S(   sU  
    x: nd-array
        array of one block
    coord: 1d-array or scalar
        coordinate along which the gradient is computed.
    axis: int
        axis along which the gradient is computed
    array_locs:
        actual location along axis. None if coordinate is scalar
    grad_kwargs:
        keyword to be passed to np.gradient
    i    i   R:   N(   R'   R.   t   gradient(   R+   t   block_idt   coordR:   t
   array_locst   grad_kwargst	   block_loct   grad(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   _gradient_kernel¤  s
    
 c         ` sZ  t  ˆ ƒ ‰ t j | j d d ƒ ƒ | d <| d d k rJ t d ƒ ‚ n  t } | j d d  ƒ } | d  k r† t t	 ˆ j
 ƒ ƒ } n! t | t ƒ r§ t } | f } n  t | ˆ j
 ƒ } t | ƒ t t | ƒ ƒ k ræ t d ƒ ‚ n  t ‡ f d †  | Dƒ ƒ } | d k rd } n  t | ƒ d k r<t | ƒ | } n  t | ƒ t | ƒ k rct d ƒ ‚ n  t ˆ j j t j t f ƒ r“ˆ j t ƒ ‰ n9 t ˆ j j t ƒ rÌˆ j j d	 k  rÌˆ j t ƒ ‰ n  g  } xnt | ƒ D]`\ } ‰  xV ˆ j ˆ  D]G } t j | ƒ | d d k  rùt d
 j t j | ƒ ˆ  ƒ ƒ ‚ qùqùWt j | | ƒ r`d  } n t | | t  ƒ r‚t! d ƒ ‚ n  t j" ˆ j ˆ  ƒ }	 t j# |	 ƒ d }
 |
 |	 d } |
 d c d 8<d | d <| |
 f } | j$ ˆ j% t& d ˆ j d ‡  f d †  t	 ˆ j
 ƒ Dƒ d d d | | d ˆ  d | d | ƒƒ qßW| rV| d } n  | S(   Nt
   edge_orderi   i   s+   edge_order must be less than or equal to 2.R:   s   duplicate axes not allowedc         3` s   |  ] } | ˆ  j  Vq d  S(   N(   R(   (   R9   t   ax(   t   f(    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>Í  s    sG   Spacing must either be a single scalar, or a scalar / 1d-array per axisi   sc   Chunk size must be larger than edge_order + 1. Minimum chunk for aixs {} is {}. Rechunk to proceed.s(   dask array coordinated is not supported.iÿÿÿÿi    R)   t   depthc         ` s+   i  |  ]! } | ˆ  k r d  n d | “ q S(   i   i    (    (   R9   R†   (   R®   (    s2   lib/python2.7/site-packages/dask/array/routines.pys
   <dictcomp>ø  s   	 t   boundaryt   noneR§   R¨   R©   (    (   i   ('   R   t   matht   ceilt   getRK   R   t   popR'   R<   RE   R(   Rj   R   R€   R   R3   t   setR—   t
   issubclassR)   R\   R.   t   bool8R*   t   floatR   t   itemsizeR`   R   R^   t   formatt   isscalarR   t   NotImplementedErrorR-   t   cumsumR2   t   map_overlapR¬   (   R¯   t   varargsR”   t   drop_result_listR:   t   resultsRe   t   cR¨   R   t   array_loc_stopt   array_loc_start(    (   R®   R¯   s2   lib/python2.7/site-packages/dask/array/routines.pyR¥   ¸  sp    	'	
	
c         C` sU   t  t t |  ƒ ƒ } t j | d | ƒ} x$ |  D] } | t | ƒ c  | 7*q1 W| S(   NR)   (   RZ   t   mapR3   R.   R_   (   t	   bincountsR)   Rœ   RH   Rc   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   _bincount_sum  s
    c   	      ` s•  ˆ j  d k r t d ƒ ‚ n  ˆ d  k	 rN ˆ j ˆ j k rN t d ƒ ‚ qN n  t ˆ ˆ ˆ  ƒ } d | ‰ d | } ˆ d  k	 rÌ ‡  ‡ ‡ ‡ f d †  t ˆ j ƒ  ƒ Dƒ } t j d g d d g ƒj	 } n: ‡  ‡ ‡ f d †  t ˆ j ƒ  ƒ Dƒ } t j g  ƒ j	 } t
 t | ƒ | f | | d	 f <t j | | d
 ˆ d  k rIˆ g n	 ˆ ˆ g ƒ} ˆ  d	 k rvt j f f } n ˆ  f f } t | | | | ƒ S(   Ni   s8   Input array must be one dimensional. Try using x.ravel()s/   Chunks of input array x and weights must match.s	   bincount-s   bincount-sumc         ` sF   i  |  ]< \ } } t  j ˆ j | f ˆ j | f ˆ  f ˆ | f “ q S(    (   R.   t   bincountR   (   R9   Re   t   _(   t	   minlengthR   t   weightsR+   (    s2   lib/python2.7/site-packages/dask/array/routines.pys
   <dictcomp>  s   	RÍ   c         ` s=   i  |  ]3 \ } } t  j ˆ j | f d  ˆ  f ˆ | f “ q S(   N(   R.   RÊ   R   R'   (   R9   Re   RË   (   RÌ   R   R+   (    s2   lib/python2.7/site-packages/dask/array/routines.pys
   <dictcomp>   s   	i    t   dependencies(   R(   RK   R'   R   R   R`   t   __dask_keys__R.   RÊ   R)   RÉ   RD   R   t   from_collectionst   nanR   (	   R+   RÍ   RÌ   t   tokent
   final_namet   dskR)   t   graphR   (    (   RÌ   R   RÍ   R+   s2   lib/python2.7/site-packages/dask/array/routines.pyRÊ     s*    

!3c         C` sO   t  j | ƒ } t  j d g | d t ƒj } |  j t  j d | d | d | ƒS(   Ni    t   rightR)   t   bins(   R.   R   t   digitizeR   R)   R   (   R1   R×   RÖ   R)   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyRØ   /  s    c         ` sÑ  t  j ˆ  ƒ r7 ˆ d k s( ˆ  d k r7 t d ƒ ‚ n  | d k	 rd | j |  j k rd t d ƒ ‚ n  | t k	 r t d ƒ ‚ n  t  j ˆ  ƒ så ˆ  } ˆ \ } } | | k rÃ | d 8} | d 7} n  t  j | | ˆ  d d t ƒ‰  n ˆ  } t |  | ˆ | | ƒ }	 t	 t
 t |  j ƒ  ƒ ƒ ƒ }
 d |
 t	 ˆ  ƒ d f f } d |	 ‰ d d ‡  f d † ‰ | d k r°‡ ‡ ‡ f d	 †  t t |  j ƒ  ƒ ƒ Dƒ } t  j g  ƒ d
 j } nX t |  j ƒ  ƒ } t | j ƒ  ƒ } ‡ ‡ ‡ f d †  t t | | ƒ ƒ Dƒ } | j } t j ˆ | d | d k r,|  g n	 |  | g ƒ} t | ˆ | d | ƒ} | j d d
 ƒ } | d k	 rÃ| r¶t t  j ˆ  ƒ j t ƒ d | j ƒ} | | | j ƒ  ˆ  f S| ˆ  f Sn
 | ˆ  f Sd S(   sq  
    Blocked variant of :func:`numpy.histogram`.

    Follows the signature of :func:`numpy.histogram` exactly with the following
    exceptions:

    - Either an iterable specifying the ``bins`` or the number of ``bins``
      and a ``range`` argument is required as computing ``min`` and ``max``
      over blocked arrays is an expensive operation that must be performed
      explicitly.

    - ``weights`` must be a dask.array.Array with the same block structure
      as ``a``.

    Examples
    --------
    Using number of bins and range:

    >>> import dask.array as da
    >>> import numpy as np
    >>> x = da.from_array(np.arange(10000), chunks=10)
    >>> h, bins = da.histogram(x, bins=10, range=[0, 10000])
    >>> bins
    array([    0.,  1000.,  2000.,  3000.,  4000.,  5000.,  6000.,  7000.,
            8000.,  9000., 10000.])
    >>> h.compute()
    array([1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000, 1000])

    Explicitly specifying the bins:

    >>> h, bins = da.histogram(x, bins=np.array([0, 5000, 10000]))
    >>> bins
    array([    0,  5000, 10000])
    >>> h.compute()
    array([5000, 5000])
    su   dask.array.histogram requires either specifying bins as an iterable or specifying both a range and the number of binss<   Input array and weights must have the same chunked structures…   The normed= keyword argument has been deprecated. Please use density instead. See the numpy.histogram docstring for more information.g      à?i   t   endpoints   histogram-sum-c         ` s'   t  j |  ˆ  d | d | ƒd t  j S(   NRE   RÍ   i    (   R.   t	   histogramR   (   R+   RE   RÍ   (   R×   (    s2   lib/python2.7/site-packages/dask/array/routines.pyt
   block_hist}  s    c         ` s1   i  |  ]' \ } } ˆ  | ˆ f ˆ | d  f “ q S(   i    (    (   R9   Re   t   k(   RÛ   R   RE   (    s2   lib/python2.7/site-packages/dask/array/routines.pys
   <dictcomp>  s   	i    c         ` s:   i  |  ]0 \ } \ } } ˆ  | ˆ | f ˆ | d  f “ q S(   i    (    (   R9   Re   RÜ   t   w(   RÛ   R   RE   (    s2   lib/python2.7/site-packages/dask/array/routines.pys
   <dictcomp>‡  s   	RÎ   R)   R:   R   N(   i   (   R.   t   iterableR'   RK   R   R   t   linspaceR€   R   R3   RD   R   RÏ   R`   RÚ   R)   Rl   R   RÐ   R   Rn   R   RŸ   R*   Rº   (   R1   R×   RE   t   normedRÍ   t   densityt	   bin_tokent   mnt   mxRÒ   t   nchunksR   RÔ   R)   t   a_keyst   w_keysRÕ   t   mappedRœ   t   db(    (   R×   RÛ   R   RE   s2   lib/python2.7/site-packages/dask/array/routines.pyRÚ   6  sL    %(
"
	3'c   
      C` sé  | d  k	 r- | t | ƒ k r- t d ƒ ‚ n  t |  ƒ }  | d  k r] t j |  t j ƒ } n$ t | ƒ } t j |  | t j ƒ } t |  d d d | ƒ} | j d d k rµ d } n  | rÑ | j d } d } n | j d } d } | d  k r| d k rd } qd } n  t	 | | ƒ }	 |	 d k rCt
 j d t ƒ d }	 n  | d  k	 rt | d d d | ƒ} t | | f | ƒ } n  | | j d	 d | d
 t ƒ } | sÅt | j | j ƒ  ƒ |	 j ƒ  St | | j j ƒ  ƒ |	 j ƒ  Sd  S(   Ns   ddof must be integerR,   i   R)   i    i   s!   Degrees of freedom <= 0 for sliceg        R:   t   keepdims(   R'   R›   RK   R   R.   R/   t   float64R-   R]   Rº   t   warningst   warnt   RuntimeWarningR   t   meanR€   R{   t   TR|   t   squeeze(
   RP   t   yt   rowvart   biast   ddofR)   t   Xt   NR:   t   fact(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   cov›  s>    					  c         C` sl   t  |  | | ƒ } | j d k r) | | St | ƒ } | j | j d d f ƒ } t | ƒ } | | | j S(   Ni    i   (    (   Rù   R]   R   t   reshapeR   Rð   (   R+   Rò   Ró   RÄ   RI   t   sqr_d(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   corrcoefÌ  s    c         C` s   |  j  t j d | d |  j ƒS(   Nt   decimalsR)   (   R   R.   t   roundR)   (   R1   Rý   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyRþ   ×  s    c      	   C` s‡  | d	 k	 } | d	 k	 } t j |  ƒ } d | j f g } | rX | j d t j f ƒ n  | rw | j d t j f ƒ n  | r– | j d t j f ƒ n  t j | j d | ƒ} | | d <| rã t j t	 | ƒ d t j ƒ| d <n  | sï | rƒx‘ t
 | d ƒ D]| \ }	 }
 |  |
 k } | rJ| | j d t d | d |	 |	 d !ƒ n  | r | | j d t d | d |	 |	 d !ƒ q q Wn  | S(
   sž  
    Helper/wrapper function for :func:`numpy.unique`.

    Uses :func:`numpy.unique` to find the unique values for the array chunk.
    Given this chunk may not represent the whole array, also take the
    ``indices`` and ``counts`` that are in 1-to-1 correspondence to ``ar``
    and reduce them in the same fashion as ``ar`` is reduced. Namely sum
    any counts that correspond to the same value and take the smallest
    index that corresponds to the same value.

    To handle the inverse mapping from the unique values to the original
    array, simply return a NumPy array created with ``arange`` with enough
    values to correspond 1-to-1 to the unique values. While there is more
    work needed to be done to create the full inverse mapping for the
    original array, this provides enough information to generate the
    inverse mapping in Dask.

    Given Dask likes to have one array returned from functions like
    ``blockwise``, some formatting is done to stuff all of the resulting arrays
    into one big NumPy structured array. Dask is then able to handle this
    object and can split it apart into the separate results on the Dask side,
    which then can be passed back to this function in concatenated chunks for
    further reduction or can be return to the user to perform other forms of
    analysis.

    By handling the problem in this way, it does not matter where a chunk
    is in a larger array or how big it is. The chunk can still be computed
    on the same way. Also it does not matter if the chunk is the result of
    other chunks being run through this function multiple times. The end
    result will still be just as accurate using this strategy.
    t   valuesR   t   inverset   countsR)   Rê   RH   i   N(   R'   R.   t   uniqueR)   R2   t   intpR   R]   R   R3   R`   R^   R€   Rn   (   t   arR   R  t   return_inverset   return_indext   return_countst   uRs   Rx   Re   t   vRP   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   _unique_internalÜ  s,    !
%,3c         C` sy  |  j  ƒ  }  |  d g } d |  j f g } | r | j t |  j d d t j d |  j d ƒd g ƒ | j d t j f ƒ n | j d  d  g ƒ | rê | j t
 |  j d f d t j d |  j d ƒd g ƒ | j d t j f ƒ n | j d  d  g ƒ t t d d | d t | Œ} t d	 „  | j Dƒ ƒ | _ | d g } | r^| j | d ƒ n | j d  ƒ | r…| j | d ƒ n | j d  ƒ d
 | j } i t f t d „  | Dƒ ƒ | f | d f 6}	 d |  j f g } | r| j d t j f ƒ n  | r | j d t j f ƒ n  | r?| j d t j f ƒ n  g  | D] }
 t |
 d ƒ rF|
 ^ qF} t j | |	 d | ƒ} t j f f } t | | | | ƒ } | d g } | rÊ| j | d ƒ n  | r0|  d  d  … d  f | d d  d  d  … f k j t j ƒ } | j | | d j d d ƒ ƒ n  | rJ| j | d ƒ n  t | ƒ d k ri| d } n t | ƒ } | S(   NRe   Rÿ   i    R)   R   R   R  R  c         s` s%   |  ] } t  j f t | ƒ Vq d  S(   N(   R.   RÑ   R3   (   R9   RÄ   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>9  s    s   unique-aggregate-c         s` s9   |  ]/ } t  | d  ƒ r- t j | j ƒ  f n | Vq d S(   RÏ   N(   t   hasattrR.   R   RÏ   (   R9   t   o(    (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>S  s   R   RÏ   RÎ   R:   i   (   R}   R)   t   extendR   R]   R.   R  R   R2   R'   R   R!   R
  R   R<   t   _chunksR   R  R   RÐ   RÑ   R   R*   Rn   R3   (   R  R  R  R  R0   t	   out_dtypeRH   t	   out_partsR   RÔ   R  RÎ   RÕ   R   Rz   t   mtches(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyR    sl    &
)
	(<$c         C` s9   t  j |  j ƒ  | d | ƒ} | j |  j d | j ƒ S(   Nt   assume_uniquei   (   i   (   R.   t   in1dR}   Rú   R]   R(   (   t   elementt   test_elementsR  Rÿ   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   _isin_kernel€  s    	t   isinc         ` s³   t  ˆ  ƒ ‰  t  | ƒ } t t ˆ  j ƒ ƒ } t ‡  f d †  t | j ƒ Dƒ ƒ } t t | | ˆ  | | | d d „  | Dƒ d t d | ƒ} | j d | ƒ } | r¯ | } n  | S(   Nc         3` s   |  ] } | ˆ  j  Vq d  S(   N(   R(   (   R9   Re   (   R  (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>‹  s    t   adjust_chunksc         S` s   i  |  ] } d  „  | “ q S(   c         S` s   d S(   Ni   (    (   RË   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyRX   “  RY   (    (   R9   R:   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pys
   <dictcomp>“  s   	 R)   R  R:   (   R   R<   RE   R(   R!   R  t   boolt   any(   R  R  R  t   invertt   element_axest	   test_axesRè   Rz   (    (   R  s2   lib/python2.7/site-packages/dask/array/routines.pyR  †  s$    %	
c         C` s£  |  } | d  k rN t | ƒ } t | t ƒ s< t d ƒ ‚ n  | f } d } nV y t | ƒ Wn t k
 rx | f } n Xy t | ƒ Wn t k
 r£ | f } n Xt | ƒ t | ƒ k rË t d ƒ ‚ n  x¿ t | | ƒ D]® \ } } | } | | j | ;} | j	 t
 d  ƒ g } | j	 t
 d  ƒ g } t
 | d  ƒ | | <t
 d  | ƒ | | <t | ƒ } t | ƒ } t | | | | g d | ƒ} qÛ W| j |  j ƒ } | S(   NsA   Expect `shift` to be an instance of Integral when `axis` is None.i    s,   Must have the same number of shifts as axes.R:   (   i    (   R'   R}   Rj   R   R—   R3   RK   Rl   R]   R(   RM   R<   R   Rú   (   R-   t   shiftR:   Rz   Re   Rh   t   sl1t   sl2(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   rollž  s<    		$c         C` s   |  j  d ƒ S(   Niÿÿÿÿ(   iÿÿÿÿ(   Rú   (   R-   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyR}   Î  s    c         ` s³   ˆ d  k r. t d „  t ˆ  j ƒ Dƒ ƒ ‰ n t ˆ t ƒ sI ˆ f ‰ n  t ‡  f d †  ˆ Dƒ ƒ rt t d ƒ ‚ n  t ˆ ˆ  j ƒ ‰ t ‡ f d †  t ˆ  j ƒ Dƒ ƒ } ˆ  | S(   Nc         s` s'   |  ] \ } } | d  k r | Vq d S(   i   N(    (   R9   Re   RI   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>Ö  s    c         3` s"   |  ] } ˆ  j  | d  k Vq d S(   i   N(   R]   (   R9   Re   (   R1   (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>Ú  s    s,   cannot squeeze axis with size other than onec         3` s3   |  ]) \ } } | ˆ  k r! d  n	 t  d ƒ Vq d S(   i    N(   RM   R'   (   R9   Re   Rh   (   R:   (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>ß  s    (	   R'   R<   R`   R]   Rj   R  RK   R   R(   (   R1   R:   RQ   (    (   R1   R:   s2   lib/python2.7/site-packages/dask/array/routines.pyRñ   Ó  s    "%c         ` sÎ   t  ˆ ƒ j t ƒ ‰ t  | ƒ } ˆ j d k r? t d ƒ ‚ n  ˆ  d  k r` | j ƒ  } d ‰  n  t ˆ  | j ƒ ‰  | t ‡  ‡ f d †  t	 | j ƒ Dƒ ƒ } | t ‡  ‡ f d †  t	 | j ƒ Dƒ ƒ } | S(   Ni   s!   Condition must be one dimensionali    c         3` s<   |  ]2 } | ˆ  k r* t  d  t ˆ ƒ ƒ n	 t  d  ƒ Vq d  S(   N(   RM   R'   R3   (   R9   Re   (   R:   t	   condition(    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>ò  s   c         3` s-   |  ]# } | ˆ  k r ˆ n	 t  d  ƒ Vq d  S(   N(   RM   R'   (   R9   Re   (   R:   R"  (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>÷  s   (
   R   R*   R  R(   RK   R'   R}   R   R<   RE   (   R"  R1   R:   (    (   R:   R"  s2   lib/python2.7/site-packages/dask/array/routines.pyt   compressä  s    	c         C` s:   t  |  ƒ j t ƒ }  t  | ƒ } t |  j ƒ  | j ƒ  ƒ S(   N(   R   R*   R  R#  R}   (   R"  R‰   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   extractþ  s    c         C` sc   t  | |  j ƒ } t |  t j ƒ rC t | t ƒ rC t |  | | ƒ S|  t d  ƒ f | | f Sd  S(   N(	   R   R(   Rj   R.   t   ndarrayR   t   _take_dask_array_from_numpyRM   R'   (   R1   R   R:   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   take  s    !c         ` sX   t  ˆ  t j ƒ s t ‚ t  | t ƒ s- t ‚ | j ‡  ‡ f d †  d | j d ˆ  j ƒS(   Nc         ` s   t  j ˆ  |  ˆ ƒ S(   N(   R.   R'  (   t   block(   R1   R:   (    s2   lib/python2.7/site-packages/dask/array/routines.pyRX     RY   R   R)   (   Rj   R.   R%  t   AssertionErrorR   R   R   R)   (   R1   R   R:   (    (   R1   R:   s2   lib/python2.7/site-packages/dask/array/routines.pyR&    s
    	c         C` s%   t  t t j d | ƒ|  d |  j ƒS(   NRý   R)   (   R   R   R.   t   aroundR)   (   R+   Rý   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyR*    s    c         C` s"   d d  l  } t j | j |  ƒ ƒ S(   Ni    (   t   pandasR.   R   t   isnull(   Rÿ   t   pd(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   _asarray_isnull  s    c         C` s   d d l  } t t |  d d ƒS(   s    pandas.isnull for dask arrays i    NR)   R  (   R+  R   R.  (   Rÿ   R-  (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyR,  "  s    c         C` s   t  |  ƒ S(   s     pandas.notnull for dask arrays (   R,  (   Rÿ   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   notnull)  s    gñhãˆµøä>g:Œ0âŽyE>c         C` s7   t  t j d | d | d | ƒ} t | |  | d d ƒS(   Nt   rtolt   atolt	   equal_nanR)   R  (   R   R.   t   iscloseR   (   t   arr1t   arr2R0  R1  R2  R˜   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyR3  .  s    !c      	   C` s%   t  |  | d | d | d | ƒj ƒ  S(   NR0  R1  R2  (   R3  R?   (   R4  R5  R0  R1  R2  (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   allclose4  s    c         G` s   t  j |  | ƒ S(   N(   R.   t   choose(   R1   t   choices(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   variadic_choose9  s    c         C` s   t  t |  | Œ S(   N(   R   R9  (   R1   R8  (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyR7  =  s    c         C` s   t  t j |  ƒ ƒ S(   N(   R  R.   t   count_nonzero(   R	  (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   _isnonzero_vecB  s    t   otypesc         C` s[   y& t  j t ƒ  d |  j ƒj t ƒ Wn! t k
 rI |  j t d t ƒSX|  j t ƒ Sd  S(   NR)   (	   R.   R_   R<   R)   R*   R  RK   R   R;  (   R1   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt	   isnonzeroI  s
    &c         C` s¥   t  |  ƒ }  t |  ƒ j ƒ  } t |  j d t j d |  j ƒ} | j d k rŒ t	 g  t
 t | ƒ ƒ D] } | | j ƒ  ^ qd d d ƒ} n  t | | d d ƒ} | S(   NR)   R   i   R:   i    (   R   R=  R   R   R]   R.   R  R   R(   R    RE   R3   R}   R#  (   R1   t   nzRG   Re   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   argwhereX  s    !>c         C` sÖ   | d  k | d  k k r' t d ƒ ‚ n  | d  k rI | d  k rI t |  ƒ St j |  ƒ r¼ t | | ƒ } t | ƒ } t | ƒ } t | j | j ƒ } |  r  | n | } t	 | | ƒ j
 | ƒ St t j |  | | ƒ Sd  S(   Ns1   either both or neither of x and y should be given(   R'   RK   t   nonzeroR.   R½   R/   R   R"   R]   R$   R*   R   t   where(   R"  R+   Rò   R)   R]   RH   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyRA  f  s    
c         C` s(   t  t |  ƒ ƒ j t j ƒ j d | ƒ S(   NR:   (   R=  R   R*   R.   R  Rn   (   R1   R:   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyR:  z  s    c         C` s&   t  t |  ƒ j ƒ  ƒ d  d  … d f S(   Ni    (   R?  R   R}   (   R1   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   flatnonzero  s    c         ` sM   t  |  ƒ ‰  ˆ  j d k rB t ‡  f d †  t ˆ  j d ƒ Dƒ ƒ Sˆ  f Sd  S(   Ni   c         3` s%   |  ] } ˆ  d  d  … | f Vq d  S(   N(    (   R9   Re   (   RG   (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>ˆ  s    (   R?  R(   R<   RE   R]   (   R1   (    (   RG   s2   lib/python2.7/site-packages/dask/array/routines.pyR@  „  s    'c         O` s+   t  j |  t | ƒ | d | d | d Ž S(   Nt   funclistt	   func_argst   func_kw(   R.   t	   piecewiseRD   (   R+   t   condlistR”   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   _int_piecewise  s    c         C` s   t  j t  j |  |  ƒ S(   N(   R.   R    t   unravel_index(   R   t   func_kwargs(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   _unravel_index_kernel”  s    t   Cc         C` s}   | rc |  j  rc t |  j t d t j d t | ƒ f f |  j d d d i | d 6| d 6ƒƒ } n t d „  | Dƒ ƒ } | S(	   NR)   R   R’   i    RJ  t   dimst   orderc         s` s*   |  ]  } t  d d t j d d ƒVq d S(   i    R)   R   i   N(   i    (   R   R.   R  (   R9   Re   (    (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>¤  s    (   t   sizeR<   R   RK  R.   R  R3   R   (   R   RM  RN  t   unraveled_indices(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyRI  ˜  s    		c         O` s1   t  t |  d |  j d d d | d | d | | ŒS(   NR)   R   RF  RC  RD  RE  (   R   RH  R)   (   R+   RG  RC  R0   t   kw(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyRF  ª  s    	c   	      ` s+  ˆ r? t  ‡ f d †  ˆ  j ƒ  Dƒ ƒ r? d } t | ƒ ‚ n  d t j ˆ ƒ k ri t t ˆ j ƒ ‰ n  d t ˆ ˆ ˆ  ˆ ƒ ‰ ‡  ‡ ‡ ‡ f d †  t	 ˆ j
 ƒ  ƒ Dƒ } t ‡  f d †  t ˆ j ƒ Dƒ ƒ } ˆ t j d
 ˆ j d ˆ j ƒƒ j } t j ˆ | d	 ˆ g ƒ} t | ˆ | d | ƒS(   Nc         3` s9   |  ]/ \ } } ˆ  j  | D] } | | d  k Vq q d S(   i    N(   R   (   R9   Re   t   divt   bd(   R+   (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>¸  s    	s6   Coarsening factor does not align with block dimensionst   dasks   coarsen-c         ` s6   i  |  ], } t  j ˆ | ˆ  ˆ f ˆ f | d  “ q S(   i   (   R   t   coarsen(   R9   RV   (   RJ   R   t	   reductiont   trim_excess(    s2   lib/python2.7/site-packages/dask/array/routines.pys
   <dictcomp>Á  s   	c         3` s4   |  ]* \ ‰  } t  ‡ ‡  f d  †  | Dƒ ƒ Vq d S(   c         3` s+   |  ]! } t  | ˆ  j ˆ d  ƒ ƒ Vq d S(   i   N(   R›   Rµ   (   R9   RS  (   RJ   Re   (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>Ã  s    N(   R<   (   R9   t   bds(   RJ   (   Re   s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>Ã  s   i   R)   RÎ   (   i   (   R?   t   itemsRK   t   inspectt   getfilet   getattrR.   t   __name__R   R   RÏ   R<   R`   R   R   R(   R)   R   RÐ   R   (	   RV  R+   RJ   RW  t   msgRÔ   R   Rs   RÕ   (    (   RJ   R   RV  RW  R+   s2   lib/python2.7/site-packages/dask/array/routines.pyRU  µ  s    #(c   
      C` s‡   t  d g | d g g ƒ } g  t d | ƒ D] \ } } t | | ƒ ^ q+ } t d ƒ f | } g  | D] } |  | | f ^ qf }	 |	 S(   s®    Split an array into a list of arrays (using slices) at the given breaks

    >>> split_at_breaks(np.arange(6), [3, 5])
    [array([0, 1, 2]), array([3, 4]), array([5])]
    i   N(   R   R'   R   RM   (
   R-   t   breaksR:   t   padded_breaksRe   R†   t   slicest   presliceRh   t   split_array(    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   split_at_breaksË  s
    1$c         ` so  t  ˆ  |  j ƒ ‰  t ˆ t ƒ rC t j ˆ j |  j ˆ  ƒ Œ  ‰ n  t j ˆ ƒ ‰ ˆ j d k } | ry t j	 ˆ ƒ ‰ n  t j
 ˆ d k  ˆ |  j ˆ  ˆ ƒ ‰ t j ˆ ƒ d k  j ƒ  rÉ t d ƒ ‚ n  t |  t j ˆ ƒ ˆ  ƒ } t | d d ƒ d k rƒd t | ƒ } t | d t | ƒ ƒ } t i | | f 6| d d d | ƒ} t ‡  ‡ f d †  t |  j ƒ Dƒ ƒ } t | | ƒ } n$ | r§| t d  ƒ f ˆ  d } n  t ‡  f d †  t t |  j | j ƒ ƒ Dƒ ƒ }	 | j |	 ƒ } t j ˆ ƒ d	  }
 t j |
 |
 d k ƒ } t | | ˆ  ƒ } t t | | g ƒ ƒ } g  | D] } | j rD| ^ qD} t  | d
 ˆ  ƒS(   Ni    s9   da.insert only implemented for monotonic ``obj`` argumentR(   s   values-R)   R   c         3` s3   |  ]) \ } } ˆ  | k r' t  ˆ ƒ n | Vq d  S(   N(   R3   (   R9   Rœ   Rh   (   R:   t   obj(    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>ò  s   c         3` s3   |  ]) \ } \ } } ˆ  | k r' | n | Vq d  S(   N(    (   R9   Rœ   t   arr_bdt	   values_bd(   R:   (    s2   lib/python2.7/site-packages/dask/array/routines.pys	   <genexpr>ø  s   iÿÿÿÿR:   (    (   N(!   R   R(   Rj   RM   R.   R   R   R]   R   R8   RA  RŸ   R  R¾   Rd  R  R\  R   R\   R   R<   R`   R$   R'   Rl   R   R“   RÊ   R¿   RD   R	   t   nbytesR   (   R‰   Re  Rÿ   R:   t
   scalar_objt	   split_arrR   R)   t   values_shapet   values_chunksR  t   values_breakst   split_valuest   interleavedRe   (    (   R:   Re  s2   lib/python2.7/site-packages/dask/array/routines.pyRb   Ø  s>    "&%"c   
      C` sö  t  |  ƒ }  | d  k rF |  j | ƒ } | j j |  j | j ƒ } nkt  | ƒ } t |  j j t j t j	 f ƒ rŽ t
 |  j | j d ƒ } n t
 |  j | j ƒ } |  j | j k rM| d  k rÐ t d ƒ ‚ n  | j d k rî t d ƒ ‚ n  | j d |  j | k rt d ƒ ‚ n  t | |  j d d | j ƒ } | j d | ƒ } n  | rwd d l m }	 | |	 |  ƒ } n  | j d	 | d
 | ƒ } t |  | d
 | ƒj | ƒ | } | rî| j | j k rät | | j ƒ j ƒ  } n  | | f S| Sd  S(   Nt   f8s;   Axis must be specified when shapes of a and weights differ.i   s8   1D weights expected when shapes of a and weights differ.i    s5   Length of weights not compatible with specified axis.iÿÿÿÿ(   t   getmaskarrayR:   R)   (   i   (   R   R'   Rï   R)   R\   RO  R¸   R.   t   integert   bool_R/   R]   R—   R(   RK   R$   RF   t   maRq  Rn   R   t   copy(
   R1   R:   RÍ   t   returnedt	   is_maskedt   avgt   sclt   wgtt   result_dtypeRq  (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   _average  s<    !!"
c         C` s   t  |  | | | d t ƒS(   NRw  (   R|  R   (   R1   R:   RÍ   Rv  (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   average7  s    (ˆ   t
   __future__R    R   R   RZ  R³   Rì   t	   functoolsR   R   t   numbersR   R   t   numpyR.   t   toolzR   R   R	   t   compatibilityR
   t   coreR   t   baseR   t   highlevelgraphR   t   utilsR   RY   R   t   creationR   R   R   R   R   R   t   wrapR   t   ufuncR   R   R   R   R   R   R   R   R   R    R!   R"   R#   R$   R%   t   einsumfuncsR&   R-   R'   R/   R6   R7   R8   R>   R   R@   RA   RF   RL   RR   RS   RT   t   alphabett   uppert   ALPHABETRi   Rd   R{   R~   R‚   R‡   RŽ   Rˆ   R™   Rš   RŸ   R¤   R¬   R¥   R›   RÉ   RÊ   RØ   RÚ   Rù   Rü   Rþ   R
  R  R  R\  R  R!  R}   Rñ   R#  R$  R'  R&  R*  R.  R,  R/  R3  R6  R9  R7  R;  t	   vectorizeR  R=  R?  RA  R:  RB  R@  RH  RK  RI  RF  RU  Rd  Rb   R|  R}  (    (    (    s2   lib/python2.7/site-packages/dask/array/routines.pyt   <module>   sî   "X		#'
	
#	N e0
=f/												/0