
    Mha1                        d Z ddlZddlZddlZddlZddlZddlmZ ddlm	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  e	            Zd
ZdZ ej        dd                    d eD                       z            Z ej        d          Zdedee         fdZ d Z!dede"fdZ#d Z$d#dedee         fdZ%d Z&d Z'd Z(d  Z)d! Z*d" Z+dS )$z\Implementations for various useful completers.

These are all loaded by default by IPython.
    N)import_module)all_suffixes)time)zipimporter   )expand_usercompress_user)TryNext   )	arg_split)get_ipython)List   z?(?P<name>[^\W\d]\w*?)(?P<package>[/\\]__init__)?(?P<suffix>%s)$|c              #   >   K   | ]}t          j        |          V  d S N)reescape).0ss     Y/var/www/html/test/jupyter/venv/lib/python3.11/site-packages/IPython/core/completerlib.py	<genexpr>r   :   s*       A A!1 A A A A A A    z.*(\.ipy|\.ipynb|\.py[w]?)$pathreturnc                   	 | dk    rd} t           j        j        t           j                            |           r{g }t          j        | d          D ]a\  }}}|t          |           dz   d         		r*|                    	fd|D                        g |dd<   L|                    |           bnG	 t          t          |           j	        
                                          }n# t          $ r g }Y nw xY wg }|D ]F}t                              |          }|r(|                    |                    d                     Gt          t!          |                    S )	z`
    Return the list containing the names of the modules available in the given
    folder.
     .T)followlinksr   Nc              3   0   K   | ]} |          V  d S r    )r   fpjoinsubdirs     r   r   zmodule_list.<locals>.<genexpr>X   s/      ??!UU61--??????r   name)osr   joinisdirwalklenextendlistr   _fileskeys	Exception	import_rematchappendgroupset)
r   filesrootdirsnondirsmodulesr"   mr#   r$   s
           @@r   module_listr;   D   s    rzz GLE	w}}T  #%74T#B#B#B 	& 	&D$#d))A+,,'F &?????w??????QQQW%%%%	&	T**1668899EE 	 	 	EEE	 G , ,OOA 	,NN1776??+++Gs   73C+ +C:9C:c                  n   t                      } | t          t          j                  S t	          | j        dd          ri }n| j                            di           }t          t          j                  }t                      }d}t          j        D ]}	 ||         }n# t          $ r t          |          }	 |                    d           n# t          $ r Y nw xY w|dvr|||<   t                      |z
  t          k    r@|s>d}t          d           t          d	           t          j                                         t                      |z
  t"          k    rt          d
           g cY c S Y nw xY w|                    |           |r
|| j        d<   t          t'          |                    }|S )z
    Returns a list containing the names of all the modules available in the
    folders of the pythonpath.

    ip.db['rootmodules_cache'] maps sys.path entries to list of modules.
    N_mockFrootmodules_cache__init__)r   r   Tz/
Caching the list of root modules, please wait!z@(This will only be done once - type '%rehashx' to reset cache!)
z%This is taking too long, we give up.
)r   r,   sysbuiltin_module_namesgetattrdbgetr   r   KeyErrorr;   remove
ValueErrorTIMEOUT_STORAGEprintstdoutflushTIMEOUT_GIVEUPr+   r4   )ipr>   rootmodules
start_timestorer   r9   s          r   get_root_modulesrQ   l   s    
B	z C,---rugu%% ?EII&92>>s/00KJE $ $	'-GG 	 	 	!$''Gz****   9$$*1!$'vv
"_44U4HIII ( ) ) )
  """vv
"^33>???					 43	" 	7#### 7%6!"s;''((Ks7   BE49CE4
CE4CBE43E4attrc                     |r7	 t          | |          }n# t          $ r Y dS w xY wt          j        |          S |d d         dk    o|dd          dk     S )NFr   __)rB   ModuleNotFoundErrorinspectismodule)modulerR   only_modulesmods       r   is_importabler\      s}     ;	&$''CC" 	 	 	55	 $$$8t#9RSS	T(9::s    
##c                     	 t          | |          }n# t          $ r Y dS t          $ r Y dS w xY wt          j        |          S )NTF)rB   AttributeError	TypeErrorrW   rX   )rY   rR   objs      r   is_possible_submodulera      sf    fd##   tt   uu C   s    
-	--Fr[   c                    |                      d          } 	 t          |           n	#  g cY S xY wdt          dd          pdv }g }t          d          rr|r/|                    fdt                    D                        t          dg           }r"|                    fd|D                        n|                    |           |rJj        }t          j        	                    |          }|"|                    t          |                     d	 |D             }|                    d           t          |          S )
zN
    Try to import given module and return list of potential completions.
    r   r?   __file__r   c                 6    g | ]}t          |          |S r!   )r\   )r   rR   r:   rZ   s     r   
<listcomp>ztry_import.<locals>.<listcomp>   s@     C C Cd*1dLAACT C C Cr   __all__c              3   <   K   | ]}t          |          |V  d S r   )ra   )r   rR   r:   s     r   r   ztry_import.<locals>.<genexpr>   s3      TTD5J1d5S5ST4TTTTTTr   Nc                 <    h | ]}t          |t                    |S r!   )
isinstancestrr   cs     r   	<setcomp>ztry_import.<locals>.<setcomp>   s'    DDDQAs1C1CDqDDDr   )rstripr   rB   hasattrr+   dirrc   r&   r   dirnamer;   discardr,   )	r[   rZ   	m_is_initcompletionsm_allfile_	file_pathcompletions_setr:   s	    `      @r   
try_importry      s    **S//C#			wq*b99?R@IKAz"" DL DY D C C C C Cc!ff C C C 	D 	D 	D Ay"%%E "TTTTETTTTTTT5!!! 7
GOOE**	 {955666DD+DDDOJ'''   s   ) /c                     t          t                    r                                fd}t                                          d||            dS )a   Easily create a trivial completer for a command.

    Takes either a list of completions, or all completions in string (that will
    be split on whitespace).

    Example::

        [d:\ipython]|1> import ipy_completers
        [d:\ipython]|2> ipy_completers.quick_completer('foo', ['bar','baz'])
        [d:\ipython]|3> foo b<TAB>
        bar baz
        [d:\ipython]|3> foo ba
    c                     S r   r!   )selfeventrt   s     r   do_completez$quick_completer.<locals>.do_complete   s	    r   complete_command)str_keyN)ri   rj   splitr   set_hook)cmdrt   r~   s    ` r   quick_completerr      si     +s## *!''))     MM-kSIIIIIr   c                    |                      d          }t          |          }|dk    r|d         dk    rdgS |dk     r|d         dv r|dk    rt                      S |d                              d          t                    d	k     rt                      S t          d                    d
d                   d          }fd|D             S |dk    r#|d         dk    r|d         t                    S d
S d
S )z
    Returns a list containing the completion possibilities for an import line.

    The line looks like this :
    'import xml.d'
    'from xml.dom import'
        r   fromzimport >   %aimportr   importr   r   r   NTc                 R    g | ]#}d                      dd         |gz             $S )r   Nr   )r'   )r   elr[   s     r   re   z%module_completion.<locals>.<listcomp>  s3    DDDbSbSRD))DDDr   )r   r*   rQ   ry   r'   )linewordsnwordscompletion_listr[   s       @r   module_completionr      s    JJsOOEZZF {{uQx6)){ zzuQx#AAAQ;;#%%%AhnnS!!s88a<<#%%%$SXXc#2#h%7%7>>DDDDODDDD {{uQx6))Ah# {))r   c                 *    t          |j                  S )z@Give completions after user has typed 'import ...' or 'from ...')r   r   r|   r}   s     r   module_completerr     s     UZ(((r   c                 x  	
 t          |j        d          }t          |          dk    r6|j                            d          s|d                             d          }nd}t
          j        }t          j        j        t          |          \  }	
t          d |D                       rfd	 ||d
z             D             }ndfd ||d
z             D             }d  ||dz              ||dz             z    ||dz             z    ||dz             z   D             }||z   }	
fd|D             S )zKComplete files that end in .py or .ipy or .ipynb for the %run command.
    F)strictr   r   r   z'"r   c              3   J   K   | ]}t                               |          V  d S r   )magic_run_rer1   rk   s     r   r   z&magic_run_completer.<locals>.<genexpr>7  s0      
0
0Q<a  
0
0
0
0
0
0r   c                 \    g | ](}|                     d d           |          rdndz   )S )\/r   replacer   r"   r(   s     r   re   z'magic_run_completer.<locals>.<listcomp>8  sM     9 9 9 ! IId3''%%((+B33C 9 9 9r   *c                 X    g | ]&} |          |                     d d          dz   'S r   r   r   r   s     r   re   z'magic_run_completer.<locals>.<listcomp>;  s9    RRRaqR		$s##c)RRRr   c                 :    g | ]}|                     d d          S r   r   r   r"   s     r   re   z'magic_run_completer.<locals>.<listcomp><  s<     E E E 		$s## E E Er   z*.pyz*.ipyz*.ipynbz*.pywc                 2    g | ]}t          |          S r!   r	   r   ptilde_expand	tilde_vals     r   re   z'magic_run_completer.<locals>.<listcomp>C  s%    GGG!M!\955GGGr   )r   r   r*   endswithstripglobr&   r   r(   r   any)r|   r}   compsrelpathlglobmatchesr7   pysr(   r   r   s           @@@r   magic_run_completerr   !  s    ej///EE

Q!4!4S!9!9)//%(( IEGME'27';';$G\9 
0
0%
0
0
000 	9 9 9 9%*U73;%7%79 9 9 SRRR553E3ERRRE Ewv~..ww1G1GGgi'(()+0571B+C+CDE E E * HGGGGwGGGGr   c           
      4   t                      }j        }j                            d          s	dj        v r3| j                            dd          }|r|                                S g S j        dk    rt          t          t          t          |j	        d                   dz                                 }d|z   d	z   fd
t          |j	        d                   D             }t          |          dk    r|S g S j                            d          rd |j	        d         D             S t          |          \  }|                    dd          }g }d t          j        |dz             D             D ]"}d|v rt          |                    |           #|set"          j                            |          rt)          |          gS | j                            di           }	fd|	D             }
|
r|
S t          fd|D             S )z:Completer function for cd, which only returns directories.z-bz -b 	bookmarksN-_dhr   z-%0zd [%s]c                 $    g | ]\  }}||fz  S r!   r!   )r   ir   fmts      r   re   z cd_completer.<locals>.<listcomp>X  s%    EEE1!uEEEr   --c                 R    g | ]$}d t           j                            |          z   %S )r   )r&   r   basename)r   ds     r   re   z cd_completer.<locals>.<listcomp>^  s-    FFFqrw''***FFFr   r   r   c                 ~    g | ]:}t           j                            |          !|                    d d          dz   ;S r   )r&   r   r(   r   r   s     r   re   z cd_completer.<locals>.<listcomp>e  sM     # # #Aq!!#aiiS!!C' # # #r   r   r   c                 H    g | ]}|                     j                  |S r!   )
startswithsymbol)r   r   r}   s     r   re   z cd_completer.<locals>.<listcomp>t  s,    BBB1q||EL'A'ABQBBBr   c                 2    g | ]}t          |          S r!   r   r   s     r   re   z cd_completer.<locals>.<listcomp>z  s%    EEE!M!\955EEEr   )r   r   r   r   rC   rD   r.   rj   r*   user_ns	enumerater   r   r   r   r
   r2   r&   r   r(   r	   )r|   r}   rM   r   bkmswidth_dhentsfoundr   bks	bkmatchesr   r   r   s    `         @@@r   cd_completerr   F  sF   	BlG z4   Fej$8$8w{{;-- 	99;;I|ss3s2:e#4559::;;<<h(EEEE	"*U2C(D(DEEEt99q==K	|t$$ GFFBJu4EFFFF (37';';$G\9ood3''GE# #73;1G1G # # #  !88 MQ 
7==!! 	E!'<CCDD gkk+b))BBBBBBB	 	EEEEEuEEEEr   c                 *    d                                 S )zA completer for %reset magicz-f -s in out array dhist)r   r   s     r   reset_completerr   |  s    %++---r   )F),__doc__r   rW   r&   r   r@   	importlibr   importlib.machineryr   r   	zipimportr   	completerr   r	   errorr
   utils._process_commonr   IPythonr   typingr   	_suffixesrH   rL   compiler'   r0   r   rj   r;   rQ   boolr\   ra   ry   r   r   r   r   r   r   r!   r   r   <module>r      sa   "   				 				 



 # # # # # # , , , , , ,       ! ! ! ! ! ! 2 1 1 1 1 1 1 1       - - - - - -             
 LNN	   BJ * yy A Ay A A AAAB C C	 rz899%c %d3i % % % %P, , ,^	; 	;d 	; 	; 	; 	;	! 	! 	!! !C !S	 ! ! ! !JJ J J.  J	) 	) 	)"H "H "HJ4F 4F 4Fl. . . . .r   