
    Æe                    B   d dl mZ d dlZd dlZd dlmZmZ ej                  rd dlm	Z	 d dlm
Z
  G d d      Z G d d	e      Z G d
 de      Z G d de      Z G d d      Z G d de      Z G d de      Z G d de      Z G d de      Zd Zd Z G d d      Zy)    )annotationsN)
exceptionsutils)Union)pyobjectsdefc                      e Zd ZdZd Zd Zy)PyNamez/References to `PyObject` inside python programsc                     y)z8Return the `PyObject` object referenced by this `PyName`N selfs    3/usr/lib/python3/dist-packages/rope/base/pynames.py
get_objectzPyName.get_object           c                     y)zReturn a (module, lineno) tupleNr   r   s    r   get_definition_locationzPyName.get_definition_location   r   r   N)__name__
__module____qualname____doc__r   r   r   r   r   r	   r	      s    9G.r   r	   c                      e Zd Zd Zd Zd Zy)DefinedNamec                    || _         y Npyobjectr   r   s     r   __init__zDefinedName.__init__   s	     r   c                    | j                   S r   r   r   s    r   r   zDefinedName.get_object       }}r   c                    t        j                  | j                  j                         | j                  j	                               }| j                  j                         |fS r   )r   guess_def_linenor   
get_moduleget_ast)r   linenos     r   r   z#DefinedName.get_definition_location   sK    ''MM$$&(=(=(?
 ((*F33r   Nr   r   r   r   r   r   r   r   r   r   r      s    !4r   r   c                      e Zd Zy)AssignedNameNr   r   r   r   r   r   r)   r)   &       r   r)   c                       e Zd ZddZd Zd Zy)UnboundNameNc                    || _         | j                   .t        j                  j                  j	                         | _         y y r   )r   ropebase	pyobjectsget_unknownr   s     r   r   zUnboundName.__init__+   s2     ==  II//;;=DM !r   c                    | j                   S r   r   r   s    r   r   zUnboundName.get_object0   r!   r   c                     yNNNr   r   s    r   r   z#UnboundName.get_definition_location3   s    r   r   r'   r   r   r   r-   r-   *   s    >
r   r-   c                       e Zd ZdZ	 ddZd Zy)AssignmentValuezAn assigned expressionNc                ^    || _         |g | _        n|| _        || _        || _        || _        y)zThe `level` is `None` for simple assignments and is
        a list of numbers for tuple assignments for example in::

           a, (b, c) = x

        The levels for for `a` is ``[0]``, for `b` is ``[1, 0]`` and for
        `c` is ``[1, 1]``.

        N)ast_nodelevels
evaluationassign_type	type_hint)r   r:   r;   r<   r=   r>   s         r   r   zAssignmentValue.__init__:   s4     !>DK DK$&"r   c                .    | j                   j                  S r   )r:   r&   r   s    r   
get_linenozAssignmentValue.get_linenoO   s    }}###r   )N FN)r   r   r   r   r   r@   r   r   r   r8   r8   7   s      RV#*$r   r8   c                  *    e Zd ZdZddZd Zd Zd Zy)EvaluatedNamez+A name whose object will be evaluated laterNc                b    || _         || _        || _        t        |t	        |            | _        y r   )moduler&   callback	_Inferred_get_concluded_datar   )r   rF   rE   r&   s       r   r   zEvaluatedName.__init__V   s+     !(,?,GHr   c                6    | j                   j                         S r   )r   getr   s    r   r   zEvaluatedName.get_object\   s    }}  ""r   c                2    | j                   | j                  fS r   )rE   r&   r   s    r   r   z%EvaluatedName.get_definition_location_   s    T[[))r   c                :    | j                   j                  d       y)z)Forget the `PyObject` this `PyName` holdsN)r   setr   s    r   
invalidatezEvaluatedName.invalidateb   s    $r   r6   )r   r   r   r   r   r   r   rN   r   r   r   rC   rC   S   s    5I#* r   rC   c                      e Zd Zy)ParameterNameNr*   r   r   r   rP   rP   g   r+   r   rP   c                  6    e Zd Z	 	 	 d	 ddZd Zd Zd Zd Zy)	ImportedModuleNc                    |	|J d       || _         || _        || _        || _        t	        | j                         | _        y )Nz3At least one of module_name or resource must be set)importing_modulemodule_namelevelresourcerH   pymodule)r   rT   rU   rV   rW   s        r   r   zImportedModule.__init__l   sQ     #x';	A@	A; 0&
 +D,A,ABr   c                p    | j                   j                         j                         }|y |j                  S r   )rT   r$   get_resourceparent)r   rW   s     r   _current_folderzImportedModule._current_folder   s2    ((335BBDr   c                   | j                   j                          | j                  j                  }| j                  ?| j                   j                  |j                  j                  | j                               n	 | j                  dk(  r5|j                  j                  | j                  | j                               }n?|j                  j                  | j                  | j                         | j                        }| j                   j                  |       | j                   j                         S # t        j                  $ r Y /w xY w)Nr   )rX   rJ   rT   pycorerW   rM   projectget_pymodulerV   r$   rU   r\   get_relative_moduler   ModuleNotFoundError)r   r^   rX   s      r   _get_pymodulezImportedModule._get_pymodule   s    ==&**11F}}(!!&.."="=dmm"LMzzQ#)>>#<#< ,,d.B.B.D$ $*>>#E#E ,,d.B.B.Ddjj$ MM%%h/ }}  "" "55 s   >BD6 6EEc                    | j                         (t        j                  j                  j	                         S | j                         S r   )rc   r/   r0   r1   r2   r   s    r   r   zImportedModule.get_object   s9    '99&&2244!!##r   c                    | j                         }t        |t        j                  j                  j
                        sy|j                         dfS )Nr6      )rc   
isinstancer/   r0   r1   PyDefinedObjectr$   )r   rX   s     r   r   z&ImportedModule.get_definition_location   sA    %%'(DII$7$7$G$GH##%q))r   )Nr   N)rT   z4Union[pyobjectsdef.PyModule, pyobjectsdef.PyPackage])r   r   r   r   r\   rc   r   r   r   r   r   rR   rR   k   s2     C
C&#($
*r   rR   c                      e Zd Zd Zd Z ej                  ej                  j                  j                        d        Z ej                  d       d        Zy)ImportedNamec                     || _         || _        y r   )imported_moduleimported_name)r   rl   rm   s      r   r   zImportedName.__init__   s    .*r   c                    	 | j                   j                         | j                     }|| k7  r|S 	 t               S # t        j                  $ r Y t               S w xY wr   )rl   r   rm   r   AttributeNotFoundErrorr-   )r   results     r   _get_imported_pynamez!ImportedName._get_imported_pyname   sc    	))446t7I7IJF~  } 00 	}	s   -; AAc                >    | j                         j                         S r   )rq   r   r   s    r   r   zImportedName.get_object   s    ((*5577r   c                      yr5   r   r   r   r   <lambda>zImportedName.<lambda>   r   r   c                >    | j                         j                         S r   )rq   r   r   s    r   r   z$ImportedName.get_definition_location   s    ((*BBDDr   N)r   r   r   r   rq   r   prevent_recursionr/   r0   r1   r2   r   r   r   r   r   rj   rj      sa    + UTYY00<<=8 >8 U12E 3Er   rj   c                v    | (t         j                  j                  j                         S | j	                         S r   )r/   r0   r1   _ConcludedDatarH   )rE   s    r   rH   rH      s/    ~yy""1133%%''r   c                 T    t         j                  j                  j                  d      )NzCircular Object Inference)r/   r0   r1   IsBeingInferredErrorr   r   r   _circular_inferencer{      s    
))


2
23N
OOr   c                  P    e Zd ZddZ ej
                  e      d        Zd Zd Z	y)rG   Nc                H    || _         || _        | j                  d | _        y y r   )get_inferred	concludedtemp)r   r~   r   s      r   r   z_Inferred.__init__   s'    (">>!DI "r   c                >   | j                   | j                   j                         !| j                   | j                  |i |       | j	                         7| j                  t
        j                  j                  j                                | j	                         S r   )	r   rJ   rM   r~   _getr/   r0   r1   r2   )r   argskwdss      r   rJ   z_Inferred.get   st    >>!T^^%7%7%9%AHH&T&&55699;HHTYY((4467yy{r   c                `    | j                   | j                   j                  |       || _        y r   )r   rM   r   r   s     r   rM   z_Inferred.set   s%    >>%NNx(	r   c                f    | j                   | j                   j                         S | j                  S r   )r   rJ   r   r   s    r   r   z_Inferred._get   s)    >>%>>%%''yyr   r   )
r   r   r   r   r   rv   r{   rJ   rM   r   r   r   r   rG   rG      s3     U01 2
r   rG   )
__future__r   typingrope.base.pyobjectsr/   	rope.baser   r   TYPE_CHECKINGr   r   r	   r   r)   r-   r8   rC   rP   rR   rj   rH   r{   rG   r   r   r   <module>r      s    "   '	&. .4& 4	6 	
& 
$ $8 F  (	F 	7*V 7*tE6 E.(P r   