ó
î%![c           @   sÈ   d  Z  d d l Z d d l m Z m Z m Z m Z m Z m Z d d l	 m
 Z
 m Z d d h Z d d „ Z d d „ Z d	 „  Z d
 „  Z e j e j e e ƒ e ƒ e j e j e e ƒ e ƒ d S(   s$   Astroid hooks for typing.py support.iÿÿÿÿN(   t   MANAGERt   UseInferenceDefaultt   extract_nodet   inference_tipt   nodest   InferenceError(   t   Listt   Tuplet
   NamedTuples   typing.NamedTuplec         C   sR  y t  |  j j ƒ  ƒ } Wn t k
 r2 t ‚ n X| j ƒ  d k rN t ‚ n  t |  j ƒ d k rl t ‚ n  t |  j d t	 t
 f ƒ s‘ t ‚ n  g  } xn |  j d j D]\ } t | t	 t
 f ƒ sÌ t ‚ n  t | j ƒ d k rê t ‚ n  | j | j d j ƒ  ƒ q¨ W|  j d j ƒ  } t d i | d 6d j | ƒ d 6ƒ }  |  j d	 | ƒ S(
   s$   Infer a typing.NamedTuple(...) call.s   typing.NamedTuplei   i   i    s(   namedtuple(%(typename)s, (%(fields)s,)) t   typenamet   ,t   fieldst   context(   t   nextt   funct   inferR   R   t   qnamet   lent   argst
   isinstanceR   R   t   eltst   appendt	   as_stringR   t   join(   t   nodeR   R   t   namest   eltR	   (    (    s9   lib/python2.7/site-packages/astroid/brain/brain_typing.pyt   infer_typing_namedtuple   s*    
					!c         C   s}   g  |  j  D]$ } t | t j ƒ r
 | j j ^ q
 } t j d ƒ j d |  j d d j	 | ƒ ƒ } t
 | ƒ }  |  j d | ƒ S(   s%   Infer a subclass of typing.NamedTuplesU   
    from collections import namedtuple
    namedtuple({typename!r}, {fields!r})
    R	   R   R
   R   (   t   bodyR   R   t	   AnnAssignt   targett   namet   textwrapt   dedentt   formatR   R   R   (   R   R   t	   annassignt   annassigns_fieldst   code(    (    s9   lib/python2.7/site-packages/astroid/brain/brain_typing.pyt   infer_typing_namedtuple_class2   s    $	c         C   s   t  |  j ƒ t @S(   sQ   Predicate for class inference tip

    :type node: ClassDef
    :rtype: bool
    (   t   sett	   basenamest   TYPING_NAMEDTUPLE_BASENAMES(   R   (    (    s9   lib/python2.7/site-packages/astroid/brain/brain_typing.pyt   has_namedtuple_baseE   s    c         C   sK   |  j  } t | t j ƒ r( | j d k St | t j ƒ rG | j d k St S(   NR   (   R   R   R   t	   Attributet   attrnamet   NameR   t   False(   R   R   (    (    s9   lib/python2.7/site-packages/astroid/brain/brain_typing.pyt   looks_like_typing_namedtupleN   s    	(   t   __doc__R    t   astroidR    R   R   R   R   R   t   astroid.nodesR   R   R)   t   NoneR   R&   R*   R/   t   register_transformt   Callt   ClassDef(    (    (    s9   lib/python2.7/site-packages/astroid/brain/brain_typing.pyt   <module>   s"   .	 						