
    
d                     L    d Z ddlZddlZddlZddlZddlZd ZddZd Zd Z	dS )zUtility functions.    Nc                  L   	 t          j                    } | d         | d         | d         | d         g}n# t          $ r g }Y nw xY w	 ddl}t	          |dd          r|                                g}nt	          |d	d          r	|j        g}ng }n# t          $ r g }Y nw xY w||z   S )
zd
    Create list of Python library paths to be skipped from module
    reloading and Pdb steps.
    stdlibpurelibscriptsdatar   NgetusersitepackagesF	USER_SITE)	sysconfig	get_paths	Exceptionsitegetattrr   r	   )pathsstandard_pathsr   	user_paths       >lib/python3.11/site-packages/spyder_kernels/customize/utils.pycreate_pathlistr      s    #%%/	*	*-)    
4.66 		 11334IIT;.. 	 (III   			 I%%s"   14 AAAB BBc                 @    dt                      vrt                      a|g }|t          z   } dS t           fd|D                       rdS t          j        dk    rt          j        d           rdS dS t          j        dk    sg d} fd	|D             rdS dS dS )
zDDecide if a path is in user code or a library according to its path.DEFAULT_PATHLISTNTc                     g | ]}|v S  r   .0ppaths     r   
<listcomp>z#path_is_library.<locals>.<listcomp>D   s    ***Aa4i***    ntz.*\\pkgs\\.*F)z^/usr/lib.*z^/usr/local/lib.*z^/usr/.*/dist-packages/.*z^/home/.*/.local/lib.*z^/Library/.*z^/Users/.*/Library/.*z^/Users/.*/.local/.*c                 >    g | ]}t          j        |          |S r   )researchr   s     r   r   z#path_is_library.<locals>.<listcomp>[   s*    666!29Q#5#56A666r   )globalsr   r   anyosnamer    r!   )r   initial_pathlistpathlistpatternss   `   r   path_is_libraryr)   2   s     ***,,"22H| t	*******	+	+  t	D9_d++ 	45W__
 
 
 7666x666 	45ur   c                 *   d}t          | j                  rt          | j        d         t          j                  rd}| j        d         }t          j        d                    t          |                              j        d         }|j        |_        |j	        |_	        |j
        |_
        t          j        dd         dk    rA|j        |_        |j	        |j        k    r|xj        |j        d	z
  z  c_        n|j        |_        || j        d<   | |fS )
zEParse line and modify code to capture in globals the last expression.FTzglobals()[{}] = Noner   N   )         )lenbody
isinstanceastExprparseformatreprvaluelineno
col_offsetsysversion_info
end_linenoend_col_offset)code_astout_varnamecapture_last_expression	expr_nodeassign_nodes        r   capture_last_ExprrD   c   s    $HM(x}R(#(33( #'M"%	i"))${*;*;<<> >>B1F &O&-!*!5BQB6))%.%9K"![%;;;**i.F.JJ***-6-E*'b,,,r   c                     | d| dd         z   dz   k    r| S t           j                            |           }t           j                            |          }|S )z
    Return canonical form of filename.

    This is a copy of bdb.canonic, so that the debugger will process 
    filenames in the same way
    <   r+   >)r$   r   abspathnormcase)filenamecanonics     r   rL   rL      sS     3!B$'#---gooh''Ggw''GNr   )N)
__doc__r3   r$   r    r;   r
   r   r)   rD   rL   r   r   r   <module>rN      s      



 				 				 



     &  &  &F. . . .b- - -<    r   