
    -hC                        S SK Jr  S SKJr  S SKJr  S SKJr  S SKJ	r	  S SK
Jr  S SKJrJrJr  S SKJrJr  S S	KJrJr  S S
KJr  S SKJr  S SKJr   " S S5      r " S S\5      r " S S5      r " S S\\5      r " S S\\5      r " S S\\5      r  " S S\\5      r! " S S\\5      r" " S S\5      r# " S S \#5      r$S! r%S" r&g#)$    )abstractmethod)contextmanager)Path)Optional)search_ancestor)Name)ParserTreeFilterMergedFilterGlobalNameFilter)AnonymousParamNameTreeNameDefinition)	NO_VALUESValueSet)get_parent_scope)debug)parser_utilsc                       \ rS rSrS r\SS j5       rS r  SS jrS r	S r
S	 rS
 rS rS rS rS rS r\S 5       rS r\S 5       rS rS r\S 5       rSrg)AbstractContext   c                     Xl         0 U l        g Ninference_statepredefined_names)selfr   s     iC:\Users\julio\OneDrive\Documentos\Trabajo\Ideas Frescas\venv\Lib\site-packages\jedi/inference/context.py__init__AbstractContext.__init__   s    . "    Nc                     [         er   NotImplementedErrorr   until_positionorigin_scopes      r   get_filtersAbstractContext.get_filters       !!r   c                     SSK Jn  [        U [        U[        5      (       a  UOS U5      nUR                  XA5      n[        R                  " SXU5        U$ )Nr   )finderzcontext.goto %s in (%s): %s)jedi.inferencer*   _get_global_filters_for_name
isinstancer   filter_namer   dbg)r   name_or_strpositionr*   filtersnamess         r   gotoAbstractContext.goto   sL    ).K!>!>+D(
 ""78		/EJr   c                    Uc  U nU R                  X5      n[        U[        5      (       a  UR                  OUnSnU R                  (       a  [        U[        5      (       as  UnUbn  [
        R                  " U5      (       dS  UR                  nUR                  S;   a   U R                  U   n	X   n
U
nO Ub  [
        R                  " U5      (       d  MS  Ub@  U(       a9  SSK
Jn  UR                  U U R                  US9nXR                  L a  [        nO UnO[         R"                  " S U 5       5      nU(       dA  U(       d:  U(       a3  [        U[        5      (       a  SSK
Jn  SU-  nUR'                  US	X5        [(        R*                  " S
X]5        U(       a  U$ U R-                  XU5      $ ! [         a     GMY  f = f)zJ
:param position: Position of the last statement -> tuple of line, column
N)if_stmtfor_stmtcomp_forsync_comp_forr   )flow_analysis)contextvalue_scopenodec              3   @   #    U  H  oR                  5       v   M     g 7fr   )infer).0names     r   	<genexpr>5AbstractContext.py__getattribute__.<locals>.<genexpr>M   s     'G

s   )analysisz$NameError: name '%s' is not defined.z
name-errorz context.names_to_types: %s -> %s)r4   r-   r   valuer   r   is_scopeparenttypeKeyErrorr+   r;   reachability_check	tree_nodeUNREACHABLEr   r   	from_setsrE   addr   r/   _check_for_additional_knowledge)r   r0   name_contextr1   analysis_errorsr3   string_namefound_predefined_typesr>   	name_dicttypesr;   checkvaluesrE   messages                   r   py__getattribute__"AbstractContext.py__getattribute__&   s   
 L		+0+5k4+H+Hk''k "&  ZT%B%BD"<+@+@+F+F{{99 TT$($9$9$$?	 ) 6 27. "<+@+@+F+F "-%4!44 NN  5 E
 111"/'''G'GGFV+t,,3AKO\<N		4eDM33KxXX9 $ ! !s   F/ /
F>=F>c                 *   U=(       d    U n[        U[        5      (       an  UR                  5       (       dY  UnUR                  /n[	        S U 5       5      (       a  [
        $ SSKJn   [        USS9nU" X$X5      nUb  U$ XE;   a   [
        $ M&  [
        $ )Nc              3   >   #    U  H  oR                   S ;   v   M     g7f)r9   r:   N)rI   )rA   bs     r   rC   BAbstractContext._check_for_additional_knowledge.<locals>.<genexpr>a   s     OJq66::Js   r   )check_flow_informationT)include_flows)	r-   r   is_instancerL   anyr   jedi.inference.finderra   r   )r   r0   rQ   r1   
flow_scope
base_nodesra   ns           r   rP   /AbstractContext._check_for_additional_knowledgeZ   s    #+tk4((1I1I1K1K$J&001JOJOOO  D-jM
*<+6B=H+  r   c                 D    U R                   nUc  U $ UR                  5       $ r   )parent_contextget_root_context)r   rk   s     r   rl    AbstractContext.get_root_contextn   s'    ,,!K..00r   c                     gNF r   s    r   	is_moduleAbstractContext.is_modulet       r   c                     gro   rp   rq   s    r   is_builtins_module"AbstractContext.is_builtins_modulew   rt   r   c                     gro   rp   rq   s    r   is_classAbstractContext.is_classz   rt   r   c                     gro   rp   rq   s    r   is_stubAbstractContext.is_stub}   rt   r   c                     gro   rp   rq   s    r   rc   AbstractContext.is_instance   rt   r   c                     gro   rp   rq   s    r   is_compiledAbstractContext.is_compiled   rt   r   c                     gro   rp   rq   s    r   is_bound_methodAbstractContext.is_bound_method   rt   r   c                     [         er   r!   rq   s    r   
py__name__AbstractContext.py__name__   r(   r   c                     [         er   r!   rq   s    r   	get_valueAbstractContext.get_value   s    !!r   c                     g r   rp   rq   s    r   rB   AbstractContext.name   s    r   c                     g)Nrp   rp   rq   s    r   get_qualified_names#AbstractContext.get_qualified_names       r   c                     g)N rp   rq   s    r   	py__doc__AbstractContext.py__doc__   r   r   c              #   H   #    U R                   nX#U'    S v   X1	 g ! X1	 f = f7fr   )r   )r   rf   dct
predefineds       r   predefine_namesAbstractContext.predefine_names   s,     **
!$:	'&
&s   " ""r   NN)NNT)__name__
__module____qualname____firstlineno__r   r   r&   r4   rZ   rP   rl   rr   rv   ry   r|   rc   r   r   r   r   propertyrB   r   r   r   r   __static_attributes__rp   r   r   r   r      s    # " " KO+/2Yh(1 " ""   ' 'r   r   c                      ^  \ rS rSrSrU 4S jr\S 5       r\S 5       rS r	S r
S rS	 rS
 rS rS rS r\S 5       rS rS rS rS rSrU =r$ )ValueContext   z;
Should be defined, otherwise the API returns empty types.
c                 D   > [         TU ]  UR                  5        Xl        g r   )superr   r   _value)r   rF   	__class__s     r   r   ValueContext.__init__   s    ../r   c                 .    U R                   R                  $ r   )r   rL   rq   s    r   rL   ValueContext.tree_node   s    {{$$$r   c                 .    U R                   R                  $ r   )r   rk   rq   s    r   rk   ValueContext.parent_context   s    {{)))r   c                 6    U R                   R                  5       $ r   )r   rr   rq   s    r   rr   ValueContext.is_module       {{$$&&r   c                 H    U R                   U R                  R                  :H  $ r   )r   r   builtins_modulerq   s    r   rv   ValueContext.is_builtins_module   s    {{d22BBBBr   c                 6    U R                   R                  5       $ r   )r   ry   rq   s    r   ry   ValueContext.is_class   s    {{##%%r   c                 6    U R                   R                  5       $ r   )r   r|   rq   s    r   r|   ValueContext.is_stub   s    {{""$$r   c                 6    U R                   R                  5       $ r   )r   rc   rq   s    r   rc   ValueContext.is_instance       {{&&((r   c                 6    U R                   R                  5       $ r   )r   r   rq   s    r   r   ValueContext.is_compiled   r   r   c                 6    U R                   R                  5       $ r   )r   r   rq   s    r   r   ValueContext.is_bound_method   s    {{**,,r   c                 6    U R                   R                  5       $ r   )r   r   rq   s    r   r   ValueContext.py__name__       {{%%''r   c                 .    U R                   R                  $ r   )r   rB   rq   s    r   rB   ValueContext.name   s    {{r   c                 6    U R                   R                  5       $ r   )r   r   rq   s    r   r    ValueContext.get_qualified_names   s    {{..00r   c                 6    U R                   R                  5       $ r   )r   r   rq   s    r   r   ValueContext.py__doc__   r   r   c                     U R                   $ r   r   rq   s    r   r   ValueContext.get_value       {{r   c                 R    U R                   R                  < SU R                  < S3$ N())r   r   r   rq   s    r   __repr__ValueContext.__repr__   s    >>22DKK@@r   r   )r   r   r   r   __doc__r   r   rL   rk   rr   rv   ry   r|   rc   r   r   r   rB   r   r   r   r   r   __classcell__r   s   @r   r   r      s     % % * *'C&%))-(    1'A Ar   r   c                   ,    \ rS rSrS rS rS rS rSrg)TreeContextMixin   c                     SSK Jn  U" X5      $ )Nr   )
infer_node)jedi.inference.syntax_treer   )r   r>   r   s      r   r   TreeContextMixin.infer_node   s    9$%%r   c                 j   SSK Jn  XR                  :X  a'  U R                  5       (       d   eU R	                  5       $ U R                  U5      nUR                  S;   a  UR                  R                  X15      nUR                  5       (       ak  UR                  R                  UR                  5      nUR                  U R                  UR                  U5      nUR                  UUR                  5       US9nU$ UR                  S:X  a  UR!                  U R                  X15      $ [#        SU-  5      e)Nr   )rF   )funcdeflambdef)instanceclass_contextfunctionclassdefzProbably shouldn't happen: %s)r+   rF   rL   rr   r   create_contextrI   FunctionValuefrom_contextry   rk   create_valueAnonymousInstancer   BoundMethod
as_context
ClassValuer"   )r   r>   rF   rk   funcclass_valuer   s          r   r   TreeContextMixin.create_value   s   (>>!>>####>>##,,T299..&&33NID&&((,;;HHIaIab 22((.*G*GV((%"-"8"8":! ) 
 KYY*$##D$8$8.OO%&E&LMMr   c                 P  ^ ^^^ SUUUU 4S jjmS mT" T5      nUR                   S;   av  UR                  UR                  R                  S5         nTR                  UR                  :  a4  TR                  nUR                   S:X  a  UR
                  T:X  d  T" U5      nT" USS9$ )	NTc                 Z  > U TR                   :X  a  T$ U R                  S;   a  TR                  U 5      R                  5       $ U R                  S;   aL  T" T" U R                  5      5      nTR
                  U R                  S   R
                  :  a  U$ [        X 5      $ [        SU -  5      e)N)r   r   r   r^   z(There's a scope that was not managed: %s)	rL   rI   r   r   rH   	start_poschildrenCompForContext	Exception)
scope_node	is_nestedrk   from_scope_noder>   parent_scoper   s      r   r   8TreeContextMixin.create_context.<locals>.from_scope_node   s    T^^+"DD((4??AA$AA!0j>O>O1P!Q>>Z%8%8%<%F%FF))%nAAFSTTr   c                 H    U R                   n [        R                  " U 5      (       a  U $ U R                  S;   a-  U R                  S   R                  S;   a  U R                  S   $ O:U R                  S:X  a*  U R                  SS  H  nUR                  S;   d  M  Us  $    M  )N)argumenttestlist_comp   r^   dictorsetmaker   )rH   r   rG   rI   r   )r>   rh   s     r   r   5TreeContextMixin.create_context.<locals>.parent_scope
  s    {{((..KYY"??}}Q',,0MM#}}Q// NYY"22!]]1Q/66%BB#$H 0 r   )r   r   :param)r   )T)rI   r   indexr   rH   rB   )r   r>   r   colonrH   r   r   s   ``   @@r   r   TreeContextMixin.create_context   s    	U 	U	% "$'
??55''
(;(;(A(A#(FGE~~/w.6;;$3F!-j!9JzT::r   c                     UR                  5       nU(       aI  UR                  S:X  a9  UR                  U:X  a)  [        USS5      nU R	                  U5      n[        XA5      $ U R                  U5      n[        XQ5      $ )Nr  r   r   )get_definitionrI   rB   r   r   r   r   r   )r   	tree_name
definitionr   r   r<   s         r   create_nameTreeContextMixin.create_name"  sm    --/
*//W4I9U%j)YGG$$W-D%d66)))4G%g99r   rp   N)	r   r   r   r   r   r   r   r
  r   rp   r   r   r   r      s    &N4$;L:r   r   c                       \ rS rSrSS jrSrg)FunctionContexti-  Nc              #   <   #    [        U R                  U UUS9v   g 7fN)rk   r$   r%   )r	   r   r#   s      r   r&   FunctionContext.get_filters.  s$       )%	
 	
s   rp   r   r   r   r   r   r&   r   rp   r   r   r  r  -  s    
r   r  c                   ^    \ rS rSrS\\   4S jrSS jrS r\	S 5       r
\	S 5       rS	 rS
rg)ModuleContexti7  returnc                 6    U R                   R                  5       $ r   r   
py__file__rq   s    r   r  ModuleContext.py__file__8  r   r   Nc              #      #    U R                   R                  U5      n[        US 5        [        [	        U UUS9U R                  5       5      v   U S h  vN   g  N7fr  )r   r&   nextr
   r	   get_global_filter)r   r$   r%   r2   s       r   r&   ModuleContext.get_filters;  sZ     ++)),7Wd#-)
 ""$
 	
 s   AAAAc                     [        U 5      $ r   )r   rq   s    r   r  ModuleContext.get_global_filterI  s    %%r   c                 .    U R                   R                  $ r   r   string_namesrq   s    r   r!  ModuleContext.string_namesL      {{'''r   c                 .    U R                   R                  $ r   )r   
code_linesrq   s    r   r%  ModuleContext.code_linesP  s    {{%%%r   c                     U R                   $ )z
This is the only function that converts a context back to a value.
This is necessary for stub -> python conversion and vice versa. However
this method shouldn't be moved to AbstractContext.
r   rq   s    r   r   ModuleContext.get_valueT  s     {{r   rp   r   )r   r   r   r   r   r   r  r&   r  r   r!  r%  r   r   rp   r   r   r  r  7  sI    (HTN (& ( ( & &r   r  c                   H    \ rS rSrS	S jrS r\S 5       rS\\	   4S jr
Srg)
NamespaceContexti]  Nc                 6    U R                   R                  5       $ r   r   r&   r#   s      r   r&   NamespaceContext.get_filters^  r   r   c                     U R                   $ r   r   rq   s    r   r   NamespaceContext.get_valuea  r   r   c                 .    U R                   R                  $ r   r   rq   s    r   r!  NamespaceContext.string_namesd  r#  r   r  c                 6    U R                   R                  5       $ r   r  rq   s    r   r  NamespaceContext.py__file__h  r   r   rp   r   )r   r   r   r   r&   r   r   r!  r   r   r  r   rp   r   r   r*  r*  ]  s0    ) ( ((HTN (r   r*  c                   (    \ rS rSrSS jrSS jrSrg)ClassContextil  Nc              #   2   #    U R                  X5      v   g 7fr   )r  r#   s      r   r&   ClassContext.get_filtersm  s     $$^BBs   c                     [        U UUS9$ r  r	   r#   s      r   r  ClassContext.get_global_filterp  s    )%
 	
r   rp   r   )r   r   r   r   r&   r  r   rp   r   r   r5  r5  l  s    C
r   r5  c                   D   ^  \ rS rSrU 4S jrSS jrS rS rS rSr	U =r
$ )	r   ix  c                 P   > [         TU ]  UR                  5        X l        Xl        g r   )r   r   r   rL   rk   )r   rk   r9   r   s      r   r   CompForContext.__init__y  s!    778!,r   c              #   &   #    [        U 5      v   g 7fr   r9  r#   s      r   r&   CompForContext.get_filters~  s     t$$s   c                     g r   rp   rq   s    r   r   CompForContext.get_value  s    r   c                     g)Nz<comprehension context>rp   rq   s    r   r   CompForContext.py__name__  s    (r   c                 R    U R                   R                  < SU R                  < S3$ r   )r   r   rL   rq   s    r   r   CompForContext.__repr__  s    >>22DNNCCr   )rk   rL   r   )r   r   r   r   r   r&   r   r   r   r   r   r   s   @r   r   r   x  s#    -
%)D Dr   r   c                       \ rS rSrSS jrSrg)CompiledContexti  Nc                 6    U R                   R                  5       $ r   r,  r#   s      r   r&   CompiledContext.get_filters  r   r   rp   r   r  rp   r   r   rG  rG    s    )r   rG  c                   B    \ rS rSrSrS r\S 5       rS\\	   4S jr
Srg)CompiledModuleContexti  Nc                     U R                   $ r   r   rq   s    r   r   CompiledModuleContext.get_value  r   r   c                 .    U R                   R                  $ r   r   rq   s    r   r!  "CompiledModuleContext.string_names  r#  r   r  c                 6    U R                   R                  5       $ r   r  rq   s    r   r   CompiledModuleContext.py__file__  r   r   rp   )r   r   r   r   r%  r   r   r!  r   r   r  r   rp   r   r   rK  rK    s0    J ( ((HTN (r   rK  c                    Ubt  [        USSS5      nS nUS:X  a  Un[        USS5      nUbL  UR                  S   nUb:  X%R                  :  a+  Ub  X$R                  S   R                  :  a  UR                  n[        XU5      $ )Nr   r   r   )r   r   r   get_global_filters)r<   name_or_noner1   ancestorr   r  s         r   r,   r,     s     "<J	Ry  G&|Y
KH%%b)E#??(B?h1A1A"1E1O1O&O'11Hg>>r   c              #     #    U nSSK Jn  U bA  U R                  UUS9 Sh  vN   [        X[        45      (       a  SnU R
                  n U b  MA  [        UR                  R                  R                  5       S5      nUc   eUv   g Ne7f)a'  
Returns all filters in order of priority for name resolution.

For global name lookups. The filters will handle name resolution
themselves, but here we gather possible filters downwards.

>>> from jedi import Script
>>> script = Script('''
... x = ['a', 'b', 'c']
... def func():
...     y = None
... ''')
>>> module_node = script._module_node
>>> scope = next(module_node.iter_funcdefs())
>>> scope
<Function: func@3-5>
>>> context = script._get_module_context().create_context(scope)
>>> filters = list(get_global_filters(context, (4, 0), None))

First we get the names from the function scope.

>>> print(filters[0])  # doctest: +ELLIPSIS
MergedFilter(<ParserTreeFilter: ...>, <GlobalNameFilter: ...>)
>>> sorted(str(n) for n in filters[0].values())  # doctest: +NORMALIZE_WHITESPACE
['<TreeNameDefinition: string_name=func start_pos=(3, 4)>',
 '<TreeNameDefinition: string_name=x start_pos=(2, 0)>']
>>> filters[0]._filters[0]._until_position
(4, 0)
>>> filters[0]._filters[1]._until_position

Then it yields the names from one level "lower". In this example, this is
the module scope (including globals).
As a side note, you can see, that the position in the filter is None on the
globals filter, because there the whole module is searched.

>>> list(filters[1].values())  # package modules -> Also empty.
[]
>>> sorted(name.string_name for name in filters[2].values())  # Module attributes
['__doc__', '__name__', '__package__']

Finally, it yields the builtin filter, if `include_builtin` is
true (default).

>>> list(filters[3].values())  # doctest: +ELLIPSIS
[...]
r   )BaseFunctionExecutionContextN)r$   r%   )	jedi.inference.value.functionrX  r&   r-   r  rk   r  r   r   )r<   r$   r%   base_contextrX  r_   s         r   rT  rT    s     ^ LJ

&&)% ' 
 	
 	
 gmLMM!N(( 
 	\))99EEGNA==
G	
s   B	B+B	9B	N)'abcr   
contextlibr   pathlibr   typingr   
parso.treer   parso.python.treer   jedi.inference.filtersr	   r
   r   jedi.inference.namesr   r   jedi.inference.base_valuer   r   jedi.parser_utilsr   jedir   r   r   r   r   r  r  r*  r5  r   rG  rK  r,   rT  rp   r   r   <module>rf     s     %   & "  G 9 .  O' O'd6A? 6ArM: M:`
& 
#$l #L(' (	
#\ 	
D% D&)l )
(O (?*@r   