ó
’›V]c           @   sQ  d  d l  Z  d  d l Z d  d l 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 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 e f d „  ƒ  YZ d e e f d „  ƒ  YZ d „  Z d e f d „  ƒ  YZ d e f d „  ƒ  YZ d e e f d „  ƒ  YZ d S(   iÿÿÿÿN(   t   debug(   t   evaluator_method_cache(   t   ContextNameMixint   AbstractNameDefinition(   t   GlobalNameFiltert   ParserTreeFiltert
   DictFiltert   MergedFilter(   t   compiled(   t   TreeContext(   t   SubModuleName(   t   contexts_from_qualified_names(   t   create_simple_object(   t
   ContextSett   _ModuleAttributeNamec           B   s)   e  Z d  Z d Z d d „ Z d „  Z RS(   sA   
    For module attributes like __file__, __str__ and so on.
    u   instancec         C   s   | |  _  | |  _ | |  _ d  S(   N(   t   parent_contextt   string_namet   _string_value(   t   selft   parent_moduleR   t   string_value(    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt   __init__   s    		c         C   s„   |  j  d  k	 rq |  j  } |  j j j j j d k rU t | t ƒ rU | j	 d ƒ } n  t
 t |  j j | ƒ g ƒ St j |  j j ƒ S(   Ni   s   utf-8(   R   t   NoneR   t	   evaluatort   environmentt   version_infot   majort
   isinstancet   bytest   encodeR   R   R   t   get_string_context_set(   R   t   s(    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt   infer   s    	N(   t   __name__t
   __module__t   __doc__t   api_typeR   R   R    (    (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyR      s   t
   ModuleNamec           B   s&   e  Z d Z d „  Z e d „  ƒ Z RS(   i   i    c         C   s   | |  _  | |  _ d  S(   N(   t   _contextt   _name(   R   t   contextt   name(    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyR   *   s    	c         C   s   |  j  S(   N(   R'   (   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyR   .   s    (   i   i    (   R!   R"   t	   start_posR   t   propertyR   (    (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyR%   '   s   	c         c   s÷   x |  j  j | ƒ D] } | Vq WxÎ | D]Æ } y t j | ƒ } Wn$ t k
 rh t j d | ƒ q) n Xxƒ | D]{ } t j j t j j	 | | ƒ ƒ rÁ | d k rÁ t
 j d | ƒ rÁ | VqÁ n  | j d ƒ rp | d k rë | d  Vqë qp qp Wq) Wd  S(   Ns"   Not possible to list directory: %st   __pycache__s   \W|^\ds   .pyis   __init__.pyiiüÿÿÿ(   t   compiled_subprocesst   list_module_namest   ost   listdirt   OSErrorR    t   warningt   patht   isdirt   joint   ret   searcht   endswith(   R   t   pathst   nR3   t   dirsR)   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt   iter_module_names3   s    	!t   SubModuleDictMixinc           B   s   e  Z e ƒ  d  „  ƒ Z RS(   c         C   sd   i  } y |  j  } Wn t k
 r& n: Xt |  j | ƒ  ƒ } x! | D] } t |  | ƒ | | <qC W| S(   sf   
        Lists modules in the directory of this module (if this module is a
        package).
        (   t
   py__path__t   AttributeErrorR<   R   R
   (   R   t   namest   methodt   modsR)   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt   sub_modules_dictN   s    (   R!   R"   R   RC   (    (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyR=   M   s   t   ModuleMixinc           B   s˜   e  Z e d
 d
 d  „ Z d „  Z d „  Z d „  Z e e	 ƒ  d „  ƒ ƒ Z
 e d „  ƒ Z e	 ƒ  d „  ƒ Z e d „ Z e	 g  ƒ d „  ƒ Z d	 „  Z RS(   c      	   c   sw   t  t |  j d |  d | d | ƒt |  |  j ƒ ƒ Vt |  j ƒ  ƒ Vt |  j ƒ  ƒ Vx |  j ƒ  D] } | Vqd Wd  S(   NR(   t   until_positiont   origin_scope(	   R   R   R   R   t	   tree_nodeR   RC   t   _module_attributes_dictt   iter_star_filters(   R   t   search_globalRE   RF   t   star_filter(    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt   get_filterse   s    	c         C   s   t  |  j d d ƒ \ } | S(   Nu   typesu
   ModuleType(   R   R   (   R   t   c(    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt   py__class__t   s    c         C   s   t  S(   N(   t   True(   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt	   is_modulex   s    c         C   s   t  S(   N(   t   False(   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt   is_stub{   s    c         C   s   t  |  |  j ƒ S(   N(   R%   t   _string_name(   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyR)   ~   s    c         C   sh   |  j  d k r d St j t j j ƒ f d } t j d | |  j  ƒ } t j d d | j	 d ƒ ƒ Sd S(   s&    This is used for the goto functions. t    i   s%   ([^%s]*?)(%s__init__)?(\.pyi?|\.so)?$s   \.[a-z]+-\d{2}[mud]{0,3}$i   N(
   t   _pathR   R6   t   escapeR/   R3   t   sepR7   t   subt   group(   R   RW   t   r(    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyRS   ƒ   s
    c            s`   d d d g } t  ‡  f d †  | Dƒ ƒ } ˆ  j ƒ  } | d  k	 r\ t ˆ  d | ƒ | d <n  | S(   Nt   __package__R#   R!   c         3   s$   |  ] } | t  ˆ  | ƒ f Vq d  S(   N(   R   (   t   .0R:   (   R   (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pys	   <genexpr>”   s    t   __file__(   t   dictt
   py__file__R   R   (   R   R@   t   dctt   file(    (   R   s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyRH      s    c         c   s/   x( |  j  ƒ  D] } t | j | ƒ ƒ Vq Wd  S(   N(   t   star_importst   nextRL   (   R   RJ   t   star_module(    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyRI   š   s    c      	   C   s´   d d l  m } g  } x— |  j j ƒ  D]† } | j ƒ  r& | |  j d | j ƒ  d d |  d | j ƒj ƒ  } x0 | D]( } t	 | t
 ƒ rs | | j ƒ  7} qs qs W| | 7} q& q& W| S(   Niÿÿÿÿ(   t   Importert   import_patht   module_contextt   level(   t   jedi.evaluate.importsRe   RG   t   iter_importst   is_star_importR   t	   get_pathsRh   t   followR   t   ModuleContextRb   (   R   Re   t   modulest   it   newt   module(    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyRb   ¡   s    	c         C   s   d S(   sÚ   
        A module doesn't have a qualified name, but it's important to note that
        it's reachable and not `None`. With this information we can add
        qualified names on top for all context children.
        (    (    (   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt   get_qualified_namesµ   s    N(   R!   R"   RQ   R   RL   RN   RP   RR   R+   R   R)   RS   RH   RI   Rb   Rs   (    (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyRD   d   s   			
Rn   c           B   se   e  Z d  Z d	 Z e d „ Z d „  Z d „  Z d „  Z	 d „  Z
 d „  Z e d „  ƒ Z d „  Z RS(
   u   modulec         C   sn   t  t |  ƒ j | d d  d | ƒ| |  _ | d  k rC d  |  _ n | j |  _ | |  _ | |  _ | |  _	 d  S(   NR   RG   (
   t   superRn   R   R   t   file_ioRU   R3   t   string_namest
   code_linest
   is_package(   R   R   t   module_nodeRu   Rv   Rw   Rx   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyR   Â   s    			c         C   s8   |  j  d  k	 r% |  j  j d ƒ r% t St t |  ƒ j ƒ  S(   Ns   .pyi(   RU   R   R8   RO   Rt   Rn   RR   (   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyRR   Ñ   s    !c         C   s#   |  j  d  k r d  Sd j |  j  ƒ S(   Nt   .(   Rv   R   R5   (   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt
   py__name__Ù   s    c         C   s&   |  j  d k r d St j j |  j  ƒ S(   s?   
        In contrast to Python's __file__ can be None.
        N(   RU   R   R/   R3   t   abspath(   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyR_   Þ   s    c         C   s   |  j  r |  j S|  j d  S(   Niÿÿÿÿ(   Rx   Rv   (   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt   py__package__ç   s    	c         C   sà   d j  |  j d  ƒ } d } | d | k s< | d | k r¯ t ƒ  } xT |  j j ƒ  D]C } t j j  | |  j j ƒ } t j j	 | ƒ rU | j
 | ƒ qU qU W| r¯ t | ƒ Sn  |  j ƒ  } | d  k	 sÍ t ‚ t j j | ƒ g S(   NRT   i2   s   declare_namespace(__name__)s   extend_path(__path__i    i   (   s   declare_namespace(__name__)s   extend_path(__path__(   R5   Rw   t   setR   t   get_sys_pathR/   R3   R)   R   R4   t   addt   listR_   R   t   AssertionErrort   dirname(   R   t   first_few_linest   optionsR9   R   t   otherRa   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt   _py__path__ì   s     	c         C   s    |  j  r |  j St d ƒ ‚ d S(   sS  
        Not seen here, since it's a property. The callback actually uses a
        variable, so use it like::

            foo.py__path__(sys_path)

        In case of a package, this returns Python's __path__ attribute, which
        is a list of paths (strings).
        Raises an AttributeError if the module is not a package.
        s'   Only packages have __path__ attributes.N(   Rx   R‡   R?   (   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyR>     s    	c         C   s:   d |  j  j |  j |  j j d |  j j d |  j ƒ  f S(   Ns   <%s: %s@%s-%s is_stub=%s>i    (   t	   __class__R!   RS   RG   R*   t   end_posRR   (   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt   __repr__  s    N(   R!   R"   R$   R   R   RQ   R   RR   R{   R_   R}   R‡   R+   R>   RŠ   (    (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyRn   ¾   s   						(   R6   R/   t   jediR    t   jedi.evaluate.cacheR   t   jedi.evaluate.namesR   R   t   jedi.evaluate.filtersR   R   R   R   t   jedi.evaluateR   t   jedi.evaluate.base_contextR	   R
   t   jedi.evaluate.helpersR   t   jedi.evaluate.compiledR   R   R   R%   R<   t   objectR=   RD   Rn   (    (    (    s;   lib/python2.7/site-packages/jedi/evaluate/context/module.pyt   <module>   s"   "	Z