
    ` Ie                     J    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	y)zUtility functions.    Nc                  (   	 t        j                         } | d   | d   | d   | d   g}	 ddl}t	        |dd      r|j                         g}nt	        |d	d      r|j                  g}ng }||z   S # t        $ r g }Y Sw xY w# t        $ r	 g }Y ||z   S w xY w)
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       @/usr/lib/python3/dist-packages/spyder_kernels/customize/utils.pycreate_pathlistr      s    ##%/	*	*-)4.6 1134IT;. (II I%%)  "  	I%%s#   &A. A A? .A<;A<?BBc                 r   dt               vr
t               a|g }|t        z   }| yt        |D cg c]  }|| v  c}      ryt        j
                  dk(  rt        j                  d|       ryyt        j
                  dk(  s-g d}|D cg c]  }t        j                  ||       s| c}ryyyc c}w c c}w )zDDecide if a path is in user code or a library according to its path.DEFAULT_PATHLISTT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/.*)globalsr   r   anyosnameresearch)pathinitial_pathlistpathlistppatternss        r   path_is_libraryr"   2   s     **,"22H| 	*Aa4i*	+ 	D99_d+WW_
  6!299Q#5A69 +. 7s   B/	B4%B4c                    d}t        | j                        r)t        | j                  d   t        j                        rd}| j                  d   }t        j
                  dj                  t        |                  j                  d   }|j                  |_        |j                  |_	        |j                  |_
        t        j                  dd dk\  r^|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_Exprr=   c   s    $HMMx}}R(#((3"&MM"%	ii"))${*;<>>Bd1F &OO&--!*!5!5BQ6)%.%9%9K"!![%;%;;**i.F.F.JJ*-6-E-E*'b,,,    c                     | d| dd z   dz   k(  r| S t         j                  j                  |       }t         j                  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   rF   rF      sL     3!B'#--ggooh'Gggw'GNr>   )N)
__doc__r,   r   r   r4   r
   r   r"   r=   rF    r>   r   <module>rI      s/     
 	 	 
  &F.b-<r>   