U
    nuf                     @   s   d dl mZ d dlmZmZ d dlmZ d dlmZ d dl	m
Z
 d dlmZ ddd	Zd
d ZedddZdd ZedddZdddZdddZdd ZdS )    )debug)ValueSet	NO_VALUES)to_list)StubModuleValue)try_to_load_stub_cached	DecorateeFc                    s   |   }| st| gS d t| tr.| j|  }|rNt| dd  |  } | 	 }|d krbt
S |  }|r|d }|d d }d}d  t|||}|rt fdd|D }|r||}d k	rtfdd|D }|S )NZ
_argumentsTc                 3   s0   | ](}|  r d kr| n| V  qd S N)is_classexecute_with_valuesexecute.0c)	arguments E/tmp/pip-unpacked-wheel-ol4ehs9f/jedi/inference/gradual/conversion.py	<genexpr>&   s   z,_stub_to_python_value_set.<locals>.<genexpr>c                 3   s   | ]}t | V  qd S r   r   )r   v)	decoratesr   r   r   0   s     )get_root_contextis_stubr   
isinstancer	   Z_original_valueis_instancegetattrpy__class__get_qualified_namesr   is_bound_method_infer_from_stub	from_setspy__getattribute__)
stub_valueignore_compiledstub_module_contextwas_instancequalified_nameswas_bound_methodmethod_namevaluesr   )r   r   r   _stub_to_python_value_set
   s:    


r+   c                 C   sZ   ddl m} |  }t|t|fs*t| |j}|rB|dd }|D ]}||}qF|S )Nr   )MixedObjectc                 S   s
   |    S r   )Zis_compiled)r   r   r   r   <lambda>:       z"_infer_from_stub.<locals>.<lambda>)	Zjedi.inference.compiled.mixedr,   	get_valuer   r   AssertionErrorZnon_stub_value_setfilterr"   )r%   r'   r$   r,   stub_moduleZ	non_stubsnamer   r   r   r    4   s    r    c           	      c   s   | D ]}|  }| s |V  q|jdkrTt| |d}|r|D ]}|jV  qBqnX| }|d k	rt||d}|r||	 }|r|D ]}|   r|V  q|V  qq|V  qd S )Nmoduler$   )
r   r   api_typeconvert_valuesinferr3   get_defining_qualified_valuer+   gotoget_public_name)	namesprefer_stub_to_compiledr3   module_contextr*   r   	convertedconverted_namesnr   r   r   _try_stub_to_python_names@   s.    

rB   c                 C   s.   |   r| S t| j| jt| gd | j dS )N)Zimport_namesZpython_value_setZparent_module_valuesys_path)r   r   Zinference_stateZstring_namesr   Zget_sys_path)r4   r   r   r   _load_stub_modulea   s    rD   c                 c   s   | D ]}|  }| r |V  q|jdkrd}| D ]T}|jdkrlt| dd}|D ]}|jV  d}qXq6t|g|dD ]}|V  d}qzq6|rqn:| }|d k	rt	|}	|	r|	|
 }
|
r|
E d H  q|r|V  qd S )Nr4   FT)
only_stubsfallback_to_python)r   r   r6   r:   r7   r8   r3   _python_to_stub_namesr9   to_stubr;   )r<   rG   r3   r>   Z
found_namerA   r*   r   xr?   r@   r   r   r   rH   m   s8    


rH   Tc              
   C   sb   |r|rt dtd> |s$|r<t| |dW  5 Q R  S t| |dW  5 Q R  S W 5 Q R X d S )Nz3You cannot use both of only_stubs and prefer_stubs.zconvert namesrF   )r=   )
ValueErrorr   increase_indent_cmrH   rB   )r<   rE   prefer_stubsr=   r   r   r   convert_names   s     rN   c              
      sv   |rrt tdV |s rDtfdd| D W  5 Q R  S t fdd| D W  5 Q R  S W 5 Q R X d S )Nzconvert valuesc                 3   s(   | ] }t |p rt|hntV  qd S r   )rI   r   r   )r   value)rM   r   r   r      s   z!convert_values.<locals>.<genexpr>c                 3   s$   | ]}t | d pt|hV  qdS )r5   N)r+   r   )r   r#   r5   r   r   r      s   )r0   r   rL   r   r!   )r*   rE   rM   r$   r   )r$   rM   r   r7      s    r7   c                 C   s   |   rt| gS |  }|r&|  } |  }t|   }|d ksN|d krRtS | 	 }|rv|d }|d d }d}t|g}|D ]}|
|}q|rtdd |D }|r|
|}|S )Nr
   Tc                 s   s   | ]}|  r| V  qd S r   )r   r   r   r   r   r   r      s   zto_stub.<locals>.<genexpr>)r   r   r   r   r   rD   r   r/   r   r   r"   r!   )rO   r&   r'   r2   r(   r)   Zstub_valuesr3   r   r   r   rI      s0    



rI   N)F)F)F)FFT)FFT)Zjedir   Zjedi.inference.base_valuer   r   Zjedi.inference.utilsr   Z!jedi.inference.gradual.stub_valuer   Zjedi.inference.gradual.typeshedr   Zjedi.inference.value.decoratorr	   r+   r    rB   rD   rH   rN   r7   rI   r   r   r   r   <module>   s   
* $

