
    cx                        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dS )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        }|                    | |          }||S t          | |          }|j|rf|                                                                 @|                    |                     d                    }|                    | ||           |S |	                    | |          }||S t          | j         j                                                  } ||           }|t          j        |          S dS )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          0lib/python3.11/site-packages/rope/base/oi/soi.pyinfer_returned_objectr       s0    #/K++J==F Z..F  	DJ))++88:: 	D''
(B(BPU(B(V(VWWF''
FFCCC%%j$77F *!   K
##E )!%((() )    c                     | 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&   &   sL     #/K..z::F 0#J//J///Mr!   c                 $   |                                  }||dvr	 |s>|                     d          sd S |                    t          j                               |dk    rt          j        | j                  |d<   |dk    r| j        |d<   d S d S )N)methodclassmethodFr
   r(   r   r)   )get_kindr   appendr   get_unknownr   parent)pyobject
parameterskinds      r   r%   r%   1   s    D T)BB  3''U';; 	F)/11222x <!*8?;;
1} ( 
1( (r!   c                    | j         sd S t          | j                   D ]t}t          || j                  }t	          |t
          j        j        j                  r|	                                dk    r n |t          j                    k    r n||c S ut          | 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22 
 

":v}==vty1@AA	!!%99	 Ey,... 	E 	MMM	 /$     %_V,,N 2!.111Mr!   c                     | j         j        }|                    | |          }|s=t          |           }t	          |          |k    r|                    ||                    |S N)r   r   get_passed_objectsr$   lenr+   )r   parameter_indexr   r   statically_inferreds        r   rE   rE   X   sm    #/K++JHHF @0<<"##o5 	@MM-o>???Mr!   c                    |rb|                                                                   |                     |                    |                     d                               |                                  }|                                sd S d}t          |                                | d                    D ]}	 t          j        ||          }||	                                } | t          j                    k    rG|                                s| c S t          j        j                            |           c S # t          j        $ r Y w xY wd S )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   b   sz    
 	,,...))x77U7KKLL	
 	
 	
   E##%% H!%":":"<"<hYZZ"HII  	'1%GG '2244H90222 &&(( By)77AAAAA- 	 	 	D	 s$   >E +E E #E  EEc                 N   g }|                      d          }t          | j        j                                                  }|D ]^} || |          }|(|                    t          j        |                     8|                    t          j                               _|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%99F)(/*ABBVVXXJ 3 3
8T** 	3MM),U334444MM)/112222Mr!   c                 ~    t          | |          }|d S |\  }}t          | ||          }|d S t          | |          S rD   )_follow_pyname_follow_evaluations_follow_levels)r?   pymoduler   r>   r.   s        r   r5   r5      sV    J11F tFH":vx@@H t*h///r!   c                    | j         D ]}t          |                                t          j        j        j                  rR|                                                                }|r'|t          t          |          dz
  |                   }nUd }nRt          |                                t          j        j        j
                  r|                                j        }nd }| n|S )N   )levelsr7   get_typer8   r9   r:   Tupleget_holding_objectsminrF   Listholding)r?   r.   indexholdingss       r   r_   r_      s    "  h''))49+=+CDD 		((**>>@@H  #CH(95$A$AB))++TY-?-DEE 	((**2HHH 	E	Or!   c                 Z   | j         p| j        }|t          |          }|                                                    |          }t          j        ||          }||                                }t          |	                                t          j        j        j                  r|                                dk    rgt          j        t#          j        |j                            }||	                                                    t+          j        |g                    fS ||fS d S )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 3%k22&&((AA&IIM{;;F 
""$$v(($)*<*EFF	&&((G3	 %i&89O&P&PQQC6??,,@@)3%00    v~
 
r!   c                    |}| j                             d          }|D ]}|                    d          }|r
|d d         }|r(|}t          ||          }||                                }|I|rGt          |t          j                  r+t          j	        |g          }|
                    |          }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## 	#2#JE 	3F'%88J 3%0022 	 D 	 (I$>??   0&::#77== 	E	 ,
 6 ,!(+++Or!   c                 B    t          | d          r| j        | j        S dS )Nrv   rb   )hasattrrv   )rw   s    r   rp   rp      s,    {H%% "+*< "!!1r!   c                 &    | || v r
| |         S d S d S rD    )r.   r[   s     r   r   r      s4      0 ~   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 D D D D D D D D D D D D F F F F F F)5))*HII  ) ) ).   ( ( (   0    :
 
 
  0 0 0  "    &   2      r!   