ó
¦–Õ\c           @` sv  d  d l  m Z m Z m 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 m Z d d l m Z d d l m Z y e
 j Z WnS e k
 rü y  e
 j d  g ƒ j d d	 ƒ Wqý e k
 rø Z e e ƒ Z qý Xn Xd
 „  Z e d „ Z d „  Z d „  Z d „  Z e d „ Z  e e d „ Z! e j" d „ Z# d „  Z$ d „  Z% e% ƒ  Z& d S(   i    (   t   absolute_importt   divisiont   print_functionN(   t   frequenciest   concati   (   t   Arrayi   (   t   HighLevelGrapht   axisi   c         C` s*   d t  t |  ƒ ƒ k r" |  j ƒ  S|  Sd  S(   Nt   cupy(   t   strt   typet   get(   t   x(    (    s/   lib/python2.7/site-packages/dask/array/utils.pyt   normalize_to_array   s    
c         K` s”   t  |  ƒ }  t  | ƒ } t |  d d  ƒ d k rI t j |  | d | | S| r„ |  j | j k oƒ t d „  t |  j | j ƒ Dƒ ƒ S|  | k j ƒ  S(   Nt   dtypet   Ot	   equal_nanc         s` s?   |  ]5 \ } } t  j | ƒ r- t  j | ƒ n	 | | k Vq d  S(   N(   t   npt   isnan(   t   .0t   at   b(    (    s/   lib/python2.7/site-packages/dask/array/utils.pys	   <genexpr>&   s   (	   R   t   getattrt   NoneR   t   allcloset   shapet   allt   zipt   flat(   R   R   R   t   kwargs(    (    s/   lib/python2.7/site-packages/dask/array/utils.pyR      s    	c         C` s1   d „  } t  |  j d | ƒt  | j d | ƒk S(   Nc         S` s'   t  |  t ƒ r |  d d d f S|  Sd  S(   Niÿÿÿÿ(   t
   isinstanceR	   (   t   k(    (    s/   lib/python2.7/site-packages/dask/array/utils.pyt   key,   s    R    (   t   sortedt   dask(   R   R   R    (    (    s/   lib/python2.7/site-packages/dask/array/utils.pyt	   same_keys+   s    	c         C` s   |  j  o d |  j  k S(   Ni    (   R   (   R   (    (    s/   lib/python2.7/site-packages/dask/array/utils.pyt
   _not_empty4   s    c         C` sz   t  |  t ƒ s d St d „  |  j Dƒ ƒ s2 t ‚ t t |  j j ƒ  ƒ ƒ } d „  | j	 ƒ  Dƒ } | sv t | ƒ ‚ d S(   s4    Check that graph is well named and non-overlapping Nc         s` s$   |  ] } t  | t t f ƒ Vq d  S(   N(   R   t   tupleR	   (   R   R   (    (    s/   lib/python2.7/site-packages/dask/array/utils.pys	   <genexpr>=   s    c         S` s+   i  |  ]! \ } } | d  k r | | “ q S(   i   (    (   R   R   t   v(    (    s/   lib/python2.7/site-packages/dask/array/utils.pys
   <dictcomp>?   s   	 (
   R   R   R   t   layerst   AssertionErrorR   R   t   dictst   valuest   items(   t   dskt   freqst   non_one(    (    s/   lib/python2.7/site-packages/dask/array/utils.pyt
   _check_dsk8   s    c         C` s„   x} t  |  | ƒ D]l \ } } t j | ƒ s: t j | ƒ rj | r| t j | ƒ t j | ƒ k sg t ‚ q| q | | k s t ‚ q Wd  S(   N(   R   t   mathR   R(   (   R   R   t	   check_nant   aat   bb(    (    s/   lib/python2.7/site-packages/dask/array/utils.pyt   assert_eq_shapeC   s
    *c         K` sA  |  } | } t  |  t ƒ rò |  j d  k	 s0 t ‚ |  j } | rO t |  j ƒ n  |  j d d ƒ }  t |  d ƒ r |  j	 ƒ  }  n  t |  d ƒ s¦ t
 j |  d d ƒ}  n  t |  ƒ rÍ |  j | j k sÍ t ‚ n  | r+t | j |  j d t ƒq+n9 t |  d ƒ st
 j |  d d ƒ}  n  t |  d d  ƒ } t  | t ƒ r| j d  k	 sOt ‚ | j } | rnt | j ƒ n  | j d d ƒ } t | d ƒ s§t
 j | d d ƒ} n  t | d ƒ rÅ| j	 ƒ  } n  t | ƒ rì| j | j k sìt ‚ n  | rJt | j | j d t ƒqJn9 t | d ƒ s8t
 j | d d ƒ} n  t | d d  ƒ } t | ƒ t | ƒ k r²t j t | ƒ j ƒ  t | ƒ j ƒ  ƒ }	 t d t j t j j |	 ƒ ƒ ‚ n  y8 |  j | j k sÍt ‚ t |  | |  såt ‚ t SWn t k
 rýn X|  | k }
 t  |
 t
 j ƒ r1|
 j ƒ  s=t ‚ n |
 s=t ‚ t S(   Nt	   schedulert   synct   todenseR   R   R1   s   string repr are different(   R   R   R   R   R(   R/   R"   t   computet   hasattrR7   R   t   arrayR$   R4   R   t   FalseR   R	   t   difflibt   ndifft
   splitlinest   ost   linesept   joinR   t   Truet	   TypeErrort   ndarrayR   (   R   R   t   check_shapet   check_graphR   t
   a_originalt
   b_originalt   adtt   bdtt   difft   c(    (    s/   lib/python2.7/site-packages/dask/array/utils.pyt	   assert_eqL   sf    		*c         ` s:   t  ‡  f d †  | Dƒ ƒ r/ t j ˆ  d | ƒSd „  Sd S(   sk   Like functools.wraps, but safe to use even if wrapped is not a function.

    Only needed on Python 2.
    c         3` s   |  ] } t  ˆ  | ƒ Vq d  S(   N(   R9   (   R   t   attr(   t   wrapped(    s/   lib/python2.7/site-packages/dask/array/utils.pys	   <genexpr>   s    t   assignedc         S` s   |  S(   N(    (   R   (    (    s/   lib/python2.7/site-packages/dask/array/utils.pyt   <lambda>“   t    N(   R   t	   functoolst   wraps(   RO   RP   (    (   RO   s/   lib/python2.7/site-packages/dask/array/utils.pyt
   safe_wraps‹   s    c         ` s£   t  |  t t f ƒ r/ t ‡  f d †  |  Dƒ ƒ St  |  t j ƒ sT t d |  ƒ ‚ n  |  ˆ  k  sm |  ˆ  k r† t d |  ˆ  f ƒ ‚ n  |  d k  rŸ |  ˆ  7}  n  |  S(   s%    Validate an input to axis= keywords c         3` s   |  ] } t  | ˆ  ƒ Vq d  S(   N(   t   validate_axis(   R   t   ax(   t   ndim(    s/   lib/python2.7/site-packages/dask/array/utils.pys	   <genexpr>™   s    s%   Axis value must be an integer, got %ss2   Axis %d is out of bounds for array of dimension %di    (   R   R%   t   listt   numberst   IntegralRC   t	   AxisError(   R   RX   (    (   RX   s/   lib/python2.7/site-packages/dask/array/utils.pyRV   –   s    c          C` sC   d d d „  ƒ  Y}  y t  j |  ƒ  g ƒ SWn t k
 r> t SXd  S(   Nt   Ac           B` s   e  Z d  „  Z RS(   c         _` s   t  S(   N(   RB   (   t   selft   argsR   (    (    s/   lib/python2.7/site-packages/dask/array/utils.pyt   __array_function__¦   s    (   t   __name__t
   __module__R`   (    (    (    s/   lib/python2.7/site-packages/dask/array/utils.pyR]   ¥   s   (    (   R   t   concatenatet
   ValueErrorR;   (   R]   (    (    s/   lib/python2.7/site-packages/dask/array/utils.pyt   _is_nep18_active¤   s
    ('   t
   __future__R    R   R   R<   RS   R0   RZ   R?   t   numpyR   t   toolzR   R   t   coreR   t   highlevelgraphR   R\   t   AttributeErrorR:   t   sumt	   Exceptiont   eR
   R   R;   R   R#   R$   R/   RB   R4   RM   t   WRAPPER_ASSIGNMENTSRU   RV   Re   t   IS_NEP18_ACTIVE(    (    (    s/   lib/python2.7/site-packages/dask/array/utils.pyt   <module>   s6    						?		