
    Æe'                         d Z ddlZddlmZmZmZmZmZ ddl	m
Z
  ej                  ej                        Zed        Zed        Zd Zed        Zd	 Zd
 Zd Zed        Zd Zedd       Zed        Zd Zd Zy)zgA module for inferring objects

For more information see the documentation in `rope.base.oi`
package.

    N)	argumentsevaluatepynames	pyobjectsutils)get_type_hinting_factoryc                    | j                   j                  }|j                  | |      }||S t        | |      }|V|rR| j	                         j                         4|j                  | j                  d            }|j                  | ||       |S |j                  | |      }||S t        | j                   j                        j                         } ||       }|t        j                  |      S y)z<Infer the `PyObject` this `PyFunction` returns after callingNFspecial_args)pycoreobject_infoget_exact_returned_infer_returned
get_moduleget_resourceget_argumentsget_param_namesfunction_calledget_returnedr   projectmake_return_providerr   PyObject)
pyfunctionargsr   resultparamshint_returntype_s          2/usr/lib/python3/dist-packages/rope/base/oi/soi.pyinfer_returned_objectr       s     ##//K++J=FZ.FJ))+88:F''
(B(BPU(B(VWF''
FFC%%j$7F*!!  
#E!!%((     c                     | j                   j                  }|j                  |       }|t        |       }t	        | |       |S )z7Infer the `PyObject` of parameters of this `PyFunction`)r   r   get_parameter_objects_parameter_objects_handle_first_parameter)r   r   r   s      r   infer_parameter_objectsr&   &   sC     ##//K..z:F~#J/J/Mr!   c                    | j                         }|s6| j                  d      sy |j                  t        j                                |dk(  r"t        j
                  | j                        |d<   |dk(  r| j                  |d<   y y )NFr
   methodr   classmethod)get_kindr   appendr   get_unknownr   parent)pyobject
parameterskinds      r   r%   r%   1   sx    D''U';)//12x!**8??;
1} 
1 r!   c                    | j                   sy t        | j                         D ]z  }t        || j                        }t	        |t
        j                  j                  j                        r|j                         dk(  r n!|t        j                         k(  r n|x|c S  t        | j                  j                  j                        j                         } ||       }|t        j                   |      S S )NNotImplementedType)assignmentsreversed_infer_assignmentmodule
isinstanceropebasebuiltinsBuiltinUnknownget_namer   r,   r   r   r   make_assignment_providerr   )pyname
assignmentr   hint_assignmenthinting_results        r   infer_assigned_objectrB   =   s    v112 

":v}}=vtyy11@@A!%99y,,..M
 /$$   %V,N!!!.11Mr!   c                     | j                   j                  }|j                  | |      }|s-t        |       }t	        |      |kD  r|j                  ||          |S N)r   r   get_passed_objectsr$   lenr+   )r   parameter_indexr   r   statically_inferreds        r   rE   rE   V   sX    ##//K++JHF0<"#o5MM-o>?Mr!   c                 `   |rN| j                         j                          | j                  |j                  | j	                  d                   | j                         }|j                         sy d}t        |j                         | d        D ]  }	 t        j                  ||      }||j                         } | t        j                         k(  rE|j                         s| c S t        j                  j                  j!                  |       c S  y # t        j"                  $ r Y w xY w)NFr
      )	get_scopeinvalidate_data_set_parameter_pyobjectsr   r   _get_returned_astsr4   r   	eval_node
get_objectr   r,   _is_generatorr8   r9   r:   get_generatorIsBeingInferredError)r.   r   scopemaxtriesreturned_noderesulting_pynames         r   r   r   `   s    	,,.))x77U7KL	
  E##%H!%":":"<hYZ"HI 	'11%G''224H90022&&(yy))77AA -- 		s$   D.'DD*(DD-,D-c                 <   g }| j                  d      }t        | j                  j                        j	                         }|D ]U  } || |      }|%|j                  t        j                  |             3|j                  t        j                                W |S )NFr
   )	r   r   r   r   make_param_providerr+   r   r   r,   )r.   r   r   
hint_paramnamer   s         r   r$   r$   }   s    F%%5%9F)(//*A*ABVVXJ 38T*MM),,U34MM)//123 Mr!   c                 b    t        | |      }|y |\  }}t        | ||      }|y t        | |      S rD   )_follow_pyname_follow_evaluations_follow_levels)r?   pymoduler   r>   r.   s        r   r5   r5      sD    J1F~FH":vx@H*h//r!   c                    | j                   D ]  }t        |j                         t        j                  j
                  j                        r?|j                         j                         }|r|t        t        |      dz
  |         }n\d }nYt        |j                         t        j                  j
                  j                        r|j                         j                  }nd }| |S  |S )N   )levelsr7   get_typer8   r9   r:   Tupleget_holding_objectsminrF   Listholding)r?   r.   indexholdingss       r   r_   r_      s    "" h'')499+=+=+C+CD((*>>@H#CH(95$AB))+TYY-?-?-D-DE((*22HHO Or!   c                 T   | j                   xs | j                  }|t        |      }|j                         j	                  |      }t        j                  ||      }||j                         }t        |j                         t        j                  j                  j                        rz|j                         dk(  rgt        j                   t#        j$                  |j&                              }||j                         j)                  t+        j,                  |g            fS ||fS y )NClass)	type_hintast_node_get_lineno_for_noderK   get_inner_scope_for_liner   rO   rP   r7   rd   r8   r9   r:   Propertyr*   r   UnboundNamer   r   r.   get_property_objectr   ObjectArguments)r?   r`   linenoassign_nodeholding_scoper>   r   args           r   r]   r]      s    &&=**=*=K~%k2&&(AA&IM{;F""$v($))*<*<*E*EF&&(G3%%i&8&89O9O&PQC6??,@@))3%0   v~ r!   c                    |}| j                   j                  d      }|D ]  }|j                  d      }|r|d d }|r |}t        ||      }||j	                         }|F|rDt        |t        j                        r(t        j                  |g      }|j                  |      }nd }| n |!| j                  rt        j                  |      S |S )N.z())
evaluationsplitendswith_get_attributerP   r7   r   AbstractFunctionr   ru   get_returned_objectassign_typer   )r?   r>   r.   
new_pynametokenstokencallr   s           r   r^   r^      s    J""((-F ~~d##2JEF'%8J%%002D(I$>$>? 00&:#77=!" 
 6 6!!(++Or!   c                 L    t        | d      r| j                  | j                  S y)Nrv   rb   )hasattrrv   )rw   s    r   rp   rp      s&    {H%+*<*<*H!!!r!   c                     | 
|| v r| |   S y y rD    )r.   r[   s     r   r   r      s!     0~ !1r!   rD   )__doc__rope.base.builtinsr8   	rope.baser   r   r   r   r   !rope.base.oi.type_hinting.factoryr   ignore_exceptionrS   _ignore_inferredr    r&   r%   rB   rE   r   r$   r5   r_   r]   r^   rp   r   r   r!   r   <module>r      s     D D F)5)))*H*HI  ) ).  	(  0:
  0 0"  &  2r!   