ó
’›V]c           @   sš  d  Z  d d l Z d d l Z d d l 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 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 d d l m Z d d l m  Z  e! ƒ  Z" d e f d „  ƒ  YZ# d e	 j$ f d „  ƒ  YZ% d e	 j& f d „  ƒ  YZ' e ƒ  d „  ƒ Z( d „  Z) d „  Z* e d ƒ d „  ƒ Z+ d S(   s    
Used only for REPL Completion.
iÿÿÿÿN(   t   get_cached_code_lines(   t   settings(   t   compiled(   t   underscore_memoization(   t   FileIO(   t
   ContextSett   ContextWrapper(   t   SimpleGetItemNotFound(   t   ModuleContext(   t   evaluator_function_cache(   t   getattr_static(   t   compiled_objects_cachet   ALLOWED_GETITEM_TYPESt   get_api_type(   t   create_cached_compiled_object(   t   to_stubt   MixedObjectc           B   sP   e  Z d  Z d „  Z d „  Z d „  Z d „  Z e d „ Z d „  Z	 d „  Z
 RS(   s¯  
    A ``MixedObject`` is used in two ways:

    1. It uses the default logic of ``parser.python.tree`` objects,
    2. except for getattr calls. The names dicts are generated in a fashion
       like ``CompiledObject``.

    This combined logic makes it possible to provide more powerful REPL
    completion. It allows side effects that are not noticable with the default
    parser structure to still be completeable.

    The biggest difference from CompiledObject to MixedObject is that we are
    generally dealing with Python code and not with C code. This will generate
    fewer special cases, because we in Python you don't have the same freedoms
    to modify the runtime.
    c         C   s/   t  t |  ƒ j | ƒ | |  _ | j |  _ d  S(   N(   t   superR   t   __init__t   compiled_objectt   access_handle(   t   selfR   t   tree_context(    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyR   -   s    	c         o   s   t  |  j |  ƒ Vd  S(   N(   t   MixedObjectFiltert	   evaluator(   R   t   argst   kwargs(    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyt   get_filters2   s    c         C   s   |  j  j ƒ  S(   N(   R   t   get_signatures(   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyR   5   s    c         C   s   t  |  j ƒ p |  j j | ƒ S(   N(   R   t   _wrapped_contextt
   py__call__(   R   t	   arguments(    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyR   :   s    c         C   s-   | t  k r |  j j ƒ  S|  j j | ƒ Sd  S(   N(   t	   _sentinelR   t   get_safe_value(   R   t   default(    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyR!   =   s    c         C   s>   |  j  j j j } t | ƒ t k r4 |  j  j | ƒ St ‚ d  S(   N(   R   R   t   accesst   _objt   typeR   t   py__simple_getitem__R   (   R   t   indext   python_object(    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyR&   C   s    c         C   s    d t  |  ƒ j |  j j ƒ  f S(   Ns   <%s: %s>(   R%   t   __name__R   t   get_repr(   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyt   __repr__I   s    (   R)   t
   __module__t   __doc__R   R   R   R   R    R!   R&   R+   (    (    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyR      s   					t	   MixedNamec           B   sM   e  Z d  Z e d „  ƒ Z e j d „  ƒ Z e d „  ƒ Z e d „  ƒ Z RS(   sC   
    The ``CompiledName._compiled_object`` is our MixedObject.
    c         C   s*   t  |  j ƒ  ƒ } | s d S| d j j S(   Ni    (   i    i    (   t   listt   infert   namet	   start_pos(   R   t   contexts(    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyR2   T   s    c         C   s   d  S(   N(    (   R   t   value(    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyR2   \   s    c            sp   ˆ j  j j ˆ j d d  ƒ} t | ƒ s0 t ‚ d  g } x0 | D]( ‰  t j ‡  ‡ f d †  | Dƒ ƒ } q@ W| S(   NR"   c         3   s`   |  ]V } | d k s$ t | t ƒ r< t ˆ j ˆ  d  | ƒn t t | j ˆ  | ƒ h ƒ Vq d S(   t   parent_contextN(   t   Nonet
   isinstanceR   t   _createt
   _evaluatorR   R   R   (   t   .0t   c(   R#   R   (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pys	   <genexpr>l   s   (	   R5   R   t   getattr_pathst   string_nameR6   t   lent   AssertionErrorR   t	   from_sets(   R   t   access_pathsR3   (    (   R#   R   s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyR0   a   s    			c         C   s   t  t |  j ƒ  ƒ ƒ j S(   N(   t   nextt   iterR0   t   api_type(   R   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyRD   s   s    (	   R)   R,   R-   t   propertyR2   t   setterR   R0   RD   (    (    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyR.   P   s
   R   c           B   s   e  Z e Z RS(    (   R)   R,   R.   t
   name_class(    (    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyR   x   s   c      	   C   s4   |  j  d | d t d t j d t j ƒ j ƒ  } | S(   Nt   patht   cachet
   diff_cachet
   cache_path(   t   parset   TrueR   t   fast_parsert   cache_directoryt   get_root_node(   R   RH   t   module_node(    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyt   _load_module|   s    		c         C   s»   t  j d d k r% t j |  ƒ }  n  t j |  ƒ sŽ t j |  ƒ sŽ t j |  ƒ sŽ t j |  ƒ sŽ t j |  ƒ sŽ t j	 |  ƒ sŽ t j
 |  ƒ r’ |  Sy |  j SWn t k
 r¶ t ‚ n Xd S(   s9   Check if inspect.getfile has a chance to find the source.i    i   N(   t   syst   version_infot   inspectt   unwrapt   ismodulet   isclasst   ismethodt
   isfunctiont   istracebackt   isframet   iscodet	   __class__t   AttributeErrort	   TypeError(   R(   (    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyt   _get_object_to_checkŠ   s    c         C   só  | } y t  | ƒ } t j | ƒ } Wn t k
 r9 d  SX| d  k sY t j j | ƒ r] d  St | ƒ } t	 |  | ƒ } t j
 | ƒ r© t |  j | ƒ } | | | | f Sy | j } Wn t k
 rÊ d  SX| d k rÛ d  S| j ƒ  j | g  ƒ } g  | D]0 }	 |	 j j d k rú |	 j j |	 k rú |	 ^ qú } | s:d  Sy | j }
 |
 j } Wn t k
 rcn< Xg  | D] } | j d | k rk| ^ qk} | rŸ| } n  t |  j | ƒ } | d j } | j d k rãt | ƒ d k rãd  S| | | | f S(   Ns   <lambda>t   funcdeft   classdefi    iÿÿÿÿt   instance(   Rb   Rc   (   Ra   RU   t   getsourcefileR`   R6   t   osRH   t   existsR   RR   RW   R    t   grammarR)   R_   t   get_used_namest   gett   parentR%   R1   t   __code__t   co_firstlinenoR2   R   (   R   R(   t   original_objectRH   t   file_ioRQ   t
   code_linest   name_strt   namest   nt   codet   line_nrR1   t
   line_namest	   tree_node(    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyt   _find_syntax_node_namež   sJ    0	,	!t   mixed_cachec            sË  t  |  | d | o | j ƒ‰  | j j } t |  | ƒ } | d  k r t | ƒ t t t	 f k rm t
 ˆ  h ƒ St ˆ  ƒ } | s±t
 ˆ  h ƒ Sn"| \ } } }	 }
 | d  k r2ˆ  j ƒ  j ƒ  } t	 | j d ƒ ƒ } t |  | d |	 d | d |
 d t ˆ  d ƒ ƒ} | d  k	 r`|  j j | t
 | g ƒ ƒ q`n. | j j ƒ  | k rTt
 ˆ  h ƒ S| j ƒ  } t
 | j | d t d	 t ƒh ƒ } | j d
 k r±| j ƒ  s±| j ƒ  } q±n  t
 ‡  f d †  | Dƒ ƒ S(   NR5   t   .Ro   t   string_namesRp   t
   is_packaget
   py__path__t   node_is_contextt   node_is_objectRc   c         3   s!   |  ] } t  ˆ  d  | ƒVq d S(   R   N(   R   (   R:   R   (   R   (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pys	   <genexpr>!  s   (   R   R   R#   R$   Rx   R6   R%   t   dictR/   t   tupleR   R   t   get_root_contextt
   py__name__t   splitR   t   hasattrt   module_cachet   addRw   RP   t   create_contextRM   t   is_classt   execute_evaluated(   R   R   R5   R   R(   t   resultt   tree_contextsRQ   Rw   Ro   Rp   R1   R{   t   module_context(    (   R   s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyR8   è   sL    	"(,   R-   RU   Rf   RS   t   jedi.parser_utilsR    t   jediR   t   jedi.evaluateR   t
   jedi.cacheR   t   jedi.file_ioR   t   jedi.evaluate.base_contextR   R   t   jedi.evaluate.helpersR   t   jedi.evaluate.contextR   t   jedi.evaluate.cacheR	   t%   jedi.evaluate.compiled.getattr_staticR
   t   jedi.evaluate.compiled.accessR   R   R   t   jedi.evaluate.compiled.contextR   t    jedi.evaluate.gradual.conversionR   t   objectR    R   t   CompiledNameR.   t   CompiledObjectFilterR   RR   Ra   Rx   R8   (    (    (    s;   lib/python2.7/site-packages/jedi/evaluate/compiled/mixed.pyt   <module>   s0   	4(		J