ó
|£*^c           @   s  d  Z  d d l Z d d l Z y d d l m Z Wn, e k
 r` d d l Z e j d „ Z n Xd d l Z	 d j
 d d d g ƒ Z d	 „  Z d
 „  Z d d „ Z d „  Z e j d d k Z e rÑ d „  Z n	 d „  Z d „  Z d „  Z d d „ Z d d „ Z d d „ Z d S(   sÇ   
Miscellaneous Helpers for NetworkX.

These are not imported into the base networkx namespace but
can be accessed, for example, as

>>> import networkx
>>> networkx.utils.is_string_like('spam')
True
iÿÿÿÿN(   t
   accumulatec         c   s_   t  |  ƒ } y t | ƒ } Wn t k
 r0 d  SX| Vx" | D] } | | | ƒ } | Vq= Wd  S(   N(   t   itert   nextt   StopIteration(   t   iterablet   funct   itt   totalt   element(    (    sg   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/utils/misc.pyR       s    s   
s   Aric Hagberg (hagberg@lanl.gov)s   Dan Schult(dschult@colgate.edu)s    Ben Edwards(bedwards@cs.unm.edu)c         C   s+   y |  d Wn t  t f k
 r& t SXt S(   s   Check if obj is string.t    (   t	   TypeErrort
   ValueErrort   Falset   True(   t   obj(    (    sg   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/utils/misc.pyt   is_string_like3   s
    c         C   s0   t  |  d ƒ r t Sy t |  ƒ Wn t SXt S(   s:    Return True if obj is iterable with a well-defined len().t   __iter__(   t   hasattrR   t   lenR   (   R   (    (    sg   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/utils/misc.pyR   ;   s     c         C   s†   t  |  ƒ s t |  ƒ r |  S| d k r2 g  } n  xD |  D]< } t  | ƒ sX t | ƒ rh | j | ƒ q9 t | | ƒ q9 W|  j | ƒ S(   s@    Return flattened version of (possibly nested) iterable object. N(   R   R   t   Nonet   appendt   flattent	   __class__(   R   t   resultt   item(    (    sg   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/utils/misc.pyR   D   s    	c         C   s;   t  |  t ƒ s t Sx! |  D] } t  | t ƒ s t Sq Wt S(   s(    Return True if list is a list of ints. (   t
   isinstancet   listR   t   intR   (   t   intlistt   i(    (    sg   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/utils/misc.pyt   is_list_of_intsQ   s      i    i   c         C   s*   t  |  t ƒ r |  St t |  ƒ d ƒ Sd S(   s&   Return the string representation of t.s   unicode-escapeN(   R   t   unicodet   str(   t   x(    (    sg   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/utils/misc.pyt   make_strZ   s    
c         C   s
   t  |  ƒ S(   s&   Return the string representation of t.(   R    (   R!   (    (    sg   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/utils/misc.pyR"   i   s    c           C   s   t  t j ƒ  ƒ S(   s    Generate a unique node label.(   R    t   uuidt   uuid1(    (    (    sg   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/utils/misc.pyt   generate_unique_noden   s    c         C   s_   d d l  m } i d g d 6d g d 6d d d	 d
 g d 6} | t j |  g } | | ƒ d S(   s“   Opens `filename` using system's default program.

    Parameters
    ----------
    filename : str
        The path of the file to be opened.

    iÿÿÿÿ(   t   callt   opent   darwins   xdg-opent   linux2s   cmd.exes   /Ct   startR	   t   win32N(   t
   subprocessR&   t   syst   platform(   t   filenameR&   t   cmdst   cmd(    (    sg   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/utils/misc.pyt   default_openerr   s    	
c         C   s9   y t  |  | ƒ SWn! t t f k
 r4 t |  | ƒ SXd S(   sP   Convert a dictionary of dictionaries to a numpy array
    with optional mapping.N(   t   dict_to_numpy_array2t   AttributeErrorR
   t   dict_to_numpy_array1(   t   dt   mapping(    (    sg   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/utils/misc.pyt   dict_to_numpy_array„   s    c         C   s  d d l  } | d k r~ t |  j ƒ  ƒ } x- |  j ƒ  D] \ } } | j | j ƒ  ƒ q7 Wt t | t t	 | ƒ ƒ ƒ ƒ } n  t	 | ƒ } | j
 | | f ƒ } xg | j ƒ  D]Y \ } }	 xJ | j ƒ  D]< \ }
 } y |  | |
 | |	 | f <WqÅ t k
 r qÅ XqÅ Wq¬ W| S(   sY   Convert a dictionary of dictionaries to a 2d numpy array
    with optional mapping.

    iÿÿÿÿN(   t   numpyR   t   sett   keyst   itemst   updatet   dictt   zipt   rangeR   t   zerost   KeyError(   R6   R7   R9   t   st   kt   vt   nt   at   k1R   t   k2t   j(    (    sg   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/utils/misc.pyR3   Ž   s    $c         C   s¢   d d l  } | d k rN t |  j ƒ  ƒ } t t | t t | ƒ ƒ ƒ ƒ } n  t | ƒ } | j | ƒ } x2 | j	 ƒ  D]$ \ } } | | } |  | | | <qv W| S(   sT   Convert a dictionary of numbers to a 1d numpy array
    with optional mapping.

    iÿÿÿÿN(
   R9   R   R:   R;   R>   R?   R@   R   RA   R<   (   R6   R7   R9   RC   RF   RG   RH   R   (    (    sg   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/utils/misc.pyR5   £   s    $
(   t   __doc__R-   R#   t	   itertoolsR    t   ImportErrort   operatort   addt   networkxt   nxt   joint
   __author__R   R   R   R   R   t   version_infot   PY2R"   R%   R2   R8   R3   R5   (    (    (    sg   /home/gitlab-runner/builds/8480fa44/0/bergerc/fluidmanager-web/art-framework/bin/networkx/utils/misc.pyt   <module>
   s0   								
