
    Ddg*                         d dl Z d dlZd dlmZ 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	Zd
Z	 dZ	 ddZd Zd Zd Zd Zd ZddZd Zd ZddZddZd Zd Z 	 d dZ!	 d!dZ"dS )"    N)python_bytes_to_unicode)dbg)KnownContentFileIOFolderIO)SubModuleName)load_module_from_path)ParserTreeFilter)convert_names)z.toxz.venvz.mypy_cachevenv__pycache__i      c              #      K   | D ]S}||v rt          |t                    s|V  |j        dk    r(t          |                                |           E d {V  Td S )Nmodule)
isinstancer   api_type_resolve_namesgoto)definition_namesavoid_namesnames      9lib/python3.11/site-packages/jedi/inference/references.pyr   r      s        E E; 	 $.. 	 JJJ=H$ 	E%diikk3CDDDDDDDDDE E    c                 4    t          d | D                       S )Nc              3   :   K   | ]}|j         |n|j         |fV  d S N)	tree_name.0ns     r   	<genexpr>z _dictionarize.<locals>.<genexpr>.   sH         k	2q{A6     r   )dict)namess    r   _dictionarizer$   -   s0           r   c           	          t          | |          }t          |          D ]J}|t          t          |g|                                                                 d                    z  }K|t          t          ||j                            z  }t          |          D ]T}|j        dk    s|j	        |j	        j
        j        dk    r*|t          t          |j        |j                            z  }Ut          t          |                    S )NF)
only_stubsprefer_stub_to_compiledparamtrailer)_find_nameslistsetr
   get_root_contextis_stub_find_global_variablesvaluer   r   parenttype_add_names_in_same_contextparent_contextstring_namer   )module_contextr   found_namesr   s       r   _find_defining_namesr8   4   s   ni88K[!!  s=F0022::<<<$)
 
 
   	 3-k9?KKLLLK[!! ^ ^=G# 	t~ 	>(-:	s5d6I4K[\\]]]~k**+++r   c                     |                      |          }t          |                                          }|                    |           t          t	          |                    S r   )create_namer,   r   addr   )r6   r   r   r7   s       r   r*   r*   H   sR    %%i00Ddiikk""KOOD~k**+++r   c              #      K   | j         d S d }	 t          | |          }t          |                    |                    }|sd S |E d {V  t	          |d           }|d         j        }_)NT)r4   until_positionc                     | j         S r   )	start_pos)xs    r   <lambda>z,_add_names_in_same_context.<locals>.<lambda>^   s    ak r   )keyr   )	tree_noder	   r,   getsortedr?   )contextr5   r=   filter_r#   ordereds         r   r3   r3   P   s       N
."")
 
 
 GKK,,-- 	E$9$9::: -
.r   c              #   .  K   | D ]}|j         
|                                }	 |j        } |                                |          D ];}|V  |                    |j                   }t          ||j                  E d {V  <# t          $ r Y w xY wd S r   )r   r-   get_global_filterrD   create_contextr3   r5   AttributeError)r#   search_namer   r6   methodglobal_namecs          r   r/   r/   b   s       R R> 	..00	R#5F  &vxx||K88 R R!!!!"11+2GHH5a9PQQQQQQQQQQR  	 	 	H	R Rs   B
BBFc                      j         }|j        }	 d|_        t           |          }d|_        n# d|_        w xY wt	          |           g}|sct          d |D                       D ]I}| k    rA|j        :|j        j        |	                                j
        v r|                    |           J|st          d |D                       r|}nt          |||          }i }	|D ]  j                                                            |g           D ]}
t	          t!           |
                    }t          fd|D                       r]                    |           |D ]D}|	                    |g           D ]}                    |           	 |	|= 5# t$          $ r Y Aw xY w|D ]+}|	                    |g                               |           ,ƌ                                }|r fd|D             S |S )NFTc              3   >   K   | ]}|                                 V  d S r   r-   )r   ds     r   r!   z"find_references.<locals>.<genexpr>   s.      ??aQ''))??????r   c              3   ,   K   | ]}|j         d k    V  dS )r(   N)r   r   s     r   r!   z"find_references.<locals>.<genexpr>   s)      HHqQZ72HHHHHHr   c              3       K   | ]}|v V  	d S r   r   )r   r   found_names_dcts     r   r!   z"find_references.<locals>.<genexpr>   s(      EEI9/EEEEEEr   c                 D    g | ]}|                                 k    |S r   rS   )r   r    r6   s     r   
<listcomp>z#find_references.<locals>.<listcomp>   s/    LLLaQ%7%7%9%9^%KLLLLr   )inference_stater0   flow_analysis_enabledr8   r$   r,   rC   projectpath
py__file__parentsappendany#get_module_contexts_containing_nameget_used_namesrD   r*   updateKeyError
setdefaultvalues)r6   r   only_in_moduleinfrM   r7   module_contextsmpotential_modulesnon_matching_reference_maps	name_leafnewdctr   resultrW   s   `              @r   find_referencesrr   r   s   

(C/K)$)!*>9EE$(!!D!((((#K00O%&O *??;????? 	* 	*AN" *q{ *(ALLNN,BB*&&q))) 
HHKHHHHH 
+?
 
 #%+ Q Q'1@@BBFF{TVWW 	Q 	QINI F FGGCEEEEEEEEE Q&&s+++!$  I:>>y"MM 4 4 (..s33337	BB#      Q QD/::4DDKKCPPPPQ	Q  ##%%F MLLLL6LLLLMs   1 	:F
F)	(F)	c                 >   	 |                                 }n# t          $ r Y d S w xY wt          |d          }|                    |          sd S t	          |j        |          }t          | |          }|                                rd S |                                S )Nreplace)errors)	readFileNotFoundErrorr   searchr   r]   r   is_compiled
as_context)rZ   file_ioregexcodenew_file_iork   s         r   	_check_fsr      s    ||~~   tt"4	:::D<< t$W\488Ko{;;A}} t<<>>s    
%%c                 &   t                      }t                      }|                                                                D ]}|r|                    d          r|                    dd          }|                    d          rq|dd          }|                    t          j        j                  r
|d d         }|	                    t          j        
                    | j        |                     |	                    |           ||fS )N   #zutf-8ignore/   )r,   rv   
splitlines
startswithdecodeendswithosr]   sepr;   join)	folder_ior{   ignored_pathsignored_nameslpr   s          r   gitignored_linesr      s    EEMEEM\\^^&&(( ! ! 	ALL&& 	HHWh''<< 	!QRR5D}}RW[)) !CRCybgll9>4@@AAAAa    -''r   c              #      K   t                    |                                 D ]f\  }}}|D ]?}|j        }|j        dv r
|vrd |fV  |j        dk    rt          ||          \  }}|z  @fd|D             |d d <   |D ]} | d fV  	gd S )N)z.pyz.pyiz
.gitignorec                 \    g | ](}|j         v|                                t          v&|)S r   )r]   get_base_name_IGNORE_FOLDERS)r   r   except_pathss     r   rY   z9recurse_find_python_folders_and_files.<locals>.<listcomp>   sQ     
 
 
~\1
 ''))@	

 
 
r   )r,   walkr]   suffixr   r   )	r   r   root_folder_io
folder_iosfile_iosr{   r]   r   r   s	    `       r   %recurse_find_python_folders_and_filesr      s	     |$$L090@0@ " ",
H 		. 		.G<D{o- (|+ (-'''yL( .$^W== -}-
 
 
 
'
 
 

111 $ 	" 	"IT/!!!!	"'" "r   c              #   B   K   t          | |          D ]\  } }||V  d S r   )r   )r   r   r{   s      r   recurse_find_python_filesr      s@      CI|\\  	7 	MMM r   c              #     K   |                                  }t                      }d |D             }|D ]}|                                j        }||                                }	 |j        t          fd|D                       r|v rnJt          ||          D ]}|j        |vr|V  |                               |                                }qd S )Nc                 6    g | ]}|                                 S r   r^   r   rk   s     r   rY   z2_find_python_files_in_sys_path.<locals>.<listcomp>   s     ===Q\\^^===r   Tc              3   B   K   | ]}                     |          V  d S r   )r   )r   r   r]   s     r   r!   z1_find_python_files_in_sys_path.<locals>.<genexpr>   s/      <<atq))<<<<<<r   )	get_sys_pathr,   	get_valuer{   get_parent_folderr]   ra   r   r;   )	rZ   rj   sys_pathr   yielded_pathsr6   r{   r   r]   s	           @r   _find_python_files_in_sys_pathr      s     ++--H55L==_===M) 6 6 **,,4 	--//		6>D<<<<8<<<<< @T 4YMM " "<}4 "!MMMT"""!3355I	6 6 6r   c              #   |   K   d |D             }t          t          | j        j                  |          E d {V  d S )Nc                 6    g | ]}|                                 S r   r   r   s     r   rY   z)_find_project_modules.<locals>.<listcomp>   s     777!q||~~777r   )r   r   r\   r]   )rZ   rj   except_s      r   _find_project_modulesr      sP      77777G(/2I2N)O)OQXYYYYYYYYYYYr   r   c              #      K   |D ]}|                                 r|V  t          |          dk    rdS t          | |          }t          | |||          E d{V  dS )z
    Search a name in the directories of modules.

    :param limit_reduction: Divides the limits on opening/parsing files by this
        factor.
       N)limit_reduction)ry   lenr   search_in_file_ios)rZ   rj   r   r   r6   file_io_iterators         r   rb   rb     s       *  %%'' 	 4yyA~ 
 -_oNN!/3CT2AC C C C C C C C C C C Cr   c              #   J  K   t           |z  }t          |z  }d}d}t          j        dt          j        |          z   |rdndz             }	|D ]U}
|dz  }t          | |
|	          }|"|dz  }|V  ||k    rt          d|            d S ||k    rt          d|            d S Vd S )Nr   z\b r   zHit limit of parsed files: %szHit limit of opened files: %s)_PARSED_FILE_LIMIT_OPENED_FILE_LIMITrecompileescaper   r   )rZ   r   r   r   completeparse_limit
open_limitfile_io_countparsed_file_countr|   r{   rk   s               r   r   r     s      $6K#o5JMJury.2L##uMNNE#  ow66 	"GGG K/ 3[AAAJ& 	/<<<EE	 r   )r   )F)r   )r   F)#r   r   parsor   
jedi.debugr   jedi.file_ior   r   jedi.inference.namesr   jedi.inference.importsr   jedi.inference.filtersr	   !jedi.inference.gradual.conversionr
   r   r   r   r   r$   r8   r*   r3   r/   rr   r   r   r   r   r   r   rb   r   r   r   r   <module>r      s   				 				 ) ) ) ) ) )       5 5 5 5 5 5 5 5 . . . . . . 8 8 8 8 8 8 3 3 3 3 3 3 ; ; ; ; ; ;I   E E E E   , , ,(, , ,. . .$R R R 3 3 3 3l  ( ( ($" " " "2   6 6 6*Z Z Z 9:C C C C8 49     r   