
    c#                        d dl mZ d dlmZmZmZ  G d d          Zd Z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e
          Z G d dee          Z G d dee	          Z G d d          Z G d dee          Z G d de          Z G d de          Z G d dej                  ZdS )     )Optional)ast
exceptionsutilsc                   r     e Zd Zd Zd Zd Zd Zd Zd Zd Z	d Z
 fd	Zd
 ZdZdZed             Z xZS )PyObjectc                     || }|| _         d S Ntype)selftype_s     3lib/python3.11/site-packages/rope/base/pyobjects.py__init__zPyObject.__init__   s     	E			    c                 J    | j         | u ri S | j                                         S r
   )r   get_attributesr   s    r   r   zPyObject.get_attributes   s*    9 	Iy'')))r   c                     ||                                  vrt          j        d|z            |                                  |         S NzAttribute %s not found)r   r   AttributeNotFoundErrorr   names     r   get_attributezPyObject.get_attribute   sJ    t**,,, 	U34Lt4STTT""$$T**r   c                     | j         S r
   r   r   s    r   get_typezPyObject.get_type   s
    yr   c                 ,    |                      |          S )z"The same as ``get_attribute(key)``)r   r   keys     r   __getitem__zPyObject.__getitem__   s    !!#&&&r   c                 .    ||                                  v S )z,The same as ``key in self.get_attributes()``)r   r   s     r   __contains__zPyObject.__contains__   s    d))++++r   c                     | j         |j         k    rdS t          |           t          k    r'| | j        ur| j        |j        k    S | j        |j        u S | |u S )al  Check the equality of two `PyObject`

        Currently it is assumed that instances (the direct instances
        of `PyObject`, not the instances of its subclasses) are equal
        if their types are equal.  For every other object like
        defineds or builtins rope assumes objects are reference
        objects and their identities should match.

        F)	__class__r   r   r   objs     r   __eq__zPyObject.__eq__!   sd     >S]* 	5::! 	-49$ -yCH,,yCH,,s{r   c                 .    |                      |           S r
   )r'   r%   s     r   __ne__zPyObject.__ne__4   s    ;;s####r   c                     t          |           t          k    r"| | j         k    rt          | j                   dz   S t                                                      S )zSee docs for `__eq__()` method   )r   r   hashsuper__hash__r   r$   s    r   r.   zPyObject.__hash__7   sM    ::! 	&ddi&7 	&	??Q&&77##%%%r   c                 D    t          |                                           S )z+The same as ``iter(self.get_attributes())``)iterr   r   s    r   __iter__zPyObject.__iter__>   s    D''))***r   Nc                 :   t           j        ~i t           _        t          d           }|t           j        d<   t          |          t           j        d<   t          |          t           j        d<   t          |          t           j        d<   t           j        |          S )NTypeModuleFunctionUnknown)r   _types)r   	base_types     r   _get_base_typezPyObject._get_base_typeE   ss    ? 	= HO I&/HOF#(0(;(;HOH%*29*=*=HOJ')1))<)<HOI&t$$r   )__name__
__module____qualname__r   r   r   r   r    r"   r'   r)   r.   r2   r8   _unknownstaticmethodr:   __classcell__r$   s   @r   r   r      s          
* * *
+ + +
  ' ' ', , ,  &$ $ $& & & & &+ + + FH% % \% % % % %r   r   c                 6    t                               |           S )a  Return the base type with name `name`.

    The base types are 'Type', 'Function', 'Module' and 'Unknown'.  It
    was used to check the type of a `PyObject` but currently its use
    is discouraged.  Use classes defined in this module instead.
    For example instead of
    ``pyobject.get_type() == get_base_type('Function')`` use
    ``isinstance(pyobject, AbstractFunction)``.

    You can use `AbstractClass` for classes, `AbstractFunction` for
    functions, and `AbstractModule` for modules.  You can also use
    `PyFunction` and `PyClass` for testing if an object is
    defined somewhere and rope can access its source.  These classes
    provide more methods.

    )r   r:   )r   s    r   get_base_typerC   Q   s    " ""4(((r   c                  ~    t           j        &t          t          d                    t           _        t           j        S )a  Return a pyobject whose type is unknown

    Note that two unknown objects are equal.  So for example you can
    write::

      if pyname.get_object() == get_unknown():
          print('cannot determine what this pyname holds')

    Rope could have used `None` for indicating unknown objects but
    we had to check that in many places.  So actually this method
    returns a null object.

    Nr7   )r   r>   rC    r   r   get_unknownrF   e   s0      ?$]9%=%=>>r   c                   0     e Zd Z fdZd Zd Zd Z xZS )AbstractClassc                 d    t                                          t          d                     d S )Nr4   r-   r   rC   r/   s    r   r   zAbstractClass.__init__y   s)    v../////r   c                     d S r
   rE   r   s    r   get_namezAbstractClass.get_name|       r   c                     d S r
   rE   r   s    r   get_doczAbstractClass.get_doc   rM   r   c                     g S r
   rE   r   s    r   get_superclasseszAbstractClass.get_superclasses       	r   )r;   r<   r=   r   rL   rO   rQ   r@   rA   s   @r   rH   rH   x   se        0 0 0 0 0          r   rH   c                   8     e Zd Z fdZd Zd ZddZd Z xZS )AbstractFunctionc                 d    t                                          t          d                     d S )Nr6   rJ   r/   s    r   r   zAbstractFunction.__init__   s)    z2233333r   c                     d S r
   rE   r   s    r   rL   zAbstractFunction.get_name   rM   r   c                     d S r
   rE   r   s    r   rO   zAbstractFunction.get_doc   rM   r   Tc                     g S r
   rE   )r   special_argss     r   get_param_namesz AbstractFunction.get_param_names   rR   r   c                     t                      S r
   )rF   )r   argss     r   get_returned_objectz$AbstractFunction.get_returned_object   s    }}r   )T)	r;   r<   r=   r   rL   rO   rZ   r]   r@   rA   s   @r   rT   rT      sy        4 4 4 4 4             r   rT   c                   ,     e Zd Zd fd	Zd Zd Z xZS )AbstractModuleNc                 d    t                                          t          d                     d S )Nr5   rJ   )r   docr$   s     r   r   zAbstractModule.__init__   s)    x0011111r   c                     d S r
   rE   r   s    r   rO   zAbstractModule.get_doc   rM   r   c                     d S r
   rE   r   s    r   get_resourcezAbstractModule.get_resource   rM   r   r
   )r;   r<   r=   r   rO   rd   r@   rA   s   @r   r_   r_      s[        2 2 2 2 2 2        r   r_   c                       e Zd ZdZd Zd Zed             ZdZ e	j
        d           d             Z e	j
        d           d	             Zd
 Zd Zd Zd Zdee         fdZd Zd Zd Zd Zd ZdS )PyDefinedObjectz7Python defined names that rope can access their sourcesc                    || _         || _        d | _        || _        d | _        |                                                                 | _        |                                                                 | _        d | _	        d S r
   )
pycoreast_nodescopeparentstructural_attributes
get_module_get_concluded_dataconcluded_attributes
attributesdefineds)r   rh   ri   rk   s       r   r   zPyDefinedObject.__init__   sl     
%)"$(OO$5$5$I$I$K$K!//++??AAr   c           
          d                     | j        j        | j        j        | j        t          t          |                               S )Nz<{}.{} "{}" at {}>)formatr$   r<   r;   absolute_namehexidr   s    r   __repr__zPyDefinedObject.__repr__   s?    #**N%N#4MM	
 
 	
r   c                     |                                  }|                                                                  |rd|z   ndz   S )Nz:: )rL   rm   )r   obj_names     r   rt   zPyDefinedObject.absolute_name   s>    ==??  ))++(/RthPRSSr   Nc                      i S r
   rE   rE   r   r   <lambda>zPyDefinedObject.<lambda>       R r   c                 P    | j         |                                 | _         | j         S r
   )rl   _create_structural_attributesr   s    r   _get_structural_attributesz*PyDefinedObject._get_structural_attributes   s+    % 	N)-)K)K)M)MD&))r   c                      i S r
   rE   rE   r   r   r|   zPyDefinedObject.<lambda>   r}   r   c                     | j                                         @|                                  | j                             |                                            | j                                         S r
   )ro   getr   set_create_concluded_attributesr   s    r   _get_concluded_attributesz)PyDefinedObject._get_concluded_attributes   sd    $((** 	O++---%))$*K*K*M*MNNN(,,...r   c                 *   | j                                         bt          |                                           }|                    |                                            | j                             |           | j                                         S r
   )rp   r   dictr   updater   r   )r   results     r   r   zPyDefinedObject.get_attributes   sy    ?   	($88::;;FMM$99;;<<<O'''""$$$r   c                     ||                                  v r|                                  |         S ||                                 v r|                                 |         S t          j        d|z            r   )r   r   r   r   r   s     r   r   zPyDefinedObject.get_attribute   sy    422444 	;2244T::411333 	:1133D99/0H40OPPPr   c                 P    | j         |                                 | _         | j         S r
   )rj   _create_scoper   s    r   	get_scopezPyDefinedObject.get_scope   s'    : 	.++--DJzr   c                 4    | }|j         |j         }|j         |S r
   )rk   )r   current_objects     r   rm   zPyDefinedObject.get_module   s-    # 	3+2N # 	3r   returnc                 T   t          |                                 j                  dk    r}|                                 j        d         }t          |t          j                  rDt          |j        t          j                  r%|j        j        }t          |t                    sJ |S d S )Nr   )
lenget_astbody
isinstancer   ExprvalueStrsstr)r   expr	docstrings      r   rO   zPyDefinedObject.get_doc   s    t||~~"##a' 	!<<>>&q)D$)) !jSW.M.M ! JL	!)S11111  tr   c                 F    | j         |                                  | j         S r
   )rq   r   r   s    r   _get_defined_objectsz$PyDefinedObject._get_defined_objects   s&    = 	.++---}r   c                     | j         i S |                      | j        |           }t          j        | j                  D ]}|                    |           |j        | _        |j        S r
   )visitor_classrh   r   iter_child_nodesri   visitrq   names)r   new_visitorchilds      r   r   z-PyDefinedObject._create_structural_attributes   so     	I((d;;)$-88 	% 	%Ee$$$$#,  r   c                     i S r
   rE   r   s    r   r   z,PyDefinedObject._create_concluded_attributes   rR   r   c                     | j         S r
   )ri   r   s    r   r   zPyDefinedObject.get_ast   
    }r   c                     d S r
   rE   r   s    r   r   zPyDefinedObject._create_scope  rM   r   )r;   r<   r=   __doc__r   rw   propertyrt   r   r   prevent_recursionr   r   r   r   r   rm   r   r   rO   r   r   r   r   r   rE   r   r   rf   rf      sZ       AA  
 
 
 T T XT MUZZ((* * )(*
 UZZ((/ / )(/% % %Q Q Q  
  #      
! ! !        r   rf   c                       e Zd ZdS )
PyFunctionNr;   r<   r=   rE   r   r   r   r             Dr   r   c                       e Zd Z	 d ZdS )PyComprehensionc                     dS )Nz<comprehension>rE   r   s    r   rL   zPyComprehension.get_name  s      r   N)r;   r<   r=   rL   rE   r   r   r   r   	  s&        ! ! ! ! !r   r   c                       e Zd ZdS )PyClassNr   rE   r   r   r   r     r   r   r   c                   D    e Zd Zd Zd Zd Z eee          Zd Zd Z	dS )_ConcludedDatac                     d | _         d S r
   data_r   s    r   r   z_ConcludedData.__init__      


r   c                     || _         d S r
   r   r   datas     r   r   z_ConcludedData.set  r   r   c                     | j         S r
   r   r   s    r   r   z_ConcludedData.get  s
    zr   c                     d | _         d S r
   )r   r   s    r   _invalidatez_ConcludedData._invalidate   s    			r   c                 6    dt          | j                  z   dz   S )N<>)r   r   r   s    r   __str__z_ConcludedData.__str__#  s    S^^#c))r   N)
r;   r<   r=   r   r   r   r   r   r   r   rE   r   r   r   r     sr               8CD  * * * * *r   r   c                   B    e Zd Zd Zedefd            Zd Zd Zd Z	dS )	_PyModulec                     || _         g | _        t                              |            t                              | ||d            d S r
   )resourceconcluded_datar_   r   rf   )r   rh   ri   r   s       r   r   z_PyModule.__init__(  sE      %%%  vx>>>>>r   r   c                 *    |                                  S r
   )rL   r   s    r   rt   z_PyModule.absolute_name.  s    }}r   c                 V    t                      }| j                            |           |S r
   )r   r   append)r   new_datas     r   rn   z_PyModule._get_concluded_data2  s)    !##""8,,,r   c                 B    | j         D ]}|                                 d S r
   )r   r   r   s     r   _forget_concluded_dataz _PyModule._forget_concluded_data7  s3    ' 	 	D	 	r   c                     | j         S r
   )r   r   s    r   rd   z_PyModule.get_resource;  r   r   N)
r;   r<   r=   r   r   r   rt   rn   r   rd   rE   r   r   r   r   '  sw        ? ? ? s    X  
      r   r   c                       e Zd ZdS )PyModuleNr   rE   r   r   r   r   ?  r   r   r   c                       e Zd ZdS )	PyPackageNr   rE   r   r   r   r   C  r   r   r   c                       e Zd ZdS )IsBeingInferredErrorNr   rE   r   r   r   r   G  r   r   r   N)typingr   	rope.baser   r   r   r   rC   rF   rH   rT   r_   rf   r   r   r   r   r   r   r   	RopeErrorr   rE   r   r   <module>r      s         , , , , , , , , , ,H% H% H% H% H% H% H% H%V) ) )(  &    H       x   "    X   ` ` ` ` ` ` ` `F	 	 	 	 	"2 	 	 	! ! ! ! !ox ! ! !	 	 	 	 	o} 	 	 	* * * * * * * *&       0	 	 	 	 	y 	 	 		 	 	 	 		 	 	 		 	 	 	 	:/ 	 	 	 	 	r   